diff --git a/.agents/skills/source-command-code-review/SKILL.md b/.agents/skills/source-command-code-review/SKILL.md new file mode 100644 index 0000000..9a6d559 --- /dev/null +++ b/.agents/skills/source-command-code-review/SKILL.md @@ -0,0 +1,97 @@ +--- +name: "source-command-code-review" +description: "Code review a pull request" +--- + +# source-command-code-review + +Use this skill when the user asks to run the migrated source command `code-review`. + +## Command Template + +Provide a code review for the given pull request. + +To do this, follow these steps precisely: + +1. Use a Haiku agent to check if the pull request (a) is closed, (b) is a draft, (c) does not need a code review (eg. because it is an automated pull request, or is very simple and obviously ok), or (d) already has a code review from you from earlier. If so, do not proceed. +2. Use another Haiku agent to give you a list of file paths to (but not the contents of) any relevant AGENTS.md files from the codebase: the root AGENTS.md file (if one exists), as well as any AGENTS.md files in the directories whose files the pull request modified +3. Use a Haiku agent to view the pull request, and ask the agent to return a summary of the change +4. Then, launch 5 parallel Sonnet agents to independently code review the change. The agents should do the following, then return a list of issues and the reason each issue was flagged (eg. AGENTS.md adherence, bug, historical git context, etc.): + a. Agent #1: Audit the changes to make sure they compily with the AGENTS.md. Note that AGENTS.md is guidance for Codex as it writes code, so not all instructions will be applicable during code review. + b. Agent #2: Read the file changes in the pull request, then do a shallow scan for obvious bugs. Avoid reading extra context beyond the changes, focusing just on the changes themselves. Focus on large bugs, and avoid small issues and nitpicks. Ignore likely false positives. + c. Agent #3: Read the git blame and history of the code modified, to identify any bugs in light of that historical context + d. Agent #4: Read previous pull requests that touched these files, and check for any comments on those pull requests that may also apply to the current pull request. + e. Agent #5: Read code comments in the modified files, and make sure the changes in the pull request comply with any guidance in the comments. +5. For each issue found in #4, launch a parallel Haiku agent that takes the PR, issue description, and list of AGENTS.md files (from step 2), and returns a score to indicate the agent's level of confidence for whether the issue is real or false positive. To do that, the agent should score each issue on a scale from 0-100, indicating its level of confidence. For issues that were flagged due to AGENTS.md instructions, the agent should double check that the AGENTS.md actually calls out that issue specifically. The scale is (give this rubric to the agent verbatim): + a. 0: Not confident at all. This is a false positive that doesn't stand up to light scrutiny, or is a pre-existing issue. + b. 25: Somewhat confident. This might be a real issue, but may also be a false positive. The agent wasn't able to verify that it's a real issue. If the issue is stylistic, it is one that was not explicitly called out in the relevant AGENTS.md. + c. 50: Moderately confident. The agent was able to verify this is a real issue, but it might be a nitpick or not happen very often in practice. Relative to the rest of the PR, it's not very important. + d. 75: Highly confident. The agent double checked the issue, and verified that it is very likely it is a real issue that will be hit in practice. The existing approach in the PR is insufficient. The issue is very important and will directly impact the code's functionality, or it is an issue that is directly mentioned in the relevant AGENTS.md. + e. 100: Absolutely certain. The agent double checked the issue, and confirmed that it is definitely a real issue, that will happen frequently in practice. The evidence directly confirms this. +6. Filter out any issues with a score less than 80. If there are no issues that meet this criteria, do not proceed. +7. Use a Haiku agent to repeat the eligibility check from #1, to make sure that the pull request is still eligible for code review. +8. Finally, use the gh bash command to comment back on the pull request with the result. When writing your comment, keep in mind to: + a. Keep your output brief + b. Avoid emojis + c. Link and cite relevant code, files, and URLs + +Examples of false positives, for steps 4 and 5: + +- Pre-existing issues +- Something that looks like a bug but is not actually a bug +- Pedantic nitpicks that a senior engineer wouldn't call out +- Issues that a linter, typechecker, or compiler would catch (eg. missing or incorrect imports, type errors, broken tests, formatting issues, pedantic style issues like newlines). No need to run these build steps yourself -- it is safe to assume that they will be run separately as part of CI. +- General code quality issues (eg. lack of test coverage, general security issues, poor documentation), unless explicitly required in AGENTS.md +- Issues that are called out in AGENTS.md, but explicitly silenced in the code (eg. due to a lint ignore comment) +- Changes in functionality that are likely intentional or are directly related to the broader change +- Real issues, but on lines that the user did not modify in their pull request + +Notes: + +- Do not check build signal or attempt to build or typecheck the app. These will run separately, and are not relevant to your code review. +- Use `gh` to interact with Github (eg. to fetch a pull request, or to create inline comments), rather than web fetch +- Make a todo list first +- You must cite and link each bug (eg. if referring to a AGENTS.md, you must link it) +- For your final comment, follow the following format precisely (assuming for this example that you found 3 issues): + +--- + +### Code review + +Found 3 issues: + +1. (AGENTS.md says "<...>") + + + +2. (some/other/AGENTS.md says "<...>") + + + +3. (bug due to ) + + + +πŸ€– Generated with [Codex](https://Codex.ai/code) + +- If this code review was useful, please react with πŸ‘. Otherwise, react with πŸ‘Ž. + +--- + +- Or, if you found no issues: + +--- + +### Code review + +No issues found. Checked for bugs and AGENTS.md compliance. + +πŸ€– Generated with [Codex](https://Codex.ai/code) + +- When linking to code, follow the following format precisely, otherwise the Markdown preview won't render correctly: https://github.com/anthropics/Codex-cli-internal/blob/c21d3c10bc8e898b7ac1a2d745bdc9bc4e423afe/package.json#L10-L15 + - Requires full git sha + - You must provide the full sha. Commands like `https://github.com/owner/repo/blob/$(git rev-parse HEAD)/foo/bar` will not work, since your comment will be directly rendered in Markdown. + - Repo name must match the repo you're code reviewing + - # sign after the file name + - Line range format is L[start]-L[end] + - Provide at least 1 line of context before and after, centered on the line you are commenting about (eg. if you are commenting about lines 5-6, you should link to `L4-7`) diff --git a/.codex/agents/code-simplifier.toml b/.codex/agents/code-simplifier.toml new file mode 100644 index 0000000..4ab5e16 --- /dev/null +++ b/.codex/agents/code-simplifier.toml @@ -0,0 +1,49 @@ +description = "Simplifies and refines code for clarity, consistency, and maintainability while preserving all functionality. Focuses on recently modified code unless instructed otherwise." +developer_instructions = """ +You are an expert code simplification specialist focused on enhancing code clarity, consistency, and maintainability while preserving exact functionality. Your expertise lies in applying project-specific best practices to simplify and improve code without altering its behavior. You prioritize readable, explicit code over overly compact solutions. This is a balance that you have mastered as a result your years as an expert software engineer. + +You will analyze recently modified code and apply refinements that: + +1. **Preserve Functionality**: Never change what the code does - only how it does it. All original features, outputs, and behaviors must remain intact. + +2. **Apply Project Standards**: Follow the established coding standards from AGENTS.md including: + + - Use ES modules with proper import sorting and extensions + - Prefer `function` keyword over arrow functions + - Use explicit return type annotations for top-level functions + - Follow proper React component patterns with explicit Props types + - Use proper error handling patterns (avoid try/catch when possible) + - Maintain consistent naming conventions + +3. **Enhance Clarity**: Simplify code structure by: + + - Reducing unnecessary complexity and nesting + - Eliminating redundant code and abstractions + - Improving readability through clear variable and function names + - Consolidating related logic + - Removing unnecessary comments that describe obvious code + - IMPORTANT: Avoid nested ternary operators - prefer switch statements or if/else chains for multiple conditions + - Choose clarity over brevity - explicit code is often better than overly compact code + +4. **Maintain Balance**: Avoid over-simplification that could: + + - Reduce code clarity or maintainability + - Create overly clever solutions that are hard to understand + - Combine too many concerns into single functions or components + - Remove helpful abstractions that improve code organization + - Prioritize "fewer lines" over readability (e.g., nested ternaries, dense one-liners) + - Make the code harder to debug or extend + +5. **Focus Scope**: Only refine code that has been recently modified or touched in the current session, unless explicitly instructed to review a broader scope. + +Your refinement process: + +1. Identify the recently modified code sections +2. Analyze for opportunities to improve elegance and consistency +3. Apply project-specific best practices and coding standards +4. Ensure all functionality remains unchanged +5. Verify the refined code is simpler and more maintainable +6. Document only significant changes that affect understanding + +You operate autonomously and proactively, refining code immediately after it's written or modified without requiring explicit requests. Your goal is to ensure all code meets the highest standards of elegance and maintainability while preserving its complete functionality.""" +name = "code-simplifier" diff --git a/.codex/config.toml b/.codex/config.toml new file mode 100644 index 0000000..6c9937a --- /dev/null +++ b/.codex/config.toml @@ -0,0 +1,23 @@ +[mcp_servers.context7] +args = [ + "-y", + "@upstash/context7-mcp", +] +command = "npx" + +[mcp_servers.playwright] +args = [ + "-y", + "@playwright/mcp@latest", + "--headless", +] +command = "npx" + +[mcp_servers.playwright.tools.browser_navigate] +approval_mode = "approve" + +[mcp_servers.playwright.tools.browser_evaluate] +approval_mode = "approve" + +[mcp_servers.playwright.tools.browser_click] +approval_mode = "approve" diff --git a/.gitignore b/.gitignore index 3d14c6a..a76eebf 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,18 @@ state/ *.tmp .tmp/ +# NAS emulator (tests/docker/) β€” keep the layout, ignore generated state +tests/docker/nas-data/* +!tests/docker/nas-data/.gitkeep + +# Local secrets / env (never commit) +.env +.env.* +# ...but the committed templates carry no secrets. +!.env.example +!tests/docker/.env.example +*.secret + # pre-commit cache .pre-commit-cache/ diff --git a/.mcp.json b/.mcp.json index 6e2077f..530da8a 100644 --- a/.mcp.json +++ b/.mcp.json @@ -6,7 +6,7 @@ }, "playwright": { "command": "npx", - "args": ["-y", "@playwright/mcp@latest", "--headless"] + "args": ["-y", "@playwright/mcp@latest"] } } } diff --git a/README.md b/README.md index 2202e19..29ac1cb 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,24 @@ workflow additionally verifies the LIMS client against a live upstream [`mcnaughtonadm/exlab`](https://gitlab.com/mcnaughtonadm/exlab) container weekly and on every merge to `main`. +## NAS sync setup + +ExLab-Wizard syncs runs to your NAS via [rclone](https://rclone.org/) named +remotes. The app never stores NAS passwords β€” you configure the remote once +with `rclone config` and wire the remote name into `config.yaml`: + +```yaml +nas: + remote: "lab-nas" # name you gave the remote in rclone config + base_root: "lab" # path on the remote under which equipment folders live +``` + +Step-by-step instructions (SFTP and SMB walkthroughs, performance tuning, +tray-service caveats): **[`docs/setup/rclone-remote-setup.md`](docs/setup/rclone-remote-setup.md)**. + +Settings β†’ **NAS Remote** β†’ **Test connection** verifies the remote is +reachable before you start syncing. + ## Documentation The published Sphinx site is at @@ -120,5 +138,6 @@ Local sources: - Operator-facing user guide: `docs/source/user_guide/` (rendered via Sphinx; `make -C docs html` writes the site to `docs/build/html/`). - Plugin authoring guide: `docs/source/plugin_guide/`. +- Setup guides: `docs/setup/` (rclone remote setup, etc.). - Design specs: `design_specs/` (the authoritative source for capability scope, interfaces, and wire contracts). diff --git a/design_specs/ExLab-Wizard_Design_Spec.md b/design_specs/ExLab-Wizard_Design_Spec.md index 441bb22..4c6483d 100644 --- a/design_specs/ExLab-Wizard_Design_Spec.md +++ b/design_specs/ExLab-Wizard_Design_Spec.md @@ -96,7 +96,7 @@ Defines the class-based `Plugin` contract (lifecycle hooks: `validate_variables` Moved to [[design_spec_sections/07_Sync_and_Database_Integration]]. -Covers NAS mirror behavior, the LIMS record schema, and the Pre-Sync Gate that consumes validator findings to block flagged runs from sync. +Covers NAS sync via operator-managed rclone named remotes (`RcloneDriver`), the two-tier verify model (cheap `rclone lsjson` reconcile after each push + `rclone check --download` hash gate at cleanup), bandwidth limiting, the LIMS record schema, and the Pre-Sync Gate that consumes validator findings to block flagged runs from sync. --- @@ -112,7 +112,7 @@ Top-level error handling principles plus the Β§8.1 path validation rules: unreso Moved to [[design_spec_sections/09_Configuration_File]]. -Full annotated `config.yaml` example: paths, database, README defaults, equipment registry (with transports and completeness signals), sync, and orchestrator settings. +Full annotated `config.yaml` example: paths, database, README defaults, equipment registry (id/label/local_root/nas_root/sync_mode only β€” no per-equipment transport block), the top-level `nas:` block (remote name, base_root, rclone_config_path, mtime_tolerance_s, perf, bandwidth), sync, and orchestrator settings (including staging_remote/staging_base_root for the stage-mode hop). --- diff --git a/design_specs/ExLab-Wizard_Frontend_Spec.md b/design_specs/ExLab-Wizard_Frontend_Spec.md index ec9ad82..d56b4cb 100644 --- a/design_specs/ExLab-Wizard_Frontend_Spec.md +++ b/design_specs/ExLab-Wizard_Frontend_Spec.md @@ -817,7 +817,7 @@ When the operator tries to advance with an empty core field, the error message m The Settings dialog is the operator's surface for configuring everything in `config.yaml` and the OS-keyring credentials it references. User capability: "Configure Equipment, Paths, and Integrations" (User Interaction Spec Section 3.6); backend-side schemas live in Design Spec Β§9. -**Important: no plaintext credentials anywhere in this dialog.** All secrets (LIMS password, the rare per-equipment NAS HTTP-basic password) are managed via the OS keyring (Design Spec Β§7.4); the dialog never displays a stored secret. +**Important: no plaintext credentials anywhere in this dialog.** The only secret the app manages is the LIMS password, stored in the OS keyring (Design Spec Β§7.4); the dialog never displays a stored secret. NAS credentials live entirely in the operator's `rclone.conf` (Design Spec Β§7.1.8); the app only stores and displays the remote name. ### 7.1 Modality @@ -852,7 +852,7 @@ Switching sections does NOT discard a section's edits β€” the working copy persi #### 7.4.1 Credential field -Used for the LIMS password (Β§7.6) and per-equipment HTTP-basic NAS passwords where the configured transport requires one (Β§7.7.2). Never displays a stored value. +Used for the LIMS password (Β§7.6). Never displays a stored value. A credential row has two resting states and one transient state: @@ -941,27 +941,16 @@ Modal-on-modal sub-dialog. Scrollable single-column form. Primary button: **Done **Storage group** - **Local root.** Directory picker; backs `local_root`. -- **NAS root** (display value). Text input; backs `nas_root`. Helper: *"Display path shown in the UI. The actual transport target is configured below."* - -**Transport group** - -- **Transport type.** Radio: `rclone` / `rsync_ssh`. Switching this resets the conditional fields below to their defaults and dirties the form. -- For `rclone`: - - **Remote name.** Single-line input. Helper: *"Remote name from `rclone.conf`. To set up a new remote, run `rclone config` from a terminal β€” this app does not edit `rclone.conf`."* - - **Remote path.** Single-line input. -- For `rsync_ssh`: - - **SSH target.** Single-line input (e.g. `labuser@nas01.lab.example`). - - **SSH key path.** File picker, default `~/.ssh/id_ed25519`. Helper: *"Password authentication is not supported. The key file must be present and have safe permissions."* - - **Remote path.** Single-line input. -- **(Optional) NAS HTTP-basic password.** Credential field (Β§7.4.1), suppressed by default and shown only when the configured transport requires one. +- **NAS root** (display value). Text input; backs `nas_root`. Helper: *"Display path shown in the browse view. The actual sync target is composed from `nas.remote` + `nas.base_root` + equipment ID (see the NAS Remote section)."* +- **Sync mode.** Radio: `nas` / `stage`. `nas` syncs runs directly to the NAS remote; `stage` pushes to the orchestrator staging remote. **Bandwidth group.** See Β§7.7.3. -**[Test connection]** button at the bottom of the sub-dialog. For `rclone`, runs `rclone lsd :` against the working-copy values. For `rsync_ssh`, opens an SSH connection and runs `ls `. Result panel per Β§7.4.2. +**[Test connection]** is in the top-level **NAS Remote** section (not per-equipment). It runs `rclone about :` against the global `nas.remote` value and displays the result per Β§7.4.2. #### 7.7.3 Bandwidth schedule editor -Inside the equipment sub-dialog, in the Bandwidth group. Backs `transport.bandwidth` (Design Spec Β§9). +Inside the Settings NAS Remote section. Backs `nas.bandwidth` (Design Spec Β§9). **Mode selector** (radio): diff --git a/design_specs/design_spec_sections/04_Backend_Architecture.md b/design_specs/design_spec_sections/04_Backend_Architecture.md index 559c761..413cab4 100644 --- a/design_specs/design_spec_sections/04_Backend_Architecture.md +++ b/design_specs/design_spec_sections/04_Backend_Architecture.md @@ -397,7 +397,7 @@ The HTTP API and WebSocket channels are the only contract between the frontend ( | `PUT` | `/api/v1/config` | Validate + persist new config. Returns 422 on validation failure with per-field errors. | | `GET` | `/api/v1/setup/status` | Setup-state and what's missing. Always available. See Β§4.9.3. | | `POST` | `/api/v1/setup/test-lims` | Probes LIMS reachability with the currently-configured (or supplied) credentials. | -| `POST` | `/api/v1/setup/test-equipment` | Probes the per-equipment NAS transport (rclone or rsync_ssh). | +| `POST` | `/api/v1/setup/test-nas-remote` | Probes the configured `nas.remote` via `rclone about :`. | | `POST` | `/api/v1/setup/autostart` | Register or unregister the platform autostart entry. Body: `{ "enabled": }`. Calls `tray/autostart.py`; see Β§4.9.5 step 0 and Β§15.7. | | `GET` | `/api/v1/health` | Component-health rollup. Always available. See Β§4.6.3. | @@ -616,7 +616,9 @@ The app maintains a single computed enum at startup (and after every `PUT /api/v |---|---| | `INCOMPLETE_NO_CONFIG` | `config.yaml` does not exist at the OS-appropriate path ([[09_Configuration_File|Β§9]]). | | `INCOMPLETE_MISSING_PATHS` | `config.yaml` exists but `paths.local_root`, `paths.templates_dir`, or `paths.plugin_dir` is unset, missing, or unreadable. | -| `INCOMPLETE_NO_EQUIPMENT` | Paths are valid but the `equipment` list is empty. | +| `INCOMPLETE_NO_ORCHESTRATOR` | Paths are valid but `orchestrator.label` is unset (the workstation identity stamped into every run's `creation.json`). `orchestrator.staging_root` is opt-in and does not gate. Next action: `set_paths`. | +| `INCOMPLETE_NO_EQUIPMENT` | Paths and orchestrator identity are valid but the `equipment` list is empty. | +| `INCOMPLETE_NO_NAS_REMOTE` | Equipment is configured and at least one entry uses `sync_mode: nas`, but `nas.remote` is blank or not present in `rclone listremotes` output. Next action: `configure_rclone_remote`. See `docs/setup/rclone-remote-setup.md`. | | `INCOMPLETE_NO_LIMS` | Equipment is configured but `lims.endpoint` or `lims.email` is unset, OR the keyring/encrypted-store has no password under `(service="exlab-wizard", username="lims")`. | | `INCOMPLETE_LIMS_UNREACHABLE` | LIMS configuration is complete but `LIMSClient.health_check()` fails on startup. (This is a soft block; setup proceeds, but operator sees a banner. See Β§4.9.4.) | | `READY` | Every preceding gate passes. | @@ -633,7 +635,7 @@ While in any `INCOMPLETE_*` state: | `GET /api/v1/config` | Returns current `config.yaml` (sanitized β€” secrets never returned). Always available. | | `PUT /api/v1/config` | Validates and persists. On success, re-evaluates setup state and returns the new state. Always available. | | `POST /api/v1/setup/test-lims` | Triggers `LIMSClient.health_check()` against the currently-configured (but possibly not-yet-saved) LIMS settings. Used by the Settings dialog's "Test connection" affordance. | -| `POST /api/v1/setup/test-equipment` | Triggers a transport probe (`rclone lsd :` or `ssh -o BatchMode=yes true`) against an equipment configuration. | +| `POST /api/v1/setup/test-nas-remote` | Triggers `rclone about :` against the configured `nas.remote`. | | `GET /api/v1/health` | Always available. See Β§4.6.3. | | `POST /api/v1/sessions` (creation flow) | Returns `503 Service Unavailable` with `error.code: "setup_incomplete"`, `error.state: `, `error.missing: [...]`. The Wizard UI is expected to consult `/setup/status` first and surface the onboarding flow. | | `GET /api/v1/problems`, `GET /api/v1/tree`, etc. | Same: 503 with `setup_incomplete`. | @@ -654,7 +656,7 @@ Once `READY`, all endpoints work as specified elsewhere. No endpoint behavior de } ``` -When `ready: true`, the response is `{ "state": "READY", "missing": [], "next_action": null, "ready": true }`. The `next_action` is one of `set_paths`, `add_equipment`, `configure_lims`, `test_lims`, or `null`; the onboarding UI uses it to decide which step to render. +When `ready: true`, the response is `{ "state": "READY", "missing": [], "next_action": null, "ready": true }`. The `next_action` is one of `set_paths`, `add_equipment`, `configure_rclone_remote`, `configure_lims`, `test_lims`, or `null`; the onboarding UI uses it to decide which step to render. ### 4.9.4 LIMS unreachability is a soft block @@ -668,7 +670,7 @@ The onboarding flow is a frontend concern (Frontend Spec Β§3.1), but the backend 0. **(First-launch only) Autostart prompt.** The welcome card (Frontend Β§3.1.3) asks the operator whether to register ExLab-Wizard to start at user login. The operator's answer is persisted via `POST /api/v1/setup/autostart` (body: `{ "enabled": }`), which calls `tray/autostart.py` to register or unregister the platform-specific autostart entry (Β§4.3.2, Β§15.7). The toggle defaults to **on**; both the welcome card's primary "Get started" button and the secondary "Skip for now" link send the operator's current toggle state to the endpoint, so there is no path that dismisses the prompt without sending. Reversible from `Settings β†’ Application` at any time. 1. Set `paths.local_root`, `paths.templates_dir`, `paths.plugin_dir`. Bundled starter templates are copied into `paths.templates_dir` if the operator agrees ([[15_Distribution#15.4 Bundled Starter Content|Β§15.4]]). -2. Add at least one equipment with a transport configuration. The "Test connection" button verifies the transport works before saving. +2. Add at least one equipment entry. Configure the `nas.remote` field in `config.yaml` to point at a named remote in `rclone.conf` (see `docs/setup/rclone-remote-setup.md`). Settings β†’ "NAS Remote" β†’ "Test connection" runs `rclone about :` to verify the remote is reachable before saving. 3. Set LIMS endpoint and operator email. Set the LIMS password via the keyring affordance (Settings dialog or onboarding equivalent). Alternatively, set `lims.offline_catalogue_path` for an offline workstation (Β§7.2.9). 4. (Optional) Test LIMS connection. Even on failure, setup is complete; the LIMS-unreachable banner appears in the main UI. diff --git a/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md b/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md index b476a3e..03578e2 100644 --- a/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md +++ b/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md @@ -22,11 +22,11 @@ All four components below are Python objects inside the FastAPI app process. The β”‚ β”‚ NAS sync module (NASSyncClient + workers) β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ -β”‚ β”‚ β”‚ Durable Job Queue β”‚ β”‚ Transport Drivers β”‚ β”‚ β”‚ -β”‚ β”‚ β”‚ (SQLite at β”‚ β”‚ - rclone β”‚ β”‚ β”‚ -β”‚ β”‚ β”‚ {state_dir}/ β”‚ β”‚ - rsync-over-ssh β”‚ β”‚ β”‚ -β”‚ β”‚ β”‚ sync_queue.db) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ -β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ +β”‚ β”‚ β”‚ Durable Job Queue β”‚ β”‚ RcloneDriver β”‚ β”‚ β”‚ +β”‚ β”‚ β”‚ (SQLite at β”‚ β”‚ - copy - check β”‚ β”‚ β”‚ +β”‚ β”‚ β”‚ {state_dir}/ β”‚ β”‚ - lsjson - about β”‚ β”‚ β”‚ +β”‚ β”‚ β”‚ sync_queue.db) β”‚ β”‚ - listremotes β”‚ β”‚ β”‚ +β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β”‚ β”‚ Verifier (SHA-256) β”‚ β”‚ Cleanup Reaper β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ @@ -34,9 +34,9 @@ All four components below are Python objects inside the FastAPI app process. The β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` -The queue's SQLite file is durable so a server restart does not lose pending or in-flight syncs; the queue itself is just a table the in-process module reads and writes. The transport driver is selected per-equipment from `config.yaml` `equipment.transport.type` ([[09_Configuration_File|Β§9]]); valid values for v1 are `"rclone"` and `"rsync_ssh"`. The previous `"smb_mount"` and `"file_transfer"` transport types from the orchestrator topology ([[13_Equipment_to_Orchestrator_Data_Flow|Β§13]]) describe how data lands in *staging*; the NAS sync module's transport choice is independent and describes the staging-or-local-to-NAS hop. +The queue's SQLite file is durable so a server restart does not lose pending or in-flight syncs; the queue itself is just a table the in-process module reads and writes. The sole transport driver for v1 is `RcloneDriver` β€” a thin wrapper around the `rclone` binary ([[09_Configuration_File|Β§9]], `nas:` block). Connection details and credentials live entirely in the operator's `rclone.conf`; the app references remotes by name only. Both the NAS leg (for `sync_mode: nas` equipment) and the orchestrator staging leg (for `sync_mode: stage` equipment) use the same `RcloneDriver` methods, with the target composed from the appropriate remote name and base root. -When the rclone or rsync transport drivers shell out to the upstream binary, that subprocess is a child of the app process β€” also not a separate "service." It runs for the duration of one transfer and exits. +When the `RcloneDriver` shells out to the `rclone` binary, that subprocess is a child of the app process β€” also not a separate "service." It runs for the duration of one transfer and exits. ### 7.1.2 Job lifecycle @@ -60,26 +60,74 @@ QUEUED β†’ RUNNING β†’ AWAITING_VERIFY β†’ VERIFIED β†’ CLEANUP_ELIGIBLE β†’ CLE Job rows persist across restarts. On startup, NASSync requeues any `RUNNING` or `AWAITING_VERIFY` jobs (treating them as `QUEUED` and `VERIFIED β†’ AWAITING_VERIFY` respectively, since transport may have completed but verification didn't run). -### 7.1.3 Transport drivers +### 7.1.3 Transport driver (`RcloneDriver`) + +The sole transport for v1 is `RcloneDriver` (`exlab_wizard.sync.transports.rclone`), +a thin wrapper around the `rclone` binary. The driver exposes four operations: + +| Method | Command | Purpose | +|---|---|---| +| `push` | `rclone copy --checksum [--files-from F] :` | Push local run to the named remote | +| `check` | `rclone check --download --files-from F --combined :` | Stream remote files back and hash locally (pre-deletion integrity gate) | +| `lsjson` | `rclone lsjson -R :` | List remote subtree (routine post-push reconcile; read-only) | +| `about` | `rclone about : --json` | Probe reachability + free-space (Settings "Test connection") | + +**Named-remote model.** The connection (host, credentials, backend type) is defined entirely by a named remote in the operator's `rclone.conf` (set up with `rclone config`; see `docs/setup/rclone-remote-setup.md`). The driver injects no credentials and never sees a password. It only passes `--config ` when `nas.rclone_config_path` is set; otherwise rclone uses its default config-discovery path. + +**Target composition.** The run target is `:///`. For `sync_mode: nas` equipment, `remote` and `base_root` come from the `nas:` block. For `sync_mode: stage` equipment, they come from `orchestrator.staging_remote` and `orchestrator.staging_base_root`. Both legs share `nas.rclone_config_path` as the `--config` override (both remotes live in the same `rclone.conf`); only the parallelism dial differs (`nas.perf` vs `orchestrator.staging_perf`). + +**Parallelism.** `--transfers` and `--checkers` are forwarded from the relevant `perf` block. On space- and RAM-constrained acquisition machines, lowering these values bounds peak memory (rclone buffers per-stream data in RAM). + +**Bandwidth.** `--bwlimit K` is forwarded when `nas.bandwidth.upload_mbps` is set and the current local time falls inside any configured schedule window (see Β§7.1.7). The schedule is evaluated at push time in the workstation's local time zone. + +Driver stderr/stdout is logged to the equipment-level `wizard..log` so transfer failures are diagnosable from the cache log alone. + +### 7.1.4 Verify flow (lsjson reconcile + cleanup-time hash gate) -Each driver is a thin wrapper around the upstream tool: +The verify model has two tiers β€” a cheap routine reconcile after every push, and +an expensive content-hash gate run exactly once immediately before local deletion. -**rclone driver.** Shells out to `rclone copy --checksum :` with `--transfers ` and `--bwlimit ` driven by config (Β§7.1.7). The remote name is configured per-equipment as `equipment.transport.rclone_remote` (e.g. `"lab-nas"`) and resolved against the operator's `rclone.conf` (default `~/.config/rclone/rclone.conf`). NASSync does not write `rclone.conf`; it expects IT to provision it once per machine. Credentials referenced by `rclone.conf` (S3 keys, SMB passwords, etc.) are managed by rclone and outside our keyring scope. +**Routine post-push reconcile (`rclone lsjson`, read-only).** +After the transport reports push success the job moves to `AWAITING_VERIFY`. The +sync worker calls `rclone lsjson -R ` to list the remote run subtree, +parses the result into a `RemoteManifest` (keyed by run-relative POSIX path), and +credits each file when **all** of the following hold: -**rsync-over-SSH driver.** Shells out to `rsync -a --checksum --partial -e "ssh -i " / @:/` with optional `--bwlimit=`. The SSH key path is `equipment.transport.ssh_key_path` (default `~/.ssh/id_ed25519`); the `@` is `equipment.transport.ssh_target`. Authentication is **key-based only**; password authentication is rejected by config validation. The SSH key file lives under standard SSH file permissions; no app-managed credential is stored. +1. The remote entry is present. +2. Its `Size` equals the local file size. +3. Its `ModTime` is within `nas.mtime_tolerance_s` (default 2 s) of the local + `st_mtime` (absorbs SFTP/SMB modtime rounding). -Both drivers stream stderr/stdout into the equipment-level `wizard..log` with structured prefixes so transfer failures are diagnosable from the cache log alone. Transfer progress (bytes-per-second, current file, ETA) is published to the controller's WebSocket via `phase: "queueing_nas_sync"` progress frames. +Files that pass all three checks are recorded in `sync_state.json` with +`verified_at` and a local SHA-256 captured before the push (`verified_sha256`). +Files that do not reconcile cause the job to re-queue (no backoff) so the next +sweep re-pushes and re-reconciles the laggards. Once every file in the job +reconciles, the job advances to `VERIFIED` and `creation.json` `sync_status` +flips to `"synced"`. (No LIMS write per run in v1; see [[#7.2 LIMS Integration|Β§7.2.7]].) -### 7.1.4 Hash verification +**Pre-deletion integrity gate (`rclone check --download`, content-hash).** +The expensive download-and-hash verify runs **only** immediately before local +deletion inside the `_maybe_cleanup` path. Two stages over the tracked files: -After the transport reports success the job moves to `AWAITING_VERIFY`. The verifier: +1. A cheap `rclone lsjson` existence probe confirms every tracked file is present + remotely; any missing file defers the run in `CLEANUP_ELIGIBLE`. +2. `rclone check --download --files-from --combined ` streams each + remote file back and computes its SHA-256 locally (the only reliable way to + integrity-check SFTP and SMB backends, which expose no server-side hashing). + **No *data* files are staged to disk** β€” rclone streams and hashes remote + bytes in memory. Only two small, immediately-cleaned-up tempfiles (the + `--combined` output and the `--files-from` list) touch disk, so disk cost is + β‰ˆ 0 regardless of run size. Any transport error, missing file, or hash + mismatch defers the run in `CLEANUP_ELIGIBLE` rather than deleting. -1. Walks the local subtree, computing SHA-256 for every file. -2. Walks the remote subtree (via the same transport: `rclone hashsum sha256` for rclone, `ssh "find ... -exec sha256sum {} +"` for rsync). For rsync targets where invoking remote shell commands is restricted, the verifier falls back to `rclone`-style streaming download-and-hash bounded by `verify.max_stream_bytes` (configurable, default 1 GiB per file; oversize files emit a `verify_skipped_oversize` finding into the job log and require manual resolution). -3. Compares both hash sets pairwise. Mismatch on any file marks the job `FAILED` with the offending paths logged. -4. Writes the hash manifest into the run's `.exlab-wizard/checksums.sha256` (already referenced from `ingest.json` schema in Β§13.4) so a later out-of-band verification can re-confirm. +This design means a run's data is hashed exactly once from the remote before any +irreversible local deletion. The `rclone check --download` call is also available +via the Settings "verify integrity" action (`force_verify`), which reports +mismatches without advancing the queue state. -A successful verifier run transitions the job to `VERIFIED` and updates `creation.json` `sync_status` to `"synced"` via `CacheWriter.update_creation_atomic`. (No LIMS write per run in v1; the LIMS-side mirror returns in v1.x β€” see [[#7.2 LIMS Integration|Β§7.2.7]].) +**What is NOT done per push:** no full re-download or remote SHA lookup after +every push. The routine reconcile is metadata-only (`lsjson`); the content-hash +gate runs at most once per run, at cleanup time. ### 7.1.5 Retry policy @@ -107,27 +155,28 @@ The cleanup reaper logs every deletion to the equipment-level `wizard. ### 7.1.7 Bandwidth limiting -Optional, per-equipment, in `config.yaml`: +Global, under the top-level `nas:` block (not per-equipment): ```yaml -equipment: - - id: "CONFOCAL_01" - transport: - type: "rclone" - rclone_remote: "lab-nas" - bandwidth: - upload_mbps: 50 # null or absent disables limiting - schedule: # optional; if set, upload_mbps applies during the listed windows only - - { days: ["mon", "tue", "wed", "thu", "fri"], from: "08:00", to: "18:00" } +nas: + bandwidth: + upload_mbps: 50 # null or absent disables limiting + schedule: # optional; if set, upload_mbps applies during the listed windows only + - { days: ["mon", "tue", "wed", "thu", "fri"], from: "08:00", to: "18:00" } ``` -`upload_mbps` translates to `--bwlimit ` for rclone (where K = `upload_mbps * 1024 / 8` KiB/s) and `--bwlimit=` for rsync. Outside the configured schedule windows (or when no schedule is set and no `upload_mbps`), the transport runs unthrottled. The schedule is evaluated in the workstation's local time zone. +`upload_mbps` translates to `--bwlimit K` for rclone (where K = `upload_mbps * 1024 / 8` KiB/s). Outside the configured schedule windows (or when no schedule is set and no `upload_mbps`), the transport runs unthrottled. The schedule is evaluated in the workstation's local time zone. This addresses the acquisition-machine network-sharing concern: instrument control planes and acquisition data often share a NIC, and a saturated upstream during acquisition is a data-integrity risk. Bandwidth limiting + schedule lets the lab cap NASSync to off-peak hours. ### 7.1.8 Credential storage -NASSync credential storage is governed by Β§7.4 (the unified keyring model). Briefly: rsync uses SSH-key auth with no app-managed credential; rclone delegates to its own `rclone.conf`. The only NASSync-managed credential is the rare case of HTTP basic auth against an SMB-via-WebDAV endpoint, which is stored under keyring service `exlab-wizard` username `nas:`. +NASSync manages **no NAS credentials**. Connection details (host, user, password, +SSH key, etc.) live entirely in the operator's `rclone.conf`, managed by rclone. +The app never sees a password; it only passes `--config ` when +`nas.rclone_config_path` is set. The only credential the app manages is the LIMS +password (Β§7.4). See `docs/setup/rclone-remote-setup.md` for the rclone setup +walkthrough. ### 7.1.9 What NASSync does not do @@ -423,9 +472,7 @@ No secret material is ever written to `config.yaml`, the cache, or the wizard lo | Component | Service | Username | Secret value | |---|---|---|---| | LIMS | `exlab-wizard` | `lims` | The API credential as the LIMS expects it (token, password, etc.) | -| NASSync (per-equipment, only for HTTP-basic edge case) | `exlab-wizard` | `nas:` | The HTTP-basic password | -| NASSync via rclone | (none) | (none) | rclone manages its own credentials in `rclone.conf`; we do not duplicate | -| NASSync via rsync-over-SSH | (none) | (none) | SSH key on disk under standard SSH file permissions | +| NASSync | (none) | (none) | NAS credentials live entirely in `rclone.conf`; the app never manages them | Conventions: diff --git a/design_specs/design_spec_sections/09_Configuration_File.md b/design_specs/design_spec_sections/09_Configuration_File.md index db91de8..f051d7b 100644 --- a/design_specs/design_spec_sections/09_Configuration_File.md +++ b/design_specs/design_spec_sections/09_Configuration_File.md @@ -12,7 +12,7 @@ App-level config lives in a single `config.yaml` in the user's app data director | Windows | `%APPDATA%\exlab-wizard\config.yaml` | | Linux | `$XDG_CONFIG_HOME/exlab-wizard/config.yaml` (falls back to `~/.config/exlab-wizard/config.yaml`) | -`config.yaml` contains **no secrets**. Every credential the app needs is stored in the OS keyring (Β§7.4); `config.yaml` references credentials by their keyring service+username pair only. +`config.yaml` contains **no secrets**. NAS connection details and credentials live entirely in the operator's `rclone.conf` (set up separately with `rclone config`; see `docs/setup/rclone-remote-setup.md`). The only secret the app manages is the LIMS password, which is stored in the OS keyring (Β§7.4); `config.yaml` references it by keyring service+username pair only. **YAML library.** `config.yaml` is read AND written by the app (the Settings UI's Save action; Frontend Β§7.3). To preserve operator-readable comments and key order across save/reload cycles, the loader uses [`ruamel.yaml`](https://yaml.dev/doc/ruamel.yaml/) (round-trip mode). Read-only YAML files elsewhere in the codebase (`copier.yml`, `manifest.yml`, README front matter) use PyYAML's `yaml.safe_load` because round-trip preservation isn't needed and PyYAML is faster. Both libraries are committed in `pyproject.toml`. @@ -51,54 +51,44 @@ readme: required: false default: "" +# rclone.conf NAS-sync migration (Phase 8): per-equipment transport: blocks and +# NAS keyring entries are GONE. The NAS connection is defined once by the nas: +# block (a single rclone named remote). Equipment entries carry only the fields +# below. See docs/setup/rclone-remote-setup.md for the rclone config walkthrough. equipment: # local_root and nas_root below are equipment-scoped anchor paths. The full # destination is composed at creation time as # <*_root>///Runs/Run_/ (experimental) # <*_root>///TestRuns/TestRun_/ (test) - # The segment is the LIMS project's short_id (e.g. PROJ-0042), - # not the human-readable project name. The human name is sourced from the LIMS - # at display time. For example, a run on CONFOCAL_01 under LIMS project - # PROJ-0042 (named "Cortex Q3 Pilot" in LIMS) resolves to: - # local: /data/lab/CONFOCAL_01/PROJ-0042/Runs/Run_/ - # nas: //nas01/lab/CONFOCAL_01/PROJ-0042/Runs/Run_/ - # The equipment ID is the first path segment beneath the shared storage root, - # matching the equipment-first convention introduced in v0.6 (Section 3). + # The actual NAS target is composed from nas.remote + nas.base_root + equipment_id + # + run leaf at sync time (not from nas_root). nas_root is a human-readable + # display value only (shown in the browse view). - id: "CONFOCAL_01" label: "Confocal Microscope 1" - local_root: "/data/lab" # shared equipment-first root on this workstation - nas_root: "//nas01/lab" # shared equipment-first root on NAS (display value; rclone / rsync use their own remote spec below) - completeness_signal: "sentinel_file" - sentinel_filename: "acquisition_complete.flag" - transport: - type: "rclone" # local-to-NAS transport for NASSync (Β§7.1) - rclone_remote: "lab-nas" # remote name from rclone.conf - rclone_remote_path: "lab/CONFOCAL_01" # path under the rclone remote root - bandwidth: - upload_mbps: 50 # null/absent = unlimited - schedule: # optional time windows; outside windows = unlimited - - { days: ["mon","tue","wed","thu","fri"], from: "08:00", to: "18:00" } + local_root: "/data/lab" # equipment-first root on this workstation + nas_root: "//nas01/lab" # display value only; the rclone target uses nas.remote + sync_mode: "nas" # "nas" = sync directly to NAS; "stage" = push to orchestrator staging - id: "FLOW_01" label: "Flow Cytometer 1" local_root: "/data/lab" nas_root: "/mnt/nas/lab" - completeness_signal: "manifest" - manifest_filename: "run_manifest.json" - transport: - type: "rsync_ssh" # local-to-NAS transport for NASSync (Β§7.1) - ssh_target: "labuser@nas01.lab.example" - ssh_key_path: "~/.ssh/id_ed25519" # SSH key auth only; password auth rejected at config validation - remote_path: "/srv/lab/FLOW_01" - bandwidth: - upload_mbps: null # unlimited - -# Orchestrator-mode equipment may declare a separate STAGING transport (how data -# lands in /staging/ from the equipment machine, distinct from the NAS hop): -# orchestrator_staging_transport: -# type: "smb_mount" | "file_transfer" # legacy values, staging hop only -# mount_point: ... -# staging_subpath: "CONFOCAL_01" # under /staging/ -# See [[13_Equipment_to_Orchestrator_Data_Flow|Β§13]]. + sync_mode: "nas" + +# Top-level NAS sync configuration. A single named rclone remote covers all +# nas-mode equipment. Credentials live entirely in rclone.conf. +nas: + remote: "lab-nas" # remote name from rclone.conf (set up with rclone config) + base_root: "lab" # path on the remote under which equipment folders live + # run target: lab-nas:/lab// + rclone_config_path: "" # optional: pin --config (blank = rclone default discovery) + mtime_tolerance_s: 2 # reconcile tolerance (s); absorbs SFTP/SMB modtime rounding + perf: + transfers: 4 # rclone --transfers; also the RAM dial on constrained machines + checkers: 8 # rclone --checkers + bandwidth: + upload_mbps: null # null/absent = unlimited + schedule: # optional time windows; outside windows = unlimited + - { days: ["mon","tue","wed","thu","fri"], from: "08:00", to: "18:00" } nas_cleanup: enabled: true # disable to keep all local copies; operator deletes manually @@ -161,14 +151,27 @@ plugins: sync: enabled: true retry_attempts: 3 + quiescence_minutes: 10 # files must be stable for this long before sync eligibility + poll_interval_seconds: 120 # how often the sync worker polls for newly eligible runs + ignore_globs: # patterns skipped by the sync worker + - "*.partial" + - "*.tmp" orchestrator: - enabled: false - label: "Lab Acquisition Station 01" - staging_root: "/staging" # POSIX example. Windows orchestrators use a Windows-style path (e.g. C:\staging or \\nas01\staging). The default value is OS-conditional at first-launch (Β§3.1.5): /staging on macOS/Linux, %LOCALAPPDATA%\exlab-wizard\staging on Windows. The operator can override in Settings. + label: "Lab Acquisition Station 01" # required; stamped into every run's creation.json + staging_root: "" # opt-in: blank = this device is not a staging PC; no directory created + # when non-empty, the suggested path is OS-conditional (see paths.py) + # Stage-mode hop (rclone.conf NAS-sync migration): stage-mode equipment push + # runs to :// using + # the same RcloneDriver as the NAS leg. Both remotes live in the same rclone.conf. + staging_remote: "lab-staging" # second remote in rclone.conf for the staging hop (blank if unused) + staging_base_root: "staging" # path on the staging remote under which equipment folders land + staging_perf: + transfers: 4 + checkers: 8 staging_cleanup: mode: "manual" # or "scheduled" retain_hours: 24 # only used if mode is "scheduled" ``` -Single-equipment workstations use a one-entry `equipment` list with `orchestrator.enabled: false`. No migration is required between modes. +Single-equipment workstations use a one-entry `equipment` list with `sync_mode: nas`. No migration is required between modes. diff --git a/docs/REMAINING_WORK.md b/docs/REMAINING_WORK.md new file mode 100644 index 0000000..b5aab5a --- /dev/null +++ b/docs/REMAINING_WORK.md @@ -0,0 +1,221 @@ +# ExLab-Wizard β€” Remaining Work Specification + +**Verified against:** branch `fix/debug-with-playwright`, HEAD `85de7a3 feat: live config reload + opt-in staging_root`. +All `file:line` references below were read from the current tree. Each item states the +feature **intent** (with design-spec citation), the **current behavior / gap**, **what +implementing it entails**, and the **issues / risks**. + +> **Tracked checklist:** [`REMAINING_WORK_TASKS.md`](./REMAINING_WORK_TASKS.md) β€” tick each +> task and add an implementation note as it is integrated. + +--- + +## 0. Context + +### 0.1 Architecture (read first) +The GUI is **NiceGUI mounted in-process on the FastAPI app**. The UI does **not** call the +HTTP API β€” it calls backend objects directly off a dependency container `deps` +(`deps.controller`, `deps.nas_sync`, `deps.lims_client`, `deps.keyring_store`, +`deps.equipment_probe`, `deps.autostart_toggle`, `deps.audit_channel`, …). The `@router.*` +HTTP routes under `src/exlab_wizard/api/` are a **parallel surface consumed only by the +e2e/Playwright tests**. So "a route has no UI caller" is normal; an item is only a real gap +when the **underlying capability has no path in the in-process UI** either. Every item below +meets that stricter bar. + +### 0.2 What the recent edit changed (and didn't) +`85de7a3` introduced **live config reload** (`apply_live_config` in `tray/dependencies.py`) +plus an opt-in `orchestrator.staging_root`. Practical consequence for this backlog: settings +saved from the dialog now apply **without an app restart**, so the editors proposed below +(A2/A4/A5) take effect immediately once wired. The edit did **not** wire any of the inert +Application-section controls, the operators editor, or any of the Β§B/Β§C items. + +### 0.3 Healthy baseline (not stubs) +No `raise NotImplementedError` exists in the package; no bare `pass`/`...` bodies outside +`typing.Protocol`; the validator's unresolved-placeholder detection is a **shipped feature**. +The HTTP routers, `operations_modal`, and `session_progress` components are all built and +unit-tested β€” the missing work is mostly **mount-layer wiring**. + +--- + +## A. UI controls that exist but are not functional + +### A1 β€” "Quit ExLab-Wizard now" button has no handler +- **Where:** `src/exlab_wizard/ui/pages/settings.py:516` β€” `ui.button("Quit ExLab-Wizard now").props("flat")`, no `on_click`. +- **Intent:** Frontend Spec **Β§7.13** (`design_specs/ExLab-Wizard_Frontend_Spec.md:1052`): an in-window button that initiates the same graceful shutdown as the tray "Quit", for when the operator can't find the tray icon. Graceful-shutdown protocol: Backend **Β§4.3.2** (`tray/quit_coordinator.py`). +- **Current behavior / gap:** Renders but does nothing. The shutdown machinery exists but is **tray-process-local and not on `deps`**: `QuitCoordinator.quit()` (`tray/quit_coordinator.py:82`) runs the drain/force-quit protocol and `TrayApp.request_quit()` (`tray/main.py:77`) is the sync entry the pystray menu uses (`tray/main.py:109`), but `tray/dependencies.py` never attaches any quit callback to `deps` (it sets `deps.autostart_toggle` at `:130` and nothing quit-related; the `QuitCoordinator` is built later at `tray/main.py:171`). +- **What implementing it entails:** + 1. Expose a quit hook on `deps`: in `tray/main.py` after the coordinator/app are built (~`:171`–`:183`), set e.g. `deps.request_quit = tray_app.request_quit` (already handles running-loop vs no-loop, `tray/main.py:80`/`:84`). + 2. Add an `on_quit` param to `render_settings_page(...)` and thread it to the Application section, mirroring how the LIMS credential handlers are plumbed. + 3. In `ui/mount.py` `_settings()` (~`:358`) pass `on_quit=getattr(deps, "request_quit", None)` and wire the button with a `None`-guard; route the confirm through `QuitCoordinator.on_force_quit_prompt` (a NiceGUI confirm dialog) per Β§3.4.6. +- **Issues / risks:** Calling `request_quit` **synchronously inside a NiceGUI handler kills the server serving the page** β€” schedule it (fire-and-forget) so the HTTP response flushes first; avoid deadlocking the event loop the window runs on. Disable/no-op the button in headless/test fixtures where `deps.request_quit` is absent. + +### A2 β€” "Start at login" autostart checkbox is not bound +- **Where:** `src/exlab_wizard/ui/pages/settings.py:514` β€” `ui.checkbox("Start ExLab-Wizard at login")` with no initial value and no `on_change`. The comment at `:511-513` says wiring it "is a follow-up." +- **Intent:** Frontend Spec **Β§7.13** (`Frontend_Spec.md:1048`) + Distribution **Β§15.7** (`design_spec_sections/15_Distribution.md:150,161,167`): a toggle that *immediately* registers/unregisters the platform autostart entry (LaunchAgent / systemd / Run-key), reflecting and reversible from Settings β†’ Application. +- **Current behavior / gap:** Renders inert; doesn't reflect real registration state. The capability is fully present and already used by the welcome card: `deps.autostart_toggle` (`tray/dependencies.py:130`, factory `:840`) calls `AutostartManager.register()/unregister()` and returns `is_registered()`; the welcome flow calls it via `_apply_autostart(deps, enabled)` (`ui/mount.py:687`). Same surface as the e2e-only `POST /setup/autostart` (`api/setup.py:289`). +- **What implementing it entails:** + 1. This section is **exempt from the draft/Save model** (Β§7.13 β€” applied immediately), so do not bind to the draft. + 2. Add `deps.autostart_is_registered: bool` at build time (`tray/dependencies.py`, next to `autostart_toggle`) so the page can seed the checkbox without importing `tray/`. + 3. Add params to `render_settings_page` (`autostart_present`, `on_set_autostart`); in `ui/mount.py` `_settings()` seed the value and wire `on_change` to reuse `_apply_autostart` (`mount.py:687`, already `None`-guards and logs). Reflect the **actual post-op `is_registered()`** result, not the optimistic checkbox state. +- **Issues / risks:** `register()/unregister()` touch the real per-user filesystem; sandbox in tests via `EXLAB_AUTOSTART_ROOT` (`tray/autostart.py:80`) or the toggle stub. A failed registration must visibly revert the checkbox. Default-on applies only to the welcome card; here the initial state mirrors reality. + +### A3 β€” Application-section status indicators are hardcoded / missing (Β§7.13 parity) +- **Where:** `src/exlab_wizard/ui/pages/settings.py:515` β€” `ui.label("Show in system tray: available")` is a **static literal** that doesn't reflect real `pystray` availability; there is no "Window behavior on close" text and no `[Refresh]` action. +- **Intent:** Frontend Spec **Β§7.13** specifies the Application section also surfaces real tray availability and window-on-close behavior. +- **Current behavior / gap:** The "available" string is always shown regardless of whether a tray backend loaded (on Linux without a tray, the app runs window-only per Β§15.7.4). Missing the close-behavior text. +- **What implementing it entails:** seed the tray-availability label from a `deps` flag derived from whether `pystray` initialized; add the close-behavior copy. Low effort; bundle with A1/A2. +- **Issues / risks:** low; cosmetic correctness. + +### A4 β€” Operators allowlist has backend enforcement but **no editor UI** +- **Where:** omitted from `SETTINGS_SECTIONS` at `src/exlab_wizard/ui/pages/settings.py:30-32`; also absent from `_render_section_body`. Setup routing skips it in `ui/mount.py` (operators intentionally omitted). +- **Intent:** Frontend Spec **Β§7.9** (`Frontend_Spec.md:1003-1007`): an Operators section backing `operators.allowlist` β€” a **chip input** (one chip per username, `[+ Add]`, per-chip delete) with helper text: *"If empty (default), the operator field accepts any value; if non-empty, the wizard renders a dropdown of these values and rejects free-text."* Config schema **Β§9** (`design_spec_sections/09_Configuration_File.md:116-123`); resolved Design-Spec Open-Q#11 (`ExLab-Wizard_Design_Spec.md:180`); creation-time gate in User Interaction **Β§2** (`02_User_Interaction.md:53,162`). +- **Current behavior / gap:** Backend is correct and live: `OperatorsConfig.allowlist` (`config/models.py:422-427`) on `Config.operators` (`:565`); `controller/creation.py:540-547` rejects an operator absent from a **non-empty** allowlist. But with no GUI to populate it, the list stays `[]` and the gate is a permanent no-op for GUI users. The wizard's "dropdown vs free-text" behavior (Open-Q#11 resolution) is also not implemented on the creation wizard. +- **What implementing it entails:** + 1. Add `"operators"` to `SETTINGS_SECTIONS` (`settings.py:25`) and a `SECTION_TITLES` entry (`:46`). + 2. Add an `elif section == "operators":` branch in `_render_section_body` (~`:464`) with a chip editor bound to `draft.operators.allowlist`. Persistence rides the existing draft β†’ `finalize_settings_draft` β†’ `on_save` β†’ `_persist_config` β†’ `apply_live_config` path β€” **no new plumbing**. + 3. (Optional, separate) implement the wizard dropdown-vs-free-text behavior in the project/run wizard pages. +- **Issues / risks:** needs a real chip widget (shared with A5). `OperatorsConfig` is `extra="forbid"`, `str_strip_whitespace=True`, and the allowlist is **case-sensitive** β€” the editor must not lowercase. Keep it **optional/non-gating**: do not add to `_missing_setup_sections` (the original reason it was pulled, so it can't block reaching the main GUI). + +### A5 β€” `content_scan_extensions` renders read-only (partial) +- **Where:** `src/exlab_wizard/ui/pages/settings.py:482-484` β€” `ui.label("Scanned file extensions: " + ", ".join(...))`. Module docstring at `:399-402` notes list editors are "a follow-up." +- **Status:** **Partially fixed** β€” equipment is now an editable add-form (`_render_equipment_section`, `:526-650`) and NAS-credentials is fully interactive; only `validator.content_scan_extensions` remains display-only (its scalar sibling `content_scan_max_mib` *is* editable at `:478-481`). +- **Intent:** Frontend Spec **Β§7.10** (`Frontend_Spec.md:1016`): a **chip input** pre-populated with the spec defaults plus a **[Reset to defaults]** action. Configurability is resolved Design-Spec Open-Q#14 (`ExLab-Wizard_Design_Spec.md:183`). +- **What implementing it entails:** replace the label at `:483` with a chip editor bound to `draft.validator.content_scan_extensions`; add `[Reset to defaults]` calling `_default_content_scan_extensions()` (`config/models.py:435`). Persistence is automatic via the draft path. +- **Issues / risks:** `ValidatorConfig._extensions_must_start_with_dot` (`config/models.py:464-471`) rejects entries not starting with `.` β€” validate on add for good UX (the Save path already surfaces the first `ValidationError` via `notifications.notify_error`, `settings.py:355-361`). Build the chip widget once and reuse for A4. + +### Resolved / not-a-defect (previously suspected in A) +- **"Phase 12" nav no-op β€” RESOLVED.** `on_select_section` is now a real handler: nav rows bind to `_select_section` (`settings.py:315-318`) which toggles section visibility client-side (`:298-302`) then calls `on_select_section` if provided. `ui/mount.py` deliberately leaves it unset (switching sections is client-side so edits survive). The docstring at `:213-216` is historical, not live. Not a bug. +- **`lambda: None` handler defaults β€” RESOLVED.** They are parameter fallbacks for tests; production injects real handlers (LIMS creds `mount.py:345`; NAS creds `mount.py:367`; `nas_password_present` `mount.py:366`). Minor: `on_discard` is passed as `None` (`mount.py:362`) so **"Discard all" is inert in production** (guarded at `settings.py:373`) β€” acceptable since closing the draft already discards, but wire it if you want explicit discard. + +--- + +## B. Backend features fully built but **not surfaced in the GUI** + +> **Shared root cause.** The creation flow `ui/mount.py:_run_creation β†’ _await_session` +> (~`:1457`,`:1536`) is **fire-and-await-final-status only**: it never consumes +> `controller.subscribe()`, never reads `session.pending_input`, and offers no +> resume/cancel/operations affordances. Implementing the **event-subscription consumer (B4)** +> is the foundation that B1/B2/B3 build on. + +### B1 β€” Operations modal is built, exported, and rendered nowhere β˜… highest impact +- **Where:** component `src/exlab_wizard/ui/components/operations_modal.py:77`, exported at `ui/components/__init__.py:12,29`. **Zero call sites** outside the file/export. The main toolbar (`ui/pages/main.py:189-209`) has New Project / New Run / New Test Run / Add Equipment / Refresh / Settings β€” **no `[Operations…]`**. The footer (`main.py:347-377`) renders Sync/Validator/LIMS/Staging segments with no click handler. `GET /operations` (`api/routers/operations.py:57`) has no in-process caller. +- **Intent:** Frontend Spec **Β§9.5** "Disconnect and resume β€” the in-flight operations panel" (`Frontend_Spec.md:1154`): reachable from (1) an `[Operations…]` toolbar action when β‰₯1 operation is in flight/suspended (`:1163`) and (2) the footer Sync segment's "⚠ N operations need input" state (`:1162`, Β§3.5.5 `:586`); columns State/Started/Equipment/Project/Run/Plugin with per-row `[Resume]`/`[Cancel]`/`[View log]` (`:1165-1175`), suspended oldest-first (`:1177`), auto-refresh on WS events (`:1179`). Backed by `GET /api/v1/operations` (Backend **Β§4.6.1**, `04_Backend_Architecture.md:389`). +- **Consequence of the gap:** a plugin that pauses for input mid-creation **cannot be answered from the GUI**, and an in-flight/suspended session **cannot be cancelled or resumed** in-app. +- **What implementing it entails:** + 1. Add an `[Operations…]` toolbar button in `main.py` (mirror the existing `ui.button(...).props('data-testid=...')` pattern), visible when operation count > 0. + 2. Wire its `on_click` in `mount.py` `_main` to build rows from `deps.controller.session_store` β€” **extract a shared helper** from the route's `_iter_sessions`/`_session_to_entry` (`operations.py:86-121`) rather than duplicating; add a public accessor on `SessionStore` (the route reaches into private `store._sessions`, `operations.py:94`). + 3. Wire row actions to `controller.resume`/`controller.cancel` (B2) and reuse `_open_log_dialog` (`mount.py:1249`) for View-log. + 4. Make the footer Sync segment count suspended sessions (`tray/dependencies.py:861-865` already computes `input_required`) and open the same modal (Β§3.5.5). +- **Issues / risks:** modal is a static snapshot β€” true auto-refresh needs B4; otherwise it refreshes only on manual re-render. Concurrency: the list mutates while open. + +### B2 β€” No GUI path to resume or cancel a session +- **Where:** `CreationController.resume` (`controller/creation.py:327`), `.cancel` (`creation.py:351`); HTTP `POST /sessions/{id}/resume` (`api/routers/sessions.py:196`), `/cancel` (`:227`). Grep of `ui/`+`tray/` for `controller.resume(`/`controller.cancel(` β†’ **none**; the GUI only calls `create_project`/`create_run` (`mount.py:1502,1533`) and `status` (`mount.py:1471`). +- **Intent:** Frontend **Β§9.5** row actions and **Β§9.6** concurrent-session policy; Cancel routes through the **Β§9.4** confirmation dialog (`Frontend_Spec.md:1139`) carrying `discard_files` (Backend Β§4.6.1 `:388`). Resume contract: Backend **Β§4.7 / Β§6.4.1** (`06_Plugin_System.md:494-501`); `session_already_completed` β†’ 409 + toast. +- **Current behavior / gap:** resume/cancel reachable only via the e2e HTTP routes. The Β§9.6 "disable creation buttons while a session is in flight" rule is also unimplemented β€” `MainPageState.orchestrator_enabled` is hardcoded `True` (`main.py:54`) and button-disable only keys off `selected_node_is_received` (`main.py:198-200`). +- **What implementing it entails:** wire the modal's `on_resume`/`on_cancel` (B1) to `deps.controller.resume(id, extra_inputs)` / `.cancel(id, discard_files=…)` (same dispatch pattern as `_run_staging_action`, `mount.py:1036`). `on_resume` should open the INPUT_REQUIRED form (B3) since `resume()` requires non-empty `extra_inputs` and raises if the session isn't INPUT_REQUIRED (`creation.py:337-341`). `on_cancel` opens the Β§9.4 Discard/Keep dialog. Replace the hardcoded `orchestrator_enabled` with the real config flag for Β§9.6. +- **Issues / risks:** `cancel()` cancels and awaits the background task (`creation.py:377-381`); surface 409/`ValueError` if already finished. `discard_files=True` triggers `shutil.rmtree` of the partial dir (`creation.py:1151-1153`) β€” map the Discard/Keep choice correctly. + +### B3 β€” Plugin `INPUT_REQUIRED` cannot be answered from the GUI +- **Where:** controller wiring `on_input_required` + `_resume_queues` (`controller/creation.py:865-887`); INPUT_REQUIRED transition + `session.pending_input` (`:866-871`); `input_required` event published (`:872-880`). No escalation dialog exists anywhere in `ui/`. +- **Intent:** Frontend **Β§9.1** escalation dialog (`Frontend_Spec.md:1095-1106`): title "Additional input required", plugin-identity pill, the `reason` line, fields rendered with the README form widgets, `[Submit]`/`[Cancel]`; Submit β†’ resume. Escalations are strictly **sequential** (Β§9.2 `:1112`). Backend **Β§6.4.1** suspend/resume; OS-notification fast path Β§9.5 `:1158` / Backend Β§15.7.3. +- **Current behavior / gap:** the controller correctly suspends and parks on `await queue.get()` (`creation.py:881-887`) setting `session.pending_input`, but `_await_session` (`mount.py:1457`) just awaits the task β€” which never completes while suspended β€” so the wizard **hangs indefinitely with no dialog**. Only the HTTP `/resume` route can answer. +- **What implementing it entails:** depends on **B4** (to learn a session entered INPUT_REQUIRED) and **B1** (the surface). Build a new Β§9.1 dialog rendering `pending_input["fields"]` with README field widgets + reason/plugin header; Submit β†’ `controller.resume(sid, values)`, Cancel β†’ Β§9.4 confirm β†’ `controller.cancel`. Reuse from the Operations modal's `on_resume`. +- **Issues / risks:** preserve the Β§9.2 sequential invariant (one dialog fully resolves before the next frame). The plugin's `isolation.timeout_seconds` keeps counting while suspended (Β§9.1 `:1110`) β€” handle a `failed` frame force-closing the dialog. `resume()` rejects empty/invalid input (`ValueError`; backend maps plugin-side rejection to `plugin_variable_validation_failed` 422) β€” surface inline. + +### B4 β€” Live per-session phase progress is static; the GUI never subscribes +- **Where:** `CreationController.subscribe` (`controller/creation.py:401`); phase frames published in `_transition`/`_publish` (`creation.py:1104-1128`). Component `session_progress(...)` (`ui/components/session_progress.py:91`) is rendered **statically with `active_phase=None`** at `ui/pages/wizard_project.py:224` and `ui/pages/wizard_run.py:229`. Grep of `ui/`+`tray/` for `subscribe` β†’ **none**. +- **Intent:** Frontend **Β§10.1** (`Frontend_Spec.md:1196`): the Confirm & Create step shows a phase bar advancing Validating inputs β†’ Rendering template β†’ Running plugins β†’ Writing cache β†’ Validating post-creation β†’ Queueing NAS sync; **Β§9.3** adds a per-plugin sub-row from `{kind:"progress", phase:"running_plugins", current, total}` (`:1120,1135`). Backend **Β§4.6.2** WS frames (`04_Backend_Architecture.md:406-413`), **Β§4.7.1** SessionStateβ†’Phase mapping (`:573`). +- **Current behavior / gap:** every phase row sits at fraction 0.0 forever; `_run_creation` reads only final status. The frames the controller publishes (`creation.py:1116-1123`) are drained only by the e2e WebSocket. +- **What implementing it entails:** in `mount.py`, spawn a background consumer (via `_spawn_background`, `mount.py:58`) iterating `controller.subscribe(session_id)`; on each `phase`/`progress` frame re-render `session_progress` with live `active_phase`/`completed`/`plugin_current/total`; pass real args at the two call sites instead of `None`. **Verify** the controller's emitted phase strings match the component's hardcoded `PHASES` tuple (`session_progress.py:24-31`) β€” a mismatch silently no-ops. +- **Issues / risks:** the iterator ends on `done`/`failed` (`creation.py:416-419`) β€” cancel/clean up the consumer on wizard close (mind the `_BACKGROUND_TASKS` strong-ref set). The queue is lazily created (`creation.py:410-411`) β€” subscribe at/before create time or miss early phases. Re-render from a background task needs the right NiceGUI client context. The Β§9.3 sub-row depends on the plugin host actually emitting `progress` frames β€” confirm it does. + +### B5 β€” Audit / Problems live stream not consumed by the in-process UI +- **Where:** `AuditChannel` + 30 s `_audit_loop` (`api/app.py:77-133`, `:327-356`); WS `/problems/events` (`api/routers/problems.py:252-282`). Grep of `ui/` for `audit_channel`/`AuditChannel`/`.subscribe()`/`problems/events` β†’ **zero**. +- **Intent:** Backend **Β§4.6.2** (`04_Backend_Architecture.md:406-426`; the 30 s task at `:366`): a background `Validator.audit("all")` every 30 s publishes a diff to a pub-sub channel the always-on Problems tab reads (snapshot on connect, then deltas). Frontend **Β§11 / Β§3.3**: the Problems tab carries a live count badge (`Frontend_Spec.md:429`) and the footer Validator segment shows "Last audit: HH:MM:SS" (`:587`); page footer copy is "Showing N of M findings Β· Last audit: HH:MM:SS Β· Next refresh in 23s". +- **Current behavior / gap (all static):** + - `/problems` page (`ui/mount.py:371-375`) runs `_safe_audit(deps)` **once per render** (`mount.py:1579-1588`); footer is the literal `"Showing {n} of {m} findings Β· Last audit: --"` (`ui/pages/problems.py:279-281`) β€” **"Last audit: --" is hardcoded**, no countdown. + - Embedded right-pane Problems (`ui/pages/main.py:445-450`) shows `f"Showing 0 of {...} findings"` β€” **shown-count hardcoded to 0**; `problems_count_hard/soft` default 0 (`main.py:50-51`) and `_build_main_state` (`mount.py:699-721`) never sets them, so the tab badge `f"Problems ({...})"` (`main.py:432`) is always 0. + - Nothing in the GUI reads `deps.last_audit_at` or the channel; only the HTTP/WS surface does. +- **What implementing it entails:** + 1. Either (a) a `ui.timer` that polls `deps.last_audit_at` and re-runs `validator.audit`, or (b) consume `deps.audit_channel.subscribe()` and push deltas into reactive page state. + 2. Populate `MainPageState.problems_count_hard/soft` in `_build_main_state` from the audit summary; replace the hardcoded `0` at `main.py:447`. + 3. Replace `"Last audit: --"` (`problems.py:280`) with `deps.last_audit_at` and add the "Next refresh in Ns" countdown. + 4. Confirm production `create_app(...)` passes `start_audit_task=True` (`app.py:266`). + 5. Verify the override-and-allow-sync dialog (Frontend Β§11.5, already present in `ui/pages/problems.py`) is reachable from wherever the tab is mounted. +- **Issues / risks:** NiceGUI re-renders per navigation, so a per-render full `validator.audit` (current `_safe_audit`) is O(tree) each time β€” prefer the 30 s channel. Keep the three surfaces (tab badge, right-pane summary, `/problems` page) reading the same source to avoid drift; debounce delta storms; preserve filter-chip state across refreshes. + +--- + +## C. No-op default collaborators + +### C1 β€” Production runs on the **stub** README generator β˜… real defect +- **Where:** `NoOpReadmeGenerator` (`controller/creation.py:210-221`), wired as the constructor default at `:271-273`. The real `ReadmeGenerator` (`readme/generator.py:176-220`) is **never imported or constructed** in `tray/` or `api/` β€” `tray/dependencies._build_controller` (`:519-542`) and `apply_live_config` (`:226-238`) call `CreationController(...)` **without** `readme_generator=`. +- **Intent:** Backend Spec **Β§10** (`10_README_Generation.md`): every project/run creation must generate a `README.md` (YAML front matter + Markdown) **and** the `readme_fields.json` cache via the four-layer field merge (template/config/custom/system) with full validation (Β§10.2, Β§10.3, Β§10.7; cache file Β§11.4). README is non-optional for project/run scope. +- **Current behavior / gap:** `NoOpReadmeGenerator.generate()` writes a 3-line stub + (`# {label}` / `Operator:` / `{objective}`) with **no front matter, no field blocks, and + no `readme_fields.json`**. So GUI-created runs ship a placeholder README and are missing the + fields cache that downstream consumers (LIMS ingest, validator) expect. +- **What implementing it entails:** + 1. Inject the real generator: `readme_generator=ReadmeGenerator()` in `_build_controller` and the `apply_live_config` fresh-build branch. + 2. **Reconcile the type mismatch first** β€” there are two same-named `ReadmeContext` classes: the controller's flat one (`creation.py:188-201`) vs the generator's layered one (`generator.py:152-168`); and the controller's Protocol expects `-> Path` (`creation.py:204-207`) while `ReadmeGenerator.generate()` returns `tuple[Path, Path]`. Add an adapter in `_write_cache` (`creation.py:908-919`) that assembles the layered context (core fields, template/config decls from the resolved template + `config.readme.defaults`, `SystemFields`, custom fields) and consumes both returned paths. +- **Issues / risks:** the real generator **raises** on validation failures (missing required template/config fields, type mismatches, core redeclaration); `_validate_inputs` (`creation.py:578-599`) currently checks required-field presence but not types, so newly enforced gates could fail creations that previously "passed" against the stub. Generator does sync work via `asyncio.to_thread` β€” fine for the pipeline. **This should be validated end-to-end with a real template before release.** + +### C2 β€” `NoOpNASSync` controller default (informational β€” not a production defect) +- **Where:** `NoOpNASSync` (`controller/creation.py:230-234`), default at `:274`; real `NASSyncClient` (`sync/nas_client.py:257-1089`). +- **Why it's not a defect:** the controller is **not** the production enqueue path β€” its inline enqueue is best-effort and `contextlib.suppress`-wrapped (`creation.py:686-688`). Auto-sync is owned by the **quiescence poller**, which gets the real `deps.nas_sync` (built `tray/dependencies.py:110-119`, `init()`'d in lifespan `api/app.py:277-279`, polled `:807-837`); force-sync / clear-verified call `deps.nas_sync` directly (`ui/mount.py:1056-1070`). `NASSyncClient` is complete (push/check/verify/cleanup/reconcile, rclone-only). +- **Optional cleanup:** either inject `nas_sync=deps.nas_sync` into `_build_controller` if the inline enqueue is meant to be live, or add a one-line comment that the NoOp is intentional because the poller owns auto-sync. No functional change needed. + +### C3 β€” Runtime guard toasts (where the `None`/NoOp path surfaces in the live UI) +All in `src/exlab_wizard/ui/mount.py` β€” useful as detectors of mis-wired deps: +- `:1058` `"Force-sync unavailable: NAS sync not wired"` (`deps.nas_sync is None`) +- `:1193` `"Keep-local unavailable: sync-state writer not wired"` (`deps.sync_state_writer is None`) +- `:531` `"equipment probe is not available"` (`deps.equipment_probe is None`) +- related: `:1052` no-config staging, `:1478`/`:1509` controller-not-initialized. + +--- + +## D. TODO / stale markers + +### D1 β€” Offline-catalogue schema-version gate is stricter than the cache-file policy (open spec question) +- **Where:** `src/exlab_wizard/lims/catalogue.py:93-103` (comment `:93-96`, check `:97-103`). +- **Intent:** Backend **Β§7.2.9.3** (`07_Sync_and_Database_Integration.md:360`): a `schema_version` mismatch should be treated as **catalogue absent** (WARN + fall through). The cache-schema reader policy **Β§11.9.2** (`11_Cache_Folders.md:462-468`) is **major-only** (accept newer/older minor). +- **Gap:** `read_catalogue` does an **exact** match (`catalogue.py:98`) and **raises `ConfigError`**, which conflicts with both the major-only cache policy and the "treat as absent / WARN" wording. Net UI behavior already matches "absent" because the only caller wraps it in try/except β†’ WARN (`ui/mount.py:1401-1416`); the inconsistency is internal-contract, not user-visible. The catalogue isn't in Β§11.9.4's enumerated schema list, hence the open question. +- **What resolving it entails:** decide the policy (add the catalogue to Β§11.9.4 / Β§7.2.9, choose exact vs major-only); if major-only, swap the check to a major-compare and parse known-minor fields; if strict, consider a typed "treat-as-absent" signal instead of `ConfigError` to match Β§7.2.9.3. Drop the TODO once decided. +- **Issues / risks:** low. With exact-match, a future *minor* bump of `OFFLINE_CATALOGUE_VERSION` on the producer makes every consumer silently ignore the catalogue β€” the hazard the TODO flags. + +### D2 β€” Stale "plugins/registry.py not yet committed" comment (documentation only) +- **Where:** `src/exlab_wizard/plugins/host.py:73-81` (plus `:115-123`, `:896-905`). +- **Reality:** `plugins/registry.py:128-378` is a **real, complete** `PluginRegistry` (manifest scan over bundled+lab roots, `api_version` gate, network-opt-in gate, lab-wins merge, `get`/`list_all`/`candidates_for`, no plugin imported at scan time) and is **wired in production** (`tray/dependencies._build_plugin_host:497-516` constructs it, `.reload()`s, adapts it to the host). The host's `_ListBackedRegistry`/`build_test_registry` (`host.py:896-918`) is test-only. +- **Intent reference:** Backend **Β§6.2.1** (`06_Plugin_System.md:289-306`). +- **What resolving it entails:** delete/rewrite the three stale comment blocks to say `registry.py` is committed and wired. Pure cleanup. (Minor spec note: Β§6.2.1 describes the registry as `extension -> list[PluginRecord]`; the impl keys `name -> PluginRecord` with `candidates_for` computing extension matches β€” functionally equivalent; flag only if the spec wants the literal structure.) + +--- + +## Prioritized backlog + +| # | Item | Β§ | Impact | Effort | +|---|------|---|--------|--------| +| 1 | **Inject real `ReadmeGenerator`** (+ reconcile `ReadmeContext`/return type) | C1 | **High β€” GUI-created runs ship stub READMEs, no `readme_fields.json`** | M | +| 2 | Event-subscription consumer in the creation flow (foundation) | B4 | High β€” unblocks 3–5; live progress | S–M | +| 3 | Render Operations modal + toolbar/footer hooks | B1 | High β€” session control surface | M | +| 4 | Resume/Cancel wiring (+ Β§9.4 confirm, Β§9.6 disable rule) | B2 | High | M | +| 5 | INPUT_REQUIRED escalation dialog (new component) | B3 | High β€” creations can hang silently | M | +| 6 | Live Problems/audit stream + real counts | B5 | Med | M | +| 7 | Operators allowlist chip editor | A4 | Med β€” security gate has no populator | M | +| 8 | "Start at login" checkbox wiring | A2 | Med | S | +| 9 | "Quit ExLab-Wizard now" button (+ `deps` quit hook) | A1 | Low–Med | S | +| 10 | `content_scan_extensions` chip editor + reset | A5 | Low | S (reuse #7) | +| 11 | Application-section status labels parity (Β§7.13) | A3 | Low | S | +| 12 | Resolve offline-catalogue version-policy TODO | D1 | Low | S | +| 13 | Delete stale registry comment | D2 | Trivial | XS | + +### Shared foundations to build once +- **Event-subscription consumer** (B4) underpins B1 auto-refresh, B2 in-flight cancel, B3 escalation, and B5. +- **Reusable chip/list editor** serves A4 and A5 (and the equipment-section follow-up). +- **Shared `SessionStore β†’ row` helper / public accessor** removes the duplication between + `api/routers/operations.py` and the new in-process modal. + +### Suggested sequencing +**Release-blocking correctness first:** #1 (README) β€” validate end-to-end with a real +template. **Then the session-control epic:** #2 β†’ #3 β†’ #4 β†’ #5 (they compound). **Then** +the visibility/usability items #6–#11, and the cleanups #12–#13 anytime. diff --git a/docs/REMAINING_WORK_TASKS.md b/docs/REMAINING_WORK_TASKS.md new file mode 100644 index 0000000..33c72bc --- /dev/null +++ b/docs/REMAINING_WORK_TASKS.md @@ -0,0 +1,270 @@ +# ExLab-Wizard β€” Remaining Work: Tracked Tasks + +Task checklist derived from [`REMAINING_WORK.md`](./REMAINING_WORK.md) (verified against +`85de7a3`). Each task links back to the spec section that carries the full intent, files, +implementation steps, and risks. + +## How to use this tracker +When a task is **integrated**: +1. Flip its checkbox `- [ ]` β†’ `- [x]`. +2. Set **Status:** `βœ… Done`. +3. Fill **Impl note:** with the commit SHA / PR and a one-line summary of what landed + (and any deviation from the spec). + +Status legend: `⬜ Not started` Β· `🟑 In progress` Β· `βœ… Done` Β· `β›” Blocked` (note the blocker). + +--- + +## Phase 1 β€” Release-blocking correctness + +### - [x] T1 β€” Inject the real `ReadmeGenerator` (+ reconcile `ReadmeContext` / return type) +- **Spec:** [Β§C1](./REMAINING_WORK.md#c1--production-runs-on-the-stub-readme-generator--real-defect) Β· **Category:** C Β· **Effort:** M Β· **Priority:** Highest (release-blocking) +- **Why:** Production builds the controller without `readme_generator=`, so it runs on + `NoOpReadmeGenerator` β€” GUI-created runs ship a stub README with no YAML front matter and + no `readme_fields.json`. +- **Key files:** `controller/creation.py:188-221,271-273,578-599,908-919` Β· `readme/generator.py:152-220` Β· `tray/dependencies.py:226-238,519-542` +- **Acceptance:** a GUI-created project/run produces a Β§10-compliant `README.md` (front + matter + four-layer field blocks) **and** `readme_fields.json`; the two `ReadmeContext` + classes and the `Path` vs `tuple[Path, Path]` return are reconciled; validated end-to-end + against a real template. +- **Risk watch:** the real generator raises on missing/typed-wrong fields β€” confirm + `_validate_inputs` gates align so previously-passing creations don't start failing. +- **Status:** βœ… Done +- **Impl note:** Injected `ReadmeGenerator()` in `tray.dependencies._build_controller` (the sole + production constructor, covering both the lifespan build and `apply_live_config`). Replaced the + controller's flat placeholder `ReadmeContext` with the canonical layered type from + `exlab_wizard.readme`; the controller's `ReadmeGeneratorProtocol` + `NoOpReadmeGenerator` now use + the `tuple[Path, Path]` contract. Added `CreationController._build_readme_context` (partitions + `readme_extra` across template/config/custom layers by id, maps decls, fills the Β§10.6 system + block: `created_by` = OS user, `project` = LIMS short id (Β§3.1), `run` = run dir / null). Presence is + already gated by `_validate_inputs` and the GUI submits no typed extra fields yet, so the + generator's strict validation adds no new failures for current creations (it stays the backstop). + New end-to-end test `test_real_readme_generator_writes_frontmatter_and_cache` asserts the + four-layer front matter + `readme_fields.json`. Full unit+integration suite green (2201 passed). + +--- + +## Phase 2 β€” Session-control epic (build in order; they compound) + +### - [x] T2 β€” Event-subscription consumer in the creation flow (shared foundation) +- **Spec:** [Β§B4](./REMAINING_WORK.md#b4--live-per-session-phase-progress-is-static-the-gui-never-subscribes) Β· **Category:** B Β· **Effort:** S–M Β· **Priority:** High +- **Why:** The create flow is fire-and-await-final-status; nothing consumes + `controller.subscribe()`, so progress is static (`active_phase=None`). This consumer + underpins T3/T4/T5/T6. +- **Key files:** `ui/mount.py:58,1457,1536` Β· `controller/creation.py:401,410-419,1104-1128` Β· `ui/components/session_progress.py:24-31,91` Β· `ui/pages/wizard_project.py:224` Β· `ui/pages/wizard_run.py:229` +- **Acceptance:** the Confirm & Create step advances through the live phases (and the Β§9.3 + per-plugin sub-row when the host emits `progress`); the consumer is cancelled/cleaned up on + wizard close; emitted phase strings verified to match the component's `PHASES`. +- **Status:** βœ… Done +- **Impl note:** Fixed a confirmed bug: `session_progress.PHASES`/`PHASE_LABELS` used + `post_validation`/`queueing_sync`, but the controller emits the wire-format + `validating_post_creation`/`queueing_nas_sync` (`state_machine.Phase`) β€” two of six phases would + silently no-op. Corrected the component to the verbatim wire-format (single source of truth) and + updated the phase-order test. Added `SessionProgressState` + `apply_frame(state, frame)` to the + component (folds `phase`/`progress`/`done` frames; ignores `input_required`/unknown). Each wizard + renders the confirm-step bar via a `@ui.refreshable` reading `state.progress`, exposing + `state.progress_refresh`. `mount._run_creation` now consumes `controller.subscribe()` via + `_consume_session_progress` while the pipeline runs (race-free: `_launch` creates the event queue + before the pipeline starts and the asyncio.Queue buffers early phases). Note: the controller + emits no `progress` frame today, so the Β§9.3 per-plugin sub-row stays dormant until the plugin + host emits one (`apply_frame` handles it for when it lands). Suite green (2205 passed). + +### - [x] T3 β€” Render the Operations modal + toolbar/footer hooks +- **Spec:** [Β§B1](./REMAINING_WORK.md#b1--operations-modal-is-built-exported-and-rendered-nowhere--highest-impact) Β· **Category:** B Β· **Effort:** M Β· **Priority:** High +- **Why:** `operations_modal` is built/exported but rendered nowhere; no `[Operations…]` + action exists, so sessions can't be inspected or acted on from the GUI. +- **Key files:** `ui/components/operations_modal.py:77` Β· `ui/pages/main.py:189-209,347-377` Β· `ui/mount.py` (`_main`) Β· `api/routers/operations.py:86-121` (extract shared `SessionStore β†’ row` helper + public accessor) +- **Acceptance:** an `[Operations…]` toolbar button (visible when β‰₯1 operation in flight) + opens the modal populated from `deps.controller.session_store`; footer Sync segment shows + the "N need input" state and opens the same modal. +- **Depends on:** T2 (for auto-refresh). +- **Status:** βœ… Done +- **Impl note:** Added a public `SessionStore.iter_sorted()` accessor + a shared + `project_identifier(request)` (both in `controller/session_store.py`) so the `/operations` route + and the in-process panel stop reaching into `store._sessions` and label rows identically; + refactored the route onto them. Added `OperationRow.from_session()` (maps the Β§4.7 states onto the + panel's running/suspended/completed buckets). `main.py`: `[Operations…]` toolbar button (shown + when `operations_count > 0`, warning-colored if any need input) + footer Sync segment flips to + "N operations need input" and opens the same modal; `MainPageState` gains + `operations_count`/`operations_input_required`. `mount.py`: `_operation_counts`, + `_build_operation_rows`, `_open_operations_modal` (fresh snapshot per open), and an + `_open_operation_details` "view log" dialog. Fixed a latent circular import by importing + `SessionState`/`project_identifier` from submodules in `operations.py`. Resume/cancel row actions + are placeholders here (cancel does a keep-files cancel) β€” fully wired in T4/T5. Suite green. + +### - [x] T4 β€” Wire Resume / Cancel (+ Β§9.4 confirm, Β§9.6 disable rule) +- **Spec:** [Β§B2](./REMAINING_WORK.md#b2--no-gui-path-to-resume-or-cancel-a-session) Β· **Category:** B Β· **Effort:** M Β· **Priority:** High +- **Key files:** `controller/creation.py:327,337-341,351,377-381,1151-1153` Β· `ui/mount.py:1036` (dispatch pattern) Β· `ui/pages/main.py:54,198-200` +- **Acceptance:** modal Resume/Cancel call `controller.resume`/`cancel` in-process; Cancel + routes through a Β§9.4 Discard/Keep dialog mapped to `discard_files`; creation buttons + disabled while a session is non-terminal (single-equipment); 409/`ValueError` surfaced. +- **Depends on:** T3. +- **Status:** βœ… Done +- **Impl note:** `_cancel_operation` now opens a Β§9.4 Discard / Keep dialog mapped to + `controller.cancel(id, discard_files=…)` (Discard β†’ `shutil.rmtree` of the partial dir), with + errors surfaced as a toast (`cancel` is a no-op on an already-terminal session, so no 409 to + raise). Β§9.6 single-equipment lock: `_operation_counts` now also returns an `active` + (strictly non-terminal) count; `_build_main_state` sets `MainPageState.creation_in_flight`, and + `main.py` disables New Project / Run / Test Run (with a tooltip) while a creation is in flight. + Added `_operation_counts` tests (panel vs active vs input_required). Resume still routes through + T5's input dialog. Suite green (UI 463 passed). + +### - [x] T5 β€” Plugin `INPUT_REQUIRED` escalation dialog (new component) +- **Spec:** [Β§B3](./REMAINING_WORK.md#b3--plugin-input_required-cannot-be-answered-from-the-gui) Β· **Category:** B Β· **Effort:** M Β· **Priority:** High +- **Why:** When a plugin pauses, the wizard hangs indefinitely with no dialog; only the HTTP + route can answer. +- **Key files:** `controller/creation.py:865-887` Β· new `ui/components/` escalation dialog Β· `ui/mount.py` +- **Acceptance:** a Β§9.1 dialog renders `pending_input["fields"]` with README widgets + + reason/plugin header; Submit β†’ `controller.resume(sid, values)`, Cancel β†’ Β§9.4 confirm β†’ + `cancel`; escalations strictly sequential (Β§9.2); handles `failed`/timeout force-close. +- **Depends on:** T2 (detect INPUT_REQUIRED) + T3 (surface). +- **Status:** βœ… Done +- **Impl note:** New component `ui/components/input_required_dialog.py`: Β§9.1 "Additional input + required" dialog with a plugin-identity pill, the reason line, and one widget per + `pending_input["fields"]` (stringβ†’input, textβ†’textarea, choiceβ†’select, booleanβ†’checkbox), + two-way bound to a values dict; `persistent` so the escalation must resolve before the next frame + (Β§9.2). `mount.py`: the T2 consumer now opens it on an `input_required` frame and force-closes it + on a terminal `done`/`failed` frame (plugin timeout); Submit β†’ `controller.resume(sid, values)` + (errors β€” empty/invalid payload, stale state, or plugin re-rejection re-emitting `input_required` + β€” surfaced as a toast / re-opened dialog), Cancel β†’ the Β§9.4 cancel dialog. `_cancel_operation` + was split into a controller-driven `_cancel_session` core (reused by the dialog) + a deps + resolver; the Operations modal's Resume (`_resume_operation`) reads the parked `pending_input` and + re-opens the same dialog. Tests for `collect_default_values` + dialog build. Suite green (2212). + +--- + +## Phase 3 β€” Visibility & usability + +### - [x] T6 β€” Live Problems/audit stream + real counts +- **Spec:** [Β§B5](./REMAINING_WORK.md#b5--audit--problems-live-stream-not-consumed-by-the-in-process-ui) Β· **Category:** B Β· **Effort:** M Β· **Priority:** Med +- **Key files:** `api/app.py:77-133,266,327-356` Β· `ui/pages/problems.py:279-281` Β· `ui/pages/main.py:50-51,432,445-450` Β· `ui/mount.py:699-721,1579-1588` +- **Acceptance:** live findings counts (tab badge + right-pane summary, single source); + "Last audit: HH:MM:SS Β· Next refresh in Ns" instead of `--`; override-and-allow-sync + dialog (Β§11.5) reachable; `start_audit_task=True` confirmed in the production app build. +- **Depends on:** T2 (subscription pattern, optional). +- **Status:** βœ… Done +- **Impl note:** The 30 s `_audit_loop` now caches tier counts on + `deps.last_audit_hard`/`last_audit_soft` (single source, no per-render re-audit, per the Β§B5 + preference); `_build_main_state` reads them into `MainPageState.problems_count_hard/soft`, so the + Problems **tab badge** (`problems_badge_text`) and the **right-pane summary** are now real (the + right-pane no longer hardcodes "Showing 0"). The `/problems` footer takes `last_audit_at` and + renders "Last audit: HH:MM:SS Β· Next refresh in Ns" with a 1 s `ui.timer` countdown (was a + hardcoded "--"); `start_audit_task=True` confirmed in the production tray build. + **Deferred (documented):** wiring the Β§11.5 override-and-allow-sync action and the full live + WS-delta stream are out of scope here because `render_problems_page` renders a *view-model* shape + (`finding.severity/.path/.state/.finding_id`) that the raw `Validator` `Finding` + (`tier/rule/run_path/…`) does not provide β€” a pre-existing mismatch (the render is e2e-only, + `# pragma: no cover`). Reconciling that view-model + the in-process override-write path + (mirroring `POST /problems/{run_path}/override`) is a follow-up; the counts/last-audit core lands + here. Suite green. + +### - [x] T7 β€” Operators allowlist chip editor +- **Spec:** [Β§A4](./REMAINING_WORK.md#a4--operators-allowlist-has-backend-enforcement-but-no-editor-ui) Β· **Category:** A Β· **Effort:** M Β· **Priority:** Med +- **Key files:** `ui/pages/settings.py:25,30-32,46,464` Β· `config/models.py:422-427` Β· `controller/creation.py:540-547` +- **Acceptance:** an Operators section with a chip editor bound to + `draft.operators.allowlist`, persisting via the existing draft path; **case-sensitive**, no + trimming/lowercasing; kept **non-gating** (not added to `_missing_setup_sections`). +- **Builds:** the reusable chip/list widget (shared with T10). +- **Status:** βœ… Done +- **Impl note:** Built a reusable `_render_chip_editor(values, …)` in `settings.py` (modeled on the + equipment add-form: add/delete/optional-reset, mutates the draft list in place so persistence + rides the existing draft β†’ finalize β†’ Save path). Added `"operators"` to `SETTINGS_SECTIONS` + (between `nas_cleanup` and `validator`) + `SECTION_TITLES`, and an `elif section == "operators"` + branch with the Β§7.9 helper text + chip editor bound to `draft.operators.allowlist`. Stored + verbatim (case-sensitive; whitespace trimmed on add only). Non-gating (not in + `_missing_setup_sections`). Updated the section-count test (8β†’9). Suite green. + +### - [x] T8 β€” "Start at login" checkbox wiring +- **Spec:** [Β§A2](./REMAINING_WORK.md#a2--start-at-login-autostart-checkbox-is-not-bound) Β· **Category:** A Β· **Effort:** S Β· **Priority:** Med +- **Key files:** `ui/pages/settings.py:514` Β· `tray/dependencies.py:130,840` (add `autostart_is_registered`) Β· `ui/mount.py:687` +- **Acceptance:** checkbox reflects real `is_registered()` on open; `on_change` toggles + immediately via `deps.autostart_toggle` and reflects the actual post-op result (reverts on + failure); sandboxed in tests via `EXLAB_AUTOSTART_ROOT`. +- **Status:** βœ… Done +- **Impl note:** `tray/dependencies.py` seeds `deps.autostart_is_registered` from + `AutostartManager().is_registered()` at build. `_apply_autostart` now returns the toggle's + real `is_registered()` result (the welcome card still ignores it). `_settings` passes + `autostart_registered` + `on_set_autostart`; the Application checkbox (exempt from the draft, + Β§7.13) seeds from the real state and, on change, applies immediately and reverts to the actual + post-op result on mismatch (re-entrancy-guarded). Disabled when no toggle is wired. Tests cover + the return-value relay. + +### - [x] T9 β€” "Quit ExLab-Wizard now" button (+ `deps` quit hook) +- **Spec:** [Β§A1](./REMAINING_WORK.md#a1--quit-exlab-wizard-now-button-has-no-handler) Β· **Category:** A Β· **Effort:** S Β· **Priority:** Low–Med +- **Key files:** `ui/pages/settings.py:516` Β· `tray/main.py:77,80,84,171` Β· `tray/quit_coordinator.py:82` Β· `ui/mount.py:358` +- **Acceptance:** a `deps.request_quit` hook exists; button triggers graceful shutdown + **scheduled non-blocking** (response flushes first) behind a confirm; no-op/disabled when + the hook is absent (headless/tests). +- **Status:** βœ… Done +- **Impl note:** The tray builder (`tray/main.py`) attaches `deps.request_quit = + tray_app.request_quit` after building `TrayApp`. `_settings` builds an `on_quit` that schedules + the hook via `ui.timer(0.1, …, once=True)` so the HTTP response flushes before the server tears + down, and passes it to the Application section, which renders the Quit button behind a confirm + dialog (Β§3.4.6). Disabled when the hook is absent (headless/tests). `AppDependencies` gains the + typed `request_quit` field. + +### - [x] T10 β€” `content_scan_extensions` chip editor + reset-to-defaults +- **Spec:** [Β§A5](./REMAINING_WORK.md#a5--content_scan_extensions-renders-read-only-partial) Β· **Category:** A Β· **Effort:** S Β· **Priority:** Low +- **Key files:** `ui/pages/settings.py:482-484` Β· `config/models.py:435,464-471` +- **Acceptance:** chip editor bound to `draft.validator.content_scan_extensions` with a + `[Reset to defaults]` action; entries validated to start with `.` on add. +- **Depends on:** T7 (reuse the chip widget). +- **Status:** βœ… Done +- **Impl note:** Replaced the read-only "Scanned file extensions" label with the shared + `_render_chip_editor` bound to `draft.validator.content_scan_extensions`, with a + `[Reset to defaults]` action (`draft.validator.content_scan_extensions[:] = + _default_content_scan_extensions()`) and an on-add validator rejecting entries that don't start + with `.` (the `ValidatorConfig` dot-prefix rule also re-checks at Save). Landed with T7. + +### - [x] T11 β€” Application-section status labels parity (Β§7.13) +- **Spec:** [Β§A3](./REMAINING_WORK.md#a3--application-section-status-indicators-are-hardcoded--missing-713-parity) Β· **Category:** A Β· **Effort:** S Β· **Priority:** Low +- **Key files:** `ui/pages/settings.py:515` +- **Acceptance:** tray-availability label reflects real `pystray` init; window-on-close + behavior text present. +- **Status:** βœ… Done +- **Impl note:** The tray builder sets `deps.tray_available` from `_tray_backend_available()` + (whether `pystray` imports; window-only per Β§15.7.4 otherwise). The Application section now shows + "Show in system tray: available / unavailable (window-only)" from that flag (no longer a static + literal) plus the window-on-close behavior copy. `AppDependencies` gains the typed + `tray_available` field. Landed with T8/T9. + +--- + +## Phase 4 β€” Cleanups (anytime) + +### - [x] T12 β€” Resolve the offline-catalogue version-policy TODO +- **Spec:** [Β§D1](./REMAINING_WORK.md#d1--offline-catalogue-schema-version-gate-is-stricter-than-the-cache-file-policy-open-spec-question) Β· **Category:** D Β· **Effort:** S Β· **Priority:** Low +- **Key files:** `lims/catalogue.py:93-103` +- **Acceptance:** policy decided (exact vs Β§11.9.2 major-only) and the spec updated; check + aligned; `TODO(spec)` removed. +- **Status:** βœ… Done +- **Impl note:** Policy = **treat as absent / WARN** (user-confirmed; Β§7.2.9.3). `read_catalogue` + now returns `OfflineCatalogue | None` β€” a `schema_version` mismatch logs a WARN and returns + `None` (consumer falls through) instead of raising `ConfigError`; the endpoint mismatch and + missing/parse-error cases stay hard errors. The decision is recorded in the function docstring; + `TODO(spec)` removed. Caller (`mount._lims_projects_from_catalogue`) treats `None` as `[]`. Test + flipped to assert `None` + WARN. + +### - [x] T13 β€” Delete the stale plugin-registry comment +- **Spec:** [Β§D2](./REMAINING_WORK.md#d2--stale-pluginsregistrypy-not-yet-committed-comment-documentation-only) Β· **Category:** D Β· **Effort:** XS Β· **Priority:** Trivial +- **Key files:** `plugins/host.py:73-81,115-123,896-905` +- **Acceptance:** comments rewritten to state `registry.py` is committed + wired and + `_ListBackedRegistry` is test-only. +- **Status:** βœ… Done +- **Impl note:** Rewrote the three "owned by Agent A / not yet committed" comment blocks in + `plugins/host.py` (the registry-surface header, the `PluginRegistryProtocol` docstring, and the + `_ListBackedRegistry`/`build_test_registry` block) to state that + `plugins.registry.PluginRegistry` is the committed, wired production registry (built in + `tray.dependencies._build_plugin_host`) and that `_ListBackedRegistry` is test-only. Also fixed a + stray "before Agent A's msgspec.Struct lands" comment. Pure cleanup; no behavior change. + +--- + +## Shared foundations (build once, reused across tasks) +- **Event-subscription consumer** (T2) β†’ underpins T3 auto-refresh, T4, T5, and T6. +- **Reusable chip/list editor** (first built in T7) β†’ reused by T10. +- **Shared `SessionStore β†’ row` helper + public accessor** (T3) β†’ removes the duplication + between `api/routers/operations.py` and the in-process modal. + +## Progress +13 / 13 complete. diff --git a/docs/UX_INTERACTIONS.md b/docs/UX_INTERACTIONS.md index 762a618..437d3b4 100644 --- a/docs/UX_INTERACTIONS.md +++ b/docs/UX_INTERACTIONS.md @@ -18,7 +18,6 @@ flow test. | `/welcome` | `welcome-get-started` | button | Click 'Get started' | Navigates to /settings to begin configuration. | | `/welcome` | `welcome-skip-for-now` | button | Click 'Skip for now' | Navigates straight to /main, bypassing guided setup. | | `/welcome` | `welcome-autostart-toggle` | toggle | Toggle 'start at login' | Sets the autostart preference applied on get-started / skip. | -| `/restart-required` | `restart-required` | screen | Observe the restart-required gate | Terminal screen instructing the operator to relaunch the tray. | ## Settings @@ -31,7 +30,7 @@ flow test. | `/settings` | `settings-nav-lims` | nav row | Click the 'LIMS' sidebar row | Shows the LIMS section. | | `/settings` | `settings-lims-endpoint` | input | Type the LIMS endpoint URL | Binds config.lims.endpoint on the draft. | | `/settings` | `settings-lims-email` | input | Type the operator email | Binds config.lims.email on the draft. | -| `/settings` | `settings-save` | button | Click 'Save all' | Persists config.yaml and routes to the restart-required gate. | +| `/settings` | `settings-save` | button | Click 'Save all' | Persists config.yaml, applies it to the running components in-process, and shows a 'Settings saved' toast (no relaunch). | | `/settings` | `settings-discard` | button | Click 'Discard all' | Drops the in-memory draft edits. | ## Equipment @@ -43,17 +42,16 @@ flow test. | `/settings` | `settings-equipment-label` | input | Type the equipment label | Provides the EquipmentConfig.label for the new entry. | | `/settings` | `settings-equipment-local-root` | input | Type the equipment local root | Provides the EquipmentConfig.local_root for the new entry. | | `/settings` | `settings-equipment-nas-root` | input | Type the equipment NAS root | Provides the EquipmentConfig.nas_root for the new entry. | -| `/settings` | `settings-equipment-signal` | radio | Pick the completeness signal (sentinel_file / manifest) | Swaps the filename field between sentinel and manifest. | -| `/settings` | `settings-equipment-sentinel` | input | Type the sentinel filename | Sets the sentinel_file completeness signal filename. | -| `/settings` | `settings-equipment-manifest` | input | Type the manifest filename | Sets the manifest completeness signal filename. | -| `/settings` | `settings-equipment-transport` | radio | Pick the transport (rclone / rsync_ssh) | Swaps the transport fieldset between rclone and rsync_ssh. | -| `/settings` | `settings-equipment-rclone-remote` | input | Type the rclone remote | Sets the rclone transport remote for the new entry. | -| `/settings` | `settings-equipment-rclone-path` | input | Type the rclone remote path | Sets the rclone transport remote path for the new entry. | -| `/settings` | `settings-equipment-ssh-target` | input | Type the rsync_ssh SSH target | Sets the rsync_ssh transport ssh_target for the new entry. | -| `/settings` | `settings-equipment-ssh-key` | input | Type the rsync_ssh SSH key path | Sets the rsync_ssh transport ssh_key_path for the new entry. | -| `/settings` | `settings-equipment-rsync-path` | input | Type the rsync_ssh remote path | Sets the rsync_ssh transport remote_path for the new entry. | | `/settings` | `settings-equipment-add` | button | Click 'Add equipment' | Validates and appends an EquipmentConfig to the draft; row appears. | +## NAS Remote + +| Route | Test ID | Element | Action | Outcome | +|---|---|---|---|---| +| `/settings` | `settings-nav-nas_remote` | nav row | Click the 'NAS Remote' sidebar row | Shows the configured rclone remote name, base root, and found/not-found badge. | +| `/settings` | `settings-nas-remote-name` | label | View the configured rclone remote name | Displays the remote name from config.nas.remote (or '(not configured)'). | +| `/settings` | `settings-nas-test-connection` | button | Click 'Test connection' | Runs the rclone remote probe and renders the result inline. | + ## New template | Route | Test ID | Element | Action | Outcome | @@ -109,7 +107,6 @@ flow test. | `/wizard/equipment` | `wizard-equipment-label` | input | Type the equipment label | Sets the human-readable equipment label. | | `/wizard/equipment` | `wizard-equipment-local-root` | input | Type the equipment's local root path | Sets where this device acquires runs on disk. | | `/wizard/equipment` | `wizard-equipment-sync-mode` | radio | Pick 'nas' or 'stage' sync mode | Swaps the transport sub-form between NAS-direct and stage-push. | -| `/wizard/equipment` | `wizard-equipment-signal` | radio | Pick 'sentinel_file' or 'manifest' completeness signal | Swaps the filename input between sentinel and manifest naming. | | `/wizard/equipment` | `wizard-equipment-confirm` | button | Click 'Confirm' on the review step | Posts the assembled EquipmentConfig via POST /config/equipment. | | `/wizard/equipment` | `wizard-equipment-cancel` | button | Click 'Cancel' on any wizard step | Discards the wizard and returns to /main. | diff --git a/docs/diagrams/.$ExLAB-Wizard-SyncSchema.drawio.bkp b/docs/diagrams/.$ExLAB-Wizard-SyncSchema.drawio.bkp new file mode 100644 index 0000000..c99bfde --- /dev/null +++ b/docs/diagrams/.$ExLAB-Wizard-SyncSchema.drawio.bkp @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/diagrams/ExLAB-Wizard-SyncSchema.drawio b/docs/diagrams/ExLAB-Wizard-SyncSchema.drawio new file mode 100644 index 0000000..0f54362 --- /dev/null +++ b/docs/diagrams/ExLAB-Wizard-SyncSchema.drawio @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/setup/rclone-remote-setup.md b/docs/setup/rclone-remote-setup.md new file mode 100644 index 0000000..f43297e --- /dev/null +++ b/docs/setup/rclone-remote-setup.md @@ -0,0 +1,325 @@ +# Setting up your rclone remote(s) + +ExLab-Wizard uses [rclone](https://rclone.org/) as its NAS transport. Rather than +storing NAS credentials inside the app, you configure a named remote once with +`rclone config` and then tell the app which remote name to use. The app never +sees a password β€” all connection details live in `rclone.conf`. + +--- + +## Why this approach + +Earlier versions of ExLab-Wizard required you to enter NAS passwords through the +Settings dialog, where they were stored in the OS keyring per equipment. The +current design replaces that with operator-managed rclone named remotes: + +- You configure the remote once with the standard `rclone` tool. +- The app references it by name via `nas.remote` in `config.yaml`. +- Credentials stay in `rclone.conf`, managed entirely by rclone. +- Any backend rclone supports works (SFTP, SMB, S3, WebDAV, …) β€” not just the + two the app used to hand-code. + +--- + +## Prerequisites + +Install rclone from [rclone.org/downloads](https://rclone.org/downloads/) or +your OS package manager: + +```bash +# macOS +brew install rclone + +# Linux (Debian/Ubuntu) +sudo apt install rclone + +# Windows β€” download the installer from rclone.org/downloads +``` + +Verify the install: + +```bash +rclone version +``` + +--- + +## Creating a remote with `rclone config` + +Run `rclone config` β€” an interactive TUI that walks you through adding a remote. +The prompts vary by backend type. Two common lab setups are shown below. + +### SFTP remote + +``` +$ rclone config +n) New remote +... +name> lab-nas +Type of storage to configure. +Enter a string value. Press Enter for the default (""). +... +Storage> sftp + +SSH host to connect to +Enter a string value. Press Enter for the default (""). +host> nas01.lab.example + +SSH username +Enter a string value. Press Enter for the default (""). +user> labuser + +SSH port number +Enter a signed integer. Press Enter for the default (22). +port> + +Choose your SSH connection authentication method. +1 / ... +2 / Use a password + \ "false" +... +key_pem> + +y) Yes this is OK (default) +``` + +After completing the wizard, `~/.config/rclone/rclone.conf` (Linux/macOS) or +`%APPDATA%\rclone\rclone.conf` (Windows) will contain a stanza like: + +```ini +[lab-nas] +type = sftp +host = nas01.lab.example +user = labuser +pass = +``` + +Verify it works: + +```bash +rclone lsd lab-nas: +``` + +### SMB / Samba remote + +``` +$ rclone config +n) New remote +name> lab-smb +Storage> smb + +SMB server hostname to connect to +host> nas01.lab.example + +SMB username +user> labuser + +SMB port number (default 445) +port> + +SMB password +y/g/n> y +password: +``` + +Resulting stanza: + +```ini +[lab-smb] +type = smb +host = nas01.lab.example +user = labuser +pass = +``` + +Verify: + +```bash +rclone lsd lab-smb:labshare +``` + +--- + +## Wiring the remote to ExLab-Wizard + +Add a `nas:` block to your `config.yaml` (see Β§9 for the full schema): + +```yaml +nas: + remote: "lab-nas" # the name you gave the remote in rclone config + base_root: "lab" # path on the remote under which equipment folders live + # equipment runs land at lab-nas:/lab// +``` + +`base_root` is the path on the remote that acts as the shared root for all +equipment. For example, if your NAS stores data under `/shares/lab/` and the +remote is rooted at the share, set `base_root: "lab"`. An empty `base_root` is +valid β€” runs then land directly at `://`. + +The full target path for a run is: + +``` +:/// +``` + +Equipment entries in `config.yaml` carry only `id`, `label`, `local_root`, +`nas_root`, and `sync_mode` β€” no per-equipment connection block is needed. + +--- + +## Verifying the connection + +**From the app:** open **Settings β†’ NAS Remote** and click **Test connection**. +This runs `rclone about :` and shows free-space info on success or a +classified error reason on failure. + +**From a shell:** + +```bash +# Confirm the remote answers +rclone about lab-nas: + +# List the base root +rclone lsjson lab-nas:lab +``` + +If `nas.rclone_config_path` is set, pass `--config ` to match what the +app sees: + +```bash +rclone --config /path/to/rclone.conf about lab-nas: +``` + +--- + +## Performance and memory tuning + +Two knobs under `nas.perf` control rclone parallelism and, on constrained +machines, peak memory use (rclone buffers `--transfers` Γ— `--buffer-size` in +RAM): + +```yaml +nas: + remote: "lab-nas" + base_root: "lab" + perf: + transfers: 4 # default: 4; maps to rclone --transfers + checkers: 8 # default: 8; maps to rclone --checkers +``` + +On space- and RAM-constrained acquisition machines (e.g. a 256 GB instrument PC +with ~100 GB free and limited RAM) lower `transfers` to `2` or `1` to reduce +memory pressure during large syncs. + +Upload bandwidth can be capped globally: + +```yaml +nas: + remote: "lab-nas" + base_root: "lab" + bandwidth: + upload_mbps: 50 # null/absent = unlimited + schedule: # limit applies only during these windows; outside = unlimited + - { days: ["mon","tue","wed","thu","fri"], from: "08:00", to: "18:00" } +``` + +`upload_mbps` translates to `--bwlimit K` (KiB/s) when the app invokes +rclone. The schedule is evaluated in the workstation's local time zone. + +--- + +## Modtime tolerance + +SFTP and SMB backends may round modtimes by up to 1–2 seconds. The routine +post-push reconcile credits a file as synced when its remote modtime is within +`mtime_tolerance_s` of local (default 2 s): + +```yaml +nas: + mtime_tolerance_s: 2 # default; increase to 5 for SMB targets that round more +``` + +--- + +## Pinning the rclone.conf path + +By default rclone discovers its config via standard OS locations +(`~/.config/rclone/rclone.conf` on Linux, `%APPDATA%\rclone\rclone.conf` on +Windows). If the app runs as a different OS user than the one who created the +config β€” common when running as a tray/service account β€” set +`nas.rclone_config_path` to pin `--config`: + +```yaml +nas: + remote: "lab-nas" + base_root: "lab" + rclone_config_path: "/etc/exlab-wizard/rclone.conf" +``` + +The NAS remote and the staging remote (see below) must both be defined in the +same `rclone.conf` file; the app passes the same `--config` path to every +rclone invocation. + +--- + +## Encrypted rclone.conf + +The app assumes an **unencrypted** `rclone.conf`. Rclone's config encryption +(`RCLONE_CONFIG_PASS`) is outside the app's scope β€” if you encrypt your config, +`RCLONE_CONFIG_PASS` becomes your single credential to manage in the environment +that runs the tray process. The app will not prompt for it or read it. + +--- + +## Stage-mode devices (orchestrator hop) + +If any equipment uses `sync_mode: stage`, those devices push runs to an +intermediate staging area on the orchestrator rather than directly to the NAS. +Configure a second remote (pointing at the staging area) under the `orchestrator:` +block: + +```yaml +orchestrator: + label: "Lab Acquisition Station 01" + staging_remote: "lab-staging" # second remote in the same rclone.conf + staging_base_root: "staging" # path under which equipment folders land + staging_perf: + transfers: 2 + checkers: 4 +``` + +The staging remote uses the same `rclone.conf` file as the NAS remote. Create it +with `rclone config` the same way as the NAS remote, then reference it by name. + +Run folders for stage-mode equipment land at: + +``` +:/// +``` + +--- + +## Minimal `config.yaml` example + +```yaml +nas: + remote: "lab-nas" + base_root: "lab" + mtime_tolerance_s: 2 + perf: + transfers: 4 + checkers: 8 + bandwidth: + upload_mbps: null + +equipment: + - id: "CONFOCAL_01" + label: "Confocal Microscope 1" + local_root: "/data/lab" + nas_root: "//nas01.lab.example/lab" # display value; the actual sync uses nas.remote + sync_mode: nas +``` + +The `nas_root` field on each equipment entry is a human-readable display value +(shown in the browse view). The actual rclone target is composed from `nas.remote` +and `nas.base_root` at sync time. diff --git a/docs/source/user_guide/01_settings.md b/docs/source/user_guide/01_settings.md index 95dba73..f68fc0f 100644 --- a/docs/source/user_guide/01_settings.md +++ b/docs/source/user_guide/01_settings.md @@ -32,9 +32,9 @@ order. See section 02 Β§3.6 for the authoritative contract and section The Settings dialog edits equipment that already exists; registering a **new** device uses the dedicated Add-Equipment wizard, opened from the main-window toolbar's *Add Equipment* button -(`data-testid="toolbar-add-equipment"`). The wizard walks five steps -- -identity, paths, sync mode, completeness signal, and a review step -- -then posts the assembled `EquipmentConfig` to the configuration router. +(`data-testid="toolbar-add-equipment"`). The wizard walks four steps -- +identity, paths, sync mode, and a review step -- then posts the +assembled `EquipmentConfig` to the configuration router. Editing or removing a registered device stays in the Settings dialog's Equipment List section, which the file-explorer tree context menus deep-link into (Redesign decision 4A). @@ -42,9 +42,8 @@ deep-link into (Redesign decision 4A). 1. **Open the wizard.** Click *Add Equipment* on the main-window toolbar to navigate to `/wizard/equipment`. 2. **Step through the wizard.** Supply the equipment identity - (`data-testid="wizard-equipment-id"`), the local and NAS paths, the - sync mode (`nas` or `stage`), and the completeness signal - (`sentinel_file` or `manifest`). + (`data-testid="wizard-equipment-id"`), the local and NAS paths, and + the sync mode (`nas` or `stage`). 3. **Confirm.** The Confirm button on the review step (`data-testid="wizard-equipment-confirm"`) registers the device and returns to the main window. diff --git a/docs/superpowers/plans/2026-05-28-rclone-conf-nas-sync.md b/docs/superpowers/plans/2026-05-28-rclone-conf-nas-sync.md new file mode 100644 index 0000000..ef18668 --- /dev/null +++ b/docs/superpowers/plans/2026-05-28-rclone-conf-nas-sync.md @@ -0,0 +1,1436 @@ +# rclone.conf-based NAS Sync β€” Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Move NAS sync from inline credential injection to operator-managed `rclone.conf` named remotes, add a global base root + lsjson manifest reconcile, gate the expensive hash-verify at cleanup, and expose `--transfers`/`--checkers`. + +**Architecture:** A new top-level `nas:` config block names one rclone remote + a base root + perf knobs. The rclone driver drops all credential/env injection and instead lets rclone read `rclone.conf` (optionally pinned via `--config`). Routine post-push verification becomes a cheap `rclone lsjson` size/mtime reconcile; the full `rclone check --download` hash-verify is retained but runs only as the integrity gate immediately before local deletion (and on manual force-verify). The NAS keyring path and per-equipment transport blocks are removed (clean break). + +**Tech Stack:** Python 3.12, Pydantic v2, ruamel.yaml (round-trip config), asyncio subprocess, rclone CLI, pytest, NiceGUI (UI), FastAPI (API). + +**Spec:** `docs/superpowers/specs/2026-05-28-rclone-conf-nas-sync-design.md` + +**Sequencing note (additive-then-remove):** Old transport/keyring code is kept working until consumers are migrated, then deleted in Phase 7. This keeps the test suite green between phases. Run `uv run pytest -q` at the end of every task; it must pass before commit unless a step says otherwise. + +**Verification convention:** All commands use `uv run`. Type-check touched modules with `uv run mypy ` and lint with `uv run ruff check ` at each phase boundary. + +--- + +## File Structure + +**New files** +- `src/exlab_wizard/sync/manifest.py` β€” `RemoteEntry`, `RemoteManifest`, `parse_lsjson` (lsjson β†’ run-relative size/mtime map). Sole owner of the lsjson wire shape. +- `tests/unit/sync/test_manifest.py` β€” parser tests. +- `docs/setup/rclone-remote-setup.md` β€” operator-facing "set up rclone.conf separately" guide. +- `tests/docker/rclone.conf` β€” fixture config naming the dockerised SFTP/SMB servers. + +**Modified (by responsibility)** +- Config: `config/models.py` (add `NasConfig`/`RclonePerf`; remove transport union), `constants/enums.py` (rename setup enums; later remove `OrchestratorTransportType`). +- Transport: `sync/transports/rclone.py` (drop env/obscure; add `lsjson`, `--config/--transfers/--checkers`), `sync/transports/_run.py` (doc only). +- Sync client: `sync/nas_client.py` (named-remote target, lsjson reconcile, cleanup hash-gate, real remote-stat), `sync/verifier.py` (drop `env`/`mask_for_log` params). +- Setup/creds: `paths.py` (remote-availability gate), `tray/dependencies.py` (probe + NAS-sync wiring), `api/_dependencies.py`, `api/app.py`, `api/setup.py`, `api/routers/config.py`, `constants/keyring.py` (remove NAS helper). +- UI: `ui/pages/settings.py`, `ui/mount.py`, `ui/pages/main.py`, `ui/pages/wizard_equipment.py`, `ui/equipment_form.py`, `ui/components/metadata_pane.py`. +- Orchestrator staging (Phase 8, βš‘): `config/models.py`, `ui/equipment_form.py`, `ui/pages/wizard_equipment.py`. +- Tests/fixtures: `tests/fixtures/stub_rclone.py`, `tests/unit/sync/transports/test_rclone_env.py` (β†’ delete/replace), `tests/unit/sync/test_*`, `tests/unit/config/test_models.py`, `tests/unit/api/*`, `tests/unit/tray/test_dependencies.py`, `tests/unit/ui/*`, `tests/integration/test_nas_sync.py`, `tests/e2e/*`, `tests/docker/docker-compose.yml`. +- Docs: `design_specs/design_spec_sections/{04,07,09}_*.md`, `README.md`. + +--- + +## Phase 1 β€” Config foundation (`nas:` block, additive) + +### Task 1.1: Add `RclonePerf` and `NasConfig` models + +**Files:** +- Modify: `src/exlab_wizard/config/models.py` (add models near the other sub-blocks, ~line 486 before `SyncConfig`; register on `Config` ~line 568) +- Test: `tests/unit/config/test_models.py` + +- [ ] **Step 1: Write the failing test** + +```python +# tests/unit/config/test_models.py β€” add +from exlab_wizard.config.models import Config, NasConfig, RclonePerf + + +def test_nas_config_defaults(): + nas = NasConfig(remote="nas01", base_root="/srv/lab") + assert nas.remote == "nas01" + assert nas.base_root == "/srv/lab" + assert nas.rclone_config_path == "" + assert nas.perf.transfers == 4 + assert nas.perf.checkers == 8 + assert nas.bandwidth.upload_mbps is None + assert nas.mtime_tolerance_s == 2 + + +def test_nas_config_rejects_nonpositive_perf(): + import pytest + with pytest.raises(ValueError): + RclonePerf(transfers=0) + with pytest.raises(ValueError): + RclonePerf(checkers=0) + + +def test_config_has_default_nas_block(): + cfg = Config() + assert cfg.nas.remote == "" + assert cfg.nas.base_root == "" +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `uv run pytest tests/unit/config/test_models.py -k nas_config -v` +Expected: FAIL with `ImportError: cannot import name 'NasConfig'`. + +- [ ] **Step 3: Implement the models** + +In `config/models.py`, add before `SyncConfig` (after `BandwidthConfig` is already defined at line 205): + +```python +class RclonePerf(BaseModel): + """Parallelism knobs forwarded to rclone (``--transfers`` / ``--checkers``). + + These double as the memory dial on space- and RAM-constrained + acquisition machines: peak memory scales with these counts times + rclone's per-stream buffer. + """ + + model_config = ConfigDict(extra="forbid", str_strip_whitespace=True) + + transfers: int = Field(default=4, ge=1, le=64) + checkers: int = Field(default=8, ge=1, le=64) + + +class NasConfig(BaseModel): + """``nas:`` block β€” the single rclone remote + base root for NAS sync. + + ``remote`` is the name of a remote defined in the operator's + ``rclone.conf`` (set up separately with ``rclone config``). Equipment + run folders live under ``://…``. + ``rclone_config_path`` optionally pins ``rclone --config `` for + when the app runs as a different OS user than the one who created the + config; blank means rclone's default discovery. + """ + + model_config = ConfigDict(extra="forbid", str_strip_whitespace=True) + + remote: str = "" + base_root: str = "" + rclone_config_path: str = "" + # Reconcile tolerance: a file counts as synced only when its remote modtime + # is within this many seconds of local (absorbs SFTP/SMB modtime rounding). + mtime_tolerance_s: int = Field(default=2, ge=0) + perf: RclonePerf = Field(default_factory=RclonePerf) + bandwidth: BandwidthConfig = Field(default_factory=BandwidthConfig) +``` + +Register on `Config` (line ~563, alongside `nas_cleanup`): + +```python + nas: NasConfig = Field(default_factory=NasConfig) +``` + +Add `"NasConfig"` and `"RclonePerf"` to the module `__all__` list (top of file). + +- [ ] **Step 4: Run test to verify it passes** + +Run: `uv run pytest tests/unit/config/test_models.py -k nas_config -v` +Expected: PASS (3 tests). + +- [ ] **Step 5: Commit** + +```bash +git add src/exlab_wizard/config/models.py tests/unit/config/test_models.py +git commit -m "feat(config): add nas: block (remote, base_root, perf, bandwidth)" +``` + +--- + +### Task 1.2: Round-trip the `nas:` block through the loader + +**Files:** +- Test: `tests/unit/config/test_loader.py` +- Modify: none expected (ruamel round-trips unknown-but-modelled keys automatically); this task proves it. + +- [ ] **Step 1: Write the failing test** + +```python +# tests/unit/config/test_loader.py β€” add +def test_loader_round_trips_nas_block(tmp_path): + from exlab_wizard.config.loader import load_config, save_config + + text = ( + "paths:\n" + " templates_dir: /t\n plugin_dir: /p\n local_root: /l\n" + "orchestrator:\n label: ws-1\n" + "nas:\n" + " remote: nas01\n" + " base_root: /srv/lab\n" + " perf:\n transfers: 2\n checkers: 3\n" + ) + p = tmp_path / "config.yaml" + p.write_text(text, encoding="utf-8") + cfg = load_config(p) + assert cfg.nas.remote == "nas01" + assert cfg.nas.perf.transfers == 2 + save_config(p, cfg, original_text=text) + assert "nas01" in p.read_text(encoding="utf-8") +``` + +- [ ] **Step 2: Run test to verify it passes or fails** + +Run: `uv run pytest tests/unit/config/test_loader.py -k nas_block -v` +Expected: PASS (model already registered in Task 1.1). If FAIL on validation, confirm `paths`/`orchestrator` minimal fields in the fixture text. + +- [ ] **Step 3: Commit** + +```bash +git add tests/unit/config/test_loader.py +git commit -m "test(config): nas: block round-trips through the loader" +``` + +--- + +## Phase 2 β€” Transport driver (lsjson + config/perf flags, additive) + +### Task 2.1: Add `--config`, `--transfers`, `--checkers` plumbing to the driver + +**Files:** +- Modify: `src/exlab_wizard/sync/transports/rclone.py` (`RcloneDriver.__init__`, `push`, `check`) +- Test: `tests/unit/sync/test_transports.py` + +The driver gains a `config_path: str | None`, `transfers: int | None`, `checkers: int | None` on `__init__`; argv builders append `--config

` / `--transfers N` / `--checkers N` when set. + +- [ ] **Step 1: Write the failing test** + +```python +# tests/unit/sync/test_transports.py β€” add +import asyncio +from pathlib import Path +from exlab_wizard.sync.transports.rclone import RcloneDriver + + +def test_push_argv_includes_config_and_perf(monkeypatch, tmp_path): + captured = {} + + async def fake_run(cmd, *, env=None, stdin=None, mask_for_log=()): + captured["cmd"] = cmd + return 0, "", "" + + monkeypatch.setattr("exlab_wizard.sync.transports.rclone.run_subprocess", fake_run) + drv = RcloneDriver(config_path="/etc/rclone.conf", transfers=2, checkers=3) + asyncio.run(drv.push(tmp_path, "nas01:/srv/lab/EQ/run", bwlimit_kibps=None)) + cmd = captured["cmd"] + assert "--config" in cmd and "/etc/rclone.conf" in cmd + assert cmd[cmd.index("--transfers") + 1] == "2" + assert cmd[cmd.index("--checkers") + 1] == "3" +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `uv run pytest tests/unit/sync/test_transports.py -k argv_includes_config -v` +Expected: FAIL (`RcloneDriver.__init__` has no `config_path`). + +- [ ] **Step 3: Implement** + +In `rclone.py`: + +```python +class RcloneDriver: + def __init__( + self, + *, + binary: str = "rclone", + config_path: str | None = None, + transfers: int | None = None, + checkers: int | None = None, + ) -> None: + self._binary = binary + self._config_path = config_path or None + self._transfers = transfers + self._checkers = checkers + + def _global_flags(self) -> list[str]: + """Flags valid on every rclone subcommand we invoke.""" + flags: list[str] = [] + if self._config_path: + flags.extend(["--config", self._config_path]) + return flags +``` + +In `push`, after `cmd = [self._binary, "copy", "--checksum"]`: + +```python + cmd.extend(self._global_flags()) + if self._transfers is not None: + cmd.extend(["--transfers", str(self._transfers)]) + if self._checkers is not None: + cmd.extend(["--checkers", str(self._checkers)]) +``` + +In `check`, after `cmd = [self._binary, "check", "--download", ...]` add `cmd[1:1] = self._global_flags()` (insert global flags right after the binary) and append `--checkers` similarly. Apply the same `_global_flags()` insert in `about`. + +- [ ] **Step 4: Run test to verify it passes** + +Run: `uv run pytest tests/unit/sync/test_transports.py -k argv_includes_config -v` +Expected: PASS. + +- [ ] **Step 5: Commit** + +```bash +git add src/exlab_wizard/sync/transports/rclone.py tests/unit/sync/test_transports.py +git commit -m "feat(transport): rclone driver accepts --config/--transfers/--checkers" +``` + +--- + +### Task 2.2: Add `RcloneDriver.lsjson` + +**Files:** +- Modify: `src/exlab_wizard/sync/transports/rclone.py` +- Test: `tests/unit/sync/test_transports.py` + +- [ ] **Step 1: Write the failing test** + +```python +# tests/unit/sync/test_transports.py β€” add +def test_lsjson_argv_is_recursive_readonly(monkeypatch): + captured = {} + + async def fake_run(cmd, *, env=None, stdin=None, mask_for_log=()): + captured["cmd"] = cmd + return 0, '[{"Path":"a.txt","Name":"a.txt","Size":3,"ModTime":"2026-05-28T00:00:00Z","IsDir":false}]', "" + + monkeypatch.setattr("exlab_wizard.sync.transports.rclone.run_subprocess", fake_run) + drv = RcloneDriver() + out = asyncio.run(drv.lsjson("nas01:/srv/lab/EQ/run")) + assert captured["cmd"][:2] == ["rclone", "lsjson"] + assert "-R" in captured["cmd"] + assert "nas01:/srv/lab/EQ/run" in captured["cmd"] + assert '"Path":"a.txt"' in out + + +def test_lsjson_raises_transport_error_on_failure(monkeypatch): + import pytest + from exlab_wizard.sync.transports import TransportError + + async def fake_run(cmd, *, env=None, stdin=None, mask_for_log=()): + return 1, "", "401 Unauthorized" + + monkeypatch.setattr("exlab_wizard.sync.transports.rclone.run_subprocess", fake_run) + with pytest.raises(TransportError): + asyncio.run(RcloneDriver().lsjson("nas01:/x")) +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `uv run pytest tests/unit/sync/test_transports.py -k lsjson -v` +Expected: FAIL (`RcloneDriver` has no `lsjson`). + +- [ ] **Step 3: Implement** + +Add to `RcloneDriver`: + +```python + async def lsjson(self, remote: str, *, recursive: bool = True) -> str: + """Run ``rclone lsjson`` (read-only) and return the raw JSON array text. + + Listing only β€” no transfer, no remote mutation. ``recursive`` adds + ``-R`` so a whole run subtree returns in one call. Raises + :class:`TransportError` with a classified ``error_kind`` on a + non-zero exit so callers route auth/network failures the same way + as push/check. + """ + cmd: list[str] = [self._binary, "lsjson", *self._global_flags()] + if recursive: + cmd.append("-R") + if self._checkers is not None: + cmd.extend(["--checkers", str(self._checkers)]) + cmd.append(remote) + _log.debug("rclone lsjson cmd: %s", shlex.join(cmd)) + try: + rc, stdout, stderr = await run_subprocess(cmd) + except FileNotFoundError as exc: + msg = f"rclone binary not found: {self._binary!r}" + raise TransportError(msg) from exc + if rc != 0: + kind = _classify_failure(stderr, rc) + msg = f"rclone lsjson failed rc={rc} kind={kind.value}: {stderr.strip()}" + raise TransportError(msg, error_kind=kind) + return stdout +``` + +Add `"lsjson"` to nothing (method, not export). Ensure `TransportError` is imported (it is). + +- [ ] **Step 4: Run test to verify it passes** + +Run: `uv run pytest tests/unit/sync/test_transports.py -k lsjson -v` +Expected: PASS (2 tests). + +- [ ] **Step 5: Commit** + +```bash +git add src/exlab_wizard/sync/transports/rclone.py tests/unit/sync/test_transports.py +git commit -m "feat(transport): add read-only RcloneDriver.lsjson" +``` + +--- + +### Task 2.3: Add `RcloneDriver.listremotes` + +The single source of "which remotes exist in rclone.conf", reused by the setup +gate (Task 5.3) and the Settings "found?" badge (Task 6.1) β€” DRY: no other module +runs `rclone listremotes`. + +**Files:** +- Modify: `src/exlab_wizard/sync/transports/rclone.py` +- Test: `tests/unit/sync/test_transports.py` + +- [ ] **Step 1: Write the failing test** + +```python +# tests/unit/sync/test_transports.py β€” add +def test_listremotes_parses_lines(monkeypatch): + async def fake_run(cmd, *, env=None, stdin=None, mask_for_log=()): + assert cmd[:2] == ["rclone", "listremotes"] + return 0, "nas01:\nstagepc:\n", "" + + monkeypatch.setattr("exlab_wizard.sync.transports.rclone.run_subprocess", fake_run) + remotes = asyncio.run(RcloneDriver().listremotes()) + assert remotes == ("nas01:", "stagepc:") + + +def test_listremotes_empty_on_failure(monkeypatch): + async def fake_run(cmd, *, env=None, stdin=None, mask_for_log=()): + return 1, "", "config not found" + + monkeypatch.setattr("exlab_wizard.sync.transports.rclone.run_subprocess", fake_run) + assert asyncio.run(RcloneDriver().listremotes()) == () +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `uv run pytest tests/unit/sync/test_transports.py -k listremotes -v` +Expected: FAIL (`RcloneDriver` has no `listremotes`). + +- [ ] **Step 3: Implement** + +```python + async def listremotes(self) -> tuple[str, ...]: + """Return the remote names defined in rclone.conf (each incl. trailing ``:``). + + Offline and cheap β€” no network. Used by the setup-availability gate and + the Settings remote badge. A missing/unreadable config yields ``()`` so + callers treat "no remotes" the same as "remote not found". + """ + cmd = [self._binary, "listremotes", *self._global_flags()] + try: + rc, stdout, _stderr = await run_subprocess(cmd) + except FileNotFoundError: + return () + if rc != 0: + return () + return tuple(line.strip() for line in stdout.splitlines() if line.strip()) +``` + +- [ ] **Step 4: Run test to verify it passes** + +Run: `uv run pytest tests/unit/sync/test_transports.py -k listremotes -v` +Expected: PASS (2 tests). + +- [ ] **Step 5: Commit** + +```bash +git add src/exlab_wizard/sync/transports/rclone.py tests/unit/sync/test_transports.py +git commit -m "feat(transport): add RcloneDriver.listremotes" +``` + +--- + +## Phase 3 β€” Manifest module + parser + +### Task 3.1: `sync/manifest.py` with `parse_lsjson` + +**Files:** +- Create: `src/exlab_wizard/sync/manifest.py` +- Test: `tests/unit/sync/test_manifest.py` + +- [ ] **Step 1: Write the failing test** + +```python +# tests/unit/sync/test_manifest.py +from exlab_wizard.sync.manifest import RemoteEntry, RemoteManifest, parse_lsjson + +SAMPLE = """[ + {"Path":"sub/a.txt","Name":"a.txt","Size":3,"ModTime":"2026-05-28T10:00:00.000Z","IsDir":false}, + {"Path":"sub","Name":"sub","Size":-1,"ModTime":"2026-05-28T09:00:00Z","IsDir":true}, + {"Path":"b.bin","Name":"b.bin","Size":1024,"ModTime":"2026-05-28T10:01:00Z","IsDir":false} +]""" + + +def test_parse_drops_dirs_and_keys_by_path(): + m = parse_lsjson(SAMPLE) + assert set(m.entries) == {"sub/a.txt", "b.bin"} + assert m.entries["b.bin"] == RemoteEntry(size=1024, mod_time="2026-05-28T10:01:00Z", is_dir=False) + + +def test_parse_strips_prefix(): + raw = '[{"Path":"EQ/run/x.txt","Name":"x.txt","Size":1,"ModTime":"t","IsDir":false}]' + m = parse_lsjson(raw, strip_prefix="EQ/run") + assert "x.txt" in m.entries + + +def test_parse_empty_and_malformed(): + assert parse_lsjson("[]").entries == {} + assert parse_lsjson("").entries == {} + assert parse_lsjson("not json").entries == {} + + +def test_manifest_size_match_helper(): + m = parse_lsjson(SAMPLE) + assert m.size_matches("b.bin", 1024) is True + assert m.size_matches("b.bin", 999) is False + assert m.size_matches("missing.txt", 1) is False + + +def test_manifest_matches_size_and_mtime_within_tolerance(): + from datetime import datetime, timezone + m = parse_lsjson(SAMPLE) + epoch = datetime(2026, 5, 28, 10, 1, 0, tzinfo=timezone.utc).timestamp() # b.bin ModTime + assert m.matches("b.bin", 1024, epoch + 1, tolerance_s=2) is True # within tol + assert m.matches("b.bin", 1024, epoch + 10, tolerance_s=2) is False # mtime drift + assert m.matches("b.bin", 999, epoch, tolerance_s=2) is False # size mismatch + assert m.matches("missing.txt", 1, epoch, tolerance_s=2) is False # absent + + +def test_manifest_to_epoch_handles_fractional_and_z(): + m = parse_lsjson(SAMPLE) + # nanosecond precision + Z must parse (fromisoformat rejects 9 frac digits raw) + assert m._to_epoch("2026-05-28T10:00:00.123456789Z") is not None + assert m._to_epoch("") is None + assert m._to_epoch("garbage") is None +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `uv run pytest tests/unit/sync/test_manifest.py -v` +Expected: FAIL (`ModuleNotFoundError: exlab_wizard.sync.manifest`). + +- [ ] **Step 3: Implement** + +```python +# src/exlab_wizard/sync/manifest.py +"""Parser for ``rclone lsjson`` output into a run-relative remote manifest. + +Sole owner of the lsjson wire shape. Consumers (the NAS sync client's +routine reconcile and cleanup remote-existence probe) depend only on the +:class:`RemoteManifest` value object, never on the raw JSON. +""" + +from __future__ import annotations + +import json +import re +from dataclasses import dataclass +from datetime import datetime + +from exlab_wizard.logging import get_logger + +__all__ = ["RemoteEntry", "RemoteManifest", "parse_lsjson"] + +_log = get_logger(__name__) + +# Trim fractional seconds to 6 digits: datetime.fromisoformat rejects the +# 9-digit nanosecond precision rclone can emit (e.g. "...:00.123456789Z"). +_FRAC_RE = re.compile(r"\.(\d+)") + + +@dataclass(frozen=True, slots=True) +class RemoteEntry: + """One file on the remote. ``mod_time`` is the RFC3339 string as emitted.""" + + size: int + mod_time: str + is_dir: bool + + +@dataclass(frozen=True, slots=True) +class RemoteManifest: + """Run-relative view of a remote subtree. Keyed by POSIX rel-path.""" + + entries: dict[str, RemoteEntry] + + def size_matches(self, rel_path: str, local_size: int) -> bool: + """True iff ``rel_path`` is present and its remote size equals local.""" + entry = self.entries.get(rel_path) + return entry is not None and entry.size == local_size + + def has(self, rel_path: str) -> bool: + """True iff ``rel_path`` is present on the remote (existence probe).""" + return rel_path in self.entries + + def matches( + self, rel_path: str, local_size: int, local_mtime: float, *, tolerance_s: float + ) -> bool: + """The single reconcile predicate: present AND size-equal AND modtime close. + + ``local_mtime`` is the local file's ``st_mtime`` (epoch seconds). A file + is credited as synced only when the remote entry exists, its size equals + ``local_size``, and its modtime is within ``tolerance_s`` of local + (rclone preserves modtime on copy; the window absorbs SFTP/SMB rounding). + """ + entry = self.entries.get(rel_path) + if entry is None or entry.size != local_size: + return False + remote_epoch = self._to_epoch(entry.mod_time) + if remote_epoch is None: + return False + return abs(remote_epoch - local_mtime) <= tolerance_s + + @staticmethod + def _to_epoch(mod_time: str) -> float | None: + """Parse an RFC3339 ``ModTime`` to epoch seconds, or ``None`` if unparseable.""" + s = mod_time.strip() + if not s: + return None + if s.endswith("Z"): + s = s[:-1] + "+00:00" + s = _FRAC_RE.sub(lambda m: "." + m.group(1)[:6], s, count=1) + try: + return datetime.fromisoformat(s).timestamp() + except ValueError: + return None + + +def parse_lsjson(raw: str, *, strip_prefix: str = "") -> RemoteManifest: + """Parse ``rclone lsjson`` array text into a :class:`RemoteManifest`. + + Directory entries are dropped. ``strip_prefix`` (e.g. + ``//``) is removed from each ``Path`` so + keys are run-relative. Malformed / empty input yields an empty manifest + (logged at debug) rather than raising β€” a listing we can't parse must + not crash the sync worker. + """ + text = raw.strip() + if not text: + return RemoteManifest(entries={}) + try: + rows = json.loads(text) + except json.JSONDecodeError: + _log.debug("lsjson output was not valid JSON (%d chars)", len(text)) + return RemoteManifest(entries={}) + if not isinstance(rows, list): + return RemoteManifest(entries={}) + + prefix = strip_prefix.strip("/") + out: dict[str, RemoteEntry] = {} + for row in rows: + if not isinstance(row, dict) or row.get("IsDir"): + continue + path = str(row.get("Path", "")).strip("/") + if not path: + continue + if prefix and path.startswith(prefix + "/"): + path = path[len(prefix) + 1 :] + try: + size = int(row.get("Size", -1)) + except (TypeError, ValueError): + continue + out[path] = RemoteEntry( + size=size, + mod_time=str(row.get("ModTime", "")), + is_dir=False, + ) + return RemoteManifest(entries=out) +``` + +- [ ] **Step 4: Run test to verify it passes** + +Run: `uv run pytest tests/unit/sync/test_manifest.py -v` +Expected: PASS (4 tests). + +- [ ] **Step 5: Commit** + +```bash +git add src/exlab_wizard/sync/manifest.py tests/unit/sync/test_manifest.py +git commit -m "feat(sync): add lsjson manifest parser" +``` + +--- + +## Phase 4 β€” Sync client: named remote, lsjson reconcile, cleanup hash-gate + +This phase flips the runtime behavior. It is the largest single change. + +### Task 4.1: Named-remote target builder + driver construction from `nas:` config + +**Files:** +- Modify: `src/exlab_wizard/sync/nas_client.py` (`_remote_name_for`, `_build_target_for`, `_build_transport_driver`, `_resolve_env_for_equipment` removal, constructor `keyring_store` removal) +- Test: `tests/unit/sync/test_nas_client.py` + +- [ ] **Step 1: Write the failing test** + +```python +# tests/unit/sync/test_nas_client.py β€” add (uses existing helpers/fixtures style) +from pathlib import Path +from exlab_wizard.sync.nas_client import _build_target_for_run + + +def test_build_target_for_run_uses_nas_block(): + target = _build_target_for_run( + remote="nas01", base_root="/srv/lab", equipment_id="CONFOCAL_01", + run=Path("/data/lab/CONFOCAL_01/PROJ-1/Run_2026-05-28"), + ) + assert target == "nas01:/srv/lab/CONFOCAL_01/Run_2026-05-28" +``` + +> Note: this preserves today's `_build_target_for` leaf semantics (the run-leaf dir name is appended after the equipment folder; projects are not nested remotely). If project nesting is later desired, change here in one place. + +- [ ] **Step 2: Run test to verify it fails** + +Run: `uv run pytest tests/unit/sync/test_nas_client.py -k build_target_for_run -v` +Expected: FAIL (`_build_target_for_run` undefined). + +- [ ] **Step 3: Implement** + +In `nas_client.py`, replace `_remote_name_for` / `_build_target_for` / `_resolve_env_for_equipment` / `_build_transport_driver` with `nas:`-config-driven helpers: + +```python +def _build_target_for_run(*, remote: str, base_root: str, equipment_id: str, run: Path) -> str: + """Compose ``://``. + + Preserves the pre-migration leaf semantics: the run directory name is + appended after the equipment folder. ``base_root`` is normalised so a + blank value yields ``:/``. + """ + parts = [base_root.strip("/"), equipment_id, run.name] + path = "/".join(p for p in parts if p) + return f"{remote}:/{path}" + + +def _build_driver(nas: NasConfig) -> RcloneDriver: + return RcloneDriver( + config_path=nas.rclone_config_path or None, + transfers=nas.perf.transfers, + checkers=nas.perf.checkers, + ) +``` + +Update imports: add `from exlab_wizard.config.models import NasConfig`; remove `RcloneSftpTransport`, `RcloneSmbTransport`, `keyring_nas_username`, `build_rclone_env`, `obscure`, `pass_env_keys_for` imports. Delete `_resolve_env_for_equipment` and `_build_transport_driver` entirely. + +`NASSyncClient.__init__`: remove the `keyring_store` parameter and `self._keyring_store`. `_build_push` / `_build_check` become: + +```python + def _build_push(self, equipment: EquipmentConfig) -> Callable[..., Any]: + if self._push_callable_factory is not None: + return self._push_callable_factory(equipment) + driver = _build_driver(self._config.nas) + + async def _push(local, *, bwlimit_kibps, files_from=None): + target = _build_target_for_run( + remote=self._config.nas.remote, + base_root=self._config.nas.base_root, + equipment_id=equipment.id, + run=local, + ) + return await driver.push(local, target, bwlimit_kibps=bwlimit_kibps, files_from=files_from) + + return _push +``` + +`_build_check` mirrors this (calls `driver.check(local, target, files_from=files_from)` β€” no `env`/`mask`). Add a `_build_lsjson(equipment)` returning a closure that calls `driver.lsjson(target)` for the run and returns `parse_lsjson(raw, strip_prefix=...)` where the strip prefix is `f"{base_root.strip('/')}/{equipment.id}/{run.name}"`. + +**DRY β€” centralise target resolution:** factor the remote/base_root selection into a single `_target_for_equipment(equipment, run) -> str` that returns `_build_target_for_run(remote=nas.remote, base_root=nas.base_root, …)` for nas-mode. Phase 8 extends *only this method* to return the staging remote/base_root when `sync_mode == 'stage'`; push/check/lsjson closures all call it, so neither the driver nor the closures branch on mode. + +- [ ] **Step 4: Run test + targeted suite** + +Run: `uv run pytest tests/unit/sync/test_nas_client.py -k build_target_for_run -v` +Expected: PASS. (Broader `test_nas_client.py` will fail until Task 4.2–4.4 + Task 6.x update construction; that is expected and addressed there.) + +- [ ] **Step 5: Commit** + +```bash +git add src/exlab_wizard/sync/nas_client.py tests/unit/sync/test_nas_client.py +git commit -m "refactor(sync): build rclone target from nas: block, drop keyring/env" +``` + +--- + +### Task 4.2: `verifier.py` β€” drop `env`/`mask_for_log` + +**Files:** +- Modify: `src/exlab_wizard/sync/verifier.py` (`Verifier.verify` signature; call site) +- Test: `tests/unit/sync/test_nas_client.py` (existing verifier usage) / add focused test + +- [ ] **Step 1: Write the failing test** + +```python +# tests/unit/sync/test_transports.py β€” add (verifier is small; test via stub driver) +import asyncio +from exlab_wizard.sync.verifier import Verifier +from exlab_wizard.sync.transports.rclone import CheckResult + + +class _StubDriver: + async def check(self, run_path, remote, *, files_from): + return CheckResult(equal=("a.txt",)) + + +def test_verifier_verify_no_env_param(tmp_path): + v = Verifier(_StubDriver()) + res = asyncio.run(v.verify(tmp_path, "nas01:/x", files_from=tmp_path / "f")) + assert res.ok and res.verified == ("a.txt",) +``` + +- [ ] **Step 2: Run test to verify it fails** + +Run: `uv run pytest tests/unit/sync/test_transports.py -k verifier_verify_no_env -v` +Expected: FAIL (`_StubDriver.check` got unexpected `env`). + +- [ ] **Step 3: Implement** + +In `verifier.py`, remove `env` and `mask_for_log` params from `Verifier.verify` and from the `self._driver.check(...)` call. + +- [ ] **Step 4: Run test to verify it passes** + +Run: `uv run pytest tests/unit/sync/test_transports.py -k verifier_verify_no_env -v` +Expected: PASS. + +- [ ] **Step 5: Commit** + +```bash +git add src/exlab_wizard/sync/verifier.py tests/unit/sync/test_transports.py +git commit -m "refactor(sync): verifier no longer threads credential env" +``` + +--- + +### Task 4.3: Routine post-push reconcile via lsjson (replaces per-push `--download`) + +**Files:** +- Modify: `src/exlab_wizard/sync/nas_client.py` (`_drive_job`, add `_reconcile_via_manifest`) +- Test: `tests/unit/sync/test_nas_client.py` + +`_drive_job` changes: after a successful push, instead of running `rclone check --download`, build the lsjson manifest, mark each file synced when `manifest.matches(rel, size, mtime, tolerance_s=nas.mtime_tolerance_s)` (present AND size-equal AND modtime within tolerance), transition to `VERIFIED`, mark synced, then `_maybe_cleanup`. + +- [ ] **Step 1: Write the failing test** + +```python +# tests/unit/sync/test_nas_client.py β€” add +# Build a client with push_callable_factory + a new lsjson_callable_factory that +# returns a RemoteManifest matching local sizes AND modtimes; assert job reaches +# VERIFIED and sync_state.json credits each file WITHOUT a check --download call. +def test_routine_reconcile_marks_synced_from_lsjson(tmp_path, ...): + # See _helpers.make_client; inject lsjson_callable_factory returning + # parse_lsjson of a listing whose Size == local size and ModTime is within + # nas.mtime_tolerance_s of the local file's mtime. + ... + assert status == "verified" + assert check_calls == 0 # hash-verify NOT run on the routine path +``` + +(Use the existing `tests/unit/sync/_helpers.py` client builder; extend it with an `lsjson_callable_factory` injection β€” see Task 7.2.) + +- [ ] **Step 2: Run test to verify it fails** + +Run: `uv run pytest tests/unit/sync/test_nas_client.py -k routine_reconcile -v` +Expected: FAIL. + +- [ ] **Step 3: Implement** + +Add an `lsjson_callable_factory` constructor param (mirrors `push_callable_factory`) and a `_build_lsjson`. Rewrite the verify section of `_drive_job` (lines ~622–683 in the current file): after `await self._queue.transition(job.id, SyncJobState.AWAITING_VERIFY)`, replace the `check` block with: + +```python + lsjson = self._build_lsjson(equipment) + try: + manifest = await lsjson(run_path) + except TransportError as exc: + # auth β†’ terminal; network/unknown β†’ backoff (reuse existing routing) + await self._handle_verify_transport_error(job, exc) + return + + tol = self._config.nas.mtime_tolerance_s + synced_at = utc_now_iso() + credited: list[str] = [] + for rel in verify_files: + # Reuse the existing _file_signature helper for both checks + # (returns (st_size, st_mtime_ns)); convert ns β†’ epoch seconds. + sig = self._file_signature(run_path / rel) + if sig is None: + continue + size, mtime_ns = sig + if manifest.matches(rel, size, mtime_ns / 1e9, tolerance_s=tol): + with contextlib.suppress(Exception): + await self._sync_state_writer.upsert_file( + run_path, rel, + synced_signature=sig, + verified_at=synced_at, + verified_sha256=local_shas.get(rel), + ) + credited.append(rel) + + if len(credited) != len(verify_files): + # Some files missing / size- or mtime-mismatched on the remote: + # re-queue the subset on the next sweep rather than mark VERIFIED. + await self._queue.transition( + job.id, SyncJobState.QUEUED, + last_error="remote_reconcile_incomplete", next_attempt_at="", + ) + return +``` + +Then fall through to the existing VERIFIED transition + `_mark_synced` + `_maybe_cleanup` (keep those). No new local-stat helper is needed β€” `_file_signature` (already on the class, returning `(st_size, st_mtime_ns)`) supplies both the size and the modtime, keeping the stat logic in one place. + +Add `_handle_verify_transport_error(job, exc)` factoring the AUTHβ†’terminal / NETWORK,UNKNOWNβ†’backoff routing already present in `_drive_job`. + +- [ ] **Step 4: Run test to verify it passes** + +Run: `uv run pytest tests/unit/sync/test_nas_client.py -k routine_reconcile -v` +Expected: PASS. + +- [ ] **Step 5: Commit** + +```bash +git add src/exlab_wizard/sync/nas_client.py tests/unit/sync/test_nas_client.py tests/unit/sync/_helpers.py +git commit -m "feat(sync): routine post-push reconcile via lsjson size-match" +``` + +--- + +### Task 4.4: Cleanup hash-gate + real remote-existence probe + +**Files:** +- Modify: `src/exlab_wizard/sync/nas_client.py` (`_maybe_cleanup`, default `_remote_stat_callable`) +- Test: `tests/unit/sync/test_nas_client.py`, `tests/unit/sync/test_cleanup.py` + +Before `_delete_local`, (a) probe lsjson that every tracked file is present, (b) run `rclone check --download` over all tracked files; delete only on `verify_result.ok`. + +- [ ] **Step 1: Write the failing tests** + +```python +# tests/unit/sync/test_nas_client.py β€” add +def test_cleanup_runs_hash_gate_before_delete(tmp_path, ...): + # cleanup enabled + interlocks satisfied + check_callable_factory returns ok + # β†’ local files deleted, state CLEANED, check --download was called once. + ... + +def test_cleanup_aborts_delete_on_hash_mismatch(tmp_path, ...): + # check_callable_factory returns VerifyResult(ok=False, mismatched=(...)) + # β†’ local files remain, state NOT CLEANED. + ... +``` + +- [ ] **Step 2: Run to verify it fails** + +Run: `uv run pytest tests/unit/sync/test_nas_client.py -k cleanup_ -v` +Expected: FAIL. + +- [ ] **Step 3: Implement** + +In `_maybe_cleanup`, after the interlocks pass and before `self._delete_local(...)`: + +```python + # Integrity gate: never delete local bytes that have not been + # content-verified against the remote. This is the one place we pay + # the full rclone check --download re-download (streamed, no disk). + tracked = tuple(sorted(sync_state.files.keys())) + if tracked: + check = self._build_check(equipment) + files_from = self._write_files_from(tracked) + try: + try: + check_result = await check(run_path, files_from=files_from) + except TransportError as exc: + _log.warning("cleanup hash-gate transport error: %s", exc) + await self._queue.transition(job_id, SyncJobState.CLEANUP_ELIGIBLE) + return + verify = VerifyResult.from_check_result(check_result) + finally: + with contextlib.suppress(OSError): + files_from.unlink() + if not verify.ok: + _log.warning("cleanup hash-gate mismatch on %s; not deleting", run_path) + await self._queue.transition(job_id, SyncJobState.CLEANUP_ELIGIBLE) + return +``` + +Replace the default `_remote_stat_callable` with an async lsjson existence probe wired through `_maybe_cleanup`. Simplest: change the interlock to call an async `self._remote_files_present(run_path, equipment, tracked)` that runs lsjson and returns `all(manifest.has(rel) for rel in tracked)`; keep `_remote_stat_callable` injectable for tests (default `None` β†’ use the real probe). + +- [ ] **Step 4: Run to verify it passes** + +Run: `uv run pytest tests/unit/sync/test_nas_client.py -k cleanup_ tests/unit/sync/test_cleanup.py -v` +Expected: PASS. + +- [ ] **Step 5: Commit** + +```bash +git add src/exlab_wizard/sync/nas_client.py tests/unit/sync/test_nas_client.py tests/unit/sync/test_cleanup.py +git commit -m "feat(sync): hash-gate + lsjson existence probe before local deletion" +``` + +--- + +### Task 4.5: `force_verify` β€” drop env threading + +**Files:** +- Modify: `src/exlab_wizard/sync/nas_client.py` (`force_verify`) +- Test: `tests/unit/sync/test_nas_client.py` + +- [ ] **Step 1–4:** `force_verify` already calls `self._build_check(equipment)` β†’ `check(run_path, files_from=...)`. After Task 4.1 `_build_check` no longer threads env, so `force_verify` needs no signature change β€” but verify the test that exercises it still passes: + +Run: `uv run pytest tests/unit/sync/test_nas_client.py -k force_verify -v` +Expected: PASS (adjust the test's stub `check` signature to drop `env`/`mask_for_log` if present). + +- [ ] **Step 5: Commit** (only if a test edit was needed) + +```bash +git add tests/unit/sync/test_nas_client.py +git commit -m "test(sync): force_verify stub matches env-free check signature" +``` + +--- + +## Phase 5 β€” Setup gate + credential removal + +### Task 5.1: Repurpose setup-state enums + +**Files:** +- Modify: `src/exlab_wizard/constants/enums.py` (`SetupState`, `SetupNextAction`) +- Test: `tests/unit/constants/test_enums.py` + +- [ ] **Step 1: Write the failing test** + +```python +# tests/unit/constants/test_enums.py β€” add +from exlab_wizard.constants.enums import SetupState, SetupNextAction + + +def test_nas_remote_setup_members_exist(): + assert SetupState.INCOMPLETE_NO_NAS_REMOTE.value == "incomplete_no_nas_remote" + assert SetupNextAction.CONFIGURE_RCLONE_REMOTE.value == "configure_rclone_remote" +``` + +- [ ] **Step 2: Run to verify it fails** + +Run: `uv run pytest tests/unit/constants/test_enums.py -k nas_remote -v` +Expected: FAIL (`AttributeError`). + +- [ ] **Step 3: Implement** + +In `enums.py`: rename `INCOMPLETE_NO_NAS_CREDENTIAL = "incomplete_no_nas_credential"` β†’ `INCOMPLETE_NO_NAS_REMOTE = "incomplete_no_nas_remote"`. Find `SetupNextAction` (around the `SET_NAS_CREDENTIALS` member) and rename `SET_NAS_CREDENTIALS = "set_nas_credentials"` β†’ `CONFIGURE_RCLONE_REMOTE = "configure_rclone_remote"`. + +- [ ] **Step 4: Run to verify it passes** + +Run: `uv run pytest tests/unit/constants/test_enums.py -k nas_remote -v` +Expected: PASS. (Other modules referencing the old names will fail import/grep β€” fixed in 5.2–5.4.) + +- [ ] **Step 5: Commit** + +```bash +git add src/exlab_wizard/constants/enums.py tests/unit/constants/test_enums.py +git commit -m "refactor(enums): NAS setup state is remote-availability not credential" +``` + +--- + +### Task 5.2: Rewrite the NAS setup-gate in `paths.py` + +**Files:** +- Modify: `src/exlab_wizard/paths.py` (`_password_required_equipment` β†’ remove; `_nas_slot_satisfied` β†’ `_nas_remote_configured`; `evaluate_setup_state`; `setup_state_missing`; `_missing_nas_fields`; `setup_state_next_action`) +- Test: `tests/unit/test_paths.py` + +The gate is satisfied when `config.nas.remote` is non-empty **and** present in `rclone listremotes` (via an injected callable, default "configured-name-is-enough" so unit tests need no rclone). + +- [ ] **Step 1: Write the failing test** + +```python +# tests/unit/test_paths.py β€” add +from exlab_wizard.paths import evaluate_setup_state +from exlab_wizard.constants import SetupState +from exlab_wizard.config.models import Config, NasConfig, EquipmentConfig + + +def _ready_config(remote=""): + return Config( + paths={"templates_dir": "/t", "plugin_dir": "/p", "local_root": "/l"}, + orchestrator={"label": "ws-1"}, + equipment=[EquipmentConfig(id="EQ_01", label="Eq", local_root="/l", nas_root="//n/x")], + lims={"endpoint": "https://x", "email": "a@b.c"}, + nas=NasConfig(remote=remote, base_root="/srv"), + ) + + +def test_setup_incomplete_when_nas_remote_blank(): + state = evaluate_setup_state(_ready_config(remote=""), nas_remote_available=lambda n: True) + assert state == SetupState.INCOMPLETE_NO_NAS_REMOTE + + +def test_setup_incomplete_when_remote_not_in_rclone_conf(): + state = evaluate_setup_state(_ready_config(remote="nas01"), nas_remote_available=lambda n: False) + assert state == SetupState.INCOMPLETE_NO_NAS_REMOTE + + +def test_setup_ready_when_remote_present(): + state = evaluate_setup_state(_ready_config(remote="nas01"), nas_remote_available=lambda n: True) + assert state == SetupState.READY +``` + +> EquipmentConfig no longer requires a `transport` for nas-mode after Task 7.1; until then this test needs a transport. Run this test AFTER Task 7.1, OR temporarily construct equipment with `sync_mode="stage"`. Mark dependency: **depends on Task 7.1**. + +- [ ] **Step 2: Run to verify it fails** + +Run: `uv run pytest tests/unit/test_paths.py -k nas_remote -v` +Expected: FAIL (`evaluate_setup_state` has no `nas_remote_available`). + +- [ ] **Step 3: Implement** + +Replace `_password_required_equipment` and `_nas_slot_satisfied` with: + +```python +def _nas_in_use(config: Config) -> bool: + """True when at least one nas-mode equipment exists (NAS sync is active).""" + from exlab_wizard.constants import SyncMode + return any(eq.sync_mode == SyncMode.NAS for eq in config.equipment) + + +def _nas_remote_satisfied(config: Config, *, nas_remote_available: Callable[[str], bool]) -> bool: + """True when the nas: remote is configured AND present in rclone.conf. + + Only gates when NAS sync is actually in use (a stage-only device with no + nas-mode equipment does not need a NAS remote). + """ + if not _nas_in_use(config): + return True + remote = config.nas.remote + return bool(remote) and nas_remote_available(remote) +``` + +In `evaluate_setup_state`: replace the `nas_password_present_for` param with `nas_remote_available: Callable[[str], bool] | None = None` (default `lambda _n: True`); replace gate 4 with: + +```python + remote_lookup = nas_remote_available if nas_remote_available is not None else (lambda _n: True) + if not _nas_remote_satisfied(config, nas_remote_available=remote_lookup): + return SetupState.INCOMPLETE_NO_NAS_REMOTE +``` + +In `setup_state_missing`: change the `INCOMPLETE_NO_NAS_CREDENTIAL` branch to `INCOMPLETE_NO_NAS_REMOTE` and have `_missing_nas_fields` return: + +```python +def _missing_nas_fields(config: Config | None) -> list[dict[str, str]]: + if config is None or not config.nas.remote: + return [{"field": "nas.remote", "reason": "unset"}] + return [{"field": "nas.remote", "reason": "not_found_in_rclone_conf"}] +``` + +In `setup_state_next_action`: `INCOMPLETE_NO_NAS_REMOTE β†’ SetupNextAction.CONFIGURE_RCLONE_REMOTE`. + +- [ ] **Step 4: Run to verify it passes** (after Task 7.1) + +Run: `uv run pytest tests/unit/test_paths.py -k nas_remote -v` +Expected: PASS. + +- [ ] **Step 5: Commit** + +```bash +git add src/exlab_wizard/paths.py tests/unit/test_paths.py +git commit -m "feat(setup): gate on rclone remote availability, not keyring password" +``` + +--- + +### Task 5.3: Tray probe + NAS-sync wiring + password-presence removal + +**Files:** +- Modify: `src/exlab_wizard/tray/dependencies.py` (`_make_equipment_probe`, `_build_nas_sync`, remove `_check_nas_passwords_present`/`_nas_keyring_password` + the `deps.nas_password_present` hydration ~line 143) +- Test: `tests/unit/tray/test_dependencies.py` + +- [ ] **Step 1: Write the failing test** + +```python +# tests/unit/tray/test_dependencies.py β€” add/replace probe test +def test_equipment_probe_uses_named_remote(monkeypatch): + # deps.config.nas.remote == "nas01"; probe calls RcloneDriver.about("nas01:") + # with NO env; returns ok on STUB about_success. + ... + +def test_nas_remote_available_checks_listremotes(monkeypatch): + # boot hydrates deps.nas_remotes via RcloneDriver.listremotes(); the sync + # predicate reports membership of f"{remote}:". + ... +``` + +- [ ] **Step 2: Run to verify it fails** + +Run: `uv run pytest tests/unit/tray/test_dependencies.py -k remote -v` +Expected: FAIL. + +- [ ] **Step 3: Implement** + +Rewrite `_make_equipment_probe._probe` to ignore the keyring and probe the `nas:` remote: + +```python + async def _probe(equipment: Any) -> dict[str, Any]: + nas = getattr(deps.config, "nas", None) + if nas is None or not nas.remote: + return {"ok": False, "reason": "no NAS remote configured"} + from exlab_wizard.sync.transports.rclone import RcloneDriver + driver = RcloneDriver(config_path=nas.rclone_config_path or None) + started = time.monotonic() + try: + about = await driver.about(f"{nas.remote}:") + except Exception as exc: + return {"ok": False, "reason": str(exc)} + latency_ms = int((time.monotonic() - started) * 1000) + if not about.ok: + return {"ok": False, "reason": about.reason, "latency_ms": latency_ms} + return {"ok": True, "reason": None, "latency_ms": latency_ms} +``` + +Hydrate the available remotes **through the driver op** (DRY β€” `tray` must not run rclone itself). At boot, in place of the `deps.nas_password_present` block (line ~143), one-shot the async op and cache the result, mirroring the existing "hydrate once at boot, sync lookup thereafter" pattern: + +```python + def _hydrate_nas_remotes(config: Any) -> tuple[str, ...]: + nas = getattr(config, "nas", None) + if nas is None: + return () + from exlab_wizard.sync.transports.rclone import RcloneDriver + driver = RcloneDriver(config_path=getattr(nas, "rclone_config_path", "") or None) + try: + return asyncio.run(driver.listremotes()) # sync boot context, no running loop + except Exception: + return () + + deps.nas_remotes = _try("nas_remotes", _hydrate_nas_remotes, deps.config) or () + deps.nas_remote_available = lambda remote: f"{remote}:" in deps.nas_remotes +``` + +Delete `_check_nas_passwords_present` and `_nas_keyring_password`. `deps.nas_remote_available` is the single sync predicate the setup gate (Task 5.2) and API (Task 5.4) consume. + +`_build_nas_sync`: remove the `keyring_store` argument from the `NASSyncClient(...)` call and from the function signature; remove the keyring import. + +- [ ] **Step 4: Run to verify it passes** + +Run: `uv run pytest tests/unit/tray/test_dependencies.py -k remote -v` +Expected: PASS. + +- [ ] **Step 5: Commit** + +```bash +git add src/exlab_wizard/tray/dependencies.py tests/unit/tray/test_dependencies.py +git commit -m "feat(tray): equipment probe + setup gate use named rclone remote" +``` + +--- + +### Task 5.4: API surfaces β€” drop `nas_password_present`, thread `nas_remote_available` + +**Files:** +- Modify: `src/exlab_wizard/api/_dependencies.py` (remove `nas_password_present`; add `nas_remote_available`), `src/exlab_wizard/api/app.py` (replace the `nas_password_present: set` field with `nas_remote_available: Callable`), `src/exlab_wizard/api/setup.py` and `src/exlab_wizard/api/routers/config.py` (swap the `nas_password_present_for=...` kwargs for `nas_remote_available=...`) +- Test: `tests/unit/api/test_setup.py`, `tests/unit/api/test_config_router.py` + +- [ ] **Step 1: Write the failing test** β€” assert `GET /setup/status` returns `next_action == "configure_rclone_remote"` when `nas.remote` is blank and equipment is nas-mode. + +- [ ] **Step 2: Run to verify it fails.** +Run: `uv run pytest tests/unit/api/test_setup.py -k rclone_remote -v` β†’ FAIL. + +- [ ] **Step 3: Implement** the three swaps. `api/app.py`: +```python + nas_remote_available: Callable[[str], bool] = field(default=lambda _n: True) +``` +`api/_dependencies.py`: replace `nas_password_present(deps, eq_id)` with `nas_remote_available(deps, remote)` reading `deps.nas_remote_available`. `setup.py` / `config.py`: replace each `nas_password_present_for=lambda equipment_id: nas_password_present(deps, equipment_id)` with `nas_remote_available=lambda remote: deps.nas_remote_available(remote)` and pass it to `evaluate_setup_state` / `setup_state_missing`. + +- [ ] **Step 4: Run to verify it passes.** +Run: `uv run pytest tests/unit/api/test_setup.py tests/unit/api/test_config_router.py -v` β†’ PASS. + +- [ ] **Step 5: Commit** +```bash +git add src/exlab_wizard/api/ tests/unit/api/ +git commit -m "feat(api): setup status reports rclone-remote availability" +``` + +--- + +## Phase 6 β€” UI + +### Task 6.1: Settings "NAS Remote" section (replaces NAS Credentials) + +**Files:** +- Modify: `src/exlab_wizard/ui/pages/settings.py` (`_render_nas_credentials_section` β†’ `_render_nas_remote_section`, section id/label, ordering helpers), `src/exlab_wizard/ui/mount.py` (`_nas_credential_handlers` removal; `_nas_credential_missing` β†’ `_nas_remote_missing`; readiness list ~line 1592) +- Test: `tests/unit/ui/test_settings_nas_credentials.py` (rename β†’ `test_settings_nas_remote.py`), `tests/unit/ui/test_mount.py` + +- [ ] **Step 1: Write the failing test** β€” the NAS section renders the configured `nas.remote` + `base_root`, a found/not-found badge from `nas_remote_available`, and a "Test connection" button bound to the equipment probe; it has NO password input. + +- [ ] **Step 2: Run β†’ FAIL.** +Run: `uv run pytest tests/unit/ui/test_settings_nas_remote.py -v` + +- [ ] **Step 3: Implement.** Replace `NAS_CREDENTIALS_SECTION = "nas_credentials"` with `NAS_REMOTE_SECTION = "nas_remote"` and label `"NAS Remote"`. `_render_nas_remote_section(container, *, nas, nas_remote_available, on_test_connection)` renders read-only remote/base_root + badge + Test button. Drop `nas_password_present_for` / `nas_credential_handlers` params throughout `settings.py`. In `mount.py`, delete `_nas_credential_handlers`, replace `_nas_credential_missing(deps, config)` with `_nas_remote_missing(deps, config)` (returns True when nas-mode equipment exist and `not config.nas.remote or not deps.nas_remote_available(config.nas.remote)`), update the readiness `missing.append("nas_credentials")` β†’ `missing.append("nas_remote")`. + +- [ ] **Step 4: Run β†’ PASS.** +- [ ] **Step 5: Commit** +```bash +git add src/exlab_wizard/ui/pages/settings.py src/exlab_wizard/ui/mount.py tests/unit/ui/ +git rm tests/unit/ui/test_settings_nas_credentials.py 2>/dev/null || true +git commit -m "feat(ui): Settings shows NAS remote status, not password entry" +``` + +### Task 6.2: Equipment wizard/form β€” drop transport fields; main-page banner copy + +**Files:** +- Modify: `src/exlab_wizard/ui/pages/wizard_equipment.py`, `src/exlab_wizard/ui/equipment_form.py`, `src/exlab_wizard/ui/pages/main.py` (banner subline map ~line 118), `src/exlab_wizard/ui/components/metadata_pane.py` (unchanged β€” `nas_root` display stays) +- Test: `tests/unit/ui/test_wizard_equipment.py`, `tests/unit/ui/test_dynamic_form.py`, `tests/unit/ui/test_mount.py` + +- [ ] **Step 1: Write the failing test** β€” building a nas-mode equipment from the form produces an `EquipmentConfig` with no transport block and validates; the wizard exposes no host/port/user/share/password inputs for nas mode. +- [ ] **Step 2: Run β†’ FAIL.** +- [ ] **Step 3: Implement.** Remove SFTP/SMB field state + widgets from `wizard_equipment.py` and the `transport=` construction in `equipment_form.py` for nas mode (nas-mode `build` sets `transport=None`). In `main.py`, change `"set_nas_credentials": (...)` entry to a `"configure_rclone_remote": ("Configure the rclone remote (see setup docs) to begin.")` keyed by the new next-action value. +- [ ] **Step 4: Run β†’ PASS.** +- [ ] **Step 5: Commit** +```bash +git add src/exlab_wizard/ui/ tests/unit/ui/ +git commit -m "feat(ui): equipment wizard drops NAS transport/credential fields" +``` + +--- + +## Phase 7 β€” Remove dead code (clean break) + +### Task 7.1: Remove the transport union + EquipmentConfig.transport + +**Files:** +- Modify: `src/exlab_wizard/config/models.py` (delete `RcloneSftpTransport`, `RcloneSmbTransport`, `EquipmentTransport`, `transport_requires_keyring_password`, `OrchestratorStagingTransport` IF Phase 8 not taken; `EquipmentConfig.transport` field + validator) +- Test: `tests/unit/config/test_models.py` + +- [ ] **Step 1: Write the failing test** + +```python +def test_nas_mode_equipment_needs_no_transport_block(): + eq = EquipmentConfig(id="EQ_01", label="Eq", local_root="/l", nas_root="//n/x", sync_mode="nas") + assert eq.sync_mode.value == "nas" + +def test_transport_symbols_removed(): + import exlab_wizard.config.models as m + assert not hasattr(m, "RcloneSftpTransport") + assert not hasattr(m, "EquipmentTransport") +``` + +- [ ] **Step 2: Run β†’ FAIL** (`EquipmentConfig` still requires transport for nas). +- [ ] **Step 3: Implement.** Delete the transport classes (lines 227–285), remove `transport` and `orchestrator_staging_transport` fields' nas/stage coupling. Rewrite `_sync_mode_dictates_transport` to only validate `sync_mode` membership (no per-equipment transport requirement). Remove the deleted names from `__all__`. Keep `OrchestratorStagingTransport` only if Phase 8 is taken; otherwise delete it and the `OrchestratorTransportType` enum. +- [ ] **Step 4: Run β†’ PASS.** Then `uv run pytest -q` whole suite. +- [ ] **Step 5: Commit** +```bash +git add src/exlab_wizard/config/models.py tests/unit/config/test_models.py +git commit -m "refactor(config): remove per-equipment transport blocks (clean break)" +``` + +### Task 7.2: Remove `build_rclone_env`/`obscure`/`pass_env_keys_for` + keyring helper + env plumbing + +**Files:** +- Modify: `src/exlab_wizard/sync/transports/rclone.py` (delete `build_rclone_env`, `pass_env_keys_for`, `obscure`; trim `__all__`; remove `env`/`mask_for_log` params from `push`/`check`/`about`), `src/exlab_wizard/sync/transports/_run.py` (remove `env`/`mask_for_log` from `run_subprocess`; update docstring), `src/exlab_wizard/constants/keyring.py` (delete `keyring_nas_username` + `constants/__init__.py` export) +- Test: delete `tests/unit/sync/transports/test_rclone_env.py` + +- [ ] **Step 1:** `git rm tests/unit/sync/transports/test_rclone_env.py`. +- [ ] **Step 2:** Run `uv run pytest -q` β†’ expect failures only in files still importing the removed symbols; grep first: `grep -rn "build_rclone_env\|pass_env_keys_for\|obscure\|keyring_nas_username\|RCLONE_CONFIG_" src tests`. +- [ ] **Step 3: Implement** the deletions. Simplify `run_subprocess` to `run_subprocess(cmd, *, stdin=None)` (the only remaining caller passing stdin was `obscure`, now gone, so `stdin` can also go β€” verify with grep; if nothing uses stdin, drop it). Update `_run.py` docstring to describe a plain spawn helper. +- [ ] **Step 4:** `uv run pytest -q` β†’ PASS. `grep` returns nothing in `src/`. +- [ ] **Step 5: Commit** +```bash +git add -A +git commit -m "refactor(transport): remove credential injection + NAS keyring helper" +``` + +--- + +## Phase 8 β€” Orchestrator staging via rclone (confirmed in scope) + +> Today the stage-mode hop is a mounted-filesystem copy (`OrchestratorTransportType` = `smb_mount`/`file_transfer`) and `OrchestratorStagingTransport` is not wired to any push. This phase replaces it with an rclone push to a named staging remote, **reusing the same `RcloneDriver` ops and the same `_build_target_for_run` helper as the NAS leg β€” no new rclone operation is introduced** (DRY). `_target_for_equipment(equipment)` selects the staging remote/base_root when `sync_mode == 'stage'` and the NAS remote/base_root otherwise. + +### Task 8.1: Staging config β€” `orchestrator.staging_remote` / `staging_base_root` + +**Files:** +- Modify: `src/exlab_wizard/config/models.py` (`OrchestratorConfig`: add `staging_remote: str = ""`, `staging_base_root: str = ""`, `staging_perf: RclonePerf`; delete `OrchestratorStagingTransport`), `src/exlab_wizard/constants/enums.py` (delete `OrchestratorTransportType`), `src/exlab_wizard/ui/equipment_form.py`/`wizard_equipment.py` (drop mount fields) +- Test: `tests/unit/config/test_models.py` + +- [ ] Steps mirror Task 1.1 (TDD): add fields + default test, then implement, then update the wizard/form to set `sync_mode="stage"` without a mount block. Commit `feat(config): orchestrator staging uses a named rclone remote`. + +### Task 8.2: Stage-mode push routes through rclone + +**Files:** +- Modify: `src/exlab_wizard/sync/nas_client.py` or a new `sync/staging_push.py` (decide: the quiescence poller already enqueues stage runs into `NASSyncClient`; the cleanest path is to give `NASSyncClient` a per-equipment target resolver that picks the staging remote+root for stage-mode and the nas remote+root for nas-mode) +- Test: `tests/unit/sync/test_nas_client.py`, `tests/integration/test_orchestrator_lifecycle.py` + +- [ ] TDD: a stage-mode equipment's push target is `://`. Implement a `_target_for_equipment(equipment)` that branches on `sync_mode`. Commit `feat(sync): stage-mode equipment push via rclone staging remote`. + +--- + +## Phase 9 β€” Fixtures, integration, docker, docs + +### Task 9.1: Teach `stub_rclone` lsjson + listremotes; drop env-require + +**Files:** +- Modify: `tests/fixtures/stub_rclone.py` +- Test: exercised indirectly by sync/integration tests + +- [ ] **Step 1:** Add to the module docstring + `main()`: + - `lsjson` verb: read the copied dest tree under `STUB_RCLONE_DEST_ROOT` for the requested `:` and print a JSON array of `{Path,Name,Size,ModTime,IsDir}` (Path relative to the listed root, recursive). Honor `STUB_RCLONE_BEHAVIOR` (`lsjson_empty` β†’ `[]`; `auth_error`/`network_error` β†’ stderr + rc 1). + - `listremotes` verb: print remotes from `STUB_RCLONE_LISTREMOTES` (default `nas01:`), one per line. + - Delete `_dump_env`, `_require_env`, and the `STUB_RCLONE_REQUIRE_ENV`/`STUB_RCLONE_ENV_DUMP` docs (no env injection anymore). Remove the `obscure` verb branch. + +```python + if verb == "lsjson": + if behavior in ("auth_error", "network_error"): + sys.stderr.write("401 Unauthorized\n" if behavior == "auth_error" else "network timeout\n") + return 1 + remote_arg = next((a for a in sys.argv[2:] if not a.startswith("-")), "") + _, _, path = remote_arg.partition(":") + root = Path(dest_root) / path.lstrip("/") if dest_root else Path(path) + rows = [] + if root.is_dir(): + for f in sorted(root.rglob("*")): + rel = f.relative_to(root).as_posix() + rows.append({ + "Path": rel, "Name": f.name, + "Size": f.stat().st_size if f.is_file() else -1, + "ModTime": "2026-05-28T00:00:00Z", "IsDir": f.is_dir(), + }) + sys.stdout.write(json.dumps(rows)) + return 0 + + if verb == "listremotes": + sys.stdout.write(os.environ.get("STUB_RCLONE_LISTREMOTES", "nas01:") + "\n") + return 0 +``` + +- [ ] **Step 2–4:** `uv run pytest tests/unit/sync -q` β†’ PASS. +- [ ] **Step 5: Commit** `test(fixtures): stub rclone learns lsjson/listremotes, drops env injection`. + +### Task 9.2: Integration + e2e + docker `rclone.conf` + +**Files:** +- Create: `tests/docker/rclone.conf` (stanzas for the compose SFTP/SMB services) +- Modify: `tests/docker/docker-compose.yml`, `tests/integration/test_nas_sync.py`, `tests/e2e/test_flow_27_nas_credential_settings.py` (β†’ remote-availability flow), lifecycle flows, `tests/integration/api/test_full_flow.py` + +- [ ] TDD/adjust: integration tests construct `Config(nas=NasConfig(remote="nas01", base_root=..., rclone_config_path="tests/docker/rclone.conf"))` and assert pushβ†’lsjson-reconcileβ†’cleanup hash-gate end to end against the dockerised servers. Rename the e2e NAS-credential flow to assert the Settings "NAS Remote" section + Test connection. Commit `test: integration + e2e exercise named-remote NAS sync`. + +### Task 9.3: Docs + +**Files:** +- Create: `docs/setup/rclone-remote-setup.md` +- Modify: `design_specs/design_spec_sections/09_Configuration_File.md`, `07_Sync_and_Database_Integration.md`, `04_Backend_Architecture.md`, `README.md` + +- [ ] Write the operator guide: `rclone config` walkthrough for SFTP and SMB, naming the remote to match `nas.remote`, setting `base_root`, the unencrypted-config assumption (encrypted β‡’ operator's own `RCLONE_CONFIG_PASS`), and the tray-app `rclone_config_path` caveat. Update Β§09 (new `nas:` block, removed `transport:`), Β§07 (lsjson reconcile + cleanup hash-gate), Β§04, and README. Commit `docs: rclone.conf setup guide + spec/README updates`. + +### Task 9.4: Full-suite + lint/type gate + +- [ ] Run: `uv run pytest -q` β†’ all PASS. +- [ ] Run: `uv run ruff check src tests` and `uv run mypy src/exlab_wizard` β†’ clean. +- [ ] Grep clean (removed symbols): `grep -rn "keyring_nas_username\|build_rclone_env\|RCLONE_CONFIG_\|INCOMPLETE_NO_NAS_CREDENTIAL\|SET_NAS_CREDENTIALS\|nas_password_present" src` β†’ no hits. +- [ ] **DRY guard (single rclone-ops surface):** `grep -rnE "run_subprocess|[\"']rclone[\"']" src/exlab_wizard | grep -v "sync/transports/"` β†’ **no hits** (only `sync/transports/` shells out to rclone; every other caller goes through `RcloneDriver`). +- [ ] Commit any final fixups: `chore: lint/type clean-up for rclone.conf migration`. + +--- + +## Self-Review (completed during authoring) + +- **Spec coverage:** Β§1 config (incl. `mtime_tolerance_s`, `--transfers`/`--checkers`) β†’ Phase 1/7/8; Β§1 DRY ops surface β†’ Tasks 2.1–2.3 + DRY guard in 9.4; Β§2 orchestrator β†’ Phase 8; Β§3 driver β†’ Phase 2/7; Β§4 manifest (size+mtime `matches`) β†’ Phase 3; Β§5 verify/cleanup flow β†’ Phase 4; Β§6 credentials/setup β†’ Phase 5/7; Β§7 UI β†’ Phase 6; Β§8 docs β†’ Phase 9.3; Β§9 tests β†’ Phase 9.1/9.2. βœ“ +- **Placeholder scan:** Tasks 4.3/4.4/5.3/5.4/6.x/8.x give the load-bearing code; a few UI/test tasks describe edits at method granularity with exact symbols rather than full bodies (the bodies are mechanical given the named functions). No "TBD"/"add error handling" left. +- **Type consistency:** `NasConfig.{remote,base_root,rclone_config_path,mtime_tolerance_s,perf,bandwidth}`, `RclonePerf.{transfers,checkers}`, `RcloneDriver(config_path=, transfers=, checkers=)` + `.lsjson()`/`.listremotes()`, `parse_lsjson(raw, strip_prefix=)`, `RemoteManifest.{has,size_matches,matches(rel,size,mtime,*,tolerance_s),_to_epoch}`, `_build_target_for_run(remote=, base_root=, equipment_id=, run=)`, `_target_for_equipment(equipment, run)`, `nas_remote_available(remote)` / `deps.nas_remotes`, `SetupState.INCOMPLETE_NO_NAS_REMOTE`, `SetupNextAction.CONFIGURE_RCLONE_REMOTE` are used consistently across tasks. +- **DRY:** all rclone invocations are `RcloneDriver` methods (`push`/`check`/`about`/`lsjson`/`listremotes`); target strings come from one `_build_target_for_run` + `_target_for_equipment`; both nas-mode and stage-mode (Phase 8) reuse them; guarded by the 9.4 grep. +- **Cross-task dependency:** Task 5.2's `test_paths.py` cases depend on Task 7.1 (nas-mode without transport). Flagged inline. diff --git a/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md b/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md new file mode 100644 index 0000000..945523b --- /dev/null +++ b/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md @@ -0,0 +1,259 @@ +# Operator-free, per-file quiescence-driven NAS sync β€” design + +- **Date:** 2026-05-21 +- **Status:** Approved (design); implementation plan pending +- **Affects:** orchestrator staging, NAS sync, config schema, Add-Equipment wizard, main GUI + +## Context + +Today a staged run is promoted from `staging` to `complete` when the +orchestrator observes a *completeness signal* β€” a sentinel file the +**equipment machine** writes, or a manifest the equipment emits +(Design Spec Β§13.5). Completeness, the sentinel/manifest filenames, and +the choice between them are configured **per equipment** in +`config.yaml` and collected by step 4 of the Add-Equipment wizard. + +This couples the orchestrator to equipment-side cooperation and to a +fixed per-equipment policy. It also offers no protection against +syncing a file that is still being written: the post-transfer SHA-256 +verifier (`sync/verifier.py`) catches *wire* corruption but not a +partial *source* file β€” a half-written file copies and hashes +consistently on both ends and passes verification. + +## Goals + +- Decide a file is ready to sync with **zero equipment cooperation**. +- Never transfer a file that is still being written. +- Remove operator/equipment involvement from the sync trigger entirely: + no marking, no sentinel, no manifest. +- Sync each file **independently**, as soon as it is safe. + +## Non-goals + +- Changing the equipment β†’ staging transport (outside the app, Β§13.6). +- Operator "mark complete / incomplete" actions (considered and + dropped β€” quiescence is the trigger, so marking is unnecessary). +- Automatic completeness *detection* by sentinel/manifest (removed). + +## The model + +A background **quiescence poller** sweeps every run directory pending +NAS sync β€” **both** orchestrator staging-area runs **and** runs +acquired directly on `nas`-mode equipment β€” on an interval. One +unified poller is the single sync trigger for every run that must reach +the NAS. A file becomes eligible to sync when **all** hold: + +1. the poller has **observed** its `(size, mtime)` unchanged across its + own consecutive sweeps spanning β‰₯ the settle threshold + (`sync.quiescence_minutes`, default **10**). Eligibility is measured + from the poller's own observations, *not* the absolute age of + `mtime` β€” transports (`rsync -t`, `rclone`) preserve the source + `mtime`, so a file can land in staging already showing an old + timestamp. The poller must therefore persist or carry forward a + prior-sweep snapshot to compare against. +2. it does not match any `sync.ignore_globs` entry (default + `["*.partial", "*.tmp"]`); +3. it is not already synced *at its current state* β€” a file modified + after a prior successful sync becomes eligible again once it + re-settles. + +Eligible files are synced to the NAS independently (file-level +granularity). There is no run-level "complete" gate. + +## Config changes (`config/models.py`) + +**Remove from `EquipmentConfig`:** + +- `completeness_signal`, `sentinel_filename`, `manifest_filename`; +- the `_completeness_signal_requires_matching_filename` model validator; +- the `_serialize_completeness_signal` field serializer. + +**Remove the `CompletenessSignal` enum** (`constants/enums.py`) β€” no +remaining consumer once the watcher's signal logic is gone. + +**Add to `SyncConfig`:** + +- `quiescence_minutes: int = 10` (ge β‰₯ 1) β€” the per-file settle window. +- `ignore_globs: list[str] = ["*.partial", "*.tmp"]` β€” names skipped + from eligibility (in-progress transport temp files). +- `poll_interval_seconds: int = 120` β€” how often the poller sweeps. + Coarse by design: with a 10-minute settle window there is no value + in sweeping faster. + +These are **global** settings, not per-equipment β€” completeness policy +is no longer an equipment attribute. + +## Run lifecycle β€” rollup (Approach 1) + +`IngestState` collapses from five states (`staging`, `complete`, +`sync_queued`, `sync_verified`, `cleared`) to the milestones that are +genuinely monotonic plus a derived rollup: + +- `SYNCING` β€” at least one non-ignored file is unsynced/unverified. +- `SYNCED` β€” every non-ignored file is verified on the NAS. +- `CLEARED` β€” the run's staging copy has been cleaned up. + +A run's `SYNCING`/`SYNCED` status is **derived on read** from +`sync_state.json` (below); it is never an appended history entry, +because it can oscillate (a `SYNCED` run whose file is modified again +returns to `SYNCING`). + +## Per-file sync state β€” `sync_state.json` + +A new per-run file `/.exlab-wizard/sync_state.json`, written by the +orchestrator only. It is a **freely-mutable current-state map** (not +append-only): relative file path β†’ record: + +``` +{ + "": { + "synced_signature": [size, mtime], // (size, mtime) at last successful sync; null if never synced + "verified_at": "", // null until SHA-256 verified + "keep_local": false + }, + ... +} +``` + +- `synced_signature` answers both "already synced?" and "modified since + sync?" β€” if the file's current `(size, mtime)` differs, it is + re-eligible once it re-settles. +- This file is the source of truth the GUI's existing + `sync_status_icon` reads for per-file status. + +## `ingest.json` contract (risk 2 resolution) + +`ingest.json` keeps its append-only `history`, but its entries are +**milestone events**, not rollup states: `created` at run bootstrap and +`cleared` at cleanup. It no longer stores a `syncing`/`synced` +`current_state`. Consequently `CLEARED` is the only `IngestState` +member ever persisted; `SYNCING` and `SYNCED` exist solely as the +computed rollup and are never written to `history`. All churny +per-file and rollup data lives in the freely-mutable `sync_state.json`, +and the run-level rollup is computed on read from it whenever the GUI +or cleanup needs it. This preserves the append-only history contract +without spamming it with rollup oscillation. + +## `keep-local` (per-file) + +A per-file boolean in `sync_state.json`. A `keep_local` file **still +syncs** to the NAS; it is **excluded from cleanup deletion**. The +operator toggles it from the file-list context menu, but +`sync_state.json` has a **single writer β€” the orchestrator** β€” so the +context-menu action calls a backend API endpoint that applies the flag; +the GUI never writes `sync_state.json` directly. + +## GUI per-file display state + +The GUI file list for a run is sourced from `sync_state.json` (the +durable per-file record), unioned with any local files not yet +recorded. Because `sync_state.json` lives in `/.exlab-wizard/` and +**survives cleanup**, the operator never loses visibility β€” a fully +cleared run still expands to show every file as an "On NAS" tombstone. + +Each file resolves to one display state: + +| In `sync_state.json` | Local file on disk | GUI state | +|---|---|---| +| not recorded yet | present | **Acquiring** β€” new, still settling | +| recorded, `verified_at` null | present | **Syncing** β€” settled / in transfer | +| recorded, `verified_at` set | present | **Synced** β€” on NAS, local copy still here | +| recorded, `verified_at` set | absent | **On NAS** β€” tombstone, local copy cleared | +| `keep_local` true | present | **Kept local** badge, plus its sync state | + +The run-node rollup (`SYNCING` / `SYNCED` / `CLEARED`) is derived from +these per-file states. + +## Failure handling + +A file whose transfer or SHA-256 verification fails keeps +`synced_signature` and `verified_at` null in `sync_state.json`, so it +stays eligible and is retried on the next sweep, bounded by +`sync.retry_attempts`. After retries are exhausted the file is surfaced +as a per-file error in the GUI (existing problems/sync-status +machinery) and the run rollup stays `SYNCING`. + +## Cleanup β€” rollup + +Per-run, trigger style unchanged: once a run is `SYNCED` and +`retain_hours` has elapsed, clear it β€” delete every file **except** +those flagged `keep_local` and the `.exlab-wizard/` metadata directory. +`StagingCleanupMode.MANUAL` still never auto-clears. + +## Transport batching (risk 1 resolution) + +Per-file eligibility must not become per-file transport invocations. +The poller groups a sweep's eligible files **by run** and emits **one +transport job per run**, carrying that run's eligible-file list. Runs +cannot be batched together β€” each has its own `local_root β†’ nas_root` +src/dst pair β€” so per-run is the natural and maximal batch. + +- `sync/queue.py` job payload becomes `(run_path, [relative paths])`. +- `sync/transports/rclone.py` and `rsync_ssh.py` gain a files-from + mode: write the list to a temp file, pass `--files-from`. Both tools + support this natively (`rclone copy --files-from`, `rsync + --files-from`). + +After each per-run batched transfer the existing `sync/verifier.py` +SHA-256 pass runs over the transferred files; each file's `verified_at` +in `sync_state.json` is set when its hash is confirmed against the NAS +copy. A file counts toward the `SYNCED` rollup only once `verified_at` +is set. + +## Components touched + +- **New `QuiescenceSyncPoller`** β€” the single sync trigger for **every** + run pending NAS sync, orchestrator-staged *and* `nas`-mode. It + supersedes the run-state machine in + `orchestrator/staging_watcher.py`'s `evaluate_run`: sweep β†’ per-file + eligibility β†’ group by run β†’ enqueue β†’ on verify, update + `sync_state.json`. The existing `StagingWatcher`'s sentinel/manifest + watching is removed; its run-discovery for the staging area is reused + and extended to also discover `nas`-mode run directories. +- **`sync/queue.py` + transports** β€” per-run file-list jobs (above). +- **`config/models.py`, `constants/enums.py`** β€” config + enum changes. +- **`api/schemas.py`** β€” `IngestJson` state set; new `sync_state.json` + schema/struct. +- **API** β€” a `keep_local` toggle endpoint (single-writer; see + *`keep-local`* above). +- **Add-Equipment wizard** (`ui/pages/wizard_equipment.py`) β€” drop + step 4 "Completeness signal"; `EQUIPMENT_WIZARD_STEPS` 5 β†’ 4; update + `EquipmentWizardState`, `can_advance`, `_STEP_RENDERERS`, + `assemble_equipment_config`/`build_equipment_config`. +- **GUI** β€” run tree shows the `syncing`/`synced` rollup; file list + is sourced from `sync_state.json` (per *GUI per-file display state*), + keeps per-file sync icons including "On NAS" tombstones, and gains a + "Keep local" context-menu toggle. + +## Testing + +- **Unit:** quiescence eligibility (settle window boundary, ignore-glob, + modified-since-sync re-eligibility); rollup derivation from + `sync_state.json`; `sync_state.json` read/write; cleanup skipping + `keep_local` files; `EquipmentConfig` no longer accepts the removed + fields. +- **Integration:** poller sweep β†’ per-run batched enqueue β†’ verify β†’ + `sync_state.json` updated β†’ rollup flips to `SYNCED`; a re-modified + file flips the rollup back to `SYNCING`; the poller discovers and + drives both a staging-area run and a `nas`-mode run; a transfer + failure leaves the file eligible and retries. +- **E2E:** Add-Equipment wizard is 4 steps and persists (extends the + existing flow_16 / flow_26 coverage); file-list "Keep local" toggle; + a cleared run still lists its files as "On NAS" tombstones. + +## Migration + +Existing `config.yaml` files carry per-equipment `completeness_signal` +etc. The config loader must tolerate and drop these removed keys on +load (they currently use `extra="forbid"`, so a one-time prune or a +pre-validation migration step is required) so an upgraded install does +not fail to boot. + +## Open questions / out of scope + +- Whether a stalled writer that pauses > `quiescence_minutes` mid-file + can produce a false-stable read. Accepted risk for this iteration; + the manifest-based check that would close it was explicitly declined + to avoid re-introducing equipment coupling. +- Cross-run global batching is intentionally not pursued (impossible + given per-run src/dst roots). diff --git a/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md b/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md new file mode 100644 index 0000000..312f6f4 --- /dev/null +++ b/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md @@ -0,0 +1,536 @@ +# Rclone-only NAS sync with password auth (SFTP + SMB) + +**Status:** design approved, awaiting implementation plan. +**Author:** alex. +**Date:** 2026-05-26. +**Predecessor:** `2026-05-21-operator-free-per-file-nas-sync-design.md` (the +quiescence-driven sync model this spec inherits and extends). + +## Context + +ExLabWizard's NAS sync subsystem today supports two transports: + +- `RsyncSshTransport` β€” rsync-over-SSH, key-only. `BatchMode=yes` + prevents any password fallback; `_reject_password_field` enforces the + policy at config-validation time. +- `RcloneTransport` β€” references a remote already configured in + `~/.config/rclone/rclone.conf`. + +Neither carries an operator-typed password. Two pressures motivate a +rewrite: + +1. **IT policy now forbids SSH keys.** Lab machines cannot ship private + keys. Equipment needs to authenticate to the NAS by username + + password. +2. **Heterogeneous lab fleet.** Mac and Linux equipment reach the NAS + over SFTP (the SSH path) with password auth. Windows equipment reach + the NAS over an SMB share with username + password. + +Rather than tack passwords onto the existing transports (which means +keeping two divergent code paths, two binary dependencies β€” rclone and +rsync β€” and two error-classification surfaces), this spec collapses +everything onto **rclone as the sole transport binary**. SFTP and SMB +remotes are configured inline via `RCLONE_CONFIG__*` environment +variables at subprocess time; the per-equipment password is injected +from the OS keyring (the same `KeyringStore` and `credential_field` +machinery that already serves the LIMS password). The existing operator- +free, per-file quiescence-driven sync model from the predecessor spec +stays intact. + +Nothing is deployed against the legacy transports yet, so no migration +is required β€” they are deleted outright. + +## Goals + +1. **Single transport binary** β€” rclone for both supported backends. No + rsync, no ssh, no key files. +2. **Operator-typed password per equipment**, stored in the OS keyring + under `keyring_nas_username(equipment.id)`, parallel to the LIMS + credential. +3. **Hybrid integrity model** β€” full SHA verification for files freshly + synced in the current batch; size+modtime trust for steady-state + already-verified files. Achieved via `rclone check --download + --files-from`. +4. **Durable local audit trail** β€” every per-file `sync_state.json` + record gains `verified_sha256`, captured once at sync time from a + local-disk SHA pass. Recovers the offline-audit affordance lost by + dropping `checksums.sha256`. +5. **Settings-only credential entry** β€” registration completes without + a password; the setup gate flags `INCOMPLETE_NO_NAS_CREDENTIAL`; the + operator sets the password in Settings β†’ NAS credentials before the + first sync. + +## Non-goals + +- **Scheduled drift audit** (Slot B in brainstorming) β€” orthogonal to + the migration; designed in a follow-up spec once the rclone-only + baseline ships. +- **Backends beyond SFTP and SMB.** The model accommodates S3 / B2 / + WebDAV by adding new flat config models, but they are not part of + this spec. +- **Backward compatibility.** No config-file migration; nothing is + deployed against the legacy transports. +- **Backwards-compat shims for the checksum manifest file.** Nothing + outside the sync subsystem reads `/.exlab-wizard/checksums.sha256` + today; it is deleted along with the Python SHA pipeline. + +## Architecture + +``` ++-------------------------------+ +| QuiescenceSyncPoller | (unchanged β€” pure Python) +| os.scandir + (size, mtime) | +| in-memory _snapshots | +| eligibility vs sync_state | ++-----------+-------------------+ + | nas_sync.enqueue(run_path, files=[...]) + v ++-------------------------------+ +| SyncQueue (SQLite, unchanged) | +| QUEUED -> RUNNING -> ... | ++-----------+-------------------+ + | worker dequeues + v ++-------------------------------+ env: RCLONE_CONFIG__* +| NASSyncClient._drive_job |--+ (assembled from EquipmentConfig +| | | + keyring password + +| 1. compute local SHA for | | `rclone obscure -`) +| each file in `files` | | +| 2. rclone copy --files-from |----> rclone (subprocess) +| 3. rclone check --download |----> +| --files-from --combined | | +| 4. parse =/*/+/-/! lines | | +| 5. credit '=' files into | | +| sync_state.json with | | +| synced_signature + | | +| verified_sha256 + | | +| verified_at | | +| 6. cleanup gate | | ++-------------------------------+ +``` + +The poller's eligibility logic, the queue's state machine and retry +classes, `SyncStateWriter`'s file-locked atomic writes, and the cleanup- +gate semantics are inherited from the predecessor spec unchanged. Only +the transport driver, the verifier, and the credential surface change. + +## Components + +### 1. Config models + +**Delete:** + +- `RsyncSshTransport` (and the `_reject_password_field` validator) +- the existing rclone.conf-based `RcloneTransport` + +**Add** in `src/exlab_wizard/config/models.py`: + +```python +class RcloneSftpTransport(BaseModel): + type: Literal["rclone_sftp"] = "rclone_sftp" + host: str = Field(min_length=1) + port: int = Field(default=22, ge=1, le=65535) + user: str = Field(min_length=1) + remote_path: str = Field(min_length=1) + bandwidth: BandwidthConfig = Field(default_factory=BandwidthConfig) + +class RcloneSmbTransport(BaseModel): + type: Literal["rclone_smb"] = "rclone_smb" + host: str = Field(min_length=1) + share: str = Field(min_length=1) + user: str = Field(min_length=1) + domain: str = "" + remote_path: str = "" + bandwidth: BandwidthConfig = Field(default_factory=BandwidthConfig) + +EquipmentTransport = Annotated[ + RcloneSftpTransport | RcloneSmbTransport, + Field(discriminator="type"), +] + +def transport_requires_keyring_password(transport: EquipmentTransport) -> bool: + return True # all current transports need a password +``` + +The predicate exists so the gate / UI / probe code doesn't grow +`isinstance` branches when a future hash-bearing backend (S3, B2) is +added. + +### 2. Keyring + dependencies + setup gate + +**Keyring** (`src/exlab_wizard/constants/keyring.py`): + +- No change. `KEYRING_USERNAME_NAS_TEMPLATE = "nas:{equipment_id}"` and + `keyring_nas_username(equipment_id)` already exist. + +**Tray dependencies** (`src/exlab_wizard/tray/dependencies.py`): + +- `_check_nas_passwords_present(keyring_store, config) -> set[str]` at + boot. Iterates nas-mode equipment whose transport returns True from + `transport_requires_keyring_password`; returns the subset whose + keyring slot is populated. Hydrated into + `deps.nas_password_present: set[str]`. +- `NASSyncClient.__init__` gains a `keyring_store` argument so the + worker can fetch passwords at push time. + +**Shared accessor** (`src/exlab_wizard/api/_dependencies.py`): + +- `nas_password_present(deps, equipment_id: str) -> bool` β€” the + repo-wide reader. Parallel to `lims_password_present`. + +**Setup state** (`src/exlab_wizard/constants/enums.py`, +`src/exlab_wizard/paths.py`, `src/exlab_wizard/api/setup.py`): + +- New `SetupState.INCOMPLETE_NO_NAS_CREDENTIAL`. +- `_nas_slot_satisfied(config, *, nas_password_present_for)` β€” every + password-requiring nas-mode equipment must have its keyring entry. +- `_missing_nas_fields` yields one + `{"field": "equipment..nas_password", "reason": "missing_in_keyring"}` + per missing entry. +- `evaluate_setup_state` slots the check between + `INCOMPLETE_NO_EQUIPMENT` and `INCOMPLETE_NO_LIMS`. +- `setup_state_next_action` maps the new state to + `"open_settings_nas_credentials"`. +- The new state is a **hard block** (gates creation); left out of + `is_creation_blocked`'s non-block tuple. + +### 3. Rclone driver + +**Replace** `src/exlab_wizard/sync/transports/rclone.py` entirely; delete +`rsync_ssh.py`. The driver exposes three methods plus a module-level +helper: + +```python +class RcloneDriver: + async def push( + self, + local: Path, + remote: str, + *, + files_from: Path | None, + bwlimit_kibps: int | None, + env: dict[str, str], + ) -> TransportResult: ... + + async def check( + self, + local: Path, + remote: str, + *, + files_from: Path, + env: dict[str, str], + ) -> CheckResult: ... + # rclone check --download --combined --files-from + # parses =/*/+/-/! lines into CheckResult. + + async def about(self, remote: str, *, env: dict[str, str]) -> AboutResult: ... + # rclone about --json + # used as the equipment probe (auth + reachability test). + +async def obscure(password: str) -> str: ... + # rclone obscure - on stdin; AUTH-classified TransportError on failure. +``` + +`CheckResult` carries `equal: tuple[str, ...]`, `differ: tuple[str, ...]`, +`missing_on_dst: tuple[str, ...]`, `extra_on_dst: tuple[str, ...]`, +`errors: tuple[str, ...]` β€” derived from the `--combined` output. + +**Subprocess helper** (`src/exlab_wizard/sync/transports/_run.py`): + +- Extend `run_subprocess(cmd, *, env=None, mask_for_log=())`. Any env + key in `mask_for_log` is redacted in the debug log line. Required for + `RCLONE_CONFIG__PASS` injection. + +**Env construction** β€” a small module-level helper: + +```python +def build_rclone_env( + *, + transport: EquipmentTransport, + password_obscured: str, + remote_name: str, +) -> dict[str, str]: + """Build the RCLONE_CONFIG__* env dict for an inline backend.""" +``` + +`remote_name` is e.g. `exlab_`. For SFTP, sets `_TYPE=sftp`, +`_HOST`, `_PORT`, `_USER`, `_PASS=`. For SMB, sets +`_TYPE=smb`, `_HOST`, `_USER`, `_PASS=`, +`_DOMAIN` (when set). The `_PASS` key is added to `mask_for_log`. + +### 4. NAS sync client + +**Refactor `_drive_job`** in `src/exlab_wizard/sync/nas_client.py`: + +1. Validate the local run exists; if not, terminal FAILED with + `local_file_vanished` (unchanged). +2. Transition QUEUED β†’ RUNNING (unchanged). +3. **Compute local SHA-256 for each file in `job.files`** (the new + Slot A pass). Cached as `{rel: sha}` on the call stack for step 7. +4. Write the run-relative paths to a `--files-from` tempfile (unchanged). +5. Build the rclone env (`build_rclone_env`) from the equipment config, + keyring password lookup, and `rclone obscure` round-trip. A missing + keyring entry yields `TransportError(AUTH)` β†’ terminal FAILED. +6. Call `rclone copy --files-from --bwlimit=K` + with the env. Map exit code + stderr to `TransportErrorKind` exactly + like today. +7. On push success, transition RUNNING β†’ AWAITING_VERIFY. +8. Call `rclone check --download --files-from + --combined ` with the env. Parse `--combined` lines. +9. **Per-file reconciliation**: for every file in `files` whose status + in the combined output is `=`, call + `sync_state_writer.upsert_file(run_path, rel, + synced_signature=(size, mtime_ns), verified_sha256=, + verified_at=)`. Per the predecessor spec this happens even + when the batch otherwise fails β€” one bad file doesn't block + crediting the good ones. +10. If every file in `files` got an `=`, transition to VERIFIED and + mark the run's `creation.json` `sync_status=synced`. Otherwise, + route through the `Β§7.1.5` retry classes (AUTH terminal, NETWORK / + UNKNOWN backoff, HASH_MISMATCH single-retry-then-terminal) exactly + as today. +11. `_maybe_cleanup` gates on the whole-run `sync_state.json` rollup + being `SYNCED` (unchanged from the predecessor). + +The two-phase "push then probe" shape stays. The probe is now `rclone +check --download` instead of `rclone hashsum sha256` + dict-compare, +but the surrounding state machine is identical. + +### 5. Verifier collapse + +**Delete** from `src/exlab_wizard/sync/verifier.py`: + +- `compute_local_manifest` +- `verify_against_local` +- `verify_against_remote` +- `format_manifest`, `parse_manifest`, `_iter_files`, `_compute_sha256`, + `_is_inside_cache_dir` +- `CHECKSUMS_RELATIVE` and the `.exlab-wizard/checksums.sha256` write + +**Add** (or replace the file): + +```python +class Verifier: + def __init__(self, driver: RcloneDriver) -> None: ... + + async def verify( + self, + run_path: Path, + remote: str, + files_from: Path, + env: dict[str, str], + ) -> VerifyResult: + """One rclone check --download call; parse --combined output.""" +``` + +`VerifyResult` shrinks to `(ok, mismatched, missing, extra, errors, +error_kind)` β€” purely the parse of `rclone check --combined`. The +`manifest` field that previously carried the local SHA dict is +**removed**; the verifier never sees local SHAs. `_drive_job` owns the +marriage of "files with status `=` in `verify_result` β†’ local SHA from +its own step 3 dict β†’ `upsert_file`". This keeps the verifier a thin +adapter over rclone and the SHA-capture logic local to the one place +that has access to the fresh local read. + +`force_verify(run_path)` is still exposed on `NASSyncClient` for the +Settings "verify integrity" action; internally it calls +`Verifier.verify` against the equipment's remote with a `files_from` +listing every tracked file in `sync_state.json`. It **reports only** β€” +it does NOT update `verified_sha256` (there is no fresh local SHA in +this code path; the existing `verified_sha256` is left as-is). The +caller surfaces the rclone-check status to the GUI: which files +matched, which mismatched, which are missing. + +### 6. Wizard + Settings UI + +**Add-Equipment wizard** (`src/exlab_wizard/ui/pages/wizard_equipment.py`, +`src/exlab_wizard/ui/equipment_form.py`): + +- Sync-mode step's transport radio: two options. + - "SFTP (password)" β†’ `rclone_sftp`. Fields: host, port (default 22), + user, remote_path. + - "SMB share (password)" β†’ `rclone_smb`. Fields: host, share, user, + domain (optional), remote_path (optional). +- **No password field** in the wizard. Review step shows a small + banner: "you'll set the NAS password in Settings before the first + sync runs." +- `build_equipment_config` collapses to two branches matching the + radio. +- `can_advance` validates the new required fields per branch. +- The wizard's old "Test connection" affordance is **removed** β€” the + probe requires a keyring entry that doesn't exist yet at this point. + +**Settings** (`src/exlab_wizard/ui/pages/settings.py`, +`src/exlab_wizard/ui/mount.py`): + +- New "NAS credentials" subsection rendered below the LIMS credential + drawer. For each nas-mode equipment whose transport requires a + password, render: + - A `credential_field(label=f"NAS password β€” {equipment.id}", + data_testid=f"settings-nas-password-{equipment.id}", ...)` row. + - A small "Test connection" button next to it that calls + `POST /setup/test-equipment/{equipment_id}` (uses + `rclone about` against the equipment's resolved transport + keyring + password). **The existing body-based `POST /setup/test-equipment` + endpoint** (which accepted a candidate `EquipmentConfig` for the + wizard's pre-save probe) **is deleted** β€” no pre-save probe path + exists anymore because credentials are post-registration. +- Hidden entirely when no equipment requires a password (keeps the + section clean for hypothetical future password-less backends). +- New section in the left-rail nav (`settings-nav-nas-credentials`). +- `_nas_credential_handlers(deps, equipment_id)` in `mount.py` mirrors + `_lims_credential_handlers` β€” saves to keyring, updates + `deps.nas_password_present` set in place, shows a toast. + +**Setup banner** (`src/exlab_wizard/ui/components/setup_banner.py`): + +- New copy line for `INCOMPLETE_NO_NAS_CREDENTIAL` pointing the + operator at Settings β†’ NAS credentials. + +### 7. Sync state schema + +`src/exlab_wizard/cache/sync_state_schema.py` `FileSyncRecord` gains +one field: + +```python +class FileSyncRecord(Struct): + synced_signature: tuple[int, int] | None = None + verified_at: str | None = None + keep_local: bool = False + verified_sha256: str | None = None # Slot A: durable local-audit hash +``` + +`SyncStateWriter.upsert_file` gains a `verified_sha256: str | None = None` +kwarg. Backwards-compat reads tolerate the field's absence (default +`None`) so a partially-migrated dev state file still loads. + +### 8. Error classification + +| Kind | Trigger | +|---|---| +| `AUTH` | rclone stderr contains "authentication failed", "permission denied", "auth_error", "username/password", "not authorized", "NT_STATUS_LOGON_FAILURE", "NT_STATUS_ACCESS_DENIED"; OR `obscure` shell-out fails | +| `NETWORK` | rclone exit 5 / 6; stderr contains "i/o timeout", "connection refused", "no route to host", "network is unreachable" | +| `LOCAL_FILE_VANISHED` | stderr contains "no such file" with a path under the local run dir | +| `HASH_MISMATCH` | `*` line in `rclone check --combined` output | +| `UNKNOWN` | everything else; routed as NETWORK (existing behaviour) | + +## Data flow (one sync cycle) + +1. Operator drops a file into `///Run_/`. +2. `QuiescenceSyncPoller` observes the file's `(size, mtime_ns)` across + two sweeps spanning β‰₯ `quiescence_minutes`; file is quiet. Its + signature is absent in `sync_state.json` β†’ eligible. Poller calls + `nas_sync.enqueue(run_path, files=["relative/path"])`. +3. `SyncQueue` inserts a QUEUED row with `files=("relative/path",)`. +4. Worker dequeues; `_drive_job`: + a. Computes SHA-256 of the local file (Slot A). + b. Writes `--files-from` tempfile. + c. Builds rclone env from `EquipmentConfig` + keyring password + + `rclone obscure`. + d. `rclone copy --files-from ` β†’ success. + e. `rclone check --download --files-from + --combined ` β†’ parses `= relative/path`. + f. `sync_state_writer.upsert_file(run, "relative/path", + synced_signature=(size, mtime_ns), + verified_sha256=, verified_at=)`. + g. Transition to VERIFIED; mark `creation.json sync_status=synced`. + h. `_maybe_cleanup`: every tracked file has `verified_at` β†’ rollup + SYNCED β†’ cleanup runs (deletes local data; `keep_local` files + survive; `sync_state.json` stamped `cleared_at`). +5. Next poll: file's local signature still matches the recorded + `synced_signature` (still locally present until cleanup, or absent + after cleanup with `tombstone` semantics) β†’ poller skips. Steady-state. + +## Error handling + +The queue's retry classes and the predecessor spec's per-file +reconciliation are inherited: + +- **AUTH** β†’ terminal FAILED. A missing keyring entry produces this + immediately so the worker doesn't retry forever waiting for the + operator. GUI surfaces "auth" in `last_error`; the Settings credential + row is the recovery path. +- **NETWORK / UNKNOWN** β†’ exponential backoff. +- **HASH_MISMATCH** β†’ single retry of the transport phase; second + occurrence terminal. +- **LOCAL_FILE_VANISHED** β†’ terminal FAILED. +- **Partial-failure batch** β†’ every `=` file is credited into + `sync_state.json`; the batch job's pass/fail decision is independent. + +## Testing + +- **Unit:** + - `tests/unit/config/test_models.py` β€” discriminator round-trips for + each new variant; required-field validation; + `transport_requires_keyring_password` truth table. + - `tests/unit/sync/transports/test_rclone.py` β€” fake-binary harness + verifies `push`, `check`, `about`, `obscure` argv shapes; + env-injection forwarding; masked-key log redaction. + - `tests/unit/sync/test_verifier.py` β€” `--combined` parsing + (mismatched / missing / extra / errors). + - `tests/unit/sync/test_nas_client.py` β€” `_drive_job` reconciliation + of per-file Slot A SHAs into `sync_state.json` on full + partial + success. + - `tests/unit/paths/test_setup_state.py` β€” + `INCOMPLETE_NO_NAS_CREDENTIAL` resolution + clearing. +- **Integration:** + - `tests/integration/test_nas_sync.py` rewritten against a localhost + SFTP fixture (the rsync_ssh-flavoured tests are deleted, not + ported). Drives push + verify + cleanup end-to-end. +- **E2E:** + - `tests/e2e/test_flow_27_nas_credential_settings.py` β€” register + SFTP-password equipment via wizard β†’ assert + `INCOMPLETE_NO_NAS_CREDENTIAL` β†’ set password in Settings β†’ assert + `READY` β†’ quiescence sweep β†’ file lands on localhost SFTP β†’ cleanup + runs. + - Updates to existing e2e suites where transport-radio fixtures + reference the old types. + +## Open follow-up: Slot B (drift audit) + +A separate `SyncDriftAuditor` background task running on a slow +schedule (e.g. every 24h, configurable) would re-verify already-synced +runs against the NAS to catch silent NAS-side corruption (hardware +flips, ransomware, restore-from-backup munge). With Slot A in place, +the audit compares the stored `verified_sha256` against a fresh +`rclone hashsum sha256 --download` pull β€” no local SHA pass needed. +Designed in its own spec once the rclone-only baseline ships and we +have an operational sense of how often audit failures actually surface. + +## Risks / notes + +- **Cryptographic verify cost on SFTP** β€” today SFTP via the + `ssh sha256sum` shell-out gets server-side hashing for free. After + this change, every verify of a freshly-synced file pays a download + round-trip (`rclone check --download`). Bandwidth scales with the + volume of new files per sweep, not the volume of total NAS data, so + the hybrid model keeps it bounded β€” but a sweep that crosses a "many + large files just settled" boundary will be slow. Mitigation: + bandwidth limits + bandwidth scheduling continue to apply. +- **`rclone obscure -` per attempt** β€” keyring stores cleartext; the + obscure round-trip happens at push time. If profiling shows it + matters, cache the obscured token on `deps` keyed by + `(equipment_id, password_hash)` and invalidate on save / clear. +- **Subprocess env leakage** β€” `mask_for_log` covers the wizard's + debug logger but obscured passwords are still in the rclone + child's environment. Nothing the wizard can do about a + process-listing leak short of switching to stdin-passed credentials, + which rclone's CLI doesn't support for backend secrets. +- **Probe specificity** β€” `rclone about` proves auth and reachability + but not write-access to `remote_path`. If we want write-test, the + Settings "Test connection" can do an `rclone touch + /.exlab-wizard-probe` followed by `rclone delete + /.exlab-wizard-probe` β€” minimal extra wire cost, real + guarantee. Decide during implementation. +- **rsync delta-xfer loss** β€” rclone copies whole files (modulo its + `--partial` semantics). For multi-GB files on flaky links, an + interrupted transfer restarts from zero. Acceptable for the size + class of files this fleet currently produces. +- **Equipment-id renames** β€” keyring entries don't follow `config.yaml` + edits. Renaming an equipment leaves the credential under the old + username; the new id starts unset and the gate fires. Document this; + a future "migrate credentials" command is one option. +- **rclone version pinning** β€” `obscure`, `lsjson`, and `check + --combined` are stable; the SMB backend in particular has matured + over the last few releases. Pin a minimum rclone version at boot and + log clearly when an older binary is found. diff --git a/docs/superpowers/specs/2026-05-28-rclone-conf-nas-sync-design.md b/docs/superpowers/specs/2026-05-28-rclone-conf-nas-sync-design.md new file mode 100644 index 0000000..f074deb --- /dev/null +++ b/docs/superpowers/specs/2026-05-28-rclone-conf-nas-sync-design.md @@ -0,0 +1,389 @@ +# rclone.conf-based NAS sync + +- **Date:** 2026-05-28 +- **Status:** Design β€” pending implementation plan +- **Supersedes:** the credential-injection model in + [`2026-05-26-rclone-only-nas-sync-design.md`](2026-05-26-rclone-only-nas-sync-design.md) + (that doc's `--download` verification semantics are retained; its + `RCLONE_CONFIG__*` env-injection + keyring model is replaced). + +## Summary + +Today the NAS sync subsystem builds an *inline* rclone backend at subprocess +time: per-equipment connection params (`host`/`port`/`user`/`share`/`domain`/ +`remote_path`) come from a `transport:` block in `config.yaml`, the password is +read from the OS keyring on every push, run through `rclone obscure`, and +injected as `RCLONE_CONFIG__*` environment variables. The remote name +is synthesised (`exlab_`). + +This redesign removes that machinery. The operator configures their rclone +remotes **separately** with `rclone config` (stored in `rclone.conf`), and the +app simply references a remote by name. Connection details and credentials +live entirely in `rclone.conf`; the app never sees a password. + +Three capabilities are added at the same time: + +1. A **global base root** so all equipment folders live under one + `://…` prefix. +2. **lsjson-based manifest generation** (`rclone lsjson`, read-only) plus a + parser, used for cheap per-sync reconciliation and the cleanup + remote-existence interlock. +3. **Tunable `--transfers` / `--checkers`** (and the existing bandwidth cap) + exposed in config β€” these double as the memory dial for space- and + RAM-constrained acquisition machines. + +## Motivation / goals + +- **Reduce credential burden.** No per-equipment passwords to type, store, or + rotate inside the app. The operator manages credentials once, with the + standard rclone tooling, supporting any backend rclone supports (SFTP, SMB, + S3, WebDAV, …) β€” not just the two we hand-coded. +- **Cheaper routine verification.** Replace the per-push full re-download with + a metadata-only `lsjson` reconcile; reserve the expensive content-hash check + for the one moment it must be certain β€” immediately before deleting the local + copy. +- **Operate within tight hardware.** Acquisition machines have ~100 GB free of + 256 GB and limited RAM. `rclone check --download` streams and hashes on the + fly (**no temp files written to disk** β€” confirmed against rclone docs), so + disk cost is β‰ˆ 0; memory is bounded by `--transfers`/`--checkers`/ + `--buffer-size`, which we now expose. + +### Non-goals + +- Encrypted `rclone.conf` support. If a site encrypts its config, that is the + operator's single `RCLONE_CONFIG_PASS` to manage, outside this app. Documented + as an assumption. +- Per-equipment bandwidth/transfers/checkers overrides (global only for now β€” + YAGNI; the model leaves room to add per-equipment overrides later). +- A migration shim for existing installs. This is a **clean break** β€” existing + `transport:` blocks and NAS keyring entries become invalid; affected installs + re-run setup. + +## Decisions (from brainstorming) + +| Question | Decision | +| --- | --- | +| lsjson vs. hash verification | **Keep hash verify, add lsjson.** lsjson is the routine reconcile; `rclone check --download` is retained. | +| Where the hash-verify runs | **lsjson routine + hash-gate at cleanup.** Pay the full re-download exactly once, right before local deletion (and on manual force-verify). | +| Remote/base-root topology | **Global remote + base root** in a top-level `nas:` block. | +| Credential machinery | **Clean break** β€” remove the NAS keyring path entirely. | +| Orchestrator staging transport | **In scope** ("both transports") β€” see [Orchestrator / staging](#7-orchestrator--staging-hop) for the scoped reality and the βš‘ open decision. | +| `--transfers` / `--checkers` | **Exposed in config** (added requirement). | + +## Config schema + +### Before (per-equipment, credential-injected) + +```yaml +equipment: + - id: "CONFOCAL_01" + label: "Confocal Microscope 1" + local_root: "/data/lab" + nas_root: "//nas01/lab" + sync_mode: "nas" + transport: + type: "rclone_sftp" + host: "nas01.lab.example" + port: 22 + user: "labuser" + remote_path: "/srv/lab/CONFOCAL_01" + bandwidth: { ... } +``` + +### After (named remote + global base root) + +```yaml +nas: + remote: "nas01" # name of a remote defined in the operator's rclone.conf + base_root: "/srv/lab" # path on the remote under which folders live + rclone_config_path: "" # optional; pins `rclone --config `. Blank = rclone's default discovery + mtime_tolerance_s: 2 # reconcile: remote modtime must match local within this many seconds + perf: # parallelism knobs (also the memory dial on constrained machines) + transfers: 4 # rclone --transfers (parallel file transfers) + checkers: 8 # rclone --checkers (parallel checks during verify / lsjson) + bandwidth: # global upload cap + schedule (moved here from per-equipment transport) + upload_mbps: null + schedule: [] + +orchestrator: + staging_remote: "stagepc" # rclone.conf remote for the stage-mode hop (Phase 8) + staging_base_root: "/staging" + staging_perf: { transfers: 4, checkers: 8 } + +equipment: + - id: "CONFOCAL_01" + label: "Confocal Microscope 1" + local_root: "/data/lab" + nas_root: "//nas01/lab" # display-only metadata (unchanged role) + sync_mode: "nas" # no transport block +``` + +- **Remote destination** for a run = `://`, + where `` reproduces exactly what today's `_build_target_for` appends after + the equipment folder (currently the run-leaf directory name β€” projects are + *not* nested on the remote). The implementation must reproduce the current + layout rather than silently introduce project nesting; if project nesting is + desired it is a separate, explicit decision. +- **New model:** a `NasConfig` (`remote`, `base_root`, `rclone_config_path`, + `transfers`, `checkers`, `bandwidth`) reusing the existing `BandwidthConfig`. + A small reusable `RclonePerf` (`transfers`, `checkers`) keeps the knobs in one + place for reuse by the staging block. +- **Removed from `config/models.py`:** `RcloneSftpTransport`, + `RcloneSmbTransport`, the `EquipmentTransport` discriminated union, and + `transport_requires_keyring_password`. `EquipmentConfig.transport` is removed; + the `sync_mode == 'nas'` validator now requires the top-level `nas:` block to + be present instead of a per-equipment `transport:` block. + +## Architecture by surface + +### 1. Transport driver β€” `sync/transports/rclone.py` (single reusable rclone-ops surface) + +**DRY requirement:** `RcloneDriver` is the *one and only* place that shells out +to rclone. Every rclone operation β€” `copy`, `lsjson`, `check`, `about`, +`listremotes` β€” is a reusable method on this driver, and **every** caller (the +NAS sync client, the stage-mode push, the tray equipment probe, the +setup-availability gate) goes through it. No module outside `rclone.py` builds +an rclone argv or calls `run_subprocess` for rclone. A `_global_flags()` helper +centralises `--config `; a perf helper centralises `--transfers` / +`--checkers`, so flag handling is written once. Target-string construction is a +single shared helper (`_build_target_for_run`) used by both the NAS and staging +paths. **Verification:** `grep -rn "run_subprocess\|\"rclone\"\|'rclone'" src` +returns hits only inside `sync/transports/`. + +- **Delete** `build_rclone_env`, `pass_env_keys_for`, `obscure`, and all + `RCLONE_CONFIG__*` env plumbing (including the injection notes in + `sync/transports/_run.py`). Driver methods drop the `env` credential dict and + `mask_for_log`; rclone reads `rclone.conf` itself. +- **Constructor** takes `config_path` / `transfers` / `checkers`; argv builders + for `copy`, `check`, and `lsjson` apply them via the shared helpers. +- **Add** `RcloneDriver.lsjson(remote, *, recursive=True) -> str` running + `rclone lsjson -R :` (read-only) and returning raw JSON for the + parser. +- **Add** `RcloneDriver.listremotes() -> tuple[str, ...]` running + `rclone listremotes` (offline, cheap) β€” the single source for the setup gate + and the Settings "found?" badge. +- **Keep** `check` (`--download --combined`) for the hash-gate and `about` for + Test-connection (now simply `rclone about :`). +- `_classify_failure` is unchanged; an `AUTH` result now means + "remote misconfigured / unreachable in `rclone.conf`" rather than a bad + keyring password. + +### 2. Manifest + parser β€” new `sync/manifest.py` + +```python +@dataclass(frozen=True, slots=True) +class RemoteEntry: + size: int + mod_time: str # RFC3339 string as emitted by lsjson + is_dir: bool + +@dataclass(frozen=True, slots=True) +class RemoteManifest: + entries: dict[str, RemoteEntry] # keyed by run-relative POSIX path + def has(self, rel: str) -> bool: ... # existence probe + def matches(self, rel: str, local_size: int, local_mtime: float, + *, tolerance_s: float) -> bool: ... # present AND size== AND |Ξ”mtime|<=tol + +def parse_lsjson(raw: str, *, strip_prefix: str = "") -> RemoteManifest: ... +``` + +- Parses the lsjson JSON array, normalises `Path` to run-relative (stripping the + `//` prefix), and drops directory entries. +- `matches()` is the single reconcile predicate: present **and** size-equal + **and** modtime within `tolerance_s` (the RFC3339 `ModTime` is parsed to an + epoch, fractional seconds truncated to 6 digits so Python `fromisoformat` + accepts nanosecond-precision strings). +- Memory is bounded by entry count, not file size; the parser is the only place + that understands the lsjson shape (isolation boundary). + +### 3. Sync client + verify/cleanup flow β€” `sync/nas_client.py`, `sync/verifier.py`, `sync/cleanup.py` + +- A single `_build_target_for_run(remote, base_root, equipment_id, run)` helper + composes `://`, and a single + `_target_for_equipment(equipment)` picks the NAS remote/base_root for nas-mode + and the staging remote/base_root for stage-mode (Phase 8) β€” both branches reuse + the same helper (DRY). `_resolve_env_for_equipment` and + `_build_transport_driver`'s keyring/obscure/env logic are removed; the driver + is constructed once from the `nas:` config (config path + perf knobs). +- **Routine reconcile** (replaces the per-push `--download`): after a successful + `rclone copy`, fetch the `lsjson` manifest and mark each file synced only when + `manifest.matches(rel, local_size, local_mtime, tolerance_s=nas.mtime_tolerance_s)` + is true β€” i.e. **present AND size-equal AND modtime within tolerance**. The run + rolls up to `SYNCED`. Any file failing a check is left for the next sweep. +- **Cleanup gate** (`_maybe_cleanup`, only when rollup = `SYNCED` and the Β§7.1.6 + interlocks pass): + 1. `_remote_stat_callable` becomes a **real lsjson existence probe** β€” confirm + every tracked file is present on the remote. + 2. Then `rclone check --download` hash-verifies all tracked files. + 3. Local deletion happens **only** on an all-`=` result. A mismatch leaves the + local files in place and surfaces the discrepancy. +- `force_verify` continues to run `rclone check --download` (unchanged intent). + If cleanup is disabled, hash-verify is force-verify-only. +- State semantics: `VERIFIED` now means "present + size-matched on the remote"; + `CLEANED` requires the cleanup hash-gate to have passed. + +### 4. Verify / cleanup flow + +``` +push (rclone copy --checksum --transfers N) + └─ success β†’ lsjson reconcile (size + mtimeΒ±tol) β†’ mark files synced β†’ rollup SYNCED + β”‚ +maybe_cleanup (rollup == SYNCED && interlocks ok) β”‚ + β”œβ”€ lsjson existence probe (all tracked files present?) ── no ──► defer + β”œβ”€ rclone check --download (hash all tracked files) ──── mismatch ─► no delete, surface + └─ all '=' β†’ delete local (honour keep_local / retain_cache) β†’ CLEANED +``` + +### 5. Credentials / setup gate β€” `paths.py`, `constants/`, `api/`, `tray/` + +- **Remove** `constants/keyring.py:keyring_nas_username` (+ export in + `constants/__init__.py`) and every NAS-keyring callsite: `nas_client`, + `tray/dependencies` (`_get_nas_password`, `_check_nas_passwords_present`, + `probe_equipment_transport`), `ui/mount` (`_nas_credential_handlers`, + save/clear), `api/_dependencies.nas_password_present`, and the + `nas_password_present` set field on `api/app.py`. **The LIMS keyring is left + untouched.** +- **Rename** `SetupState.INCOMPLETE_NO_NAS_CREDENTIAL` β†’ + `INCOMPLETE_NO_NAS_REMOTE`, and `SetupNextAction.SET_NAS_CREDENTIALS` β†’ + `CONFIGURE_RCLONE_REMOTE`. +- **Setup-gate check:** the gate is satisfied when `nas.remote` is non-empty + **and** present in `rclone listremotes` (cheap, offline). `rclone about` + (network) stays behind the explicit Test-connection button so setup does not + block on connectivity. `paths.evaluate_setup_state` swaps its + `nas_password_present_for` callable for a `nas_remote_available()` check. + +### 6. UI β€” `ui/pages/settings.py`, `ui/mount.py`, `ui/pages/main.py`, `ui/pages/wizard_equipment.py`, `ui/equipment_form.py` + +- Settings "NAS Credentials" section β†’ **"NAS Remote"**: shows the configured + `nas.remote` + `base_root`, a found/not-found indicator + (`rclone listremotes`), and a **Test connection** button (`rclone about + :`). No password entry. +- Equipment wizard / form: drop all host/port/user/share/domain/password fields + for nas-mode. The `nas:` block is configured once (Settings / setup step), not + per equipment. `nas_root` display field is unchanged. +- Main-page banner copy: "Set the NAS password…" β†’ "Configure the rclone remote + (see setup docs)." + +### 7. Orchestrator / staging hop + +Two distinct flows exist: + +- **Orchestrator β†’ NAS** reuses the single `NASSyncClient` (the quiescence + poller enqueues both orchestrator-staged and nas-mode runs). This is covered + automatically by the `nas:` remote migration β€” no extra work beyond the core. +- **Stage-mode equipment β†’ staging area** is, today, a *mount-based* hop: + `OrchestratorStagingTransport` carries `type` (`smb_mount`/`file_transfer`), + `mount_point`, and `staging_subpath`, and is **not wired to any active rclone + push** (it is built from the wizard form but consumed by no transfer code). + +**Decision (confirmed): the staging hop moves to rclone too.** Collapse +`OrchestratorStagingTransport` to `orchestrator.staging_remote` / +`staging_base_root` (+ a `staging_perf: RclonePerf`), drop +`OrchestratorTransportType` / `mount_point` / `staging_subpath`, and route the +stage-mode push through the **same** `RcloneDriver` ops and the **same** +`_build_target_for_run` helper as the NAS leg β€” `_target_for_equipment` simply +selects the staging remote/base_root when `sync_mode == 'stage'`. This is +net-new code (no rclone staging push exists today) but adds **no new rclone +op**: it reuses copy/lsjson/check verbatim, honouring the DRY requirement in +[Β§1](#1-transport-driver--synctransportsrclonepy-single-reusable-rclone-ops-surface). + +### 8. Docs + +- **New setup section β€” "Set up your rclone remote(s) separately":** an `rclone + config` walkthrough for SFTP and SMB, naming the remote to match `nas.remote`, + setting `base_root`, the unencrypted-config assumption (encrypted β‡’ operator's + own `RCLONE_CONFIG_PASS`), and the **tray-app caveat** β€” `rclone.conf` must + belong to the OS user the app runs as, or pin `nas.rclone_config_path`. +- Update `design_specs/design_spec_sections/09_Configuration_File.md` (new + `nas:` block, removed `transport:` block), `07_Sync_and_Database_Integration.md` + (lsjson reconcile + hash-gate), `04_Backend_Architecture.md`, and `README.md`. + +### 9. Tests + +- `tests/fixtures/stub_rclone.py`: add `lsjson` and `listremotes` verbs; drop + the env-injection requirement and `obscure` expectations; make the stub + remote/config aware. +- `tests/unit/sync/transports/test_rclone_env.py` β†’ **`test_manifest.py`** (the + parser). Update `test_transports`, `test_nas_client*`, `test_cleanup` (real + remote-stat probe + cleanup hash-gate), `tests/unit/config/test_models.py` + (new `nas:` block, removed transport union), and the setup / dependency / UI / + e2e flows (password flow β†’ remote-availability flow): + `tests/unit/api/test_setup.py`, `test_config_router.py`, + `tests/unit/tray/test_dependencies.py`, + `tests/unit/ui/test_settings_nas_credentials.py`, `test_mount.py`, + `test_wizard_equipment.py`, `tests/integration/test_nas_sync.py`, + `tests/e2e/test_flow_27_nas_credential_settings.py`, and the lifecycle flows. +- `tests/docker/`: ship an `rclone.conf` pointing at the fixture SFTP/SMB + servers instead of injecting credentials; integration tests run against named + remotes. + +## Memory / storage analysis (constrained machines) + +| Operation | Disk | Memory | Network | +| --- | --- | --- | --- | +| `rclone copy --checksum` (push) | none beyond source | ~`--transfers` Γ— `--buffer-size` | upload size | +| `rclone lsjson -R` (reconcile) | none | bounded by entry count | metadata only | +| `rclone check --download` (hash-gate) | **none** (streamed, no temp files) | ~`--checkers` Γ— buffers | full re-download of tracked files | + +`--transfers` and `--checkers` are the operator-facing dials to trade speed for +memory. Defaults (`transfers: 4`, `checkers: 8`) are conservative; a tight RAM +budget can lower them. + +## Migration / breaking changes + +- Existing `config.yaml` files with a per-equipment `transport:` block fail + validation after upgrade; the operator adds a top-level `nas:` block and sets + up `rclone.conf`. +- Existing NAS keyring entries are orphaned (harmless; LIMS entries untouched). +- The setup flow guides the operator to the new state + (`INCOMPLETE_NO_NAS_REMOTE` β†’ `CONFIGURE_RCLONE_REMOTE`). + +## Resolved decisions + +1. **Bandwidth scope** β€” **global** (in `nas:`). Per-equipment caps are out of + scope (YAGNI). +2. **Reconcile predicate** β€” a file is credited as synced only when **present + AND size-equal AND modtime within `nas.mtime_tolerance_s`** (default 2 s). + The cleanup hash-gate remains the authoritative content-integrity check. +3. **Orchestrator staging** β€” **in scope**: the stage-mode hop moves to rclone, + reusing the same ops/helpers (see [Β§7](#7-orchestrator--staging-hop)). +4. **DRY rclone ops** β€” all rclone operations are reusable `RcloneDriver` + methods; no other module shells out to rclone (see [Β§1](#1-transport-driver--synctransportsrclonepy-single-reusable-rclone-ops-surface)). + +## Full surface inventory + +**Transport core:** `sync/transports/rclone.py`, `sync/transports/_run.py`, +`sync/transports/__init__.py`. +**Sync client / verify:** `sync/nas_client.py`, `sync/verifier.py`, +`sync/cleanup.py`; new `sync/manifest.py`. +**Config model:** `config/models.py` (new `NasConfig`/`RclonePerf`; removed +transport union), `constants/enums.py` (`SetupState`, `SetupNextAction`, +`OrchestratorTransportType`). +**Credentials / keyring:** `constants/keyring.py` (+ `constants/__init__.py`), +`tray/dependencies.py`, `ui/mount.py`, `api/_dependencies.py`, `api/app.py`. +**Setup gate:** `paths.py`, `api/setup.py`, `api/routers/config.py`. +**UI:** `ui/pages/settings.py`, `ui/mount.py`, `ui/pages/main.py`, +`ui/pages/wizard_equipment.py`, `ui/equipment_form.py`, +`ui/components/metadata_pane.py`. +**Controller / schema:** `controller/creation.py`, `api/schemas.py` (only if +`nas_root`/`configured_nas_root` semantics change β€” expected unchanged). +**Tests:** see [Β§9](#9-tests). +**Docs:** `design_specs/design_spec_sections/{04,07,09}_*.md`, `README.md`, +this spec (supersedes `2026-05-26-rclone-only-nas-sync-design.md`). + +## Risks + +- **Routine reconcile is metadata-only (size + mtime).** A file whose remote + copy has the right size and modtime but corrupted bytes is marked synced until + the cleanup hash-gate catches it. Acceptable because no local deletion happens + before the hash-gate; a cleanup-disabled deployment never gets the deep check + unless force-verify is run. +- **Modtime tolerance is a window, not exact.** `nas.mtime_tolerance_s` (2 s) + absorbs SFTP/SMB rounding; setting it to 0 will cause false "not synced" on + low-precision backends. +- **rclone.conf discovery under the tray/service user.** If the app runs as a + different OS user than the one who ran `rclone config`, the remote won't be + found. Mitigated by `nas.rclone_config_path` and the setup-doc caveat. +- **Backend hash availability.** `--checksum` on SFTP/SMB degrades to size-based + transfer decisions; integrity rests on the `--download` hash-gate, exactly as + in the 2026-05-26 design. diff --git a/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md b/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md new file mode 100644 index 0000000..7ea0853 --- /dev/null +++ b/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md @@ -0,0 +1,224 @@ +# Opt-in `staging_root` β€” Design Spec + +**Date:** 2026-05-28 +**Status:** Approved for planning +**Scope:** Make `orchestrator.staging_root` an optional, opt-in setting. A +device with a blank staging root simply cannot act as a staging PC. No +`/staging` directory is ever created unless the operator explicitly specifies a +path. + +--- + +## 1. Summary + +Today `orchestrator.staging_root` is a **required** setup field, tied together +with `orchestrator.label` in the `INCOMPLETE_NO_ORCHESTRATOR` setup gate +(GUI/Orchestrator Redesign Β§3.1, which made the staging pipeline "always +active"). In practice the pipeline already no-ops cleanly when the field is +blank β€” the quiescence poller, the staging query, and the validator all guard +on an empty `staging_root`. The only place a staging directory is ever created +is `--test` mode, under the sandbox. + +This change makes `staging_root` genuinely optional: + +- **Blank** β†’ this device is **not** a staging PC. Nothing is created, nothing + blocks setup. +- **Set** β†’ the device opts in. The directory is created when Settings is + saved, and the existing pipeline picks it up unchanged. + +`orchestrator.label` **stays required** β€” it is stamped into every run's +`creation.json` as the workstation identity (`controller/creation.py:985`), +independent of whether the device stages anything. The two fields are +**decoupled**. + +The app has **not been deployed**, so there is no backward-compatibility or +migration burden. + +--- + +## 2. Goals & non-goals + +### Goals +- `staging_root` is optional; blank is a valid, complete configuration. +- No `/staging` directory (or any staging directory) is ever auto-created + without the operator specifying a path. +- Operators who want to stage can set the path in Settings at any time, guided + by a sensible OS-appropriate suggestion. +- When a path **is** specified and saved, the directory is created so remote + PCs can push into it. + +### Non-goals +- A separate `staging_enabled` boolean (YAGNI β€” blank already means "off"). +- A UI indicator for "this device is acting as a staging PC" (deferred; the + filled/blank field already conveys it). +- Any change to the relay/sync data flow, transports, or NAS sync. +- Changing `--test` mode behavior. + +--- + +## 3. Design + +### 3.1 Setup-state gate β€” `paths.py` + +`staging_root` leaves the required gate; `label` remains. + +- `_orchestrator_identity_complete(config)` β€” return `bool(config.orchestrator.label)` + only (drop the `and config.orchestrator.staging_root`). Update docstring. +- `_missing_orchestrator_fields(config)` β€” remove the `staging_root` rows in + **both** the `config is None` branch and the live branch. Only the `label` + row remains. + +**Effect:** `SetupState.INCOMPLETE_NO_ORCHESTRATOR` now trips only on a missing +`label`. A device with a label and a blank staging root can reach +`SetupState.READY`. The `setup_state_next_action` mapping is unchanged +(`INCOMPLETE_NO_ORCHESTRATOR` still routes to `SET_PATHS`). + +### 3.2 Suggestion helper β€” `paths.py` + +Rename `default_orchestrator_staging_root()` β†’ `suggested_staging_root()` and +update `__all__`. It becomes a **pure, side-effect-free** function used **only** +to populate the Settings placeholder β€” never written, never `ensure_dir`'d. + +The bare `/staging` default is removed. The suggestion is OS-appropriate and +nested under the app name on every platform, mirroring config/state/cache: + +| OS | Suggested path | +|----|----------------| +| macOS | `~/Library/Application Support/exlab-wizard/staging` | +| Linux | `$XDG_DATA_HOME/exlab-wizard/staging` β†’ `~/.local/share/exlab-wizard/staging` | +| Windows | `%LOCALAPPDATA%\exlab-wizard\staging` (unchanged) | + +Linux uses `XDG_DATA_HOME` (bulk user data, not transient cache) so a partially +relayed, un-synced run is never treated as discardable. The helper honors the +test-mode app-name suffix via `_app_name()`. + +### 3.3 Settings UI β€” `ui/pages/settings.py` + +The "Staging root" input (currently `settings.py:503`): + +- Relabel to **"Staging root (optional)"**. +- Add `placeholder=str(suggested_staging_root())` β€” a greyed hint, **never** a + prefilled value. The bound value stays `""` until the operator types. +- Binding to `draft.orchestrator.staging_root` is unchanged. + +### 3.4 Create-on-save β€” `ui/mount.py` `_persist_config` + +The save chain is `settings._do_save` β†’ `finalize_settings_draft` β†’ `on_save` +β†’ `mount._on_save` β†’ `_persist_config`. After `_persist_config` successfully +writes the config: + +- Read the validated, stripped `orchestrator.staging_root`. +- If **non-empty** β†’ `ensure_dir(Path(staging_root))`. +- If **blank** β†’ do nothing. +- Wrap the `ensure_dir` in `try/except OSError`. On failure, surface a + notification ("Couldn't create staging directory: …") but **keep the saved + config** β€” the path is recorded and the validator already flags inaccessible + roots on the next audit. + +This is the single place creation happens. "Specified by the operator and +saved" is the only trigger; blank never creates anything. + +### 3.5 Verified, not modified + +These already behave correctly for a blank `staging_root` and are confirmed, +not changed: + +- **Quiescence poller** (`orchestrator/quiescence_poller.py:264`) β€” discovery + is guarded by `if staging_root:`. +- **Staging query** (`orchestrator/staging_query.py:98-101`) β€” returns `[]` + when `staging_root` is unset/missing. +- **Validator** (`validator/engine.py:479-480` + `tray/dependencies.py:194`) β€” + `staging_root` is passed as `None` when the config field is empty, so the + accessibility check is skipped. + +Documentation-only touch-ups: + +- `config/models.py` β€” no functional change (there is no pydantic enforcement + of non-empty `staging_root`). Update the `OrchestratorConfig` docstring and + the `_cross_field_invariants` comment to state that `staging_root` is optional + and only `label` is required. +- `constants/enums.py:144` β€” update the comment that pairs `label` + + `staging_root` as jointly required. + +### 3.6 Test mode β€” unchanged + +`--test` mode (`tray/main.py:289,329-332`) continues to set and `ensure_dir` +its sandboxed `…/exlab-wizard-test/staging`. This is an explicit developer +configuration under the sandbox; it is never `/staging` and is consistent with +"the operator specified it." + +--- + +## 4. Data flow + +Runtime behavior is unchanged; only the blank case is now first-class. + +``` +staging_root BLANK + device is not a staging target β†’ poller/query/validator skip it β†’ + nothing created, setup still READY (label present) + +staging_root SET (saved in Settings) + dir created on save β†’ remote stage-mode PCs push runs in β†’ + quiescence poller discovers + syncs them onward to the NAS +``` + +Local `nas`-mode equipment continues to sync directly from +`local_root//…` to the NAS, bypassing staging entirely (unchanged). + +--- + +## 5. Error handling & edge cases + +- **Whitespace-only input** β€” `OrchestratorConfig` has + `str_strip_whitespace=True`, so `" "` validates to `""` and is treated as + blank (no directory created). +- **`ensure_dir` failure on save** β€” non-fatal: notify the operator, keep the + saved config; the validator surfaces the inaccessible root on the next audit. +- **Path set but folder later deleted/unmounted** β€” existing validator + accessibility check applies (unchanged). + +--- + +## 6. Testing + +### `tests/unit/test_paths.py` +- Rename the `default_orchestrator_staging_root` tests β†’ `suggested_staging_root`: + - macOS β†’ `~/Library/Application Support/exlab-wizard/staging` + - Linux β†’ `~/.local/share/exlab-wizard/staging` (fallback) and an + `XDG_DATA_HOME` override case + - Windows β†’ `%LOCALAPPDATA%\exlab-wizard\staging` (unchanged) + - test-mode suffix now applies on **all** platforms (not just Windows) +- Add `XDG_DATA_HOME` to the `fake_home` fixture's `delenv` list. +- Setup-state: a config with `label` set and `staging_root` blank is **not** + `INCOMPLETE_NO_ORCHESTRATOR` and can reach `READY`; `setup_state_missing` + for `INCOMPLETE_NO_ORCHESTRATOR` no longer lists `staging_root`. + +### `tests/unit/ui/test_settings_page.py` +- The staging-root field is optional and exposes the suggested placeholder. + +### `tests/unit/ui/test_mount.py` (new cases) +- Persisting a config with a non-empty `staging_root` creates the directory. +- Persisting with a blank `staging_root` creates nothing. +- `ensure_dir` raising `OSError` surfaces a notification and still persists the + config. + +### Regression sweep +- Tests that pass `staging_root="/staging"` purely as a config **value** are + unaffected. Only tests asserting the setup **gate** (staging-root-empty β†’ + incomplete) are updated. + +--- + +## 7. Affected files + +| File | Change | +|------|--------| +| `src/exlab_wizard/paths.py` | Gate (`_orchestrator_identity_complete`, `_missing_orchestrator_fields`); rename + rewrite helper β†’ `suggested_staging_root`; `__all__`. | +| `src/exlab_wizard/ui/pages/settings.py` | Optional label + placeholder on the staging-root input. | +| `src/exlab_wizard/ui/mount.py` | Create-on-save hook in `_persist_config`. | +| `src/exlab_wizard/config/models.py` | Docstring/comment: staging optional. | +| `src/exlab_wizard/constants/enums.py` | Comment: staging optional. | +| `tests/unit/test_paths.py` | Helper + gate tests; `XDG_DATA_HOME` delenv. | +| `tests/unit/ui/test_settings_page.py` | Optional-field + placeholder test. | +| `tests/unit/ui/test_mount.py` | Create-on-save tests. | diff --git a/graphify-out/.graphify_root b/graphify-out/.graphify_root new file mode 100644 index 0000000..c44e250 --- /dev/null +++ b/graphify-out/.graphify_root @@ -0,0 +1 @@ +/Users/alex/Projects/ExLabWizard \ No newline at end of file diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md new file mode 100644 index 0000000..183e6ef --- /dev/null +++ b/graphify-out/GRAPH_REPORT.md @@ -0,0 +1,1819 @@ +# Graph Report - ExLabWizard (2026-05-28) + +## Corpus Check +- 398 files Β· ~753,692 words +- Verdict: corpus is large enough that graph structure adds value. + +## Summary +- 7343 nodes Β· 12590 edges Β· 535 communities (322 shown, 213 thin omitted) +- Extraction: 74% EXTRACTED Β· 26% INFERRED Β· 0% AMBIGUOUS Β· INFERRED: 3241 edges (avg confidence: 0.71) +- Token cost: 0 input Β· 0 output + +## Graph Freshness +- Built from commit: `b81f5752` +- Run `git rev-parse HEAD` and compare to check if the graph is stale. +- Run `graphify update .` after code changes (no API cost). + +## Community Hubs (Navigation) +- [[_COMMUNITY_Community 0|Community 0]] +- [[_COMMUNITY_Community 1|Community 1]] +- [[_COMMUNITY_Community 2|Community 2]] +- [[_COMMUNITY_Community 3|Community 3]] +- [[_COMMUNITY_Community 4|Community 4]] +- [[_COMMUNITY_Community 5|Community 5]] +- [[_COMMUNITY_Community 6|Community 6]] +- [[_COMMUNITY_Community 7|Community 7]] +- [[_COMMUNITY_Community 8|Community 8]] +- [[_COMMUNITY_Community 9|Community 9]] +- [[_COMMUNITY_Community 10|Community 10]] +- [[_COMMUNITY_Community 11|Community 11]] +- [[_COMMUNITY_Community 12|Community 12]] +- [[_COMMUNITY_Community 13|Community 13]] +- [[_COMMUNITY_Community 14|Community 14]] +- [[_COMMUNITY_Community 15|Community 15]] +- [[_COMMUNITY_Community 16|Community 16]] +- [[_COMMUNITY_Community 17|Community 17]] +- [[_COMMUNITY_Community 18|Community 18]] +- [[_COMMUNITY_Community 19|Community 19]] +- [[_COMMUNITY_Community 20|Community 20]] +- [[_COMMUNITY_Community 21|Community 21]] +- [[_COMMUNITY_Community 22|Community 22]] +- [[_COMMUNITY_Community 23|Community 23]] +- [[_COMMUNITY_Community 24|Community 24]] +- [[_COMMUNITY_Community 25|Community 25]] +- [[_COMMUNITY_Community 26|Community 26]] +- [[_COMMUNITY_Community 27|Community 27]] +- [[_COMMUNITY_Community 28|Community 28]] +- [[_COMMUNITY_Community 29|Community 29]] +- [[_COMMUNITY_Community 30|Community 30]] +- [[_COMMUNITY_Community 31|Community 31]] +- [[_COMMUNITY_Community 32|Community 32]] +- [[_COMMUNITY_Community 33|Community 33]] +- [[_COMMUNITY_Community 34|Community 34]] +- [[_COMMUNITY_Community 35|Community 35]] +- [[_COMMUNITY_Community 36|Community 36]] +- [[_COMMUNITY_Community 37|Community 37]] +- [[_COMMUNITY_Community 38|Community 38]] +- [[_COMMUNITY_Community 39|Community 39]] +- [[_COMMUNITY_Community 40|Community 40]] +- [[_COMMUNITY_Community 41|Community 41]] +- [[_COMMUNITY_Community 42|Community 42]] +- [[_COMMUNITY_Community 43|Community 43]] +- [[_COMMUNITY_Community 44|Community 44]] +- [[_COMMUNITY_Community 45|Community 45]] +- [[_COMMUNITY_Community 46|Community 46]] +- [[_COMMUNITY_Community 47|Community 47]] +- [[_COMMUNITY_Community 48|Community 48]] +- [[_COMMUNITY_Community 49|Community 49]] +- [[_COMMUNITY_Community 50|Community 50]] +- [[_COMMUNITY_Community 51|Community 51]] +- [[_COMMUNITY_Community 52|Community 52]] +- [[_COMMUNITY_Community 53|Community 53]] +- [[_COMMUNITY_Community 54|Community 54]] +- [[_COMMUNITY_Community 55|Community 55]] +- [[_COMMUNITY_Community 56|Community 56]] +- [[_COMMUNITY_Community 57|Community 57]] +- [[_COMMUNITY_Community 58|Community 58]] +- [[_COMMUNITY_Community 59|Community 59]] +- [[_COMMUNITY_Community 60|Community 60]] +- [[_COMMUNITY_Community 61|Community 61]] +- [[_COMMUNITY_Community 62|Community 62]] +- [[_COMMUNITY_Community 63|Community 63]] +- [[_COMMUNITY_Community 64|Community 64]] +- [[_COMMUNITY_Community 65|Community 65]] +- [[_COMMUNITY_Community 66|Community 66]] +- [[_COMMUNITY_Community 67|Community 67]] +- [[_COMMUNITY_Community 68|Community 68]] +- [[_COMMUNITY_Community 69|Community 69]] +- [[_COMMUNITY_Community 70|Community 70]] +- [[_COMMUNITY_Community 71|Community 71]] +- [[_COMMUNITY_Community 72|Community 72]] +- [[_COMMUNITY_Community 73|Community 73]] +- [[_COMMUNITY_Community 74|Community 74]] +- [[_COMMUNITY_Community 75|Community 75]] +- [[_COMMUNITY_Community 76|Community 76]] +- [[_COMMUNITY_Community 77|Community 77]] +- [[_COMMUNITY_Community 78|Community 78]] +- [[_COMMUNITY_Community 79|Community 79]] +- [[_COMMUNITY_Community 80|Community 80]] +- [[_COMMUNITY_Community 81|Community 81]] +- [[_COMMUNITY_Community 82|Community 82]] +- [[_COMMUNITY_Community 83|Community 83]] +- [[_COMMUNITY_Community 84|Community 84]] +- [[_COMMUNITY_Community 85|Community 85]] +- [[_COMMUNITY_Community 86|Community 86]] +- [[_COMMUNITY_Community 87|Community 87]] +- [[_COMMUNITY_Community 88|Community 88]] +- [[_COMMUNITY_Community 89|Community 89]] +- [[_COMMUNITY_Community 90|Community 90]] +- [[_COMMUNITY_Community 91|Community 91]] +- [[_COMMUNITY_Community 92|Community 92]] +- [[_COMMUNITY_Community 93|Community 93]] +- [[_COMMUNITY_Community 94|Community 94]] +- [[_COMMUNITY_Community 95|Community 95]] +- [[_COMMUNITY_Community 96|Community 96]] +- [[_COMMUNITY_Community 97|Community 97]] +- [[_COMMUNITY_Community 98|Community 98]] +- [[_COMMUNITY_Community 99|Community 99]] +- [[_COMMUNITY_Community 100|Community 100]] +- [[_COMMUNITY_Community 101|Community 101]] +- [[_COMMUNITY_Community 102|Community 102]] +- [[_COMMUNITY_Community 103|Community 103]] +- [[_COMMUNITY_Community 104|Community 104]] +- [[_COMMUNITY_Community 105|Community 105]] +- [[_COMMUNITY_Community 106|Community 106]] +- [[_COMMUNITY_Community 107|Community 107]] +- [[_COMMUNITY_Community 108|Community 108]] +- [[_COMMUNITY_Community 109|Community 109]] +- [[_COMMUNITY_Community 110|Community 110]] +- [[_COMMUNITY_Community 111|Community 111]] +- [[_COMMUNITY_Community 112|Community 112]] +- [[_COMMUNITY_Community 113|Community 113]] +- [[_COMMUNITY_Community 114|Community 114]] +- [[_COMMUNITY_Community 115|Community 115]] +- [[_COMMUNITY_Community 116|Community 116]] +- [[_COMMUNITY_Community 117|Community 117]] +- [[_COMMUNITY_Community 118|Community 118]] +- [[_COMMUNITY_Community 119|Community 119]] +- [[_COMMUNITY_Community 120|Community 120]] +- [[_COMMUNITY_Community 121|Community 121]] +- [[_COMMUNITY_Community 122|Community 122]] +- [[_COMMUNITY_Community 123|Community 123]] +- [[_COMMUNITY_Community 124|Community 124]] +- [[_COMMUNITY_Community 125|Community 125]] +- [[_COMMUNITY_Community 126|Community 126]] +- [[_COMMUNITY_Community 127|Community 127]] +- [[_COMMUNITY_Community 128|Community 128]] +- [[_COMMUNITY_Community 129|Community 129]] +- [[_COMMUNITY_Community 130|Community 130]] +- [[_COMMUNITY_Community 131|Community 131]] +- [[_COMMUNITY_Community 132|Community 132]] +- [[_COMMUNITY_Community 133|Community 133]] +- [[_COMMUNITY_Community 134|Community 134]] +- [[_COMMUNITY_Community 135|Community 135]] +- [[_COMMUNITY_Community 136|Community 136]] +- [[_COMMUNITY_Community 137|Community 137]] +- [[_COMMUNITY_Community 138|Community 138]] +- [[_COMMUNITY_Community 139|Community 139]] +- [[_COMMUNITY_Community 140|Community 140]] +- [[_COMMUNITY_Community 141|Community 141]] +- [[_COMMUNITY_Community 142|Community 142]] +- [[_COMMUNITY_Community 143|Community 143]] +- [[_COMMUNITY_Community 144|Community 144]] +- [[_COMMUNITY_Community 145|Community 145]] +- [[_COMMUNITY_Community 146|Community 146]] +- [[_COMMUNITY_Community 147|Community 147]] +- [[_COMMUNITY_Community 148|Community 148]] +- [[_COMMUNITY_Community 149|Community 149]] +- [[_COMMUNITY_Community 150|Community 150]] +- [[_COMMUNITY_Community 151|Community 151]] +- [[_COMMUNITY_Community 152|Community 152]] +- [[_COMMUNITY_Community 153|Community 153]] +- [[_COMMUNITY_Community 154|Community 154]] +- [[_COMMUNITY_Community 155|Community 155]] +- [[_COMMUNITY_Community 156|Community 156]] +- [[_COMMUNITY_Community 157|Community 157]] +- [[_COMMUNITY_Community 158|Community 158]] +- [[_COMMUNITY_Community 159|Community 159]] +- [[_COMMUNITY_Community 160|Community 160]] +- [[_COMMUNITY_Community 161|Community 161]] +- [[_COMMUNITY_Community 162|Community 162]] +- [[_COMMUNITY_Community 163|Community 163]] +- [[_COMMUNITY_Community 164|Community 164]] +- [[_COMMUNITY_Community 165|Community 165]] +- [[_COMMUNITY_Community 166|Community 166]] +- [[_COMMUNITY_Community 167|Community 167]] +- [[_COMMUNITY_Community 168|Community 168]] +- [[_COMMUNITY_Community 169|Community 169]] +- [[_COMMUNITY_Community 170|Community 170]] +- [[_COMMUNITY_Community 171|Community 171]] +- [[_COMMUNITY_Community 172|Community 172]] +- [[_COMMUNITY_Community 173|Community 173]] +- [[_COMMUNITY_Community 174|Community 174]] +- [[_COMMUNITY_Community 175|Community 175]] +- [[_COMMUNITY_Community 176|Community 176]] +- [[_COMMUNITY_Community 177|Community 177]] +- [[_COMMUNITY_Community 178|Community 178]] +- [[_COMMUNITY_Community 179|Community 179]] +- [[_COMMUNITY_Community 180|Community 180]] +- [[_COMMUNITY_Community 181|Community 181]] +- [[_COMMUNITY_Community 182|Community 182]] +- [[_COMMUNITY_Community 183|Community 183]] +- [[_COMMUNITY_Community 184|Community 184]] +- [[_COMMUNITY_Community 185|Community 185]] +- [[_COMMUNITY_Community 186|Community 186]] +- [[_COMMUNITY_Community 187|Community 187]] +- [[_COMMUNITY_Community 188|Community 188]] +- [[_COMMUNITY_Community 189|Community 189]] +- [[_COMMUNITY_Community 190|Community 190]] +- [[_COMMUNITY_Community 191|Community 191]] +- [[_COMMUNITY_Community 192|Community 192]] +- [[_COMMUNITY_Community 193|Community 193]] +- [[_COMMUNITY_Community 194|Community 194]] +- [[_COMMUNITY_Community 195|Community 195]] +- [[_COMMUNITY_Community 196|Community 196]] +- [[_COMMUNITY_Community 197|Community 197]] +- [[_COMMUNITY_Community 198|Community 198]] +- [[_COMMUNITY_Community 199|Community 199]] +- [[_COMMUNITY_Community 200|Community 200]] +- [[_COMMUNITY_Community 201|Community 201]] +- [[_COMMUNITY_Community 202|Community 202]] +- [[_COMMUNITY_Community 203|Community 203]] +- [[_COMMUNITY_Community 204|Community 204]] +- [[_COMMUNITY_Community 205|Community 205]] +- [[_COMMUNITY_Community 206|Community 206]] +- [[_COMMUNITY_Community 207|Community 207]] +- [[_COMMUNITY_Community 208|Community 208]] +- [[_COMMUNITY_Community 209|Community 209]] +- [[_COMMUNITY_Community 210|Community 210]] +- [[_COMMUNITY_Community 211|Community 211]] +- [[_COMMUNITY_Community 212|Community 212]] +- [[_COMMUNITY_Community 213|Community 213]] +- [[_COMMUNITY_Community 214|Community 214]] +- [[_COMMUNITY_Community 215|Community 215]] +- [[_COMMUNITY_Community 216|Community 216]] +- [[_COMMUNITY_Community 217|Community 217]] +- [[_COMMUNITY_Community 218|Community 218]] +- [[_COMMUNITY_Community 219|Community 219]] +- [[_COMMUNITY_Community 220|Community 220]] +- [[_COMMUNITY_Community 221|Community 221]] +- [[_COMMUNITY_Community 222|Community 222]] +- [[_COMMUNITY_Community 223|Community 223]] +- [[_COMMUNITY_Community 224|Community 224]] +- [[_COMMUNITY_Community 225|Community 225]] +- [[_COMMUNITY_Community 226|Community 226]] +- [[_COMMUNITY_Community 227|Community 227]] +- [[_COMMUNITY_Community 228|Community 228]] +- [[_COMMUNITY_Community 229|Community 229]] +- [[_COMMUNITY_Community 230|Community 230]] +- [[_COMMUNITY_Community 231|Community 231]] +- [[_COMMUNITY_Community 232|Community 232]] +- [[_COMMUNITY_Community 233|Community 233]] +- [[_COMMUNITY_Community 234|Community 234]] +- [[_COMMUNITY_Community 235|Community 235]] +- [[_COMMUNITY_Community 236|Community 236]] +- [[_COMMUNITY_Community 237|Community 237]] +- [[_COMMUNITY_Community 238|Community 238]] +- [[_COMMUNITY_Community 239|Community 239]] +- [[_COMMUNITY_Community 240|Community 240]] +- [[_COMMUNITY_Community 241|Community 241]] +- [[_COMMUNITY_Community 242|Community 242]] +- [[_COMMUNITY_Community 243|Community 243]] +- [[_COMMUNITY_Community 244|Community 244]] +- [[_COMMUNITY_Community 245|Community 245]] +- [[_COMMUNITY_Community 246|Community 246]] +- [[_COMMUNITY_Community 247|Community 247]] +- [[_COMMUNITY_Community 248|Community 248]] +- [[_COMMUNITY_Community 249|Community 249]] +- [[_COMMUNITY_Community 250|Community 250]] +- [[_COMMUNITY_Community 251|Community 251]] +- [[_COMMUNITY_Community 252|Community 252]] +- [[_COMMUNITY_Community 253|Community 253]] +- [[_COMMUNITY_Community 254|Community 254]] +- [[_COMMUNITY_Community 255|Community 255]] +- [[_COMMUNITY_Community 256|Community 256]] +- [[_COMMUNITY_Community 257|Community 257]] +- [[_COMMUNITY_Community 258|Community 258]] +- [[_COMMUNITY_Community 259|Community 259]] +- [[_COMMUNITY_Community 260|Community 260]] +- [[_COMMUNITY_Community 261|Community 261]] +- [[_COMMUNITY_Community 262|Community 262]] +- [[_COMMUNITY_Community 263|Community 263]] +- [[_COMMUNITY_Community 264|Community 264]] +- [[_COMMUNITY_Community 265|Community 265]] +- [[_COMMUNITY_Community 266|Community 266]] +- [[_COMMUNITY_Community 267|Community 267]] +- [[_COMMUNITY_Community 268|Community 268]] +- [[_COMMUNITY_Community 269|Community 269]] +- [[_COMMUNITY_Community 270|Community 270]] +- [[_COMMUNITY_Community 271|Community 271]] +- [[_COMMUNITY_Community 272|Community 272]] +- [[_COMMUNITY_Community 273|Community 273]] +- [[_COMMUNITY_Community 274|Community 274]] +- [[_COMMUNITY_Community 275|Community 275]] +- [[_COMMUNITY_Community 276|Community 276]] +- [[_COMMUNITY_Community 277|Community 277]] +- [[_COMMUNITY_Community 278|Community 278]] +- [[_COMMUNITY_Community 279|Community 279]] +- [[_COMMUNITY_Community 280|Community 280]] +- [[_COMMUNITY_Community 281|Community 281]] +- [[_COMMUNITY_Community 282|Community 282]] +- [[_COMMUNITY_Community 283|Community 283]] +- [[_COMMUNITY_Community 284|Community 284]] +- [[_COMMUNITY_Community 285|Community 285]] +- [[_COMMUNITY_Community 286|Community 286]] +- [[_COMMUNITY_Community 287|Community 287]] +- [[_COMMUNITY_Community 288|Community 288]] +- [[_COMMUNITY_Community 289|Community 289]] +- [[_COMMUNITY_Community 290|Community 290]] +- [[_COMMUNITY_Community 291|Community 291]] +- [[_COMMUNITY_Community 292|Community 292]] +- [[_COMMUNITY_Community 293|Community 293]] +- [[_COMMUNITY_Community 294|Community 294]] +- [[_COMMUNITY_Community 295|Community 295]] +- [[_COMMUNITY_Community 296|Community 296]] +- [[_COMMUNITY_Community 297|Community 297]] +- [[_COMMUNITY_Community 298|Community 298]] +- [[_COMMUNITY_Community 299|Community 299]] +- [[_COMMUNITY_Community 300|Community 300]] +- [[_COMMUNITY_Community 301|Community 301]] +- [[_COMMUNITY_Community 302|Community 302]] +- [[_COMMUNITY_Community 303|Community 303]] +- [[_COMMUNITY_Community 304|Community 304]] +- [[_COMMUNITY_Community 305|Community 305]] +- [[_COMMUNITY_Community 306|Community 306]] +- [[_COMMUNITY_Community 307|Community 307]] +- [[_COMMUNITY_Community 308|Community 308]] +- [[_COMMUNITY_Community 309|Community 309]] +- [[_COMMUNITY_Community 310|Community 310]] +- [[_COMMUNITY_Community 311|Community 311]] +- [[_COMMUNITY_Community 312|Community 312]] +- [[_COMMUNITY_Community 313|Community 313]] +- [[_COMMUNITY_Community 314|Community 314]] +- [[_COMMUNITY_Community 315|Community 315]] +- [[_COMMUNITY_Community 316|Community 316]] +- [[_COMMUNITY_Community 317|Community 317]] +- [[_COMMUNITY_Community 318|Community 318]] +- [[_COMMUNITY_Community 319|Community 319]] +- [[_COMMUNITY_Community 320|Community 320]] +- [[_COMMUNITY_Community 321|Community 321]] +- [[_COMMUNITY_Community 322|Community 322]] +- [[_COMMUNITY_Community 323|Community 323]] +- [[_COMMUNITY_Community 324|Community 324]] +- [[_COMMUNITY_Community 325|Community 325]] +- [[_COMMUNITY_Community 326|Community 326]] +- [[_COMMUNITY_Community 327|Community 327]] +- [[_COMMUNITY_Community 328|Community 328]] +- [[_COMMUNITY_Community 329|Community 329]] +- [[_COMMUNITY_Community 330|Community 330]] +- [[_COMMUNITY_Community 331|Community 331]] +- [[_COMMUNITY_Community 332|Community 332]] +- [[_COMMUNITY_Community 333|Community 333]] +- [[_COMMUNITY_Community 334|Community 334]] +- [[_COMMUNITY_Community 335|Community 335]] +- [[_COMMUNITY_Community 336|Community 336]] +- [[_COMMUNITY_Community 337|Community 337]] +- [[_COMMUNITY_Community 338|Community 338]] +- [[_COMMUNITY_Community 339|Community 339]] +- [[_COMMUNITY_Community 340|Community 340]] +- [[_COMMUNITY_Community 341|Community 341]] +- [[_COMMUNITY_Community 342|Community 342]] +- [[_COMMUNITY_Community 343|Community 343]] +- [[_COMMUNITY_Community 344|Community 344]] +- [[_COMMUNITY_Community 345|Community 345]] +- [[_COMMUNITY_Community 346|Community 346]] +- [[_COMMUNITY_Community 347|Community 347]] +- [[_COMMUNITY_Community 348|Community 348]] +- [[_COMMUNITY_Community 349|Community 349]] +- [[_COMMUNITY_Community 350|Community 350]] +- [[_COMMUNITY_Community 351|Community 351]] +- [[_COMMUNITY_Community 352|Community 352]] +- [[_COMMUNITY_Community 353|Community 353]] +- [[_COMMUNITY_Community 354|Community 354]] +- [[_COMMUNITY_Community 355|Community 355]] +- [[_COMMUNITY_Community 356|Community 356]] +- [[_COMMUNITY_Community 357|Community 357]] +- [[_COMMUNITY_Community 358|Community 358]] +- [[_COMMUNITY_Community 359|Community 359]] +- [[_COMMUNITY_Community 360|Community 360]] +- [[_COMMUNITY_Community 361|Community 361]] +- [[_COMMUNITY_Community 362|Community 362]] +- [[_COMMUNITY_Community 363|Community 363]] +- [[_COMMUNITY_Community 364|Community 364]] +- [[_COMMUNITY_Community 365|Community 365]] +- [[_COMMUNITY_Community 366|Community 366]] +- [[_COMMUNITY_Community 367|Community 367]] +- [[_COMMUNITY_Community 368|Community 368]] +- [[_COMMUNITY_Community 369|Community 369]] +- [[_COMMUNITY_Community 370|Community 370]] +- [[_COMMUNITY_Community 371|Community 371]] +- [[_COMMUNITY_Community 372|Community 372]] +- [[_COMMUNITY_Community 373|Community 373]] +- [[_COMMUNITY_Community 374|Community 374]] +- [[_COMMUNITY_Community 375|Community 375]] +- [[_COMMUNITY_Community 376|Community 376]] +- [[_COMMUNITY_Community 377|Community 377]] +- [[_COMMUNITY_Community 378|Community 378]] +- [[_COMMUNITY_Community 379|Community 379]] +- [[_COMMUNITY_Community 380|Community 380]] +- [[_COMMUNITY_Community 381|Community 381]] +- [[_COMMUNITY_Community 382|Community 382]] +- [[_COMMUNITY_Community 383|Community 383]] +- [[_COMMUNITY_Community 384|Community 384]] +- [[_COMMUNITY_Community 385|Community 385]] +- [[_COMMUNITY_Community 386|Community 386]] +- [[_COMMUNITY_Community 387|Community 387]] +- [[_COMMUNITY_Community 388|Community 388]] +- [[_COMMUNITY_Community 389|Community 389]] +- [[_COMMUNITY_Community 390|Community 390]] +- [[_COMMUNITY_Community 391|Community 391]] +- [[_COMMUNITY_Community 392|Community 392]] +- [[_COMMUNITY_Community 393|Community 393]] +- [[_COMMUNITY_Community 394|Community 394]] +- [[_COMMUNITY_Community 395|Community 395]] +- [[_COMMUNITY_Community 396|Community 396]] +- [[_COMMUNITY_Community 397|Community 397]] +- [[_COMMUNITY_Community 398|Community 398]] +- [[_COMMUNITY_Community 399|Community 399]] +- [[_COMMUNITY_Community 400|Community 400]] +- [[_COMMUNITY_Community 401|Community 401]] +- [[_COMMUNITY_Community 402|Community 402]] +- [[_COMMUNITY_Community 403|Community 403]] +- [[_COMMUNITY_Community 404|Community 404]] +- [[_COMMUNITY_Community 405|Community 405]] +- [[_COMMUNITY_Community 406|Community 406]] +- [[_COMMUNITY_Community 407|Community 407]] +- [[_COMMUNITY_Community 408|Community 408]] +- [[_COMMUNITY_Community 409|Community 409]] +- [[_COMMUNITY_Community 410|Community 410]] +- [[_COMMUNITY_Community 411|Community 411]] +- [[_COMMUNITY_Community 412|Community 412]] +- [[_COMMUNITY_Community 413|Community 413]] +- [[_COMMUNITY_Community 414|Community 414]] +- [[_COMMUNITY_Community 415|Community 415]] +- [[_COMMUNITY_Community 416|Community 416]] +- [[_COMMUNITY_Community 417|Community 417]] +- [[_COMMUNITY_Community 418|Community 418]] +- [[_COMMUNITY_Community 419|Community 419]] +- [[_COMMUNITY_Community 420|Community 420]] +- [[_COMMUNITY_Community 421|Community 421]] +- [[_COMMUNITY_Community 422|Community 422]] +- [[_COMMUNITY_Community 434|Community 434]] +- [[_COMMUNITY_Community 436|Community 436]] +- [[_COMMUNITY_Community 437|Community 437]] +- [[_COMMUNITY_Community 438|Community 438]] +- [[_COMMUNITY_Community 439|Community 439]] +- [[_COMMUNITY_Community 440|Community 440]] +- [[_COMMUNITY_Community 441|Community 441]] +- [[_COMMUNITY_Community 442|Community 442]] +- [[_COMMUNITY_Community 443|Community 443]] +- [[_COMMUNITY_Community 444|Community 444]] +- [[_COMMUNITY_Community 445|Community 445]] +- [[_COMMUNITY_Community 446|Community 446]] +- [[_COMMUNITY_Community 447|Community 447]] +- [[_COMMUNITY_Community 448|Community 448]] +- [[_COMMUNITY_Community 449|Community 449]] +- [[_COMMUNITY_Community 450|Community 450]] +- [[_COMMUNITY_Community 451|Community 451]] +- [[_COMMUNITY_Community 452|Community 452]] +- [[_COMMUNITY_Community 453|Community 453]] +- [[_COMMUNITY_Community 454|Community 454]] +- [[_COMMUNITY_Community 455|Community 455]] +- [[_COMMUNITY_Community 456|Community 456]] +- [[_COMMUNITY_Community 457|Community 457]] +- [[_COMMUNITY_Community 458|Community 458]] +- [[_COMMUNITY_Community 459|Community 459]] +- [[_COMMUNITY_Community 460|Community 460]] +- [[_COMMUNITY_Community 461|Community 461]] +- [[_COMMUNITY_Community 462|Community 462]] +- [[_COMMUNITY_Community 463|Community 463]] +- [[_COMMUNITY_Community 464|Community 464]] +- [[_COMMUNITY_Community 465|Community 465]] +- [[_COMMUNITY_Community 466|Community 466]] +- [[_COMMUNITY_Community 467|Community 467]] +- [[_COMMUNITY_Community 468|Community 468]] +- [[_COMMUNITY_Community 469|Community 469]] +- [[_COMMUNITY_Community 470|Community 470]] +- [[_COMMUNITY_Community 471|Community 471]] +- [[_COMMUNITY_Community 472|Community 472]] +- [[_COMMUNITY_Community 473|Community 473]] +- [[_COMMUNITY_Community 474|Community 474]] +- [[_COMMUNITY_Community 475|Community 475]] +- [[_COMMUNITY_Community 476|Community 476]] +- [[_COMMUNITY_Community 477|Community 477]] +- [[_COMMUNITY_Community 478|Community 478]] +- [[_COMMUNITY_Community 479|Community 479]] +- [[_COMMUNITY_Community 480|Community 480]] +- [[_COMMUNITY_Community 481|Community 481]] +- [[_COMMUNITY_Community 482|Community 482]] +- [[_COMMUNITY_Community 483|Community 483]] +- [[_COMMUNITY_Community 484|Community 484]] +- [[_COMMUNITY_Community 485|Community 485]] +- [[_COMMUNITY_Community 486|Community 486]] +- [[_COMMUNITY_Community 487|Community 487]] +- [[_COMMUNITY_Community 488|Community 488]] +- [[_COMMUNITY_Community 489|Community 489]] +- [[_COMMUNITY_Community 490|Community 490]] +- [[_COMMUNITY_Community 491|Community 491]] +- [[_COMMUNITY_Community 492|Community 492]] +- [[_COMMUNITY_Community 494|Community 494]] +- [[_COMMUNITY_Community 495|Community 495]] +- [[_COMMUNITY_Community 496|Community 496]] +- [[_COMMUNITY_Community 497|Community 497]] +- [[_COMMUNITY_Community 498|Community 498]] +- [[_COMMUNITY_Community 499|Community 499]] +- [[_COMMUNITY_Community 500|Community 500]] +- [[_COMMUNITY_Community 501|Community 501]] +- [[_COMMUNITY_Community 502|Community 502]] +- [[_COMMUNITY_Community 503|Community 503]] +- [[_COMMUNITY_Community 504|Community 504]] +- [[_COMMUNITY_Community 505|Community 505]] +- [[_COMMUNITY_Community 506|Community 506]] +- [[_COMMUNITY_Community 507|Community 507]] +- [[_COMMUNITY_Community 508|Community 508]] +- [[_COMMUNITY_Community 509|Community 509]] +- [[_COMMUNITY_Community 510|Community 510]] +- [[_COMMUNITY_Community 511|Community 511]] +- [[_COMMUNITY_Community 512|Community 512]] +- [[_COMMUNITY_Community 513|Community 513]] +- [[_COMMUNITY_Community 514|Community 514]] +- [[_COMMUNITY_Community 515|Community 515]] +- [[_COMMUNITY_Community 516|Community 516]] +- [[_COMMUNITY_Community 517|Community 517]] +- [[_COMMUNITY_Community 518|Community 518]] +- [[_COMMUNITY_Community 519|Community 519]] +- [[_COMMUNITY_Community 520|Community 520]] +- [[_COMMUNITY_Community 521|Community 521]] +- [[_COMMUNITY_Community 522|Community 522]] +- [[_COMMUNITY_Community 523|Community 523]] +- [[_COMMUNITY_Community 524|Community 524]] +- [[_COMMUNITY_Community 525|Community 525]] +- [[_COMMUNITY_Community 526|Community 526]] +- [[_COMMUNITY_Community 527|Community 527]] +- [[_COMMUNITY_Community 528|Community 528]] +- [[_COMMUNITY_Community 529|Community 529]] +- [[_COMMUNITY_Community 530|Community 530]] +- [[_COMMUNITY_Community 531|Community 531]] +- [[_COMMUNITY_Community 532|Community 532]] +- [[_COMMUNITY_Community 533|Community 533]] + +## God Nodes (most connected - your core abstractions) +1. `create_app()` - 123 edges +2. `AppDependencies` - 121 edges +3. `SyncStateWriter` - 98 edges +4. `_deps()` - 95 edges +5. `NASSyncClient` - 88 edges +6. `PathsConfig` - 81 edges +7. `EquipmentConfig` - 78 edges +8. `SessionStore` - 75 edges +9. `CreationWriter` - 71 edges +10. `RcloneSftpTransport` - 69 edges + +## Surprising Connections (you probably didn't know these) +- `test_config_error_can_be_raised_and_caught()` --calls--> `ConfigError` [INFERRED] + tests/unit/test_errors.py β†’ src/exlab_wizard/errors.py +- `test_validation_error_can_be_raised_and_caught()` --calls--> `ValidationError` [INFERRED] + tests/unit/test_errors.py β†’ src/exlab_wizard/errors.py +- `test_keyring_unavailable_error_can_be_raised_and_caught()` --calls--> `KeyringUnavailableError` [INFERRED] + tests/unit/test_errors.py β†’ src/exlab_wizard/errors.py +- `test_evaluate_setup_state_no_config()` --calls--> `evaluate_setup_state()` [INFERRED] + tests/unit/test_paths.py β†’ src/exlab_wizard/paths.py +- `writer()` --calls--> `CreationWriter` [INFERRED] + tests/unit/cache/test_creation_writer.py β†’ src/exlab_wizard/cache/creation_writer.py + +## Communities (535 total, 213 thin omitted) + +### Community 0 - "Community 0" +Cohesion: 0.04 +Nodes (73): EquipmentJson, LimsProjectBlock, OrchestratorBlock, parse_validation_override_entry(), PluginApplied, PluginIsolation, msgspec.Struct types for the ExLab-Wizard cache files. This module is the singl, Plugin worker isolation telemetry. Spec Β§6.2.4 / Β§11.3 (added 1.3). (+65 more) + +### Community 1 - "Community 1" +Cohesion: 0.05 +Nodes (64): When config has no equipment the setup gate blocks /tree., test_get_tree_returns_empty_when_no_equipment(), _ready_config(), ready_config(), Each non-soft INCOMPLETE_* state returns a 503 with the right code., ``_ready_config`` minus the LIMS slot, for exercising the LIMS gate., _ready_config_without_lims(), test_setup_state_gate_returns_503_in_incomplete_states() (+56 more) + +### Community 2 - "Community 2" +Cohesion: 0.05 +Nodes (78): Raised when a template redeclares label / operator / objective. Backend Spec Β§10, TemplateCoreFieldRedeclaredError, _build_front_matter(), _build_readme_fields(), _check_value_type(), _core_fields_dict(), _custom_fields_list(), CustomField (+70 more) + +### Community 3 - "Community 3" +Cohesion: 0.05 +Nodes (69): Tests for ``exlab_wizard.io.yaml_files``., A YAML file with a top-level scalar/list is not a manifest., test_load_yaml_manifest_empty_file_returns_empty_dict(), test_load_yaml_manifest_missing_file_raises(), test_load_yaml_manifest_non_dict_returns_empty_dict(), test_load_yaml_manifest_propagates_yaml_error(), test_load_yaml_manifest_returns_dict(), load_yaml_manifest() (+61 more) + +### Community 4 - "Community 4" +Cohesion: 0.07 +Nodes (74): _build_config(), _build_controller(), _drain_to_done(), _project_request(), End-to-end integration tests for :class:`CreationController`. Each test drives, The controller writes ``equipment.json`` under ``//.exlab-wiz, Generic exceptions are wrapped as ``internal_error``., The best-effort log appender writes to the equipment cache dir. (+66 more) + +### Community 5 - "Community 5" +Cohesion: 0.05 +Nodes (39): _attach_resolved(), CreationController, _format_error(), _has_hard_finding(), _os_username(), _project_name_for(), Creation controller. Backend Spec Β§4.4.1, Β§4.7, Β§4.8. Composes the validator, t, Write the per-equipment ``equipment.json`` registry record. Backend Spe (+31 more) + +### Community 6 - "Community 6" +Cohesion: 0.07 +Nodes (56): CreationJson, PathsBlock, Template provenance captured at creation time. Spec Β§11.3., Resolved on-disk paths captured at creation time. Spec Β§11.3., Top-level ``creation.json`` payload at schema version 1.8. Reading: ``msgsp, TemplateBlock, _write_creation_json(), Write a minimal ``creation.json`` so a dir reads as a real run. The ``POST (+48 more) + +### Community 7 - "Community 7" +Cohesion: 0.06 +Nodes (52): BandwidthConfig, EquipmentConfig, ``bandwidth:`` sub-block on a transport., ``transport:`` block for SFTP over SSH with password auth. The wizard invok, ``transport:`` block for an SMB share with password auth. The wizard invoke, One ``equipment:`` list entry. Backend Spec Β§9. ``sync_mode`` (Redesign Spe, RcloneSftpTransport, RcloneSmbTransport (+44 more) + +### Community 8 - "Community 8" +Cohesion: 0.05 +Nodes (52): One operator-defined extra README field. Backend Spec Β§9, Β§10., READMEDefaultField, _equipment_dict(), _orch_staging_transport_dict(), Unit tests for ``exlab_wizard.config.models``. Pydantic models that mirror ``co, The operator-free quiescence redesign drops the per-equipment completeness-s, Build a stage-mode EquipmentConfig from a dict, dump it, compare., Build a valid EquipmentConfig dict with sensible defaults. (+44 more) + +### Community 9 - "Community 9" +Cohesion: 0.06 +Nodes (60): is_test_run_dir(), True if ``name`` is a test-run directory., Return every run-leaf directory pending NAS sync. Stage-mode runs sit u, count_files_and_bytes(), iter_subdirs(), Shared filesystem helpers for the orchestrator. Backend Spec Β§13.2. Both :mod:`, Sum file count + total bytes under ``run_path``. With ``exclude_cache=True`, Return immediate sub-directories of ``parent``. Skips ``.exlab-wizard/``, h (+52 more) + +### Community 10 - "Community 10" +Cohesion: 0.05 +Nodes (55): _default_handoff(), is_pid_alive(), main(), _posix_is_pid_alive(), ``exlab-wizard-window`` console_scripts entry point. Backend Spec Β§15.3.2. Read, Entry point. Backend Spec Β§15.3.2. ``argv`` is ignored at this phase (the s, Hand off control to :mod:`pywebview_app`., Resolved ``server.json`` contents: ``port`` / ``pid`` / ``started_at``. (+47 more) + +### Community 11 - "Community 11" +Cohesion: 0.05 +Nodes (48): project_identifier(), In-memory session store + GC for creation sessions. Backend Spec Β§4.4.7. The :c, Create a fresh session in :data:`SessionState.PENDING` state., Return the session keyed by ``session_id``, or ``None``., Return ``(session_id, session)`` pairs, oldest-created first. The publi, Move ``session_id`` to ``new_state``, updating ``current_phase``. Valid, Attach a WebSocket fan-out queue to the session. The controller pushes, Refresh ``last_heartbeat`` so the GC will not close this session. No-op (+40 more) + +### Community 12 - "Community 12" +Cohesion: 0.08 +Nodes (59): CreationWriter, Atomic reader/writer for ``creation.json``. Backend Spec Β§4.4.5., local_check_factory(), Check factory whose closure declares every file equal. Returns a closure co, _build_config(), _client(), _factory(), _populate_run() (+51 more) + +### Community 13 - "Community 13" +Cohesion: 0.05 +Nodes (54): DeltaEvent, DoneEvent, encode_event(), event_from_dict(), FailedEvent, InputRequiredEvent, PhaseEvent, ProgressEvent (+46 more) + +### Community 14 - "Community 14" +Cohesion: 0.05 +Nodes (37): is_run_dir(), True if ``name`` is an experimental-run directory. Note: ``RUN_DIR_PREFIX``, TypedDict, AuditScopeAll, AuditScopeEquipment, AuditScopeProject, _extract_overrides_and_sync(), _finding_sort_key() (+29 more) + +### Community 15 - "Community 15" +Cohesion: 0.05 +Nodes (48): PluginStatus, Plugin invocation outcome reported by the host. Backend Spec Β§6.2.4., applied_entry_as_json(), _apply_rlimits(), _build_applied_entry(), build_test_registry(), _diff_and_collect_violations(), _drain_stderr() (+40 more) + +### Community 16 - "Community 16" +Cohesion: 0.05 +Nodes (35): assert_transition(), Return the :class:`Phase` event corresponding to ``state``. Backend Spec Β§4, Raise :class:`ValueError` if ``current -> new_state`` is illegal. Defensive, state_to_phase(), Tests for ``exlab_wizard.controller.state_machine``. The state machine is the c, The guard rejects a state not present in ``VALID_TRANSITIONS``. We can't ea, Every ``SessionState`` value must have an explicit mapping entry., test_assert_transition_allows_cancel_from_any_non_terminal() (+27 more) + +### Community 17 - "Community 17" +Cohesion: 0.06 +Nodes (51): apply_test_mode_prefix(), _deep_merge(), dump_config(), load_config(), load_config_from_text(), config.yaml round-trip loader. Backend Spec Β§9. Uses ruamel.yaml in round-trip, Load a config from YAML text. Same semantics as load_config but for in-memory in, Atomically write `config` back to `path`. If `original_text` is supplied, r (+43 more) + +### Community 18 - "Community 18" +Cohesion: 0.07 +Nodes (50): _config_with_local_root(), Unit tests for the ``/tree`` and ``/run/{path}`` browse endpoints., ``TestRuns`` directory under a project surfaces as ``test_runs`` list., A creation.json that is present but malformed surfaces as 422., Run with creation.json but no README.md returns readme: null., Path-confinement guard: only the configured local_root / staging_root / temp, A staged run's sync-queue job state is surfaced as the log., A failed job row's ``last_error`` / ``attempts`` / ``verify_passes`` / ``nas (+42 more) + +### Community 19 - "Community 19" +Cohesion: 0.06 +Nodes (50): Split ``proposed_path`` into per-segment names. Accepts both POSIX and Wind, _split_path_segments(), _clean_input(), Unit tests for ``exlab_wizard.validator.engine`` -- creation-time mode. The eng, Default ValidatorConfig matches the Β§9 documented defaults., Test-mode input with TestRuns/ parent and TestRun_ leaf passes., An angle-bracket identifier in a path segment fires Β§8.1.1., A Windows-illegal char in a file name fires Β§8.1.2. (+42 more) + +### Community 20 - "Community 20" +Cohesion: 0.06 +Nodes (49): build_error_envelope(), _config_error_handler(), error_response(), _exlab_validation_handler(), extract_or_create_trace_id(), _generic_handler(), _http_exception_handler(), _keyring_unavailable_handler() (+41 more) + +### Community 21 - "Community 21" +Cohesion: 0.06 +Nodes (47): append_log_line(), format_log_line(), Append-only writer for ``wizard..log`` files. Backend Spec Β§11.5, Β§16., Render the supplied context as ``[host:..] [equip:..] ...``. Returns the em, Trim ``line`` so its UTF-8 byte length is at most ``LOG_LINE_MAX_BYTES``. T, Append a single ``line`` to a ``wizard..log`` file. Creates the p, Render a structured log line per Backend Spec Β§11.5 / Β§16.4. Tags are omitt, _render_tags() (+39 more) + +### Community 22 - "Community 22" +Cohesion: 0.06 +Nodes (31): ExLabError, PluginInputRequired, Top-level exception hierarchy. Backend Spec Β§4.3 errors.py., Base class for all ExLab-Wizard exceptions., Raised when a Copier template fails to load. Backend Spec Β§5., Raised by plugin workers to escalate for additional input. Backend Spec Β§6.4., Raised when a cache file's schema major version exceeds reader support. Backend, Raised when a creation gate runs while setup state is INCOMPLETE_*. Backend Spec (+23 more) + +### Community 23 - "Community 23" +Cohesion: 0.04 +Nodes (48): 00 -- Logo and Branding, 01 -- Color Palette, 02 -- Typography, 03 -- Spacing, 04 -- Border Radius & Shadows, 05 -- Components, 06 -- Data Visualization, 07 -- Code Integration (+40 more) + +### Community 24 - "Community 24" +Cohesion: 0.06 +Nodes (36): _make_tray(), Tests for :mod:`exlab_wizard.tray.main`. Backend Spec Β§4.3.2., ``main()`` builds default components and calls :meth:`TrayApp.run`., ``asyncio.run`` raises RuntimeError when a loop is running. The tray's ``re, ``_build_default_app`` builds deps, calls ``create_app``, mounts NiceGUI., When ``app`` is None, the helper calls ``_build_default_app``., ``_run_smoke`` boots the server, blocks on a stop event, and stops cleanly., ``main(["--smoke"])`` calls ``_run_smoke`` instead of the icon loop. (+28 more) + +### Community 25 - "Community 25" +Cohesion: 0.06 +Nodes (43): EquipmentCacheWriter, Write the ``test_runs.json`` marker file. Idempotent per Β§11.4.2: if th, Read and decode a ``test_runs.json`` marker file. Raises ``SchemaMajorM, Writer for ``equipment.json`` and ``test_runs.json``. Instances are statele, Write or rewrite the per-equipment ``equipment.json`` file. Stamping ru, Read and decode an existing ``equipment.json`` file. Uses ``msgspec.jso, _make_equipment_payload(), _make_test_runs_payload() (+35 more) + +### Community 26 - "Community 26" +Cohesion: 0.13 +Nodes (42): KeyringStore, OS keyring with encrypted-at-rest fallback. Backend Spec Β§7.4. Tries the OS, _BrokenKeyring, Tests for :class:`exlab_wizard.lims.keyring_store.KeyringStore`. The OS-keyring, Set + get via the encrypted fallback (no OS keyring)., The fallback file is a JSON envelope with version, salt, ciphertext., A second ``set_password`` overwrites the prior secret., When the OS keyring set fails, the encrypted-at-rest write is used and a sub (+34 more) + +### Community 27 - "Community 27" +Cohesion: 0.09 +Nodes (38): QuiescenceSyncPoller, Polls every run pending NAS sync and enqueues runs with eligible files. Con, Swap the cached config in place so a live settings save applies. ``poll, Start the background polling task. Idempotent. Returns immediately; the, Cancel the background task and wait for it to exit. Idempotent., _make_config(), _make_run(), _poller() (+30 more) + +### Community 28 - "Community 28" +Cohesion: 0.06 +Nodes (40): configure_logging(), get_logger(), Canonical logger factory + configuration. Backend Spec Β§16.2.1, Β§16.2.2, Β§16.2.5, Drain the queue, stop the listener thread, and detach the queue handler. Ca, Tear down the active listener. Must be called with ``_state_lock`` held., Return the numeric level threshold for the root logger. ``LoggingConfig`` a, Return ``(central_log_max_mb, central_log_keep)`` from ``config`` or defaults., Return the configured ``local_root`` for the equipment-scoped handler. Phas (+32 more) + +### Community 29 - "Community 29" +Cohesion: 0.06 +Nodes (45): AuditScopeKind, BandwidthDay, CreationLevel, DirectoryLevel, FieldType, FindingKind, LIMSProjectSource, LIMSProjectStatus (+37 more) + +### Community 30 - "Community 30" +Cohesion: 0.07 +Nodes (43): build_settings_draft(), finalize_settings_draft(), first_incomplete_section(), lims_credential_initial_state(), _password_requiring_nas_equipment(), Settings dialog (Frontend Spec Β§7). Two-pane modal with a left vertical-nav and, Return the first section ID in canonical order that's incomplete. The dynam, Compute the *Save all* button label, including the badge count. (+35 more) + +### Community 31 - "Community 31" +Cohesion: 0.1 +Nodes (41): NASSyncClient, Durable, per-equipment NAS sync queue with Pre-Sync Gate. Backend Spec Β§7.1, Swap the cached config + equipment map in place (no relaunch). The ``eq, Return the queue state of the job for ``run_path``. ``"none"`` when no, Re-arm a ``FAILED`` job. Backend Spec Β§7.1.5 (Problems-tab Retry)., _build_config(), _make_creation(), _make_push_factory() (+33 more) + +### Community 32 - "Community 32" +Cohesion: 0.07 +Nodes (37): _Bucket, _coalesced_message(), _default_notifier(), _noop_notifier(), NotificationBus, notify(), OS notifications via plyer with 5-second coalescing. Backend Spec Β§15.7.3. Two, Coalescing layer over :func:`notify`. The launcher constructs one bus and t (+29 more) + +### Community 33 - "Community 33" +Cohesion: 0.05 +Nodes (42): Minimal NiceGUI surface stand-in: clipboard + navigate.to + notify., ``open_in_os`` action calls the platform opener and reports success., When the opener returns False the action surfaces a negative toast., ``copy_path`` writes the entry path to the NiceGUI clipboard., An unknown action verb is logged + toasted without raising., An entry with no path triggers the early-return toast., Force-sync routes to ``deps.nas_sync.enqueue`` with the run path., Force-sync without a wired NAS sync surfaces a negative toast (no raise). (+34 more) + +### Community 34 - "Community 34" +Cohesion: 0.07 +Nodes (31): Activate a banner from the closed Β§2.2.3 set. Raises: ValueError: w, Clear all module-level state. Test fixtures only., reset_for_tests(), show_banner(), _credential_testids(), Smoke tests that invoke the NiceGUI factory functions. The factory functions cr, Collect every ``data-testid`` in an element's subtree., Regression: the editing state must expose an inline password input. (+23 more) + +### Community 35 - "Community 35" +Cohesion: 0.05 +Nodes (43): Structural smoke tests for the PyInstaller distribution. Phase 15. The actual `, ``__version__`` mirrors ``[project] version`` in ``pyproject.toml``. Drift, ``[project.scripts]`` lists exactly the three Β§15.3 entry points., ``exlab_wizard.spec`` parses as Python source. The file is interpreted by P, The spec names each of the three Β§15.1 executables., The spec names the three entry-point script paths. PyInstaller resolves the, The spec uses PyInstaller's ``MERGE`` directive (Backend Spec Β§15.1). ``MER, The spec declares hidden imports for libs PyInstaller misses. Backend Spec (+35 more) + +### Community 36 - "Community 36" +Cohesion: 0.08 +Nodes (34): format_status(), Status-submenu rendering. Backend Spec Β§4.3.2. The tray's status submenu shows, Spawn the ticker thread. Idempotent., Signal the ticker to exit. Idempotent., Run a single tick synchronously. Returns the new label. Tests call this, Best-effort numeric read; missing / None / non-int returns 0., Immutable view over the Β§4.3.2 status inputs., Build a :class:`StatusSnapshot` from live component references. Each compon (+26 more) + +### Community 37 - "Community 37" +Cohesion: 0.07 +Nodes (40): _PydanticBody, Module-level body class so FastAPI treats ``body: _PydanticBody`` as a JSON, BaseModel, Config, Top-level ``config.yaml`` model. Mirrors Β§9 verbatim., Mutable cross-request state for the e2e harness., TestState, One row in the orchestrator's staging panel. Backend Spec Β§13.8: * ``p (+32 more) + +### Community 38 - "Community 38" +Cohesion: 0.08 +Nodes (39): _extract_readme_fields(), Copier template-engine wrapper. Backend Spec Β§4.4.2 / Β§5. This module wraps Cop, Wraps the Copier Python API behind the Β§4.4.2 contract., Render the template into ``dst`` via Copier. Args: tpl: A p, Return the set of regular files under ``root`` (recursively). Returns the e, _snapshot_files(), TemplateEngine, Unit tests for ``exlab_wizard.template.copier_driver``. These tests pin the Β§4. (+31 more) + +### Community 39 - "Community 39" +Cohesion: 0.05 +Nodes (42): 7.1.10 Cache file syncing and metadata-only retention on cleanup, 7.1.1 Component model, 7.1.2 Job lifecycle, 7.1.3 Transport drivers, 7.1.4 Hash verification, 7.1.5 Retry policy, 7.1.6 Cleanup safety interlocks, 7.1.7 Bandwidth limiting (+34 more) + +### Community 41 - "Community 41" +Cohesion: 0.09 +Nodes (39): _make_config(), _mark_synced(), Unit tests for the ``/staging`` router. Backend Spec Β§13.7, Β§13.8. The operator, Seed a run dir that carries a ``creation.json`` -- a real run., Write a fully-verified ``sync_state.json`` so the run rolls up to ``synced``., A run with no queue job and no directory clears to zeros., The bulk endpoint clears every fully-``synced`` run and reports paths., No verified rows -> empty cleared_paths, no error. (+31 more) + +### Community 42 - "Community 42" +Cohesion: 0.05 +Nodes (41): _config(), An equipment node payload pulls fields from config.equipment[id]., Asking for a node that isn't in config.equipment returns ``{}``., The project payload counts Run_* and TestRun_* directories., The run payload decodes creation.json into the metadata fields., A run dir without a creation.json yields {path, name}, not crash., Any exception raised by a per-kind builder is logged + swallowed., The relay payload pulls id+label from build_received_equipment_nodes. (+33 more) + +### Community 43 - "Community 43" +Cohesion: 0.07 +Nodes (40): _build_creation_writer(), _build_equipment_writer(), _build_keyring_store(), _build_nas_sync(), _build_plugin_host(), build_production_dependencies(), _build_quiescence_poller(), _build_session_store() (+32 more) + +### Community 44 - "Community 44" +Cohesion: 0.09 +Nodes (27): QuitCoordinator, Graceful tray shutdown coordinator. Backend Spec Β§4.3.2. Steps documented in Β§4, Return True iff the Β§4.3.2 predicate holds. ``SessionStore.active_sessi, Poll :meth:`_is_idle` up to ``deadline_seconds`` seconds. Returns True, Invoke the operator-facing force-quit prompt. Returns ``True`` to indic, Return ``int(obj.)`` defensively. Falls through ``None``, missing att, Drive the Β§4.3.2 graceful-shutdown protocol. Construction-time dependencies, Run the graceful-shutdown protocol. ``sigterm=True`` reduces the wait w (+19 more) + +### Community 45 - "Community 45" +Cohesion: 0.05 +Nodes (39): _deps(), The selected-node fields end up on MainPageState for the renderer., Without a selected node the feed isn't started and returns ``[]``., The first call mounts a FolderFeed + RefreshCoordinator on tab storage., When the feed's last_payload is set, entries are projected into FileListEntr, The fetch is a no-op when RefreshCoordinator just walked the tree., A successful scan records the refresh on the coordinator., A scan failure returns ``None`` so the feed keeps polling. (+31 more) + +### Community 47 - "Community 47" +Cohesion: 0.07 +Nodes (38): _make_clean_tree(), _make_validator(), If ``stat()`` raises OSError, the file is skipped from content scanning., If ``open(rb)`` raises OSError, the file is silently skipped., Build a single-equipment / single-project / single-run clean tree. Returns, Construct a :class:`Validator` for tests with a single equipment root., A well-formed equipment / project / run tree produces no findings., A large file with a placeholder is NOT scanned for content. (+30 more) + +### Community 48 - "Community 48" +Cohesion: 0.09 +Nodes (32): OrchestratorStagingCleanup, ``sync:`` block. NAS sync engine kill-switch + retry / quiescence policy., ``orchestrator.staging_cleanup:`` sub-block. Backend Spec Β§13.7., SyncConfig, test_orchestrator_staging_cleanup_defaults(), test_orchestrator_staging_cleanup_rejects_unknown_mode(), test_orchestrator_staging_cleanup_scheduled_requires_positive_hours(), test_sync_config_accepts_custom_quiescence_settings() (+24 more) + +### Community 49 - "Community 49" +Cohesion: 0.09 +Nodes (34): Return ``Run_`` or ``TestRun_``., run_dir_stem(), can_advance(), preview_path_segments(), primary_button_color(), primary_button_label(), New Run Wizard (Frontend Spec Β§5). Six-step wizard with mode bound at construct, Return ``True`` when the active step's preconditions hold. (+26 more) + +### Community 50 - "Community 50" +Cohesion: 0.1 +Nodes (24): AutostartManager, _import_winreg(), Create the per-platform autostart record. Idempotent., Remove the per-platform autostart record. Idempotent., Return the Linux systemd-user unit body. Backend Spec Β§15.7.1., Import ``winreg`` lazily so the module loads on macOS / Linux too. Returns, Per-platform autostart register / unregister / is_registered. Construction-, Return True iff a per-platform autostart record exists. (+16 more) + +### Community 51 - "Community 51" +Cohesion: 0.06 +Nodes (27): _drain_background(), Tests for ``exlab_wizard.ui.mount`` helpers. The ``@ui.page(...)`` decorators i, Both empty -> empty string. One present -> single param., Project names with spaces / special chars survive the round trip., Equipment / project / run / received_equipment all classify correctly., A node id whose root is not in the hierarchy returns ``(None, False)``. Gua, An unknown sys.platform falls through to False so the toast can warn., Linux dispatches to xdg-open via subprocess.Popen. (+19 more) + +### Community 52 - "Community 52" +Cohesion: 0.06 +Nodes (35): ActionSpec, A single action affordance attached to a notification. At most one action p, Unit tests for :mod:`exlab_wizard.ui.notifications`. The helpers all delegate t, ``clear_banner`` removes the active record., Frontend Β§2.2.3: max 2 banners; 3rd collapses into a count., Inline field errors round-trip through register / get / clear., Inline form errors round-trip through register / get / clear., Frontend Β§2.2.3: exactly five canonical banner ids. (+27 more) + +### Community 53 - "Community 53" +Cohesion: 0.08 +Nodes (27): _audit_loop(), AuditChannel, _diff_findings(), _drain(), _finding_to_dict(), FastAPI app + lifespan + dependency wiring. Backend Spec Β§4.6. The :func:`creat, Close every subscriber's queue. Idempotent., Yield from the subscriber queue until a sentinel arrives. (+19 more) + +### Community 54 - "Community 54" +Cohesion: 0.06 +Nodes (35): banner_overflow_count(), BannerId, clear_banner(), clear_field_error(), clear_form_errors(), ContainerId, _emit_toast(), get_field_error() (+27 more) + +### Community 55 - "Community 55" +Cohesion: 0.06 +Nodes (21): _from_must_precede_to(), OperatorsConfig, OrchestratorStagingTransport, _parse_hhmm(), PluginsConfig, Pydantic models that mirror ``config.yaml``. Backend Spec Β§9. These models are, ``readme:`` block. Lab-policy fields layered on top of the core set., ``orchestrator_staging_transport:`` -- staging hop only. Backend Spec Β§13. (+13 more) + +### Community 56 - "Community 56" +Cohesion: 0.06 +Nodes (33): Token-equality tests for :mod:`exlab_wizard.ui.design`. The tests assert each c, All shadow definitions use ``rgba(0,54,96,...)`` (DESIGN.md Β§04)., Motion tokens (DESIGN.md Β§07)., Series order is fixed (DESIGN.md absolute constraint)., Vermilion is reserved for the error / alert series (DESIGN.md Β§06)., Frontend rules (DESIGN.md): series 5 is OI_BLUE but only after 4 prior series., Primary palette hexes are verbatim from DESIGN.md Β§01., Badge text variants are the documented darkened hexes (DESIGN.md Β§05). (+25 more) + +### Community 57 - "Community 57" +Cohesion: 0.08 +Nodes (34): _build_creation_json_dict(), A ``Run_*`` leaf whose creation.json says ``run_kind="test"`` is flagged., Synced run + hard finding -> ``synced_under_prior_policy=True``., ``query_problems`` returns the same list as ``audit``., ``{"kind": "equipment_id", ...}`` walks only the matching subtree., ``{"kind": "project_path", ...}`` walks the supplied path only., ``{"kind": "all"}`` aggregates findings across every equipment root., Build the wire-form ``creation.json`` dict for a fixture tree. (+26 more) + +### Community 58 - "Community 58" +Cohesion: 0.07 +Nodes (22): Integration test: tray <-> window lifecycle round-trip. Backend Spec Β§4.3.2. Th, Poll ``/api/v1/health`` until the server is accepting requests., test_tray_lifecycle_round_trip(), test_tray_lifecycle_window_handshake_reads_server_json(), _wait_for_health(), Integration smoke: pywebview-facing root path returns HTML, not JSON 404. This, test_root_serves_html_after_mount(), _wait_for() (+14 more) + +### Community 59 - "Community 59" +Cohesion: 0.09 +Nodes (24): FileChange, A single mutation a plugin would make. Used by ``describe_changes``. Backen, _make_ctx(), _MinimalPlugin, Tests for ``exlab_wizard.plugins.base`` -- the plugin contract base class. Pin, A subclass with both abstract methods implemented is instantiable., An empty string is treated as a missing value (per spec: 'missing or empty')., The plugins package re-exports the same class object as ``errors``. (+16 more) + +### Community 60 - "Community 60" +Cohesion: 0.08 +Nodes (31): _build_minimal_payload(), Tests for the atomic ``creation.json`` writer in ``exlab_wizard.cache.creation_w, Even if the caller hands us an old version, the writer pins to current., Forward-compat: a v0.7 writer must not drop fields a v0.8 writer added., Two simultaneous mutators on the same path must serialize. This is a small-, Multiple LOCK_SH readers must not block each other., A non-MAJOR.MINOR string must surface as the same structured error rather th, Spec Β§11.3 history: a 1.0 file predates ``run_kind``, ``validation_overrides (+23 more) + +### Community 61 - "Community 61" +Cohesion: 0.06 +Nodes (33): 11.1 Folder Placement, 11.2 File Inventory per Level, 11.3 `creation.json` Schema, 11.4.1 `equipment.json` Schema, 11.4.2 `test_runs.json` Schema, 11.4.3 `runs.json` Schema, 11.4 `readme_fields.json` Schema, 11.5.1 Log Levels, Rotation, and the Central App Log (+25 more) + +### Community 62 - "Community 62" +Cohesion: 0.07 +Nodes (33): _app_name(), _env_path(), _home(), os_cache_path(), os_config_path(), _platform(), Return a normalized platform tag for OS-conditional path dispatch., Return the operator's home directory. Centralized so test fixtures can monk (+25 more) + +### Community 64 - "Community 64" +Cohesion: 0.08 +Nodes (23): create_prod_app_factory(), uvicorn ``--factory`` entrypoint for the *production* wizard app. ``_test_app.p, Build the production wizard app (NiceGUI mounted at ``/``)., _build_default_app(), _build_default_components(), main(), ``exlab-wizard-tray`` console_scripts entry point. Backend Spec Β§4.3.2. Wires t, Return the production FastAPI app for the tray. Constructs the live :class: (+15 more) + +### Community 65 - "Community 65" +Cohesion: 0.09 +Nodes (24): _python_window_argv(), Tests for :mod:`exlab_wizard.tray.window_launcher`. Backend Spec Β§4.3.2., Default constructor with no override delegates to the resolver., Return an argv that runs a tiny window stand-in (a sleep)., test_argv_falls_through_resolve_helper(), test_close_is_idempotent(), test_close_kills_unresponsive_process(), test_close_terminates_subprocess() (+16 more) + +### Community 66 - "Community 66" +Cohesion: 0.13 +Nodes (29): PluginHost, Spawns plugin worker subprocesses with strict isolation. Backend Spec Β§6.3, _ctx(), _make_dst_with_txt(), Integration tests for :class:`PluginHost`. Backend Spec Β§6.3. Each test spawns, Default ``on_input_required`` callback for tests that don't expect a prompt., Backend Spec Β§6.5: the canonical hello-world plugin appends ``hello\\n``., Backend Spec Β§6.3.4: the host must SIGTERM/SIGKILL on wall-clock timeout. (+21 more) + +### Community 67 - "Community 67" +Cohesion: 0.06 +Nodes (11): E2E flow 08: Settings dialog round-trip + persistence. Frontend Spec Β§6.7 (sett, The LIMS credential field's full lifecycle: set -> replace -> clear (Β§7.4.1)., Cancelling the credential editor collapses the row without saving., test_flow_08_lims_password_cancel_discards_edit(), test_flow_08_lims_password_credential(), test_flow_08_settings(), Page object for the Settings dialog. Frontend Spec Β§6.7., Locators for the settings dialog's nine-section layout. (+3 more) + +### Community 68 - "Community 68" +Cohesion: 0.06 +Nodes (17): Tests for ``exlab_wizard.sync.queue``. Covers the durable SQLite-backed sync-jo, A queue rebuilt against the same db file sees the prior rows., A RUNNING row from a prior process is downgraded to QUEUED on restart., Operations without init() raise a clear RuntimeError., ``insert`` produces a QUEUED row with a generated UUID job id., Two inserts on the same run_path violate UNIQUE., The per-file ``files`` list round-trips through insert and read., A job inserted without ``files`` reads back as the empty 'whole run' tuple. (+9 more) + +### Community 69 - "Community 69" +Cohesion: 0.08 +Nodes (21): PluginLogFrame, Worker-side forwarder. Emits JSON frames on stderr. Used inside the plugin, Wire format for worker-side log records. The worker subprocess emits one ``, WorkerPluginLogger, Tests for ``exlab_wizard.plugins.logger`` -- structured plugin log shim. Pin bo, Without an explicit stream, the worker writes to ``sys.stderr``., Structured ``**fields`` arrive on the LogRecord as ``record.context``., Construction without ``name`` falls back to ``exlab_wizard.plugins``. (+13 more) + +### Community 70 - "Community 70" +Cohesion: 0.11 +Nodes (31): build_nodes(), build_tree(), _ctx_emit(), EquipmentNode, filter_project(), filter_run(), _matches_search(), ProjectNode (+23 more) + +### Community 71 - "Community 71" +Cohesion: 0.07 +Nodes (18): FolderFeed, FolderFeedState, Folder-feed client abstraction. GUI/Orchestrator Redesign Β§5. A small ``start(p, In-memory state of one folder feed (one per centre pane)., One folder feed; rebound to a different path via ``start()``., Start polling ``path``. Switching paths stops the previous poll before s, Pause polling β€” used when the window is backgrounded., Resume polling after a pause. (+10 more) + +### Community 72 - "Community 72" +Cohesion: 0.09 +Nodes (31): _make_finding(), Unit tests for ``exlab_wizard.validator.findings``. The :class:`Finding` datacl, Optional fields default if missing from the payload., Unknown keys in a future-minor payload are not lethal., ``matched_token`` of ``None`` survives the round-trip as ``None``., Two findings with identical field values collapse in a set., Different field values produce distinct set entries., Findings sort lexicographically when keyed by their dict shape. (+23 more) + +### Community 73 - "Community 73" +Cohesion: 0.12 +Nodes (29): BandwidthWindow, One ``{days, from, to}`` window. Backend Spec Β§9., effective_bandwidth_limit_kibps(), is_window_active(), mbps_to_kibps(), _parse_hhmm(), Bandwidth schedule evaluator. Backend Spec Β§7.1.7. The Β§7.1.7 bandwidth limiter, Convert ``upload_mbps`` (megabits/s) into ``--bwlimit`` KiB/s. Per Β§7.1.7: (+21 more) + +### Community 74 - "Community 74" +Cohesion: 0.11 +Nodes (25): keyring_nas_username(), OS-keyring service/username conventions used for credential storage. The wizard, Return the keyring username for the given equipment's NAS credential. Equip, _check_nas_passwords_present(), _nas_keyring_password(), Return the stored NAS password for ``equipment_id`` or ``None``. The creden, Return the set of nas-mode equipment ids that have a keyring entry. Rclone-, _InMemoryKeyring (+17 more) + +### Community 75 - "Community 75" +Cohesion: 0.14 +Nodes (28): _build_config(), _make_creation(), _populate_run(), End-to-end integration tests for the NAS sync subsystem (Phase 10). These tests, Poll ``queue.get_by_id`` until ``state`` is in ``targets`` or timeout., Enqueue -> RUNNING -> AWAITING_VERIFY -> VERIFIED -> CLEANED. Uses the Pyth, A run path with ```` is gated; sync_status -> blocked_by_validation., The stub returns ``auth_error`` -> queue row terminates FAILED. (+20 more) + +### Community 76 - "Community 76" +Cohesion: 0.09 +Nodes (18): LIMSClient, _project_from_row(), Read-only LIMS client (Mapping B). Backend Spec Β§7.2. The client wraps an :clas, ``GET /api/v1/projects``; returns one LIMSProject per row. ``status_fil, ``GET /api/v1/projects/``; returns None on 404. ``uid_or_short_id``, ``GET /api/v1/me``; returns the current operator's row., Return a ``HealthStatus`` snapshot. Backend Spec Β§7.2.3. Calls ``GET /a, Close the underlying ``httpx.AsyncClient``. Idempotent. (+10 more) + +### Community 77 - "Community 77" +Cohesion: 0.11 +Nodes (28): can_advance(), disk_space_pre_flight_message(), preview_step_clear(), ProjectWizardState, New Project Wizard (Frontend Spec Β§4). Seven steps in a ``ui.stepper``: 1. LIM, Pre-flight checks for the Preview step (Frontend Β§10.5.4)., Return a copy-ready message when disk space is low; else ``None``., Render the seven-step project wizard. ``templates`` is the list of project- (+20 more) + +### Community 78 - "Community 78" +Cohesion: 0.08 +Nodes (29): _lims_slot_satisfied(), _missing_lims_fields(), _missing_nas_fields(), _missing_orchestrator_fields(), _missing_paths_fields(), _nas_slot_satisfied(), _orchestrator_identity_complete(), _password_required_equipment() (+21 more) + +### Community 79 - "Community 79" +Cohesion: 0.08 +Nodes (25): _FakeController, _NavSpy, Duck-typed CreationController for the create-flow helpers., Minimal stand-in for the NiceGUI ``ui`` object's navigate surface., A successful save persists, then hot-reloads the live components. The old b, Opt-in: a saved non-empty staging_root is created on save., Blank staging_root creates nothing -- the device is not a staging PC., An ensure_dir failure warns but keeps the persisted config. (+17 more) + +### Community 80 - "Community 80" +Cohesion: 0.09 +Nodes (28): app_with_real_controller(), _build_minimal_controller(), _client(), Full-flow integration test for the FastAPI surface. Drives one project-creation, End-to-end: POST /sessions -> session reaches DONE -> creation.json on disk., Each non-soft INCOMPLETE_* state surfaces the right next_action., POST /sessions returns 503 + setup_incomplete in non-soft INCOMPLETE_* states., The soft block does not gate POST /sessions per Β§4.9.4. (+20 more) + +### Community 81 - "Community 81" +Cohesion: 0.09 +Nodes (25): build_icon(), default_icon_image(), _import_pystray(), pystray icon construction. Backend Spec Β§4.3.2. The tray icon's menu has three, Invoke a menu callback; log + swallow exceptions. The pystray menu handler, Return a small PIL.Image used as the tray icon bitmap. Imported lazily so t, Build the pystray icon with the Β§4.1 menu. ``status_provider`` is invoked e, Lazy import so unit tests on headless hosts can mock pystray. (+17 more) + +### Community 82 - "Community 82" +Cohesion: 0.07 +Nodes (29): 10. Error handling, 11. Testing strategy, 12. Future (v1.x), 1. Summary, 2. Goals & non-goals, 3.1 Always-orchestrator, 3.2 Per-equipment sync role, 3.3 Owned vs. received equipment (+21 more) + +### Community 83 - "Community 83" +Cohesion: 0.11 +Nodes (28): canonicalize_equipment_id(), compose_project_path(), Validate ``value`` against the Β§3.1 equipment-ID regex. Returns ``value`` u, Compose the project-level directory. ``////.exlab-wizard/wizard..log``., Append-mode log file with platform-appropriate share / append flags. The wr, Append ``line`` (already newline-terminated) to the file. (+5 more) + +### Community 124 - "Community 124" +Cohesion: 0.09 +Nodes (22): 1. Purpose and Scope, 2. Mandatory Core Fields (Creation Gate), 2. User Interaction, 3.1 Create a New Project, 3.2 Create a New Experimental Run, 3.3 Create a New Test Run, 3.4 Browse Existing Equipment, Projects, and Runs, 3.5 Author a README at Creation Time (+14 more) + +### Community 125 - "Community 125" +Cohesion: 0.21 +Nodes (20): AppDependencies, Bundle of live components the API surface dispatches to. Production wiring, Unit tests for ``exlab_wizard.api.setup`` (gate + endpoints)., Equipment with a password-requiring transport but no keyring entry gates., _ready_config(), test_compute_setup_state_no_config(), test_compute_setup_state_returns_incomplete_no_nas_credential(), test_compute_setup_state_returns_ready_for_complete_config() (+12 more) + +### Community 126 - "Community 126" +Cohesion: 0.13 +Nodes (21): _goto(), E2E flow 25: production /main is wired to the redesigned renderer. This suite e, Clicking a breadcrumb segment routes back through /main?selected=. The brea, Clicking the right-pane toggle flips ?right_pane=collapsed in the URL., Owned-equipment Edit menu navigates to /settings with the equipment id. Rou, Selecting a TEST_RELAY_* node disables the New Project/Run/Test-Run buttons., The footer Clear-verified button is wired to a callback. Asserts the button, Navigate to ``url`` with one retry on transient NiceGUI failures. (+13 more) + +### Community 127 - "Community 127" +Cohesion: 0.09 +Nodes (8): E2E flow 03: Experimental-run wizard end-to-end. Frontend Spec Β§6.4 (run wizard, test_flow_03_experimental_run(), E2E flow 04: Test-run wizard end-to-end. Frontend Spec Β§6.4 (run wizard, test m, test_flow_04_test_run(), Page object for the New Run Wizard. Frontend Spec Β§6.4., Locators for the run wizard (experimental + test mode)., Locator for a specific step container., WizardRunPage + +### Community 128 - "Community 128" +Cohesion: 0.13 +Nodes (19): _build_context(), _decode_files(), _load_plugin_class(), main(), Plugin worker entry point. Backend Spec Β§6.3.1, Β§6.3.2. Invoked as ``python -m, Materialize a :class:`PluginContext` from the stdin envelope. Returns the c, Import the plugin module and return the exported ``Plugin`` symbol. The hos, Execute the plugin's transform lifecycle against ``files``. The lifecycle i (+11 more) + +### Community 129 - "Community 129" +Cohesion: 0.12 +Nodes (21): class_chip_definitions(), empty_state_text(), filter_findings(), Finding, near_limit(), ProblemsPageState, Problems tab (Frontend Spec Β§11). Filter chips (Severity, Class, State, Scope),, Filter ``findings`` against the active chip / search state. (+13 more) + +### Community 130 - "Community 130" +Cohesion: 0.15 +Nodes (21): diff_file_lists(), FileListEntry, One row in the centre-pane file list. ``keep_local`` mirrors the file's ``s, Return additions / removals / modifications between two snapshots. Pure fun, _entry(), Unit tests for ``ui/components/file_list``. Redesign Β§4.3, Β§5., ``FILE_CONTEXT_KEEP_LOCAL`` is a distinct discriminator value., The renderer wires the keep-local menu item and tombstone row. Exercises th (+13 more) + +### Community 131 - "Community 131" +Cohesion: 0.09 +Nodes (21): ExLab-Wizard β€” Remaining Work: Tracked Tasks, How to use this tracker, Phase 1 β€” Release-blocking correctness, Phase 2 β€” Session-control epic (build in order; they compound), Phase 3 β€” Visibility & usability, Phase 4 β€” Cleanups (anytime), Progress, Shared foundations (build once, reused across tasks) (+13 more) + +### Community 132 - "Community 132" +Cohesion: 0.09 +Nodes (21): 1. Summary, 2. Goals & non-goals, 3.1 Setup-state gate β€” `paths.py`, 3.2 Suggestion helper β€” `paths.py`, 3.3 Settings UI β€” `ui/pages/settings.py`, 3.4 Create-on-save β€” `ui/mount.py` `_persist_config`, 3.5 Verified, not modified, 3.6 Test mode β€” unchanged (+13 more) + +### Community 133 - "Community 133" +Cohesion: 0.13 +Nodes (8): KeyringUnavailableError, Raised when no OS keyring backend is reachable and fallback is exhausted. Backen, _decode_envelope(), OS keyring storage with encrypted-at-rest fallback. Backend Spec Β§7.4. Two back, Look up the secret for ``(KEYRING_SERVICE, username)``. Returns ``None`, Persist ``password`` under ``(KEYRING_SERVICE, username)``. On a keyrin, Remove the secret stored under ``(KEYRING_SERVICE, username)``. Missing, Best-effort probe of the OS keyring backend. Implemented as a round-tri + +### Community 134 - "Community 134" +Cohesion: 0.11 +Nodes (13): FileSnapshot, _matches_any_glob(), NASSyncLike, Operator-free, per-file quiescence-driven NAS sync poller. Operator-free per-fi, Run one discovery + quiescence + enqueue sweep. ``now_monotonic`` is in, Return every non-ignored file under ``run_path``. Skips the ``.exlab-wi, Return the run-relative paths of quiet files needing a (re-)sync. A qui, Return True if ``name`` matches any glob in ``globs``. (+5 more) + +### Community 135 - "Community 135" +Cohesion: 0.12 +Nodes (20): Return True when ``transport`` sources its credential from the keyring. Bot, transport_requires_keyring_password(), Minimal valid rclone_sftp transport block., Minimal valid rclone_smb transport block., _sftp_transport_dict(), _smb_transport_dict(), test_distinct_equipment_ids_accepted(), test_equipment_transport_discriminates_on_type_smb() (+12 more) + +### Community 138 - "Community 138" +Cohesion: 0.15 +Nodes (17): _file_names_in_run(), is_eligible(), Pre-Sync Gate. Backend Spec Β§7.3. The Pre-Sync Gate is the contract by which va, Return the bare file names directly under ``run_path``. The Pre-Sync Gate i, Evaluate the Β§7.3 eligibility rule for a run. Returns ``(True, [])`` iff th, _build_creation(), Tests for ``exlab_wizard.sync.pre_sync_gate``. Backend Spec Β§7.3. The Pre-Sync, An override that has been revoked does NOT unblock sync. (+9 more) + +### Community 139 - "Community 139" +Cohesion: 0.1 +Nodes (19): Cleanup β€” rollup, code:block1 ({), Components touched, Config changes (`config/models.py`), Context, Failure handling, Goals, GUI per-file display state (+11 more) + +### Community 140 - "Community 140" +Cohesion: 0.1 +Nodes (20): 7.10 Validator section, 7.11 Logging section, 7.12 Orchestrator Mode section, 7.13 Application section, 7.14 Setup-incomplete state, 7.1 Modality, 7.2 Layout β€” sidebar navigation, 7.3 Save and Discard model (+12 more) + +### Community 141 - "Community 141" +Cohesion: 0.11 +Nodes (19): _by_rule(), A project directory with no ``creation.json`` produces one orphan finding., A run directory with no ``creation.json`` produces one orphan finding., A project directory whose name is not a safe path segment (Β§3.2) produces a, A human-readable project name (spaces and all) is a safe segment., A directory name containing ```` produces a finding., An active override with matching ``problem_class`` flips ``override_active``., Cleaned run + hard finding -> ``synced_under_prior_policy=True``. A ``clean (+11 more) + +### Community 142 - "Community 142" +Cohesion: 0.11 +Nodes (6): E2E flow 02: Project wizard 7-step happy path. Frontend Spec Β§6.3 (project wiza, test_flow_02_project_wizard(), Page object for the New Project Wizard. Frontend Spec Β§6.3., Locators for the new-project wizard's seven-step stepper., Locator for a specific step container., WizardProjectPage + +### Community 143 - "Community 143" +Cohesion: 0.16 +Nodes (11): _decode_locked(), _empty_state(), _ensure_cache_dir(), Orchestrator-only writer for ``sync_state.json``. Operator-free per-file NAS sy, Blocking variant of :meth:`mark_cleared` for synchronous callers. Used, Return the ``sync_state.json`` path under a run directory., Create ``path``'s parent (the run's ``.exlab-wizard/`` cache) dir. Neither, Return a fresh, file-less :class:`SyncStateJson` at the current version. (+3 more) + +### Community 144 - "Community 144" +Cohesion: 0.11 +Nodes (18): 10. README Generation, 11. `.exlab-wizard` Cache Folders, 12. Orchestrator Mode (Multi-Equipment Workstations), 13. Equipment-to-Orchestrator Data Flow, 14. Open Questions, 15. Distribution and Installation, 16. Logging Architecture, 1. Purpose and Goals (+10 more) + +### Community 145 - "Community 145" +Cohesion: 0.11 +Nodes (18): 15.1 Build Pipeline (PyInstaller), 15.2.1 Offline-machine specifics, 15.2 Code Signing Posture, 15.3.1 `ExLab-Wizard-Tray` (long-lived, autostart target), 15.3.2 `ExLab-Wizard-Window` (on-demand), 15.3.3 `ExLab-Wizard` (CLI alias / desktop-launcher target), 15.3.4 Linux fallback (no system tray), 15.3 Launcher Behavior (+10 more) + +### Community 146 - "Community 146" +Cohesion: 0.11 +Nodes (18): Construct a fully READY Config (paths + equipment + LIMS endpoint+email). R, endpoint+email present but keyring lacks the password -> INCOMPLETE_NO_LIMS., Nas-mode equipment without its keyring entry gates with the new state., A configured LIMS does not mask the missing NAS credential., Adding the keyring entry advances the state to the next gate., The missing list names each equipment id whose keyring entry is absent., Soft block: surfaces a banner, not a missing-field list., _ready_config() (+10 more) + +### Community 147 - "Community 147" +Cohesion: 0.11 +Nodes (9): Unit tests for :mod:`exlab_wizard.ui.theme`. The theme module renders the ``:ro, A body / heading / mono reset block follows the ``:root {}``., In source layout, the resolver returns ``/assets/``., All shadows are navy-tinted (DESIGN.md Β§04)., The block opens with ``:root {`` per DESIGN.md Β§07., test_resolve_assets_dir_points_at_repo_assets_in_source_layout(), test_root_css_includes_body_resets(), test_root_css_navy_tinted_shadows() (+1 more) + +### Community 148 - "Community 148" +Cohesion: 0.18 +Nodes (15): _FakeUvicornServer, _make_runner(), Tests for :mod:`exlab_wizard.tray.server_runner`. Backend Spec Β§4.3.2., A custom server object missing ``should_exit`` is tolerated., Fake :class:`uvicorn.Server` that runs a tiny event loop., test_double_start_raises(), test_is_running_tracks_thread_lifecycle(), test_port_property_after_start() (+7 more) + +### Community 149 - "Community 149" +Cohesion: 0.11 +Nodes (10): hello_plugin -- canonical scaffold from Backend Spec Β§6.5. The ``Plugin`` re-ex, HelloPlugin, hello_plugin -- minimal real plugin used by the host integration suite. Backend, Append ``hello\\n`` to every ``.txt`` file the host hands us., Plugin, test_plugin_abc_cannot_be_instantiated_directly(), policy_violation_plugin -- writes to a forbidden path (Backend Spec Β§6.1.5)., PolicyViolationPlugin (+2 more) + +### Community 150 - "Community 150" +Cohesion: 0.16 +Nodes (17): MetadataPaneState, Mutable state for the metadata pane., chip_state_to_tree_filters(), _default_chips(), MainPageState, problems_badge_text(), Main window (Frontend Spec Β§3). Layout: * **Left drawer** -- search box + filt, Banner content for the setup-incomplete state (Β§3.1.4). ``next_action`` is (+9 more) + +### Community 151 - "Community 151" +Cohesion: 0.18 +Nodes (17): _build_equipment_node(), build_hierarchy_dict(), build_received_equipment_nodes(), EquipmentNode, ProjectNode, _projects_for_ui_tree(), ``/tree`` and ``/run/{path}`` browse endpoints. Backend Spec Β§4.6.1. Two endpoi, A received-equipment node auto-discovered from the staging area. Redesign Β§ (+9 more) + +### Community 152 - "Community 152" +Cohesion: 0.14 +Nodes (17): ChipDefinition, ChipState, filter_chips(), initial_state(), is_active(), list_active(), Filter-chip strip component (Frontend Spec Β§3.5.4, Β§11.1). A row of toggleable, One chip in a chip group. (+9 more) + +### Community 153 - "Community 153" +Cohesion: 0.18 +Nodes (16): _fill(), _goto(), _pick_radio(), _project_next(), E2E flow 00b: the full create-lifecycle against the PRODUCTION app. Boots the g, Click a stepper-navigation button scoped to its step container. The Next /, Advance the project wizard from ``step_id`` via its Next button., Advance the run wizard from ``step_id`` via its Next button. (+8 more) + +### Community 154 - "Community 154" +Cohesion: 0.24 +Nodes (16): _goto(), _open_context(), E2E flow 24: right-click context menus (Redesign Β§4.6 / decision 4A / Β§9.1). Th, An "On NAS" tombstone row has no local copy, so no Open-in-OS action. Opera, A keep-local file shows the "kept local" badge; the toggle action fires. Op, Open a NiceGUI ``ui.context_menu`` by right-clicking its anchor., Decision 3: received-equipment nodes don't expose edit / remove., Right-clicking a file-list row surfaces Open in OS / Copy path / Keep local. (+8 more) + +### Community 155 - "Community 155" +Cohesion: 0.12 +Nodes (8): E2E flow 09: Orchestrator staging panel + quiescence-sync trigger. Frontend Spe, test_flow_09_orchestrator(), Page object for the orchestrator staging dock. Frontend Spec Β§3.9., Locators for the staging dock + per-row actions., The Force-sync button on the Nth row., The Clear button on the Nth row., The View-log button on the Nth row., StagingPage + +### Community 156 - "Community 156" +Cohesion: 0.15 +Nodes (17): _apply_live_config(), _cancel_operation(), _cancel_session(), _ensure_staging_root(), _open_operation_details(), _open_operations_modal(), _persist_config(), Open the in-flight Operations panel (Frontend Β§9.5). Builds a fresh snapsho (+9 more) + +### Community 157 - "Community 157" +Cohesion: 0.14 +Nodes (17): _await_session(), _equipment_ids(), Return the configured templates directory, or ``None``., List template directory names of ``template_type`` under templates_dir., Map each ``template_type`` template name to its parsed copier questions. Re, Return the configured equipment IDs., Await a controller session's pipeline task and return the final handle. ``c, Build a ProjectCreateRequest from the wizard state and run it. (+9 more) + +### Community 158 - "Community 158" +Cohesion: 0.15 +Nodes (11): _apply_migration_defaults(), _is_future(), _merge_unknown_fields(), _payload_to_dict(), Atomic reader/writer for ``creation.json``. Backend Spec Β§4.4.5. All ``creation, Return True if ``expires_at`` (UTC ISO-8601) is strictly after ``now``. The, Apply Β§11.3 history-table defaults for fields missing on old minors. Return, Load the file as a raw ``dict`` (no Struct conversion yet). We need the (+3 more) + +### Community 159 - "Community 159" +Cohesion: 0.15 +Nodes (15): Shared asyncio subprocess helper for transport drivers. Backend Spec Β§7.1.3. Th, Launch ``cmd`` and return ``(returncode, stdout, stderr)`` as text. ``env``, run_subprocess(), Unit tests for ``exlab_wizard.sync.transports._run.run_subprocess``. The rclone, An env-dict entry must surface in the child process' environment., Caller-supplied env is *merged* over ``os.environ`` -- it does not replace it., A bytes payload is fed to stdin and closed., ``mask_for_log`` redacts the listed env keys from the debug log line. (+7 more) + +### Community 160 - "Community 160" +Cohesion: 0.28 +Nodes (16): _make_handler(), _make_record(), Tests for ``exlab_wizard.logging.handlers``. Backend Spec Β§16.2.4 commits the e, The ``Exception`` branch in :meth:`emit` is the stdlib handler-error contrac, Construct a handler with a deterministic hostname for test paths., test_close_drains_cached_files(), test_close_is_idempotent(), test_emit_routes_unexpected_exception_through_handle_error() (+8 more) + +### Community 161 - "Community 161" +Cohesion: 0.17 +Nodes (15): get_run_context(), Per-task structured-tag context vars for the logging system. Backend Spec Β§16.2., Return a snapshot of the active context as a plain ``dict``. Used by the fo, Push the supplied context vars on entry and reset them on exit. Vars whose, set_run_context(), Tests for ``exlab_wizard.logging.context``. Backend Spec Β§16.2.3 commits the pe, Two ``asyncio.gather``-ed tasks must not see each other's context. This is, test_concurrent_asyncio_tasks_have_independent_contexts() (+7 more) + +### Community 162 - "Community 162" +Cohesion: 0.12 +Nodes (16): compose_run_path(), Compose the absolute on-disk path for a new run. Paths follow Backend Spec, The leaf is ISO 8601 with colons replaced by hyphens. Β§3.1. Redesign Β§3.4:, Redesign Β§3.4: experimental runs live under /Runs/Run_*., Redesign Β§3.4: two runs in the same minute resolve to the same path (Copier, A non-str project_name hits the isinstance guard., An empty-string project_name also hits the same guard., test_compose_run_path_experimental() (+8 more) + +### Community 163 - "Community 163" +Cohesion: 0.12 +Nodes (16): _parse_argv(), Parse the tray's CLI arguments. The tray accepts: - ``--version`` -- p, No flags -> ``smoke`` is False, ``no_autostart_prompt`` is False., ``--smoke`` sets the smoke flag., ``--no-autostart-prompt`` is silently accepted (reserved)., ``--version`` sets the version flag., No flags -> both test-mode flags are False., ``--add-test-samples`` alone must be rejected via parser.error (exit 2). (+8 more) + +### Community 165 - "Community 165" +Cohesion: 0.13 +Nodes (12): _goto(), E2E flow 01: First-launch onboarding. Frontend Spec Β§6.1 (welcome card + autost, Navigate to a NiceGUI page, tolerating a transient ERR_ABORTED. NiceGUI's c, test_flow_01_onboarding(), E2E flow 05: Browse view -- open existing project + sessions. Frontend Spec Β§6., E2E flow 05b: per-run sync icons in the browse tree. Verifies that the project, The ``/assets`` mount serves both SVGs as 200 OK., test_flow_05_sync_icons_render_in_tree() (+4 more) + +### Community 166 - "Community 166" +Cohesion: 0.14 +Nodes (14): bind_global_shortcuts(), combo_for_current_os(), is_macos(), Keyboard-shortcut registry (Frontend Spec Β§3.7). The bindings are intentionally, Return ``True`` when running on macOS (used for combo selection)., Resolve the :class:`KeyCombo` for the current OS., Find the shortcut id matching the given key event, if any., Install a NiceGUI keyboard listener for the registry. NiceGUI is imported l (+6 more) + +### Community 167 - "Community 167" +Cohesion: 0.17 +Nodes (15): begin_edit(), cancel_edit(), clear_credential(), commit_edit(), credential_field(), credential_props(), CredentialState, Credential field component (Frontend Spec Β§7.4.1). Three resting / transient st (+7 more) + +### Community 168 - "Community 168" +Cohesion: 0.16 +Nodes (15): excerpt_line(), FindingExcerpt, header_line(), overflow_line(), override_line(), Validation summary block (Frontend Spec Β§3.6.4, Β§11.4.1). Renders the per-run v, A single finding row used in the summary., Inputs to the summary block. (+7 more) + +### Community 169 - "Community 169" +Cohesion: 0.19 +Nodes (14): Parse the operator-answerable questions out of a ``copier.yml`` body. Handl, template_questions(), build_equipment_config(), Shared assembler for an :class:`EquipmentConfig` from raw form fields. GUI/Orch, Assemble a validated :class:`EquipmentConfig` from raw form fields. Redesig, _equipment_kwargs(), Unit tests for the frontend-polish helpers. Covers the pure logic behind the th, test_build_equipment_rejects_bad_id() (+6 more) + +### Community 170 - "Community 170" +Cohesion: 0.13 +Nodes (12): _detect_platform(), platform(), Per-platform autostart registration. Backend Spec Β§4.3.2 + Β§15.7. Registers ``E, Return the macOS LaunchAgent plist body. Backend Spec Β§15.7.1., Return the XDG ``.desktop`` autostart body. Backend Spec Β§15.7.1., _render_desktop_file(), _render_plist(), _silently_unlink() (+4 more) + +### Community 171 - "Community 171" +Cohesion: 0.13 +Nodes (13): Exception, test_obscure_missing_binary_raises_auth(), test_obscure_returns_stdout_stripped(), Sync transports package. Backend Spec Β§7.1.3. Each transport is a thin async wr, Kind of failure that the queue worker uses to drive the retry policy. Backe, Outcome of a transport push. ``ok`` is True iff the transport reported succ, Raised when a transport probe cannot complete. Distinct from :class:`Transp, TransportError (+5 more) + +### Community 172 - "Community 172" +Cohesion: 0.12 +Nodes (16): 2.1.1 The `design.py` module, 2.1.2 What lives in DESIGN.md vs in this spec, 2.1.3 ExLab-Wizard typography overrides, 2.1.4 Warning-tier color (resolves OQ #3), 2.1.5 CSS styling reference rule, 2.1.6 DESIGN.md absolute constraints (binding), 2.1 Visual tokens and the design system, 2.2.1 Pattern selection rule (+8 more) + +### Community 173 - "Community 173" +Cohesion: 0.12 +Nodes (15): 10.1 When It Runs, 10.2 Field Sources (Merged Layers), 10.3 Field Types, 10.4 User-Added Custom Fields, 10.5 Pre-fill Behavior, 10.6 Auto-Filled System Fields, 10.7.1 Machine Query Examples, 10.7.2 Prose Body (+7 more) + +### Community 174 - "Community 174" +Cohesion: 0.17 +Nodes (14): _load(), Contract test against vendored upstream `mcnaughtonadm/exlab` snapshots. Loads, Every required snapshot exists; guards against accidental deletion., ``GET /api/v1/me`` JSON must satisfy the ``LIMSUser`` schema., Upstream's login body is the same ``safe_user`` shape as ``/me``., ``GET /api/v1/projects`` payload must yield ``LIMSProject`` rows. Mirrors t, An empty ``data`` array must yield zero rows, not raise., ``GET /api/v1/projects/{id}`` returns one bare project object. (+6 more) + +### Community 175 - "Community 175" +Cohesion: 0.18 +Nodes (12): config_path(), free_port(), prod_app_env(), Reusable spawn/restart harness for the *production* wizard app. The e2e lifecyc, Return a free TCP port on 127.0.0.1., Build a hermetic environment for a spawned production-app process. Every OS, Where the spawned production app writes ``config.yaml``. Computed by callin, resolve_config_path() (+4 more) + +### Community 176 - "Community 176" +Cohesion: 0.22 +Nodes (13): _goto(), E2E flow 16: Add-Equipment wizard (Redesign Β§6). Drives the four-step wizard en, Identity step renders the ID + label inputs., Paths step renders local + NAS root inputs., Sync mode step renders the nas/stage radio., Review step renders Confirm; clicking it fires the success label., An empty wizard: Next stays disabled until the identity step is valid, then, test_flow_16_add_equipment_identity_step() (+5 more) + +### Community 177 - "Community 177" +Cohesion: 0.2 +Nodes (13): BreadcrumbSegment, Breadcrumb bar for the rebuilt main window. GUI/Orchestrator Redesign Β§4.1 / Β§4, One clickable segment in the breadcrumb bar., Decompose a tree-node id into clickable segments. Tree ids are slash-joined, Render the breadcrumb row. Pure render function. Each segment is a clickabl, render_breadcrumb(), segments_from_node_id(), Unit tests for ``ui/components/breadcrumb``. Redesign Β§4.7 / decision 7A. (+5 more) + +### Community 178 - "Community 178" +Cohesion: 0.13 +Nodes (14): Building a distributable binary, code:bash (git clone https://github.com/exfab/ExLabWizard.git), code:bash (uv run exlab-wizard-tray # or: source .venv/bin/activate), code:bash (./scripts/build_local.sh # macOS / Linux), code:bash (uv run pytest tests/unit tests/integration # fast suite), Context, Documentation, ExLabWizard (+6 more) + +### Community 179 - "Community 179" +Cohesion: 0.13 +Nodes (14): 12.1 Template Variable Form (from `copier.yml` questions), 12.2 README Form Fields, 12.3 Required-Field Indication, 12. Widget Mappings, 13. Open Questions, 1. Purpose and Scope, 4.1 LIMS Picker Behavior, 4. New Project Wizard (+6 more) + +### Community 180 - "Community 180" +Cohesion: 0.13 +Nodes (14): 5.0 Template Locations (Global and Per-Equipment), 5.1 Template Structure, 5.2 Copier Manifest (`copier.yml`), 5.3 Copier Python API Integration, 5.4 Copier Answers File (`.exlab-answers.yml`), 5.5 Plugin Pass (Post-Render, Controller-Driven), 5.6 Jinja2 Templating in File Contents, 5.7 Template Versioning (+6 more) + +### Community 181 - "Community 181" +Cohesion: 0.15 +Nodes (14): ensure_dir(), ensure_state_dir(), os_state_path(), Return the OS-appropriate state directory. Backend Spec Β§15.7., ``mkdir -p`` the given path; return it. Idempotent., ``ensure_dir(os_state_path())``., test_ensure_dir_creates_missing(), test_ensure_dir_idempotent_when_exists() (+6 more) + +### Community 182 - "Community 182" +Cohesion: 0.21 +Nodes (13): _dump_env(), _emit_combined(), _flag_value(), _is_flag_value(), main(), _parse_copy_args(), Return the value following ``flag`` in ``argv`` or ``None``., When ``STUB_RCLONE_ENV_DUMP`` is set, write the rclone-prefixed env. (+5 more) + +### Community 183 - "Community 183" +Cohesion: 0.18 +Nodes (13): Automated UX-interaction documentation + coverage checks. Drives :mod:`tests.e2, Every cataloged ``data-testid`` is present in the UI source., Every cataloged ``data-testid`` is driven by an e2e test. Scans the whole `, Render the catalog into the ``UX_INTERACTIONS.md`` markdown body., ``docs/UX_INTERACTIONS.md`` is regenerated from the catalog. Regenerates th, Guard against an empty catalog silently passing the other checks., Return ``True`` when ``haystack`` references ``testid``. Tolerates testids, _references() (+5 more) + +### Community 184 - "Community 184" +Cohesion: 0.19 +Nodes (13): bandwidth_schedule_editor(), BandwidthSchedule, find_overlaps(), Bandwidth schedule editor (Frontend Spec Β§7.7.3). Lives inside the Equipment Ad, Build the schedule editor., One row in the schedule table., The full editor state., Return an error string if ``window`` is invalid, else ``None``. Time string (+5 more) + +### Community 185 - "Community 185" +Cohesion: 0.16 +Nodes (13): _invoke(), Orchestrator staging panel (Frontend Spec Β§3.9, Backend Β§13.8). A bottom-dock p, Return the leaf segment of ``run_path`` for the Run column., Render the bottom-dock staging panel. Returns the NiceGUI element when the, Best-effort invoke a callback; ignore None so unit tests stay simple., Render state for the staging panel. ``rows`` is the list of staging rows pu, render_staging_dock(), _run_label() (+5 more) + +### Community 186 - "Community 186" +Cohesion: 0.14 +Nodes (13): check_reserved_filesystem_name(), check_unsafe_project_name(), Validator rule functions. Backend Spec Β§8.1. This module is a pure-function lib, Return one finding per placeholder match in ``text``., Return one finding per illegal character / trailing-rule violation in ``name``., Β§8.1.2: detect Windows reserved names (``CON``, ``PRN``, ``AUX``, ``NUL``, `, Β§3.2: flag a project directory whose name is not a safe path segment. The p, _scan_for_illegal_chars() (+5 more) + +### Community 187 - "Community 187" +Cohesion: 0.19 +Nodes (14): _file_state_from_record(), _find_run_root(), _per_file_sync_status(), Walk up from ``folder`` to the nearest run directory, or ``None``. A run di, Read a run's ``sync_state.json`` via :class:`SyncStateWriter`. Returns the, Map a ``sync_state.json`` record + on-disk presence to a GUI state. The fiv, Return the per-file GUI sync state for a folder-list row. Operator-free per, Return ``path`` relative to ``run_root`` as a POSIX string, or ``None``. (+6 more) + +### Community 188 - "Community 188" +Cohesion: 0.18 +Nodes (10): _decode_files(), _encode_files(), Durable SQLite-backed sync-job queue. Backend Spec Β§7.1.1, Β§7.1.2, Β§7.1.5. The, One row in the ``jobs`` table. Backend Spec Β§7.1.1., Decode the ``files`` JSON column into a tuple of run-relative paths. A ``NU, Encode a run-relative path tuple into the ``files`` JSON column., Materialize an ``aiosqlite.Row`` (or tuple) into a :class:`SyncJobRow`., Insert a new ``QUEUED`` row for ``run_path``. ``files`` is the per-file (+2 more) + +### Community 189 - "Community 189" +Cohesion: 0.14 +Nodes (14): 4.4.1 CreationController, 4.4.2 TemplateEngine, 4.4.3 PluginHost, 4.4.4 Validator, 4.4.5 CacheWriter, 4.4.7 SessionStore, 4.4 Component Contracts, code:python (class SessionStore:) (+6 more) + +### Community 190 - "Community 190" +Cohesion: 0.14 +Nodes (13): 13.1 Topology, 13.2 Staging Area Layout, 13.3 Run Lifecycle States, 13.4 `ingest.json` Schema, 13.5 Run Completeness Signal, 13.6 Transport Handling, 13.7 Staging Cleanup, 13.8 Staging State Query (Backend Contract) (+5 more) + +### Community 191 - "Community 191" +Cohesion: 0.38 +Nodes (12): _config_with(), _nas_equipment(), Tests for the Settings NAS-credentials section (rclone-only migration). The sec, _stage_equipment(), test_handlers_factory_called_per_equipment_id(), test_present_password_opens_set_state_with_clear_action(), test_section_nav_entry_absent_for_stage_only_config(), test_section_nav_entry_present_when_password_equipment_exists() (+4 more) + +### Community 192 - "Community 192" +Cohesion: 0.19 +Nodes (12): from_session(), operation_columns(), OperationRow, operations_modal(), In-flight operations panel (Frontend Spec Β§9.5). A modal reachable from the Syn, Map an operation state to its NiceGUI icon name., Build the operations modal., A single row in the operations panel. (+4 more) + +### Community 193 - "Community 193" +Cohesion: 0.19 +Nodes (12): FileListDiff, FileListState, Live file-list component for the rebuilt main window. GUI/Orchestrator Redesign, Render the centre-pane file list. Pure render function. Double-clicking a f, Render the file-list column header row (Name / Size / Modified / Status)., Mutable state for the file list, consumed by the renderer., Result of comparing two successive folder-list snapshots., render_file_list() (+4 more) + +### Community 194 - "Community 194" +Cohesion: 0.18 +Nodes (10): Writer for ``equipment.json`` (registry) and ``test_runs.json`` (marker). Backe, Return the on-disk ``first_seen_at`` if the file exists. Returns ``None`` w, _read_equipment_sync(), _read_existing_first_seen_at(), _read_test_runs_marker_sync(), _write_equipment_sync(), _write_test_runs_marker_sync(), lock_path_for() (+2 more) + +### Community 195 - "Community 195" +Cohesion: 0.15 +Nodes (12): 6.0 Where Plugins Sit in the Pipeline, 6.10 Test / Debug CLI: `exlab-wizard plugins exec`, 6.4.1 Suspend / resume flow, 6.4.2 Resume contract (what the plugin author must guarantee), 6.4 Plugin Input Escalation (`PluginInputRequired`), 6.7 Example Plugins (Illustrative Catalog), 6.8 Plugin Authoring Checklist, 6.9 Lint CLI: `exlab-wizard plugins lint` (+4 more) + +### Community 196 - "Community 196" +Cohesion: 0.2 +Nodes (12): ensure_central_log_dir(), os_central_log_path(), Return the OS-appropriate central log file. Backend Spec Β§16.3., ``ensure_dir(os_central_log_path().parent)``., _build_real_handlers(), Build the listener's downstream handler chain. Order is fixed: equipment-sc, test_ensure_central_log_dir_creates_parent(), test_os_central_log_path_linux_with_xdg() (+4 more) + +### Community 197 - "Community 197" +Cohesion: 0.17 +Nodes (9): Keyring-store stand-in that records the calls the handlers make., A raising keyring backend surfaces a toast, not an unhandled crash., _RecordingKeyringStore, test_lims_credential_handlers_clear_deletes_under_lims_username(), test_lims_credential_handlers_save_writes_under_lims_username(), test_lims_credential_handlers_swallow_backend_errors(), test_nas_credential_handlers_clear_deletes_and_discards(), test_nas_credential_handlers_isolate_per_equipment_id() (+1 more) + +### Community 198 - "Community 198" +Cohesion: 0.17 +Nodes (12): _nas_config(), Live-LIMS branch with the keyring password absent -> not ready., A registered nas-mode equipment without its keyring password blocks ready., Regression: LIMS satisfied via the offline catalogue (no keyring password) m, Real Config with one password-requiring nas-mode equipment. ``offline_catal, test_is_setup_ready_false_when_keyring_missing(), test_is_setup_ready_false_when_lims_unreachable(), test_is_setup_ready_false_when_nas_credential_missing() (+4 more) + +### Community 199 - "Community 199" +Cohesion: 0.24 +Nodes (10): load_or_create_storage_secret(), Per-installation NiceGUI ``storage_secret`` token. Backend Spec Β§15.3. NiceGUI', Return the per-installation storage secret, generating it if absent. The fi, Tests for ``exlab_wizard.tray.storage_secret``. The secret backs NiceGUI's Star, test_creates_state_dir_if_missing(), test_generates_secret_on_first_call(), test_idempotent_across_calls(), test_regenerates_on_empty_file() (+2 more) + +### Community 200 - "Community 200" +Cohesion: 0.21 +Nodes (10): Read and decode the run's ``sync_state.json``. Returns a fresh empty :c, _CacheCase, Integration tests for the cross-major-read-fails contract from Β§11.9.2. For eve, Walk the candidate matrix and return the first reader method we find. Each, A v2.0 file MUST be refused by every v1.x reader (Β§11.9.2 rule 3)., A v3.7 file is also refused; the rule isn't tied to ``2.0`` specifically., One cache-file flavour to exercise against the reader gate., _resolve_reader() (+2 more) + +### Community 201 - "Community 201" +Cohesion: 0.24 +Nodes (11): _make_client(), Integration tests for the LIMS client + cache pair. Backend Spec Β§7.2. These te, A 401-then-relogin flow successfully refreshes and caches results., list_projects() fills the cache; the cache then returns the same rows., A get_project against the cache hits without a live LIMS call., When cache TTL expires, a refresh from the live API rewrites rows., test_cache_satisfies_lookup_without_network(), test_client_populates_cache() (+3 more) + +### Community 202 - "Community 202" +Cohesion: 0.18 +Nodes (6): aiosqlite-backed cache for LIMS project rows. Backend Spec Β§7.2.4. The cache li, Insert or update every row. ``last_refreshed`` is taken from each ``LIMS, Return every cached project for ``endpoint``, optionally filtered by ``s, Return one project by uid or short_id, or None if absent., True iff the most recent ``last_refreshed`` is within ``ttl_hours`` of t, _row_to_project() + +### Community 203 - "Community 203" +Cohesion: 0.17 +Nodes (10): A populated registry of shortcut handlers. Pages instantiate one registry,, Attach a handler. Only one handler per shortcut. Raises: Va, Invoke the handler for ``shortcut`` if registered. Returns ``True`` if, ShortcutRegistry, ``ShortcutRegistry`` dispatches the registered handler exactly once., Dispatching an unbound shortcut returns ``False`` and runs no handler., Two handlers per shortcut is forbidden., test_registry_dispatch_returns_false_when_unbound() (+2 more) + +### Community 204 - "Community 204" +Cohesion: 0.17 +Nodes (11): Unit tests for :mod:`exlab_wizard.ui.keyboard`. The registry is intentionally s, On non-darwin we return ``other``., On darwin we return ``macos``., Resolver returns the right shortcut id on non-darwin., Unknown combos resolve to ``None``., ``get_binding`` raises ``KeyError`` for an unknown shortcut id., test_combo_for_current_os_returns_macos_on_darwin(), test_combo_for_current_os_returns_other_on_linux() (+3 more) + +### Community 205 - "Community 205" +Cohesion: 0.18 +Nodes (12): _bulk_clear_verified(), _drive_folder_feed(), _fetch_folder_async(), _open_log_dialog(), Mount / rebind the per-tab FolderFeed and return current entries. Uses ``ap, FolderFeed fetch hook. Skips when the tree just walked. Runs the synchronou, Dispatch a per-run context action to its backend surface. Mirrors :func:`ap, Bulk-clear every staged run whose sync job is verified. Wired from the file (+4 more) + +### Community 206 - "Community 206" +Cohesion: 0.17 +Nodes (12): _build_metadata_payload(), _count_dir_children(), _metadata_for_owned_equipment(), _metadata_for_project(), _metadata_for_relay_equipment(), _metadata_for_run(), Decode the run's creation.json into the metadata-pane payload. Returns ``{}, Build the metadata-pane payload for the selected node, by kind. Returns ``{ (+4 more) + +### Community 207 - "Community 207" +Cohesion: 0.2 +Nodes (11): apply_frame(), compute_phase_rows(), PhaseRow, Wizard session-progress bar (Frontend Spec Β§10.1, Β§9.3). Drives a phase indicat, Build the progress bar for the Confirm & Create step. The wizard reaches in, Mutable phase/sub-progress state folded from controller WS frames. The wiza, Fold one controller WS ``frame`` into ``state`` in place. Returns ``True``, One renderable row in the session-progress component. (+3 more) + +### Community 208 - "Community 208" +Cohesion: 0.2 +Nodes (11): Template manager page (Frontend Spec Β§4 step 2, Β§5 step 2). Two operations the, Render one Copier question as a bound NiceGUI widget. The widget two-way bi, Render the template manager: existing-template list + create form. ``on_cre, One row in the template list. ``name`` is the template directory name (what, One Copier question parsed from a template's ``copier.yml``. ``kind`` is no, render_question_field(), render_template_manager(), TemplateQuestion (+3 more) + +### Community 209 - "Community 209" +Cohesion: 0.17 +Nodes (12): check_mode_prefix_mismatch(), Β§8.1.3: detect three-way disagreement between ``run_kind``, leaf prefix, and, Redesign Β§3.4: experimental run leaf parented by ``Runs`` is valid., Redesign Β§3.4: a misplaced ``Run_*`` directly under the project (not under `, test_experimental_under_test_runs_parent_fires(), test_experimental_with_run_prefix_at_project_level_fires(), test_experimental_with_run_prefix_under_runs_parent_passes(), test_experimental_with_test_run_prefix_fires() (+4 more) + +### Community 210 - "Community 210" +Cohesion: 0.24 +Nodes (10): atomic_write_bytes(), Atomic file writes via the Β§4.4.5 temp-file + ``os.replace`` recipe. This is th, Write ``data`` to ``path`` atomically. Implementation follows the Β§4.4.5 re, Tests for ``exlab_wizard.io.atomic_write``., test_atomic_write_calls_fsync_by_default(), test_atomic_write_cleans_up_temp_on_replace_failure(), test_atomic_write_creates_file(), test_atomic_write_leaves_no_temp_file_on_success() (+2 more) + +### Community 211 - "Community 211" +Cohesion: 0.23 +Nodes (12): creation_json_path(), Return the ``creation.json`` path under a run or project directory., _build_project_node(), _build_run_node(), _iter_run_or_project_subdirs(), Best-effort: read the first creation.json under this equipment to pick up th, Return name-sorted real subdirectories of ``parent``, sans the cache. Hides, Build a tree run node, deriving its rollup from ``sync_state.json``. Operat (+4 more) + +### Community 212 - "Community 212" +Cohesion: 0.17 +Nodes (12): 3.1.1 Setup-complete definition, 3.1.2 Boot flow, 3.1.3 Welcome Card (first launch only), 3.1.4 Setup-Incomplete state on the Main Window, 3.1.5 First-launch defaults, 3.1.6 Bundled content discovery, 3.1.7 LIMS configuration: online and offline workstations, 3.1 Application Lifecycle and First-Launch State (+4 more) + +### Community 214 - "Community 214" +Cohesion: 0.18 +Nodes (11): LoggingConfig, ``logging:`` block. Central app-log rotation + level., test_logging_central_log_keep_at_least_one(), test_logging_central_log_max_mb_at_least_one(), test_logging_level_accepts_all_canonical_values(), test_logging_level_normalized_to_uppercase(), test_logging_level_rejects_non_string_directly(), test_logging_level_rejects_unknown() (+3 more) + +### Community 215 - "Community 215" +Cohesion: 0.2 +Nodes (7): error_plugin -- raises PluginError mid-transform., ErrorPlugin, error_plugin -- raises PluginError mid-transform. Exercises the Backend Spec Β§6, Always raises PluginError on transform., PluginError, Raised by plugin workers to signal expected failure. Backend Spec Β§6., test_plugin_error_can_be_raised_and_caught() + +### Community 216 - "Community 216" +Cohesion: 0.4 +Nodes (10): _kv(), Node-type-aware metadata pane for the rebuilt main window. GUI/Orchestrator Red, Render the right-pane Metadata content for ``state.selected_node``. Dispatc, _render_equipment(), render_metadata_pane(), _render_project(), _render_received_equipment(), _render_received_run() (+2 more) + +### Community 217 - "Community 217" +Cohesion: 0.18 +Nodes (3): fake_winreg(), _FakeKey, _FakeWinreg + +### Community 218 - "Community 218" +Cohesion: 0.18 +Nodes (9): test_parse_combined_empty_returns_empty_result(), test_parse_combined_handles_all_prefixes(), test_parse_combined_tolerates_blank_lines_and_unknown_prefix(), _classify_failure(), _parse_combined(), Run ``rclone check --download --files-from --combined`` over ``files_from``., Run ``rclone about --json`` -- the equipment probe. Used by th, Parse ``rclone check --combined`` output into a :class:`CheckResult`. Each (+1 more) + +### Community 219 - "Community 219" +Cohesion: 0.18 +Nodes (10): Add equipment, Equipment, File explorer, First-launch setup, NAS Credentials, New project, New run / test run, New template (+2 more) + +### Community 220 - "Community 220" +Cohesion: 0.18 +Nodes (10): code:yaml (name: "xlsx_field_filler"), code:yaml (supported_extensions: [".xlsx"] # file-extension or "readm), code:yaml (required_variables:), code:yaml (isolation:), Discovery rules, Manifest Schema, Optional declaration block, Optional execution policy (+2 more) + +### Community 221 - "Community 221" +Cohesion: 0.24 +Nodes (10): project_name_violations(), Return every way ``value`` fails the Β§3.2 project-name rule. The project fo, Validate ``value`` as a Β§3.2 project-folder name. Returns the input unchang, validate_project_name(), Spaces and ordinary punctuation are fine -- the name is used verbatim., The Β§3.2 contract is 'used verbatim' -- no canonicalisation., test_validate_project_name_accepts_human_readable_names(), test_validate_project_name_does_not_mutate_input() (+2 more) + +### Community 222 - "Community 222" +Cohesion: 0.27 +Nodes (9): collect_default_values(), _field_id(), input_required_dialog(), Plugin ``INPUT_REQUIRED`` escalation dialog (Frontend Spec Β§9.1). When a plugin, Return the field's identifier (``id``, falling back to ``key``)., Seed an answers dict from each field's declared default. Booleans default t, Build the Β§9.1 "Additional input required" dialog. Renders one widget per f, test_collect_default_values_seeds_from_declared_defaults() (+1 more) + +### Community 223 - "Community 223" +Cohesion: 0.24 +Nodes (7): from_check_result(), SHA-256 verifier wrapper around ``rclone check --download``. Rclone-only NAS sy, Run ``rclone check --download`` over ``files_from`` and translate. Rais, Outcome of one ``rclone check --download`` pass against a remote. ``ok`` is, Verifier: ``rclone check`` wrapper, no Python SHA pipeline. Constructed wit, Verifier, VerifyResult + +### Community 224 - "Community 224" +Cohesion: 0.42 +Nodes (8): _make_project_request(), Unit tests for the ``/operations`` router., _ready_config(), _StubController, test_get_operations_503_when_controller_missing(), test_get_operations_emits_plugin_name_when_input_required(), test_get_operations_excludes_done_and_aborted(), test_get_operations_lists_in_flight_sessions() + +### Community 225 - "Community 225" +Cohesion: 0.27 +Nodes (7): ProdServer, Terminate the uvicorn process. Idempotent., Stop and re-spawn the process with the same HOME / port., A spawnable / restartable production-app uvicorn process. ``home`` is the r, Spawn uvicorn and block until ``/api/v1/health`` answers 200. Returns `, prod_server(), Yield a started :class:`ProdServer` rooted at a fresh tmp HOME. The keyring + +### Community 226 - "Community 226" +Cohesion: 0.22 +Nodes (9): panel_props(), Test-connection result panel (Frontend Spec Β§7.4.2). A persistent inline panel, One result rendered in the panel., Compute the rendered props for the panel. Returns a dict suitable for asser, Build the inline result panel. Returns a NiceGUI element, or the props dict, test_connection_panel(), TestConnectionResult, _nas_test_connection() (+1 more) + +### Community 227 - "Community 227" +Cohesion: 0.2 +Nodes (10): check_missing_required_field(), _lookup_field_value(), Β§8.1.5: detect required README fields that are absent or empty. Soft-tier., Return the first non-missing value for ``field_id`` across layers. A missin, test_empty_string_value_fires(), test_field_present_in_template_fields_layer_passes(), test_missing_id_fires(), test_none_readme_fields_treats_all_required_as_missing() (+2 more) + +### Community 228 - "Community 228" +Cohesion: 0.22 +Nodes (8): clear_run_dir(), Operator-facing staging-clear helper. Backend Spec Β§13.7. The operator-free per, Delete a staged run's data files; return ``(file_count, bytes_freed)``. Ide, delete_run_files(), _prune_empty_dirs(), Keep-local-aware, symlink-safe deletion of a run's staging copy. Operator-free, Delete ``run_path`` data files honoring ``retain_cache`` and ``keep_local``., Remove now-empty real directories under ``run_path`` (deepest first). The r + +### Community 229 - "Community 229" +Cohesion: 0.2 +Nodes (7): cache_dir(), equipment_json_path(), Return the ``.exlab-wizard/`` subdirectory for a run or project root., Return the ``equipment.json`` path under an equipment directory., Delete ``run_path`` data files honoring ``retain_cache`` and ``keep_local``., Mutate ``creation.json`` ``sync_status`` to ``cleaned``. Backend Spec Β§7.1.10., Apply the Β§7.1.6 interlocks; if all pass, run the cleanup. Operator-fre + +### Community 230 - "Community 230" +Cohesion: 0.22 +Nodes (9): compute_next_attempt_at(), Return the ISO timestamp of the next retry attempt. ``attempts_after`` is t, Record a transport failure on ``job_id``. If ``terminal`` is True (auth, The 1st through 5th attempts use the documented backoff sequence., Attempts <1 or >MAX_ATTEMPTS yield ``None``., test_compute_next_attempt_at_out_of_range(), test_compute_next_attempt_at_uses_schedule(), Return ``dt`` when supplied, otherwise the current UTC time. Mirrors the `` (+1 more) + +### Community 231 - "Community 231" +Cohesion: 0.2 +Nodes (9): Adding a new flow, code:block1 (pip install -e .[test]), code:block2 (pytest tests/e2e -q # full suite (headless), E2E test suite, Page objects, Run, Setup, Status of the 15-flow merged plan (+1 more) + +### Community 232 - "Community 232" +Cohesion: 0.2 +Nodes (10): 10.1 Progress, 10.2 Errors, 10.3 Success Summary, 10.4 Sync-Blocked Banner, 10.5.1 NAS sync failure recovery, 10.5.2 LIMS unreachability mid-wizard, 10.5.3 Crash and orphan recovery, 10.5.4 Pre-flight checks before creation (+2 more) + +### Community 233 - "Community 233" +Cohesion: 0.2 +Nodes (10): 6.5.1 Directory, 6.5.2 `__init__.py`, 6.5.3 `manifest.yml`, 6.5.4 `plugin.py`, 6.5.5 `README.md`, 6.5 Base Plugin Scaffold (`hello_plugin`), code:block10 (hello_plugin/), code:python ("""hello_plugin -- minimal example plugin for ExLab-Wizard.) (+2 more) + +### Community 234 - "Community 234" +Cohesion: 0.2 +Nodes (10): 6.1.1 Package layout, 6.1.2 `manifest.yml` schema, 6.1.3 The `Plugin` base class, 6.1.4 The `PluginContext` object, 6.1.5 What plugins must not touch, 6.1 Plugin Contract, code:block2 (/), code:yaml (# Required identity fields) (+2 more) + +### Community 235 - "Community 235" +Cohesion: 0.2 +Nodes (9): 4.1 Deployment Model, 4.2 Process Model, 4.5 Async / Threading Model, 4.7.1 SessionState β†’ Phase mapping, 4.7 Creation-Session State Machine, 4.8 Crash Recovery, 4. Backend Architecture, code:block1 (β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€) (+1 more) + +### Community 236 - "Community 236" +Cohesion: 0.25 +Nodes (6): A minimal sync-queue job row for the run-log tests., Sync-queue stub serving ``get_by_run_path`` for the log endpoint., _StubJobRow, _StubNasSync, State machine for a sync job. Backend Spec Β§7.1.2., SyncJobState + +### Community 237 - "Community 237" +Cohesion: 0.25 +Nodes (8): build_operations_router(), OperationEntry, OperationsResponse, ``/operations`` router. Backend Spec Β§4.6.1, Frontend Β§9.5. Lists all in-flight, One row in the Operations panel. Backend Spec Β§4.6.1, Frontend Β§9.5., ``GET /operations`` response., Construct the ``/operations`` router., _session_to_entry() + +### Community 238 - "Community 238" +Cohesion: 0.22 +Nodes (9): clear_run_context(), Reset every context var to ``None``. Provided for test fixtures that want t, Wipe context vars before each test to prevent cross-test leakage., _reset_context(), test_clear_run_context_resets_every_var(), Ensure each test starts with no run context bleed-through., _reset_context(), Wipe the run-context vars between cases so handler tests are isolated. (+1 more) + +### Community 239 - "Community 239" +Cohesion: 0.22 +Nodes (8): 3.6 Configure Equipment, Paths, and Integrations, Add Equipment wizard, Capability summary, code:{image} (:alt: Settings dialog with the Paths section active), code:{image} (:alt: Add-Equipment wizard, identity step), Related material, Screenshots, Walkthrough + +### Community 240 - "Community 240" +Cohesion: 0.22 +Nodes (9): 6.3.1 Process model, 6.3.2 IPC envelope, 6.3.3 Resource limits, 6.3.4 Failure handling, 6.3.5 Security model: what isolation does and does not solve, 6.3.6 Validation-worker subprocess (mode = `validate`), 6.3 Subprocess Isolation, code:json ({) (+1 more) + +### Community 241 - "Community 241" +Cohesion: 0.22 +Nodes (8): 8.1.1 Unresolved-placeholder rule (hard tier), 8.1.2 Illegal-filesystem-character rule (hard tier), 8.1.3 Mode-prefix mismatch rule (hard tier), 8.1.4 Orphan rule (soft tier), 8.1.5 Missing-required-field rule (soft tier), 8.1.6 Tier mapping, 8.1 Path Validation Rules, 8. Error Handling Principles + +### Community 243 - "Community 243" +Cohesion: 0.25 +Nodes (8): config_with_equipment_appended(), Return a copy of ``config`` with ``equipment`` appended. The single place t, A ``None`` config (fresh install) yields a default Config + the device., Appending keeps prior equipment and other config sections, unmutated., A device whose id already exists raises ConfigError, not a silent merge., test_config_with_equipment_appended_preserves_existing_state(), test_config_with_equipment_appended_rejects_duplicate_id(), test_config_with_equipment_appended_seeds_from_none() + +### Community 244 - "Community 244" +Cohesion: 0.32 +Nodes (6): _goto(), E2E flow 22: onboarding via the new Add-Equipment wizard (Redesign decision 2)., test_flow_22_main_window_has_add_equipment_in_toolbar(), test_flow_22_welcome_to_add_equipment(), Page object for the welcome card shown on first launch. Frontend Spec Β§6.1., WelcomePage + +### Community 246 - "Community 246" +Cohesion: 0.29 +Nodes (5): _NoiseFilter, Sphinx configuration for ExLab-Wizard documentation. The configuration wires th, Drop uncategorised warnings whose message text matches a known needle. Inse, Install the noise filter at the head of the warning handler chain. Sphinx w, setup() + +### Community 247 - "Community 247" +Cohesion: 0.25 +Nodes (4): crash_plugin -- exercises subprocess crash containment (SIGSEGV-like)., CrashPlugin, crash_plugin -- exercises subprocess crash containment. The plugin's ``transfor, Hard-exit the worker process before any file write. + +### Community 248 - "Community 248" +Cohesion: 0.25 +Nodes (4): input_required_plugin -- exercises the PluginInputRequired suspend/resume handsh, InputRequiredPlugin, input_required_plugin -- exercises Backend Spec Β§6.4 suspend/resume. On the fir, Demand a user-supplied ``color`` value before completing. + +### Community 249 - "Community 249" +Cohesion: 0.25 +Nodes (4): Failure fixture: plugin that hangs in ``transform`` past its timeout., timeout_plugin -- exercises Backend Spec Β§6.3.4 timeout enforcement. The plugin, Hang past the declared timeout. Never reaches its file write., TimeoutPlugin + +### Community 250 - "Community 250" +Cohesion: 0.32 +Nodes (7): Bottom-of-window status bar segment (Frontend Spec Β§3.5.5). The status bar has, Computed render spec for a status-bar segment., Compute a :class:`SegmentSpec` from a label and state. The state controls t, Build a clickable status-bar segment., segment_spec(), SegmentSpec, status_bar_segment() + +### Community 251 - "Community 251" +Cohesion: 0.32 +Nodes (7): banner_stack(), banner_stack_props(), _color_for_severity(), Banner stack component (Frontend Spec Β§2.2.3). Renders the active banners for a, Compute the visible / overflow split for a container. Returns a dict with `, Map a :class:`Severity` to its CSS variable token., Build the banner stack UI for a container. + +### Community 252 - "Community 252" +Cohesion: 0.32 +Nodes (7): Welcome card page (Frontend Spec Β§3.1.3). Modal card shown exactly once on the, Render spec captured for unit-test assertions., Return the immutable spec used to render the welcome card., Render the welcome card. ``on_get_started`` and ``on_skip`` are invoked wit, render_welcome_page(), welcome_card_spec(), WelcomeCardSpec + +### Community 253 - "Community 253" +Cohesion: 0.25 +Nodes (8): check_malformed_yaml_front_matter(), Β§8.1: detect malformed YAML front matter at the head of a Markdown file., test_empty_content_passes(), test_front_matter_with_nested_yaml_passes(), test_malformed_yaml_in_block_fires(), test_no_front_matter_passes(), test_unterminated_front_matter_fires(), test_well_formed_front_matter_passes() + +### Community 254 - "Community 254" +Cohesion: 0.25 +Nodes (7): Bundled plugins (Spec Β§6.5, Β§6.6), Bundled templates (Spec Β§5), code:block1 (_internal/), `_internal/` -- bundled starter content, Layout, Populating for v1, v1 status + +### Community 255 - "Community 255" +Cohesion: 0.25 +Nodes (7): 3.4 Browse Existing Equipment, Projects, and Runs, Capability summary, code:{image} (:alt: File-explorer main window, no node selected), code:{image} (:alt: File explorer with a project selected -- tree, file li), Related material, Screenshots, Walkthrough + +### Community 256 - "Community 256" +Cohesion: 0.25 +Nodes (7): 3.7 Monitor Orchestrator Staging, Capability summary, code:{image} (:alt: Staging dock with one row in the staging state), code:{image} (:alt: Main window with the orchestrator staging panel enable), Related material, Screenshots, Walkthrough + +### Community 257 - "Community 257" +Cohesion: 0.25 +Nodes (7): code:json ({), code:json ({), Exit codes, IPC Envelope, Stderr (structured log channel), Stdin (host to worker), Stdout (worker to host) + +### Community 258 - "Community 258" +Cohesion: 0.25 +Nodes (8): 3.4.1 Tray menu, 3.4.2 Status submenu, 3.4.3 Window lifecycle, 3.4.4 Why this lifecycle matters for the lab workflow, 3.4.5 OS notifications, 3.4.6 Quitting the app, 3.4.7 Linux fallback (no system tray), 3.4 Tray Icon and Window Lifecycle + +### Community 259 - "Community 259" +Cohesion: 0.25 +Nodes (8): 3.6.1 Title bar, 3.6.2 Project detail sections, 3.6.3 Run detail sections, 3.6.4 Validation and override summary, 3.6.5 Action affordances, 3.6.6 Empty selection, 3.6 Detail pane (right panel), code:block4 (⚠ Unresolved placeholder token Β· Run_) + +### Community 260 - "Community 260" +Cohesion: 0.25 +Nodes (8): 9.1 Escalation dialog layout, 9.2 Multiple consecutive escalations from one session (sequential), 9.3 Mid-plugin-pass progress (per-plugin sub-progress), 9.4 Cancel during escalation -- confirmation dialog, 9.5 Disconnect and resume -- the in-flight operations panel, 9.6 Concurrent suspended sessions, 9. Plugin Input Escalation, code:block5 (Running plugins ) + +### Community 261 - "Community 261" +Cohesion: 0.25 +Nodes (8): 11.1 Layout, 11.2 Severity Tier Visual Treatment, 11.3 Per-Row Actions, 11.4.1 New-finding surfacing during the session, 11.4 Empty State, 11.5 Override-and-Allow-Sync Dialog, 11.6 Cross-Surface Links, 11. Problems Tab + +### Community 262 - "Community 262" +Cohesion: 0.25 +Nodes (8): 3.5.1 LIMS name resolution, 3.5.2 Tree node display format, 3.5.3 Archived and deleted LIMS-project handling, 3.5.4 Search and filter chips, 3.5.5 Status bar (bottom of the main window), 3.5.6 Empty states, 3.5 Tree details, filters, and status bar, code:block3 ([ search by name, short_id, or run label ... ] [Active βœ“] ) + +### Community 263 - "Community 263" +Cohesion: 0.25 +Nodes (8): 4.6.1 REST surface (illustrative subset; full schema lives in `api/schemas.py`), 4.6.2 WebSocket events, 4.6.3 API versioning, health, and error envelope, 4.6 Frontend ↔ Backend Protocol, code:json ({ "kind": "phase", "phase": "rendering_template", ), code:json ({ "kind": "snapshot", "findings": [...], "audit_at": "..." }), code:json ({), code:json ({) + +### Community 264 - "Community 264" +Cohesion: 0.29 +Nodes (4): _compute_nas_path(), Return the equipment id for a run path. Prefers an explicit equipment i, Mutate ``creation.json`` ``sync_status`` to ``blocked_by_validation``., Pre-Sync Gate -> if hard-tier finding without override, mark ``sync_stat + +### Community 265 - "Community 265" +Cohesion: 0.29 +Nodes (4): MockLimsState, Mutable per-app state. ``valid_email`` / ``valid_password`` are the credent, Mint a fresh opaque session token., Drop every issued session token. The next protected call sees a 401 and + +### Community 266 - "Community 266" +Cohesion: 0.38 +Nodes (6): _install_stub_rclone(), nas_prod_server(), E2E flow 27: NAS-credential setup gate + Settings section (rclone-only). Boots, Spawn the production wizard seeded with a credential-less nas equipment. Yi, _setup_state(), test_nas_credential_gate_set_test_and_clear() + +### Community 267 - "Community 267" +Cohesion: 0.33 +Nodes (6): _free_port(), _make_seeded_server(), E2E flow 19: travelling problem badge (Redesign Β§4.5). The badge sits on the sh, Spawn a uvicorn server with seeded findings injected via env var., The badge for a seeded hard finding renders on the root node., test_flow_19_travelling_badge_aggregates_red() + +### Community 268 - "Community 268" +Cohesion: 0.29 +Nodes (7): check_orphan(), Β§8.1.4: detect missing ``creation.json`` at project / run level (NOT equipme, test_equipment_without_creation_json_does_not_fire(), test_project_with_creation_json_passes(), test_project_without_creation_json_fires(), test_run_with_creation_json_passes(), test_run_without_creation_json_fires() + +### Community 269 - "Community 269" +Cohesion: 0.33 +Nodes (5): _format_utc_timestamp(), Structured log formatter and secret-redaction helpers. Backend Spec Β§16.4, Β§16.1, Render ``epoch_seconds`` as a UTC ISO 8601 timestamp with ``Z`` suffix. Exa, Render the active context as ``[host:..] [equip:..] ...``. Returns the empt, _render_tags() + +### Community 270 - "Community 270" +Cohesion: 0.29 +Nodes (6): 3.1 Create a New Project, Capability summary, code:{image} (:alt: New project wizard, initial render), Related material, Screenshots, Walkthrough + +### Community 271 - "Community 271" +Cohesion: 0.29 +Nodes (6): 3.8 Review and Resolve Naming and Validation Problems, Capability summary, code:{image} (:alt: Problems tab with one hard-tier finding visible), Related material, Screenshots, Walkthrough + +### Community 272 - "Community 272" +Cohesion: 0.29 +Nodes (6): 3.5 Author a README at Creation Time, Capability summary, code:{image} (:alt: README step inside the new-project wizard), Related material, Screenshots, Walkthrough + +### Community 273 - "Community 273" +Cohesion: 0.29 +Nodes (6): code:{image} (:alt: First-launch welcome card), Getting Started, Overview, Related material, Screenshots, Walkthrough + +### Community 274 - "Community 274" +Cohesion: 0.29 +Nodes (6): 3.2 Create a New Experimental Run, Capability summary, code:{image} (:alt: New experimental run wizard, initial render), Related material, Screenshots, Walkthrough + +### Community 275 - "Community 275" +Cohesion: 0.29 +Nodes (6): 3.3 Create a New Test Run, Capability summary, code:{image} (:alt: New test run wizard, initial render), Related material, Screenshots, Walkthrough + +### Community 276 - "Community 276" +Cohesion: 0.29 +Nodes (6): code:block1 (Creation Controller), code:{toctree} (:maxdepth: 1), Plugin Author Guide, What plugins do, Where plugins fit in the pipeline, Where to look in the codebase + +### Community 277 - "Community 277" +Cohesion: 0.29 +Nodes (6): code:block1 (pip install -e .[plugin-examples]), docx_variable_replacer, Hello plugin, Where to look in the codebase, Worked Examples, xlsx_field_filler + +### Community 278 - "Community 278" +Cohesion: 0.29 +Nodes (7): 6.2.1 Discovery, 6.2.2 Resolution per creation session, 6.2.3 Order control via `_exlab_plugins`, 6.2.4 What gets recorded in `creation.json`, 6.2 Plugin Registry, code:yaml (_exlab_plugins:), code:json ({) + +### Community 279 - "Community 279" +Cohesion: 0.29 +Nodes (7): 6.6.1 What it does, 6.6.2 `manifest.yml`, 6.6.3 `plugin.py`, 6.6.4 What this exercises, 6.6 Worked Example: `xlsx_field_filler`, code:yaml (name: "xlsx_field_filler"), code:python (from pathlib import Path) + +### Community 280 - "Community 280" +Cohesion: 0.29 +Nodes (7): 4.9.1 Setup states, 4.9.2 Endpoint gating, 4.9.3 `GET /api/v1/setup/status` response shape, 4.9.4 LIMS unreachability is a soft block, 4.9.5 Initial setup ordering (informational), 4.9 First-Launch and Setup-Incomplete State, code:json ({) + +### Community 281 - "Community 281" +Cohesion: 0.33 +Nodes (6): Hard chip default-on; Soft default-off., _sample_findings(), test_problems_filter_default_shows_hard_only(), test_problems_filter_scope_filters_by_equipment(), test_problems_filter_search_path_substring(), test_problems_filter_show_soft_when_chip_on() + +### Community 283 - "Community 283" +Cohesion: 0.33 +Nodes (5): corrupt_one_check_factory(), Shared helpers for ``tests/unit/sync/`` test modules. Kept under a leading-unde, Read run-relative paths from a ``--files-from`` tempfile., Check factory whose closure flags ``corrupt_rel`` as ``differ``. Every othe, _read_files_from() + +### Community 284 - "Community 284" +Cohesion: 0.33 +Nodes (3): Open the queue and start the worker task. Backend Spec Β§7.1.2., Pick the next due job and drive it through the state machine., Return the next QUEUED row whose backoff has passed (or None). + +### Community 285 - "Community 285" +Cohesion: 0.4 +Nodes (5): Sync-status icon component (Frontend Spec Β§3.2, Β§10.5.1). Distinct visual state, Compute icon + tooltip + retry-counter for a sync status. The ``retry_n``/`, Build a NiceGUI row containing the icon and optional retry counter., sync_status_icon(), sync_status_props() + +### Community 286 - "Community 286" +Cohesion: 0.53 +Nodes (5): _goto(), E2E flow 20: file-explorer navigation (Redesign Β§4). Tree selection drives the, test_flow_20_breadcrumb_is_present_when_node_selected(), test_flow_20_file_explorer_renders_three_regions(), test_flow_20_select_run_node_renders_metadata_pane() + +### Community 287 - "Community 287" +Cohesion: 0.33 +Nodes (5): prod_server(), E2E flow 26: Add-Equipment wizard confirm against the PRODUCTION app. ``test_fl, Spawn the production wizard app under a fresh tmp HOME., Drive the production wizard to Confirm and assert config.yaml gains the device., test_equipment_wizard_confirm_persists_to_config() + +### Community 288 - "Community 288" +Cohesion: 0.33 +Nodes (5): High-level Copier-template category. Backend Spec Β§5.2., Run-scope tag declared in a run template's ``_exlab_run_scope``. Backend Sp, RunScope, TemplateType, Load + validate a template's ``copier.yml``. Args: template + +### Community 289 - "Community 289" +Cohesion: 0.33 +Nodes (6): list_bindings(), Return the canonical bindings table (Frontend Β§3.7)., Each binding has a non-empty description (Frontend Β§3.7)., Every Frontend Β§3.7 row has a ShortcutBinding., test_all_documented_shortcuts_in_registry(), test_descriptions_match_spec() + +### Community 290 - "Community 290" +Cohesion: 0.33 +Nodes (6): on_operations_panel(), Return ``True`` when ``session`` belongs on the Operations panel. Frontend, _build_operation_rows(), _panel_sessions(), Build the Operations-panel rows from the live session store (T3). Uses the, Return the (session_id, session) pairs the Operations panel shows. The Β§9.5 + +### Community 291 - "Community 291" +Cohesion: 0.33 +Nodes (6): _file_context_action(), _open_in_os(), Handle ``Open in OS`` / ``Copy path`` / ``Keep local`` file actions., Flip a file's ``keep_local`` flag via the orchestrator's writer. Operator-f, Launch the host OS's default opener for ``path``. Returns False on platform, _toggle_keep_local() + +### Community 292 - "Community 292" +Cohesion: 0.33 +Nodes (6): _close_dialog(), _consume_session_progress(), _open_input_required_dialog(), Open the Β§9.1 escalation dialog; Submit resumes, Cancel confirms (T5). Subm, Fold the controller's WS frames into the wizard's live phase bar (T2) and su, Best-effort close of a NiceGUI dialog (no-op when ``None`` / test mode). + +### Community 293 - "Community 293" +Cohesion: 0.4 +Nodes (5): override_badge(), override_badge_props(), Override pill (Frontend Spec Β§3.6.1, Β§11). A pill that appears next to a run's, Compute styling props for the override pill., Build a clickable badge for the override state. Clicking opens the Β§11.5 ov + +### Community 294 - "Community 294" +Cohesion: 0.4 +Nodes (5): Test-run pill (Frontend Spec Β§3.2, Β§3.6.1). A small *"Test"* pill rendered next, Static styling for the *"Test"* pill (Frontend Β§3.6.1)., Build a NiceGUI badge for a test run., test_run_badge(), test_run_badge_props() + +### Community 295 - "Community 295" +Cohesion: 0.33 +Nodes (5): Tree context-menu renderers. GUI/Orchestrator Redesign Β§4.6 / decision 4A / Β§9., Render the right-click menu for an owned-equipment tree node. The callback, Render the right-click menu for a run tree node. The callback receives ``(r, render_equipment_context_menu(), render_run_context_menu() + +### Community 296 - "Community 296" +Cohesion: 0.4 +Nodes (5): mode_badge(), mode_badge_props(), Mode badge component (Frontend Spec Β§5.3, Β§6). Shows the active wizard mode (ex, Compute the badge styling props for a run kind. Returns a dict that wizards, Build a NiceGUI badge element for the given run kind. Lazy NiceGUI import k + +### Community 297 - "Community 297" +Cohesion: 0.33 +Nodes (5): lims_password_present(), Shared FastAPI dependency helpers for the wizard's HTTP routers. The lifespan h, Return whether a LIMS password is stored -- the repo-wide reader. Every sur, Return ``deps.controller`` or raise a structured 503. Used by the routes th, require_controller() + +### Community 298 - "Community 298" +Cohesion: 0.33 +Nodes (5): code:bash (./scripts/regen_lims_snapshots.sh), exlab v1 LIMS contract snapshots, Files, Provenance, Regenerating + +### Community 299 - "Community 299" +Cohesion: 0.33 +Nodes (5): code:{toctree} (:maxdepth: 2), ExLab-Wizard documentation, Project metadata, What is ExLab-Wizard, Where to start + +### Community 300 - "Community 300" +Cohesion: 0.33 +Nodes (5): 3.1 Equipment-ID format, 3.2 Project-folder name, 3. Directory Structure Convention, code:block1 (/), code:block2 (/data/lab/CONFOCAL_01/UCR-000-I-D_WHEELDON/Runs/Run_2026-04-) + +### Community 301 - "Community 301" +Cohesion: 0.33 +Nodes (5): 12.1 What Changes in Orchestrator Mode, 12.2 Configuration, 12.3 Concurrent Run Handling, 12.4 Logging and DB Changes, 12. Orchestrator Mode (Multi-Equipment Workstations) + +### Community 302 - "Community 302" +Cohesion: 0.33 +Nodes (6): 4.10.1 Unit tests (`tests/unit/`), 4.10.2 Integration tests (`tests/integration/`), 4.10.3 End-to-end tests (`tests/e2e/`), 4.10.4 Test fixtures (`tests/fixtures/`), 4.10.5 What's NOT tested at each layer, 4.10 Testing Strategy + +### Community 304 - "Community 304" +Cohesion: 0.4 +Nodes (5): NASCleanupConfig, ``nas_cleanup:`` block. Local-copy retention after NAS verify., test_nas_cleanup_defaults(), test_nas_cleanup_min_age_hours_non_negative(), test_nas_cleanup_min_verify_passes_at_least_one() + +### Community 305 - "Community 305" +Cohesion: 0.4 +Nodes (5): _full_config_dict(), Build a Config from a Β§9-shaped dict, dump it, and compare. ``model_dump()`, Full Config dict mirroring the Β§9 example. Used by round-trip tests., test_full_config_round_trip_via_dict(), test_round_trip_preserves_bandwidth_alias_for_from() + +### Community 306 - "Community 306" +Cohesion: 0.6 +Nodes (4): _controller(), Unit tests for ``CreationController.apply_config`` (live config reload). The co, test_apply_config_reinjects_plugin_host_only_when_given(), test_apply_config_swaps_config() + +### Community 307 - "Community 307" +Cohesion: 0.6 +Nodes (4): _goto(), E2E flow 18: relay-receive β€” received equipment auto-discovery (Redesign Β§3.3)., test_flow_18_received_equipment_node_appears(), test_flow_18_received_metadata_shows_relay_badge() + +### Community 308 - "Community 308" +Cohesion: 0.6 +Nodes (4): _goto(), E2E flow 17: creation-button enablement on received nodes (Redesign decision 1)., test_flow_17_creation_buttons_disabled_on_received_node(), test_flow_17_creation_buttons_enabled_on_owned_node() + +### Community 309 - "Community 309" +Cohesion: 0.6 +Nodes (4): _goto(), E2E flow 23: footer Staging segment + bulk Clear verified (Redesign Β§4.6). The, test_flow_23_bulk_clear_verified_action_present(), test_flow_23_footer_staging_segment_renders() + +### Community 310 - "Community 310" +Cohesion: 0.4 +Nodes (4): Capability map, code:{toctree} (:maxdepth: 1), Conventions, User Guide + +### Community 311 - "Community 311" +Cohesion: 0.4 +Nodes (5): 6.1 Layout, 6.2 Pre-fill Rules, 6.3 Preview Behavior, 6.4 Required-Field Error Messaging, 6. README Authoring Step + +### Community 312 - "Community 312" +Cohesion: 0.5 +Nodes (4): Map a state to the Β§4.9.3 next-action enum member. Returns ``None`` when th, setup_state_next_action(), test_setup_state_next_action_for_no_nas_credential(), test_setup_state_next_action_table() + +### Community 316 - "Community 316" +Cohesion: 0.5 +Nodes (3): E2E smoke flow. Confirms the Phase 16 e2e harness can drive a real browser agai, Smoke: navigate to / and confirm the e2e harness is wired up. The Phase 16, test_root_url_responds_with_html() + +### Community 317 - "Community 317" +Cohesion: 0.5 +Nodes (3): Machine-readable catalog of the wizard's UX interactions. Each :class:`UXIntera, One operator-facing affordance in the wizard UI., UXInteraction + +### Community 319 - "Community 319" +Cohesion: 0.5 +Nodes (4): _missing_setup_sections(), _nas_credential_missing(), Return the settings sections the operator still needs to fill in. Mirrors a, True when a password-requiring nas-mode equipment lacks its keyring entry. + +### Community 320 - "Community 320" +Cohesion: 0.5 +Nodes (4): _lims_catalogue_projects(), _lims_projects(), Read the offline-catalogue projects (disconnected-workstation source). Read, Return the LIMS projects backing the project wizard's picker. Tries the liv + +### Community 321 - "Community 321" +Cohesion: 0.5 +Nodes (4): _path_is_under_allowed_root(), Return True if ``path`` is under any of the configured roots. Redesign Β§5 /, _is_real_run(), Return True when ``run_path`` is a real run inside an allowed root. A "real + +### Community 322 - "Community 322" +Cohesion: 0.5 +Nodes (4): 8.1 Equipment Selector, 8.2 Staging Panel, 8.3 Clear Verified Runs Action, 8. Orchestrator Mode Surfaces + +### Community 323 - "Community 323" +Cohesion: 0.5 +Nodes (4): 4.3.1 The `constants/` package, 4.3.2 The `tray/` and `window/` packages, 4.3 Package Layout, code:block2 (exlab_wizard/) + +### Community 341 - "Community 341" +Cohesion: 0.67 +Nodes (3): 4.4.6 NASSyncClient and LIMSClient, code:python (class LIMSClient:), code:python (class NASSyncClient:) + +## Knowledge Gaps +- **2848 isolated node(s):** `Tests for the top-level exception hierarchy in ``exlab_wizard.errors``. These t`, `Unit tests for ``exlab_wizard.paths``. OS-aware directory helpers + equipment-i`, `Construct a minimal valid EquipmentConfig for setup-state fixtures.`, `Minimal orchestrator identity (Redesign Β§3.1) for setup-state fixtures.`, `Construct a fully READY Config (paths + equipment + LIMS endpoint+email). R` (+2843 more) + These have ≀1 connection - possible missing edges or undocumented components. +- **213 thin communities (<3 nodes) omitted from report** β€” run `graphify query` to explore isolated nodes. + +## Suggested Questions +_Questions this graph is uniquely positioned to answer:_ + +- **Why does `ConfigError` connect `Community 55` to `Community 1`, `Community 5`, `Community 6`, `Community 7`, `Community 8`, `Community 17`, `Community 22`, `Community 37`, `Community 304`, `Community 48`, `Community 73`, `Community 76`, `Community 78`, `Community 80`, `Community 83`, `Community 214`, `Community 221`, `Community 113`, `Community 243`, `Community 120`?** + _High betweenness centrality (0.075) - this node is a cross-community bridge._ +- **Why does `Config` connect `Community 37` to `Community 1`, `Community 5`, `Community 6`, `Community 7`, `Community 134`, `Community 27`, `Community 30`, `Community 31`, `Community 33`, `Community 41`, `Community 48`, `Community 53`, `Community 55`, `Community 64`, `Community 197`, `Community 74`, `Community 75`, `Community 79`, `Community 80`, `Community 224`, `Community 107`, `Community 236`, `Community 111`, `Community 243`, `Community 125`?** + _High betweenness centrality (0.067) - this node is a cross-community bridge._ +- **Why does `CreationController` connect `Community 5` to `Community 0`, `Community 66`, `Community 2`, `Community 4`, `Community 37`, `Community 6`, `Community 38`, `Community 11`, `Community 12`, `Community 14`, `Community 80`, `Community 306`, `Community 55`, `Community 25`?** + _High betweenness centrality (0.059) - this node is a cross-community bridge._ +- **Are the 119 inferred relationships involving `create_app()` (e.g. with `test_get_setup_status_lists_missing_nas_credential_per_equipment()` and `test_get_setup_status_ready()`) actually correct?** + _`create_app()` has 119 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 118 inferred relationships involving `AppDependencies` (e.g. with `_RecordingComponent` and `_RecordingValidator`) actually correct?** + _`AppDependencies` has 118 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 86 inferred relationships involving `SyncStateWriter` (e.g. with `_StubJobRow` and `_StubNasSync`) actually correct?** + _`SyncStateWriter` has 86 INFERRED edges - model-reasoned connections that need verification._ +- **Are the 65 inferred relationships involving `NASSyncClient` (e.g. with `_InMemoryKeyring` and `_StubKeyring`) actually correct?** + _`NASSyncClient` has 65 INFERRED edges - model-reasoned connections that need verification._ \ No newline at end of file diff --git a/graphify-out/cache/ast/0145ed68b560fed9c726b007b272c657295ee598cad594469e30e94657162bbc.json b/graphify-out/cache/ast/0145ed68b560fed9c726b007b272c657295ee598cad594469e30e94657162bbc.json new file mode 100644 index 0000000..703607c --- /dev/null +++ b/graphify-out/cache/ast/0145ed68b560fed9c726b007b272c657295ee598cad594469e30e94657162bbc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/__init__.py", "source_location": "L1"}, {"id": "readme_init_rationale_1", "label": "README generation package. Backend Spec \u00a710.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_init_py", "target": "exlab_wizard_readme_generator", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/__init__.py", "source_location": "L3", "weight": 1.0}, {"source": "readme_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/02924e3223b207d028871711e78c3da2b4ec6978c4132b1a292f98614bfd1ddc.json b/graphify-out/cache/ast/02924e3223b207d028871711e78c3da2b4ec6978c4132b1a292f98614bfd1ddc.json new file mode 100644 index 0000000..3a211e1 --- /dev/null +++ b/graphify-out/cache/ast/02924e3223b207d028871711e78c3da2b4ec6978c4132b1a292f98614bfd1ddc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_templates_py", "label": "templates.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py", "source_location": "L1"}, {"id": "pages_templates_templatesummary", "label": "TemplateSummary", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py", "source_location": "L49"}, {"id": "pages_templates_templatequestion", "label": "TemplateQuestion", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py", "source_location": "L66"}, {"id": "pages_templates_template_questions", "label": "template_questions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py", "source_location": "L95"}, {"id": "pages_templates_list_templates", "label": "list_templates()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py", "source_location": "L145"}, {"id": "pages_templates_create_template", "label": "create_template()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py", "source_location": "L191"}, {"id": "pages_templates_render_question_field", "label": "render_question_field()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py", "source_location": "L244"}, {"id": "pages_templates_render_template_manager", "label": "render_template_manager()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py", "source_location": "L296"}, {"id": "pages_templates_rationale_1", "label": "Template manager page (Frontend Spec \u00a74 step 2, \u00a75 step 2). Two operations the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py", "source_location": "L1"}, {"id": "pages_templates_rationale_50", "label": "One row in the template list. ``name`` is the template directory name (what", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py", "source_location": "L50"}, {"id": "pages_templates_rationale_67", "label": "One Copier question parsed from a template's ``copier.yml``. ``kind`` is no", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py", "source_location": "L67"}, {"id": "pages_templates_rationale_96", "label": "Parse the operator-answerable questions out of a ``copier.yml`` body. Handl", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py", "source_location": "L96"}, {"id": "pages_templates_rationale_150", "label": "Return the templates under ``templates_dir``, optionally filtered. A templa", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py", "source_location": "L150"}, {"id": "pages_templates_rationale_199", "label": "Scaffold a new minimal Copier template under ``templates_dir``. Writes `` ``current_state == 'synced'``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L109"}, {"id": "orchestrator_test_staging_query_rationale_122", "label": "A run whose ``sync_state.json`` carries ``cleared_at`` rolls up to ``cleared``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L122"}, {"id": "orchestrator_test_staging_query_rationale_136", "label": "A re-modified file (signature cleared -> unverified) flips synced back to syncin", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L136"}, {"id": "orchestrator_test_staging_query_rationale_153", "label": "A run leaf with no cache metadata is still listed (ingest.json gone).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L153"}, {"id": "orchestrator_test_staging_query_rationale_178", "label": "The .exlab-wizard subtree is metadata, not staged data.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L178"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "exlab_wizard_cache_sync_state_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "exlab_wizard_orchestrator_staging_query", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_seed_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_unset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L61", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L66", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_test_list_staged_runs_returns_summary_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_test_list_staged_runs_includes_test_runs_under_testruns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L92", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L99", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L108", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L121", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_test_list_staged_runs_includes_runs_without_creation_metadata", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L152", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L162", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_test_list_staged_runs_excludes_cache_dir_from_byte_total", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L177", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_test_list_staged_runs_uses_explicit_staging_root_param", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L189", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "target": "orchestrator_test_staging_query_test_list_staged_runs_sets_last_activity_from_directory_mtime", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L197", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_missing", "target": "orchestrator_test_staging_query_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L67", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_returns_summary_rows", "target": "orchestrator_test_staging_query_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L77", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_returns_summary_rows", "target": "orchestrator_test_staging_query_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L78", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_includes_test_runs_under_testruns", "target": "orchestrator_test_staging_query_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L93", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_includes_test_runs_under_testruns", "target": "orchestrator_test_staging_query_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L94", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", "target": "orchestrator_test_staging_query_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L101", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", "target": "orchestrator_test_staging_query_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L104", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", "target": "orchestrator_test_staging_query_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L110", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", "target": "orchestrator_test_staging_query_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L117", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", "target": "orchestrator_test_staging_query_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L123", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", "target": "orchestrator_test_staging_query_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L131", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", "target": "orchestrator_test_staging_query_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L137", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", "target": "orchestrator_test_staging_query_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L145", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_includes_runs_without_creation_metadata", "target": "orchestrator_test_staging_query_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L157", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", "target": "orchestrator_test_staging_query_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L166", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", "target": "orchestrator_test_staging_query_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L173", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_excludes_cache_dir_from_byte_total", "target": "orchestrator_test_staging_query_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L181", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_excludes_cache_dir_from_byte_total", "target": "orchestrator_test_staging_query_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L185", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_uses_explicit_staging_root_param", "target": "orchestrator_test_staging_query_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L191", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_uses_explicit_staging_root_param", "target": "orchestrator_test_staging_query_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L192", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_sets_last_activity_from_directory_mtime", "target": "orchestrator_test_staging_query_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L198", "weight": 1.0}, {"source": "orchestrator_test_staging_query_test_list_staged_runs_sets_last_activity_from_directory_mtime", "target": "orchestrator_test_staging_query_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L199", "weight": 1.0}, {"source": "orchestrator_test_staging_query_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_staging_query_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L1", "weight": 1.0}, {"source": "orchestrator_test_staging_query_rationale_100", "target": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L100", "weight": 1.0}, {"source": "orchestrator_test_staging_query_rationale_109", "target": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L109", "weight": 1.0}, {"source": "orchestrator_test_staging_query_rationale_122", "target": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L122", "weight": 1.0}, {"source": "orchestrator_test_staging_query_rationale_136", "target": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L136", "weight": 1.0}, {"source": "orchestrator_test_staging_query_rationale_153", "target": "orchestrator_test_staging_query_test_list_staged_runs_includes_runs_without_creation_metadata", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L153", "weight": 1.0}, {"source": "orchestrator_test_staging_query_rationale_178", "target": "orchestrator_test_staging_query_test_list_staged_runs_excludes_cache_dir_from_byte_total", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L178", "weight": 1.0}], "raw_calls": [{"caller_nid": "orchestrator_test_staging_query_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L30"}, {"caller_nid": "orchestrator_test_staging_query_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L31"}, {"caller_nid": "orchestrator_test_staging_query_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L33"}, {"caller_nid": "orchestrator_test_staging_query_config", "callee": "OrchestratorStagingCleanup", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L34"}, {"caller_nid": "orchestrator_test_staging_query_seed_run", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L50"}, {"caller_nid": "orchestrator_test_staging_query_seed_run", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L52"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_unset", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L62"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_unset", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L62"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_unset", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L63"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_missing", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L68"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_returns_summary_rows", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L78"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_returns_summary_rows", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L80"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_returns_summary_rows", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L82"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_includes_test_runs_under_testruns", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L94"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_includes_test_runs_under_testruns", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L95"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L102"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L103"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L103"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L104"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L111"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L112"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L113"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L117"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L124"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L125"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L126"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L130"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", "callee": "mark_cleared", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L130"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L131"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L138"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L140"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L141"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L145"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L148"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L148"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L149"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_includes_runs_without_creation_metadata", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L155"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_includes_runs_without_creation_metadata", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L156"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_includes_runs_without_creation_metadata", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L157"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_includes_runs_without_creation_metadata", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L158"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", "callee": "time", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L169"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", "callee": "utime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L170"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", "callee": "utime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L171"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L173"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L174"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L174"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_excludes_cache_dir_from_byte_total", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L183"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_excludes_cache_dir_from_byte_total", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L184"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_excludes_cache_dir_from_byte_total", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L185"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_uses_explicit_staging_root_param", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L193"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_uses_explicit_staging_root_param", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L194"}, {"caller_nid": "orchestrator_test_staging_query_test_list_staged_runs_sets_last_activity_from_directory_mtime", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py", "source_location": "L199"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/1989c806132f27043cb1191ff1461f65afca598434ebb96efce73db5992468bc.json b/graphify-out/cache/ast/1989c806132f27043cb1191ff1461f65afca598434ebb96efce73db5992468bc.json new file mode 100644 index 0000000..6ecf252 --- /dev/null +++ b/graphify-out/cache/ast/1989c806132f27043cb1191ff1461f65afca598434ebb96efce73db5992468bc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_configs_readme_md", "label": "README.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/configs/README.md", "source_location": "L1"}], "edges": [], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/1a1be1aac4868ad12ac50f2d767415eb3adbec1f5062bcc4683eeb5a8945f9aa.json b/graphify-out/cache/ast/1a1be1aac4868ad12ac50f2d767415eb3adbec1f5062bcc4683eeb5a8945f9aa.json new file mode 100644 index 0000000..3b00f0c --- /dev/null +++ b/graphify-out/cache/ast/1a1be1aac4868ad12ac50f2d767415eb3adbec1f5062bcc4683eeb5a8945f9aa.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "label": "test_schemas.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L1"}, {"id": "api_test_schemas_minimal_creation_json", "label": "_minimal_creation_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L53"}, {"id": "api_test_schemas_test_creation_json_round_trips_through_msgspec", "label": "test_creation_json_round_trips_through_msgspec()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L87"}, {"id": "api_test_schemas_test_creation_json_round_trip_preserves_lims_project_subfields", "label": "test_creation_json_round_trip_preserves_lims_project_subfields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L94"}, {"id": "api_test_schemas_test_creation_json_round_trip_preserves_plugins_applied_with_isolation", "label": "test_creation_json_round_trip_preserves_plugins_applied_with_isolation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L110"}, {"id": "api_test_schemas_test_creation_json_round_trip_preserves_orchestrator_block", "label": "test_creation_json_round_trip_preserves_orchestrator_block()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L131"}, {"id": "api_test_schemas_test_creation_json_orchestrator_block_omitted_when_none", "label": "test_creation_json_orchestrator_block_omitted_when_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L144"}, {"id": "api_test_schemas_test_orchestrator_block_carries_relay_discovery_field", "label": "test_orchestrator_block_carries_relay_discovery_field()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L151"}, {"id": "api_test_schemas_test_orchestrator_block_relay_field_defaults_to_none", "label": "test_orchestrator_block_relay_field_defaults_to_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L170"}, {"id": "api_test_schemas_test_creation_json_default_sync_status_is_pending", "label": "test_creation_json_default_sync_status_is_pending()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L183"}, {"id": "api_test_schemas_test_creation_json_default_validation_overrides_is_empty_list", "label": "test_creation_json_default_validation_overrides_is_empty_list()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L188"}, {"id": "api_test_schemas_test_creation_json_missing_required_field_raises", "label": "test_creation_json_missing_required_field_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L198"}, {"id": "api_test_schemas_test_creation_json_missing_lims_project_raises", "label": "test_creation_json_missing_lims_project_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L206"}, {"id": "api_test_schemas_test_creation_json_unknown_field_is_ignored_on_decode", "label": "test_creation_json_unknown_field_is_ignored_on_decode()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L232"}, {"id": "api_test_schemas_test_override_entry_to_dict_emits_revoked_field_explicitly", "label": "test_override_entry_to_dict_emits_revoked_field_explicitly()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L268"}, {"id": "api_test_schemas_test_tombstone_entry_to_dict_emits_revoked_field_explicitly", "label": "test_tombstone_entry_to_dict_emits_revoked_field_explicitly()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L283"}, {"id": "api_test_schemas_test_parse_validation_override_entry_returns_override_for_revoked_false", "label": "test_parse_validation_override_entry_returns_override_for_revoked_false()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L296"}, {"id": "api_test_schemas_test_parse_validation_override_entry_returns_tombstone_for_revoked_true", "label": "test_parse_validation_override_entry_returns_tombstone_for_revoked_true()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L311"}, {"id": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "label": "test_creation_json_decodes_validation_overrides_as_list_of_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L326"}, {"id": "api_test_schemas_test_readme_fields_json_round_trips", "label": "test_readme_fields_json_round_trips()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L363"}, {"id": "api_test_schemas_test_readme_fields_json_optional_fields_default_to_empty", "label": "test_readme_fields_json_optional_fields_default_to_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L379"}, {"id": "api_test_schemas_test_readme_fields_json_round_trip_preserves_custom_fields", "label": "test_readme_fields_json_round_trip_preserves_custom_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L391"}, {"id": "api_test_schemas_test_readme_fields_json_missing_required_field_raises", "label": "test_readme_fields_json_missing_required_field_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L410"}, {"id": "api_test_schemas_test_equipment_json_round_trips", "label": "test_equipment_json_round_trips()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L422"}, {"id": "api_test_schemas_test_equipment_json_missing_required_field_raises", "label": "test_equipment_json_missing_required_field_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L437"}, {"id": "api_test_schemas_test_test_runs_json_round_trips", "label": "test_test_runs_json_round_trips()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L449"}, {"id": "api_test_schemas_test_test_runs_json_missing_required_field_raises", "label": "test_test_runs_json_missing_required_field_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L462"}, {"id": "api_test_schemas_creation_json_payload", "label": "_creation_json_payload()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L478"}, {"id": "api_test_schemas_test_strenum_field_round_trip_preserves_wire_format", "label": "test_strenum_field_round_trip_preserves_wire_format()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L556"}, {"id": "api_test_schemas_test_lims_project_block_source_round_trip", "label": "test_lims_project_block_source_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L601"}, {"id": "api_test_schemas_test_template_block_run_scope_round_trip", "label": "test_template_block_run_scope_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L633"}, {"id": "api_test_schemas_test_plugin_applied_status_round_trip", "label": "test_plugin_applied_status_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L659"}, {"id": "api_test_schemas_test_test_runs_json_default_run_kind_serializes_as_test", "label": "test_test_runs_json_default_run_kind_serializes_as_test()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L675"}, {"id": "api_test_schemas_test_test_runs_json_explicit_run_kind_round_trips", "label": "test_test_runs_json_explicit_run_kind_round_trips()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L692"}, {"id": "api_test_schemas_test_creation_json_default_sync_status_omitted_on_encode", "label": "test_creation_json_default_sync_status_omitted_on_encode()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L706"}, {"id": "api_test_schemas_test_lims_project_block_default_source_omitted_on_encode", "label": "test_lims_project_block_default_source_omitted_on_encode()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L716"}, {"id": "api_test_schemas_test_lims_project_status_round_trip", "label": "test_lims_project_status_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L747"}, {"id": "api_test_schemas_rationale_1", "label": "Tests for the msgspec.Struct cache-file types in ``exlab_wizard.api.schemas``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L1"}, {"id": "api_test_schemas_rationale_54", "label": "Build a minimal valid CreationJson at the current version for round-trip tests.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L54"}, {"id": "api_test_schemas_rationale_145", "label": "Spec \u00a711.3: orchestrator is *absent* (not null) in single-equipment mode.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L145"}, {"id": "api_test_schemas_rationale_152", "label": "Redesign \u00a73.3: pushed creation.json carries the equipment label so the orche", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L152"}, {"id": "api_test_schemas_rationale_171", "label": "Older creation.json files (no relay field) decode cleanly.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L171"}, {"id": "api_test_schemas_rationale_207", "label": "``lims_project`` is required at the project- and run-levels for v1.8.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L207"}, {"id": "api_test_schemas_rationale_233", "label": "forbid_unknown_fields=False -- unknown fields are silently dropped at decode", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L233"}, {"id": "api_test_schemas_rationale_269", "label": "Spec \u00a711.3: ``revoked`` is required on every entry. ``omit_defaults`` would", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L269"}, {"id": "api_test_schemas_rationale_479", "label": "Build a minimal valid creation.json JSON document for round-trip tests.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L479"}, {"id": "api_test_schemas_rationale_563", "label": "Decode an old-format JSON document (bare string at ``field``) into the typed", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L563"}, {"id": "api_test_schemas_rationale_676", "label": "The ``run_kind`` default switched from bare ``\"test\"`` to ``RunKind.TEST``;", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L676"}, {"id": "api_test_schemas_rationale_707", "label": "``SyncStatus.PENDING`` is the declared default; ``omit_defaults=True`` drops", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L707"}, {"id": "api_test_schemas_rationale_717", "label": "``LIMSProjectSource.LIVE`` is the declared default; ``omit_defaults=True`` d", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L717"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_minimal_creation_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_creation_json_round_trips_through_msgspec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L87", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_creation_json_round_trip_preserves_lims_project_subfields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L94", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_creation_json_round_trip_preserves_plugins_applied_with_isolation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L110", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_creation_json_round_trip_preserves_orchestrator_block", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L131", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_creation_json_orchestrator_block_omitted_when_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L144", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_orchestrator_block_carries_relay_discovery_field", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L151", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_orchestrator_block_relay_field_defaults_to_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L170", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_creation_json_default_sync_status_is_pending", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L183", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_creation_json_default_validation_overrides_is_empty_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L188", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_creation_json_missing_required_field_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L198", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_creation_json_missing_lims_project_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L206", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_creation_json_unknown_field_is_ignored_on_decode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L232", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_override_entry_to_dict_emits_revoked_field_explicitly", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L268", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_tombstone_entry_to_dict_emits_revoked_field_explicitly", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L283", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_parse_validation_override_entry_returns_override_for_revoked_false", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L296", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_parse_validation_override_entry_returns_tombstone_for_revoked_true", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L311", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L326", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_readme_fields_json_round_trips", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L363", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_readme_fields_json_optional_fields_default_to_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L379", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_readme_fields_json_round_trip_preserves_custom_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L391", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_readme_fields_json_missing_required_field_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L410", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_equipment_json_round_trips", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L422", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_equipment_json_missing_required_field_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L437", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_test_runs_json_round_trips", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L449", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_test_runs_json_missing_required_field_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L462", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_creation_json_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L478", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_strenum_field_round_trip_preserves_wire_format", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L556", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_lims_project_block_source_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L601", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_template_block_run_scope_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L633", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_plugin_applied_status_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L659", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_test_runs_json_default_run_kind_serializes_as_test", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L675", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_test_runs_json_explicit_run_kind_round_trips", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L692", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_creation_json_default_sync_status_omitted_on_encode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L706", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_lims_project_block_default_source_omitted_on_encode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L716", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "target": "api_test_schemas_test_lims_project_status_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L747", "weight": 1.0}, {"source": "api_test_schemas_test_creation_json_round_trips_through_msgspec", "target": "api_test_schemas_minimal_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L88", "weight": 1.0}, {"source": "api_test_schemas_test_creation_json_round_trip_preserves_lims_project_subfields", "target": "api_test_schemas_minimal_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L95", "weight": 1.0}, {"source": "api_test_schemas_test_creation_json_round_trip_preserves_plugins_applied_with_isolation", "target": "api_test_schemas_minimal_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L111", "weight": 1.0}, {"source": "api_test_schemas_test_creation_json_round_trip_preserves_orchestrator_block", "target": "api_test_schemas_minimal_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L132", "weight": 1.0}, {"source": "api_test_schemas_test_creation_json_orchestrator_block_omitted_when_none", "target": "api_test_schemas_minimal_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L146", "weight": 1.0}, {"source": "api_test_schemas_test_orchestrator_block_carries_relay_discovery_field", "target": "api_test_schemas_minimal_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L156", "weight": 1.0}, {"source": "api_test_schemas_test_orchestrator_block_relay_field_defaults_to_none", "target": "api_test_schemas_minimal_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L172", "weight": 1.0}, {"source": "api_test_schemas_test_creation_json_default_sync_status_is_pending", "target": "api_test_schemas_minimal_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L184", "weight": 1.0}, {"source": "api_test_schemas_test_creation_json_default_validation_overrides_is_empty_list", "target": "api_test_schemas_minimal_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L189", "weight": 1.0}, {"source": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "target": "api_test_schemas_minimal_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L327", "weight": 1.0}, {"source": "api_test_schemas_test_creation_json_default_sync_status_omitted_on_encode", "target": "api_test_schemas_minimal_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L709", "weight": 1.0}, {"source": "api_test_schemas_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_api_test_schemas_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L1", "weight": 1.0}, {"source": "api_test_schemas_rationale_54", "target": "api_test_schemas_minimal_creation_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L54", "weight": 1.0}, {"source": "api_test_schemas_rationale_145", "target": "api_test_schemas_test_creation_json_orchestrator_block_omitted_when_none", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L145", "weight": 1.0}, {"source": "api_test_schemas_rationale_152", "target": "api_test_schemas_test_orchestrator_block_carries_relay_discovery_field", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L152", "weight": 1.0}, {"source": "api_test_schemas_rationale_171", "target": "api_test_schemas_test_orchestrator_block_relay_field_defaults_to_none", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L171", "weight": 1.0}, {"source": "api_test_schemas_rationale_207", "target": "api_test_schemas_test_creation_json_missing_lims_project_raises", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L207", "weight": 1.0}, {"source": "api_test_schemas_rationale_233", "target": "api_test_schemas_test_creation_json_unknown_field_is_ignored_on_decode", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L233", "weight": 1.0}, {"source": "api_test_schemas_rationale_269", "target": "api_test_schemas_test_override_entry_to_dict_emits_revoked_field_explicitly", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L269", "weight": 1.0}, {"source": "api_test_schemas_rationale_479", "target": "api_test_schemas_creation_json_payload", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L479", "weight": 1.0}, {"source": "api_test_schemas_rationale_563", "target": "api_test_schemas_test_strenum_field_round_trip_preserves_wire_format", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L563", "weight": 1.0}, {"source": "api_test_schemas_rationale_676", "target": "api_test_schemas_test_test_runs_json_default_run_kind_serializes_as_test", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L676", "weight": 1.0}, {"source": "api_test_schemas_rationale_707", "target": "api_test_schemas_test_creation_json_default_sync_status_omitted_on_encode", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L707", "weight": 1.0}, {"source": "api_test_schemas_rationale_717", "target": "api_test_schemas_test_lims_project_block_default_source_omitted_on_encode", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L717", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_test_schemas_minimal_creation_json", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L55"}, {"caller_nid": "api_test_schemas_minimal_creation_json", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L61"}, {"caller_nid": "api_test_schemas_minimal_creation_json", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L66"}, {"caller_nid": "api_test_schemas_minimal_creation_json", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L73"}, {"caller_nid": "api_test_schemas_minimal_creation_json", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L78"}, {"caller_nid": "api_test_schemas_minimal_creation_json", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L79"}, {"caller_nid": "api_test_schemas_test_creation_json_round_trips_through_msgspec", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L89"}, {"caller_nid": "api_test_schemas_test_creation_json_round_trips_through_msgspec", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L90"}, {"caller_nid": "api_test_schemas_test_creation_json_round_trip_preserves_lims_project_subfields", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L96"}, {"caller_nid": "api_test_schemas_test_creation_json_round_trip_preserves_lims_project_subfields", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L104"}, {"caller_nid": "api_test_schemas_test_creation_json_round_trip_preserves_lims_project_subfields", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L105"}, {"caller_nid": "api_test_schemas_test_creation_json_round_trip_preserves_plugins_applied_with_isolation", "callee": "PluginApplied", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L113"}, {"caller_nid": "api_test_schemas_test_creation_json_round_trip_preserves_plugins_applied_with_isolation", "callee": "PluginIsolation", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L118"}, {"caller_nid": "api_test_schemas_test_creation_json_round_trip_preserves_plugins_applied_with_isolation", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L122"}, {"caller_nid": "api_test_schemas_test_creation_json_round_trip_preserves_plugins_applied_with_isolation", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L123"}, {"caller_nid": "api_test_schemas_test_creation_json_round_trip_preserves_plugins_applied_with_isolation", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L124"}, {"caller_nid": "api_test_schemas_test_creation_json_round_trip_preserves_orchestrator_block", "callee": "OrchestratorBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L133"}, {"caller_nid": "api_test_schemas_test_creation_json_round_trip_preserves_orchestrator_block", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L137"}, {"caller_nid": "api_test_schemas_test_creation_json_round_trip_preserves_orchestrator_block", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L138"}, {"caller_nid": "api_test_schemas_test_creation_json_orchestrator_block_omitted_when_none", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L147"}, {"caller_nid": "api_test_schemas_test_creation_json_orchestrator_block_omitted_when_none", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L147"}, {"caller_nid": "api_test_schemas_test_orchestrator_block_carries_relay_discovery_field", "callee": "OrchestratorBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L157"}, {"caller_nid": "api_test_schemas_test_orchestrator_block_carries_relay_discovery_field", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L164"}, {"caller_nid": "api_test_schemas_test_orchestrator_block_carries_relay_discovery_field", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L165"}, {"caller_nid": "api_test_schemas_test_orchestrator_block_relay_field_defaults_to_none", "callee": "OrchestratorBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L173"}, {"caller_nid": "api_test_schemas_test_orchestrator_block_relay_field_defaults_to_none", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L177"}, {"caller_nid": "api_test_schemas_test_orchestrator_block_relay_field_defaults_to_none", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L178"}, {"caller_nid": "api_test_schemas_test_creation_json_missing_required_field_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L202"}, {"caller_nid": "api_test_schemas_test_creation_json_missing_required_field_raises", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L203"}, {"caller_nid": "api_test_schemas_test_creation_json_missing_lims_project_raises", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L208"}, {"caller_nid": "api_test_schemas_test_creation_json_missing_lims_project_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L228"}, {"caller_nid": "api_test_schemas_test_creation_json_missing_lims_project_raises", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L229"}, {"caller_nid": "api_test_schemas_test_creation_json_unknown_field_is_ignored_on_decode", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L235"}, {"caller_nid": "api_test_schemas_test_creation_json_unknown_field_is_ignored_on_decode", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L258"}, {"caller_nid": "api_test_schemas_test_override_entry_to_dict_emits_revoked_field_explicitly", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L271"}, {"caller_nid": "api_test_schemas_test_override_entry_to_dict_emits_revoked_field_explicitly", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L278"}, {"caller_nid": "api_test_schemas_test_tombstone_entry_to_dict_emits_revoked_field_explicitly", "callee": "TombstoneEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L284"}, {"caller_nid": "api_test_schemas_test_tombstone_entry_to_dict_emits_revoked_field_explicitly", "callee": "tombstone_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L291"}, {"caller_nid": "api_test_schemas_test_parse_validation_override_entry_returns_override_for_revoked_false", "callee": "parse_validation_override_entry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L297"}, {"caller_nid": "api_test_schemas_test_parse_validation_override_entry_returns_override_for_revoked_false", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L307"}, {"caller_nid": "api_test_schemas_test_parse_validation_override_entry_returns_tombstone_for_revoked_true", "callee": "parse_validation_override_entry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L312"}, {"caller_nid": "api_test_schemas_test_parse_validation_override_entry_returns_tombstone_for_revoked_true", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L322"}, {"caller_nid": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L329"}, {"caller_nid": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L330"}, {"caller_nid": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "callee": "tombstone_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L338"}, {"caller_nid": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "callee": "TombstoneEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L339"}, {"caller_nid": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L349"}, {"caller_nid": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L350"}, {"caller_nid": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L351"}, {"caller_nid": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "callee": "parse_validation_override_entry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L352"}, {"caller_nid": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "callee": "parse_validation_override_entry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L353"}, {"caller_nid": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L354"}, {"caller_nid": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L355"}, {"caller_nid": "api_test_schemas_test_readme_fields_json_round_trips", "callee": "ReadmeFieldsJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L364"}, {"caller_nid": "api_test_schemas_test_readme_fields_json_round_trips", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L374"}, {"caller_nid": "api_test_schemas_test_readme_fields_json_round_trips", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L375"}, {"caller_nid": "api_test_schemas_test_readme_fields_json_optional_fields_default_to_empty", "callee": "ReadmeFieldsJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L380"}, {"caller_nid": "api_test_schemas_test_readme_fields_json_round_trip_preserves_custom_fields", "callee": "ReadmeFieldsJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L392"}, {"caller_nid": "api_test_schemas_test_readme_fields_json_round_trip_preserves_custom_fields", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L402"}, {"caller_nid": "api_test_schemas_test_readme_fields_json_round_trip_preserves_custom_fields", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L403"}, {"caller_nid": "api_test_schemas_test_readme_fields_json_missing_required_field_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L413"}, {"caller_nid": "api_test_schemas_test_readme_fields_json_missing_required_field_raises", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L414"}, {"caller_nid": "api_test_schemas_test_equipment_json_round_trips", "callee": "EquipmentJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L423"}, {"caller_nid": "api_test_schemas_test_equipment_json_round_trips", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L432"}, {"caller_nid": "api_test_schemas_test_equipment_json_round_trips", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L433"}, {"caller_nid": "api_test_schemas_test_equipment_json_missing_required_field_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L440"}, {"caller_nid": "api_test_schemas_test_equipment_json_missing_required_field_raises", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L441"}, {"caller_nid": "api_test_schemas_test_test_runs_json_round_trips", "callee": "RunsTestMarkerJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L450"}, {"caller_nid": "api_test_schemas_test_test_runs_json_round_trips", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L456"}, {"caller_nid": "api_test_schemas_test_test_runs_json_round_trips", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L457"}, {"caller_nid": "api_test_schemas_test_test_runs_json_missing_required_field_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L465"}, {"caller_nid": "api_test_schemas_test_test_runs_json_missing_required_field_raises", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L466"}, {"caller_nid": "api_test_schemas_creation_json_payload", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L502"}, {"caller_nid": "api_test_schemas_creation_json_payload", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L503"}, {"caller_nid": "api_test_schemas_test_strenum_field_round_trip_preserves_wire_format", "callee": "build_payload", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L567"}, {"caller_nid": "api_test_schemas_test_strenum_field_round_trip_preserves_wire_format", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L568"}, {"caller_nid": "api_test_schemas_test_strenum_field_round_trip_preserves_wire_format", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L569"}, {"caller_nid": "api_test_schemas_test_strenum_field_round_trip_preserves_wire_format", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L572"}, {"caller_nid": "api_test_schemas_test_strenum_field_round_trip_preserves_wire_format", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L573"}, {"caller_nid": "api_test_schemas_test_lims_project_block_source_round_trip", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L604"}, {"caller_nid": "api_test_schemas_test_lims_project_block_source_round_trip", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L612"}, {"caller_nid": "api_test_schemas_test_lims_project_block_source_round_trip", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L615"}, {"caller_nid": "api_test_schemas_test_template_block_run_scope_round_trip", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L634"}, {"caller_nid": "api_test_schemas_test_template_block_run_scope_round_trip", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L642"}, {"caller_nid": "api_test_schemas_test_template_block_run_scope_round_trip", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L645"}, {"caller_nid": "api_test_schemas_test_template_block_run_scope_round_trip", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L646"}, {"caller_nid": "api_test_schemas_test_plugin_applied_status_round_trip", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L660"}, {"caller_nid": "api_test_schemas_test_plugin_applied_status_round_trip", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L668"}, {"caller_nid": "api_test_schemas_test_plugin_applied_status_round_trip", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L671"}, {"caller_nid": "api_test_schemas_test_plugin_applied_status_round_trip", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L672"}, {"caller_nid": "api_test_schemas_test_test_runs_json_default_run_kind_serializes_as_test", "callee": "RunsTestMarkerJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L680"}, {"caller_nid": "api_test_schemas_test_test_runs_json_default_run_kind_serializes_as_test", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L686"}, {"caller_nid": "api_test_schemas_test_test_runs_json_default_run_kind_serializes_as_test", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L688"}, {"caller_nid": "api_test_schemas_test_test_runs_json_explicit_run_kind_round_trips", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L693"}, {"caller_nid": "api_test_schemas_test_test_runs_json_explicit_run_kind_round_trips", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L702"}, {"caller_nid": "api_test_schemas_test_creation_json_default_sync_status_omitted_on_encode", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L710"}, {"caller_nid": "api_test_schemas_test_creation_json_default_sync_status_omitted_on_encode", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L712"}, {"caller_nid": "api_test_schemas_test_lims_project_block_default_source_omitted_on_encode", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L719"}, {"caller_nid": "api_test_schemas_test_lims_project_block_default_source_omitted_on_encode", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L724"}, {"caller_nid": "api_test_schemas_test_lims_project_block_default_source_omitted_on_encode", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L726"}, {"caller_nid": "api_test_schemas_test_lims_project_status_round_trip", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L751"}, {"caller_nid": "api_test_schemas_test_lims_project_status_round_trip", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L761"}, {"caller_nid": "api_test_schemas_test_lims_project_status_round_trip", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L764"}, {"caller_nid": "api_test_schemas_test_lims_project_status_round_trip", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py", "source_location": "L765"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/1a3d4aa334c23aef4db3906fb5f53a50b436a3f705360abd0e17027bc65d09da.json b/graphify-out/cache/ast/1a3d4aa334c23aef4db3906fb5f53a50b436a3f705360abd0e17027bc65d09da.json new file mode 100644 index 0000000..e662bd5 --- /dev/null +++ b/graphify-out/cache/ast/1a3d4aa334c23aef4db3906fb5f53a50b436a3f705360abd0e17027bc65d09da.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "label": "schemas.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L1"}, {"id": "api_schemas_limsprojectblock", "label": "LimsProjectBlock", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L82"}, {"id": "struct", "label": "Struct", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_schemas_templateblock", "label": "TemplateBlock", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L102"}, {"id": "api_schemas_pluginisolation", "label": "PluginIsolation", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L118"}, {"id": "api_schemas_pluginapplied", "label": "PluginApplied", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L130"}, {"id": "api_schemas_pathsblock", "label": "PathsBlock", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L148"}, {"id": "api_schemas_orchestratorblock", "label": "OrchestratorBlock", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L159"}, {"id": "api_schemas_overrideentry", "label": "OverrideEntry", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L190"}, {"id": "api_schemas_tombstoneentry", "label": "TombstoneEntry", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L212"}, {"id": "api_schemas_override_entry_to_dict", "label": "override_entry_to_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L232"}, {"id": "api_schemas_tombstone_entry_to_dict", "label": "tombstone_entry_to_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L242"}, {"id": "api_schemas_parse_validation_override_entry", "label": "parse_validation_override_entry()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L249"}, {"id": "api_schemas_creationjson", "label": "CreationJson", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L271"}, {"id": "api_schemas_readmefieldsjson", "label": "ReadmeFieldsJson", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L309"}, {"id": "api_schemas_equipmentjson", "label": "EquipmentJson", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L330"}, {"id": "api_schemas_testrunsjson", "label": "TestRunsJson", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L351"}, {"id": "api_schemas_rationale_1", "label": "msgspec.Struct types for the ExLab-Wizard cache files. This module is the singl", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L1"}, {"id": "api_schemas_rationale_87", "label": "LIMS-side project identity captured at creation time. Spec \u00a711.3. Required", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L87"}, {"id": "api_schemas_rationale_107", "label": "Template provenance captured at creation time. Spec \u00a711.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L107"}, {"id": "api_schemas_rationale_123", "label": "Plugin worker isolation telemetry. Spec \u00a76.2.4 / \u00a711.3 (added 1.3).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L123"}, {"id": "api_schemas_rationale_135", "label": "Per-plugin invocation record written into ``plugins_applied``. Spec \u00a76.2.4", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L135"}, {"id": "api_schemas_rationale_153", "label": "Resolved on-disk paths captured at creation time. Spec \u00a711.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L153"}, {"id": "api_schemas_rationale_164", "label": "Orchestrator-mode metadata. Spec \u00a711.3 / \u00a713 / Redesign Spec \u00a73.3. Always p", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L164"}, {"id": "api_schemas_rationale_195", "label": "Operator-recorded validation override entry. Spec \u00a711.3. ``revoked`` is ``F", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L195"}, {"id": "api_schemas_rationale_217", "label": "Tombstone entry that revokes a prior override by ``id``. Spec \u00a711.3. ``revo", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L217"}, {"id": "api_schemas_rationale_233", "label": "Serialize an ``OverrideEntry`` to a wire-form dict. Uses ``msgspec.structs.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L233"}, {"id": "api_schemas_rationale_243", "label": "Serialize a ``TombstoneEntry`` to a wire-form dict. Mirrors ``override_entry", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L243"}, {"id": "api_schemas_rationale_252", "label": "Inspect ``entry[\"revoked\"]`` and ``entry[\"revokes\"]`` to decide which Struct", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L252"}, {"id": "api_schemas_rationale_276", "label": "Top-level ``creation.json`` payload at schema version 1.8. Reading: ``msgsp", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L276"}, {"id": "api_schemas_rationale_314", "label": "``readme_fields.json`` at schema version 1.1. Spec \u00a711.4.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L314"}, {"id": "api_schemas_rationale_335", "label": "``equipment.json`` at schema version 1.0. Spec \u00a711.4.1.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L335"}, {"id": "api_schemas_rationale_356", "label": "``test_runs.json`` marker at schema version 1.0. Spec \u00a711.4.2. Filename ret", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L356"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "msgspec", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "msgspec", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "msgspec", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "exlab_wizard_cache_sync_state_schema", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_limsprojectblock", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L82", "weight": 1.0}, {"source": "api_schemas_limsprojectblock", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L82", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_templateblock", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L102", "weight": 1.0}, {"source": "api_schemas_templateblock", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L102", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_pluginisolation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L118", "weight": 1.0}, {"source": "api_schemas_pluginisolation", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L118", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_pluginapplied", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L130", "weight": 1.0}, {"source": "api_schemas_pluginapplied", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L130", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_pathsblock", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L148", "weight": 1.0}, {"source": "api_schemas_pathsblock", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L148", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_orchestratorblock", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L159", "weight": 1.0}, {"source": "api_schemas_orchestratorblock", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L159", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_overrideentry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L190", "weight": 1.0}, {"source": "api_schemas_overrideentry", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L190", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_tombstoneentry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L212", "weight": 1.0}, {"source": "api_schemas_tombstoneentry", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L212", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_override_entry_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L232", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_tombstone_entry_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L242", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_parse_validation_override_entry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L249", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_creationjson", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L271", "weight": 1.0}, {"source": "api_schemas_creationjson", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L271", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_readmefieldsjson", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L309", "weight": 1.0}, {"source": "api_schemas_readmefieldsjson", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L309", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_equipmentjson", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L330", "weight": 1.0}, {"source": "api_schemas_equipmentjson", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L330", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "target": "api_schemas_testrunsjson", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L351", "weight": 1.0}, {"source": "api_schemas_testrunsjson", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L351", "weight": 1.0}, {"source": "api_schemas_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_schemas_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L1", "weight": 1.0}, {"source": "api_schemas_rationale_87", "target": "api_schemas_limsprojectblock", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L87", "weight": 1.0}, {"source": "api_schemas_rationale_107", "target": "api_schemas_templateblock", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L107", "weight": 1.0}, {"source": "api_schemas_rationale_123", "target": "api_schemas_pluginisolation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L123", "weight": 1.0}, {"source": "api_schemas_rationale_135", "target": "api_schemas_pluginapplied", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L135", "weight": 1.0}, {"source": "api_schemas_rationale_153", "target": "api_schemas_pathsblock", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L153", "weight": 1.0}, {"source": "api_schemas_rationale_164", "target": "api_schemas_orchestratorblock", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L164", "weight": 1.0}, {"source": "api_schemas_rationale_195", "target": "api_schemas_overrideentry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L195", "weight": 1.0}, {"source": "api_schemas_rationale_217", "target": "api_schemas_tombstoneentry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L217", "weight": 1.0}, {"source": "api_schemas_rationale_233", "target": "api_schemas_override_entry_to_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L233", "weight": 1.0}, {"source": "api_schemas_rationale_243", "target": "api_schemas_tombstone_entry_to_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L243", "weight": 1.0}, {"source": "api_schemas_rationale_252", "target": "api_schemas_parse_validation_override_entry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L252", "weight": 1.0}, {"source": "api_schemas_rationale_276", "target": "api_schemas_creationjson", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L276", "weight": 1.0}, {"source": "api_schemas_rationale_314", "target": "api_schemas_readmefieldsjson", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L314", "weight": 1.0}, {"source": "api_schemas_rationale_335", "target": "api_schemas_equipmentjson", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L335", "weight": 1.0}, {"source": "api_schemas_rationale_356", "target": "api_schemas_testrunsjson", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L356", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_schemas_override_entry_to_dict", "callee": "asdict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L239"}, {"caller_nid": "api_schemas_tombstone_entry_to_dict", "callee": "asdict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L246"}, {"caller_nid": "api_schemas_parse_validation_override_entry", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L260"}, {"caller_nid": "api_schemas_parse_validation_override_entry", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L260"}, {"caller_nid": "api_schemas_parse_validation_override_entry", "callee": "convert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L262"}, {"caller_nid": "api_schemas_parse_validation_override_entry", "callee": "convert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py", "source_location": "L263"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/1ac8fb713a9bfe5dadd19bf1c1105e4bad2f43d87c8feaec3f45690047f945eb.json b/graphify-out/cache/ast/1ac8fb713a9bfe5dadd19bf1c1105e4bad2f43d87c8feaec3f45690047f945eb.json new file mode 100644 index 0000000..190b5f5 --- /dev/null +++ b/graphify-out/cache/ast/1ac8fb713a9bfe5dadd19bf1c1105e4bad2f43d87c8feaec3f45690047f945eb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "label": "test_patterns.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L1"}, {"id": "constants_test_patterns_test_equipment_id_regex_literal", "label": "test_equipment_id_regex_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L19"}, {"id": "constants_test_patterns_test_equipment_id_pattern_is_compiled", "label": "test_equipment_id_pattern_is_compiled()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L23"}, {"id": "constants_test_patterns_test_equipment_id_pattern_accepts_valid_ids", "label": "test_equipment_id_pattern_accepts_valid_ids()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L28"}, {"id": "constants_test_patterns_test_equipment_id_pattern_rejects_invalid_ids", "label": "test_equipment_id_pattern_rejects_invalid_ids()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L41"}, {"id": "constants_test_patterns_test_equipment_id_max_length", "label": "test_equipment_id_max_length()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L56"}, {"id": "constants_test_patterns_test_placeholder_angle_bracket_regex_literal", "label": "test_placeholder_angle_bracket_regex_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L66"}, {"id": "constants_test_patterns_test_placeholder_angle_bracket_pattern_finds_tokens", "label": "test_placeholder_angle_bracket_pattern_finds_tokens()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L70"}, {"id": "constants_test_patterns_test_placeholder_angle_bracket_pattern_ignores_non_tokens", "label": "test_placeholder_angle_bracket_pattern_ignores_non_tokens()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L76"}, {"id": "constants_test_patterns_test_placeholder_jinja_var_regex_literal", "label": "test_placeholder_jinja_var_regex_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L83"}, {"id": "constants_test_patterns_test_placeholder_jinja_var_pattern_finds_markers", "label": "test_placeholder_jinja_var_pattern_finds_markers()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L87"}, {"id": "constants_test_patterns_test_placeholder_jinja_var_pattern_ignores_plain_text", "label": "test_placeholder_jinja_var_pattern_ignores_plain_text()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L93"}, {"id": "constants_test_patterns_test_placeholder_jinja_block_regex_literal", "label": "test_placeholder_jinja_block_regex_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L98"}, {"id": "constants_test_patterns_test_placeholder_jinja_block_pattern_finds_blocks", "label": "test_placeholder_jinja_block_pattern_finds_blocks()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L102"}, {"id": "constants_test_patterns_test_placeholder_jinja_block_pattern_ignores_unrelated_content", "label": "test_placeholder_jinja_block_pattern_ignores_unrelated_content()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L108"}, {"id": "constants_test_patterns_test_project_short_id_regex_literal", "label": "test_project_short_id_regex_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L117"}, {"id": "constants_test_patterns_test_project_short_id_pattern_accepts", "label": "test_project_short_id_pattern_accepts()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L121"}, {"id": "constants_test_patterns_test_project_short_id_pattern_rejects", "label": "test_project_short_id_pattern_rejects()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L126"}, {"id": "constants_test_patterns_test_template_question_id_regex_literal", "label": "test_template_question_id_regex_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L137"}, {"id": "constants_test_patterns_test_template_question_id_pattern_accepts", "label": "test_template_question_id_pattern_accepts()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L141"}, {"id": "constants_test_patterns_test_template_question_id_pattern_rejects", "label": "test_template_question_id_pattern_rejects()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L146"}, {"id": "constants_test_patterns_test_plugin_name_regex_literal", "label": "test_plugin_name_regex_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L156"}, {"id": "constants_test_patterns_test_plugin_name_pattern_accepts", "label": "test_plugin_name_pattern_accepts()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L160"}, {"id": "constants_test_patterns_test_plugin_name_pattern_rejects", "label": "test_plugin_name_pattern_rejects()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L165"}, {"id": "constants_test_patterns_test_run_date_strftime_literal", "label": "test_run_date_strftime_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L175"}, {"id": "constants_test_patterns_test_run_date_strftime_round_trip", "label": "test_run_date_strftime_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L181"}, {"id": "constants_test_patterns_test_run_dir_prefix_literal", "label": "test_run_dir_prefix_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L193"}, {"id": "constants_test_patterns_test_test_run_dir_prefix_literal", "label": "test_test_run_dir_prefix_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L197"}, {"id": "constants_test_patterns_test_test_runs_dir_name_literal", "label": "test_test_runs_dir_name_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L201"}, {"id": "constants_test_patterns_test_windows_reserved_names_membership", "label": "test_windows_reserved_names_membership()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L210"}, {"id": "constants_test_patterns_test_windows_reserved_names_is_frozenset", "label": "test_windows_reserved_names_is_frozenset()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L220"}, {"id": "constants_test_patterns_test_windows_reserved_names_size", "label": "test_windows_reserved_names_size()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L224"}, {"id": "constants_test_patterns_test_windows_reserved_names_are_uppercase", "label": "test_windows_reserved_names_are_uppercase()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L229"}, {"id": "constants_test_patterns_test_windows_reserved_names_case_insensitive_check", "label": "test_windows_reserved_names_case_insensitive_check()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L236"}, {"id": "constants_test_patterns_test_windows_illegal_chars_literal", "label": "test_windows_illegal_chars_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L248"}, {"id": "constants_test_patterns_test_windows_illegal_chars_membership", "label": "test_windows_illegal_chars_membership()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L253"}, {"id": "constants_test_patterns_test_windows_illegal_chars_excludes_safe", "label": "test_windows_illegal_chars_excludes_safe()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L258"}, {"id": "constants_test_patterns_test_patterns_re_exported_from_package", "label": "test_patterns_re_exported_from_package()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L268"}, {"id": "constants_test_patterns_rationale_1", "label": "Verify the regex literals plus filename-rule constants. Each regex is exercised", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_equipment_id_regex_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_equipment_id_pattern_is_compiled", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_equipment_id_pattern_accepts_valid_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_equipment_id_pattern_rejects_invalid_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_equipment_id_max_length", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_placeholder_angle_bracket_regex_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L66", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_placeholder_angle_bracket_pattern_finds_tokens", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L70", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_placeholder_angle_bracket_pattern_ignores_non_tokens", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_placeholder_jinja_var_regex_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_placeholder_jinja_var_pattern_finds_markers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L87", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_placeholder_jinja_var_pattern_ignores_plain_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_placeholder_jinja_block_regex_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L98", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_placeholder_jinja_block_pattern_finds_blocks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L102", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_placeholder_jinja_block_pattern_ignores_unrelated_content", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L108", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_project_short_id_regex_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L117", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_project_short_id_pattern_accepts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L121", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_project_short_id_pattern_rejects", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L126", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_template_question_id_regex_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L137", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_template_question_id_pattern_accepts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L141", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_template_question_id_pattern_rejects", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L146", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_plugin_name_regex_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L156", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_plugin_name_pattern_accepts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L160", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_plugin_name_pattern_rejects", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L165", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_run_date_strftime_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L175", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_run_date_strftime_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L181", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_run_dir_prefix_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L193", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_test_run_dir_prefix_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L197", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_test_runs_dir_name_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L201", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_windows_reserved_names_membership", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L210", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_windows_reserved_names_is_frozenset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L220", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_windows_reserved_names_size", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L224", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_windows_reserved_names_are_uppercase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L229", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_windows_reserved_names_case_insensitive_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L236", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_windows_illegal_chars_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L248", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_windows_illegal_chars_membership", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L253", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_windows_illegal_chars_excludes_safe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L258", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "target": "constants_test_patterns_test_patterns_re_exported_from_package", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L268", "weight": 1.0}, {"source": "constants_test_patterns_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_constants_test_patterns_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "constants_test_patterns_test_equipment_id_pattern_is_compiled", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L24"}, {"caller_nid": "constants_test_patterns_test_equipment_id_pattern_accepts_valid_ids", "callee": "match", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L38"}, {"caller_nid": "constants_test_patterns_test_equipment_id_pattern_rejects_invalid_ids", "callee": "match", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L53"}, {"caller_nid": "constants_test_patterns_test_placeholder_angle_bracket_pattern_finds_tokens", "callee": "findall", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L72"}, {"caller_nid": "constants_test_patterns_test_placeholder_angle_bracket_pattern_ignores_non_tokens", "callee": "search", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L80"}, {"caller_nid": "constants_test_patterns_test_placeholder_jinja_var_pattern_finds_markers", "callee": "findall", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L89"}, {"caller_nid": "constants_test_patterns_test_placeholder_jinja_var_pattern_ignores_plain_text", "callee": "search", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L94"}, {"caller_nid": "constants_test_patterns_test_placeholder_jinja_var_pattern_ignores_plain_text", "callee": "search", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L95"}, {"caller_nid": "constants_test_patterns_test_placeholder_jinja_block_pattern_finds_blocks", "callee": "findall", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L104"}, {"caller_nid": "constants_test_patterns_test_placeholder_jinja_block_pattern_ignores_unrelated_content", "callee": "search", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L109"}, {"caller_nid": "constants_test_patterns_test_project_short_id_pattern_accepts", "callee": "match", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L123"}, {"caller_nid": "constants_test_patterns_test_project_short_id_pattern_rejects", "callee": "match", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L129"}, {"caller_nid": "constants_test_patterns_test_template_question_id_pattern_accepts", "callee": "match", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L143"}, {"caller_nid": "constants_test_patterns_test_template_question_id_pattern_rejects", "callee": "match", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L148"}, {"caller_nid": "constants_test_patterns_test_plugin_name_pattern_accepts", "callee": "match", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L162"}, {"caller_nid": "constants_test_patterns_test_plugin_name_pattern_rejects", "callee": "match", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L167"}, {"caller_nid": "constants_test_patterns_test_run_date_strftime_round_trip", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L186"}, {"caller_nid": "constants_test_patterns_test_run_date_strftime_round_trip", "callee": "strftime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L187"}, {"caller_nid": "constants_test_patterns_test_run_date_strftime_round_trip", "callee": "strptime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L189"}, {"caller_nid": "constants_test_patterns_test_run_date_strftime_round_trip", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L190"}, {"caller_nid": "constants_test_patterns_test_windows_reserved_names_membership", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L214"}, {"caller_nid": "constants_test_patterns_test_windows_reserved_names_membership", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L215"}, {"caller_nid": "constants_test_patterns_test_windows_reserved_names_is_frozenset", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L221"}, {"caller_nid": "constants_test_patterns_test_windows_reserved_names_size", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L226"}, {"caller_nid": "constants_test_patterns_test_windows_reserved_names_are_uppercase", "callee": "upper", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L233"}, {"caller_nid": "constants_test_patterns_test_windows_reserved_names_case_insensitive_check", "callee": "upper", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L240"}, {"caller_nid": "constants_test_patterns_test_windows_reserved_names_case_insensitive_check", "callee": "upper", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L245"}, {"caller_nid": "constants_test_patterns_test_patterns_re_exported_from_package", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py", "source_location": "L274"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/1ae81254339e9cabc80074d7689a77b1a6aa522dfb880a745acb64680814170e.json b/graphify-out/cache/ast/1ae81254339e9cabc80074d7689a77b1a6aa522dfb880a745acb64680814170e.json new file mode 100644 index 0000000..c42ac7e --- /dev/null +++ b/graphify-out/cache/ast/1ae81254339e9cabc80074d7689a77b1a6aa522dfb880a745acb64680814170e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_ux_catalog_py", "label": "ux_catalog.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/ux_catalog.py", "source_location": "L1"}, {"id": "e2e_ux_catalog_uxinteraction", "label": "UXInteraction", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/ux_catalog.py", "source_location": "L29"}, {"id": "e2e_ux_catalog_rationale_1", "label": "Machine-readable catalog of the wizard's UX interactions. Each :class:`UXIntera", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/ux_catalog.py", "source_location": "L1"}, {"id": "e2e_ux_catalog_rationale_30", "label": "One operator-facing affordance in the wizard UI.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/ux_catalog.py", "source_location": "L30"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_ux_catalog_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/ux_catalog.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_ux_catalog_py", "target": "e2e_ux_catalog_uxinteraction", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/ux_catalog.py", "source_location": "L29", "weight": 1.0}, {"source": "e2e_ux_catalog_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_ux_catalog_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/ux_catalog.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_ux_catalog_rationale_30", "target": "e2e_ux_catalog_uxinteraction", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/ux_catalog.py", "source_location": "L30", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/1af271d1a8078f2f11926c563d80691d5a0cbab2146babaf1fc9ddb36c55abb2.json b/graphify-out/cache/ast/1af271d1a8078f2f11926c563d80691d5a0cbab2146babaf1fc9ddb36c55abb2.json new file mode 100644 index 0000000..5581c02 --- /dev/null +++ b/graphify-out/cache/ast/1af271d1a8078f2f11926c563d80691d5a0cbab2146babaf1fc9ddb36c55abb2.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_base_py", "label": "base.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L1"}, {"id": "plugins_base_filechange", "label": "FileChange", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L53"}, {"id": "plugins_base_plugincontext", "label": "PluginContext", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L73"}, {"id": "plugins_base_plugin", "label": "Plugin", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L96"}, {"id": "abc", "label": "ABC", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "plugins_base_can_handle", "label": "can_handle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L135"}, {"id": "plugins_base_transform", "label": "transform()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L143"}, {"id": "plugins_base_plugin_validate_variables", "label": ".validate_variables()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L153"}, {"id": "plugins_base_plugin_pre_transform_all", "label": ".pre_transform_all()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L170"}, {"id": "plugins_base_plugin_post_transform_all", "label": ".post_transform_all()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L179"}, {"id": "plugins_base_plugin_describe_changes", "label": ".describe_changes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L186"}, {"id": "plugins_base_plugin_on_plugin_failure", "label": ".on_plugin_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L201"}, {"id": "plugins_base_rationale_1", "label": "Plugin contract base class. Backend Spec \u00a76.1. Defines the public surface that", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L1"}, {"id": "plugins_base_rationale_54", "label": "A single mutation a plugin would make. Used by ``describe_changes``. Backen", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L54"}, {"id": "plugins_base_rationale_74", "label": "Read-only context handed to every plugin lifecycle hook. Constructed once p", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L74"}, {"id": "plugins_base_rationale_97", "label": "Abstract base class for all ExLab-Wizard plugins. Backend Spec \u00a76.1.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L97"}, {"id": "plugins_base_rationale_136", "label": "Secondary filter, called after the extension match. Cheap and side-effe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L136"}, {"id": "plugins_base_rationale_144", "label": "Mutate ``file_path`` in place. On unrecoverable failure raise :class:`P", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L144"}, {"id": "plugins_base_rationale_154", "label": "Return a list of error strings; empty list means \"valid\". Default imple", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L154"}, {"id": "plugins_base_rationale_171", "label": "Called once before the file loop. Default: no-op. Use for batch setup t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L171"}, {"id": "plugins_base_rationale_180", "label": "Called once after the file loop. Default: no-op. Symmetric to :meth:`pr", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L180"}, {"id": "plugins_base_rationale_187", "label": "Return the dry-run preview for what ``transform`` would do. Default ret", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L187"}, {"id": "plugins_base_rationale_202", "label": "Called if any prior hook raised. Default: no-op. Use to roll back parti", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L202"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_base_py", "target": "abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_base_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_base_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_base_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_base_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_base_py", "target": "exlab_wizard_plugins_logger", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_base_py", "target": "plugins_base_filechange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_base_py", "target": "plugins_base_plugincontext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L73", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_base_py", "target": "plugins_base_plugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L96", "weight": 1.0}, {"source": "plugins_base_plugin", "target": "abc", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L96", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_base_py", "target": "plugins_base_can_handle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_base_py", "target": "plugins_base_transform", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L143", "weight": 1.0}, {"source": "plugins_base_plugin", "target": "plugins_base_plugin_validate_variables", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L153", "weight": 1.0}, {"source": "plugins_base_plugin", "target": "plugins_base_plugin_pre_transform_all", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L170", "weight": 1.0}, {"source": "plugins_base_plugin", "target": "plugins_base_plugin_post_transform_all", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L179", "weight": 1.0}, {"source": "plugins_base_plugin", "target": "plugins_base_plugin_describe_changes", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L186", "weight": 1.0}, {"source": "plugins_base_plugin", "target": "plugins_base_plugin_on_plugin_failure", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L201", "weight": 1.0}, {"source": "plugins_base_plugin_describe_changes", "target": "plugins_base_filechange", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L194", "weight": 1.0}, {"source": "plugins_base_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_base_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L1", "weight": 1.0}, {"source": "plugins_base_rationale_54", "target": "plugins_base_filechange", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L54", "weight": 1.0}, {"source": "plugins_base_rationale_74", "target": "plugins_base_plugincontext", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L74", "weight": 1.0}, {"source": "plugins_base_rationale_97", "target": "plugins_base_plugin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L97", "weight": 1.0}, {"source": "plugins_base_rationale_136", "target": "plugins_base_plugin_can_handle", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L136", "weight": 1.0}, {"source": "plugins_base_rationale_144", "target": "plugins_base_plugin_transform", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L144", "weight": 1.0}, {"source": "plugins_base_rationale_154", "target": "plugins_base_plugin_validate_variables", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L154", "weight": 1.0}, {"source": "plugins_base_rationale_171", "target": "plugins_base_plugin_pre_transform_all", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L171", "weight": 1.0}, {"source": "plugins_base_rationale_180", "target": "plugins_base_plugin_post_transform_all", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L180", "weight": 1.0}, {"source": "plugins_base_rationale_187", "target": "plugins_base_plugin_describe_changes", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L187", "weight": 1.0}, {"source": "plugins_base_rationale_202", "target": "plugins_base_plugin_on_plugin_failure", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L202", "weight": 1.0}], "raw_calls": [{"caller_nid": "plugins_base_plugin_validate_variables", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py", "source_location": "L167"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/1c1b702e5654648d39127cbe34b9cb91caf7082fbb60111150202f3dfefbe33a.json b/graphify-out/cache/ast/1c1b702e5654648d39127cbe34b9cb91caf7082fbb60111150202f3dfefbe33a.json new file mode 100644 index 0000000..b50ff5c --- /dev/null +++ b/graphify-out/cache/ast/1c1b702e5654648d39127cbe34b9cb91caf7082fbb60111150202f3dfefbe33a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_02_user_interaction_md", "label": "02_User_Interaction.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L1"}, {"id": "design_spec_sections_02_user_interaction_2_user_interaction", "label": "2. User Interaction", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L1"}, {"id": "design_spec_sections_02_user_interaction_table_of_contents", "label": "Table of Contents", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L13"}, {"id": "design_spec_sections_02_user_interaction_1_purpose_and_scope", "label": "1. Purpose and Scope", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L33"}, {"id": "design_spec_sections_02_user_interaction_2_mandatory_core_fields_creation_gate", "label": "2. Mandatory Core Fields (Creation Gate)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L46"}, {"id": "design_spec_sections_02_user_interaction_3_user_capabilities", "label": "3. User Capabilities", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L69"}, {"id": "design_spec_sections_02_user_interaction_3_1_create_a_new_project", "label": "3.1 Create a New Project", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L73"}, {"id": "design_spec_sections_02_user_interaction_3_2_create_a_new_experimental_run", "label": "3.2 Create a New Experimental Run", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L82"}, {"id": "design_spec_sections_02_user_interaction_3_3_create_a_new_test_run", "label": "3.3 Create a New Test Run", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L89"}, {"id": "design_spec_sections_02_user_interaction_3_4_browse_existing_equipment_projects_and_runs", "label": "3.4 Browse Existing Equipment, Projects, and Runs", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L98"}, {"id": "design_spec_sections_02_user_interaction_3_5_author_a_readme_at_creation_time", "label": "3.5 Author a README at Creation Time", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L104"}, {"id": "design_spec_sections_02_user_interaction_3_6_configure_equipment_paths_and_integrations", "label": "3.6 Configure Equipment, Paths, and Integrations", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L112"}, {"id": "design_spec_sections_02_user_interaction_3_7_monitor_orchestrator_staging_orchestrator_mode_only", "label": "3.7 Monitor Orchestrator Staging (Orchestrator Mode Only)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L119"}, {"id": "design_spec_sections_02_user_interaction_3_8_review_and_resolve_naming_and_validation_problems", "label": "3.8 Review and Resolve Naming and Validation Problems", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L125"}, {"id": "design_spec_sections_02_user_interaction_4_mode_invariants_and_safety_boundaries", "label": "4. Mode Invariants and Safety Boundaries", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L144"}, {"id": "design_spec_sections_02_user_interaction_5_validation_order_and_error_surfacing", "label": "5. Validation Order and Error Surfacing", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L157"}, {"id": "design_spec_sections_02_user_interaction_6_user_visible_state_across_surfaces", "label": "6. User-Visible State Across Surfaces", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L172"}, {"id": "design_spec_sections_02_user_interaction_7_pre_sync_gate", "label": "7. Pre-Sync Gate", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L186"}, {"id": "design_spec_sections_02_user_interaction_7_1_what_the_gate_blocks", "label": "7.1 What the gate blocks", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L190"}, {"id": "design_spec_sections_02_user_interaction_7_2_what_the_user_sees", "label": "7.2 What the user sees", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L196"}, {"id": "design_spec_sections_02_user_interaction_7_3_how_the_gate_is_cleared", "label": "7.3 How the gate is cleared", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L202"}, {"id": "design_spec_sections_02_user_interaction_7_4_override_audit_contract", "label": "7.4 Override audit contract", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L211"}, {"id": "design_spec_sections_02_user_interaction_7_5_gate_semantics_on_retroactive_problems", "label": "7.5 Gate semantics on retroactive problems", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L219"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_02_user_interaction_md", "target": "design_spec_sections_02_user_interaction_2_user_interaction", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L1", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_2_user_interaction", "target": "design_spec_sections_02_user_interaction_table_of_contents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L13", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_2_user_interaction", "target": "design_spec_sections_02_user_interaction_1_purpose_and_scope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L33", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_2_user_interaction", "target": "design_spec_sections_02_user_interaction_2_mandatory_core_fields_creation_gate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L46", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_2_user_interaction", "target": "design_spec_sections_02_user_interaction_3_user_capabilities", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L69", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_3_user_capabilities", "target": "design_spec_sections_02_user_interaction_3_1_create_a_new_project", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L73", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_3_user_capabilities", "target": "design_spec_sections_02_user_interaction_3_2_create_a_new_experimental_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L82", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_3_user_capabilities", "target": "design_spec_sections_02_user_interaction_3_3_create_a_new_test_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L89", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_3_user_capabilities", "target": "design_spec_sections_02_user_interaction_3_4_browse_existing_equipment_projects_and_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L98", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_3_user_capabilities", "target": "design_spec_sections_02_user_interaction_3_5_author_a_readme_at_creation_time", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L104", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_3_user_capabilities", "target": "design_spec_sections_02_user_interaction_3_6_configure_equipment_paths_and_integrations", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L112", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_3_user_capabilities", "target": "design_spec_sections_02_user_interaction_3_7_monitor_orchestrator_staging_orchestrator_mode_only", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L119", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_3_user_capabilities", "target": "design_spec_sections_02_user_interaction_3_8_review_and_resolve_naming_and_validation_problems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L125", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_2_user_interaction", "target": "design_spec_sections_02_user_interaction_4_mode_invariants_and_safety_boundaries", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L144", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_2_user_interaction", "target": "design_spec_sections_02_user_interaction_5_validation_order_and_error_surfacing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L157", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_2_user_interaction", "target": "design_spec_sections_02_user_interaction_6_user_visible_state_across_surfaces", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L172", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_2_user_interaction", "target": "design_spec_sections_02_user_interaction_7_pre_sync_gate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L186", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_7_pre_sync_gate", "target": "design_spec_sections_02_user_interaction_7_1_what_the_gate_blocks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L190", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_7_pre_sync_gate", "target": "design_spec_sections_02_user_interaction_7_2_what_the_user_sees", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L196", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_7_pre_sync_gate", "target": "design_spec_sections_02_user_interaction_7_3_how_the_gate_is_cleared", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L202", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_7_pre_sync_gate", "target": "design_spec_sections_02_user_interaction_7_4_override_audit_contract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L211", "weight": 1.0}, {"source": "design_spec_sections_02_user_interaction_7_pre_sync_gate", "target": "design_spec_sections_02_user_interaction_7_5_gate_semantics_on_retroactive_problems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md", "source_location": "L219", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/1d7fea54deba3f4493a238600921ca1671654a958c304d5ebe54df9ff44bb593.json b/graphify-out/cache/ast/1d7fea54deba3f4493a238600921ca1671654a958c304d5ebe54df9ff44bb593.json new file mode 100644 index 0000000..21d0645 --- /dev/null +++ b/graphify-out/cache/ast/1d7fea54deba3f4493a238600921ca1671654a958c304d5ebe54df9ff44bb593.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "label": "dependencies.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L1"}, {"id": "tray_dependencies_build_production_dependencies", "label": "build_production_dependencies()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L47"}, {"id": "tray_dependencies_apply_live_config", "label": "apply_live_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L167"}, {"id": "tray_dependencies_plugin_dir", "label": "_plugin_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L264"}, {"id": "tray_dependencies_lims_identity", "label": "_lims_identity()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L270"}, {"id": "tray_dependencies_refresh_plugin_host_status", "label": "_refresh_plugin_host_status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L282"}, {"id": "tray_dependencies_reload_lims_client", "label": "_reload_lims_client()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L297"}, {"id": "tray_dependencies_reload_nas_sync", "label": "_reload_nas_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L318"}, {"id": "tray_dependencies_reload_quiescence_poller", "label": "_reload_quiescence_poller()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L349"}, {"id": "tray_dependencies_schedule_bringup", "label": "_schedule_bringup()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L377"}, {"id": "tray_dependencies_fire_and_forget", "label": "_fire_and_forget()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L402"}, {"id": "tray_dependencies_try", "label": "_try()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L415"}, {"id": "tray_dependencies_load_config_safely", "label": "_load_config_safely()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L424"}, {"id": "tray_dependencies_make_save_config", "label": "_make_save_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L432"}, {"id": "tray_dependencies_derive_validator_inputs", "label": "_derive_validator_inputs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L442"}, {"id": "tray_dependencies_build_validator", "label": "_build_validator()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L468"}, {"id": "tray_dependencies_build_session_store", "label": "_build_session_store()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L479"}, {"id": "tray_dependencies_build_creation_writer", "label": "_build_creation_writer()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L485"}, {"id": "tray_dependencies_build_equipment_writer", "label": "_build_equipment_writer()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L491"}, {"id": "tray_dependencies_build_template_engine", "label": "_build_template_engine()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L497"}, {"id": "tray_dependencies_build_plugin_host", "label": "_build_plugin_host()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L503"}, {"id": "tray_dependencies_build_controller", "label": "_build_controller()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L525"}, {"id": "tray_dependencies_build_keyring_store", "label": "_build_keyring_store()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L559"}, {"id": "tray_dependencies_lims_keyring_password", "label": "_lims_keyring_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L576"}, {"id": "tray_dependencies_check_keyring_present", "label": "_check_keyring_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L596"}, {"id": "tray_dependencies_build_lims_client", "label": "_build_lims_client()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L606"}, {"id": "tray_dependencies_nas_keyring_password", "label": "_nas_keyring_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L624"}, {"id": "tray_dependencies_check_nas_passwords_present", "label": "_check_nas_passwords_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L643"}, {"id": "tray_dependencies_make_equipment_probe", "label": "_make_equipment_probe()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L667"}, {"id": "tray_dependencies_make_lims_probe", "label": "_make_lims_probe()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L732"}, {"id": "tray_dependencies_build_nas_sync", "label": "_build_nas_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L749"}, {"id": "tray_dependencies_make_nas_sync_snapshot", "label": "_make_nas_sync_snapshot()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L791"}, {"id": "tray_dependencies_build_sync_state_writer", "label": "_build_sync_state_writer()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L803"}, {"id": "tray_dependencies_build_quiescence_poller", "label": "_build_quiescence_poller()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L815"}, {"id": "tray_dependencies_make_autostart_toggle", "label": "_make_autostart_toggle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L848"}, {"id": "tray_dependencies_make_session_store_snapshot", "label": "_make_session_store_snapshot()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L860"}, {"id": "tray_dependencies_rationale_1", "label": "Production :class:`AppDependencies` factory. Backend Spec \u00a74.5, \u00a74.6. The tray", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L1"}, {"id": "tray_dependencies_rationale_48", "label": "Return a populated :class:`AppDependencies` for the live tray. Every per-co", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L48"}, {"id": "tray_dependencies_rationale_168", "label": "Push a freshly saved ``config.yaml`` into the running components. Replaces", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L168"}, {"id": "tray_dependencies_rationale_271", "label": "Return the ``(endpoint, email)`` pair that defines a LIMS client. Trailing", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L271"}, {"id": "tray_dependencies_rationale_283", "label": "Re-derive the plugin-host status counters after a rebuild. Mirrors the boot", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L283"}, {"id": "tray_dependencies_rationale_298", "label": "Rebuild ``deps.lims_client`` for a changed endpoint / email. Builds a fresh", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L298"}, {"id": "tray_dependencies_rationale_319", "label": "Reconfigure the NAS-sync client in place, or build it fresh. Returns ``True", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L319"}, {"id": "tray_dependencies_rationale_350", "label": "Reconfigure the quiescence poller in place, or build it fresh. Returns ``Tr", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L350"}, {"id": "tray_dependencies_rationale_378", "label": "Schedule ``nas_sync.init()`` / ``poller.start()`` on the running loop. Used", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L378"}, {"id": "tray_dependencies_rationale_403", "label": "Run ``coro`` on the running loop, logging failures; no-op if loop-less.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L403"}, {"id": "tray_dependencies_rationale_416", "label": "Run ``fn(*args, **kwargs)`` swallowing exceptions with a WARN log.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L416"}, {"id": "tray_dependencies_rationale_443", "label": "Derive ``(validator_config, equipment_roots, staging_root)`` from config. S", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L443"}, {"id": "tray_dependencies_rationale_560", "label": "Build the LIMS/NAS secret store with an optional fallback passphrase. When", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L560"}, {"id": "tray_dependencies_rationale_577", "label": "Return the stored LIMS password, or ``None`` if absent/unavailable. The cre", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L577"}, {"id": "tray_dependencies_rationale_625", "label": "Return the stored NAS password for ``equipment_id`` or ``None``. The creden", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L625"}, {"id": "tray_dependencies_rationale_644", "label": "Return the set of nas-mode equipment ids that have a keyring entry. Rclone-", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L644"}, {"id": "tray_dependencies_rationale_668", "label": "Build the ``deps.equipment_probe`` callable. Rclone-only NAS sync migration", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L668"}, {"id": "tray_dependencies_rationale_757", "label": "Build the :class:`NASSyncClient` -- the public NAS-sync surface. The client", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L757"}, {"id": "tray_dependencies_rationale_804", "label": "Build the orchestrator-only ``sync_state.json`` writer. Operator-free per-f", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L804"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "exlab_wizard_api_app", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "exlab_wizard_config_loader", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "exlab_wizard_constants_keyring", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "exlab_wizard_tray_autostart", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_build_production_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_apply_live_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L167", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_plugin_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L264", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_lims_identity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L270", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_refresh_plugin_host_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L282", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_reload_lims_client", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L297", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_reload_nas_sync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L318", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_reload_quiescence_poller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L349", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_schedule_bringup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L377", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_fire_and_forget", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L402", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_try", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L415", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_load_config_safely", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L424", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_make_save_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L432", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_derive_validator_inputs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L442", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_build_validator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L468", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_build_session_store", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L479", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_build_creation_writer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L485", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_build_equipment_writer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L491", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_build_template_engine", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L497", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_build_plugin_host", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L503", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_build_controller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L525", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_build_keyring_store", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L559", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_lims_keyring_password", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L576", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_check_keyring_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L596", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_build_lims_client", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L606", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_nas_keyring_password", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L624", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_check_nas_passwords_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L643", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_make_equipment_probe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L667", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_make_lims_probe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L732", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_build_nas_sync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L749", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_make_nas_sync_snapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L791", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_build_sync_state_writer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L803", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_build_quiescence_poller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L815", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_make_autostart_toggle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L848", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "target": "tray_dependencies_make_session_store_snapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L860", "weight": 1.0}, {"source": "tray_dependencies_build_production_dependencies", "target": "tray_dependencies_try", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L60", "weight": 1.0}, {"source": "tray_dependencies_build_production_dependencies", "target": "tray_dependencies_make_save_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L64", "weight": 1.0}, {"source": "tray_dependencies_build_production_dependencies", "target": "tray_dependencies_make_lims_probe", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L103", "weight": 1.0}, {"source": "tray_dependencies_build_production_dependencies", "target": "tray_dependencies_make_nas_sync_snapshot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L120", "weight": 1.0}, {"source": "tray_dependencies_build_production_dependencies", "target": "tray_dependencies_make_autostart_toggle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L130", "weight": 1.0}, {"source": "tray_dependencies_build_production_dependencies", "target": "tray_dependencies_make_equipment_probe", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L152", "weight": 1.0}, {"source": "tray_dependencies_build_production_dependencies", "target": "tray_dependencies_make_session_store_snapshot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L154", "weight": 1.0}, {"source": "tray_dependencies_apply_live_config", "target": "tray_dependencies_try", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L210", "weight": 1.0}, {"source": "tray_dependencies_apply_live_config", "target": "tray_dependencies_derive_validator_inputs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L213", "weight": 1.0}, {"source": "tray_dependencies_apply_live_config", "target": "tray_dependencies_plugin_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L220", "weight": 1.0}, {"source": "tray_dependencies_apply_live_config", "target": "tray_dependencies_refresh_plugin_host_status", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L224", "weight": 1.0}, {"source": "tray_dependencies_apply_live_config", "target": "tray_dependencies_lims_identity", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L227", "weight": 1.0}, {"source": "tray_dependencies_apply_live_config", "target": "tray_dependencies_reload_lims_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L228", "weight": 1.0}, {"source": "tray_dependencies_apply_live_config", "target": "tray_dependencies_reload_nas_sync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L254", "weight": 1.0}, {"source": "tray_dependencies_apply_live_config", "target": "tray_dependencies_reload_quiescence_poller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L255", "weight": 1.0}, {"source": "tray_dependencies_apply_live_config", "target": "tray_dependencies_schedule_bringup", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L257", "weight": 1.0}, {"source": "tray_dependencies_reload_lims_client", "target": "tray_dependencies_try", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L309", "weight": 1.0}, {"source": "tray_dependencies_reload_lims_client", "target": "tray_dependencies_fire_and_forget", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L315", "weight": 1.0}, {"source": "tray_dependencies_reload_nas_sync", "target": "tray_dependencies_try", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L333", "weight": 1.0}, {"source": "tray_dependencies_reload_quiescence_poller", "target": "tray_dependencies_try", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L364", "weight": 1.0}, {"source": "tray_dependencies_schedule_bringup", "target": "tray_dependencies_fire_and_forget", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L399", "weight": 1.0}, {"source": "tray_dependencies_build_validator", "target": "tray_dependencies_derive_validator_inputs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L471", "weight": 1.0}, {"source": "tray_dependencies_check_keyring_present", "target": "tray_dependencies_lims_keyring_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L603", "weight": 1.0}, {"source": "tray_dependencies_check_nas_passwords_present", "target": "tray_dependencies_nas_keyring_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L662", "weight": 1.0}, {"source": "tray_dependencies_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_dependencies_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_dependencies_rationale_48", "target": "tray_dependencies_build_production_dependencies", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L48", "weight": 1.0}, {"source": "tray_dependencies_rationale_168", "target": "tray_dependencies_apply_live_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L168", "weight": 1.0}, {"source": "tray_dependencies_rationale_271", "target": "tray_dependencies_lims_identity", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L271", "weight": 1.0}, {"source": "tray_dependencies_rationale_283", "target": "tray_dependencies_refresh_plugin_host_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L283", "weight": 1.0}, {"source": "tray_dependencies_rationale_298", "target": "tray_dependencies_reload_lims_client", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L298", "weight": 1.0}, {"source": "tray_dependencies_rationale_319", "target": "tray_dependencies_reload_nas_sync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L319", "weight": 1.0}, {"source": "tray_dependencies_rationale_350", "target": "tray_dependencies_reload_quiescence_poller", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L350", "weight": 1.0}, {"source": "tray_dependencies_rationale_378", "target": "tray_dependencies_schedule_bringup", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L378", "weight": 1.0}, {"source": "tray_dependencies_rationale_403", "target": "tray_dependencies_fire_and_forget", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L403", "weight": 1.0}, {"source": "tray_dependencies_rationale_416", "target": "tray_dependencies_try", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L416", "weight": 1.0}, {"source": "tray_dependencies_rationale_443", "target": "tray_dependencies_derive_validator_inputs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L443", "weight": 1.0}, {"source": "tray_dependencies_rationale_560", "target": "tray_dependencies_build_keyring_store", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L560", "weight": 1.0}, {"source": "tray_dependencies_rationale_577", "target": "tray_dependencies_lims_keyring_password", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L577", "weight": 1.0}, {"source": "tray_dependencies_rationale_625", "target": "tray_dependencies_nas_keyring_password", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L625", "weight": 1.0}, {"source": "tray_dependencies_rationale_644", "target": "tray_dependencies_check_nas_passwords_present", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L644", "weight": 1.0}, {"source": "tray_dependencies_rationale_668", "target": "tray_dependencies_make_equipment_probe", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L668", "weight": 1.0}, {"source": "tray_dependencies_rationale_757", "target": "tray_dependencies_build_nas_sync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L757", "weight": 1.0}, {"source": "tray_dependencies_rationale_804", "target": "tray_dependencies_build_sync_state_writer", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L804", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_dependencies_build_production_dependencies", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L57"}, {"caller_nid": "tray_dependencies_build_production_dependencies", "callee": "is_registered", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L134"}, {"caller_nid": "tray_dependencies_build_production_dependencies", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L134"}, {"caller_nid": "tray_dependencies_build_production_dependencies", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L150"}, {"caller_nid": "tray_dependencies_build_production_dependencies", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L157"}, {"caller_nid": "tray_dependencies_build_production_dependencies", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L158"}, {"caller_nid": "tray_dependencies_build_production_dependencies", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L159"}, {"caller_nid": "tray_dependencies_build_production_dependencies", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L159"}, {"caller_nid": "tray_dependencies_apply_live_config", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L192"}, {"caller_nid": "tray_dependencies_apply_live_config", "callee": "configure_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L202"}, {"caller_nid": "tray_dependencies_apply_live_config", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L204"}, {"caller_nid": "tray_dependencies_apply_live_config", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L208"}, {"caller_nid": "tray_dependencies_apply_live_config", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L211"}, {"caller_nid": "tray_dependencies_apply_live_config", "callee": "reconfigure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L214"}, {"caller_nid": "tray_dependencies_apply_live_config", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L216"}, {"caller_nid": "tray_dependencies_apply_live_config", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L232"}, {"caller_nid": "tray_dependencies_apply_live_config", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L241"}, {"caller_nid": "tray_dependencies_apply_live_config", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L243"}, {"caller_nid": "tray_dependencies_apply_live_config", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L245"}, {"caller_nid": "tray_dependencies_apply_live_config", "callee": "apply_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L247"}, {"caller_nid": "tray_dependencies_apply_live_config", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L249"}, {"caller_nid": "tray_dependencies_plugin_dir", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L267"}, {"caller_nid": "tray_dependencies_lims_identity", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L279"}, {"caller_nid": "tray_dependencies_refresh_plugin_host_status", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L289"}, {"caller_nid": "tray_dependencies_refresh_plugin_host_status", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L290"}, {"caller_nid": "tray_dependencies_refresh_plugin_host_status", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L291"}, {"caller_nid": "tray_dependencies_refresh_plugin_host_status", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L291"}, {"caller_nid": "tray_dependencies_reload_lims_client", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L305"}, {"caller_nid": "tray_dependencies_reload_lims_client", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L306"}, {"caller_nid": "tray_dependencies_reload_lims_client", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L314"}, {"caller_nid": "tray_dependencies_reload_lims_client", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L315"}, {"caller_nid": "tray_dependencies_reload_nas_sync", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L325"}, {"caller_nid": "tray_dependencies_reload_nas_sync", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L327"}, {"caller_nid": "tray_dependencies_reload_nas_sync", "callee": "apply_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L329"}, {"caller_nid": "tray_dependencies_reload_nas_sync", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L331"}, {"caller_nid": "tray_dependencies_reload_nas_sync", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L337"}, {"caller_nid": "tray_dependencies_reload_nas_sync", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L338"}, {"caller_nid": "tray_dependencies_reload_nas_sync", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L339"}, {"caller_nid": "tray_dependencies_reload_nas_sync", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L340"}, {"caller_nid": "tray_dependencies_reload_nas_sync", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L341"}, {"caller_nid": "tray_dependencies_reload_quiescence_poller", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L356"}, {"caller_nid": "tray_dependencies_reload_quiescence_poller", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L358"}, {"caller_nid": "tray_dependencies_reload_quiescence_poller", "callee": "apply_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L360"}, {"caller_nid": "tray_dependencies_reload_quiescence_poller", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L362"}, {"caller_nid": "tray_dependencies_reload_quiescence_poller", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L368"}, {"caller_nid": "tray_dependencies_reload_quiescence_poller", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L369"}, {"caller_nid": "tray_dependencies_schedule_bringup", "callee": "_bring_up", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L399"}, {"caller_nid": "tray_dependencies_fire_and_forget", "callee": "get_running_loop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L405"}, {"caller_nid": "tray_dependencies_fire_and_forget", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L407"}, {"caller_nid": "tray_dependencies_fire_and_forget", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L408"}, {"caller_nid": "tray_dependencies_fire_and_forget", "callee": "create_task", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L410"}, {"caller_nid": "tray_dependencies_fire_and_forget", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L411"}, {"caller_nid": "tray_dependencies_fire_and_forget", "callee": "add_done_callback", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L412"}, {"caller_nid": "tray_dependencies_try", "callee": "fn", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L418"}, {"caller_nid": "tray_dependencies_try", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L420"}, {"caller_nid": "tray_dependencies_try", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L420"}, {"caller_nid": "tray_dependencies_load_config_safely", "callee": "os_config_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L425"}, {"caller_nid": "tray_dependencies_load_config_safely", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L426"}, {"caller_nid": "tray_dependencies_load_config_safely", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L427"}, {"caller_nid": "tray_dependencies_load_config_safely", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L429"}, {"caller_nid": "tray_dependencies_make_save_config", "callee": "os_config_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L433"}, {"caller_nid": "tray_dependencies_derive_validator_inputs", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L450"}, {"caller_nid": "tray_dependencies_derive_validator_inputs", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L453"}, {"caller_nid": "tray_dependencies_derive_validator_inputs", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L461"}, {"caller_nid": "tray_dependencies_build_validator", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L472"}, {"caller_nid": "tray_dependencies_build_session_store", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L482"}, {"caller_nid": "tray_dependencies_build_creation_writer", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L488"}, {"caller_nid": "tray_dependencies_build_equipment_writer", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L494"}, {"caller_nid": "tray_dependencies_build_template_engine", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L500"}, {"caller_nid": "tray_dependencies_build_plugin_host", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L508"}, {"caller_nid": "tray_dependencies_build_plugin_host", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L510"}, {"caller_nid": "tray_dependencies_build_plugin_host", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L511"}, {"caller_nid": "tray_dependencies_build_plugin_host", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L512"}, {"caller_nid": "tray_dependencies_build_plugin_host", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L513"}, {"caller_nid": "tray_dependencies_build_plugin_host", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L513"}, {"caller_nid": "tray_dependencies_build_plugin_host", "callee": "PluginHost", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L522"}, {"caller_nid": "tray_dependencies_build_plugin_host", "callee": "_RegistryAdapter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L522"}, {"caller_nid": "tray_dependencies_build_controller", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L537"}, {"caller_nid": "tray_dependencies_build_controller", "callee": "CreationController", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L541"}, {"caller_nid": "tray_dependencies_build_controller", "callee": "ReadmeGenerator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L549"}, {"caller_nid": "tray_dependencies_build_keyring_store", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L571"}, {"caller_nid": "tray_dependencies_build_keyring_store", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L573"}, {"caller_nid": "tray_dependencies_lims_keyring_password", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L588"}, {"caller_nid": "tray_dependencies_lims_keyring_password", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L591"}, {"caller_nid": "tray_dependencies_lims_keyring_password", "callee": "getter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L592"}, {"caller_nid": "tray_dependencies_check_keyring_present", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L601"}, {"caller_nid": "tray_dependencies_check_keyring_present", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L603"}, {"caller_nid": "tray_dependencies_build_lims_client", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L609"}, {"caller_nid": "tray_dependencies_build_lims_client", "callee": "LIMSClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L617"}, {"caller_nid": "tray_dependencies_nas_keyring_password", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L635"}, {"caller_nid": "tray_dependencies_nas_keyring_password", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L638"}, {"caller_nid": "tray_dependencies_nas_keyring_password", "callee": "getter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L639"}, {"caller_nid": "tray_dependencies_nas_keyring_password", "callee": "keyring_nas_username", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L639"}, {"caller_nid": "tray_dependencies_check_nas_passwords_present", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L653"}, {"caller_nid": "tray_dependencies_check_nas_passwords_present", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L656"}, {"caller_nid": "tray_dependencies_check_nas_passwords_present", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L657"}, {"caller_nid": "tray_dependencies_check_nas_passwords_present", "callee": "transport_requires_keyring_password", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L660"}, {"caller_nid": "tray_dependencies_check_nas_passwords_present", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L663"}, {"caller_nid": "tray_dependencies_build_nas_sync", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L771"}, {"caller_nid": "tray_dependencies_build_nas_sync", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L774"}, {"caller_nid": "tray_dependencies_build_nas_sync", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L777"}, {"caller_nid": "tray_dependencies_build_nas_sync", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L781"}, {"caller_nid": "tray_dependencies_build_sync_state_writer", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L812"}, {"caller_nid": "tray_dependencies_build_quiescence_poller", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L829"}, {"caller_nid": "tray_dependencies_build_quiescence_poller", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L830"}, {"caller_nid": "tray_dependencies_build_quiescence_poller", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L835"}, {"caller_nid": "tray_dependencies_build_quiescence_poller", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L838"}, {"caller_nid": "tray_dependencies_build_quiescence_poller", "callee": "QuiescenceSyncPoller", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py", "source_location": "L841"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/1df1a782862785747438f133be80f5102d3e0084214a1f77ece7584e92ef9416.json b/graphify-out/cache/ast/1df1a782862785747438f133be80f5102d3e0084214a1f77ece7584e92ef9416.json new file mode 100644 index 0000000..b296880 --- /dev/null +++ b/graphify-out/cache/ast/1df1a782862785747438f133be80f5102d3e0084214a1f77ece7584e92ef9416.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_folder_feed_py", "label": "folder_feed.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L1"}, {"id": "client_folder_feed_folderfeedstate", "label": "FolderFeedState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L25"}, {"id": "client_folder_feed_folderfeed", "label": "FolderFeed", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L33"}, {"id": "client_folder_feed_folderfeed_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L36"}, {"id": "client_folder_feed_state", "label": "state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L50"}, {"id": "client_folder_feed_folderfeed_start", "label": ".start()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L53"}, {"id": "client_folder_feed_folderfeed_stop", "label": ".stop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L64"}, {"id": "client_folder_feed_folderfeed_pause", "label": ".pause()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L74"}, {"id": "client_folder_feed_folderfeed_resume", "label": ".resume()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L78"}, {"id": "client_folder_feed_folderfeed_loop", "label": "._loop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L82"}, {"id": "client_folder_feed_rationale_1", "label": "Folder-feed client abstraction. GUI/Orchestrator Redesign \u00a75. A small ``start(p", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L1"}, {"id": "client_folder_feed_rationale_26", "label": "In-memory state of one folder feed (one per centre pane).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L26"}, {"id": "client_folder_feed_rationale_34", "label": "One folder feed; rebound to a different path via ``start()``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L34"}, {"id": "client_folder_feed_rationale_54", "label": "Start polling ``path``. Switching paths stops the previous poll before s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L54"}, {"id": "client_folder_feed_rationale_75", "label": "Pause polling \u2014 used when the window is backgrounded.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L75"}, {"id": "client_folder_feed_rationale_79", "label": "Resume polling after a pause.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L79"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_folder_feed_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_folder_feed_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_folder_feed_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_folder_feed_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_folder_feed_py", "target": "client_folder_feed_folderfeedstate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_folder_feed_py", "target": "client_folder_feed_folderfeed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L33", "weight": 1.0}, {"source": "client_folder_feed_folderfeed", "target": "client_folder_feed_folderfeed_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_folder_feed_py", "target": "client_folder_feed_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L50", "weight": 1.0}, {"source": "client_folder_feed_folderfeed", "target": "client_folder_feed_folderfeed_start", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L53", "weight": 1.0}, {"source": "client_folder_feed_folderfeed", "target": "client_folder_feed_folderfeed_stop", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L64", "weight": 1.0}, {"source": "client_folder_feed_folderfeed", "target": "client_folder_feed_folderfeed_pause", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L74", "weight": 1.0}, {"source": "client_folder_feed_folderfeed", "target": "client_folder_feed_folderfeed_resume", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L78", "weight": 1.0}, {"source": "client_folder_feed_folderfeed", "target": "client_folder_feed_folderfeed_loop", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L82", "weight": 1.0}, {"source": "client_folder_feed_folderfeed_init", "target": "client_folder_feed_folderfeedstate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L46", "weight": 1.0}, {"source": "client_folder_feed_folderfeed_start", "target": "client_folder_feed_folderfeed_stop", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L59", "weight": 1.0}, {"source": "client_folder_feed_folderfeed_start", "target": "client_folder_feed_folderfeed_loop", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L62", "weight": 1.0}, {"source": "client_folder_feed_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_folder_feed_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L1", "weight": 1.0}, {"source": "client_folder_feed_rationale_26", "target": "client_folder_feed_folderfeedstate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L26", "weight": 1.0}, {"source": "client_folder_feed_rationale_34", "target": "client_folder_feed_folderfeed", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L34", "weight": 1.0}, {"source": "client_folder_feed_rationale_54", "target": "client_folder_feed_folderfeed_start", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L54", "weight": 1.0}, {"source": "client_folder_feed_rationale_75", "target": "client_folder_feed_folderfeed_pause", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L75", "weight": 1.0}, {"source": "client_folder_feed_rationale_79", "target": "client_folder_feed_folderfeed_resume", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L79", "weight": 1.0}], "raw_calls": [{"caller_nid": "client_folder_feed_folderfeed_start", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L57"}, {"caller_nid": "client_folder_feed_folderfeed_start", "callee": "create_task", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L62"}, {"caller_nid": "client_folder_feed_folderfeed_stop", "callee": "cancel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L66"}, {"caller_nid": "client_folder_feed_folderfeed_stop", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L69"}, {"caller_nid": "client_folder_feed_folderfeed_loop", "callee": "_fetch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L88"}, {"caller_nid": "client_folder_feed_folderfeed_loop", "callee": "_on_update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L91"}, {"caller_nid": "client_folder_feed_folderfeed_loop", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py", "source_location": "L97"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/1e661e4091bee281aa9639f44b466f676279836bc3760b89a680c187fa166c3e.json b/graphify-out/cache/ast/1e661e4091bee281aa9639f44b466f676279836bc3760b89a680c187fa166c3e.json new file mode 100644 index 0000000..e691914 --- /dev/null +++ b/graphify-out/cache/ast/1e661e4091bee281aa9639f44b466f676279836bc3760b89a680c187fa166c3e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "label": "main.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L1"}, {"id": "tray_main_trayapp", "label": "TrayApp", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L49"}, {"id": "tray_main_trayapp_start_server", "label": ".start_server()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L69"}, {"id": "tray_main_trayapp_open_window", "label": ".open_window()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L73"}, {"id": "tray_main_trayapp_request_quit", "label": ".request_quit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L77"}, {"id": "tray_main_trayapp_shutdown", "label": ".shutdown()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L91"}, {"id": "tray_main_trayapp_run", "label": ".run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L98"}, {"id": "tray_main_build_default_app", "label": "_build_default_app()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L129"}, {"id": "tray_main_build_default_components", "label": "_build_default_components()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L153"}, {"id": "tray_main_tray_backend_available", "label": "_tray_backend_available()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L194"}, {"id": "tray_main_parse_argv", "label": "_parse_argv()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L207"}, {"id": "tray_main_bootstrap_test_config", "label": "_bootstrap_test_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L272"}, {"id": "tray_main_run_smoke", "label": "_run_smoke()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L357"}, {"id": "tray_main_main", "label": "main()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L390"}, {"id": "tray_main_rationale_1", "label": "``exlab-wizard-tray`` console_scripts entry point. Backend Spec \u00a74.3.2. Wires t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L1"}, {"id": "tray_main_rationale_50", "label": "Bundle of long-lived tray components. The launcher constructs one and calls", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L50"}, {"id": "tray_main_rationale_70", "label": "Start the in-process FastAPI server. Returns the bound port.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L70"}, {"id": "tray_main_rationale_74", "label": "Spawn or focus the window subprocess.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L74"}, {"id": "tray_main_rationale_78", "label": "Trigger the graceful-shutdown protocol on the icon thread.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L78"}, {"id": "tray_main_rationale_92", "label": "Tear down sub-components synchronously.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L92"}, {"id": "tray_main_rationale_99", "label": "Start the server, build the icon, run the pystray loop. ``run_loop`` is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L99"}, {"id": "tray_main_rationale_130", "label": "Return the production FastAPI app for the tray. Constructs the live :class:", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L130"}, {"id": "tray_main_rationale_158", "label": "Construct the production TrayApp wiring. Split out so :func:`main` can stay", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L158"}, {"id": "tray_main_rationale_195", "label": "True when a ``pystray`` backend can be imported. When it cannot (e.g. a hea", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L195"}, {"id": "tray_main_rationale_208", "label": "Parse the tray's CLI arguments. The tray accepts: - ``--version`` -- p", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L208"}, {"id": "tray_main_rationale_273", "label": "Write a starter test ``config.yaml`` if one does not already exist. Called", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L273"}, {"id": "tray_main_rationale_358", "label": "Server-only loop. Boots the FastAPI server, prints the published port, waits", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L358"}, {"id": "tray_main_rationale_391", "label": "``exlab-wizard-tray`` entry point. The main thread runs pystray; the FastAP", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L391"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "argparse", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "signal", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "threading", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "exlab_wizard_tray_autostart", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "exlab_wizard_tray_icon", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "exlab_wizard_tray_notifications", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "exlab_wizard_tray_quit_coordinator", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "exlab_wizard_tray_server_runner", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "exlab_wizard_tray_status", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "exlab_wizard_tray_window_launcher", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "tray_main_trayapp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L49", "weight": 1.0}, {"source": "tray_main_trayapp", "target": "tray_main_trayapp_start_server", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L69", "weight": 1.0}, {"source": "tray_main_trayapp", "target": "tray_main_trayapp_open_window", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L73", "weight": 1.0}, {"source": "tray_main_trayapp", "target": "tray_main_trayapp_request_quit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L77", "weight": 1.0}, {"source": "tray_main_trayapp", "target": "tray_main_trayapp_shutdown", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L91", "weight": 1.0}, {"source": "tray_main_trayapp", "target": "tray_main_trayapp_run", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L98", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "tray_main_build_default_app", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L129", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "tray_main_build_default_components", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L153", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "tray_main_tray_backend_available", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L194", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "tray_main_parse_argv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L207", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "tray_main_bootstrap_test_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L272", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "tray_main_run_smoke", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L357", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "target": "tray_main_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L390", "weight": 1.0}, {"source": "tray_main_trayapp_request_quit", "target": "tray_main_trayapp_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L80", "weight": 1.0}, {"source": "tray_main_trayapp_run", "target": "tray_main_trayapp_start_server", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L105", "weight": 1.0}, {"source": "tray_main_trayapp_run", "target": "tray_main_trayapp_shutdown", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L120", "weight": 1.0}, {"source": "tray_main_build_default_components", "target": "tray_main_build_default_app", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L164", "weight": 1.0}, {"source": "tray_main_build_default_components", "target": "tray_main_trayapp", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L177", "weight": 1.0}, {"source": "tray_main_build_default_components", "target": "tray_main_tray_backend_available", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L190", "weight": 1.0}, {"source": "tray_main_run_smoke", "target": "tray_main_build_default_app", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L365", "weight": 1.0}, {"source": "tray_main_main", "target": "tray_main_parse_argv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L397", "weight": 1.0}, {"source": "tray_main_main", "target": "tray_main_bootstrap_test_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L419", "weight": 1.0}, {"source": "tray_main_main", "target": "tray_main_run_smoke", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L424", "weight": 1.0}, {"source": "tray_main_main", "target": "tray_main_build_default_components", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L426", "weight": 1.0}, {"source": "tray_main_main", "target": "tray_main_trayapp_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L428", "weight": 1.0}, {"source": "tray_main_main", "target": "tray_main_trayapp_shutdown", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L431", "weight": 1.0}, {"source": "tray_main_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_main_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_main_rationale_50", "target": "tray_main_trayapp", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L50", "weight": 1.0}, {"source": "tray_main_rationale_70", "target": "tray_main_trayapp_start_server", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L70", "weight": 1.0}, {"source": "tray_main_rationale_74", "target": "tray_main_trayapp_open_window", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L74", "weight": 1.0}, {"source": "tray_main_rationale_78", "target": "tray_main_trayapp_request_quit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L78", "weight": 1.0}, {"source": "tray_main_rationale_92", "target": "tray_main_trayapp_shutdown", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L92", "weight": 1.0}, {"source": "tray_main_rationale_99", "target": "tray_main_trayapp_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L99", "weight": 1.0}, {"source": "tray_main_rationale_130", "target": "tray_main_build_default_app", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L130", "weight": 1.0}, {"source": "tray_main_rationale_158", "target": "tray_main_build_default_components", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L158", "weight": 1.0}, {"source": "tray_main_rationale_195", "target": "tray_main_tray_backend_available", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L195", "weight": 1.0}, {"source": "tray_main_rationale_208", "target": "tray_main_parse_argv", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L208", "weight": 1.0}, {"source": "tray_main_rationale_273", "target": "tray_main_bootstrap_test_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L273", "weight": 1.0}, {"source": "tray_main_rationale_358", "target": "tray_main_run_smoke", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L358", "weight": 1.0}, {"source": "tray_main_rationale_391", "target": "tray_main_main", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L391", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_main_trayapp_start_server", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L71"}, {"caller_nid": "tray_main_trayapp_open_window", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L75"}, {"caller_nid": "tray_main_trayapp_request_quit", "callee": "quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L80"}, {"caller_nid": "tray_main_trayapp_request_quit", "callee": "get_event_loop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L83"}, {"caller_nid": "tray_main_trayapp_request_quit", "callee": "run_until_complete", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L84"}, {"caller_nid": "tray_main_trayapp_request_quit", "callee": "quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L84"}, {"caller_nid": "tray_main_trayapp_request_quit", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L87"}, {"caller_nid": "tray_main_trayapp_request_quit", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L89"}, {"caller_nid": "tray_main_trayapp_shutdown", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L93"}, {"caller_nid": "tray_main_trayapp_shutdown", "callee": "cancel_all", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L94"}, {"caller_nid": "tray_main_trayapp_shutdown", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L95"}, {"caller_nid": "tray_main_trayapp_shutdown", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L96"}, {"caller_nid": "tray_main_trayapp_run", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L106"}, {"caller_nid": "tray_main_trayapp_run", "callee": "build_icon", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L107"}, {"caller_nid": "tray_main_trayapp_run", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L116"}, {"caller_nid": "tray_main_trayapp_run", "callee": "run_loop", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L119"}, {"caller_nid": "tray_main_build_default_app", "callee": "build_production_dependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L144"}, {"caller_nid": "tray_main_build_default_app", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L145"}, {"caller_nid": "tray_main_build_default_app", "callee": "mount_ui", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L149"}, {"caller_nid": "tray_main_build_default_app", "callee": "load_or_create_storage_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L149"}, {"caller_nid": "tray_main_build_default_components", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L165"}, {"caller_nid": "tray_main_build_default_components", "callee": "ServerRunner", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L166"}, {"caller_nid": "tray_main_build_default_components", "callee": "WindowLauncher", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L167"}, {"caller_nid": "tray_main_build_default_components", "callee": "NotificationBus", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L168"}, {"caller_nid": "tray_main_build_default_components", "callee": "StatusTicker", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L169"}, {"caller_nid": "tray_main_build_default_components", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L170"}, {"caller_nid": "tray_main_build_default_components", "callee": "QuitCoordinator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L171"}, {"caller_nid": "tray_main_build_default_components", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L174"}, {"caller_nid": "tray_main_build_default_components", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L175"}, {"caller_nid": "tray_main_parse_argv", "callee": "ArgumentParser", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L233"}, {"caller_nid": "tray_main_parse_argv", "callee": "add_argument", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L234"}, {"caller_nid": "tray_main_parse_argv", "callee": "add_argument", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L239"}, {"caller_nid": "tray_main_parse_argv", "callee": "add_argument", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L244"}, {"caller_nid": "tray_main_parse_argv", "callee": "add_argument", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L249"}, {"caller_nid": "tray_main_parse_argv", "callee": "add_argument", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L258"}, {"caller_nid": "tray_main_parse_argv", "callee": "parse_args", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L266"}, {"caller_nid": "tray_main_parse_argv", "callee": "error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L268"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L287"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L302"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L303"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L304"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L305"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L307"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L309"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L313"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L314"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L318"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L319"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L332"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "save_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L337"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "ensure_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L352"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L352"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L354"}, {"caller_nid": "tray_main_bootstrap_test_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L354"}, {"caller_nid": "tray_main_run_smoke", "callee": "ServerRunner", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L366"}, {"caller_nid": "tray_main_run_smoke", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L367"}, {"caller_nid": "tray_main_run_smoke", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L368"}, {"caller_nid": "tray_main_run_smoke", "callee": "print", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L369"}, {"caller_nid": "tray_main_run_smoke", "callee": "Event", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L371"}, {"caller_nid": "tray_main_run_smoke", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L380"}, {"caller_nid": "tray_main_run_smoke", "callee": "signal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L381"}, {"caller_nid": "tray_main_run_smoke", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L384"}, {"caller_nid": "tray_main_run_smoke", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L386"}, {"caller_nid": "tray_main_main", "callee": "print", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L401"}, {"caller_nid": "tray_main_main", "callee": "configure_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L413"}, {"caller_nid": "tray_main_main", "callee": "ensure_state_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L417"}, {"caller_nid": "tray_main_main", "callee": "os_config_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L420"}, {"caller_nid": "tray_main_main", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py", "source_location": "L430"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/1ebe8dc34ef79708e459294cd23b3525cffdeedf8db70de24e10eb6816e0689c.json b/graphify-out/cache/ast/1ebe8dc34ef79708e459294cd23b3525cffdeedf8db70de24e10eb6816e0689c.json new file mode 100644 index 0000000..b315dfc --- /dev/null +++ b/graphify-out/cache/ast/1ebe8dc34ef79708e459294cd23b3525cffdeedf8db70de24e10eb6816e0689c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "label": "staging_query.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L1"}, {"id": "orchestrator_staging_query_stagedrunsummary", "label": "StagedRunSummary", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L44"}, {"id": "orchestrator_staging_query_list_staged_runs", "label": "list_staged_runs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L73"}, {"id": "orchestrator_staging_query_summarize_run", "label": "_summarize_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L119"}, {"id": "orchestrator_staging_query_rollup_value", "label": "_rollup_value()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L149"}, {"id": "orchestrator_staging_query_path_identity", "label": "_path_identity()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L165"}, {"id": "orchestrator_staging_query_dir_mtime_iso", "label": "_dir_mtime_iso()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L189"}, {"id": "orchestrator_staging_query_parse_iso", "label": "_parse_iso()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L198"}, {"id": "orchestrator_staging_query_iso_to_epoch", "label": "_iso_to_epoch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L204"}, {"id": "orchestrator_staging_query_rationale_1", "label": "Read-only enumeration of runs pending NAS sync. Backend Spec \u00a713.8. The orchest", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L1"}, {"id": "orchestrator_staging_query_rationale_45", "label": "One row in the orchestrator's staging panel. Backend Spec \u00a713.8: * ``p", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L45"}, {"id": "orchestrator_staging_query_rationale_80", "label": "Enumerate every staged run with its derived lifecycle state. ``staging_root", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L80"}, {"id": "orchestrator_staging_query_rationale_125", "label": "Build a :class:`StagedRunSummary` for ``run_path``. Equipment id / project", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L125"}, {"id": "orchestrator_staging_query_rationale_150", "label": "Return the derived ``sync_state.json`` rollup for ``run_path``. Reads the r", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L150"}, {"id": "orchestrator_staging_query_rationale_166", "label": "Return ``(equipment_id, project_name, run_kind)`` from the run path. Falls", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L166"}, {"id": "orchestrator_staging_query_rationale_190", "label": "Return the run directory mtime as a UTC ISO-8601 string.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L190"}, {"id": "orchestrator_staging_query_rationale_199", "label": "Parse an ISO-8601 ``Z``-suffixed timestamp; fall back on error.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L199"}, {"id": "orchestrator_staging_query_rationale_205", "label": "Sort key helper -- returns 0.0 if ``value`` cannot be parsed.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L205"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "exlab_wizard_cache_sync_state_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "exlab_wizard_orchestrator_scan", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "orchestrator_staging_query_stagedrunsummary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "orchestrator_staging_query_list_staged_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L73", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "orchestrator_staging_query_summarize_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L119", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "orchestrator_staging_query_rollup_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L149", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "orchestrator_staging_query_path_identity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L165", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "orchestrator_staging_query_dir_mtime_iso", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L189", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "orchestrator_staging_query_parse_iso", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L198", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "target": "orchestrator_staging_query_iso_to_epoch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L204", "weight": 1.0}, {"source": "orchestrator_staging_query_list_staged_runs", "target": "orchestrator_staging_query_summarize_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L108", "weight": 1.0}, {"source": "orchestrator_staging_query_list_staged_runs", "target": "orchestrator_staging_query_iso_to_epoch", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L110", "weight": 1.0}, {"source": "orchestrator_staging_query_summarize_run", "target": "orchestrator_staging_query_path_identity", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L131", "weight": 1.0}, {"source": "orchestrator_staging_query_summarize_run", "target": "orchestrator_staging_query_dir_mtime_iso", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L133", "weight": 1.0}, {"source": "orchestrator_staging_query_summarize_run", "target": "orchestrator_staging_query_parse_iso", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L134", "weight": 1.0}, {"source": "orchestrator_staging_query_summarize_run", "target": "orchestrator_staging_query_rollup_value", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L135", "weight": 1.0}, {"source": "orchestrator_staging_query_summarize_run", "target": "orchestrator_staging_query_stagedrunsummary", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L136", "weight": 1.0}, {"source": "orchestrator_staging_query_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_query_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L1", "weight": 1.0}, {"source": "orchestrator_staging_query_rationale_45", "target": "orchestrator_staging_query_stagedrunsummary", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L45", "weight": 1.0}, {"source": "orchestrator_staging_query_rationale_80", "target": "orchestrator_staging_query_list_staged_runs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L80", "weight": 1.0}, {"source": "orchestrator_staging_query_rationale_125", "target": "orchestrator_staging_query_summarize_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L125", "weight": 1.0}, {"source": "orchestrator_staging_query_rationale_150", "target": "orchestrator_staging_query_rollup_value", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L150", "weight": 1.0}, {"source": "orchestrator_staging_query_rationale_166", "target": "orchestrator_staging_query_path_identity", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L166", "weight": 1.0}, {"source": "orchestrator_staging_query_rationale_190", "target": "orchestrator_staging_query_dir_mtime_iso", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L190", "weight": 1.0}, {"source": "orchestrator_staging_query_rationale_199", "target": "orchestrator_staging_query_parse_iso", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L199", "weight": 1.0}, {"source": "orchestrator_staging_query_rationale_205", "target": "orchestrator_staging_query_iso_to_epoch", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L205", "weight": 1.0}], "raw_calls": [{"caller_nid": "orchestrator_staging_query_list_staged_runs", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L101"}, {"caller_nid": "orchestrator_staging_query_list_staged_runs", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L104"}, {"caller_nid": "orchestrator_staging_query_list_staged_runs", "callee": "utc_now_or", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L106"}, {"caller_nid": "orchestrator_staging_query_list_staged_runs", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L107"}, {"caller_nid": "orchestrator_staging_query_list_staged_runs", "callee": "walk_run_leaves", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L108"}, {"caller_nid": "orchestrator_staging_query_list_staged_runs", "callee": "sort", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L110"}, {"caller_nid": "orchestrator_staging_query_summarize_run", "callee": "count_files_and_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L132"}, {"caller_nid": "orchestrator_staging_query_summarize_run", "callee": "max", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L134"}, {"caller_nid": "orchestrator_staging_query_summarize_run", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L134"}, {"caller_nid": "orchestrator_staging_query_summarize_run", "callee": "total_seconds", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L134"}, {"caller_nid": "orchestrator_staging_query_summarize_run", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L137"}, {"caller_nid": "orchestrator_staging_query_rollup_value", "callee": "read_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L158"}, {"caller_nid": "orchestrator_staging_query_rollup_value", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L160"}, {"caller_nid": "orchestrator_staging_query_rollup_value", "callee": "rollup_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L162"}, {"caller_nid": "orchestrator_staging_query_path_identity", "callee": "relative_to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L172"}, {"caller_nid": "orchestrator_staging_query_path_identity", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L172"}, {"caller_nid": "orchestrator_staging_query_path_identity", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L172"}, {"caller_nid": "orchestrator_staging_query_path_identity", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L174"}, {"caller_nid": "orchestrator_staging_query_path_identity", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L177"}, {"caller_nid": "orchestrator_staging_query_path_identity", "callee": "is_test_run_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L180"}, {"caller_nid": "orchestrator_staging_query_dir_mtime_iso", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L192"}, {"caller_nid": "orchestrator_staging_query_dir_mtime_iso", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L194"}, {"caller_nid": "orchestrator_staging_query_dir_mtime_iso", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L195"}, {"caller_nid": "orchestrator_staging_query_dir_mtime_iso", "callee": "fromtimestamp", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L195"}, {"caller_nid": "orchestrator_staging_query_parse_iso", "callee": "parse_utc_iso_or_none", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L200"}, {"caller_nid": "orchestrator_staging_query_iso_to_epoch", "callee": "parse_utc_iso_or_none", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L206"}, {"caller_nid": "orchestrator_staging_query_iso_to_epoch", "callee": "timestamp", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py", "source_location": "L207"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/1eeb5417518fb4a54a6f22ac5c6cbaee3b48600c61c29a0a5e67ab4db18fec27.json b/graphify-out/cache/ast/1eeb5417518fb4a54a6f22ac5c6cbaee3b48600c61c29a0a5e67ab4db18fec27.json new file mode 100644 index 0000000..0f00207 --- /dev/null +++ b/graphify-out/cache/ast/1eeb5417518fb4a54a6f22ac5c6cbaee3b48600c61c29a0a5e67ab4db18fec27.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "label": "paths.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L1"}, {"id": "exlab_wizard_paths_app_name", "label": "_app_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L95"}, {"id": "exlab_wizard_paths_platform", "label": "_platform()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L107"}, {"id": "exlab_wizard_paths_home", "label": "_home()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L118"}, {"id": "exlab_wizard_paths_env_path", "label": "_env_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L127"}, {"id": "exlab_wizard_paths_os_config_path", "label": "os_config_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L133"}, {"id": "exlab_wizard_paths_os_state_path", "label": "os_state_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L145"}, {"id": "exlab_wizard_paths_os_cache_path", "label": "os_cache_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L157"}, {"id": "exlab_wizard_paths_os_central_log_path", "label": "os_central_log_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L169"}, {"id": "exlab_wizard_paths_suggested_staging_root", "label": "suggested_staging_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L188"}, {"id": "exlab_wizard_paths_ensure_dir", "label": "ensure_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L220"}, {"id": "exlab_wizard_paths_ensure_state_dir", "label": "ensure_state_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L226"}, {"id": "exlab_wizard_paths_ensure_central_log_dir", "label": "ensure_central_log_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L231"}, {"id": "exlab_wizard_paths_canonicalize_equipment_id", "label": "canonicalize_equipment_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L241"}, {"id": "exlab_wizard_paths_validate_project_short_id", "label": "validate_project_short_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L272"}, {"id": "exlab_wizard_paths_project_name_violations", "label": "project_name_violations()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L290"}, {"id": "exlab_wizard_paths_validate_project_name", "label": "validate_project_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L348"}, {"id": "exlab_wizard_paths_compose_run_path", "label": "compose_run_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L360"}, {"id": "exlab_wizard_paths_compose_project_path", "label": "compose_project_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L396"}, {"id": "exlab_wizard_paths_lims_slot_satisfied", "label": "_lims_slot_satisfied()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L420"}, {"id": "exlab_wizard_paths_paths_complete", "label": "_paths_complete()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L437"}, {"id": "exlab_wizard_paths_password_required_equipment", "label": "_password_required_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L447"}, {"id": "exlab_wizard_paths_nas_slot_satisfied", "label": "_nas_slot_satisfied()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L466"}, {"id": "exlab_wizard_paths_evaluate_setup_state", "label": "evaluate_setup_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L483"}, {"id": "exlab_wizard_paths_orchestrator_identity_complete", "label": "_orchestrator_identity_complete()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L533"}, {"id": "exlab_wizard_paths_setup_state_missing", "label": "setup_state_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L544"}, {"id": "exlab_wizard_paths_missing_nas_fields", "label": "_missing_nas_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L578"}, {"id": "exlab_wizard_paths_missing_orchestrator_fields", "label": "_missing_orchestrator_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L601"}, {"id": "exlab_wizard_paths_missing_paths_fields", "label": "_missing_paths_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L611"}, {"id": "exlab_wizard_paths_missing_lims_fields", "label": "_missing_lims_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L624"}, {"id": "exlab_wizard_paths_setup_state_next_action", "label": "setup_state_next_action()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L643"}, {"id": "exlab_wizard_paths_cache_dir", "label": "cache_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L673"}, {"id": "exlab_wizard_paths_creation_json_path", "label": "creation_json_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L678"}, {"id": "exlab_wizard_paths_equipment_json_path", "label": "equipment_json_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L683"}, {"id": "exlab_wizard_paths_readme_fields_json_path", "label": "readme_fields_json_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L688"}, {"id": "exlab_wizard_paths_is_run_dir", "label": "is_run_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L698"}, {"id": "exlab_wizard_paths_is_test_run_dir", "label": "is_test_run_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L708"}, {"id": "exlab_wizard_paths_run_dir_stem", "label": "run_dir_stem()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L713"}, {"id": "exlab_wizard_paths_rationale_1", "label": "Path composition + OS-appropriate directories + equipment-id canonicalization.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L1"}, {"id": "exlab_wizard_paths_rationale_96", "label": "``APP_NAME`` (suffixed ``-test`` when ``EXLAB_WIZARD_TEST_MODE=1``).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L96"}, {"id": "exlab_wizard_paths_rationale_108", "label": "Return a normalized platform tag for OS-conditional path dispatch.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L108"}, {"id": "exlab_wizard_paths_rationale_119", "label": "Return the operator's home directory. Centralized so test fixtures can monk", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L119"}, {"id": "exlab_wizard_paths_rationale_128", "label": "Return ``Path(os.environ[var])`` if the var is set and non-empty, else ``fallbac", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L128"}, {"id": "exlab_wizard_paths_rationale_134", "label": "Return the OS-appropriate path of ``config.yaml``. Backend Spec \u00a79.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L134"}, {"id": "exlab_wizard_paths_rationale_146", "label": "Return the OS-appropriate state directory. Backend Spec \u00a715.7.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L146"}, {"id": "exlab_wizard_paths_rationale_158", "label": "Return the OS-appropriate cache directory. Backend Spec \u00a77.2.4.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L158"}, {"id": "exlab_wizard_paths_rationale_170", "label": "Return the OS-appropriate central log file. Backend Spec \u00a716.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L170"}, {"id": "exlab_wizard_paths_rationale_189", "label": "Suggested (not default) ``orchestrator.staging_root``. Backend Spec \u00a79, \u00a713.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L189"}, {"id": "exlab_wizard_paths_rationale_221", "label": "``mkdir -p`` the given path; return it. Idempotent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L221"}, {"id": "exlab_wizard_paths_rationale_227", "label": "``ensure_dir(os_state_path())``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L227"}, {"id": "exlab_wizard_paths_rationale_232", "label": "``ensure_dir(os_central_log_path().parent)``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L232"}, {"id": "exlab_wizard_paths_rationale_242", "label": "Validate ``value`` against the \u00a73.1 equipment-ID regex. Returns ``value`` u", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L242"}, {"id": "exlab_wizard_paths_rationale_273", "label": "Validate ``value`` against ``PROJECT_SHORT_ID_PATTERN``. Returns the input", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L273"}, {"id": "exlab_wizard_paths_rationale_291", "label": "Return every way ``value`` fails the \u00a73.2 project-name rule. The project fo", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L291"}, {"id": "exlab_wizard_paths_rationale_349", "label": "Validate ``value`` as a \u00a73.2 project-folder name. Returns the input unchang", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L349"}, {"id": "exlab_wizard_paths_rationale_368", "label": "Compose the absolute on-disk path for a new run. Paths follow Backend Spec", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L368"}, {"id": "exlab_wizard_paths_rationale_402", "label": "Compose the project-level directory. ``//`` or ``TestRun_``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L714"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_app_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L95", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_platform", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L107", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_home", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L118", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_env_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L127", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_os_config_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L133", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_os_state_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L145", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_os_cache_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L157", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_os_central_log_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L169", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_suggested_staging_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L188", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_ensure_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L220", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_ensure_state_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L226", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_ensure_central_log_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L231", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_canonicalize_equipment_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L241", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_validate_project_short_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L272", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_project_name_violations", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L290", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_validate_project_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L348", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_compose_run_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L360", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_compose_project_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L396", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_lims_slot_satisfied", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L420", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_paths_complete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L437", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_password_required_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L447", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_nas_slot_satisfied", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L466", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_evaluate_setup_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L483", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_orchestrator_identity_complete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L533", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_setup_state_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L544", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_missing_nas_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L578", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_missing_orchestrator_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L601", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_missing_paths_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L611", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_missing_lims_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L624", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_setup_state_next_action", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L643", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_cache_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L673", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_creation_json_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L678", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_equipment_json_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L683", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_readme_fields_json_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L688", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_is_run_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L698", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_is_test_run_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L708", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "target": "exlab_wizard_paths_run_dir_stem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L713", "weight": 1.0}, {"source": "exlab_wizard_paths_os_config_path", "target": "exlab_wizard_paths_app_name", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L135", "weight": 1.0}, {"source": "exlab_wizard_paths_os_config_path", "target": "exlab_wizard_paths_platform", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L136", "weight": 1.0}, {"source": "exlab_wizard_paths_os_config_path", "target": "exlab_wizard_paths_home", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L138", "weight": 1.0}, {"source": "exlab_wizard_paths_os_config_path", "target": "exlab_wizard_paths_env_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L140", "weight": 1.0}, {"source": "exlab_wizard_paths_os_state_path", "target": "exlab_wizard_paths_app_name", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L147", "weight": 1.0}, {"source": "exlab_wizard_paths_os_state_path", "target": "exlab_wizard_paths_platform", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L148", "weight": 1.0}, {"source": "exlab_wizard_paths_os_state_path", "target": "exlab_wizard_paths_home", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L150", "weight": 1.0}, {"source": "exlab_wizard_paths_os_state_path", "target": "exlab_wizard_paths_env_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L152", "weight": 1.0}, {"source": "exlab_wizard_paths_os_cache_path", "target": "exlab_wizard_paths_app_name", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L159", "weight": 1.0}, {"source": "exlab_wizard_paths_os_cache_path", "target": "exlab_wizard_paths_platform", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L160", "weight": 1.0}, {"source": "exlab_wizard_paths_os_cache_path", "target": "exlab_wizard_paths_home", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L162", "weight": 1.0}, {"source": "exlab_wizard_paths_os_cache_path", "target": "exlab_wizard_paths_env_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L164", "weight": 1.0}, {"source": "exlab_wizard_paths_os_central_log_path", "target": "exlab_wizard_paths_app_name", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L171", "weight": 1.0}, {"source": "exlab_wizard_paths_os_central_log_path", "target": "exlab_wizard_paths_platform", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L172", "weight": 1.0}, {"source": "exlab_wizard_paths_os_central_log_path", "target": "exlab_wizard_paths_home", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L174", "weight": 1.0}, {"source": "exlab_wizard_paths_os_central_log_path", "target": "exlab_wizard_paths_env_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L177", "weight": 1.0}, {"source": "exlab_wizard_paths_suggested_staging_root", "target": "exlab_wizard_paths_app_name", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L205", "weight": 1.0}, {"source": "exlab_wizard_paths_suggested_staging_root", "target": "exlab_wizard_paths_platform", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L206", "weight": 1.0}, {"source": "exlab_wizard_paths_suggested_staging_root", "target": "exlab_wizard_paths_home", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L208", "weight": 1.0}, {"source": "exlab_wizard_paths_suggested_staging_root", "target": "exlab_wizard_paths_env_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L210", "weight": 1.0}, {"source": "exlab_wizard_paths_ensure_state_dir", "target": "exlab_wizard_paths_ensure_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L228", "weight": 1.0}, {"source": "exlab_wizard_paths_ensure_state_dir", "target": "exlab_wizard_paths_os_state_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L228", "weight": 1.0}, {"source": "exlab_wizard_paths_ensure_central_log_dir", "target": "exlab_wizard_paths_ensure_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L233", "weight": 1.0}, {"source": "exlab_wizard_paths_ensure_central_log_dir", "target": "exlab_wizard_paths_os_central_log_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L233", "weight": 1.0}, {"source": "exlab_wizard_paths_validate_project_name", "target": "exlab_wizard_paths_project_name_violations", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L354", "weight": 1.0}, {"source": "exlab_wizard_paths_compose_run_path", "target": "exlab_wizard_paths_canonicalize_equipment_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L387", "weight": 1.0}, {"source": "exlab_wizard_paths_compose_run_path", "target": "exlab_wizard_paths_validate_project_name", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L388", "weight": 1.0}, {"source": "exlab_wizard_paths_compose_project_path", "target": "exlab_wizard_paths_canonicalize_equipment_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L410", "weight": 1.0}, {"source": "exlab_wizard_paths_compose_project_path", "target": "exlab_wizard_paths_validate_project_name", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L411", "weight": 1.0}, {"source": "exlab_wizard_paths_nas_slot_satisfied", "target": "exlab_wizard_paths_password_required_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L480", "weight": 1.0}, {"source": "exlab_wizard_paths_evaluate_setup_state", "target": "exlab_wizard_paths_paths_complete", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L515", "weight": 1.0}, {"source": "exlab_wizard_paths_evaluate_setup_state", "target": "exlab_wizard_paths_orchestrator_identity_complete", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L517", "weight": 1.0}, {"source": "exlab_wizard_paths_evaluate_setup_state", "target": "exlab_wizard_paths_nas_slot_satisfied", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L524", "weight": 1.0}, {"source": "exlab_wizard_paths_evaluate_setup_state", "target": "exlab_wizard_paths_lims_slot_satisfied", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L526", "weight": 1.0}, {"source": "exlab_wizard_paths_setup_state_missing", "target": "exlab_wizard_paths_missing_paths_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L568", "weight": 1.0}, {"source": "exlab_wizard_paths_setup_state_missing", "target": "exlab_wizard_paths_missing_orchestrator_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L570", "weight": 1.0}, {"source": "exlab_wizard_paths_setup_state_missing", "target": "exlab_wizard_paths_missing_nas_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L572", "weight": 1.0}, {"source": "exlab_wizard_paths_setup_state_missing", "target": "exlab_wizard_paths_missing_lims_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L574", "weight": 1.0}, {"source": "exlab_wizard_paths_missing_nas_fields", "target": "exlab_wizard_paths_password_required_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L596", "weight": 1.0}, {"source": "exlab_wizard_paths_creation_json_path", "target": "exlab_wizard_paths_cache_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L680", "weight": 1.0}, {"source": "exlab_wizard_paths_equipment_json_path", "target": "exlab_wizard_paths_cache_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L685", "weight": 1.0}, {"source": "exlab_wizard_paths_readme_fields_json_path", "target": "exlab_wizard_paths_cache_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L690", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_paths_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L1", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_96", "target": "exlab_wizard_paths_app_name", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L96", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_108", "target": "exlab_wizard_paths_platform", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L108", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_119", "target": "exlab_wizard_paths_home", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L119", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_128", "target": "exlab_wizard_paths_env_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L128", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_134", "target": "exlab_wizard_paths_os_config_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L134", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_146", "target": "exlab_wizard_paths_os_state_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L146", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_158", "target": "exlab_wizard_paths_os_cache_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L158", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_170", "target": "exlab_wizard_paths_os_central_log_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L170", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_189", "target": "exlab_wizard_paths_suggested_staging_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L189", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_221", "target": "exlab_wizard_paths_ensure_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L221", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_227", "target": "exlab_wizard_paths_ensure_state_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L227", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_232", "target": "exlab_wizard_paths_ensure_central_log_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L232", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_242", "target": "exlab_wizard_paths_canonicalize_equipment_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L242", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_273", "target": "exlab_wizard_paths_validate_project_short_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L273", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_291", "target": "exlab_wizard_paths_project_name_violations", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L291", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_349", "target": "exlab_wizard_paths_validate_project_name", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L349", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_368", "target": "exlab_wizard_paths_compose_run_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L368", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_402", "target": "exlab_wizard_paths_compose_project_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L402", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_425", "target": "exlab_wizard_paths_lims_slot_satisfied", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L425", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_438", "target": "exlab_wizard_paths_paths_complete", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L438", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_448", "target": "exlab_wizard_paths_password_required_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L448", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_471", "target": "exlab_wizard_paths_nas_slot_satisfied", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L471", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_490", "target": "exlab_wizard_paths_evaluate_setup_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L490", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_534", "target": "exlab_wizard_paths_orchestrator_identity_complete", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L534", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_550", "target": "exlab_wizard_paths_setup_state_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L550", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_583", "target": "exlab_wizard_paths_missing_nas_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L583", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_602", "target": "exlab_wizard_paths_missing_orchestrator_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L602", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_644", "target": "exlab_wizard_paths_setup_state_next_action", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L644", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_674", "target": "exlab_wizard_paths_cache_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L674", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_679", "target": "exlab_wizard_paths_creation_json_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L679", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_684", "target": "exlab_wizard_paths_equipment_json_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L684", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_689", "target": "exlab_wizard_paths_readme_fields_json_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L689", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_699", "target": "exlab_wizard_paths_is_run_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L699", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_709", "target": "exlab_wizard_paths_is_test_run_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L709", "weight": 1.0}, {"source": "exlab_wizard_paths_rationale_714", "target": "exlab_wizard_paths_run_dir_stem", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L714", "weight": 1.0}], "raw_calls": [{"caller_nid": "exlab_wizard_paths_app_name", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L97"}, {"caller_nid": "exlab_wizard_paths_home", "callee": "home", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L124"}, {"caller_nid": "exlab_wizard_paths_env_path", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L129"}, {"caller_nid": "exlab_wizard_paths_env_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L130"}, {"caller_nid": "exlab_wizard_paths_ensure_dir", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L222"}, {"caller_nid": "exlab_wizard_paths_canonicalize_equipment_id", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L252"}, {"caller_nid": "exlab_wizard_paths_canonicalize_equipment_id", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L254"}, {"caller_nid": "exlab_wizard_paths_canonicalize_equipment_id", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L255"}, {"caller_nid": "exlab_wizard_paths_canonicalize_equipment_id", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L258"}, {"caller_nid": "exlab_wizard_paths_canonicalize_equipment_id", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L260"}, {"caller_nid": "exlab_wizard_paths_canonicalize_equipment_id", "callee": "fullmatch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L261"}, {"caller_nid": "exlab_wizard_paths_canonicalize_equipment_id", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L263"}, {"caller_nid": "exlab_wizard_paths_validate_project_short_id", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L281"}, {"caller_nid": "exlab_wizard_paths_validate_project_short_id", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L283"}, {"caller_nid": "exlab_wizard_paths_validate_project_short_id", "callee": "fullmatch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L284"}, {"caller_nid": "exlab_wizard_paths_validate_project_short_id", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L286"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L306"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L310"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L311"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L315"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L318"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L319"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "upper", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L320"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L320"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "split", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L320"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L322"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "endswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L323"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L324"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L327"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "ord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L331"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L332"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L333"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L341"}, {"caller_nid": "exlab_wizard_paths_project_name_violations", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L342"}, {"caller_nid": "exlab_wizard_paths_validate_project_name", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L356"}, {"caller_nid": "exlab_wizard_paths_compose_run_path", "callee": "strftime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L389"}, {"caller_nid": "exlab_wizard_paths_compose_run_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L390"}, {"caller_nid": "exlab_wizard_paths_compose_project_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L412"}, {"caller_nid": "exlab_wizard_paths_lims_slot_satisfied", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L434"}, {"caller_nid": "exlab_wizard_paths_paths_complete", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L444"}, {"caller_nid": "exlab_wizard_paths_password_required_equipment", "callee": "transport_requires_keyring_password", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L462"}, {"caller_nid": "exlab_wizard_paths_nas_slot_satisfied", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L480"}, {"caller_nid": "exlab_wizard_paths_nas_slot_satisfied", "callee": "nas_password_present_for", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L480"}, {"caller_nid": "exlab_wizard_paths_orchestrator_identity_complete", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L541"}, {"caller_nid": "exlab_wizard_paths_missing_nas_fields", "callee": "nas_password_present_for", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L597"}, {"caller_nid": "exlab_wizard_paths_missing_orchestrator_fields", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L607"}, {"caller_nid": "exlab_wizard_paths_missing_paths_fields", "callee": "accessor", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L620"}, {"caller_nid": "exlab_wizard_paths_missing_lims_fields", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L628"}, {"caller_nid": "exlab_wizard_paths_missing_lims_fields", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L629"}, {"caller_nid": "exlab_wizard_paths_missing_lims_fields", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L631"}, {"caller_nid": "exlab_wizard_paths_missing_lims_fields", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L633"}, {"caller_nid": "exlab_wizard_paths_missing_lims_fields", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L639"}, {"caller_nid": "exlab_wizard_paths_is_run_dir", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L705"}, {"caller_nid": "exlab_wizard_paths_is_test_run_dir", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py", "source_location": "L710"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/1f7cc5b26a50859217dbb31f3b4af30b129733fb8a6e38a8ee30e9376b037e2b.json b/graphify-out/cache/ast/1f7cc5b26a50859217dbb31f3b4af30b129733fb8a6e38a8ee30e9376b037e2b.json new file mode 100644 index 0000000..b24c771 --- /dev/null +++ b/graphify-out/cache/ast/1f7cc5b26a50859217dbb31f3b4af30b129733fb8a6e38a8ee30e9376b037e2b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "label": "copier_driver.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L1"}, {"id": "template_copier_driver_resolvedtemplate", "label": "ResolvedTemplate", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L60"}, {"id": "template_copier_driver_renderresult", "label": "RenderResult", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L95"}, {"id": "template_copier_driver_templateengine", "label": "TemplateEngine", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L109"}, {"id": "template_copier_driver_templateengine_resolve", "label": ".resolve()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L112"}, {"id": "template_copier_driver_extract_readme_fields", "label": "_extract_readme_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L228"}, {"id": "template_copier_driver_templateengine_render", "label": ".render()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L257"}, {"id": "template_copier_driver_snapshot_files", "label": "_snapshot_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L307"}, {"id": "template_copier_driver_rationale_1", "label": "Copier template-engine wrapper. Backend Spec \u00a74.4.2 / \u00a75. This module wraps Cop", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L1"}, {"id": "template_copier_driver_rationale_61", "label": "A loaded template's metadata. Backend Spec \u00a75.2. Attributes: name:", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L61"}, {"id": "template_copier_driver_rationale_96", "label": "Outcome of a render call. Attributes: dst_path: The absolute destin", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L96"}, {"id": "template_copier_driver_rationale_110", "label": "Wraps the Copier Python API behind the \u00a74.4.2 contract.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L110"}, {"id": "template_copier_driver_rationale_113", "label": "Load + validate a template's ``copier.yml``. Args: template", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L113"}, {"id": "template_copier_driver_rationale_231", "label": "Pull ``_exlab_readme.fields`` and reject core-field collisions. Tolerat", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L231"}, {"id": "template_copier_driver_rationale_263", "label": "Render the template into ``dst`` via Copier. Args: tpl: A p", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L263"}, {"id": "template_copier_driver_rationale_308", "label": "Return the set of regular files under ``root`` (recursively). Returns the e", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L308"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "copier", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "yaml", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "exlab_wizard_io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "template_copier_driver_resolvedtemplate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "template_copier_driver_renderresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L95", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "template_copier_driver_templateengine", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L109", "weight": 1.0}, {"source": "template_copier_driver_templateengine", "target": "template_copier_driver_templateengine_resolve", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L112", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "template_copier_driver_extract_readme_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L228", "weight": 1.0}, {"source": "template_copier_driver_templateengine", "target": "template_copier_driver_templateengine_render", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L257", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "target": "template_copier_driver_snapshot_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L307", "weight": 1.0}, {"source": "template_copier_driver_templateengine_resolve", "target": "template_copier_driver_extract_readme_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L198", "weight": 1.0}, {"source": "template_copier_driver_templateengine_resolve", "target": "template_copier_driver_resolvedtemplate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L215", "weight": 1.0}, {"source": "template_copier_driver_templateengine_render", "target": "template_copier_driver_snapshot_files", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L283", "weight": 1.0}, {"source": "template_copier_driver_templateengine_render", "target": "template_copier_driver_renderresult", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L304", "weight": 1.0}, {"source": "template_copier_driver_snapshot_files", "target": "template_copier_driver_templateengine_resolve", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L318", "weight": 1.0}, {"source": "template_copier_driver_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_template_copier_driver_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L1", "weight": 1.0}, {"source": "template_copier_driver_rationale_61", "target": "template_copier_driver_resolvedtemplate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L61", "weight": 1.0}, {"source": "template_copier_driver_rationale_96", "target": "template_copier_driver_renderresult", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L96", "weight": 1.0}, {"source": "template_copier_driver_rationale_110", "target": "template_copier_driver_templateengine", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L110", "weight": 1.0}, {"source": "template_copier_driver_rationale_113", "target": "template_copier_driver_templateengine_resolve", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L113", "weight": 1.0}, {"source": "template_copier_driver_rationale_231", "target": "template_copier_driver_templateengine_extract_readme_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L231", "weight": 1.0}, {"source": "template_copier_driver_rationale_263", "target": "template_copier_driver_templateengine_render", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L263", "weight": 1.0}, {"source": "template_copier_driver_rationale_308", "target": "template_copier_driver_snapshot_files", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L308", "weight": 1.0}], "raw_calls": [{"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L136"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "TemplateLoadError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L137"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "load_yaml_manifest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L142"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "TemplateLoadError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L144"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "TemplateLoadError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L148"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L153"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L154"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "TemplateLoadError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L155"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "TemplateType", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L159"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "TemplateLoadError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L161"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L163"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "TemplateLoadError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L166"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L172"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L173"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L173"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "TemplateLoadError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L174"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L182"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L183"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "TemplateLoadError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L184"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L187"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "RunScope", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L190"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "TemplateLoadError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L192"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L194"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L202"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L209"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L210"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L210"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L212"}, {"caller_nid": "template_copier_driver_templateengine_resolve", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L213"}, {"caller_nid": "template_copier_driver_extract_readme_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L239"}, {"caller_nid": "template_copier_driver_extract_readme_fields", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L240"}, {"caller_nid": "template_copier_driver_extract_readme_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L242"}, {"caller_nid": "template_copier_driver_extract_readme_fields", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L243"}, {"caller_nid": "template_copier_driver_extract_readme_fields", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L246"}, {"caller_nid": "template_copier_driver_extract_readme_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L248"}, {"caller_nid": "template_copier_driver_extract_readme_fields", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L249"}, {"caller_nid": "template_copier_driver_extract_readme_fields", "callee": "TemplateCoreFieldRedeclaredError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L250"}, {"caller_nid": "template_copier_driver_templateengine_render", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L291"}, {"caller_nid": "template_copier_driver_templateengine_render", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L293"}, {"caller_nid": "template_copier_driver_templateengine_render", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L294"}, {"caller_nid": "template_copier_driver_templateengine_render", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L303"}, {"caller_nid": "template_copier_driver_snapshot_files", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L314"}, {"caller_nid": "template_copier_driver_snapshot_files", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L315"}, {"caller_nid": "template_copier_driver_snapshot_files", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L316"}, {"caller_nid": "template_copier_driver_snapshot_files", "callee": "rglob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L319"}, {"caller_nid": "template_copier_driver_snapshot_files", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py", "source_location": "L319"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/1f8336d331d7e7555033f3665c5237a3ffc20a539bb3052235f66b7794dd8a70.json b/graphify-out/cache/ast/1f8336d331d7e7555033f3665c5237a3ffc20a539bb3052235f66b7794dd8a70.json new file mode 100644 index 0000000..a8a55ba --- /dev/null +++ b/graphify-out/cache/ast/1f8336d331d7e7555033f3665c5237a3ffc20a539bb3052235f66b7794dd8a70.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_test_creation_json_concurrent_writes_py", "label": "test_creation_json_concurrent_writes.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L1"}, {"id": "integration_test_creation_json_concurrent_writes_build_minimal_payload", "label": "_build_minimal_payload()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L33"}, {"id": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "label": "test_ten_concurrent_mutations_all_land()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L57"}, {"id": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", "label": "test_concurrent_mutations_keep_schema_at_current_version()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L94"}, {"id": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", "label": "test_concurrent_mutations_keep_file_valid_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L131"}, {"id": "integration_test_creation_json_concurrent_writes_rationale_1", "label": "Integration test: concurrent ``creation.json`` writers serialize correctly. Spe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L1"}, {"id": "integration_test_creation_json_concurrent_writes_rationale_58", "label": "Run 10 ``update_creation_atomic`` calls concurrently against the same file.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L58"}, {"id": "integration_test_creation_json_concurrent_writes_rationale_97", "label": "The writer pins ``schema_version`` to the current version on every write. Co", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L97"}, {"id": "integration_test_creation_json_concurrent_writes_rationale_132", "label": "An interleaved write must never produce a half-written file. The ``os.replac", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L132"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_integration_test_creation_json_concurrent_writes_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_creation_json_concurrent_writes_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_creation_json_concurrent_writes_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_creation_json_concurrent_writes_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_creation_json_concurrent_writes_py", "target": "exlab_wizard_cache_creation_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_creation_json_concurrent_writes_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_creation_json_concurrent_writes_py", "target": "integration_test_creation_json_concurrent_writes_build_minimal_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_creation_json_concurrent_writes_py", "target": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_creation_json_concurrent_writes_py", "target": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L94", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_creation_json_concurrent_writes_py", "target": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L131", "weight": 1.0}, {"source": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "target": "integration_test_creation_json_concurrent_writes_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L62", "weight": 1.0}, {"source": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", "target": "integration_test_creation_json_concurrent_writes_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L101", "weight": 1.0}, {"source": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", "target": "integration_test_creation_json_concurrent_writes_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L138", "weight": 1.0}, {"source": "integration_test_creation_json_concurrent_writes_rationale_1", "target": "users_alex_projects_exlabwizard_tests_integration_test_creation_json_concurrent_writes_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L1", "weight": 1.0}, {"source": "integration_test_creation_json_concurrent_writes_rationale_58", "target": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L58", "weight": 1.0}, {"source": "integration_test_creation_json_concurrent_writes_rationale_97", "target": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L97", "weight": 1.0}, {"source": "integration_test_creation_json_concurrent_writes_rationale_132", "target": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L132", "weight": 1.0}], "raw_calls": [{"caller_nid": "integration_test_creation_json_concurrent_writes_build_minimal_payload", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L34"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_build_minimal_payload", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L40"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_build_minimal_payload", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L45"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_build_minimal_payload", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L52"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L61"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "callee": "write_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L62"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "callee": "gather", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L80"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L82"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "callee": "make_mutator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L82"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L82"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L83"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L87"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L87"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L89"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L90"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L100"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", "callee": "write_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L101"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", "callee": "gather", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L119"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L121"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", "callee": "make_mutator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L121"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L121"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L122"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L126"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L126"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L137"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", "callee": "write_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L138"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", "callee": "gather", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L154"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L155"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", "callee": "make_mutator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L155"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L155"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L155"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L160"}, {"caller_nid": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py", "source_location": "L160"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/209f8ea1017e551f34ca7524b5d7a0beccc3aa7f561a0c23c54124d0fa8f0ac5.json b/graphify-out/cache/ast/209f8ea1017e551f34ca7524b5d7a0beccc3aa7f561a0c23c54124d0fa8f0ac5.json new file mode 100644 index 0000000..ca3e613 --- /dev/null +++ b/graphify-out/cache/ast/209f8ea1017e551f34ca7524b5d7a0beccc3aa7f561a0c23c54124d0fa8f0ac5.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_clear_py", "label": "staging_clear.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L1"}, {"id": "orchestrator_staging_clear_clear_run_dir", "label": "clear_run_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L33"}, {"id": "orchestrator_staging_clear_rationale_1", "label": "Operator-facing staging-clear helper. Backend Spec \u00a713.7. The operator-free per", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L1"}, {"id": "orchestrator_staging_clear_rationale_34", "label": "Delete a staged run's data files; return ``(file_count, bytes_freed)``. Ide", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L34"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_clear_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_clear_py", "target": "exlab_wizard_cache_sync_state_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_clear_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_clear_py", "target": "exlab_wizard_orchestrator_scan", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_clear_py", "target": "exlab_wizard_sync_run_delete", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_clear_py", "target": "orchestrator_staging_clear_clear_run_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L33", "weight": 1.0}, {"source": "orchestrator_staging_clear_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_staging_clear_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L1", "weight": 1.0}, {"source": "orchestrator_staging_clear_rationale_34", "target": "orchestrator_staging_clear_clear_run_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L34", "weight": 1.0}], "raw_calls": [{"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L49"}, {"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L52"}, {"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "read_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L53"}, {"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L54"}, {"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "count_files_and_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L58"}, {"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L62"}, {"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "delete_run_files", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L68"}, {"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "mark_cleared_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L71"}, {"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L73"}, {"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "max", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L76"}, {"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "max", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L77"}, {"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L78"}, {"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "max", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L80"}, {"caller_nid": "orchestrator_staging_clear_clear_run_dir", "callee": "max", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py", "source_location": "L80"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/223341f2dcfcf951460efaf4ac5862c7921665f50bea6dfc33e9e59c1571dfe2.json b/graphify-out/cache/ast/223341f2dcfcf951460efaf4ac5862c7921665f50bea6dfc33e9e59c1571dfe2.json new file mode 100644 index 0000000..530c4f9 --- /dev/null +++ b/graphify-out/cache/ast/223341f2dcfcf951460efaf4ac5862c7921665f50bea6dfc33e9e59c1571dfe2.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "label": "test_host_isolation.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L1"}, {"id": "plugins_test_host_isolation_stubregistry", "label": "_StubRegistry", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L50"}, {"id": "plugins_test_host_isolation_stubregistry_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L53"}, {"id": "plugins_test_host_isolation_stubregistry_get_record", "label": ".get_record()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L56"}, {"id": "plugins_test_host_isolation_record_from_fixture", "label": "_record_from_fixture()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L60"}, {"id": "plugins_test_host_isolation_make_dst_with_txt", "label": "_make_dst_with_txt()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L89"}, {"id": "plugins_test_host_isolation_ctx", "label": "_ctx()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L98"}, {"id": "plugins_test_host_isolation_refuse_input", "label": "_refuse_input()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L114"}, {"id": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", "label": "test_hello_plugin_runs_successfully()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L124"}, {"id": "plugins_test_host_isolation_test_timeout_enforcement", "label": "test_timeout_enforcement()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L149"}, {"id": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", "label": "test_plugin_error_does_not_abort_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L182"}, {"id": "plugins_test_host_isolation_test_input_required_suspend_resume", "label": "test_input_required_suspend_resume()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L220"}, {"id": "plugins_test_host_isolation_test_input_required_cancelled", "label": "test_input_required_cancelled()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L257"}, {"id": "plugins_test_host_isolation_test_subprocess_crash_contained", "label": "test_subprocess_crash_contained()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L284"}, {"id": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", "label": "test_policy_violation_reverts_forbidden_write()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L323"}, {"id": "plugins_test_host_isolation_test_sanitized_environment_passes_through_path_home_lang", "label": "test_sanitized_environment_passes_through_path_home_lang()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L359"}, {"id": "plugins_test_host_isolation_rationale_1", "label": "Integration tests for :class:`PluginHost`. Backend Spec \u00a76.3. Each test spawns", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L1"}, {"id": "plugins_test_host_isolation_rationale_51", "label": "Minimal :class:`PluginRegistryProtocol` impl backed by a dict.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L51"}, {"id": "plugins_test_host_isolation_rationale_67", "label": "Build a :class:`PluginRecord` pointing at one fixture plugin. ``hello_plugi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L67"}, {"id": "plugins_test_host_isolation_rationale_90", "label": "Create a destination tree with a single ``data.txt`` file.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L90"}, {"id": "plugins_test_host_isolation_rationale_99", "label": "Build a :class:`PluginContext` rooted at ``dst``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L99"}, {"id": "plugins_test_host_isolation_rationale_115", "label": "Default ``on_input_required`` callback for tests that don't expect a prompt.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L115"}, {"id": "plugins_test_host_isolation_rationale_125", "label": "Backend Spec \u00a76.5: the canonical hello-world plugin appends ``hello\\\\n``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L125"}, {"id": "plugins_test_host_isolation_rationale_150", "label": "Backend Spec \u00a76.3.4: the host must SIGTERM/SIGKILL on wall-clock timeout.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L150"}, {"id": "plugins_test_host_isolation_rationale_183", "label": "Backend Spec \u00a76.1.3: a plugin error must not abort the surrounding pass.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L183"}, {"id": "plugins_test_host_isolation_rationale_221", "label": "Backend Spec \u00a76.4: the host must re-spawn the worker on operator reply.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L221"}, {"id": "plugins_test_host_isolation_rationale_258", "label": "Backend Spec \u00a76.4: an operator cancel must abort the whole pass.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L258"}, {"id": "plugins_test_host_isolation_rationale_285", "label": "Backend Spec \u00a76.3.4: a worker hard-exit must not raise into the host.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L285"}, {"id": "plugins_test_host_isolation_rationale_324", "label": "Backend Spec \u00a76.1.5: a write to README.md must be detected and reverted.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L324"}, {"id": "plugins_test_host_isolation_rationale_360", "label": "Backend Spec \u00a76.3.1: only PATH, HOME, LANG, EXLAB_* reach the worker. Skipp", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L360"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "exlab_wizard_constants_enums", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "exlab_wizard_plugins_base", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "exlab_wizard_plugins_host", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "exlab_wizard_plugins_logger", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "plugins_test_host_isolation_stubregistry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L50", "weight": 1.0}, {"source": "plugins_test_host_isolation_stubregistry", "target": "plugins_test_host_isolation_stubregistry_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L53", "weight": 1.0}, {"source": "plugins_test_host_isolation_stubregistry", "target": "plugins_test_host_isolation_stubregistry_get_record", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "plugins_test_host_isolation_record_from_fixture", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "plugins_test_host_isolation_make_dst_with_txt", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L89", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "plugins_test_host_isolation_ctx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L98", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "plugins_test_host_isolation_refuse_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L114", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L124", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "plugins_test_host_isolation_test_timeout_enforcement", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L149", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L182", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "plugins_test_host_isolation_test_input_required_suspend_resume", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L220", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "plugins_test_host_isolation_test_input_required_cancelled", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L257", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "plugins_test_host_isolation_test_subprocess_crash_contained", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L284", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L323", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "target": "plugins_test_host_isolation_test_sanitized_environment_passes_through_path_home_lang", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L359", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", "target": "plugins_test_host_isolation_record_from_fixture", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L126", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", "target": "plugins_test_host_isolation_stubregistry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L127", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", "target": "plugins_test_host_isolation_make_dst_with_txt", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L130", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", "target": "plugins_test_host_isolation_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L131", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_timeout_enforcement", "target": "plugins_test_host_isolation_record_from_fixture", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L151", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_timeout_enforcement", "target": "plugins_test_host_isolation_stubregistry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L152", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_timeout_enforcement", "target": "plugins_test_host_isolation_make_dst_with_txt", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L155", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_timeout_enforcement", "target": "plugins_test_host_isolation_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L156", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", "target": "plugins_test_host_isolation_record_from_fixture", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L184", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", "target": "plugins_test_host_isolation_stubregistry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L186", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", "target": "plugins_test_host_isolation_make_dst_with_txt", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L194", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", "target": "plugins_test_host_isolation_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L195", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_input_required_suspend_resume", "target": "plugins_test_host_isolation_record_from_fixture", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L222", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_input_required_suspend_resume", "target": "plugins_test_host_isolation_stubregistry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L223", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_input_required_suspend_resume", "target": "plugins_test_host_isolation_make_dst_with_txt", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L226", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_input_required_suspend_resume", "target": "plugins_test_host_isolation_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L227", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_input_required_cancelled", "target": "plugins_test_host_isolation_record_from_fixture", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L259", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_input_required_cancelled", "target": "plugins_test_host_isolation_stubregistry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L260", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_input_required_cancelled", "target": "plugins_test_host_isolation_make_dst_with_txt", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L263", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_input_required_cancelled", "target": "plugins_test_host_isolation_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L264", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_subprocess_crash_contained", "target": "plugins_test_host_isolation_record_from_fixture", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L286", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_subprocess_crash_contained", "target": "plugins_test_host_isolation_stubregistry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L288", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_subprocess_crash_contained", "target": "plugins_test_host_isolation_make_dst_with_txt", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L296", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_subprocess_crash_contained", "target": "plugins_test_host_isolation_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L297", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", "target": "plugins_test_host_isolation_record_from_fixture", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L325", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", "target": "plugins_test_host_isolation_stubregistry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L326", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", "target": "plugins_test_host_isolation_make_dst_with_txt", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L329", "weight": 1.0}, {"source": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", "target": "plugins_test_host_isolation_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L330", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_1", "target": "users_alex_projects_exlabwizard_tests_integration_plugins_test_host_isolation_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L1", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_51", "target": "plugins_test_host_isolation_stubregistry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L51", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_67", "target": "plugins_test_host_isolation_record_from_fixture", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L67", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_90", "target": "plugins_test_host_isolation_make_dst_with_txt", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L90", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_99", "target": "plugins_test_host_isolation_ctx", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L99", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_115", "target": "plugins_test_host_isolation_refuse_input", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L115", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_125", "target": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L125", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_150", "target": "plugins_test_host_isolation_test_timeout_enforcement", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L150", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_183", "target": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L183", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_221", "target": "plugins_test_host_isolation_test_input_required_suspend_resume", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L221", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_258", "target": "plugins_test_host_isolation_test_input_required_cancelled", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L258", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_285", "target": "plugins_test_host_isolation_test_subprocess_crash_contained", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L285", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_324", "target": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L324", "weight": 1.0}, {"source": "plugins_test_host_isolation_rationale_360", "target": "plugins_test_host_isolation_test_sanitized_environment_passes_through_path_home_lang", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L360", "weight": 1.0}], "raw_calls": [{"caller_nid": "plugins_test_host_isolation_stubregistry_get_record", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L57"}, {"caller_nid": "plugins_test_host_isolation_record_from_fixture", "callee": "PluginRecord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L74"}, {"caller_nid": "plugins_test_host_isolation_make_dst_with_txt", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L92"}, {"caller_nid": "plugins_test_host_isolation_make_dst_with_txt", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L94"}, {"caller_nid": "plugins_test_host_isolation_ctx", "callee": "PluginContext", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L100"}, {"caller_nid": "plugins_test_host_isolation_ctx", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L101"}, {"caller_nid": "plugins_test_host_isolation_ctx", "callee": "HostPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L110"}, {"caller_nid": "plugins_test_host_isolation_refuse_input", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L116"}, {"caller_nid": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", "callee": "PluginHost", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L128"}, {"caller_nid": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", "callee": "run_pass", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L133"}, {"caller_nid": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L141"}, {"caller_nid": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L146"}, {"caller_nid": "plugins_test_host_isolation_test_timeout_enforcement", "callee": "PluginHost", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L153"}, {"caller_nid": "plugins_test_host_isolation_test_timeout_enforcement", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L161"}, {"caller_nid": "plugins_test_host_isolation_test_timeout_enforcement", "callee": "run_pass", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L162"}, {"caller_nid": "plugins_test_host_isolation_test_timeout_enforcement", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L172"}, {"caller_nid": "plugins_test_host_isolation_test_timeout_enforcement", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L179"}, {"caller_nid": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", "callee": "PluginHost", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L192"}, {"caller_nid": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", "callee": "run_pass", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L197"}, {"caller_nid": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L205"}, {"caller_nid": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L217"}, {"caller_nid": "plugins_test_host_isolation_test_input_required_suspend_resume", "callee": "PluginHost", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L224"}, {"caller_nid": "plugins_test_host_isolation_test_input_required_suspend_resume", "callee": "run_pass", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L235"}, {"caller_nid": "plugins_test_host_isolation_test_input_required_suspend_resume", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L243"}, {"caller_nid": "plugins_test_host_isolation_test_input_required_suspend_resume", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L246"}, {"caller_nid": "plugins_test_host_isolation_test_input_required_suspend_resume", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L246"}, {"caller_nid": "plugins_test_host_isolation_test_input_required_suspend_resume", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L249"}, {"caller_nid": "plugins_test_host_isolation_test_input_required_suspend_resume", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L254"}, {"caller_nid": "plugins_test_host_isolation_test_input_required_cancelled", "callee": "PluginHost", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L261"}, {"caller_nid": "plugins_test_host_isolation_test_input_required_cancelled", "callee": "run_pass", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L271"}, {"caller_nid": "plugins_test_host_isolation_test_input_required_cancelled", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L281"}, {"caller_nid": "plugins_test_host_isolation_test_subprocess_crash_contained", "callee": "PluginHost", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L294"}, {"caller_nid": "plugins_test_host_isolation_test_subprocess_crash_contained", "callee": "run_pass", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L301"}, {"caller_nid": "plugins_test_host_isolation_test_subprocess_crash_contained", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L309"}, {"caller_nid": "plugins_test_host_isolation_test_subprocess_crash_contained", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L320"}, {"caller_nid": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", "callee": "PluginHost", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L327"}, {"caller_nid": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", "callee": "run_pass", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L332"}, {"caller_nid": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L340"}, {"caller_nid": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L344"}, {"caller_nid": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L347"}, {"caller_nid": "plugins_test_host_isolation_test_sanitized_environment_passes_through_path_home_lang", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py", "source_location": "L367"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/2242281b8c9c6c334a12caacc96d1838abc61f334b99ef8db21b0488095b7f09.json b/graphify-out/cache/ast/2242281b8c9c6c334a12caacc96d1838abc61f334b99ef8db21b0488095b7f09.json new file mode 100644 index 0000000..916b386 --- /dev/null +++ b/graphify-out/cache/ast/2242281b8c9c6c334a12caacc96d1838abc61f334b99ef8db21b0488095b7f09.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "label": "test_state_machine.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L1"}, {"id": "controller_test_state_machine_test_state_to_phase_pending_returns_none", "label": "test_state_to_phase_pending_returns_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L25"}, {"id": "controller_test_state_machine_test_state_to_phase_validating_returns_validating_inputs", "label": "test_state_to_phase_validating_returns_validating_inputs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L29"}, {"id": "controller_test_state_machine_test_state_to_phase_rendering_returns_rendering_template", "label": "test_state_to_phase_rendering_returns_rendering_template()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L33"}, {"id": "controller_test_state_machine_test_state_to_phase_plugin_pass_returns_running_plugins", "label": "test_state_to_phase_plugin_pass_returns_running_plugins()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L37"}, {"id": "controller_test_state_machine_test_state_to_phase_input_required_returns_input_required", "label": "test_state_to_phase_input_required_returns_input_required()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L41"}, {"id": "controller_test_state_machine_test_state_to_phase_cache_write_returns_writing_cache", "label": "test_state_to_phase_cache_write_returns_writing_cache()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L45"}, {"id": "controller_test_state_machine_test_state_to_phase_post_validate_returns_validating_post_creation", "label": "test_state_to_phase_post_validate_returns_validating_post_creation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L49"}, {"id": "controller_test_state_machine_test_state_to_phase_sync_queued_returns_queueing_nas_sync", "label": "test_state_to_phase_sync_queued_returns_queueing_nas_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L53"}, {"id": "controller_test_state_machine_test_state_to_phase_done_returns_done", "label": "test_state_to_phase_done_returns_done()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L57"}, {"id": "controller_test_state_machine_test_state_to_phase_failed_returns_none", "label": "test_state_to_phase_failed_returns_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L61"}, {"id": "controller_test_state_machine_test_state_to_phase_aborted_returns_none", "label": "test_state_to_phase_aborted_returns_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L65"}, {"id": "controller_test_state_machine_test_state_to_phase_covers_every_state", "label": "test_state_to_phase_covers_every_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L69"}, {"id": "controller_test_state_machine_test_pending_transitions_to_validating", "label": "test_pending_transitions_to_validating()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L82"}, {"id": "controller_test_state_machine_test_validating_transitions_to_rendering", "label": "test_validating_transitions_to_rendering()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L86"}, {"id": "controller_test_state_machine_test_rendering_transitions_to_plugin_pass", "label": "test_rendering_transitions_to_plugin_pass()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L90"}, {"id": "controller_test_state_machine_test_plugin_pass_transitions_to_input_required_and_cache_write", "label": "test_plugin_pass_transitions_to_input_required_and_cache_write()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L94"}, {"id": "controller_test_state_machine_test_input_required_transitions_back_to_plugin_pass", "label": "test_input_required_transitions_back_to_plugin_pass()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L100"}, {"id": "controller_test_state_machine_test_cache_write_transitions_to_post_validate", "label": "test_cache_write_transitions_to_post_validate()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L104"}, {"id": "controller_test_state_machine_test_post_validate_transitions_to_sync_queued", "label": "test_post_validate_transitions_to_sync_queued()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L108"}, {"id": "controller_test_state_machine_test_sync_queued_transitions_to_done", "label": "test_sync_queued_transitions_to_done()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L112"}, {"id": "controller_test_state_machine_test_fail_allowed_from_every_non_terminal_state", "label": "test_fail_allowed_from_every_non_terminal_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L134"}, {"id": "controller_test_state_machine_test_aborted_allowed_from_every_non_terminal_state", "label": "test_aborted_allowed_from_every_non_terminal_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L151"}, {"id": "controller_test_state_machine_test_done_is_terminal", "label": "test_done_is_terminal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L160"}, {"id": "controller_test_state_machine_test_failed_is_terminal", "label": "test_failed_is_terminal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L164"}, {"id": "controller_test_state_machine_test_aborted_is_terminal", "label": "test_aborted_is_terminal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L168"}, {"id": "controller_test_state_machine_test_assert_transition_allows_legal_forward_edge", "label": "test_assert_transition_allows_legal_forward_edge()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L177"}, {"id": "controller_test_state_machine_test_assert_transition_allows_cancel_from_any_non_terminal", "label": "test_assert_transition_allows_cancel_from_any_non_terminal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L183"}, {"id": "controller_test_state_machine_test_assert_transition_rejects_skipping_a_state", "label": "test_assert_transition_rejects_skipping_a_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L188"}, {"id": "controller_test_state_machine_test_assert_transition_rejects_terminal_to_anything", "label": "test_assert_transition_rejects_terminal_to_anything()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L193"}, {"id": "controller_test_state_machine_test_assert_transition_rejects_done_back_to_pipeline", "label": "test_assert_transition_rejects_done_back_to_pipeline()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L198"}, {"id": "controller_test_state_machine_test_assert_transition_rejects_backwards_through_pipeline", "label": "test_assert_transition_rejects_backwards_through_pipeline()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L203"}, {"id": "controller_test_state_machine_test_session_state_values_match_lowercase_names", "label": "test_session_state_values_match_lowercase_names()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L213"}, {"id": "controller_test_state_machine_test_phase_values_use_spec_strings", "label": "test_phase_values_use_spec_strings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L218"}, {"id": "controller_test_state_machine_test_valid_transitions_keys_cover_every_session_state", "label": "test_valid_transitions_keys_cover_every_session_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L229"}, {"id": "controller_test_state_machine_test_assert_transition_rejects_unknown_source_state", "label": "test_assert_transition_rejects_unknown_source_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L233"}, {"id": "controller_test_state_machine_rationale_1", "label": "Tests for ``exlab_wizard.controller.state_machine``. The state machine is the c", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L1"}, {"id": "controller_test_state_machine_rationale_70", "label": "Every ``SessionState`` value must have an explicit mapping entry.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L70"}, {"id": "controller_test_state_machine_rationale_234", "label": "The guard rejects a state not present in ``VALID_TRANSITIONS``. We can't ea", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L234"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "exlab_wizard_controller_state_machine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_state_to_phase_pending_returns_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_state_to_phase_validating_returns_validating_inputs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_state_to_phase_rendering_returns_rendering_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_state_to_phase_plugin_pass_returns_running_plugins", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_state_to_phase_input_required_returns_input_required", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_state_to_phase_cache_write_returns_writing_cache", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_state_to_phase_post_validate_returns_validating_post_creation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_state_to_phase_sync_queued_returns_queueing_nas_sync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_state_to_phase_done_returns_done", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_state_to_phase_failed_returns_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L61", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_state_to_phase_aborted_returns_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L65", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_state_to_phase_covers_every_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_pending_transitions_to_validating", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L82", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_validating_transitions_to_rendering", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L86", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_rendering_transitions_to_plugin_pass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L90", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_plugin_pass_transitions_to_input_required_and_cache_write", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L94", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_input_required_transitions_back_to_plugin_pass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L100", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_cache_write_transitions_to_post_validate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L104", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_post_validate_transitions_to_sync_queued", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L108", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_sync_queued_transitions_to_done", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L112", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_fail_allowed_from_every_non_terminal_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L134", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_aborted_allowed_from_every_non_terminal_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L151", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_done_is_terminal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L160", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_failed_is_terminal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L164", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_aborted_is_terminal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L168", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_assert_transition_allows_legal_forward_edge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L177", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_assert_transition_allows_cancel_from_any_non_terminal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L183", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_assert_transition_rejects_skipping_a_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L188", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_assert_transition_rejects_terminal_to_anything", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L193", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_assert_transition_rejects_done_back_to_pipeline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L198", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_assert_transition_rejects_backwards_through_pipeline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L203", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_session_state_values_match_lowercase_names", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L213", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_phase_values_use_spec_strings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L218", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_valid_transitions_keys_cover_every_session_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L229", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "target": "controller_test_state_machine_test_assert_transition_rejects_unknown_source_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L233", "weight": 1.0}, {"source": "controller_test_state_machine_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_controller_test_state_machine_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L1", "weight": 1.0}, {"source": "controller_test_state_machine_rationale_70", "target": "controller_test_state_machine_test_state_to_phase_covers_every_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L70", "weight": 1.0}, {"source": "controller_test_state_machine_rationale_234", "target": "controller_test_state_machine_test_assert_transition_rejects_unknown_source_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L234", "weight": 1.0}], "raw_calls": [{"caller_nid": "controller_test_state_machine_test_state_to_phase_pending_returns_none", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L26"}, {"caller_nid": "controller_test_state_machine_test_state_to_phase_validating_returns_validating_inputs", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L30"}, {"caller_nid": "controller_test_state_machine_test_state_to_phase_rendering_returns_rendering_template", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L34"}, {"caller_nid": "controller_test_state_machine_test_state_to_phase_plugin_pass_returns_running_plugins", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L38"}, {"caller_nid": "controller_test_state_machine_test_state_to_phase_input_required_returns_input_required", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L42"}, {"caller_nid": "controller_test_state_machine_test_state_to_phase_cache_write_returns_writing_cache", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L46"}, {"caller_nid": "controller_test_state_machine_test_state_to_phase_post_validate_returns_validating_post_creation", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L50"}, {"caller_nid": "controller_test_state_machine_test_state_to_phase_sync_queued_returns_queueing_nas_sync", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L54"}, {"caller_nid": "controller_test_state_machine_test_state_to_phase_done_returns_done", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L58"}, {"caller_nid": "controller_test_state_machine_test_state_to_phase_failed_returns_none", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L62"}, {"caller_nid": "controller_test_state_machine_test_state_to_phase_aborted_returns_none", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L66"}, {"caller_nid": "controller_test_state_machine_test_state_to_phase_covers_every_state", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L73"}, {"caller_nid": "controller_test_state_machine_test_state_to_phase_covers_every_state", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L74"}, {"caller_nid": "controller_test_state_machine_test_done_is_terminal", "callee": "frozenset", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L161"}, {"caller_nid": "controller_test_state_machine_test_failed_is_terminal", "callee": "frozenset", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L165"}, {"caller_nid": "controller_test_state_machine_test_aborted_is_terminal", "callee": "frozenset", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L169"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_allows_legal_forward_edge", "callee": "assert_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L179"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_allows_legal_forward_edge", "callee": "assert_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L180"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_allows_cancel_from_any_non_terminal", "callee": "assert_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L184"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_allows_cancel_from_any_non_terminal", "callee": "assert_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L185"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_rejects_skipping_a_state", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L189"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_rejects_skipping_a_state", "callee": "assert_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L190"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_rejects_terminal_to_anything", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L194"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_rejects_terminal_to_anything", "callee": "assert_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L195"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_rejects_done_back_to_pipeline", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L199"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_rejects_done_back_to_pipeline", "callee": "assert_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L200"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_rejects_backwards_through_pipeline", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L204"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_rejects_backwards_through_pipeline", "callee": "assert_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L205"}, {"caller_nid": "controller_test_state_machine_test_session_state_values_match_lowercase_names", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L215"}, {"caller_nid": "controller_test_state_machine_test_valid_transitions_keys_cover_every_session_state", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L230"}, {"caller_nid": "controller_test_state_machine_test_valid_transitions_keys_cover_every_session_state", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L230"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_rejects_unknown_source_state", "callee": "pop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L241"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_rejects_unknown_source_state", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L243"}, {"caller_nid": "controller_test_state_machine_test_assert_transition_rejects_unknown_source_state", "callee": "assert_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py", "source_location": "L244"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/2264f3743151b1ba4e714f4fb35c4faf64a0e391a9637a8c0f9a54267b81493e.json b/graphify-out/cache/ast/2264f3743151b1ba4e714f4fb35c4faf64a0e391a9637a8c0f9a54267b81493e.json new file mode 100644 index 0000000..b356fe3 --- /dev/null +++ b/graphify-out/cache/ast/2264f3743151b1ba4e714f4fb35c4faf64a0e391a9637a8c0f9a54267b81493e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_theme_py", "label": "theme.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L1"}, {"id": "ui_theme_build_root_css", "label": "build_root_css()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L25"}, {"id": "ui_theme_register_theme", "label": "register_theme()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L100"}, {"id": "ui_theme_resolve_assets_dir", "label": "resolve_assets_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L122"}, {"id": "ui_theme_register_static_assets", "label": "register_static_assets()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L137"}, {"id": "ui_theme_rationale_1", "label": "Theme registration for NiceGUI / Quasar. Per Frontend Spec \u00a72.1.1, this module", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L1"}, {"id": "ui_theme_rationale_26", "label": "Render the canonical ``:root { ... }`` CSS block from design tokens. The st", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L26"}, {"id": "ui_theme_rationale_101", "label": "Register the design tokens with NiceGUI / Quasar at app start. Imports Nice", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L101"}, {"id": "ui_theme_rationale_123", "label": "Return the absolute path to the bundled ``assets/`` directory. Resolves bot", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L123"}, {"id": "ui_theme_rationale_138", "label": "Mount the project's ``assets/`` directory at ``/assets``. Idempotent: a mod", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L138"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_theme_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_theme_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_theme_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_theme_py", "target": "exlab_wizard_ui", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_theme_py", "target": "ui_theme_build_root_css", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_theme_py", "target": "ui_theme_register_theme", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L100", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_theme_py", "target": "ui_theme_resolve_assets_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L122", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_theme_py", "target": "ui_theme_register_static_assets", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L137", "weight": 1.0}, {"source": "ui_theme_register_theme", "target": "ui_theme_build_root_css", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L113", "weight": 1.0}, {"source": "ui_theme_register_static_assets", "target": "ui_theme_resolve_assets_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L144", "weight": 1.0}, {"source": "ui_theme_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_theme_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_theme_rationale_26", "target": "ui_theme_build_root_css", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L26", "weight": 1.0}, {"source": "ui_theme_rationale_101", "target": "ui_theme_register_theme", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L101", "weight": 1.0}, {"source": "ui_theme_rationale_123", "target": "ui_theme_resolve_assets_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L123", "weight": 1.0}, {"source": "ui_theme_rationale_138", "target": "ui_theme_register_static_assets", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L138", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_theme_build_root_css", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L33"}, {"caller_nid": "ui_theme_build_root_css", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L33"}, {"caller_nid": "ui_theme_register_theme", "callee": "add_head_html", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L114"}, {"caller_nid": "ui_theme_register_theme", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L115"}, {"caller_nid": "ui_theme_register_theme", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L117"}, {"caller_nid": "ui_theme_resolve_assets_dir", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L132"}, {"caller_nid": "ui_theme_resolve_assets_dir", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L133"}, {"caller_nid": "ui_theme_resolve_assets_dir", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L134"}, {"caller_nid": "ui_theme_resolve_assets_dir", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L134"}, {"caller_nid": "ui_theme_register_static_assets", "callee": "add_static_files", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L149"}, {"caller_nid": "ui_theme_register_static_assets", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L149"}, {"caller_nid": "ui_theme_register_static_assets", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L151"}, {"caller_nid": "ui_theme_register_static_assets", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py", "source_location": "L153"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/228940b4538aa765a8a983f8049fac4242e8d9a1a76bb1af53756da2aeb91574.json b/graphify-out/cache/ast/228940b4538aa765a8a983f8049fac4242e8d9a1a76bb1af53756da2aeb91574.json new file mode 100644 index 0000000..c0e10cb --- /dev/null +++ b/graphify-out/cache/ast/228940b4538aa765a8a983f8049fac4242e8d9a1a76bb1af53756da2aeb91574.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_sync_status_icon_py", "label": "sync_status_icon.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L1"}, {"id": "components_sync_status_icon_sync_status_props", "label": "sync_status_props()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L107"}, {"id": "components_sync_status_icon_sync_status_icon", "label": "sync_status_icon()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L134"}, {"id": "components_sync_status_icon_rationale_1", "label": "Sync-status icon component (Frontend Spec \u00a73.2, \u00a710.5.1). Distinct visual state", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L1"}, {"id": "components_sync_status_icon_rationale_113", "label": "Compute icon + tooltip + retry-counter for a sync status. The ``retry_n``/`", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L113"}, {"id": "components_sync_status_icon_rationale_140", "label": "Build a NiceGUI row containing the icon and optional retry counter.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L140"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_sync_status_icon_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_sync_status_icon_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_sync_status_icon_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_sync_status_icon_py", "target": "components_sync_status_icon_sync_status_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L107", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_sync_status_icon_py", "target": "components_sync_status_icon_sync_status_icon", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L134", "weight": 1.0}, {"source": "components_sync_status_icon_sync_status_icon", "target": "components_sync_status_icon_sync_status_props", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L142", "weight": 1.0}, {"source": "components_sync_status_icon_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_sync_status_icon_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L1", "weight": 1.0}, {"source": "components_sync_status_icon_rationale_113", "target": "components_sync_status_icon_sync_status_props", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L113", "weight": 1.0}, {"source": "components_sync_status_icon_rationale_140", "target": "components_sync_status_icon_sync_status_icon", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L140", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_sync_status_icon_sync_status_props", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L119"}, {"caller_nid": "components_sync_status_icon_sync_status_props", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L119"}, {"caller_nid": "components_sync_status_icon_sync_status_props", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L121"}, {"caller_nid": "components_sync_status_icon_sync_status_props", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L122"}, {"caller_nid": "components_sync_status_icon_sync_status_props", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L124"}, {"caller_nid": "components_sync_status_icon_sync_status_icon", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L148"}, {"caller_nid": "components_sync_status_icon_sync_status_icon", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L148"}, {"caller_nid": "components_sync_status_icon_sync_status_icon", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L148"}, {"caller_nid": "components_sync_status_icon_sync_status_icon", "callee": "tooltip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L150"}, {"caller_nid": "components_sync_status_icon_sync_status_icon", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L150"}, {"caller_nid": "components_sync_status_icon_sync_status_icon", "callee": "icon", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L150"}, {"caller_nid": "components_sync_status_icon_sync_status_icon", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L154"}, {"caller_nid": "components_sync_status_icon_sync_status_icon", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py", "source_location": "L154"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/2491e9cf09acd7dd830e2b375a59aca1a45a4117f9e7b5d0668fff2aef4b30a9.json b/graphify-out/cache/ast/2491e9cf09acd7dd830e2b375a59aca1a45a4117f9e7b5d0668fff2aef4b30a9.json new file mode 100644 index 0000000..8d9a643 --- /dev/null +++ b/graphify-out/cache/ast/2491e9cf09acd7dd830e2b375a59aca1a45a4117f9e7b5d0668fff2aef4b30a9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_13_equipment_to_orchestrator_data_flow_md", "label": "13_Equipment_to_Orchestrator_Data_Flow.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L1"}, {"id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", "label": "13. Equipment-to-Orchestrator Data Flow", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L1"}, {"id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_1_topology", "label": "13.1 Topology", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L7"}, {"id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_1", "label": "code:block1 ([Equipment Machine A] --push--> [Orchestrator /staging/EQU)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L9"}, {"id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_2_staging_area_layout", "label": "13.2 Staging Area Layout", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L26"}, {"id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_2", "label": "code:block2 (/staging/)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L28"}, {"id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_3_run_lifecycle_states", "label": "13.3 Run Lifecycle States", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L52"}, {"id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_4_ingest_json_schema", "label": "13.4 `ingest.json` Schema", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L64"}, {"id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_3", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L66"}, {"id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_5_run_completeness_signal", "label": "13.5 Run Completeness Signal", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L108"}, {"id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_6_transport_handling", "label": "13.6 Transport Handling", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L119"}, {"id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_7_staging_cleanup", "label": "13.7 Staging Cleanup", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L123"}, {"id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_4", "label": "code:yaml (orchestrator:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L127"}, {"id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_8_staging_state_query_backend_contract", "label": "13.8 Staging State Query (Backend Contract)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L140"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_13_equipment_to_orchestrator_data_flow_md", "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L1", "weight": 1.0}, {"source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_1_topology", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L7", "weight": 1.0}, {"source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_1_topology", "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L9", "weight": 1.0}, {"source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_2_staging_area_layout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L26", "weight": 1.0}, {"source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_2_staging_area_layout", "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L28", "weight": 1.0}, {"source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_3_run_lifecycle_states", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L52", "weight": 1.0}, {"source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_4_ingest_json_schema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L64", "weight": 1.0}, {"source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_4_ingest_json_schema", "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L66", "weight": 1.0}, {"source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_5_run_completeness_signal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L108", "weight": 1.0}, {"source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_6_transport_handling", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L119", "weight": 1.0}, {"source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_7_staging_cleanup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L123", "weight": 1.0}, {"source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_7_staging_cleanup", "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L127", "weight": 1.0}, {"source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_8_staging_state_query_backend_contract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", "source_location": "L140", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/26e0e88fa2471274a3a37dbdb859d18a59f32578bc6e53f74b16f0f4a009d677.json b/graphify-out/cache/ast/26e0e88fa2471274a3a37dbdb859d18a59f32578bc6e53f74b16f0f4a009d677.json new file mode 100644 index 0000000..fb4c673 --- /dev/null +++ b/graphify-out/cache/ast/26e0e88fa2471274a3a37dbdb859d18a59f32578bc6e53f74b16f0f4a009d677.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_user_guide_index_md", "label": "index.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/index.md", "source_location": "L1"}, {"id": "user_guide_index_user_guide", "label": "User Guide", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/index.md", "source_location": "L1"}, {"id": "user_guide_index_capability_map", "label": "Capability map", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/index.md", "source_location": "L17"}, {"id": "user_guide_index_codeblock_1", "label": "code:{toctree} (:maxdepth: 1)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/index.md", "source_location": "L36"}, {"id": "user_guide_index_conventions", "label": "Conventions", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/index.md", "source_location": "L51"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_user_guide_index_md", "target": "user_guide_index_user_guide", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/index.md", "source_location": "L1", "weight": 1.0}, {"source": "user_guide_index_user_guide", "target": "user_guide_index_capability_map", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/index.md", "source_location": "L17", "weight": 1.0}, {"source": "user_guide_index_capability_map", "target": "user_guide_index_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/index.md", "source_location": "L36", "weight": 1.0}, {"source": "user_guide_index_user_guide", "target": "user_guide_index_conventions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/index.md", "source_location": "L51", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/2872a9bda916e99d684370c74ba7ff01707ca07f1705a80a6800f6cb6dcbf583.json b/graphify-out/cache/ast/2872a9bda916e99d684370c74ba7ff01707ca07f1705a80a6800f6cb6dcbf583.json new file mode 100644 index 0000000..68f1c3f --- /dev/null +++ b/graphify-out/cache/ast/2872a9bda916e99d684370c74ba7ff01707ca07f1705a80a6800f6cb6dcbf583.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_18_relay_receive_py", "label": "test_flow_18_relay_receive.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L1"}, {"id": "e2e_test_flow_18_relay_receive_goto", "label": "_goto()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L11"}, {"id": "e2e_test_flow_18_relay_receive_test_flow_18_received_equipment_node_appears", "label": "test_flow_18_received_equipment_node_appears()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L24"}, {"id": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", "label": "test_flow_18_received_metadata_shows_relay_badge()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L31"}, {"id": "e2e_test_flow_18_relay_receive_rationale_1", "label": "E2E flow 18: relay-receive \u2014 received equipment auto-discovery (Redesign \u00a73.3).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_18_relay_receive_py", "target": "e2e_test_flow_18_relay_receive_goto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_18_relay_receive_py", "target": "e2e_test_flow_18_relay_receive_test_flow_18_received_equipment_node_appears", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_18_relay_receive_py", "target": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L31", "weight": 1.0}, {"source": "e2e_test_flow_18_relay_receive_test_flow_18_received_equipment_node_appears", "target": "e2e_test_flow_18_relay_receive_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L25", "weight": 1.0}, {"source": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", "target": "e2e_test_flow_18_relay_receive_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L32", "weight": 1.0}, {"source": "e2e_test_flow_18_relay_receive_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_18_relay_receive_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_18_relay_receive_goto", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L13"}, {"caller_nid": "e2e_test_flow_18_relay_receive_goto", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L15"}, {"caller_nid": "e2e_test_flow_18_relay_receive_goto", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L16"}, {"caller_nid": "e2e_test_flow_18_relay_receive_goto", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L20"}, {"caller_nid": "e2e_test_flow_18_relay_receive_goto", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L21"}, {"caller_nid": "e2e_test_flow_18_relay_receive_test_flow_18_received_equipment_node_appears", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L26"}, {"caller_nid": "e2e_test_flow_18_relay_receive_test_flow_18_received_equipment_node_appears", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L27"}, {"caller_nid": "e2e_test_flow_18_relay_receive_test_flow_18_received_equipment_node_appears", "callee": "inner_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L28"}, {"caller_nid": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L33"}, {"caller_nid": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L33"}, {"caller_nid": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L36"}, {"caller_nid": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L36"}, {"caller_nid": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L37"}, {"caller_nid": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L39"}, {"caller_nid": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L39"}, {"caller_nid": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L40"}, {"caller_nid": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py", "source_location": "L40"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/2898ac39fd6068c9da11e557ac118aa7335a5012b73c1b58eaf8a438eb80d664.json b/graphify-out/cache/ast/2898ac39fd6068c9da11e557ac118aa7335a5012b73c1b58eaf8a438eb80d664.json new file mode 100644 index 0000000..9c53afe --- /dev/null +++ b/graphify-out/cache/ast/2898ac39fd6068c9da11e557ac118aa7335a5012b73c1b58eaf8a438eb80d664.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "label": "handlers.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L1"}, {"id": "logging_handlers_equipmentscopedfilehandler", "label": "EquipmentScopedFileHandler", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L37"}, {"id": "logging_handlers_equipmentscopedfilehandler_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L57"}, {"id": "logging_handlers_equipmentscopedfilehandler_emit", "label": ".emit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L74"}, {"id": "logging_handlers_equipmentscopedfilehandler_close", "label": ".close()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L90"}, {"id": "logging_handlers_equipmentscopedfilehandler_open_for", "label": "._open_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L105"}, {"id": "logging_handlers_equipmentscopedfilehandler_compose_path", "label": "._compose_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L124"}, {"id": "logging_handlers_openlogfile", "label": "_OpenLogFile", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L139"}, {"id": "logging_handlers_openlogfile_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L152"}, {"id": "logging_handlers_open", "label": "open()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L158"}, {"id": "logging_handlers_openlogfile_write", "label": ".write()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L183"}, {"id": "logging_handlers_openlogfile_fsync", "label": ".fsync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L189"}, {"id": "logging_handlers_openlogfile_close", "label": ".close()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L197"}, {"id": "logging_handlers_rationale_1", "label": "Equipment-scoped file handler. Backend Spec \u00a716.2.4. The :class:`EquipmentScope", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L1"}, {"id": "logging_handlers_rationale_38", "label": "Per-equipment ``wizard..log`` writer. Resolves ``///.exlab-wizard/wizard..log``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L125"}, {"id": "logging_handlers_rationale_140", "label": "Append-mode log file with platform-appropriate share / append flags. The wr", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L140"}, {"id": "logging_handlers_rationale_159", "label": "Open ``path`` in append mode with the platform-appropriate flags.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L159"}, {"id": "logging_handlers_rationale_184", "label": "Append ``line`` (already newline-terminated) to the file.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L184"}, {"id": "logging_handlers_rationale_190", "label": "``os.fsync`` the underlying file descriptor. Called only on ``ERROR``-l", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L190"}, {"id": "logging_handlers_rationale_198", "label": "Flush and close the file. Idempotent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L198"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "target": "socket", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "target": "threading", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "target": "exlab_wizard_logging_context", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "target": "logging_handlers_equipmentscopedfilehandler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L37", "weight": 1.0}, {"source": "logging_handlers_equipmentscopedfilehandler", "target": "logging_handlers_equipmentscopedfilehandler_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L57", "weight": 1.0}, {"source": "logging_handlers_equipmentscopedfilehandler", "target": "logging_handlers_equipmentscopedfilehandler_emit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L74", "weight": 1.0}, {"source": "logging_handlers_equipmentscopedfilehandler", "target": "logging_handlers_equipmentscopedfilehandler_close", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L90", "weight": 1.0}, {"source": "logging_handlers_equipmentscopedfilehandler", "target": "logging_handlers_equipmentscopedfilehandler_open_for", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L105", "weight": 1.0}, {"source": "logging_handlers_equipmentscopedfilehandler", "target": "logging_handlers_equipmentscopedfilehandler_compose_path", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L124", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "target": "logging_handlers_openlogfile", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L139", "weight": 1.0}, {"source": "logging_handlers_openlogfile", "target": "logging_handlers_openlogfile_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L152", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "target": "logging_handlers_open", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L158", "weight": 1.0}, {"source": "logging_handlers_openlogfile", "target": "logging_handlers_openlogfile_write", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L183", "weight": 1.0}, {"source": "logging_handlers_openlogfile", "target": "logging_handlers_openlogfile_fsync", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L189", "weight": 1.0}, {"source": "logging_handlers_openlogfile", "target": "logging_handlers_openlogfile_close", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L197", "weight": 1.0}, {"source": "logging_handlers_equipmentscopedfilehandler_init", "target": "logging_handlers_openlogfile_init", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L63", "weight": 1.0}, {"source": "logging_handlers_equipmentscopedfilehandler_emit", "target": "logging_handlers_equipmentscopedfilehandler_open_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L81", "weight": 1.0}, {"source": "logging_handlers_equipmentscopedfilehandler_emit", "target": "logging_handlers_openlogfile_write", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L83", "weight": 1.0}, {"source": "logging_handlers_equipmentscopedfilehandler_emit", "target": "logging_handlers_openlogfile_fsync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L85", "weight": 1.0}, {"source": "logging_handlers_equipmentscopedfilehandler_close", "target": "logging_handlers_openlogfile_close", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L100", "weight": 1.0}, {"source": "logging_handlers_equipmentscopedfilehandler_open_for", "target": "logging_handlers_equipmentscopedfilehandler_compose_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L118", "weight": 1.0}, {"source": "logging_handlers_equipmentscopedfilehandler_open_for", "target": "logging_handlers_open", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L120", "weight": 1.0}, {"source": "logging_handlers_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_handlers_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L1", "weight": 1.0}, {"source": "logging_handlers_rationale_38", "target": "logging_handlers_equipmentscopedfilehandler", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L38", "weight": 1.0}, {"source": "logging_handlers_rationale_75", "target": "logging_handlers_equipmentscopedfilehandler_emit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L75", "weight": 1.0}, {"source": "logging_handlers_rationale_91", "target": "logging_handlers_equipmentscopedfilehandler_close", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L91", "weight": 1.0}, {"source": "logging_handlers_rationale_106", "target": "logging_handlers_equipmentscopedfilehandler_open_for", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L106", "weight": 1.0}, {"source": "logging_handlers_rationale_125", "target": "logging_handlers_equipmentscopedfilehandler_compose_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L125", "weight": 1.0}, {"source": "logging_handlers_rationale_140", "target": "logging_handlers_openlogfile", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L140", "weight": 1.0}, {"source": "logging_handlers_rationale_159", "target": "logging_handlers_openlogfile_open", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L159", "weight": 1.0}, {"source": "logging_handlers_rationale_184", "target": "logging_handlers_openlogfile_write", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L184", "weight": 1.0}, {"source": "logging_handlers_rationale_190", "target": "logging_handlers_openlogfile_fsync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L190", "weight": 1.0}, {"source": "logging_handlers_rationale_198", "target": "logging_handlers_openlogfile_close", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L198", "weight": 1.0}], "raw_calls": [{"caller_nid": "logging_handlers_equipmentscopedfilehandler_init", "callee": "super", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L63"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_init", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L64"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_init", "callee": "gethostname", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L65"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_init", "callee": "Lock", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L70"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_emit", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L77"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_emit", "callee": "get_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L77"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_emit", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L82"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_emit", "callee": "handleError", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L88"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_close", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L97"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_close", "callee": "values", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L97"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_close", "callee": "clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L98"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_close", "callee": "super", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L101"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_open_for", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L115"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_open_for", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L119"}, {"caller_nid": "logging_handlers_equipmentscopedfilehandler_compose_path", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L130"}, {"caller_nid": "logging_handlers_openlogfile_init", "callee": "fileno", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L154"}, {"caller_nid": "logging_handlers_openlogfile_init", "callee": "Lock", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L155"}, {"caller_nid": "logging_handlers_open", "callee": "fdopen", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L180"}, {"caller_nid": "logging_handlers_open", "callee": "cls", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L181"}, {"caller_nid": "logging_handlers_openlogfile_write", "callee": "flush", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L187"}, {"caller_nid": "logging_handlers_openlogfile_close", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L200"}, {"caller_nid": "logging_handlers_openlogfile_close", "callee": "flush", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py", "source_location": "L201"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/29840775ac86b9adf79c4059515c34784eb11917df8fcc11c8124eb152a7695c.json b/graphify-out/cache/ast/29840775ac86b9adf79c4059515c34784eb11917df8fcc11c8124eb152a7695c.json new file mode 100644 index 0000000..6924321 --- /dev/null +++ b/graphify-out/cache/ast/29840775ac86b9adf79c4059515c34784eb11917df8fcc11c8124eb152a7695c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/__init__.py", "source_location": "L1"}, {"id": "components_init_rationale_1", "label": "UI components package. Re-exports the small NiceGUI element factories the pages", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_init_py", "target": "exlab_wizard_ui_components", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/__init__.py", "source_location": "L6", "weight": 1.0}, {"source": "components_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/29c5ceb08f9ccfa78be036301ce37e09bface1c7368222363ab6020662262f2b.json b/graphify-out/cache/ast/29c5ceb08f9ccfa78be036301ce37e09bface1c7368222363ab6020662262f2b.json new file mode 100644 index 0000000..d06e49f --- /dev/null +++ b/graphify-out/cache/ast/29c5ceb08f9ccfa78be036301ce37e09bface1c7368222363ab6020662262f2b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_run_badge_py", "label": "test_run_badge.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L1"}, {"id": "components_test_run_badge_test_run_badge_props", "label": "test_run_badge_props()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L19"}, {"id": "components_test_run_badge_test_run_badge", "label": "test_run_badge()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L30"}, {"id": "components_test_run_badge_rationale_1", "label": "Test-run pill (Frontend Spec \u00a73.2, \u00a73.6.1). A small *\"Test\"* pill rendered next", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L1"}, {"id": "components_test_run_badge_rationale_20", "label": "Static styling for the *\"Test\"* pill (Frontend \u00a73.6.1).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L20"}, {"id": "components_test_run_badge_rationale_31", "label": "Build a NiceGUI badge for a test run.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L31"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_run_badge_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_run_badge_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_run_badge_py", "target": "exlab_wizard_ui", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_run_badge_py", "target": "components_test_run_badge_test_run_badge_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_run_badge_py", "target": "components_test_run_badge_test_run_badge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L30", "weight": 1.0}, {"source": "components_test_run_badge_test_run_badge", "target": "components_test_run_badge_test_run_badge_props", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L33", "weight": 1.0}, {"source": "components_test_run_badge_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_run_badge_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L1", "weight": 1.0}, {"source": "components_test_run_badge_rationale_20", "target": "components_test_run_badge_test_run_badge_props", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L20", "weight": 1.0}, {"source": "components_test_run_badge_rationale_31", "target": "components_test_run_badge_test_run_badge", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L31", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_test_run_badge_test_run_badge", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L39"}, {"caller_nid": "components_test_run_badge_test_run_badge", "callee": "badge", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py", "source_location": "L39"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/29cd03e6a03015ec433bc144f368880a704a761f4c3e9754a04631500086656c.json b/graphify-out/cache/ast/29cd03e6a03015ec433bc144f368880a704a761f4c3e9754a04631500086656c.json new file mode 100644 index 0000000..ac57f5e --- /dev/null +++ b/graphify-out/cache/ast/29cd03e6a03015ec433bc144f368880a704a761f4c3e9754a04631500086656c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "label": "test_logger.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L1"}, {"id": "plugins_test_logger_test_host_plugin_logger_forwards_info_to_stdlib_logger", "label": "test_host_plugin_logger_forwards_info_to_stdlib_logger()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L33"}, {"id": "plugins_test_logger_test_host_plugin_logger_forwards_debug", "label": "test_host_plugin_logger_forwards_debug()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L44"}, {"id": "plugins_test_logger_test_host_plugin_logger_forwards_warning", "label": "test_host_plugin_logger_forwards_warning()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L51"}, {"id": "plugins_test_logger_test_host_plugin_logger_forwards_error", "label": "test_host_plugin_logger_forwards_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L58"}, {"id": "plugins_test_logger_test_host_plugin_logger_passes_structured_fields_via_extra", "label": "test_host_plugin_logger_passes_structured_fields_via_extra()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L65"}, {"id": "plugins_test_logger_test_host_plugin_logger_uses_default_logger_name_when_unspecified", "label": "test_host_plugin_logger_uses_default_logger_name_when_unspecified()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L77"}, {"id": "plugins_test_logger_test_worker_plugin_logger_emits_json_frame_to_stream", "label": "test_worker_plugin_logger_emits_json_frame_to_stream()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L94"}, {"id": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", "label": "test_worker_plugin_logger_each_level_emits_correct_level_string()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L106"}, {"id": "plugins_test_logger_test_worker_plugin_logger_emits_one_frame_per_call", "label": "test_worker_plugin_logger_emits_one_frame_per_call()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L119"}, {"id": "plugins_test_logger_test_worker_plugin_logger_emits_empty_context_when_no_fields", "label": "test_worker_plugin_logger_emits_empty_context_when_no_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L129"}, {"id": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", "label": "test_worker_plugin_logger_default_stream_is_stderr()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L137"}, {"id": "plugins_test_logger_test_plugin_log_frame_fields_are_pinned", "label": "test_plugin_log_frame_fields_are_pinned()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L153"}, {"id": "plugins_test_logger_test_plugin_log_frame_default_context_is_empty_dict", "label": "test_plugin_log_frame_default_context_is_empty_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L160"}, {"id": "plugins_test_logger_rationale_1", "label": "Tests for ``exlab_wizard.plugins.logger`` -- structured plugin log shim. Pin bo", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L1"}, {"id": "plugins_test_logger_rationale_68", "label": "Structured ``**fields`` arrive on the LogRecord as ``record.context``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L68"}, {"id": "plugins_test_logger_rationale_80", "label": "Construction without ``name`` falls back to ``exlab_wizard.plugins``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L80"}, {"id": "plugins_test_logger_rationale_138", "label": "Without an explicit stream, the worker writes to ``sys.stderr``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L138"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "io", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "exlab_wizard_plugins_logger", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "plugins_test_logger_test_host_plugin_logger_forwards_info_to_stdlib_logger", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "plugins_test_logger_test_host_plugin_logger_forwards_debug", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "plugins_test_logger_test_host_plugin_logger_forwards_warning", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "plugins_test_logger_test_host_plugin_logger_forwards_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "plugins_test_logger_test_host_plugin_logger_passes_structured_fields_via_extra", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L65", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "plugins_test_logger_test_host_plugin_logger_uses_default_logger_name_when_unspecified", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L77", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "plugins_test_logger_test_worker_plugin_logger_emits_json_frame_to_stream", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L94", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L106", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "plugins_test_logger_test_worker_plugin_logger_emits_one_frame_per_call", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L119", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "plugins_test_logger_test_worker_plugin_logger_emits_empty_context_when_no_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L129", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L137", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "plugins_test_logger_test_plugin_log_frame_fields_are_pinned", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L153", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "target": "plugins_test_logger_test_plugin_log_frame_default_context_is_empty_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L160", "weight": 1.0}, {"source": "plugins_test_logger_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_plugins_test_logger_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L1", "weight": 1.0}, {"source": "plugins_test_logger_rationale_68", "target": "plugins_test_logger_test_host_plugin_logger_passes_structured_fields_via_extra", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L68", "weight": 1.0}, {"source": "plugins_test_logger_rationale_80", "target": "plugins_test_logger_test_host_plugin_logger_uses_default_logger_name_when_unspecified", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L80", "weight": 1.0}, {"source": "plugins_test_logger_rationale_138", "target": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L138", "weight": 1.0}], "raw_calls": [{"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_info_to_stdlib_logger", "callee": "HostPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L36"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_info_to_stdlib_logger", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L37"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_info_to_stdlib_logger", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L38"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_info_to_stdlib_logger", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L39"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_debug", "callee": "HostPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L45"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_debug", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L46"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_debug", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L47"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_debug", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L48"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_warning", "callee": "HostPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L52"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_warning", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L53"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_warning", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L54"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_warning", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L55"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_error", "callee": "HostPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L59"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_error", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L60"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_error", "callee": "error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L61"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_forwards_error", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L62"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_passes_structured_fields_via_extra", "callee": "HostPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L69"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_passes_structured_fields_via_extra", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L70"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_passes_structured_fields_via_extra", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L71"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_passes_structured_fields_via_extra", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L73"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_passes_structured_fields_via_extra", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L74"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_uses_default_logger_name_when_unspecified", "callee": "HostPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L81"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_uses_default_logger_name_when_unspecified", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L82"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_uses_default_logger_name_when_unspecified", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L83"}, {"caller_nid": "plugins_test_logger_test_host_plugin_logger_uses_default_logger_name_when_unspecified", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L84"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_json_frame_to_stream", "callee": "StringIO", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L95"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_json_frame_to_stream", "callee": "WorkerPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L96"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_json_frame_to_stream", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L97"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_json_frame_to_stream", "callee": "getvalue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L98"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_json_frame_to_stream", "callee": "endswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L99"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_json_frame_to_stream", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L100"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", "callee": "StringIO", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L107"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", "callee": "WorkerPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L108"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L109"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L110"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L111"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", "callee": "error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L112"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", "callee": "splitlines", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L113"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", "callee": "getvalue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L113"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L114"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L115"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_one_frame_per_call", "callee": "StringIO", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L120"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_one_frame_per_call", "callee": "WorkerPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L121"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_one_frame_per_call", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L122"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_one_frame_per_call", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L123"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_one_frame_per_call", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L124"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_one_frame_per_call", "callee": "splitlines", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L125"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_one_frame_per_call", "callee": "getvalue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L125"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_one_frame_per_call", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L126"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_empty_context_when_no_fields", "callee": "StringIO", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L130"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_empty_context_when_no_fields", "callee": "WorkerPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L131"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_empty_context_when_no_fields", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L132"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_empty_context_when_no_fields", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L133"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_emits_empty_context_when_no_fields", "callee": "getvalue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L133"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", "callee": "StringIO", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L139"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L140"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", "callee": "WorkerPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L141"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L142"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L143"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", "callee": "getvalue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L143"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L144"}, {"caller_nid": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", "callee": "getvalue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L144"}, {"caller_nid": "plugins_test_logger_test_plugin_log_frame_fields_are_pinned", "callee": "PluginLogFrame", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L154"}, {"caller_nid": "plugins_test_logger_test_plugin_log_frame_default_context_is_empty_dict", "callee": "PluginLogFrame", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py", "source_location": "L161"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/29ee0403ce578164c2e76a58e8cab3859b0ba203591b28f9780aba8eb09def92.json b/graphify-out/cache/ast/29ee0403ce578164c2e76a58e8cab3859b0ba203591b28f9780aba8eb09def92.json new file mode 100644 index 0000000..f33e828 --- /dev/null +++ b/graphify-out/cache/ast/29ee0403ce578164c2e76a58e8cab3859b0ba203591b28f9780aba8eb09def92.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_timeout_plugin_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/__init__.py", "source_location": "L1"}, {"id": "timeout_plugin_init_rationale_1", "label": "Failure fixture: plugin that hangs in ``transform`` past its timeout.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_timeout_plugin_init_py", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_timeout_plugin_plugin_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/__init__.py", "source_location": "L3", "weight": 1.0}, {"source": "timeout_plugin_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_timeout_plugin_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/29f774c05962dbf54b8f243f62f4877ea8dd68343efb994adce94b2890905348.json b/graphify-out/cache/ast/29f774c05962dbf54b8f243f62f4877ea8dd68343efb994adce94b2890905348.json new file mode 100644 index 0000000..808c21b --- /dev/null +++ b/graphify-out/cache/ast/29f774c05962dbf54b8f243f62f4877ea8dd68343efb994adce94b2890905348.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_controller_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/__init__.py", "source_location": "L1"}, {"id": "controller_init_rationale_1", "label": "Unit tests for the controller package. Backend Spec \u00a74.4.1, \u00a74.7.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/__init__.py", "source_location": "L1"}], "edges": [{"source": "controller_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_controller_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/2a61a10e6de7335a07c8434b5f7aa05096952e63997b8687de58a79b4c1224a1.json b/graphify-out/cache/ast/2a61a10e6de7335a07c8434b5f7aa05096952e63997b8687de58a79b4c1224a1.json new file mode 100644 index 0000000..0ce24e2 --- /dev/null +++ b/graphify-out/cache/ast/2a61a10e6de7335a07c8434b5f7aa05096952e63997b8687de58a79b4c1224a1.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "label": "test_transports.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L1"}, {"id": "sync_test_transports_stub_dir", "label": "stub_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L33"}, {"id": "sync_test_transports_record_argv", "label": "record_argv()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L47"}, {"id": "sync_test_transports_read_recorded_argvs", "label": "_read_recorded_argvs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L54"}, {"id": "sync_test_transports_test_rclone_push_success", "label": "test_rclone_push_success()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L64"}, {"id": "sync_test_transports_test_rclone_push_network_error_is_retryable", "label": "test_rclone_push_network_error_is_retryable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L80"}, {"id": "sync_test_transports_test_rclone_push_auth_error_is_terminal", "label": "test_rclone_push_auth_error_is_terminal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L92"}, {"id": "sync_test_transports_test_rclone_push_hash_mismatch", "label": "test_rclone_push_hash_mismatch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L104"}, {"id": "sync_test_transports_test_rclone_push_missing_binary_raises", "label": "test_rclone_push_missing_binary_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L116"}, {"id": "sync_test_transports_test_rclone_push_forwards_env", "label": "test_rclone_push_forwards_env()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L123"}, {"id": "sync_test_transports_test_rclone_argv_includes_checksum_flag", "label": "test_rclone_argv_includes_checksum_flag()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L160"}, {"id": "sync_test_transports_test_rclone_argv_includes_bwlimit_when_set", "label": "test_rclone_argv_includes_bwlimit_when_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L176"}, {"id": "sync_test_transports_test_rclone_argv_omits_bwlimit_when_none", "label": "test_rclone_argv_omits_bwlimit_when_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L193"}, {"id": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", "label": "test_rclone_argv_includes_files_from_when_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L208"}, {"id": "sync_test_transports_test_rclone_argv_omits_files_from_when_none", "label": "test_rclone_argv_omits_files_from_when_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L227"}, {"id": "sync_test_transports_test_obscure_returns_stdout_stripped", "label": "test_obscure_returns_stdout_stripped()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L247"}, {"id": "sync_test_transports_test_obscure_missing_binary_raises_auth", "label": "test_obscure_missing_binary_raises_auth()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L257"}, {"id": "sync_test_transports_test_about_success", "label": "test_about_success()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L268"}, {"id": "sync_test_transports_test_about_auth_failure", "label": "test_about_auth_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L277"}, {"id": "sync_test_transports_test_parse_combined_handles_all_prefixes", "label": "test_parse_combined_handles_all_prefixes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L291"}, {"id": "sync_test_transports_test_parse_combined_empty_returns_empty_result", "label": "test_parse_combined_empty_returns_empty_result()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L301"}, {"id": "sync_test_transports_test_parse_combined_tolerates_blank_lines_and_unknown_prefix", "label": "test_parse_combined_tolerates_blank_lines_and_unknown_prefix()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L305"}, {"id": "sync_test_transports_rationale_1", "label": "Tests for the rclone transport driver. Backend Spec \u00a77.1.3, \u00a77.1.5. The driver", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L1"}, {"id": "sync_test_transports_rationale_34", "label": "Install the rclone stub under ``tmp_path/bin`` and prepend to PATH.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L34"}, {"id": "sync_test_transports_rationale_48", "label": "Tell the stub to append every invocation's argv to a log file.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L48"}, {"id": "sync_test_transports_rationale_55", "label": "Return the recorded argv lists, in invocation order.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L55"}, {"id": "sync_test_transports_rationale_117", "label": "A missing binary raises :class:`TransportError`, not a retry result.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L117"}, {"id": "sync_test_transports_rationale_129", "label": "``env`` arrives in the subprocess; ``mask_for_log`` redacts the password. T", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L129"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "shutil", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "stat", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "exlab_wizard_sync_transports", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "exlab_wizard_sync_transports_rclone", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_stub_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_record_argv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_read_recorded_argvs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L54", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_rclone_push_success", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L64", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_rclone_push_network_error_is_retryable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L80", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_rclone_push_auth_error_is_terminal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L92", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_rclone_push_hash_mismatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L104", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_rclone_push_missing_binary_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L116", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_rclone_push_forwards_env", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L123", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_rclone_argv_includes_checksum_flag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L160", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_rclone_argv_includes_bwlimit_when_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L176", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_rclone_argv_omits_bwlimit_when_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L193", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L208", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_rclone_argv_omits_files_from_when_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L227", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_obscure_returns_stdout_stripped", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L247", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_obscure_missing_binary_raises_auth", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L257", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_about_success", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L268", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_about_auth_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L277", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_parse_combined_handles_all_prefixes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L291", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_parse_combined_empty_returns_empty_result", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L301", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "target": "sync_test_transports_test_parse_combined_tolerates_blank_lines_and_unknown_prefix", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L305", "weight": 1.0}, {"source": "sync_test_transports_test_rclone_argv_includes_checksum_flag", "target": "sync_test_transports_read_recorded_argvs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L171", "weight": 1.0}, {"source": "sync_test_transports_test_rclone_argv_includes_bwlimit_when_set", "target": "sync_test_transports_read_recorded_argvs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L187", "weight": 1.0}, {"source": "sync_test_transports_test_rclone_argv_omits_bwlimit_when_none", "target": "sync_test_transports_read_recorded_argvs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L204", "weight": 1.0}, {"source": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", "target": "sync_test_transports_read_recorded_argvs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L221", "weight": 1.0}, {"source": "sync_test_transports_test_rclone_argv_omits_files_from_when_none", "target": "sync_test_transports_read_recorded_argvs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L238", "weight": 1.0}, {"source": "sync_test_transports_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_sync_test_transports_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L1", "weight": 1.0}, {"source": "sync_test_transports_rationale_34", "target": "sync_test_transports_stub_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L34", "weight": 1.0}, {"source": "sync_test_transports_rationale_48", "target": "sync_test_transports_record_argv", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L48", "weight": 1.0}, {"source": "sync_test_transports_rationale_55", "target": "sync_test_transports_read_recorded_argvs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L55", "weight": 1.0}, {"source": "sync_test_transports_rationale_117", "target": "sync_test_transports_test_rclone_push_missing_binary_raises", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L117", "weight": 1.0}, {"source": "sync_test_transports_rationale_129", "target": "sync_test_transports_test_rclone_push_forwards_env", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L129", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_test_transports_stub_dir", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L36"}, {"caller_nid": "sync_test_transports_stub_dir", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L37"}, {"caller_nid": "sync_test_transports_stub_dir", "callee": "copy", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L39"}, {"caller_nid": "sync_test_transports_stub_dir", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L40"}, {"caller_nid": "sync_test_transports_stub_dir", "callee": "chmod", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L41"}, {"caller_nid": "sync_test_transports_stub_dir", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L42"}, {"caller_nid": "sync_test_transports_record_argv", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L50"}, {"caller_nid": "sync_test_transports_record_argv", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L50"}, {"caller_nid": "sync_test_transports_read_recorded_argvs", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L56"}, {"caller_nid": "sync_test_transports_read_recorded_argvs", "callee": "splitlines", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L56"}, {"caller_nid": "sync_test_transports_read_recorded_argvs", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L56"}, {"caller_nid": "sync_test_transports_test_rclone_push_success", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L68"}, {"caller_nid": "sync_test_transports_test_rclone_push_success", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L69"}, {"caller_nid": "sync_test_transports_test_rclone_push_success", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L71"}, {"caller_nid": "sync_test_transports_test_rclone_push_success", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L72"}, {"caller_nid": "sync_test_transports_test_rclone_push_success", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L72"}, {"caller_nid": "sync_test_transports_test_rclone_push_success", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L73"}, {"caller_nid": "sync_test_transports_test_rclone_push_success", "callee": "push", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L74"}, {"caller_nid": "sync_test_transports_test_rclone_push_success", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L77"}, {"caller_nid": "sync_test_transports_test_rclone_push_network_error_is_retryable", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L84"}, {"caller_nid": "sync_test_transports_test_rclone_push_network_error_is_retryable", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L85"}, {"caller_nid": "sync_test_transports_test_rclone_push_network_error_is_retryable", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L86"}, {"caller_nid": "sync_test_transports_test_rclone_push_network_error_is_retryable", "callee": "push", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L87"}, {"caller_nid": "sync_test_transports_test_rclone_push_auth_error_is_terminal", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L96"}, {"caller_nid": "sync_test_transports_test_rclone_push_auth_error_is_terminal", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L97"}, {"caller_nid": "sync_test_transports_test_rclone_push_auth_error_is_terminal", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L98"}, {"caller_nid": "sync_test_transports_test_rclone_push_auth_error_is_terminal", "callee": "push", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L99"}, {"caller_nid": "sync_test_transports_test_rclone_push_hash_mismatch", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L108"}, {"caller_nid": "sync_test_transports_test_rclone_push_hash_mismatch", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L109"}, {"caller_nid": "sync_test_transports_test_rclone_push_hash_mismatch", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L110"}, {"caller_nid": "sync_test_transports_test_rclone_push_hash_mismatch", "callee": "push", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L111"}, {"caller_nid": "sync_test_transports_test_rclone_push_missing_binary_raises", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L118"}, {"caller_nid": "sync_test_transports_test_rclone_push_missing_binary_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L119"}, {"caller_nid": "sync_test_transports_test_rclone_push_missing_binary_raises", "callee": "push", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L120"}, {"caller_nid": "sync_test_transports_test_rclone_push_forwards_env", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L136"}, {"caller_nid": "sync_test_transports_test_rclone_push_forwards_env", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L138"}, {"caller_nid": "sync_test_transports_test_rclone_push_forwards_env", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L139"}, {"caller_nid": "sync_test_transports_test_rclone_push_forwards_env", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L139"}, {"caller_nid": "sync_test_transports_test_rclone_push_forwards_env", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L140"}, {"caller_nid": "sync_test_transports_test_rclone_push_forwards_env", "callee": "push", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L142"}, {"caller_nid": "sync_test_transports_test_rclone_push_forwards_env", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L148"}, {"caller_nid": "sync_test_transports_test_rclone_push_forwards_env", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L150"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_checksum_flag", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L167"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_checksum_flag", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L168"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_checksum_flag", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L169"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_checksum_flag", "callee": "push", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L170"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_bwlimit_when_set", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L183"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_bwlimit_when_set", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L184"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_bwlimit_when_set", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L185"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_bwlimit_when_set", "callee": "push", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L186"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_bwlimit_when_set", "callee": "index", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L189"}, {"caller_nid": "sync_test_transports_test_rclone_argv_omits_bwlimit_when_none", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L200"}, {"caller_nid": "sync_test_transports_test_rclone_argv_omits_bwlimit_when_none", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L201"}, {"caller_nid": "sync_test_transports_test_rclone_argv_omits_bwlimit_when_none", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L202"}, {"caller_nid": "sync_test_transports_test_rclone_argv_omits_bwlimit_when_none", "callee": "push", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L203"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L215"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L217"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L218"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L219"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", "callee": "push", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L220"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", "callee": "index", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L223"}, {"caller_nid": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L224"}, {"caller_nid": "sync_test_transports_test_rclone_argv_omits_files_from_when_none", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L234"}, {"caller_nid": "sync_test_transports_test_rclone_argv_omits_files_from_when_none", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L235"}, {"caller_nid": "sync_test_transports_test_rclone_argv_omits_files_from_when_none", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L236"}, {"caller_nid": "sync_test_transports_test_rclone_argv_omits_files_from_when_none", "callee": "push", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L237"}, {"caller_nid": "sync_test_transports_test_obscure_returns_stdout_stripped", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L251"}, {"caller_nid": "sync_test_transports_test_obscure_returns_stdout_stripped", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L252"}, {"caller_nid": "sync_test_transports_test_obscure_returns_stdout_stripped", "callee": "obscure", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L253"}, {"caller_nid": "sync_test_transports_test_obscure_missing_binary_raises_auth", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L258"}, {"caller_nid": "sync_test_transports_test_obscure_missing_binary_raises_auth", "callee": "obscure", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L259"}, {"caller_nid": "sync_test_transports_test_about_success", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L269"}, {"caller_nid": "sync_test_transports_test_about_success", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L270"}, {"caller_nid": "sync_test_transports_test_about_success", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L271"}, {"caller_nid": "sync_test_transports_test_about_success", "callee": "about", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L272"}, {"caller_nid": "sync_test_transports_test_about_auth_failure", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L278"}, {"caller_nid": "sync_test_transports_test_about_auth_failure", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L279"}, {"caller_nid": "sync_test_transports_test_about_auth_failure", "callee": "about", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L280"}, {"caller_nid": "sync_test_transports_test_about_auth_failure", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L283"}, {"caller_nid": "sync_test_transports_test_parse_combined_handles_all_prefixes", "callee": "_parse_combined", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L293"}, {"caller_nid": "sync_test_transports_test_parse_combined_empty_returns_empty_result", "callee": "_parse_combined", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L302"}, {"caller_nid": "sync_test_transports_test_parse_combined_empty_returns_empty_result", "callee": "CheckResult", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L302"}, {"caller_nid": "sync_test_transports_test_parse_combined_tolerates_blank_lines_and_unknown_prefix", "callee": "_parse_combined", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py", "source_location": "L307"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/2aa97d838ce8b59dd6a35a6167673ced0806a5f1e2e85995e78b708c963e4ba6.json b/graphify-out/cache/ast/2aa97d838ce8b59dd6a35a6167673ced0806a5f1e2e85995e78b708c963e4ba6.json new file mode 100644 index 0000000..d159100 --- /dev/null +++ b/graphify-out/cache/ast/2aa97d838ce8b59dd6a35a6167673ced0806a5f1e2e85995e78b708c963e4ba6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "label": "test_factories_smoke.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L1"}, {"id": "ui_test_factories_smoke_slot", "label": "_slot()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L50"}, {"id": "ui_test_factories_smoke_test_smoke_mode_badge_renders_in_slot", "label": "test_smoke_mode_badge_renders_in_slot()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L56"}, {"id": "ui_test_factories_smoke_test_smoke_test_run_badge_renders", "label": "test_smoke_test_run_badge_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L65"}, {"id": "ui_test_factories_smoke_test_smoke_override_badge_renders_with_callback", "label": "test_smoke_override_badge_renders_with_callback()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L71"}, {"id": "ui_test_factories_smoke_test_smoke_sync_status_icon_renders_each_state", "label": "test_smoke_sync_status_icon_renders_each_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L81"}, {"id": "ui_test_factories_smoke_test_smoke_session_progress_renders", "label": "test_smoke_session_progress_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L97"}, {"id": "ui_test_factories_smoke_test_smoke_credential_field_renders_each_state", "label": "test_smoke_credential_field_renders_each_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L112"}, {"id": "ui_test_factories_smoke_credential_testids", "label": "_credential_testids()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L128"}, {"id": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", "label": "test_credential_field_editing_state_renders_a_password_input()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L138"}, {"id": "ui_test_factories_smoke_test_credential_field_not_set_state_renders_set_button_without_input", "label": "test_credential_field_not_set_state_renders_set_button_without_input()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L160"}, {"id": "ui_test_factories_smoke_test_credential_field_set_state_renders_replace_and_clear_buttons", "label": "test_credential_field_set_state_renders_replace_and_clear_buttons()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L174"}, {"id": "ui_test_factories_smoke_test_smoke_test_connection_panel_renders", "label": "test_smoke_test_connection_panel_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L188"}, {"id": "ui_test_factories_smoke_test_smoke_filter_chips_renders", "label": "test_smoke_filter_chips_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L204"}, {"id": "ui_test_factories_smoke_test_smoke_status_bar_segment_renders", "label": "test_smoke_status_bar_segment_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L214"}, {"id": "ui_test_factories_smoke_test_smoke_banner_stack_renders_with_active_banners", "label": "test_smoke_banner_stack_renders_with_active_banners()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L233"}, {"id": "ui_test_factories_smoke_test_smoke_operations_modal_renders", "label": "test_smoke_operations_modal_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L247"}, {"id": "ui_test_factories_smoke_test_smoke_bandwidth_schedule_editor_renders", "label": "test_smoke_bandwidth_schedule_editor_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L277"}, {"id": "ui_test_factories_smoke_test_smoke_validation_summary_renders", "label": "test_smoke_validation_summary_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L301"}, {"id": "ui_test_factories_smoke_test_smoke_tree_renders", "label": "test_smoke_tree_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L326"}, {"id": "ui_test_factories_smoke_test_smoke_welcome_page_renders", "label": "test_smoke_welcome_page_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L348"}, {"id": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_complete", "label": "test_smoke_file_explorer_page_renders_setup_complete()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L356"}, {"id": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_incomplete", "label": "test_smoke_file_explorer_page_renders_setup_incomplete()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L373"}, {"id": "ui_test_factories_smoke_test_smoke_wizard_project_renders", "label": "test_smoke_wizard_project_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L389"}, {"id": "ui_test_factories_smoke_test_smoke_wizard_run_renders_test_mode", "label": "test_smoke_wizard_run_renders_test_mode()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L397"}, {"id": "ui_test_factories_smoke_test_smoke_wizard_run_renders_experimental_mode", "label": "test_smoke_wizard_run_renders_experimental_mode()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L405"}, {"id": "ui_test_factories_smoke_test_smoke_settings_page_renders", "label": "test_smoke_settings_page_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L413"}, {"id": "ui_test_factories_smoke_test_smoke_settings_page_each_section_renders", "label": "test_smoke_settings_page_each_section_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L422"}, {"id": "ui_test_factories_smoke_test_smoke_settings_page_setup_incomplete_auto_selects_first", "label": "test_smoke_settings_page_setup_incomplete_auto_selects_first()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L432"}, {"id": "ui_test_factories_smoke_test_settings_lims_section_renders_credential_field_with_e2e_hooks", "label": "test_settings_lims_section_renders_credential_field_with_e2e_hooks()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L446"}, {"id": "ui_test_factories_smoke_test_settings_lims_section_credential_field_opens_set_when_password_present", "label": "test_settings_lims_section_credential_field_opens_set_when_password_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L461"}, {"id": "ui_test_factories_smoke_test_smoke_problems_page_renders", "label": "test_smoke_problems_page_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L475"}, {"id": "ui_test_factories_smoke_test_smoke_problems_page_renders_empty_state", "label": "test_smoke_problems_page_renders_empty_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L507"}, {"id": "ui_test_factories_smoke_test_smoke_register_theme_returns_css", "label": "test_smoke_register_theme_returns_css()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L520"}, {"id": "ui_test_factories_smoke_test_smoke_bind_global_shortcuts_does_not_raise", "label": "test_smoke_bind_global_shortcuts_does_not_raise()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L525"}, {"id": "ui_test_factories_smoke_rationale_1", "label": "Smoke tests that invoke the NiceGUI factory functions. The factory functions cr", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L1"}, {"id": "ui_test_factories_smoke_rationale_51", "label": "Return a NiceGUI slot we can use as a parent for factory calls.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L51"}, {"id": "ui_test_factories_smoke_rationale_129", "label": "Collect every ``data-testid`` in an element's subtree.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L129"}, {"id": "ui_test_factories_smoke_rationale_139", "label": "Regression: the editing state must expose an inline password input.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L139"}, {"id": "ui_test_factories_smoke_rationale_447", "label": "The LIMS section must expose the password credential row.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L447"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "nicegui", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "exlab_wizard_ui", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "exlab_wizard_ui_components", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "exlab_wizard_ui_notifications", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_slot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_mode_badge_renders_in_slot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_test_run_badge_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L65", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_override_badge_renders_with_callback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L71", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_sync_status_icon_renders_each_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_session_progress_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L97", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_credential_field_renders_each_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L112", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_credential_testids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L128", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L138", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_credential_field_not_set_state_renders_set_button_without_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L160", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_credential_field_set_state_renders_replace_and_clear_buttons", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L174", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_test_connection_panel_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L188", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_filter_chips_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L204", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_status_bar_segment_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L214", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_banner_stack_renders_with_active_banners", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L233", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_operations_modal_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L247", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_bandwidth_schedule_editor_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L277", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_validation_summary_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L301", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_tree_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L326", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_welcome_page_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L348", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_complete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L356", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_incomplete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L373", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_wizard_project_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L389", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_wizard_run_renders_test_mode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L397", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_wizard_run_renders_experimental_mode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L405", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_settings_page_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L413", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_settings_page_each_section_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L422", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_settings_page_setup_incomplete_auto_selects_first", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L432", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_settings_lims_section_renders_credential_field_with_e2e_hooks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L446", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_settings_lims_section_credential_field_opens_set_when_password_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L461", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_problems_page_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L475", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_problems_page_renders_empty_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L507", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_register_theme_returns_css", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L520", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "target": "ui_test_factories_smoke_test_smoke_bind_global_shortcuts_does_not_raise", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L525", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_mode_badge_renders_in_slot", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L57", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_test_run_badge_renders", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L66", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_override_badge_renders_with_callback", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L73", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_sync_status_icon_renders_each_state", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L89", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_session_progress_renders", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L98", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_credential_field_renders_each_state", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L118", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L141", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", "target": "ui_test_factories_smoke_credential_testids", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L156", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_credential_field_not_set_state_renders_set_button_without_input", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L161", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_credential_field_not_set_state_renders_set_button_without_input", "target": "ui_test_factories_smoke_credential_testids", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L169", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_credential_field_set_state_renders_replace_and_clear_buttons", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L175", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_credential_field_set_state_renders_replace_and_clear_buttons", "target": "ui_test_factories_smoke_credential_testids", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L183", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_test_connection_panel_renders", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L189", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_filter_chips_renders", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L209", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_status_bar_segment_renders", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L216", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_banner_stack_renders_with_active_banners", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L241", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_operations_modal_renders", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L267", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_bandwidth_schedule_editor_renders", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L278", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_validation_summary_renders", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L302", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_smoke_tree_renders", "target": "ui_test_factories_smoke_slot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L335", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_settings_lims_section_renders_credential_field_with_e2e_hooks", "target": "ui_test_factories_smoke_credential_testids", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L457", "weight": 1.0}, {"source": "ui_test_factories_smoke_test_settings_lims_section_credential_field_opens_set_when_password_present", "target": "ui_test_factories_smoke_credential_testids", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L470", "weight": 1.0}, {"source": "ui_test_factories_smoke_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_factories_smoke_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_factories_smoke_rationale_51", "target": "ui_test_factories_smoke_slot", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L51", "weight": 1.0}, {"source": "ui_test_factories_smoke_rationale_129", "target": "ui_test_factories_smoke_credential_testids", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L129", "weight": 1.0}, {"source": "ui_test_factories_smoke_rationale_139", "target": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L139", "weight": 1.0}, {"source": "ui_test_factories_smoke_rationale_447", "target": "ui_test_factories_smoke_test_settings_lims_section_renders_credential_field_with_e2e_hooks", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L447", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_factories_smoke_slot", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L53"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_mode_badge_renders_in_slot", "callee": "mode_badge", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L58"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_mode_badge_renders_in_slot", "callee": "mode_badge", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L61"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_test_run_badge_renders", "callee": "test_run_badge", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L67"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_override_badge_renders_with_callback", "callee": "override_badge", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L74"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_override_badge_renders_with_callback", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L74"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_override_badge_renders_with_callback", "callee": "override_badge", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L77"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_sync_status_icon_renders_each_state", "callee": "sync_status_icon", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L90"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_sync_status_icon_renders_each_state", "callee": "sync_status_icon", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L93"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_session_progress_renders", "callee": "session_progress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L99"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_session_progress_renders", "callee": "session_progress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L102"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_credential_field_renders_each_state", "callee": "credential_field", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L119"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_credential_field_renders_each_state", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L123"}, {"caller_nid": "ui_test_factories_smoke_credential_testids", "callee": "descendants", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L133"}, {"caller_nid": "ui_test_factories_smoke_credential_testids", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L134"}, {"caller_nid": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", "callee": "credential_field", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L142"}, {"caller_nid": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L147"}, {"caller_nid": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", "callee": "descendants", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L151"}, {"caller_nid": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L152"}, {"caller_nid": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L152"}, {"caller_nid": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L154"}, {"caller_nid": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L155"}, {"caller_nid": "ui_test_factories_smoke_test_credential_field_not_set_state_renders_set_button_without_input", "callee": "credential_field", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L162"}, {"caller_nid": "ui_test_factories_smoke_test_credential_field_not_set_state_renders_set_button_without_input", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L167"}, {"caller_nid": "ui_test_factories_smoke_test_credential_field_set_state_renders_replace_and_clear_buttons", "callee": "credential_field", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L176"}, {"caller_nid": "ui_test_factories_smoke_test_credential_field_set_state_renders_replace_and_clear_buttons", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L181"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_test_connection_panel_renders", "callee": "test_connection_panel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L190"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_test_connection_panel_renders", "callee": "TestConnectionResult", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L193"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_test_connection_panel_renders", "callee": "test_connection_panel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L197"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_test_connection_panel_renders", "callee": "test_connection_panel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L200"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_filter_chips_renders", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L206"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_filter_chips_renders", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L207"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_filter_chips_renders", "callee": "filter_chips", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L210"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_status_bar_segment_renders", "callee": "status_bar_segment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L217"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_status_bar_segment_renders", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L218"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_status_bar_segment_renders", "callee": "status_bar_segment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L222"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_status_bar_segment_renders", "callee": "status_bar_segment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L227"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_banner_stack_renders_with_active_banners", "callee": "reset_for_tests", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L234"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_banner_stack_renders_with_active_banners", "callee": "show_banner", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L235"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_banner_stack_renders_with_active_banners", "callee": "banner_stack", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L242"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_banner_stack_renders_with_active_banners", "callee": "reset_for_tests", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L244"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_operations_modal_renders", "callee": "OperationRow", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L249"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_operations_modal_renders", "callee": "OperationRow", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L258"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_operations_modal_renders", "callee": "operations_modal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L268"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_bandwidth_schedule_editor_renders", "callee": "bandwidth_schedule_editor", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L279"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_bandwidth_schedule_editor_renders", "callee": "BandwidthSchedule", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L280"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_bandwidth_schedule_editor_renders", "callee": "ScheduleWindow", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L284"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_bandwidth_schedule_editor_renders", "callee": "bandwidth_schedule_editor", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L295"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_bandwidth_schedule_editor_renders", "callee": "BandwidthSchedule", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L296"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_validation_summary_renders", "callee": "validation_summary", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L303"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_validation_summary_renders", "callee": "ValidationSummary", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L304"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_validation_summary_renders", "callee": "FindingExcerpt", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L308"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_validation_summary_renders", "callee": "FindingExcerpt", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L309"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_validation_summary_renders", "callee": "FindingExcerpt", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L310"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_validation_summary_renders", "callee": "validation_summary", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L320"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_validation_summary_renders", "callee": "ValidationSummary", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L321"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_tree_renders", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L327"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_tree_renders", "callee": "ProjectNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L328"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_tree_renders", "callee": "ProjectNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L329"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_tree_renders", "callee": "ProjectNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L330"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_tree_renders", "callee": "RunNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L332"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_tree_renders", "callee": "RunNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L333"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_tree_renders", "callee": "build_tree", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L336"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_tree_renders", "callee": "TreeFilters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L338"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_welcome_page_renders", "callee": "render_welcome_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L349"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_complete", "callee": "render_file_explorer_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L357"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_complete", "callee": "MainPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L365"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_incomplete", "callee": "reset_for_tests", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L374"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_incomplete", "callee": "render_file_explorer_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L375"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_incomplete", "callee": "MainPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L383"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_incomplete", "callee": "reset_for_tests", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L386"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_wizard_project_renders", "callee": "render_project_wizard", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L390"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_wizard_project_renders", "callee": "ProjectWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L391"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_wizard_run_renders_test_mode", "callee": "render_run_wizard", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L398"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_wizard_run_renders_test_mode", "callee": "RunWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L399"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_wizard_run_renders_experimental_mode", "callee": "render_run_wizard", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L406"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_wizard_run_renders_experimental_mode", "callee": "RunWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L407"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_settings_page_renders", "callee": "render_settings_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L414"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_settings_page_renders", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L415"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_settings_page_each_section_renders", "callee": "render_settings_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L424"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_settings_page_each_section_renders", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L425"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_settings_page_setup_incomplete_auto_selects_first", "callee": "render_settings_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L433"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_settings_page_setup_incomplete_auto_selects_first", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L434"}, {"caller_nid": "ui_test_factories_smoke_test_settings_lims_section_renders_credential_field_with_e2e_hooks", "callee": "render_settings_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L450"}, {"caller_nid": "ui_test_factories_smoke_test_settings_lims_section_renders_credential_field_with_e2e_hooks", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L451"}, {"caller_nid": "ui_test_factories_smoke_test_settings_lims_section_credential_field_opens_set_when_password_present", "callee": "render_settings_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L462"}, {"caller_nid": "ui_test_factories_smoke_test_settings_lims_section_credential_field_opens_set_when_password_present", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L463"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_problems_page_renders", "callee": "render_problems_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L476"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_problems_page_renders", "callee": "Finding", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L478"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_problems_page_renders", "callee": "Finding", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L489"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_problems_page_renders_empty_state", "callee": "render_problems_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L508"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_problems_page_renders_empty_state", "callee": "ProblemsPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L510"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_register_theme_returns_css", "callee": "register_theme", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L521"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_bind_global_shortcuts_does_not_raise", "callee": "ShortcutRegistry", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L526"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_bind_global_shortcuts_does_not_raise", "callee": "register", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L527"}, {"caller_nid": "ui_test_factories_smoke_test_smoke_bind_global_shortcuts_does_not_raise", "callee": "bind_global_shortcuts", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py", "source_location": "L528"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/2ac913b8bbcb8b6c8c474f6961e705e7a0b9d468f43f6f2b8ce4d6202fd2c834.json b/graphify-out/cache/ast/2ac913b8bbcb8b6c8c474f6961e705e7a0b9d468f43f6f2b8ce4d6202fd2c834.json new file mode 100644 index 0000000..aea20b1 --- /dev/null +++ b/graphify-out/cache/ast/2ac913b8bbcb8b6c8c474f6961e705e7a0b9d468f43f6f2b8ce4d6202fd2c834.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/2b41874c1ec869f222d6950366e076bafd13239e5cd6e12fef8634e107ca28c1.json b/graphify-out/cache/ast/2b41874c1ec869f222d6950366e076bafd13239e5cd6e12fef8634e107ca28c1.json new file mode 100644 index 0000000..4fdab89 --- /dev/null +++ b/graphify-out/cache/ast/2b41874c1ec869f222d6950366e076bafd13239e5cd6e12fef8634e107ca28c1.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/2b453c4beb5ac5f54dea63d9bb04aec079deeebe0be1cbd8cd40970a0d3870fe.json b/graphify-out/cache/ast/2b453c4beb5ac5f54dea63d9bb04aec079deeebe0be1cbd8cd40970a0d3870fe.json new file mode 100644 index 0000000..824ec22 --- /dev/null +++ b/graphify-out/cache/ast/2b453c4beb5ac5f54dea63d9bb04aec079deeebe0be1cbd8cd40970a0d3870fe.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_11_crash_recovery_py", "label": "test_flow_11_crash_recovery.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L1"}, {"id": "e2e_test_flow_11_crash_recovery_test_flow_11_crash_recovery", "label": "test_flow_11_crash_recovery()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L16"}, {"id": "e2e_test_flow_11_crash_recovery_rationale_1", "label": "E2E flow 11: Crash-recovery prompt on relaunch. Frontend Spec \u00a76.10 (crash reco", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_11_crash_recovery_py", "target": "tests_e2e_page_objects_problems_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_11_crash_recovery_py", "target": "e2e_test_flow_11_crash_recovery_test_flow_11_crash_recovery", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L16", "weight": 1.0}, {"source": "e2e_test_flow_11_crash_recovery_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_11_crash_recovery_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_11_crash_recovery_test_flow_11_crash_recovery", "callee": "ProblemsPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L17"}, {"caller_nid": "e2e_test_flow_11_crash_recovery_test_flow_11_crash_recovery", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L18"}, {"caller_nid": "e2e_test_flow_11_crash_recovery_test_flow_11_crash_recovery", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L19"}, {"caller_nid": "e2e_test_flow_11_crash_recovery_test_flow_11_crash_recovery", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L21"}, {"caller_nid": "e2e_test_flow_11_crash_recovery_test_flow_11_crash_recovery", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L22"}, {"caller_nid": "e2e_test_flow_11_crash_recovery_test_flow_11_crash_recovery", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L22"}, {"caller_nid": "e2e_test_flow_11_crash_recovery_test_flow_11_crash_recovery", "callee": "inner_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L23"}, {"caller_nid": "e2e_test_flow_11_crash_recovery_test_flow_11_crash_recovery", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py", "source_location": "L23"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/2c21fb0830686d789ab67014545dd50bd14277481a4f8a86eeb77b518dc850ad.json b/graphify-out/cache/ast/2c21fb0830686d789ab67014545dd50bd14277481a4f8a86eeb77b518dc850ad.json new file mode 100644 index 0000000..ac41ccc --- /dev/null +++ b/graphify-out/cache/ast/2c21fb0830686d789ab67014545dd50bd14277481a4f8a86eeb77b518dc850ad.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_connection_panel_py", "label": "test_connection_panel.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L1"}, {"id": "components_test_connection_panel_testconnectionresult", "label": "TestConnectionResult", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L29"}, {"id": "components_test_connection_panel_panel_props", "label": "panel_props()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L38"}, {"id": "components_test_connection_panel_test_connection_panel", "label": "test_connection_panel()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L69"}, {"id": "components_test_connection_panel_rationale_1", "label": "Test-connection result panel (Frontend Spec \u00a77.4.2). A persistent inline panel", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L1"}, {"id": "components_test_connection_panel_rationale_30", "label": "One result rendered in the panel.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L30"}, {"id": "components_test_connection_panel_rationale_39", "label": "Compute the rendered props for the panel. Returns a dict suitable for asser", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L39"}, {"id": "components_test_connection_panel_rationale_74", "label": "Build the inline result panel. Returns a NiceGUI element, or the props dict", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L74"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_connection_panel_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_connection_panel_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_connection_panel_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_connection_panel_py", "target": "components_test_connection_panel_testconnectionresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_connection_panel_py", "target": "components_test_connection_panel_panel_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_connection_panel_py", "target": "components_test_connection_panel_test_connection_panel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L69", "weight": 1.0}, {"source": "components_test_connection_panel_test_connection_panel", "target": "components_test_connection_panel_panel_props", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L80", "weight": 1.0}, {"source": "components_test_connection_panel_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_test_connection_panel_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L1", "weight": 1.0}, {"source": "components_test_connection_panel_rationale_30", "target": "components_test_connection_panel_testconnectionresult", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L30", "weight": 1.0}, {"source": "components_test_connection_panel_rationale_39", "target": "components_test_connection_panel_panel_props", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L39", "weight": 1.0}, {"source": "components_test_connection_panel_rationale_74", "target": "components_test_connection_panel_test_connection_panel", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L74", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L87"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L87"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L90"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L90"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L90"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L101"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L101"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L101"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L102"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "icon", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L102"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L105"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L105"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L108"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L108"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L111"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "expansion", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L111"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L112"}, {"caller_nid": "components_test_connection_panel_test_connection_panel", "callee": "code", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py", "source_location": "L112"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/2d96f6e8fbbc6bfce34f77c47197871c3b446f4a896b0918edc04b930344671b.json b/graphify-out/cache/ast/2d96f6e8fbbc6bfce34f77c47197871c3b446f4a896b0918edc04b930344671b.json new file mode 100644 index 0000000..79bb336 --- /dev/null +++ b/graphify-out/cache/ast/2d96f6e8fbbc6bfce34f77c47197871c3b446f4a896b0918edc04b930344671b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "label": "queue.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L1"}, {"id": "sync_queue_syncjobstate", "label": "SyncJobState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L69"}, {"id": "strenum", "label": "StrEnum", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "sync_queue_syncjobrow", "label": "SyncJobRow", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L116"}, {"id": "sync_queue_decode_files", "label": "_decode_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L134"}, {"id": "sync_queue_encode_files", "label": "_encode_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L151"}, {"id": "sync_queue_row_to_job", "label": "_row_to_job()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L156"}, {"id": "sync_queue_compute_next_attempt_at", "label": "compute_next_attempt_at()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L175"}, {"id": "sync_queue_syncqueue", "label": "SyncQueue", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L190"}, {"id": "sync_queue_syncqueue_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L197"}, {"id": "sync_queue_db_path", "label": "db_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L202"}, {"id": "sync_queue_syncqueue_close", "label": ".close()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L229"}, {"id": "sync_queue_syncqueue_require_conn", "label": "._require_conn()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L235"}, {"id": "sync_queue_syncqueue_require_job", "label": "._require_job()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L241"}, {"id": "sync_queue_syncqueue_insert", "label": ".insert()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L256"}, {"id": "sync_queue_syncqueue_get_by_id", "label": ".get_by_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L310"}, {"id": "sync_queue_syncqueue_get_by_run_path", "label": ".get_by_run_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L323"}, {"id": "sync_queue_syncqueue_list_in_state", "label": ".list_in_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L336"}, {"id": "sync_queue_syncqueue_list_all", "label": ".list_all()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L347"}, {"id": "sync_queue_syncqueue_transition", "label": ".transition()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L357"}, {"id": "sync_queue_syncqueue_record_failure", "label": ".record_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L425"}, {"id": "sync_queue_syncqueue_reset_to_queued", "label": ".reset_to_queued()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L475"}, {"id": "sync_queue_syncqueue_requeue_with_files", "label": ".requeue_with_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L500"}, {"id": "sync_queue_syncqueue_delete", "label": ".delete()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L534"}, {"id": "sync_queue_is_terminal", "label": "is_terminal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L541"}, {"id": "sync_queue_rationale_1", "label": "Durable SQLite-backed sync-job queue. Backend Spec \u00a77.1.1, \u00a77.1.2, \u00a77.1.5. The", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L1"}, {"id": "sync_queue_rationale_70", "label": "State machine for a sync job. Backend Spec \u00a77.1.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L70"}, {"id": "sync_queue_rationale_117", "label": "One row in the ``jobs`` table. Backend Spec \u00a77.1.1.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L117"}, {"id": "sync_queue_rationale_135", "label": "Decode the ``files`` JSON column into a tuple of run-relative paths. A ``NU", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L135"}, {"id": "sync_queue_rationale_152", "label": "Encode a run-relative path tuple into the ``files`` JSON column.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L152"}, {"id": "sync_queue_rationale_157", "label": "Materialize an ``aiosqlite.Row`` (or tuple) into a :class:`SyncJobRow`.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L157"}, {"id": "sync_queue_rationale_176", "label": "Return the ISO timestamp of the next retry attempt. ``attempts_after`` is t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L176"}, {"id": "sync_queue_rationale_191", "label": "Async SQLite-backed durable sync queue. Backend Spec \u00a77.1.1. Use :meth:`ini", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L191"}, {"id": "sync_queue_rationale_203", "label": "The on-disk path of the queue database file.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L203"}, {"id": "sync_queue_rationale_207", "label": "Open the connection, ensure the schema, and replay in-flight rows. Repl", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L207"}, {"id": "sync_queue_rationale_230", "label": "Close the underlying connection (idempotent).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L230"}, {"id": "sync_queue_rationale_242", "label": "Return the row for ``job_id`` or raise ``ValueError``. Centralizes the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L242"}, {"id": "sync_queue_rationale_265", "label": "Insert a new ``QUEUED`` row for ``run_path``. ``files`` is the per-file", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L265"}, {"id": "sync_queue_rationale_311", "label": "Return the row with the given ``job_id`` or ``None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L311"}, {"id": "sync_queue_rationale_324", "label": "Return the row whose ``run_path`` matches, or ``None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L324"}, {"id": "sync_queue_rationale_337", "label": "Return every row currently in ``state`` ordered by ``enqueued_at``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L337"}, {"id": "sync_queue_rationale_348", "label": "Return every row in the queue ordered by ``enqueued_at``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L348"}, {"id": "sync_queue_rationale_370", "label": "Transition a job to ``new_state`` and patch the auxiliary columns. The", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L370"}, {"id": "sync_queue_rationale_433", "label": "Record a transport failure on ``job_id``. If ``terminal`` is True (auth", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L433"}, {"id": "sync_queue_rationale_476", "label": "Reset a ``FAILED`` job back to ``QUEUED`` for a manual retry. Per \u00a77.1.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L476"}, {"id": "sync_queue_rationale_505", "label": "Reset a terminal job back to ``QUEUED`` carrying a new ``files`` list.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L505"}, {"id": "sync_queue_rationale_535", "label": "Remove a job row entirely. Used by the cleanup reaper after CLEANED.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L535"}, {"id": "sync_queue_rationale_542", "label": "Return True if the state is a terminal state (no further work).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L542"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "uuid", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "enum", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "aiosqlite", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L55", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "sync_queue_syncjobstate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L69", "weight": 1.0}, {"source": "sync_queue_syncjobstate", "target": "strenum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "sync_queue_syncjobrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L116", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "sync_queue_decode_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L134", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "sync_queue_encode_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L151", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "sync_queue_row_to_job", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L156", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "sync_queue_compute_next_attempt_at", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L175", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "sync_queue_syncqueue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L190", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L197", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "sync_queue_db_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L202", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L206", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_close", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L229", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_require_conn", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L235", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_require_job", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L241", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_insert", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L256", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_get_by_id", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L310", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_get_by_run_path", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L323", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_list_in_state", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L336", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_list_all", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L347", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_transition", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L357", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_record_failure", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L425", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_reset_to_queued", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L475", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_requeue_with_files", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L500", "weight": 1.0}, {"source": "sync_queue_syncqueue", "target": "sync_queue_syncqueue_delete", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L534", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "target": "sync_queue_is_terminal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L541", "weight": 1.0}, {"source": "sync_queue_row_to_job", "target": "sync_queue_syncjobrow", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L158", "weight": 1.0}, {"source": "sync_queue_row_to_job", "target": "sync_queue_syncjobstate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L162", "weight": 1.0}, {"source": "sync_queue_row_to_job", "target": "sync_queue_decode_files", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L171", "weight": 1.0}, {"source": "sync_queue_syncqueue_require_job", "target": "sync_queue_syncqueue_get_by_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L248", "weight": 1.0}, {"source": "sync_queue_syncqueue_insert", "target": "sync_queue_syncqueue_require_conn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L273", "weight": 1.0}, {"source": "sync_queue_syncqueue_insert", "target": "sync_queue_syncjobrow", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L274", "weight": 1.0}, {"source": "sync_queue_syncqueue_insert", "target": "sync_queue_encode_files", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L304", "weight": 1.0}, {"source": "sync_queue_syncqueue_get_by_id", "target": "sync_queue_syncqueue_require_conn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L312", "weight": 1.0}, {"source": "sync_queue_syncqueue_get_by_id", "target": "sync_queue_syncqueue_close", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L318", "weight": 1.0}, {"source": "sync_queue_syncqueue_get_by_id", "target": "sync_queue_row_to_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L321", "weight": 1.0}, {"source": "sync_queue_syncqueue_get_by_run_path", "target": "sync_queue_syncqueue_require_conn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L325", "weight": 1.0}, {"source": "sync_queue_syncqueue_get_by_run_path", "target": "sync_queue_syncqueue_close", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L331", "weight": 1.0}, {"source": "sync_queue_syncqueue_get_by_run_path", "target": "sync_queue_row_to_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L334", "weight": 1.0}, {"source": "sync_queue_syncqueue_list_in_state", "target": "sync_queue_syncqueue_require_conn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L338", "weight": 1.0}, {"source": "sync_queue_syncqueue_list_in_state", "target": "sync_queue_syncqueue_close", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L344", "weight": 1.0}, {"source": "sync_queue_syncqueue_list_in_state", "target": "sync_queue_row_to_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L345", "weight": 1.0}, {"source": "sync_queue_syncqueue_list_all", "target": "sync_queue_syncqueue_require_conn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L349", "weight": 1.0}, {"source": "sync_queue_syncqueue_list_all", "target": "sync_queue_syncqueue_close", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L352", "weight": 1.0}, {"source": "sync_queue_syncqueue_list_all", "target": "sync_queue_row_to_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L353", "weight": 1.0}, {"source": "sync_queue_syncqueue_transition", "target": "sync_queue_syncqueue_require_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L375", "weight": 1.0}, {"source": "sync_queue_syncqueue_transition", "target": "sync_queue_syncqueue_require_conn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L396", "weight": 1.0}, {"source": "sync_queue_syncqueue_record_failure", "target": "sync_queue_syncqueue_require_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L442", "weight": 1.0}, {"source": "sync_queue_syncqueue_record_failure", "target": "sync_queue_syncqueue_transition", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L447", "weight": 1.0}, {"source": "sync_queue_syncqueue_record_failure", "target": "sync_queue_compute_next_attempt_at", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L465", "weight": 1.0}, {"source": "sync_queue_syncqueue_reset_to_queued", "target": "sync_queue_syncqueue_require_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L483", "weight": 1.0}, {"source": "sync_queue_syncqueue_reset_to_queued", "target": "sync_queue_syncqueue_require_conn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L484", "weight": 1.0}, {"source": "sync_queue_syncqueue_reset_to_queued", "target": "sync_queue_syncqueue_get_by_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L498", "weight": 1.0}, {"source": "sync_queue_syncqueue_requeue_with_files", "target": "sync_queue_syncqueue_require_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L514", "weight": 1.0}, {"source": "sync_queue_syncqueue_requeue_with_files", "target": "sync_queue_syncqueue_require_conn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L515", "weight": 1.0}, {"source": "sync_queue_syncqueue_requeue_with_files", "target": "sync_queue_encode_files", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L529", "weight": 1.0}, {"source": "sync_queue_syncqueue_requeue_with_files", "target": "sync_queue_syncqueue_get_by_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L532", "weight": 1.0}, {"source": "sync_queue_syncqueue_delete", "target": "sync_queue_syncqueue_require_conn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L536", "weight": 1.0}, {"source": "sync_queue_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_queue_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L1", "weight": 1.0}, {"source": "sync_queue_rationale_70", "target": "sync_queue_syncjobstate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L70", "weight": 1.0}, {"source": "sync_queue_rationale_117", "target": "sync_queue_syncjobrow", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L117", "weight": 1.0}, {"source": "sync_queue_rationale_135", "target": "sync_queue_decode_files", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L135", "weight": 1.0}, {"source": "sync_queue_rationale_152", "target": "sync_queue_encode_files", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L152", "weight": 1.0}, {"source": "sync_queue_rationale_157", "target": "sync_queue_row_to_job", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L157", "weight": 1.0}, {"source": "sync_queue_rationale_176", "target": "sync_queue_compute_next_attempt_at", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L176", "weight": 1.0}, {"source": "sync_queue_rationale_191", "target": "sync_queue_syncqueue", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L191", "weight": 1.0}, {"source": "sync_queue_rationale_203", "target": "sync_queue_syncqueue_db_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L203", "weight": 1.0}, {"source": "sync_queue_rationale_207", "target": "sync_queue_syncqueue_init", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L207", "weight": 1.0}, {"source": "sync_queue_rationale_230", "target": "sync_queue_syncqueue_close", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L230", "weight": 1.0}, {"source": "sync_queue_rationale_242", "target": "sync_queue_syncqueue_require_job", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L242", "weight": 1.0}, {"source": "sync_queue_rationale_265", "target": "sync_queue_syncqueue_insert", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L265", "weight": 1.0}, {"source": "sync_queue_rationale_311", "target": "sync_queue_syncqueue_get_by_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L311", "weight": 1.0}, {"source": "sync_queue_rationale_324", "target": "sync_queue_syncqueue_get_by_run_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L324", "weight": 1.0}, {"source": "sync_queue_rationale_337", "target": "sync_queue_syncqueue_list_in_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L337", "weight": 1.0}, {"source": "sync_queue_rationale_348", "target": "sync_queue_syncqueue_list_all", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L348", "weight": 1.0}, {"source": "sync_queue_rationale_370", "target": "sync_queue_syncqueue_transition", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L370", "weight": 1.0}, {"source": "sync_queue_rationale_433", "target": "sync_queue_syncqueue_record_failure", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L433", "weight": 1.0}, {"source": "sync_queue_rationale_476", "target": "sync_queue_syncqueue_reset_to_queued", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L476", "weight": 1.0}, {"source": "sync_queue_rationale_505", "target": "sync_queue_syncqueue_requeue_with_files", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L505", "weight": 1.0}, {"source": "sync_queue_rationale_535", "target": "sync_queue_syncqueue_delete", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L535", "weight": 1.0}, {"source": "sync_queue_rationale_542", "target": "sync_queue_syncqueue_is_terminal", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L542", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_queue_decode_files", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L143"}, {"caller_nid": "sync_queue_decode_files", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L146"}, {"caller_nid": "sync_queue_decode_files", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L148"}, {"caller_nid": "sync_queue_decode_files", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L148"}, {"caller_nid": "sync_queue_encode_files", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L153"}, {"caller_nid": "sync_queue_encode_files", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L153"}, {"caller_nid": "sync_queue_compute_next_attempt_at", "callee": "utc_now_or", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L186"}, {"caller_nid": "sync_queue_compute_next_attempt_at", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L186"}, {"caller_nid": "sync_queue_compute_next_attempt_at", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L187"}, {"caller_nid": "sync_queue_syncqueue_init", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L213"}, {"caller_nid": "sync_queue_syncqueue_init", "callee": "connect", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L214"}, {"caller_nid": "sync_queue_syncqueue_init", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L214"}, {"caller_nid": "sync_queue_syncqueue_init", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L217"}, {"caller_nid": "sync_queue_syncqueue_init", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L218"}, {"caller_nid": "sync_queue_syncqueue_init", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L220"}, {"caller_nid": "sync_queue_syncqueue_init", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L222"}, {"caller_nid": "sync_queue_syncqueue_init", "callee": "commit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L226"}, {"caller_nid": "sync_queue_syncqueue_init", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L227"}, {"caller_nid": "sync_queue_syncqueue_require_conn", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L238"}, {"caller_nid": "sync_queue_syncqueue_require_job", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L251"}, {"caller_nid": "sync_queue_syncqueue_insert", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L275"}, {"caller_nid": "sync_queue_syncqueue_insert", "callee": "uuid4", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L275"}, {"caller_nid": "sync_queue_syncqueue_insert", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L276"}, {"caller_nid": "sync_queue_syncqueue_insert", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L279"}, {"caller_nid": "sync_queue_syncqueue_insert", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L281"}, {"caller_nid": "sync_queue_syncqueue_insert", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L283"}, {"caller_nid": "sync_queue_syncqueue_insert", "callee": "commit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L307"}, {"caller_nid": "sync_queue_syncqueue_get_by_id", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L313"}, {"caller_nid": "sync_queue_syncqueue_get_by_id", "callee": "fetchone", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L317"}, {"caller_nid": "sync_queue_syncqueue_get_by_run_path", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L326"}, {"caller_nid": "sync_queue_syncqueue_get_by_run_path", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L328"}, {"caller_nid": "sync_queue_syncqueue_get_by_run_path", "callee": "fetchone", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L330"}, {"caller_nid": "sync_queue_syncqueue_list_in_state", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L339"}, {"caller_nid": "sync_queue_syncqueue_list_in_state", "callee": "fetchall", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L343"}, {"caller_nid": "sync_queue_syncqueue_list_all", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L350"}, {"caller_nid": "sync_queue_syncqueue_list_all", "callee": "fetchall", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L351"}, {"caller_nid": "sync_queue_syncqueue_transition", "callee": "replace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L380"}, {"caller_nid": "sync_queue_syncqueue_transition", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L397"}, {"caller_nid": "sync_queue_syncqueue_transition", "callee": "commit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L422"}, {"caller_nid": "sync_queue_syncqueue_record_failure", "callee": "utc_now_or", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L444"}, {"caller_nid": "sync_queue_syncqueue_record_failure", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L445"}, {"caller_nid": "sync_queue_syncqueue_reset_to_queued", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L485"}, {"caller_nid": "sync_queue_syncqueue_reset_to_queued", "callee": "commit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L497"}, {"caller_nid": "sync_queue_syncqueue_requeue_with_files", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L516"}, {"caller_nid": "sync_queue_syncqueue_requeue_with_files", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L529"}, {"caller_nid": "sync_queue_syncqueue_requeue_with_files", "callee": "commit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L531"}, {"caller_nid": "sync_queue_syncqueue_delete", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L537"}, {"caller_nid": "sync_queue_syncqueue_delete", "callee": "commit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py", "source_location": "L538"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/2ded6b231f097cb04b835631c00765143b71e2287440e280459cd2cec5b9c809.json b/graphify-out/cache/ast/2ded6b231f097cb04b835631c00765143b71e2287440e280459cd2cec5b9c809.json new file mode 100644 index 0000000..6828fdb --- /dev/null +++ b/graphify-out/cache/ast/2ded6b231f097cb04b835631c00765143b71e2287440e280459cd2cec5b9c809.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "label": "test_creation_flow.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1"}, {"id": "controller_test_creation_flow_build_config", "label": "_build_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L67"}, {"id": "controller_test_creation_flow_project_request", "label": "_project_request()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L94"}, {"id": "controller_test_creation_flow_run_request", "label": "_run_request()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L126"}, {"id": "controller_test_creation_flow_build_controller", "label": "_build_controller()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L155"}, {"id": "controller_test_creation_flow_drain_to_done", "label": "_drain_to_done()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L177"}, {"id": "controller_test_creation_flow_test_full_project_creation_happy_path", "label": "test_full_project_creation_happy_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L194"}, {"id": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", "label": "test_full_experimental_run_creation_happy_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L227"}, {"id": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", "label": "test_same_minute_run_creation_collision_is_hard_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L246"}, {"id": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", "label": "test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L278"}, {"id": "controller_test_creation_flow_test_validation_rejects_empty_label", "label": "test_validation_rejects_empty_label()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L309"}, {"id": "controller_test_creation_flow_test_validation_rejects_label_over_length", "label": "test_validation_rejects_label_over_length()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L324"}, {"id": "controller_test_creation_flow_test_validation_rejects_objective_over_length", "label": "test_validation_rejects_objective_over_length()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L338"}, {"id": "controller_test_creation_flow_test_validation_rejects_operator_not_in_allowlist", "label": "test_validation_rejects_operator_not_in_allowlist()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L354"}, {"id": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", "label": "test_validation_rejects_unknown_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L368"}, {"id": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", "label": "test_validation_rejects_unsafe_project_name_for_runs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L384"}, {"id": "controller_test_creation_flow_test_validation_rejects_empty_objective", "label": "test_validation_rejects_empty_objective()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L400"}, {"id": "controller_test_creation_flow_test_validation_rejects_empty_operator", "label": "test_validation_rejects_empty_operator()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L413"}, {"id": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "label": "test_plugin_input_required_suspend_resume()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L431"}, {"id": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "label": "test_cancel_with_discard_files_removes_partial_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L502"}, {"id": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", "label": "test_cancel_without_discard_leaves_partial_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L540"}, {"id": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "label": "test_post_validate_blocks_sync_when_placeholder_left_in_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L562"}, {"id": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", "label": "test_subscribe_yields_phase_events_and_done_envelope()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L603"}, {"id": "controller_test_creation_flow_test_status_unknown_session_raises", "label": "test_status_unknown_session_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L631"}, {"id": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", "label": "test_resume_rejects_session_not_in_input_required()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L639"}, {"id": "controller_test_creation_flow_test_cancel_unknown_session_is_noop", "label": "test_cancel_unknown_session_is_noop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L649"}, {"id": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", "label": "test_noop_readme_generator_writes_minimal_readme()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L662"}, {"id": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "label": "test_real_readme_generator_writes_frontmatter_and_cache()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L694"}, {"id": "controller_test_creation_flow_test_noop_nas_sync_returns_none", "label": "test_noop_nas_sync_returns_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L749"}, {"id": "controller_test_creation_flow_test_resume_unknown_session_raises", "label": "test_resume_unknown_session_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L760"}, {"id": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", "label": "test_required_template_field_missing_in_readme_extra_fails()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L768"}, {"id": "controller_test_creation_flow_test_required_template_field_present_passes_validation", "label": "test_required_template_field_present_passes_validation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L804"}, {"id": "controller_test_creation_flow_test_subscribe_unknown_session_raises", "label": "test_subscribe_unknown_session_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L839"}, {"id": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "label": "test_cancel_input_required_aborts_session_via_plugin_callback()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L848"}, {"id": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", "label": "test_cancel_invokes_cleanup_when_compose_path_fails()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L906"}, {"id": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", "label": "test_cleanup_removes_existing_directory_when_discard_files_true()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L929"}, {"id": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", "label": "test_config_required_readme_field_missing_fails()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L948"}, {"id": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "label": "test_render_failure_transitions_session_to_failed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L974"}, {"id": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", "label": "test_run_creation_writes_equipment_json_at_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1002"}, {"id": "controller_test_creation_flow_test_format_error_with_non_validation_exception_returns_internal_error", "label": "test_format_error_with_non_validation_exception_returns_internal_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1016"}, {"id": "controller_test_creation_flow_test_append_log_writes_log_line", "label": "test_append_log_writes_log_line()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1025"}, {"id": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "label": "test_run_inherits_lims_project_block_from_parent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1041"}, {"id": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", "label": "test_cancel_before_task_starts_invokes_cleanup()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1065"}, {"id": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", "label": "test_resume_session_with_no_resume_queue_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1085"}, {"id": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", "label": "test_subscribe_creates_queue_when_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1106"}, {"id": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "label": "test_plugin_pass_aborted_transitions_to_failed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1130"}, {"id": "controller_test_creation_flow_test_required_field_ids_filters_non_dict_entries", "label": "test_required_field_ids_filters_non_dict_entries()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1175"}, {"id": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", "label": "test_run_without_parent_creation_json_fills_stub_block()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1191"}, {"id": "controller_test_creation_flow_rationale_1", "label": "End-to-end integration tests for :class:`CreationController`. Each test drives", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1"}, {"id": "controller_test_creation_flow_rationale_68", "label": "Construct a minimal Config with one equipment configured.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L68"}, {"id": "controller_test_creation_flow_rationale_178", "label": "Wait for the session task to finish and return the final state dict.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L178"}, {"id": "controller_test_creation_flow_rationale_195", "label": "Project creation walks every state and emits a current-version creation.json.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L195"}, {"id": "controller_test_creation_flow_rationale_249", "label": "Redesign \u00a73.4: two creations on the same instrument within the same minute r", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L249"}, {"id": "controller_test_creation_flow_rationale_385", "label": "A run whose parent project name is not a safe path segment (\u00a73.2) is rejecte", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L385"}, {"id": "controller_test_creation_flow_rationale_432", "label": "When a plugin raises PluginInputRequired, controller emits the event and res", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L432"}, {"id": "controller_test_creation_flow_rationale_503", "label": "A cancel with ``discard_files=True`` deletes the partial directory.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L503"}, {"id": "controller_test_creation_flow_rationale_541", "label": "A cancel with ``discard_files=False`` leaves the partial directory.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L541"}, {"id": "controller_test_creation_flow_rationale_565", "label": "A rendered file containing ```` must trip the post-validate gate.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L565"}, {"id": "controller_test_creation_flow_rationale_695", "label": "T1 (\u00a7C1): the production ``ReadmeGenerator`` -- injected by ``tray.dependenc", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L695"}, {"id": "controller_test_creation_flow_rationale_771", "label": "A template-required README field missing from ``readme_extra`` must trigger", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L771"}, {"id": "controller_test_creation_flow_rationale_807", "label": "When ``readme_extra`` supplies a non-empty value for a required field the va", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L807"}, {"id": "controller_test_creation_flow_rationale_851", "label": "When the operator cancels the input-required prompt (host returns ``aborted=", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L851"}, {"id": "controller_test_creation_flow_rationale_909", "label": "``_cleanup`` swallows compose-path errors gracefully.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L909"}, {"id": "controller_test_creation_flow_rationale_932", "label": "``_cleanup`` removes the destination directory when ``discard_files=True``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L932"}, {"id": "controller_test_creation_flow_rationale_949", "label": "A config.yaml-required README field missing from ``readme_extra`` must trigg", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L949"}, {"id": "controller_test_creation_flow_rationale_975", "label": "A Copier render failure (e.g. dst exists) transitions the session to ``FAILE", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L975"}, {"id": "controller_test_creation_flow_rationale_1003", "label": "The controller writes ``equipment.json`` under ``//.exlab-wiz", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1003"}, {"id": "controller_test_creation_flow_rationale_1019", "label": "Generic exceptions are wrapped as ``internal_error``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1019"}, {"id": "controller_test_creation_flow_rationale_1026", "label": "The best-effort log appender writes to the equipment cache dir.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1026"}, {"id": "controller_test_creation_flow_rationale_1042", "label": "A run inherits its LIMS identity from the parent project's creation.json (Ba", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1042"}, {"id": "controller_test_creation_flow_rationale_1066", "label": "If ``cancel`` is invoked on a session that has not yet started a pipeline ta", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1066"}, {"id": "controller_test_creation_flow_rationale_1086", "label": "Resume against a session that has no resume queue raises.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1086"}, {"id": "controller_test_creation_flow_rationale_1107", "label": "``subscribe`` initializes ``event_queue`` if the session opened with none (d", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1107"}, {"id": "controller_test_creation_flow_rationale_1131", "label": "When :class:`PluginHost` returns ``aborted=True``, the controller transition", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1131"}, {"id": "controller_test_creation_flow_rationale_1176", "label": "The ``_required_field_ids`` helper must skip non-dict entries in the templat", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1176"}, {"id": "controller_test_creation_flow_rationale_1192", "label": "A run whose parent project folder has no readable creation.json still produc", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1192"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "shutil", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "exlab_wizard_cache_creation_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "exlab_wizard_cache_equipment", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "exlab_wizard_controller", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "exlab_wizard_controller_creation", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "exlab_wizard_plugins_host", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "exlab_wizard_template_copier_driver", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L55", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "exlab_wizard_validator_engine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_build_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_project_request", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L94", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_run_request", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L126", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_build_controller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L155", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_drain_to_done", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L177", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_full_project_creation_happy_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L194", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L227", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L246", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L278", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_validation_rejects_empty_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L309", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_validation_rejects_label_over_length", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L324", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_validation_rejects_objective_over_length", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L338", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_validation_rejects_operator_not_in_allowlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L354", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L368", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L384", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_validation_rejects_empty_objective", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L400", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_validation_rejects_empty_operator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L413", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L431", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L502", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L540", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L562", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L603", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_status_unknown_session_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L631", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L639", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_cancel_unknown_session_is_noop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L649", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L662", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L694", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_noop_nas_sync_returns_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L749", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_resume_unknown_session_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L760", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L768", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_required_template_field_present_passes_validation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L804", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_subscribe_unknown_session_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L839", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L848", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L906", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L929", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L948", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L974", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1002", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_format_error_with_non_validation_exception_returns_internal_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1016", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_append_log_writes_log_line", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1025", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1041", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1065", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1085", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1106", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1130", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_required_field_ids_filters_non_dict_entries", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1175", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "target": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1191", "weight": 1.0}, {"source": "controller_test_creation_flow_test_full_project_creation_happy_path", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L198", "weight": 1.0}, {"source": "controller_test_creation_flow_test_full_project_creation_happy_path", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L199", "weight": 1.0}, {"source": "controller_test_creation_flow_test_full_project_creation_happy_path", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L201", "weight": 1.0}, {"source": "controller_test_creation_flow_test_full_project_creation_happy_path", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L204", "weight": 1.0}, {"source": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L230", "weight": 1.0}, {"source": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L231", "weight": 1.0}, {"source": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", "target": "controller_test_creation_flow_run_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L234", "weight": 1.0}, {"source": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L235", "weight": 1.0}, {"source": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L254", "weight": 1.0}, {"source": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L255", "weight": 1.0}, {"source": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", "target": "controller_test_creation_flow_run_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L259", "weight": 1.0}, {"source": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L260", "weight": 1.0}, {"source": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L283", "weight": 1.0}, {"source": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L284", "weight": 1.0}, {"source": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", "target": "controller_test_creation_flow_run_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L288", "weight": 1.0}, {"source": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L294", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_empty_label", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L312", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_empty_label", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L313", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_empty_label", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L315", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_label_over_length", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L327", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_label_over_length", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L328", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_label_over_length", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L330", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_objective_over_length", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L341", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_objective_over_length", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L342", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_objective_over_length", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L345", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_operator_not_in_allowlist", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L357", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_operator_not_in_allowlist", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L358", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_operator_not_in_allowlist", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L360", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L371", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L372", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L374", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L389", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L390", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", "target": "controller_test_creation_flow_run_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L392", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_empty_objective", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L403", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_empty_objective", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L404", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_empty_objective", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L406", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_empty_operator", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L416", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_empty_operator", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L417", "weight": 1.0}, {"source": "controller_test_creation_flow_test_validation_rejects_empty_operator", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L419", "weight": 1.0}, {"source": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L452", "weight": 1.0}, {"source": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L470", "weight": 1.0}, {"source": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "target": "controller_test_creation_flow_run_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L472", "weight": 1.0}, {"source": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L493", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L506", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L507", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L512", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L513", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L544", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L545", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L547", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L548", "weight": 1.0}, {"source": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L584", "weight": 1.0}, {"source": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L585", "weight": 1.0}, {"source": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "target": "controller_test_creation_flow_run_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L587", "weight": 1.0}, {"source": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L588", "weight": 1.0}, {"source": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L606", "weight": 1.0}, {"source": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L607", "weight": 1.0}, {"source": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L609", "weight": 1.0}, {"source": "controller_test_creation_flow_test_status_unknown_session_raises", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L634", "weight": 1.0}, {"source": "controller_test_creation_flow_test_status_unknown_session_raises", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L634", "weight": 1.0}, {"source": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L642", "weight": 1.0}, {"source": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L642", "weight": 1.0}, {"source": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L643", "weight": 1.0}, {"source": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L644", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_unknown_session_is_noop", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L652", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_unknown_session_is_noop", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L652", "weight": 1.0}, {"source": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L712", "weight": 1.0}, {"source": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L717", "weight": 1.0}, {"source": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L720", "weight": 1.0}, {"source": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L724", "weight": 1.0}, {"source": "controller_test_creation_flow_test_resume_unknown_session_raises", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L763", "weight": 1.0}, {"source": "controller_test_creation_flow_test_resume_unknown_session_raises", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L763", "weight": 1.0}, {"source": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L793", "weight": 1.0}, {"source": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L794", "weight": 1.0}, {"source": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", "target": "controller_test_creation_flow_run_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L796", "weight": 1.0}, {"source": "controller_test_creation_flow_test_required_template_field_present_passes_validation", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L829", "weight": 1.0}, {"source": "controller_test_creation_flow_test_required_template_field_present_passes_validation", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L830", "weight": 1.0}, {"source": "controller_test_creation_flow_test_required_template_field_present_passes_validation", "target": "controller_test_creation_flow_run_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L832", "weight": 1.0}, {"source": "controller_test_creation_flow_test_required_template_field_present_passes_validation", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L835", "weight": 1.0}, {"source": "controller_test_creation_flow_test_subscribe_unknown_session_raises", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L842", "weight": 1.0}, {"source": "controller_test_creation_flow_test_subscribe_unknown_session_raises", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L842", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L870", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L887", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "target": "controller_test_creation_flow_run_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L889", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L912", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L913", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L918", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L919", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L935", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L936", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L939", "weight": 1.0}, {"source": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L955", "weight": 1.0}, {"source": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L965", "weight": 1.0}, {"source": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L967", "weight": 1.0}, {"source": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L979", "weight": 1.0}, {"source": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L980", "weight": 1.0}, {"source": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L991", "weight": 1.0}, {"source": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1006", "weight": 1.0}, {"source": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1007", "weight": 1.0}, {"source": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1009", "weight": 1.0}, {"source": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1010", "weight": 1.0}, {"source": "controller_test_creation_flow_test_append_log_writes_log_line", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1029", "weight": 1.0}, {"source": "controller_test_creation_flow_test_append_log_writes_log_line", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1030", "weight": 1.0}, {"source": "controller_test_creation_flow_test_append_log_writes_log_line", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1032", "weight": 1.0}, {"source": "controller_test_creation_flow_test_append_log_writes_log_line", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1033", "weight": 1.0}, {"source": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1047", "weight": 1.0}, {"source": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1048", "weight": 1.0}, {"source": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1051", "weight": 1.0}, {"source": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1052", "weight": 1.0}, {"source": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "target": "controller_test_creation_flow_run_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1054", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1070", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1071", "weight": 1.0}, {"source": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1074", "weight": 1.0}, {"source": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1089", "weight": 1.0}, {"source": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1090", "weight": 1.0}, {"source": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1093", "weight": 1.0}, {"source": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1111", "weight": 1.0}, {"source": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1112", "weight": 1.0}, {"source": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", "target": "controller_test_creation_flow_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1114", "weight": 1.0}, {"source": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1152", "weight": 1.0}, {"source": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1155", "weight": 1.0}, {"source": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "target": "controller_test_creation_flow_run_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1162", "weight": 1.0}, {"source": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", "target": "controller_test_creation_flow_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1197", "weight": 1.0}, {"source": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", "target": "controller_test_creation_flow_build_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1198", "weight": 1.0}, {"source": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", "target": "controller_test_creation_flow_run_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1202", "weight": 1.0}, {"source": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", "target": "controller_test_creation_flow_drain_to_done", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1203", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_1", "target": "users_alex_projects_exlabwizard_tests_integration_controller_test_creation_flow_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_68", "target": "controller_test_creation_flow_build_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L68", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_178", "target": "controller_test_creation_flow_drain_to_done", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L178", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_195", "target": "controller_test_creation_flow_test_full_project_creation_happy_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L195", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_249", "target": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L249", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_385", "target": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L385", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_432", "target": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L432", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_503", "target": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L503", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_541", "target": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L541", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_565", "target": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L565", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_695", "target": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L695", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_771", "target": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L771", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_807", "target": "controller_test_creation_flow_test_required_template_field_present_passes_validation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L807", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_851", "target": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L851", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_909", "target": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L909", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_932", "target": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L932", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_949", "target": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L949", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_975", "target": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L975", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_1003", "target": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1003", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_1019", "target": "controller_test_creation_flow_test_format_error_with_non_validation_exception_returns_internal_error", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1019", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_1026", "target": "controller_test_creation_flow_test_append_log_writes_log_line", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1026", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_1042", "target": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1042", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_1066", "target": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1066", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_1086", "target": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1086", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_1107", "target": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1107", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_1131", "target": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1131", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_1176", "target": "controller_test_creation_flow_test_required_field_ids_filters_non_dict_entries", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1176", "weight": 1.0}, {"source": "controller_test_creation_flow_rationale_1192", "target": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1192", "weight": 1.0}], "raw_calls": [{"caller_nid": "controller_test_creation_flow_build_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L69"}, {"caller_nid": "controller_test_creation_flow_build_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L70"}, {"caller_nid": "controller_test_creation_flow_build_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L71"}, {"caller_nid": "controller_test_creation_flow_build_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L72"}, {"caller_nid": "controller_test_creation_flow_build_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L73"}, {"caller_nid": "controller_test_creation_flow_build_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L76"}, {"caller_nid": "controller_test_creation_flow_build_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L79"}, {"caller_nid": "controller_test_creation_flow_build_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L81"}, {"caller_nid": "controller_test_creation_flow_build_config", "callee": "OperatorsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L89"}, {"caller_nid": "controller_test_creation_flow_build_config", "callee": "READMEConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L90"}, {"caller_nid": "controller_test_creation_flow_project_request", "callee": "ProjectCreateRequest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L109"}, {"caller_nid": "controller_test_creation_flow_run_request", "callee": "RunCreateRequest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L141"}, {"caller_nid": "controller_test_creation_flow_build_controller", "callee": "CreationController", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L162"}, {"caller_nid": "controller_test_creation_flow_build_controller", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L164"}, {"caller_nid": "controller_test_creation_flow_build_controller", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L165"}, {"caller_nid": "controller_test_creation_flow_build_controller", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L167"}, {"caller_nid": "controller_test_creation_flow_build_controller", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L168"}, {"caller_nid": "controller_test_creation_flow_build_controller", "callee": "NoOpReadmeGenerator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L171"}, {"caller_nid": "controller_test_creation_flow_build_controller", "callee": "NoOpNASSync", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L172"}, {"caller_nid": "controller_test_creation_flow_build_controller", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L173"}, {"caller_nid": "controller_test_creation_flow_drain_to_done", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L179"}, {"caller_nid": "controller_test_creation_flow_drain_to_done", "callee": "status", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L182"}, {"caller_nid": "controller_test_creation_flow_test_full_project_creation_happy_path", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L197"}, {"caller_nid": "controller_test_creation_flow_test_full_project_creation_happy_path", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L201"}, {"caller_nid": "controller_test_creation_flow_test_full_project_creation_happy_path", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L208"}, {"caller_nid": "controller_test_creation_flow_test_full_project_creation_happy_path", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L210"}, {"caller_nid": "controller_test_creation_flow_test_full_project_creation_happy_path", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L213"}, {"caller_nid": "controller_test_creation_flow_test_full_project_creation_happy_path", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L213"}, {"caller_nid": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L229"}, {"caller_nid": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L233"}, {"caller_nid": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", "callee": "create_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L234"}, {"caller_nid": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L239"}, {"caller_nid": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L241"}, {"caller_nid": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L241"}, {"caller_nid": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L253"}, {"caller_nid": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L258"}, {"caller_nid": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", "callee": "create_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L259"}, {"caller_nid": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L264"}, {"caller_nid": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", "callee": "create_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L265"}, {"caller_nid": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L270"}, {"caller_nid": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L282"}, {"caller_nid": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L286"}, {"caller_nid": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", "callee": "create_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L287"}, {"caller_nid": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L298"}, {"caller_nid": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L300"}, {"caller_nid": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L300"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_empty_label", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L311"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_empty_label", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L315"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_empty_label", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L317"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_label_over_length", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L326"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_label_over_length", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L330"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_label_over_length", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L332"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_objective_over_length", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L340"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_objective_over_length", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L344"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_objective_over_length", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L348"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_operator_not_in_allowlist", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L356"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_operator_not_in_allowlist", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L360"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_operator_not_in_allowlist", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L362"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L370"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", "callee": "__setattr__", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L375"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L376"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L378"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L388"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", "callee": "create_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L392"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L394"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_empty_objective", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L402"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_empty_objective", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L406"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_empty_objective", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L408"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_empty_operator", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L415"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_empty_operator", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L419"}, {"caller_nid": "controller_test_creation_flow_test_validation_rejects_empty_operator", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L421"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L436"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L437"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L448"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L451"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "PluginRecord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L454"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "_StubRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L468"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "PluginHost", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L469"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "create_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L472"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L477"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L478"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L481"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L483"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L486"}, {"caller_nid": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", "callee": "resume", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L492"}, {"caller_nid": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L505"}, {"caller_nid": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L512"}, {"caller_nid": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L515"}, {"caller_nid": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L520"}, {"caller_nid": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L525"}, {"caller_nid": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L526"}, {"caller_nid": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L528"}, {"caller_nid": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "callee": "cancel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L531"}, {"caller_nid": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L533"}, {"caller_nid": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "callee": "rmtree", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L536"}, {"caller_nid": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L537"}, {"caller_nid": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L543"}, {"caller_nid": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L547"}, {"caller_nid": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L550"}, {"caller_nid": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", "callee": "cancel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L553"}, {"caller_nid": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L554"}, {"caller_nid": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L568"}, {"caller_nid": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L569"}, {"caller_nid": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L578"}, {"caller_nid": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L583"}, {"caller_nid": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "callee": "create_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L587"}, {"caller_nid": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "callee": "next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L592"}, {"caller_nid": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "callee": "glob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L592"}, {"caller_nid": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L594"}, {"caller_nid": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L594"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L605"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L609"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", "callee": "subscribe", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L613"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L614"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L615"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L621"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L621"}, {"caller_nid": "controller_test_creation_flow_test_status_unknown_session_raises", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L633"}, {"caller_nid": "controller_test_creation_flow_test_status_unknown_session_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L635"}, {"caller_nid": "controller_test_creation_flow_test_status_unknown_session_raises", "callee": "status", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L636"}, {"caller_nid": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L641"}, {"caller_nid": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L643"}, {"caller_nid": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L645"}, {"caller_nid": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", "callee": "resume", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L646"}, {"caller_nid": "controller_test_creation_flow_test_cancel_unknown_session_is_noop", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L651"}, {"caller_nid": "controller_test_creation_flow_test_cancel_unknown_session_is_noop", "callee": "cancel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L654"}, {"caller_nid": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", "callee": "NoOpReadmeGenerator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L668"}, {"caller_nid": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", "callee": "ReadmeContext", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L669"}, {"caller_nid": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", "callee": "CoreFields", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L671"}, {"caller_nid": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", "callee": "SystemFields", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L675"}, {"caller_nid": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L676"}, {"caller_nid": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L685"}, {"caller_nid": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L686"}, {"caller_nid": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L687"}, {"caller_nid": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L711"}, {"caller_nid": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L714"}, {"caller_nid": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "callee": "READMEDefaultField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L715"}, {"caller_nid": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "callee": "ReadmeGenerator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L717"}, {"caller_nid": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L723"}, {"caller_nid": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L729"}, {"caller_nid": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L730"}, {"caller_nid": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L731"}, {"caller_nid": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "callee": "safe_load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L732"}, {"caller_nid": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "callee": "split", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L732"}, {"caller_nid": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L744"}, {"caller_nid": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L745"}, {"caller_nid": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L745"}, {"caller_nid": "controller_test_creation_flow_test_noop_nas_sync_returns_none", "callee": "NoOpNASSync", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L750"}, {"caller_nid": "controller_test_creation_flow_test_noop_nas_sync_returns_none", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L751"}, {"caller_nid": "controller_test_creation_flow_test_resume_unknown_session_raises", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L762"}, {"caller_nid": "controller_test_creation_flow_test_resume_unknown_session_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L764"}, {"caller_nid": "controller_test_creation_flow_test_resume_unknown_session_raises", "callee": "resume", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L765"}, {"caller_nid": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L774"}, {"caller_nid": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L775"}, {"caller_nid": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L789"}, {"caller_nid": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L792"}, {"caller_nid": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", "callee": "create_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L796"}, {"caller_nid": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L798"}, {"caller_nid": "controller_test_creation_flow_test_required_template_field_present_passes_validation", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L810"}, {"caller_nid": "controller_test_creation_flow_test_required_template_field_present_passes_validation", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L811"}, {"caller_nid": "controller_test_creation_flow_test_required_template_field_present_passes_validation", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L825"}, {"caller_nid": "controller_test_creation_flow_test_required_template_field_present_passes_validation", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L828"}, {"caller_nid": "controller_test_creation_flow_test_required_template_field_present_passes_validation", "callee": "__setattr__", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L833"}, {"caller_nid": "controller_test_creation_flow_test_required_template_field_present_passes_validation", "callee": "create_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L834"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_unknown_session_raises", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L841"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_unknown_session_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L843"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_unknown_session_raises", "callee": "subscribe", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L844"}, {"caller_nid": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L854"}, {"caller_nid": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L855"}, {"caller_nid": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L866"}, {"caller_nid": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L869"}, {"caller_nid": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "callee": "PluginRecord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L872"}, {"caller_nid": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "callee": "PluginHost", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L886"}, {"caller_nid": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "callee": "_StubRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L886"}, {"caller_nid": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "callee": "create_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L889"}, {"caller_nid": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L893"}, {"caller_nid": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L894"}, {"caller_nid": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L897"}, {"caller_nid": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "callee": "cancel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L901"}, {"caller_nid": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", "callee": "status", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L902"}, {"caller_nid": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L911"}, {"caller_nid": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L918"}, {"caller_nid": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L920"}, {"caller_nid": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", "callee": "__setattr__", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L923"}, {"caller_nid": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", "callee": "_cleanup", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L926"}, {"caller_nid": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L934"}, {"caller_nid": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L939"}, {"caller_nid": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L941"}, {"caller_nid": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L942"}, {"caller_nid": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", "callee": "_cleanup", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L944"}, {"caller_nid": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L945"}, {"caller_nid": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L954"}, {"caller_nid": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", "callee": "READMEDefaultField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L957"}, {"caller_nid": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L967"}, {"caller_nid": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L969"}, {"caller_nid": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L978"}, {"caller_nid": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L985"}, {"caller_nid": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L988"}, {"caller_nid": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L989"}, {"caller_nid": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L991"}, {"caller_nid": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L993"}, {"caller_nid": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L994"}, {"caller_nid": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L995"}, {"caller_nid": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L997"}, {"caller_nid": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", "callee": "status", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L998"}, {"caller_nid": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1005"}, {"caller_nid": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1009"}, {"caller_nid": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1013"}, {"caller_nid": "controller_test_creation_flow_test_format_error_with_non_validation_exception_returns_internal_error", "callee": "_format_error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1020"}, {"caller_nid": "controller_test_creation_flow_test_format_error_with_non_validation_exception_returns_internal_error", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1020"}, {"caller_nid": "controller_test_creation_flow_test_append_log_writes_log_line", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1028"}, {"caller_nid": "controller_test_creation_flow_test_append_log_writes_log_line", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1032"}, {"caller_nid": "controller_test_creation_flow_test_append_log_writes_log_line", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1036"}, {"caller_nid": "controller_test_creation_flow_test_append_log_writes_log_line", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1037"}, {"caller_nid": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1046"}, {"caller_nid": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "callee": "create_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1051"}, {"caller_nid": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "callee": "create_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1054"}, {"caller_nid": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "callee": "next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1058"}, {"caller_nid": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "callee": "glob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1058"}, {"caller_nid": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1059"}, {"caller_nid": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1059"}, {"caller_nid": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1069"}, {"caller_nid": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1074"}, {"caller_nid": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1076"}, {"caller_nid": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1077"}, {"caller_nid": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", "callee": "cancel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1080"}, {"caller_nid": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", "callee": "status", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1081"}, {"caller_nid": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1088"}, {"caller_nid": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1093"}, {"caller_nid": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1100"}, {"caller_nid": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1102"}, {"caller_nid": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", "callee": "resume", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1103"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1110"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1114"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", "callee": "create_task", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1121"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", "callee": "consumer", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1121"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1123"}, {"caller_nid": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", "callee": "put", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1125"}, {"caller_nid": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1136"}, {"caller_nid": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1137"}, {"caller_nid": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1148"}, {"caller_nid": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1151"}, {"caller_nid": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "callee": "create_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1162"}, {"caller_nid": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1163"}, {"caller_nid": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1164"}, {"caller_nid": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1165"}, {"caller_nid": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1167"}, {"caller_nid": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "callee": "status", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1168"}, {"caller_nid": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1170"}, {"caller_nid": "controller_test_creation_flow_test_required_field_ids_filters_non_dict_entries", "callee": "_required_field_ids", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1188"}, {"caller_nid": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1196"}, {"caller_nid": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", "callee": "create_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1202"}, {"caller_nid": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", "callee": "next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1206"}, {"caller_nid": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", "callee": "glob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1206"}, {"caller_nid": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1207"}, {"caller_nid": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py", "source_location": "L1207"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/2e3dd04d6967162c926138dea01b37f8239099adc9bfb0167b39db7351bfc734.json b/graphify-out/cache/ast/2e3dd04d6967162c926138dea01b37f8239099adc9bfb0167b39db7351bfc734.json new file mode 100644 index 0000000..b14c62f --- /dev/null +++ b/graphify-out/cache/ast/2e3dd04d6967162c926138dea01b37f8239099adc9bfb0167b39db7351bfc734.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_icon_py", "label": "icon.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L1"}, {"id": "tray_icon_default_icon_image", "label": "default_icon_image()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L39"}, {"id": "tray_icon_build_icon", "label": "build_icon()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L58"}, {"id": "tray_icon_import_pystray", "label": "_import_pystray()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L94"}, {"id": "tray_icon_safe_call", "label": "_safe_call()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L101"}, {"id": "tray_icon_rationale_1", "label": "pystray icon construction. Backend Spec \u00a74.3.2. The tray icon's menu has three", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L1"}, {"id": "tray_icon_rationale_40", "label": "Return a small PIL.Image used as the tray icon bitmap. Imported lazily so t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L40"}, {"id": "tray_icon_rationale_68", "label": "Build the pystray icon with the \u00a74.1 menu. ``status_provider`` is invoked e", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L68"}, {"id": "tray_icon_rationale_95", "label": "Lazy import so unit tests on headless hosts can mock pystray.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L95"}, {"id": "tray_icon_rationale_102", "label": "Invoke a menu callback; log + swallow exceptions. The pystray menu handler", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L102"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_icon_py", "target": "io", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_icon_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_icon_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_icon_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_icon_py", "target": "tray_icon_default_icon_image", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_icon_py", "target": "tray_icon_build_icon", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_icon_py", "target": "tray_icon_import_pystray", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L94", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_icon_py", "target": "tray_icon_safe_call", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L101", "weight": 1.0}, {"source": "tray_icon_build_icon", "target": "tray_icon_import_pystray", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L75", "weight": 1.0}, {"source": "tray_icon_build_icon", "target": "tray_icon_default_icon_image", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L76", "weight": 1.0}, {"source": "tray_icon_build_icon", "target": "tray_icon_safe_call", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L80", "weight": 1.0}, {"source": "tray_icon_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_icon_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_icon_rationale_40", "target": "tray_icon_default_icon_image", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L40", "weight": 1.0}, {"source": "tray_icon_rationale_68", "target": "tray_icon_build_icon", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L68", "weight": 1.0}, {"source": "tray_icon_rationale_95", "target": "tray_icon_import_pystray", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L95", "weight": 1.0}, {"source": "tray_icon_rationale_102", "target": "tray_icon_safe_call", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L102", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_icon_default_icon_image", "callee": "new", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L50"}, {"caller_nid": "tray_icon_default_icon_image", "callee": "Draw", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L51"}, {"caller_nid": "tray_icon_default_icon_image", "callee": "text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L52"}, {"caller_nid": "tray_icon_default_icon_image", "callee": "BytesIO", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L55"}, {"caller_nid": "tray_icon_build_icon", "callee": "MenuItem", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L78"}, {"caller_nid": "tray_icon_build_icon", "callee": "MenuItem", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L83"}, {"caller_nid": "tray_icon_build_icon", "callee": "status_provider", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L84"}, {"caller_nid": "tray_icon_build_icon", "callee": "MenuItem", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L88"}, {"caller_nid": "tray_icon_build_icon", "callee": "Menu", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L89"}, {"caller_nid": "tray_icon_build_icon", "callee": "Icon", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L91"}, {"caller_nid": "tray_icon_safe_call", "callee": "fn", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L110"}, {"caller_nid": "tray_icon_safe_call", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py", "source_location": "L112"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/2f465303dfa336d58d9baa9cc874c4d3a1283bad4bd7b24c4eff9f9784022945.json b/graphify-out/cache/ast/2f465303dfa336d58d9baa9cc874c4d3a1283bad4bd7b24c4eff9f9784022945.json new file mode 100644 index 0000000..ca40367 --- /dev/null +++ b/graphify-out/cache/ast/2f465303dfa336d58d9baa9cc874c4d3a1283bad4bd7b24c4eff9f9784022945.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "label": "test_filenames.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L1"}, {"id": "constants_test_filenames_test_cache_dir_name", "label": "test_cache_dir_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L12"}, {"id": "constants_test_filenames_test_creation_json_name", "label": "test_creation_json_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L17"}, {"id": "constants_test_filenames_test_readme_fields_json_name", "label": "test_readme_fields_json_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L22"}, {"id": "constants_test_filenames_test_equipment_json_name", "label": "test_equipment_json_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L27"}, {"id": "constants_test_filenames_test_sync_state_filename", "label": "test_sync_state_filename()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L32"}, {"id": "constants_test_filenames_test_test_runs_json_name", "label": "test_test_runs_json_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L37"}, {"id": "constants_test_filenames_test_answers_file_name", "label": "test_answers_file_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L42"}, {"id": "constants_test_filenames_test_log_file_template", "label": "test_log_file_template()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L47"}, {"id": "constants_test_filenames_test_log_file_template_formats", "label": "test_log_file_template_formats()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L52"}, {"id": "constants_test_filenames_test_readme_file_name", "label": "test_readme_file_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L58"}, {"id": "constants_test_filenames_test_copier_manifest_name", "label": "test_copier_manifest_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L63"}, {"id": "constants_test_filenames_test_plugin_manifest_name", "label": "test_plugin_manifest_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L68"}, {"id": "constants_test_filenames_test_server_state_file", "label": "test_server_state_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L73"}, {"id": "constants_test_filenames_test_lims_cache_db_name", "label": "test_lims_cache_db_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L78"}, {"id": "constants_test_filenames_test_sync_queue_db_name", "label": "test_sync_queue_db_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L83"}, {"id": "constants_test_filenames_test_central_log_file", "label": "test_central_log_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L88"}, {"id": "constants_test_filenames_test_secrets_file", "label": "test_secrets_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L93"}, {"id": "constants_test_filenames_test_filenames_re_exported_from_package", "label": "test_filenames_re_exported_from_package()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L98"}, {"id": "constants_test_filenames_rationale_1", "label": "Verify the canonical filename constants. These literals appear in directory lay", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_cache_dir_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_creation_json_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_readme_fields_json_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_equipment_json_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_sync_state_filename", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_test_runs_json_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_answers_file_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_log_file_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_log_file_template_formats", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_readme_file_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_copier_manifest_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_plugin_manifest_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L68", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_server_state_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L73", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_lims_cache_db_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L78", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_sync_queue_db_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_central_log_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L88", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_secrets_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "target": "constants_test_filenames_test_filenames_re_exported_from_package", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L98", "weight": 1.0}, {"source": "constants_test_filenames_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_constants_test_filenames_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "constants_test_filenames_test_log_file_template_formats", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py", "source_location": "L54"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/30ad648969ac428e4e02be0c8ba746e6d90ed236e08ef63bbc115e1ba608efb0.json b/graphify-out/cache/ast/30ad648969ac428e4e02be0c8ba746e6d90ed236e08ef63bbc115e1ba608efb0.json new file mode 100644 index 0000000..a921531 --- /dev/null +++ b/graphify-out/cache/ast/30ad648969ac428e4e02be0c8ba746e6d90ed236e08ef63bbc115e1ba608efb0.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_08_settings_py", "label": "test_flow_08_settings.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L1"}, {"id": "e2e_test_flow_08_settings_test_flow_08_settings", "label": "test_flow_08_settings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L30"}, {"id": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "label": "test_flow_08_lims_password_credential()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L58"}, {"id": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "label": "test_flow_08_lims_password_cancel_discards_edit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L91"}, {"id": "e2e_test_flow_08_settings_rationale_1", "label": "E2E flow 08: Settings dialog round-trip + persistence. Frontend Spec \u00a76.7 (sett", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L1"}, {"id": "e2e_test_flow_08_settings_rationale_59", "label": "The LIMS credential field's full lifecycle: set -> replace -> clear (\u00a77.4.1).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L59"}, {"id": "e2e_test_flow_08_settings_rationale_92", "label": "Cancelling the credential editor collapses the row without saving.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L92"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_08_settings_py", "target": "playwright_sync_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_08_settings_py", "target": "tests_e2e_page_objects_settings_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_08_settings_py", "target": "e2e_test_flow_08_settings_test_flow_08_settings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_08_settings_py", "target": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_08_settings_py", "target": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L91", "weight": 1.0}, {"source": "e2e_test_flow_08_settings_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_08_settings_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_test_flow_08_settings_rationale_59", "target": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L59", "weight": 1.0}, {"source": "e2e_test_flow_08_settings_rationale_92", "target": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L92", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "SettingsPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L31"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L32"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L33"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L35"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L39"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "nav", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L39"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L43"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L44"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L45"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "section", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L45"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L48"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L49"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L50"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L51"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L52"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L53"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L54"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_settings", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L55"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "SettingsPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L64"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L65"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L66"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L67"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "section", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L67"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L70"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L73"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L74"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L78"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L79"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "to_have_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L80"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "expect", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L80"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L85"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L86"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L87"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "to_have_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L88"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", "callee": "expect", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L88"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "callee": "SettingsPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L93"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L94"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L95"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L96"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "callee": "section", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L96"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L98"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L99"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L100"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L103"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L104"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "callee": "to_have_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L105"}, {"caller_nid": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", "callee": "expect", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py", "source_location": "L105"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/3118c9cd8e31e8d8156c75c3f77da481aa3931143591761f94e3d10d40538cd7.json b/graphify-out/cache/ast/3118c9cd8e31e8d8156c75c3f77da481aa3931143591761f94e3d10d40538cd7.json new file mode 100644 index 0000000..d7fe5b2 --- /dev/null +++ b/graphify-out/cache/ast/3118c9cd8e31e8d8156c75c3f77da481aa3931143591761f94e3d10d40538cd7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "label": "problems.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L1"}, {"id": "pages_problems_finding", "label": "Finding", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L39"}, {"id": "pages_problems_problemspagestate", "label": "ProblemsPageState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L54"}, {"id": "pages_problems_severity_chip_definitions", "label": "severity_chip_definitions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L70"}, {"id": "pages_problems_class_chip_definitions", "label": "class_chip_definitions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L79"}, {"id": "pages_problems_state_chip_definitions", "label": "state_chip_definitions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L88"}, {"id": "pages_problems_filter_findings", "label": "filter_findings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L105"}, {"id": "pages_problems_empty_state_text", "label": "empty_state_text()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L127"}, {"id": "pages_problems_validate_override_reason", "label": "validate_override_reason()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L144"}, {"id": "pages_problems_near_limit", "label": "near_limit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L159"}, {"id": "pages_problems_render_problems_page", "label": "render_problems_page()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L166"}, {"id": "pages_problems_rationale_1", "label": "Problems tab (Frontend Spec \u00a711). Filter chips (Severity, Class, State, Scope),", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L1"}, {"id": "pages_problems_rationale_40", "label": "One row in the Problems table.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L40"}, {"id": "pages_problems_rationale_55", "label": "Mutable filter state.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L55"}, {"id": "pages_problems_rationale_71", "label": "Severity chips per Frontend \u00a711.1.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L71"}, {"id": "pages_problems_rationale_80", "label": "One chip per problem class (Frontend \u00a711.1).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L80"}, {"id": "pages_problems_rationale_89", "label": "State chips (Frontend \u00a711.1).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L89"}, {"id": "pages_problems_rationale_109", "label": "Filter ``findings`` against the active chip / search state.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L109"}, {"id": "pages_problems_rationale_132", "label": "Compute the empty-state copy per Frontend \u00a711.4.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L132"}, {"id": "pages_problems_rationale_145", "label": "Validate an override reason per Frontend \u00a711.5. Returns ``(ok, error_messag", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L145"}, {"id": "pages_problems_rationale_160", "label": "Return ``True`` when the counter should turn warning-tier (last 10).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L160"}, {"id": "pages_problems_rationale_175", "label": "Render the Problems tab content. ``last_audit_at`` is the ISO timestamp of", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L175"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "exlab_wizard_ui_components", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "pages_problems_finding", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "pages_problems_problemspagestate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L54", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "pages_problems_severity_chip_definitions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L70", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "pages_problems_class_chip_definitions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L79", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "pages_problems_state_chip_definitions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L88", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "pages_problems_filter_findings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L105", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "pages_problems_empty_state_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L127", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "pages_problems_validate_override_reason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L144", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "pages_problems_near_limit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L159", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "target": "pages_problems_render_problems_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L166", "weight": 1.0}, {"source": "pages_problems_render_problems_page", "target": "pages_problems_problemspagestate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L183", "weight": 1.0}, {"source": "pages_problems_render_problems_page", "target": "pages_problems_filter_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L184", "weight": 1.0}, {"source": "pages_problems_render_problems_page", "target": "pages_problems_empty_state_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L188", "weight": 1.0}, {"source": "pages_problems_render_problems_page", "target": "pages_problems_severity_chip_definitions", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L190", "weight": 1.0}, {"source": "pages_problems_render_problems_page", "target": "pages_problems_class_chip_definitions", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L191", "weight": 1.0}, {"source": "pages_problems_render_problems_page", "target": "pages_problems_state_chip_definitions", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L192", "weight": 1.0}, {"source": "pages_problems_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_problems_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L1", "weight": 1.0}, {"source": "pages_problems_rationale_40", "target": "pages_problems_finding", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L40", "weight": 1.0}, {"source": "pages_problems_rationale_55", "target": "pages_problems_problemspagestate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L55", "weight": 1.0}, {"source": "pages_problems_rationale_71", "target": "pages_problems_severity_chip_definitions", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L71", "weight": 1.0}, {"source": "pages_problems_rationale_80", "target": "pages_problems_class_chip_definitions", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L80", "weight": 1.0}, {"source": "pages_problems_rationale_89", "target": "pages_problems_state_chip_definitions", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L89", "weight": 1.0}, {"source": "pages_problems_rationale_109", "target": "pages_problems_filter_findings", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L109", "weight": 1.0}, {"source": "pages_problems_rationale_132", "target": "pages_problems_empty_state_text", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L132", "weight": 1.0}, {"source": "pages_problems_rationale_145", "target": "pages_problems_validate_override_reason", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L145", "weight": 1.0}, {"source": "pages_problems_rationale_160", "target": "pages_problems_near_limit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L160", "weight": 1.0}, {"source": "pages_problems_rationale_175", "target": "pages_problems_render_problems_page", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L175", "weight": 1.0}], "raw_calls": [{"caller_nid": "pages_problems_severity_chip_definitions", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L74"}, {"caller_nid": "pages_problems_severity_chip_definitions", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L75"}, {"caller_nid": "pages_problems_class_chip_definitions", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L82"}, {"caller_nid": "pages_problems_class_chip_definitions", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L83"}, {"caller_nid": "pages_problems_state_chip_definitions", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L92"}, {"caller_nid": "pages_problems_state_chip_definitions", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L93"}, {"caller_nid": "pages_problems_state_chip_definitions", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L96"}, {"caller_nid": "pages_problems_state_chip_definitions", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L97"}, {"caller_nid": "pages_problems_filter_findings", "callee": "is_active", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L113"}, {"caller_nid": "pages_problems_filter_findings", "callee": "is_active", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L115"}, {"caller_nid": "pages_problems_filter_findings", "callee": "is_active", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L117"}, {"caller_nid": "pages_problems_filter_findings", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L121"}, {"caller_nid": "pages_problems_filter_findings", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L121"}, {"caller_nid": "pages_problems_filter_findings", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L123"}, {"caller_nid": "pages_problems_empty_state_text", "callee": "is_active", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L134"}, {"caller_nid": "pages_problems_validate_override_reason", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L151"}, {"caller_nid": "pages_problems_validate_override_reason", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L152"}, {"caller_nid": "pages_problems_validate_override_reason", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L154"}, {"caller_nid": "pages_problems_near_limit", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L162"}, {"caller_nid": "pages_problems_near_limit", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L163"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L187"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L202"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L202"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L202"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L202"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L205"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L205"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L205"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L206"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L206"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "filter_chips", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L213"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L217"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L217"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L217"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L218"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L218"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "filter_chips", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L225"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L229"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L229"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L229"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L230"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L230"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "filter_chips", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L237"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L243"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L243"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L243"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L247"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L250"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L250"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L250"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L250"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L260"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L260"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L263"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L263"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L268"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L268"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L268"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L277"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L277"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "on_override", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L279"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L282"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L282"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "on_revoke_override", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L284"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L309"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L309"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L309"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "_render_footer", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L326"}, {"caller_nid": "pages_problems_render_problems_page", "callee": "timer", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py", "source_location": "L329"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/31a4642a5fd0c209901fa28b4c7c8031434660f2dca51d784d9ea9b2206b82dd.json b/graphify-out/cache/ast/31a4642a5fd0c209901fa28b4c7c8031434660f2dca51d784d9ea9b2206b82dd.json new file mode 100644 index 0000000..82fdcd0 --- /dev/null +++ b/graphify-out/cache/ast/31a4642a5fd0c209901fa28b4c7c8031434660f2dca51d784d9ea9b2206b82dd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "label": "test_setup.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L1"}, {"id": "api_test_setup_ready_config", "label": "_ready_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L28"}, {"id": "api_test_setup_ready_config_without_lims", "label": "_ready_config_without_lims()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L56"}, {"id": "api_test_setup_test_compute_setup_state_returns_ready_for_complete_config", "label": "test_compute_setup_state_returns_ready_for_complete_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L81"}, {"id": "api_test_setup_test_compute_setup_state_no_config", "label": "test_compute_setup_state_no_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L88"}, {"id": "api_test_setup_test_is_creation_blocked_treats_lims_unreachable_as_soft", "label": "test_is_creation_blocked_treats_lims_unreachable_as_soft()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L93"}, {"id": "api_test_setup_test_compute_setup_state_returns_incomplete_no_nas_credential", "label": "test_compute_setup_state_returns_incomplete_no_nas_credential()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L103"}, {"id": "api_test_setup_test_get_setup_status_lists_missing_nas_credential_per_equipment", "label": "test_get_setup_status_lists_missing_nas_credential_per_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L109"}, {"id": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "label": "test_setup_state_gate_returns_503_in_incomplete_states()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L121"}, {"id": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", "label": "test_setup_state_gate_lims_unreachable_does_not_block()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L181"}, {"id": "api_test_setup_test_setup_state_gate_no_op_without_dependencies", "label": "test_setup_state_gate_no_op_without_dependencies()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L199"}, {"id": "api_test_setup_test_get_setup_status_ready", "label": "test_get_setup_status_ready()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L212"}, {"id": "api_test_setup_test_get_setup_status_incomplete_paths", "label": "test_get_setup_status_incomplete_paths()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L226"}, {"id": "api_test_setup_test_post_test_lims_invokes_probe", "label": "test_post_test_lims_invokes_probe()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L239"}, {"id": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", "label": "test_post_test_lims_probe_raises_returns_reason()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L251"}, {"id": "api_test_setup_test_post_test_lims_without_probe_reports_not_wired", "label": "test_post_test_lims_without_probe_reports_not_wired()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L266"}, {"id": "api_test_setup_test_post_test_equipment_requires_equipment_id", "label": "test_post_test_equipment_requires_equipment_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L274"}, {"id": "api_test_setup_test_post_test_equipment_with_explicit_equipment_id", "label": "test_post_test_equipment_with_explicit_equipment_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L288"}, {"id": "api_test_setup_test_post_test_equipment_unknown_id_returns_404", "label": "test_post_test_equipment_unknown_id_returns_404()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L306"}, {"id": "api_test_setup_test_post_autostart_calls_toggle", "label": "test_post_autostart_calls_toggle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L319"}, {"id": "api_test_setup_test_post_autostart_without_toggle_echoes_state", "label": "test_post_autostart_without_toggle_echoes_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L339"}, {"id": "api_test_setup_rationale_1", "label": "Unit tests for ``exlab_wizard.api.setup`` (gate + endpoints).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L1"}, {"id": "api_test_setup_rationale_57", "label": "``_ready_config`` minus the LIMS slot, for exercising the LIMS gate.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L57"}, {"id": "api_test_setup_rationale_104", "label": "Equipment with a password-requiring transport but no keyring entry gates.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L104"}, {"id": "api_test_setup_rationale_122", "label": "Each non-soft INCOMPLETE_* state returns a 503 with the right code.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L122"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "fastapi_testclient", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "exlab_wizard_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "exlab_wizard_api_setup", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_ready_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_ready_config_without_lims", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_compute_setup_state_returns_ready_for_complete_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_compute_setup_state_no_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L88", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_is_creation_blocked_treats_lims_unreachable_as_soft", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_compute_setup_state_returns_incomplete_no_nas_credential", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L103", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_get_setup_status_lists_missing_nas_credential_per_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L109", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L121", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L181", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_setup_state_gate_no_op_without_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L199", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_get_setup_status_ready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L212", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_get_setup_status_incomplete_paths", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L226", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_post_test_lims_invokes_probe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L239", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L251", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_post_test_lims_without_probe_reports_not_wired", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L266", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_post_test_equipment_requires_equipment_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L274", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_post_test_equipment_with_explicit_equipment_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L288", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_post_test_equipment_unknown_id_returns_404", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L306", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_post_autostart_calls_toggle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L319", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "target": "api_test_setup_test_post_autostart_without_toggle_echoes_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L339", "weight": 1.0}, {"source": "api_test_setup_test_compute_setup_state_returns_ready_for_complete_config", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L83", "weight": 1.0}, {"source": "api_test_setup_test_compute_setup_state_returns_incomplete_no_nas_credential", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L105", "weight": 1.0}, {"source": "api_test_setup_test_get_setup_status_lists_missing_nas_credential_per_equipment", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L110", "weight": 1.0}, {"source": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L128", "weight": 1.0}, {"source": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "target": "api_test_setup_ready_config_without_lims", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L152", "weight": 1.0}, {"source": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L182", "weight": 1.0}, {"source": "api_test_setup_test_get_setup_status_ready", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L214", "weight": 1.0}, {"source": "api_test_setup_test_post_test_lims_invokes_probe", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L243", "weight": 1.0}, {"source": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L256", "weight": 1.0}, {"source": "api_test_setup_test_post_test_lims_without_probe_reports_not_wired", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L267", "weight": 1.0}, {"source": "api_test_setup_test_post_test_equipment_requires_equipment_id", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L276", "weight": 1.0}, {"source": "api_test_setup_test_post_test_equipment_with_explicit_equipment_id", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L296", "weight": 1.0}, {"source": "api_test_setup_test_post_test_equipment_unknown_id_returns_404", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L308", "weight": 1.0}, {"source": "api_test_setup_test_post_autostart_calls_toggle", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L327", "weight": 1.0}, {"source": "api_test_setup_test_post_autostart_without_toggle_echoes_state", "target": "api_test_setup_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L340", "weight": 1.0}, {"source": "api_test_setup_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_api_test_setup_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L1", "weight": 1.0}, {"source": "api_test_setup_rationale_57", "target": "api_test_setup_ready_config_without_lims", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L57", "weight": 1.0}, {"source": "api_test_setup_rationale_104", "target": "api_test_setup_test_compute_setup_state_returns_incomplete_no_nas_credential", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L104", "weight": 1.0}, {"source": "api_test_setup_rationale_122", "target": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L122", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_test_setup_ready_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L31"}, {"caller_nid": "api_test_setup_ready_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L32"}, {"caller_nid": "api_test_setup_ready_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L38"}, {"caller_nid": "api_test_setup_ready_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L43"}, {"caller_nid": "api_test_setup_ready_config", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L51"}, {"caller_nid": "api_test_setup_ready_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L52"}, {"caller_nid": "api_test_setup_ready_config_without_lims", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L60"}, {"caller_nid": "api_test_setup_ready_config_without_lims", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L61"}, {"caller_nid": "api_test_setup_ready_config_without_lims", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L63"}, {"caller_nid": "api_test_setup_ready_config_without_lims", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L68"}, {"caller_nid": "api_test_setup_ready_config_without_lims", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L76"}, {"caller_nid": "api_test_setup_ready_config_without_lims", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L77"}, {"caller_nid": "api_test_setup_test_compute_setup_state_returns_ready_for_complete_config", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L82"}, {"caller_nid": "api_test_setup_test_compute_setup_state_returns_ready_for_complete_config", "callee": "compute_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L85"}, {"caller_nid": "api_test_setup_test_compute_setup_state_no_config", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L89"}, {"caller_nid": "api_test_setup_test_compute_setup_state_no_config", "callee": "compute_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L90"}, {"caller_nid": "api_test_setup_test_is_creation_blocked_treats_lims_unreachable_as_soft", "callee": "is_creation_blocked", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L94"}, {"caller_nid": "api_test_setup_test_is_creation_blocked_treats_lims_unreachable_as_soft", "callee": "is_creation_blocked", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L95"}, {"caller_nid": "api_test_setup_test_is_creation_blocked_treats_lims_unreachable_as_soft", "callee": "is_creation_blocked", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L96"}, {"caller_nid": "api_test_setup_test_is_creation_blocked_treats_lims_unreachable_as_soft", "callee": "is_creation_blocked", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L97"}, {"caller_nid": "api_test_setup_test_is_creation_blocked_treats_lims_unreachable_as_soft", "callee": "is_creation_blocked", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L98"}, {"caller_nid": "api_test_setup_test_is_creation_blocked_treats_lims_unreachable_as_soft", "callee": "is_creation_blocked", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L99"}, {"caller_nid": "api_test_setup_test_is_creation_blocked_treats_lims_unreachable_as_soft", "callee": "is_creation_blocked", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L100"}, {"caller_nid": "api_test_setup_test_compute_setup_state_returns_incomplete_no_nas_credential", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L105"}, {"caller_nid": "api_test_setup_test_compute_setup_state_returns_incomplete_no_nas_credential", "callee": "compute_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L106"}, {"caller_nid": "api_test_setup_test_get_setup_status_lists_missing_nas_credential_per_equipment", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L110"}, {"caller_nid": "api_test_setup_test_get_setup_status_lists_missing_nas_credential_per_equipment", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L111"}, {"caller_nid": "api_test_setup_test_get_setup_status_lists_missing_nas_credential_per_equipment", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L112"}, {"caller_nid": "api_test_setup_test_get_setup_status_lists_missing_nas_credential_per_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L113"}, {"caller_nid": "api_test_setup_test_get_setup_status_lists_missing_nas_credential_per_equipment", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L114"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "set[str]", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L132"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L133"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "set[str]", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L133"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L135"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L135"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "set[str]", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L136"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L140"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L141"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L142"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "set[str]", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L144"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "set[str]", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L148"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L158"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L158"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L159"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "APIRouter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L162"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L164"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L164"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "include_router", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L168"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L169"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L170"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L172"}, {"caller_nid": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L176"}, {"caller_nid": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L183"}, {"caller_nid": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L184"}, {"caller_nid": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", "callee": "APIRouter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L187"}, {"caller_nid": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L189"}, {"caller_nid": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L189"}, {"caller_nid": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", "callee": "include_router", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L193"}, {"caller_nid": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L194"}, {"caller_nid": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L195"}, {"caller_nid": "api_test_setup_test_setup_state_gate_no_op_without_dependencies", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L200"}, {"caller_nid": "api_test_setup_test_setup_state_gate_no_op_without_dependencies", "callee": "APIRouter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L201"}, {"caller_nid": "api_test_setup_test_setup_state_gate_no_op_without_dependencies", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L203"}, {"caller_nid": "api_test_setup_test_setup_state_gate_no_op_without_dependencies", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L203"}, {"caller_nid": "api_test_setup_test_setup_state_gate_no_op_without_dependencies", "callee": "include_router", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L207"}, {"caller_nid": "api_test_setup_test_setup_state_gate_no_op_without_dependencies", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L208"}, {"caller_nid": "api_test_setup_test_setup_state_gate_no_op_without_dependencies", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L209"}, {"caller_nid": "api_test_setup_test_get_setup_status_ready", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L213"}, {"caller_nid": "api_test_setup_test_get_setup_status_ready", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L216"}, {"caller_nid": "api_test_setup_test_get_setup_status_ready", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L217"}, {"caller_nid": "api_test_setup_test_get_setup_status_ready", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L218"}, {"caller_nid": "api_test_setup_test_get_setup_status_ready", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L220"}, {"caller_nid": "api_test_setup_test_get_setup_status_incomplete_paths", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L227"}, {"caller_nid": "api_test_setup_test_get_setup_status_incomplete_paths", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L227"}, {"caller_nid": "api_test_setup_test_get_setup_status_incomplete_paths", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L228"}, {"caller_nid": "api_test_setup_test_get_setup_status_incomplete_paths", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L229"}, {"caller_nid": "api_test_setup_test_get_setup_status_incomplete_paths", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L230"}, {"caller_nid": "api_test_setup_test_get_setup_status_incomplete_paths", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L231"}, {"caller_nid": "api_test_setup_test_post_test_lims_invokes_probe", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L243"}, {"caller_nid": "api_test_setup_test_post_test_lims_invokes_probe", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L244"}, {"caller_nid": "api_test_setup_test_post_test_lims_invokes_probe", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L245"}, {"caller_nid": "api_test_setup_test_post_test_lims_invokes_probe", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L246"}, {"caller_nid": "api_test_setup_test_post_test_lims_invokes_probe", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L248"}, {"caller_nid": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L255"}, {"caller_nid": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L258"}, {"caller_nid": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L259"}, {"caller_nid": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L260"}, {"caller_nid": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L262"}, {"caller_nid": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L263"}, {"caller_nid": "api_test_setup_test_post_test_lims_without_probe_reports_not_wired", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L267"}, {"caller_nid": "api_test_setup_test_post_test_lims_without_probe_reports_not_wired", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L268"}, {"caller_nid": "api_test_setup_test_post_test_lims_without_probe_reports_not_wired", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L269"}, {"caller_nid": "api_test_setup_test_post_test_lims_without_probe_reports_not_wired", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L270"}, {"caller_nid": "api_test_setup_test_post_test_lims_without_probe_reports_not_wired", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L271"}, {"caller_nid": "api_test_setup_test_post_test_equipment_requires_equipment_id", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L275"}, {"caller_nid": "api_test_setup_test_post_test_equipment_requires_equipment_id", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L280"}, {"caller_nid": "api_test_setup_test_post_test_equipment_requires_equipment_id", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L281"}, {"caller_nid": "api_test_setup_test_post_test_equipment_requires_equipment_id", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L284"}, {"caller_nid": "api_test_setup_test_post_test_equipment_with_explicit_equipment_id", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L295"}, {"caller_nid": "api_test_setup_test_post_test_equipment_with_explicit_equipment_id", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L298"}, {"caller_nid": "api_test_setup_test_post_test_equipment_with_explicit_equipment_id", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L299"}, {"caller_nid": "api_test_setup_test_post_test_equipment_with_explicit_equipment_id", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L301"}, {"caller_nid": "api_test_setup_test_post_test_equipment_with_explicit_equipment_id", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L302"}, {"caller_nid": "api_test_setup_test_post_test_equipment_unknown_id_returns_404", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L307"}, {"caller_nid": "api_test_setup_test_post_test_equipment_unknown_id_returns_404", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L312"}, {"caller_nid": "api_test_setup_test_post_test_equipment_unknown_id_returns_404", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L313"}, {"caller_nid": "api_test_setup_test_post_test_equipment_unknown_id_returns_404", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L314"}, {"caller_nid": "api_test_setup_test_post_test_equipment_unknown_id_returns_404", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L316"}, {"caller_nid": "api_test_setup_test_post_autostart_calls_toggle", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L326"}, {"caller_nid": "api_test_setup_test_post_autostart_calls_toggle", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L329"}, {"caller_nid": "api_test_setup_test_post_autostart_calls_toggle", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L330"}, {"caller_nid": "api_test_setup_test_post_autostart_calls_toggle", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L331"}, {"caller_nid": "api_test_setup_test_post_autostart_calls_toggle", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L333"}, {"caller_nid": "api_test_setup_test_post_autostart_without_toggle_echoes_state", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L340"}, {"caller_nid": "api_test_setup_test_post_autostart_without_toggle_echoes_state", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L341"}, {"caller_nid": "api_test_setup_test_post_autostart_without_toggle_echoes_state", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L342"}, {"caller_nid": "api_test_setup_test_post_autostart_without_toggle_echoes_state", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L343"}, {"caller_nid": "api_test_setup_test_post_autostart_without_toggle_echoes_state", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py", "source_location": "L344"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/35301956c851763c58d05fc3fd1a1b49fd245a7f0d50b1c733a87bfa89f53fd4.json b/graphify-out/cache/ast/35301956c851763c58d05fc3fd1a1b49fd245a7f0d50b1c733a87bfa89f53fd4.json new file mode 100644 index 0000000..d59845e --- /dev/null +++ b/graphify-out/cache/ast/35301956c851763c58d05fc3fd1a1b49fd245a7f0d50b1c733a87bfa89f53fd4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "label": "test_registry.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L1"}, {"id": "plugins_test_registry_write_plugin", "label": "_write_plugin()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L35"}, {"id": "plugins_test_registry_test_loads_a_valid_plugin", "label": "test_loads_a_valid_plugin()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L89"}, {"id": "plugins_test_registry_test_loaded_record_carries_isolation_block", "label": "test_loaded_record_carries_isolation_block()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L106"}, {"id": "plugins_test_registry_test_required_and_optional_variables_round_trip", "label": "test_required_and_optional_variables_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L118"}, {"id": "plugins_test_registry_test_rejects_plugin_directory_without_manifest", "label": "test_rejects_plugin_directory_without_manifest()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L140"}, {"id": "plugins_test_registry_test_rejects_plugin_with_malformed_yaml", "label": "test_rejects_plugin_with_malformed_yaml()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L152"}, {"id": "plugins_test_registry_test_rejects_plugin_missing_required_field", "label": "test_rejects_plugin_missing_required_field()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L164"}, {"id": "plugins_test_registry_test_rejects_plugin_with_unsupported_api_version", "label": "test_rejects_plugin_with_unsupported_api_version()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L174"}, {"id": "plugins_test_registry_test_rejects_plugin_with_invalid_name", "label": "test_rejects_plugin_with_invalid_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L184"}, {"id": "plugins_test_registry_test_rejects_plugin_with_timeout_above_cap", "label": "test_rejects_plugin_with_timeout_above_cap()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L202"}, {"id": "plugins_test_registry_test_rejects_plugin_with_memory_above_cap", "label": "test_rejects_plugin_with_memory_above_cap()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L211"}, {"id": "plugins_test_registry_test_rejects_supported_extensions_when_not_a_list_of_strings", "label": "test_rejects_supported_extensions_when_not_a_list_of_strings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L220"}, {"id": "plugins_test_registry_test_rejects_network_plugin_when_allow_network_false", "label": "test_rejects_network_plugin_when_allow_network_false()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L238"}, {"id": "plugins_test_registry_test_loads_network_plugin_when_allow_network_true", "label": "test_loads_network_plugin_when_allow_network_true()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L247"}, {"id": "plugins_test_registry_test_lab_dir_wins_on_name_collision", "label": "test_lab_dir_wins_on_name_collision()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L263"}, {"id": "plugins_test_registry_test_bundled_only_when_no_lab_collision", "label": "test_bundled_only_when_no_lab_collision()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L278"}, {"id": "plugins_test_registry_test_lab_only_plugins_are_loaded_too", "label": "test_lab_only_plugins_are_loaded_too()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L292"}, {"id": "plugins_test_registry_test_reload_replaces_previous_state", "label": "test_reload_replaces_previous_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L311"}, {"id": "plugins_test_registry_test_reload_returns_registry_report_dataclass", "label": "test_reload_returns_registry_report_dataclass()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L326"}, {"id": "plugins_test_registry_test_get_returns_none_for_unknown_plugin", "label": "test_get_returns_none_for_unknown_plugin()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L340"}, {"id": "plugins_test_registry_test_list_all_returns_records_sorted_by_name", "label": "test_list_all_returns_records_sorted_by_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L346"}, {"id": "plugins_test_registry_test_list_all_returns_record_instances", "label": "test_list_all_returns_record_instances()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L357"}, {"id": "plugins_test_registry_test_candidates_for_matches_by_extension", "label": "test_candidates_for_matches_by_extension()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L372"}, {"id": "plugins_test_registry_test_candidates_for_excludes_plugins_with_zero_matches", "label": "test_candidates_for_excludes_plugins_with_zero_matches()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L392"}, {"id": "plugins_test_registry_test_candidates_for_returns_pluginplan_instances", "label": "test_candidates_for_returns_pluginplan_instances()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L402"}, {"id": "plugins_test_registry_test_candidates_for_supports_multi_extension_plugin", "label": "test_candidates_for_supports_multi_extension_plugin()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L414"}, {"id": "plugins_test_registry_test_registry_with_no_dirs_loads_nothing", "label": "test_registry_with_no_dirs_loads_nothing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L430"}, {"id": "plugins_test_registry_test_registry_skips_files_in_root", "label": "test_registry_skips_files_in_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L438"}, {"id": "plugins_test_registry_test_registry_handles_nonexistent_dir", "label": "test_registry_handles_nonexistent_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L450"}, {"id": "plugins_test_registry_test_registry_accepts_isolation_at_cap_boundary", "label": "test_registry_accepts_isolation_at_cap_boundary()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L465"}, {"id": "plugins_test_registry_test_pluginplan_dataclass_shape", "label": "test_pluginplan_dataclass_shape()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L473"}, {"id": "plugins_test_registry_test_pluginrecord_dataclass_shape", "label": "test_pluginrecord_dataclass_shape()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L484"}, {"id": "plugins_test_registry_rationale_1", "label": "Tests for ``exlab_wizard.plugins.registry`` -- manifest-driven discovery. Pin t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L1"}, {"id": "plugins_test_registry_rationale_50", "label": "Write a minimal plugin scaffold and return the plugin directory.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L50"}, {"id": "plugins_test_registry_rationale_439", "label": "A non-directory entry inside the plugin root must be ignored, not crashed on.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L439"}, {"id": "plugins_test_registry_rationale_451", "label": "A configured plugin root that doesn't exist is treated as empty (no crash).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L451"}, {"id": "plugins_test_registry_rationale_474", "label": "PluginPlan exposes ``record`` and ``matching_files`` as named attributes.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L474"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "exlab_wizard_plugins_registry", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_write_plugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_loads_a_valid_plugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L89", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_loaded_record_carries_isolation_block", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L106", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_required_and_optional_variables_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L118", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_rejects_plugin_directory_without_manifest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L140", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_rejects_plugin_with_malformed_yaml", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L152", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_rejects_plugin_missing_required_field", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L164", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_rejects_plugin_with_unsupported_api_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L174", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_rejects_plugin_with_invalid_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L184", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_rejects_plugin_with_timeout_above_cap", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L202", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_rejects_plugin_with_memory_above_cap", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L211", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_rejects_supported_extensions_when_not_a_list_of_strings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L220", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_rejects_network_plugin_when_allow_network_false", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L238", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_loads_network_plugin_when_allow_network_true", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L247", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_lab_dir_wins_on_name_collision", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L263", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_bundled_only_when_no_lab_collision", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L278", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_lab_only_plugins_are_loaded_too", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L292", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_reload_replaces_previous_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L311", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_reload_returns_registry_report_dataclass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L326", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_get_returns_none_for_unknown_plugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L340", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_list_all_returns_records_sorted_by_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L346", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_list_all_returns_record_instances", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L357", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_candidates_for_matches_by_extension", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L372", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_candidates_for_excludes_plugins_with_zero_matches", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L392", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_candidates_for_returns_pluginplan_instances", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L402", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_candidates_for_supports_multi_extension_plugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L414", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_registry_with_no_dirs_loads_nothing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L430", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_registry_skips_files_in_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L438", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_registry_handles_nonexistent_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L450", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_registry_accepts_isolation_at_cap_boundary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L465", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_pluginplan_dataclass_shape", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L473", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "target": "plugins_test_registry_test_pluginrecord_dataclass_shape", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L484", "weight": 1.0}, {"source": "plugins_test_registry_test_loads_a_valid_plugin", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L91", "weight": 1.0}, {"source": "plugins_test_registry_test_loaded_record_carries_isolation_block", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L108", "weight": 1.0}, {"source": "plugins_test_registry_test_required_and_optional_variables_round_trip", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L120", "weight": 1.0}, {"source": "plugins_test_registry_test_rejects_plugin_missing_required_field", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L166", "weight": 1.0}, {"source": "plugins_test_registry_test_rejects_plugin_with_unsupported_api_version", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L176", "weight": 1.0}, {"source": "plugins_test_registry_test_rejects_plugin_with_timeout_above_cap", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L204", "weight": 1.0}, {"source": "plugins_test_registry_test_rejects_plugin_with_memory_above_cap", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L213", "weight": 1.0}, {"source": "plugins_test_registry_test_rejects_network_plugin_when_allow_network_false", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L240", "weight": 1.0}, {"source": "plugins_test_registry_test_loads_network_plugin_when_allow_network_true", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L249", "weight": 1.0}, {"source": "plugins_test_registry_test_lab_dir_wins_on_name_collision", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L266", "weight": 1.0}, {"source": "plugins_test_registry_test_bundled_only_when_no_lab_collision", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L282", "weight": 1.0}, {"source": "plugins_test_registry_test_lab_only_plugins_are_loaded_too", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L296", "weight": 1.0}, {"source": "plugins_test_registry_test_reload_replaces_previous_state", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L313", "weight": 1.0}, {"source": "plugins_test_registry_test_reload_returns_registry_report_dataclass", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L328", "weight": 1.0}, {"source": "plugins_test_registry_test_list_all_returns_records_sorted_by_name", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L348", "weight": 1.0}, {"source": "plugins_test_registry_test_list_all_returns_record_instances", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L359", "weight": 1.0}, {"source": "plugins_test_registry_test_candidates_for_matches_by_extension", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L374", "weight": 1.0}, {"source": "plugins_test_registry_test_candidates_for_excludes_plugins_with_zero_matches", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L394", "weight": 1.0}, {"source": "plugins_test_registry_test_candidates_for_returns_pluginplan_instances", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L404", "weight": 1.0}, {"source": "plugins_test_registry_test_candidates_for_supports_multi_extension_plugin", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L416", "weight": 1.0}, {"source": "plugins_test_registry_test_registry_skips_files_in_root", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L443", "weight": 1.0}, {"source": "plugins_test_registry_test_registry_accepts_isolation_at_cap_boundary", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L467", "weight": 1.0}, {"source": "plugins_test_registry_test_pluginplan_dataclass_shape", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L476", "weight": 1.0}, {"source": "plugins_test_registry_test_pluginrecord_dataclass_shape", "target": "plugins_test_registry_write_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L486", "weight": 1.0}, {"source": "plugins_test_registry_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_plugins_test_registry_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L1", "weight": 1.0}, {"source": "plugins_test_registry_rationale_50", "target": "plugins_test_registry_write_plugin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L50", "weight": 1.0}, {"source": "plugins_test_registry_rationale_439", "target": "plugins_test_registry_test_registry_skips_files_in_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L439", "weight": 1.0}, {"source": "plugins_test_registry_rationale_451", "target": "plugins_test_registry_test_registry_handles_nonexistent_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L451", "weight": 1.0}, {"source": "plugins_test_registry_rationale_474", "target": "plugins_test_registry_test_pluginplan_dataclass_shape", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L474", "weight": 1.0}], "raw_calls": [{"caller_nid": "plugins_test_registry_write_plugin", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L52"}, {"caller_nid": "plugins_test_registry_write_plugin", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L62"}, {"caller_nid": "plugins_test_registry_write_plugin", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L64"}, {"caller_nid": "plugins_test_registry_write_plugin", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L65"}, {"caller_nid": "plugins_test_registry_write_plugin", "callee": "pop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L68"}, {"caller_nid": "plugins_test_registry_write_plugin", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L70"}, {"caller_nid": "plugins_test_registry_write_plugin", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L70"}, {"caller_nid": "plugins_test_registry_write_plugin", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L80"}, {"caller_nid": "plugins_test_registry_test_loads_a_valid_plugin", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L92"}, {"caller_nid": "plugins_test_registry_test_loads_a_valid_plugin", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L94"}, {"caller_nid": "plugins_test_registry_test_loads_a_valid_plugin", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L98"}, {"caller_nid": "plugins_test_registry_test_loads_a_valid_plugin", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L100"}, {"caller_nid": "plugins_test_registry_test_loaded_record_carries_isolation_block", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L109"}, {"caller_nid": "plugins_test_registry_test_loaded_record_carries_isolation_block", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L110"}, {"caller_nid": "plugins_test_registry_test_loaded_record_carries_isolation_block", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L112"}, {"caller_nid": "plugins_test_registry_test_required_and_optional_variables_round_trip", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L126"}, {"caller_nid": "plugins_test_registry_test_required_and_optional_variables_round_trip", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L127"}, {"caller_nid": "plugins_test_registry_test_required_and_optional_variables_round_trip", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L129"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_directory_without_manifest", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L143"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_directory_without_manifest", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L144"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_directory_without_manifest", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L146"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_directory_without_manifest", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L149"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_malformed_yaml", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L155"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_malformed_yaml", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L156"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_malformed_yaml", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L157"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_malformed_yaml", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L159"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_malformed_yaml", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L161"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_missing_required_field", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L167"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_missing_required_field", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L169"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_missing_required_field", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L171"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_unsupported_api_version", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L177"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_unsupported_api_version", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L179"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_unsupported_api_version", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L181"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_invalid_name", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L187"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_invalid_name", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L189"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_invalid_name", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L196"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_invalid_name", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L197"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_timeout_above_cap", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L205"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_timeout_above_cap", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L206"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_timeout_above_cap", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L208"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_memory_above_cap", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L214"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_memory_above_cap", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L215"}, {"caller_nid": "plugins_test_registry_test_rejects_plugin_with_memory_above_cap", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L217"}, {"caller_nid": "plugins_test_registry_test_rejects_supported_extensions_when_not_a_list_of_strings", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L223"}, {"caller_nid": "plugins_test_registry_test_rejects_supported_extensions_when_not_a_list_of_strings", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L224"}, {"caller_nid": "plugins_test_registry_test_rejects_supported_extensions_when_not_a_list_of_strings", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L228"}, {"caller_nid": "plugins_test_registry_test_rejects_supported_extensions_when_not_a_list_of_strings", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L229"}, {"caller_nid": "plugins_test_registry_test_rejects_network_plugin_when_allow_network_false", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L241"}, {"caller_nid": "plugins_test_registry_test_rejects_network_plugin_when_allow_network_false", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L242"}, {"caller_nid": "plugins_test_registry_test_rejects_network_plugin_when_allow_network_false", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L244"}, {"caller_nid": "plugins_test_registry_test_rejects_network_plugin_when_allow_network_false", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L244"}, {"caller_nid": "plugins_test_registry_test_loads_network_plugin_when_allow_network_true", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L250"}, {"caller_nid": "plugins_test_registry_test_loads_network_plugin_when_allow_network_true", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L251"}, {"caller_nid": "plugins_test_registry_test_loads_network_plugin_when_allow_network_true", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L253"}, {"caller_nid": "plugins_test_registry_test_lab_dir_wins_on_name_collision", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L269"}, {"caller_nid": "plugins_test_registry_test_lab_dir_wins_on_name_collision", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L270"}, {"caller_nid": "plugins_test_registry_test_lab_dir_wins_on_name_collision", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L272"}, {"caller_nid": "plugins_test_registry_test_bundled_only_when_no_lab_collision", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L281"}, {"caller_nid": "plugins_test_registry_test_bundled_only_when_no_lab_collision", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L284"}, {"caller_nid": "plugins_test_registry_test_bundled_only_when_no_lab_collision", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L285"}, {"caller_nid": "plugins_test_registry_test_bundled_only_when_no_lab_collision", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L287"}, {"caller_nid": "plugins_test_registry_test_lab_only_plugins_are_loaded_too", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L294"}, {"caller_nid": "plugins_test_registry_test_lab_only_plugins_are_loaded_too", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L298"}, {"caller_nid": "plugins_test_registry_test_lab_only_plugins_are_loaded_too", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L299"}, {"caller_nid": "plugins_test_registry_test_lab_only_plugins_are_loaded_too", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L301"}, {"caller_nid": "plugins_test_registry_test_reload_replaces_previous_state", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L314"}, {"caller_nid": "plugins_test_registry_test_reload_replaces_previous_state", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L315"}, {"caller_nid": "plugins_test_registry_test_reload_replaces_previous_state", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L316"}, {"caller_nid": "plugins_test_registry_test_reload_replaces_previous_state", "callee": "rmtree", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L321"}, {"caller_nid": "plugins_test_registry_test_reload_replaces_previous_state", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L322"}, {"caller_nid": "plugins_test_registry_test_reload_replaces_previous_state", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L323"}, {"caller_nid": "plugins_test_registry_test_reload_returns_registry_report_dataclass", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L329"}, {"caller_nid": "plugins_test_registry_test_reload_returns_registry_report_dataclass", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L330"}, {"caller_nid": "plugins_test_registry_test_reload_returns_registry_report_dataclass", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L331"}, {"caller_nid": "plugins_test_registry_test_get_returns_none_for_unknown_plugin", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L341"}, {"caller_nid": "plugins_test_registry_test_get_returns_none_for_unknown_plugin", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L342"}, {"caller_nid": "plugins_test_registry_test_get_returns_none_for_unknown_plugin", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L343"}, {"caller_nid": "plugins_test_registry_test_list_all_returns_records_sorted_by_name", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L351"}, {"caller_nid": "plugins_test_registry_test_list_all_returns_records_sorted_by_name", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L352"}, {"caller_nid": "plugins_test_registry_test_list_all_returns_records_sorted_by_name", "callee": "list_all", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L353"}, {"caller_nid": "plugins_test_registry_test_list_all_returns_record_instances", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L360"}, {"caller_nid": "plugins_test_registry_test_list_all_returns_record_instances", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L361"}, {"caller_nid": "plugins_test_registry_test_list_all_returns_record_instances", "callee": "list_all", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L362"}, {"caller_nid": "plugins_test_registry_test_list_all_returns_record_instances", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L363"}, {"caller_nid": "plugins_test_registry_test_list_all_returns_record_instances", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L364"}, {"caller_nid": "plugins_test_registry_test_candidates_for_matches_by_extension", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L376"}, {"caller_nid": "plugins_test_registry_test_candidates_for_matches_by_extension", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L377"}, {"caller_nid": "plugins_test_registry_test_candidates_for_matches_by_extension", "callee": "candidates_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L384"}, {"caller_nid": "plugins_test_registry_test_candidates_for_excludes_plugins_with_zero_matches", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L395"}, {"caller_nid": "plugins_test_registry_test_candidates_for_excludes_plugins_with_zero_matches", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L396"}, {"caller_nid": "plugins_test_registry_test_candidates_for_excludes_plugins_with_zero_matches", "callee": "candidates_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L398"}, {"caller_nid": "plugins_test_registry_test_candidates_for_returns_pluginplan_instances", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L405"}, {"caller_nid": "plugins_test_registry_test_candidates_for_returns_pluginplan_instances", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L406"}, {"caller_nid": "plugins_test_registry_test_candidates_for_returns_pluginplan_instances", "callee": "candidates_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L408"}, {"caller_nid": "plugins_test_registry_test_candidates_for_returns_pluginplan_instances", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L409"}, {"caller_nid": "plugins_test_registry_test_candidates_for_returns_pluginplan_instances", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L410"}, {"caller_nid": "plugins_test_registry_test_candidates_for_supports_multi_extension_plugin", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L417"}, {"caller_nid": "plugins_test_registry_test_candidates_for_supports_multi_extension_plugin", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L418"}, {"caller_nid": "plugins_test_registry_test_candidates_for_supports_multi_extension_plugin", "callee": "candidates_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L420"}, {"caller_nid": "plugins_test_registry_test_candidates_for_supports_multi_extension_plugin", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L421"}, {"caller_nid": "plugins_test_registry_test_registry_with_no_dirs_loads_nothing", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L431"}, {"caller_nid": "plugins_test_registry_test_registry_with_no_dirs_loads_nothing", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L432"}, {"caller_nid": "plugins_test_registry_test_registry_with_no_dirs_loads_nothing", "callee": "list_all", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L435"}, {"caller_nid": "plugins_test_registry_test_registry_skips_files_in_root", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L441"}, {"caller_nid": "plugins_test_registry_test_registry_skips_files_in_root", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L442"}, {"caller_nid": "plugins_test_registry_test_registry_skips_files_in_root", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L445"}, {"caller_nid": "plugins_test_registry_test_registry_skips_files_in_root", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L446"}, {"caller_nid": "plugins_test_registry_test_registry_handles_nonexistent_dir", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L452"}, {"caller_nid": "plugins_test_registry_test_registry_handles_nonexistent_dir", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L453"}, {"caller_nid": "plugins_test_registry_test_registry_accepts_isolation_at_cap_boundary", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L468"}, {"caller_nid": "plugins_test_registry_test_registry_accepts_isolation_at_cap_boundary", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L469"}, {"caller_nid": "plugins_test_registry_test_pluginplan_dataclass_shape", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L477"}, {"caller_nid": "plugins_test_registry_test_pluginplan_dataclass_shape", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L478"}, {"caller_nid": "plugins_test_registry_test_pluginplan_dataclass_shape", "callee": "candidates_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L479"}, {"caller_nid": "plugins_test_registry_test_pluginplan_dataclass_shape", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L480"}, {"caller_nid": "plugins_test_registry_test_pluginplan_dataclass_shape", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L481"}, {"caller_nid": "plugins_test_registry_test_pluginrecord_dataclass_shape", "callee": "PluginRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L487"}, {"caller_nid": "plugins_test_registry_test_pluginrecord_dataclass_shape", "callee": "reload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L488"}, {"caller_nid": "plugins_test_registry_test_pluginrecord_dataclass_shape", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L489"}, {"caller_nid": "plugins_test_registry_test_pluginrecord_dataclass_shape", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L491"}, {"caller_nid": "plugins_test_registry_test_pluginrecord_dataclass_shape", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py", "source_location": "L493"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/365a086a18e2abc992efb3108ae1ed74da5b6e3e45faaa8bf87c0ca53546fd0c.json b/graphify-out/cache/ast/365a086a18e2abc992efb3108ae1ed74da5b6e3e45faaa8bf87c0ca53546fd0c.json new file mode 100644 index 0000000..9303c80 --- /dev/null +++ b/graphify-out/cache/ast/365a086a18e2abc992efb3108ae1ed74da5b6e3e45faaa8bf87c0ca53546fd0c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "label": "test_nas_sync.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L1"}, {"id": "integration_test_nas_sync_stubkeyring", "label": "_StubKeyring", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L53"}, {"id": "integration_test_nas_sync_stubkeyring_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L62"}, {"id": "integration_test_nas_sync_stubkeyring_get_password", "label": ".get_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L65"}, {"id": "integration_test_nas_sync_stub_binaries_on_path", "label": "stub_binaries_on_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L71"}, {"id": "integration_test_nas_sync_build_config", "label": "_build_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L84"}, {"id": "integration_test_nas_sync_make_creation", "label": "_make_creation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L111"}, {"id": "integration_test_nas_sync_populate_run", "label": "_populate_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L130"}, {"id": "integration_test_nas_sync_wait_for_state", "label": "_wait_for_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L141"}, {"id": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "label": "test_full_happy_path_via_stub_rclone()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L161"}, {"id": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "label": "test_pre_sync_gate_blocks_run_with_placeholder_in_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L235"}, {"id": "integration_test_nas_sync_test_auth_error_terminates_failed", "label": "test_auth_error_terminates_failed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L274"}, {"id": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "label": "test_force_verify_returns_ok_after_compute()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L305"}, {"id": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "label": "test_remote_hash_mismatch_triggers_retry()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L349"}, {"id": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "label": "test_remote_hashsum_probe_failure_does_not_skip_verify()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L422"}, {"id": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "label": "test_remote_hash_mismatch_terminal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L489"}, {"id": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "label": "test_poller_per_file_enqueue_drives_to_synced_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L547"}, {"id": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "label": "test_poller_to_cleanup_honors_keep_local_and_stamps_cleared()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L621"}, {"id": "integration_test_nas_sync_rationale_1", "label": "End-to-end integration tests for the NAS sync subsystem (Phase 10). These tests", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L1"}, {"id": "integration_test_nas_sync_rationale_54", "label": "Minimal keyring stub returning a fixed password for every username. The new", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L54"}, {"id": "integration_test_nas_sync_rationale_72", "label": "Install the rclone stub on PATH for the test.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L72"}, {"id": "integration_test_nas_sync_rationale_149", "label": "Poll ``queue.get_by_id`` until ``state`` is in ``targets`` or timeout.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L149"}, {"id": "integration_test_nas_sync_rationale_166", "label": "Enqueue -> RUNNING -> AWAITING_VERIFY -> VERIFIED -> CLEANED. Uses the Pyth", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L166"}, {"id": "integration_test_nas_sync_rationale_240", "label": "A run path with ```` is gated; sync_status -> blocked_by_validation.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L240"}, {"id": "integration_test_nas_sync_rationale_279", "label": "The stub returns ``auth_error`` -> queue row terminates FAILED.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L279"}, {"id": "integration_test_nas_sync_rationale_310", "label": "``force_verify`` runs a manifest pass against the local subtree.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L310"}, {"id": "integration_test_nas_sync_rationale_354", "label": "A first ``rclone check`` mismatch retries the transport phase once. The inj", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L354"}, {"id": "integration_test_nas_sync_rationale_427", "label": "A ``rclone check`` TransportError must NOT promote the job to VERIFIED. The", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L427"}, {"id": "integration_test_nas_sync_rationale_494", "label": "A second remote-hash mismatch terminates the job at FAILED.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L494"}, {"id": "integration_test_nas_sync_rationale_552", "label": "Poller sweep -> per-file enqueue -> drive -> verify -> sync_state.json recor", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L552"}, {"id": "integration_test_nas_sync_rationale_626", "label": "Full Phase 5 path: poller sweep -> enqueue -> verify -> SYNCED rollup -> cle", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L626"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "shutil", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "stat", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "exlab_wizard_cache_creation_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "exlab_wizard_sync_nas_client", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "exlab_wizard_sync_queue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "exlab_wizard_validator_engine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_stubkeyring", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L53", "weight": 1.0}, {"source": "integration_test_nas_sync_stubkeyring", "target": "integration_test_nas_sync_stubkeyring_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L62", "weight": 1.0}, {"source": "integration_test_nas_sync_stubkeyring", "target": "integration_test_nas_sync_stubkeyring_get_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L65", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_stub_binaries_on_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L71", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_build_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L84", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_make_creation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L111", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_populate_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L130", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_wait_for_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L141", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L161", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L235", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_test_auth_error_terminates_failed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L274", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L305", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L349", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L422", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L489", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L547", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "target": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L621", "weight": 1.0}, {"source": "integration_test_nas_sync_populate_run", "target": "integration_test_nas_sync_make_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L137", "weight": 1.0}, {"source": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "target": "integration_test_nas_sync_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L193", "weight": 1.0}, {"source": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "target": "integration_test_nas_sync_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L194", "weight": 1.0}, {"source": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "target": "integration_test_nas_sync_stubkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L202", "weight": 1.0}, {"source": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "target": "integration_test_nas_sync_wait_for_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L212", "weight": 1.0}, {"source": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "target": "integration_test_nas_sync_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L245", "weight": 1.0}, {"source": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "target": "integration_test_nas_sync_make_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L253", "weight": 1.0}, {"source": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "target": "integration_test_nas_sync_stubkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L261", "weight": 1.0}, {"source": "integration_test_nas_sync_test_auth_error_terminates_failed", "target": "integration_test_nas_sync_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L284", "weight": 1.0}, {"source": "integration_test_nas_sync_test_auth_error_terminates_failed", "target": "integration_test_nas_sync_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L285", "weight": 1.0}, {"source": "integration_test_nas_sync_test_auth_error_terminates_failed", "target": "integration_test_nas_sync_stubkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L293", "weight": 1.0}, {"source": "integration_test_nas_sync_test_auth_error_terminates_failed", "target": "integration_test_nas_sync_wait_for_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L299", "weight": 1.0}, {"source": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "target": "integration_test_nas_sync_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L313", "weight": 1.0}, {"source": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "target": "integration_test_nas_sync_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L314", "weight": 1.0}, {"source": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "target": "integration_test_nas_sync_stubkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L322", "weight": 1.0}, {"source": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "target": "integration_test_nas_sync_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L370", "weight": 1.0}, {"source": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "target": "integration_test_nas_sync_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L371", "weight": 1.0}, {"source": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "target": "integration_test_nas_sync_stubkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L393", "weight": 1.0}, {"source": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "target": "integration_test_nas_sync_wait_for_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L402", "weight": 1.0}, {"source": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "target": "integration_test_nas_sync_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L442", "weight": 1.0}, {"source": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "target": "integration_test_nas_sync_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L443", "weight": 1.0}, {"source": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "target": "integration_test_nas_sync_stubkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L459", "weight": 1.0}, {"source": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "target": "integration_test_nas_sync_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L501", "weight": 1.0}, {"source": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "target": "integration_test_nas_sync_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L502", "weight": 1.0}, {"source": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "target": "integration_test_nas_sync_stubkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L527", "weight": 1.0}, {"source": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "target": "integration_test_nas_sync_wait_for_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L534", "weight": 1.0}, {"source": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "target": "integration_test_nas_sync_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L569", "weight": 1.0}, {"source": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "target": "integration_test_nas_sync_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L570", "weight": 1.0}, {"source": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "target": "integration_test_nas_sync_stubkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L579", "weight": 1.0}, {"source": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "target": "integration_test_nas_sync_wait_for_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L600", "weight": 1.0}, {"source": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "target": "integration_test_nas_sync_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L648", "weight": 1.0}, {"source": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "target": "integration_test_nas_sync_make_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L655", "weight": 1.0}, {"source": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "target": "integration_test_nas_sync_stubkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L667", "weight": 1.0}, {"source": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "target": "integration_test_nas_sync_wait_for_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L688", "weight": 1.0}, {"source": "integration_test_nas_sync_rationale_1", "target": "users_alex_projects_exlabwizard_tests_integration_test_nas_sync_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L1", "weight": 1.0}, {"source": "integration_test_nas_sync_rationale_54", "target": "integration_test_nas_sync_stubkeyring", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L54", "weight": 1.0}, {"source": "integration_test_nas_sync_rationale_72", "target": "integration_test_nas_sync_stub_binaries_on_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L72", "weight": 1.0}, {"source": "integration_test_nas_sync_rationale_149", "target": "integration_test_nas_sync_wait_for_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L149", "weight": 1.0}, {"source": "integration_test_nas_sync_rationale_166", "target": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L166", "weight": 1.0}, {"source": "integration_test_nas_sync_rationale_240", "target": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L240", "weight": 1.0}, {"source": "integration_test_nas_sync_rationale_279", "target": "integration_test_nas_sync_test_auth_error_terminates_failed", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L279", "weight": 1.0}, {"source": "integration_test_nas_sync_rationale_310", "target": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L310", "weight": 1.0}, {"source": "integration_test_nas_sync_rationale_354", "target": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L354", "weight": 1.0}, {"source": "integration_test_nas_sync_rationale_427", "target": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L427", "weight": 1.0}, {"source": "integration_test_nas_sync_rationale_494", "target": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L494", "weight": 1.0}, {"source": "integration_test_nas_sync_rationale_552", "target": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L552", "weight": 1.0}, {"source": "integration_test_nas_sync_rationale_626", "target": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L626", "weight": 1.0}], "raw_calls": [{"caller_nid": "integration_test_nas_sync_stub_binaries_on_path", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L74"}, {"caller_nid": "integration_test_nas_sync_stub_binaries_on_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L75"}, {"caller_nid": "integration_test_nas_sync_stub_binaries_on_path", "callee": "copy", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L77"}, {"caller_nid": "integration_test_nas_sync_stub_binaries_on_path", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L78"}, {"caller_nid": "integration_test_nas_sync_stub_binaries_on_path", "callee": "chmod", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L79"}, {"caller_nid": "integration_test_nas_sync_stub_binaries_on_path", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L80"}, {"caller_nid": "integration_test_nas_sync_build_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L85"}, {"caller_nid": "integration_test_nas_sync_build_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L86"}, {"caller_nid": "integration_test_nas_sync_build_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L86"}, {"caller_nid": "integration_test_nas_sync_build_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L88"}, {"caller_nid": "integration_test_nas_sync_build_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L91"}, {"caller_nid": "integration_test_nas_sync_build_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L93"}, {"caller_nid": "integration_test_nas_sync_build_config", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L98"}, {"caller_nid": "integration_test_nas_sync_build_config", "callee": "NASCleanupConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L102"}, {"caller_nid": "integration_test_nas_sync_make_creation", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L112"}, {"caller_nid": "integration_test_nas_sync_make_creation", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L118"}, {"caller_nid": "integration_test_nas_sync_make_creation", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L119"}, {"caller_nid": "integration_test_nas_sync_make_creation", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L126"}, {"caller_nid": "integration_test_nas_sync_make_creation", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L126"}, {"caller_nid": "integration_test_nas_sync_populate_run", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L132"}, {"caller_nid": "integration_test_nas_sync_populate_run", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L133"}, {"caller_nid": "integration_test_nas_sync_populate_run", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L135"}, {"caller_nid": "integration_test_nas_sync_populate_run", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L137"}, {"caller_nid": "integration_test_nas_sync_populate_run", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L137"}, {"caller_nid": "integration_test_nas_sync_wait_for_state", "callee": "queue_get", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L152"}, {"caller_nid": "integration_test_nas_sync_wait_for_state", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L155"}, {"caller_nid": "integration_test_nas_sync_wait_for_state", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L158"}, {"caller_nid": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L184"}, {"caller_nid": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L186"}, {"caller_nid": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L187"}, {"caller_nid": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L187"}, {"caller_nid": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L191"}, {"caller_nid": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L195"}, {"caller_nid": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L197"}, {"caller_nid": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L200"}, {"caller_nid": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L205"}, {"caller_nid": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L207"}, {"caller_nid": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L229"}, {"caller_nid": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L229"}, {"caller_nid": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L232"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L242"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L243"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L248"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L249"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L251"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L253"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L253"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L255"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L256"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L259"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L264"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L266"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L268"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L268"}, {"caller_nid": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L271"}, {"caller_nid": "integration_test_nas_sync_test_auth_error_terminates_failed", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L281"}, {"caller_nid": "integration_test_nas_sync_test_auth_error_terminates_failed", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L282"}, {"caller_nid": "integration_test_nas_sync_test_auth_error_terminates_failed", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L286"}, {"caller_nid": "integration_test_nas_sync_test_auth_error_terminates_failed", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L288"}, {"caller_nid": "integration_test_nas_sync_test_auth_error_terminates_failed", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L291"}, {"caller_nid": "integration_test_nas_sync_test_auth_error_terminates_failed", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L296"}, {"caller_nid": "integration_test_nas_sync_test_auth_error_terminates_failed", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L298"}, {"caller_nid": "integration_test_nas_sync_test_auth_error_terminates_failed", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L302"}, {"caller_nid": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L312"}, {"caller_nid": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L316"}, {"caller_nid": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L317"}, {"caller_nid": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L320"}, {"caller_nid": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L324"}, {"caller_nid": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L329"}, {"caller_nid": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L330"}, {"caller_nid": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L333"}, {"caller_nid": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "callee": "force_verify", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L335"}, {"caller_nid": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L339"}, {"caller_nid": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L341"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L365"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L367"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L368"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L368"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L372"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L388"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L391"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L397"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L399"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L419"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L437"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L439"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L440"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L440"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L444"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L454"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L457"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L463"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L465"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L473"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L474"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L479"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L484"}, {"caller_nid": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L486"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L496"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L498"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L499"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L499"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L503"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L522"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L525"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L531"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L533"}, {"caller_nid": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L544"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L564"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L566"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L567"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L567"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L571"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L572"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L574"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L577"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L583"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "QuiescenceSyncPoller", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L584"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L592"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L593"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L613"}, {"caller_nid": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L618"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L641"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L643"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L644"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L644"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L650"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L651"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L652"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L654"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L655"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L655"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L657"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L658"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "set_keep_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L660"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L662"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L665"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L671"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "QuiescenceSyncPoller", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L672"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L680"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L681"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L695"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L696"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L698"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L701"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "rollup_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L703"}, {"caller_nid": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py", "source_location": "L709"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/36a6b851124aa1147d77e46aefce22b81882034cb13ba9d6927b06d17772d650.json b/graphify-out/cache/ast/36a6b851124aa1147d77e46aefce22b81882034cb13ba9d6927b06d17772d650.json new file mode 100644 index 0000000..dd08b3f --- /dev/null +++ b/graphify-out/cache/ast/36a6b851124aa1147d77e46aefce22b81882034cb13ba9d6927b06d17772d650.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_15_distribution_md", "label": "15_Distribution.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L1"}, {"id": "design_spec_sections_15_distribution_15_distribution_and_installation", "label": "15. Distribution and Installation", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L1"}, {"id": "design_spec_sections_15_distribution_15_1_build_pipeline_pyinstaller", "label": "15.1 Build Pipeline (PyInstaller)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L7"}, {"id": "design_spec_sections_15_distribution_15_2_code_signing_posture", "label": "15.2 Code Signing Posture", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L49"}, {"id": "design_spec_sections_15_distribution_15_2_1_offline_machine_specifics", "label": "15.2.1 Offline-machine specifics", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L61"}, {"id": "design_spec_sections_15_distribution_15_3_launcher_behavior", "label": "15.3 Launcher Behavior", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L76"}, {"id": "design_spec_sections_15_distribution_15_3_1_exlab_wizard_tray_long_lived_autostart_target", "label": "15.3.1 `ExLab-Wizard-Tray` (long-lived, autostart target)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L80"}, {"id": "design_spec_sections_15_distribution_15_3_2_exlab_wizard_window_on_demand", "label": "15.3.2 `ExLab-Wizard-Window` (on-demand)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L93"}, {"id": "design_spec_sections_15_distribution_15_3_3_exlab_wizard_cli_alias_desktop_launcher_target", "label": "15.3.3 `ExLab-Wizard` (CLI alias / desktop-launcher target)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L103"}, {"id": "design_spec_sections_15_distribution_15_3_4_linux_fallback_no_system_tray", "label": "15.3.4 Linux fallback (no system tray)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L114"}, {"id": "design_spec_sections_15_distribution_15_4_bundled_starter_content", "label": "15.4 Bundled Starter Content", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L118"}, {"id": "design_spec_sections_15_distribution_15_5_bundled_vs_external_binaries", "label": "15.5 Bundled vs External Binaries", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L127"}, {"id": "design_spec_sections_15_distribution_15_6_versioning_and_release_artifacts", "label": "15.6 Versioning and Release Artifacts", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L141"}, {"id": "design_spec_sections_15_distribution_15_7_autostart_registration", "label": "15.7 Autostart Registration", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L148"}, {"id": "design_spec_sections_15_distribution_15_7_1_per_platform_registration", "label": "15.7.1 Per-platform registration", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L152"}, {"id": "design_spec_sections_15_distribution_15_7_2_upgrade_and_uninstall", "label": "15.7.2 Upgrade and uninstall", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L163"}, {"id": "design_spec_sections_15_distribution_15_7_3_os_notifications", "label": "15.7.3 OS notifications", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L169"}, {"id": "design_spec_sections_15_distribution_15_7_4_window_only_fallback_linux_without_tray_support", "label": "15.7.4 Window-only fallback (Linux without tray support)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L178"}, {"id": "design_spec_sections_15_distribution_15_8_open_questions", "label": "15.8 Open Questions", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L189"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_15_distribution_md", "target": "design_spec_sections_15_distribution_15_distribution_and_installation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L1", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_distribution_and_installation", "target": "design_spec_sections_15_distribution_15_1_build_pipeline_pyinstaller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L7", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_distribution_and_installation", "target": "design_spec_sections_15_distribution_15_2_code_signing_posture", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L49", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_2_code_signing_posture", "target": "design_spec_sections_15_distribution_15_2_1_offline_machine_specifics", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L61", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_distribution_and_installation", "target": "design_spec_sections_15_distribution_15_3_launcher_behavior", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L76", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_3_launcher_behavior", "target": "design_spec_sections_15_distribution_15_3_1_exlab_wizard_tray_long_lived_autostart_target", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L80", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_3_launcher_behavior", "target": "design_spec_sections_15_distribution_15_3_2_exlab_wizard_window_on_demand", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L93", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_3_launcher_behavior", "target": "design_spec_sections_15_distribution_15_3_3_exlab_wizard_cli_alias_desktop_launcher_target", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L103", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_3_launcher_behavior", "target": "design_spec_sections_15_distribution_15_3_4_linux_fallback_no_system_tray", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L114", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_distribution_and_installation", "target": "design_spec_sections_15_distribution_15_4_bundled_starter_content", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L118", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_distribution_and_installation", "target": "design_spec_sections_15_distribution_15_5_bundled_vs_external_binaries", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L127", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_distribution_and_installation", "target": "design_spec_sections_15_distribution_15_6_versioning_and_release_artifacts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L141", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_distribution_and_installation", "target": "design_spec_sections_15_distribution_15_7_autostart_registration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L148", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_7_autostart_registration", "target": "design_spec_sections_15_distribution_15_7_1_per_platform_registration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L152", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_7_autostart_registration", "target": "design_spec_sections_15_distribution_15_7_2_upgrade_and_uninstall", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L163", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_7_autostart_registration", "target": "design_spec_sections_15_distribution_15_7_3_os_notifications", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L169", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_7_autostart_registration", "target": "design_spec_sections_15_distribution_15_7_4_window_only_fallback_linux_without_tray_support", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L178", "weight": 1.0}, {"source": "design_spec_sections_15_distribution_15_distribution_and_installation", "target": "design_spec_sections_15_distribution_15_8_open_questions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md", "source_location": "L189", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/36c2ad26931208926aa26154f786f7c4a57fdc71eded33f8285a7236bee95d42.json b/graphify-out/cache/ast/36c2ad26931208926aa26154f786f7c4a57fdc71eded33f8285a7236bee95d42.json new file mode 100644 index 0000000..9e2e5ca --- /dev/null +++ b/graphify-out/cache/ast/36c2ad26931208926aa26154f786f7c4a57fdc71eded33f8285a7236bee95d42.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "label": "_prod_server.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L1"}, {"id": "e2e_prod_server_free_port", "label": "free_port()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L29"}, {"id": "e2e_prod_server_prod_app_env", "label": "prod_app_env()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L36"}, {"id": "e2e_prod_server_resolve_config_path", "label": "resolve_config_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L60"}, {"id": "e2e_prod_server_prodserver", "label": "ProdServer", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L75"}, {"id": "e2e_prod_server_prodserver_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L84"}, {"id": "e2e_prod_server_config_path", "label": "config_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L94"}, {"id": "e2e_prod_server_prodserver_start", "label": ".start()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L98"}, {"id": "e2e_prod_server_prodserver_stop", "label": ".stop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L132"}, {"id": "e2e_prod_server_prodserver_restart", "label": ".restart()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L144"}, {"id": "e2e_prod_server_rationale_1", "label": "Reusable spawn/restart harness for the *production* wizard app. The e2e lifecyc", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L1"}, {"id": "e2e_prod_server_rationale_30", "label": "Return a free TCP port on 127.0.0.1.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L30"}, {"id": "e2e_prod_server_rationale_37", "label": "Build a hermetic environment for a spawned production-app process. Every OS", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L37"}, {"id": "e2e_prod_server_rationale_61", "label": "Where the spawned production app writes ``config.yaml``. Computed by callin", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L61"}, {"id": "e2e_prod_server_rationale_76", "label": "A spawnable / restartable production-app uvicorn process. ``home`` is the r", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L76"}, {"id": "e2e_prod_server_rationale_95", "label": "Where the wizard writes ``config.yaml`` under the redirected HOME.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L95"}, {"id": "e2e_prod_server_rationale_99", "label": "Spawn uvicorn and block until ``/api/v1/health`` answers 200. Returns `", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L99"}, {"id": "e2e_prod_server_rationale_133", "label": "Terminate the uvicorn process. Idempotent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L133"}, {"id": "e2e_prod_server_rationale_145", "label": "Stop and re-spawn the process with the same HOME / port.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L145"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "socket", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "unittest_mock", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "contextlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "httpx", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "e2e_prod_server_free_port", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "e2e_prod_server_prod_app_env", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "e2e_prod_server_resolve_config_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "e2e_prod_server_prodserver", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L75", "weight": 1.0}, {"source": "e2e_prod_server_prodserver", "target": "e2e_prod_server_prodserver_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L84", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "target": "e2e_prod_server_config_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L94", "weight": 1.0}, {"source": "e2e_prod_server_prodserver", "target": "e2e_prod_server_prodserver_start", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L98", "weight": 1.0}, {"source": "e2e_prod_server_prodserver", "target": "e2e_prod_server_prodserver_stop", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L132", "weight": 1.0}, {"source": "e2e_prod_server_prodserver", "target": "e2e_prod_server_prodserver_restart", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L144", "weight": 1.0}, {"source": "e2e_prod_server_resolve_config_path", "target": "e2e_prod_server_prod_app_env", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L71", "weight": 1.0}, {"source": "e2e_prod_server_prodserver_init", "target": "e2e_prod_server_free_port", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L86", "weight": 1.0}, {"source": "e2e_prod_server_prodserver_init", "target": "e2e_prod_server_prod_app_env", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L89", "weight": 1.0}, {"source": "e2e_prod_server_config_path", "target": "e2e_prod_server_resolve_config_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L96", "weight": 1.0}, {"source": "e2e_prod_server_prodserver_start", "target": "e2e_prod_server_prodserver_stop", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L129", "weight": 1.0}, {"source": "e2e_prod_server_prodserver_restart", "target": "e2e_prod_server_prodserver_stop", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L146", "weight": 1.0}, {"source": "e2e_prod_server_prodserver_restart", "target": "e2e_prod_server_prodserver_start", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L147", "weight": 1.0}, {"source": "e2e_prod_server_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_prod_server_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_prod_server_rationale_30", "target": "e2e_prod_server_free_port", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L30", "weight": 1.0}, {"source": "e2e_prod_server_rationale_37", "target": "e2e_prod_server_prod_app_env", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L37", "weight": 1.0}, {"source": "e2e_prod_server_rationale_61", "target": "e2e_prod_server_resolve_config_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L61", "weight": 1.0}, {"source": "e2e_prod_server_rationale_76", "target": "e2e_prod_server_prodserver", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L76", "weight": 1.0}, {"source": "e2e_prod_server_rationale_95", "target": "e2e_prod_server_prodserver_config_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L95", "weight": 1.0}, {"source": "e2e_prod_server_rationale_99", "target": "e2e_prod_server_prodserver_start", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L99", "weight": 1.0}, {"source": "e2e_prod_server_rationale_133", "target": "e2e_prod_server_prodserver_stop", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L133", "weight": 1.0}, {"source": "e2e_prod_server_rationale_145", "target": "e2e_prod_server_prodserver_restart", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L145", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_prod_server_free_port", "callee": "closing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L31"}, {"caller_nid": "e2e_prod_server_free_port", "callee": "socket", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L31"}, {"caller_nid": "e2e_prod_server_free_port", "callee": "bind", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L32"}, {"caller_nid": "e2e_prod_server_free_port", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L33"}, {"caller_nid": "e2e_prod_server_free_port", "callee": "getsockname", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L33"}, {"caller_nid": "e2e_prod_server_prod_app_env", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L45"}, {"caller_nid": "e2e_prod_server_prod_app_env", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L45"}, {"caller_nid": "e2e_prod_server_prod_app_env", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L48"}, {"caller_nid": "e2e_prod_server_prod_app_env", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L49"}, {"caller_nid": "e2e_prod_server_prod_app_env", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L50"}, {"caller_nid": "e2e_prod_server_prod_app_env", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L51"}, {"caller_nid": "e2e_prod_server_prod_app_env", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L52"}, {"caller_nid": "e2e_prod_server_prod_app_env", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L53"}, {"caller_nid": "e2e_prod_server_prod_app_env", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L54"}, {"caller_nid": "e2e_prod_server_prod_app_env", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L55"}, {"caller_nid": "e2e_prod_server_prod_app_env", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L56"}, {"caller_nid": "e2e_prod_server_prod_app_env", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L56"}, {"caller_nid": "e2e_prod_server_resolve_config_path", "callee": "dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L71"}, {"caller_nid": "e2e_prod_server_resolve_config_path", "callee": "os_config_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L72"}, {"caller_nid": "e2e_prod_server_prodserver_init", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L91"}, {"caller_nid": "e2e_prod_server_prodserver_start", "callee": "Popen", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L104"}, {"caller_nid": "e2e_prod_server_prodserver_start", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L114"}, {"caller_nid": "e2e_prod_server_prodserver_start", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L120"}, {"caller_nid": "e2e_prod_server_prodserver_start", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L121"}, {"caller_nid": "e2e_prod_server_prodserver_start", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L123"}, {"caller_nid": "e2e_prod_server_prodserver_start", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L128"}, {"caller_nid": "e2e_prod_server_prodserver_stop", "callee": "terminate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L136"}, {"caller_nid": "e2e_prod_server_prodserver_stop", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L138"}, {"caller_nid": "e2e_prod_server_prodserver_stop", "callee": "kill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L140"}, {"caller_nid": "e2e_prod_server_prodserver_stop", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py", "source_location": "L141"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/37668756496e5993e4e4e8b099508f4bcca4b494387440b7c48da4ac7e71a21f.json b/graphify-out/cache/ast/37668756496e5993e4e4e8b099508f4bcca4b494387440b7c48da4ac7e71a21f.json new file mode 100644 index 0000000..0c9a4d0 --- /dev/null +++ b/graphify-out/cache/ast/37668756496e5993e4e4e8b099508f4bcca4b494387440b7c48da4ac7e71a21f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_12_quit_coordinator_py", "label": "test_flow_12_quit_coordinator.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_12_quit_coordinator.py", "source_location": "L1"}, {"id": "e2e_test_flow_12_quit_coordinator_test_flow_12_quit_coordinator", "label": "test_flow_12_quit_coordinator()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_12_quit_coordinator.py", "source_location": "L27"}, {"id": "e2e_test_flow_12_quit_coordinator_rationale_1", "label": "E2E flow 12: Quit coordinator (drain in-flight sessions). Frontend Spec \u00a76.11 (", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_12_quit_coordinator.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_12_quit_coordinator_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_12_quit_coordinator.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_12_quit_coordinator_py", "target": "e2e_test_flow_12_quit_coordinator_test_flow_12_quit_coordinator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_12_quit_coordinator.py", "source_location": "L27", "weight": 1.0}, {"source": "e2e_test_flow_12_quit_coordinator_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_12_quit_coordinator_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_12_quit_coordinator.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/3bcc4ff44b960ea9c26430266be3845c93992464b77548db90b282c74e2c28d1.json b/graphify-out/cache/ast/3bcc4ff44b960ea9c26430266be3845c93992464b77548db90b282c74e2c28d1.json new file mode 100644 index 0000000..56aa3cc --- /dev/null +++ b/graphify-out/cache/ast/3bcc4ff44b960ea9c26430266be3845c93992464b77548db90b282c74e2c28d1.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_03_experimental_run_py", "label": "test_flow_03_experimental_run.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L1"}, {"id": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "label": "test_flow_03_experimental_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L15"}, {"id": "e2e_test_flow_03_experimental_run_rationale_1", "label": "E2E flow 03: Experimental-run wizard end-to-end. Frontend Spec \u00a76.4 (run wizard", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_03_experimental_run_py", "target": "tests_e2e_page_objects_wizard_run_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_03_experimental_run_py", "target": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L15", "weight": 1.0}, {"source": "e2e_test_flow_03_experimental_run_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_03_experimental_run_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "callee": "WizardRunPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L16"}, {"caller_nid": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L17"}, {"caller_nid": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L18"}, {"caller_nid": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L20"}, {"caller_nid": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L22"}, {"caller_nid": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L23"}, {"caller_nid": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L32"}, {"caller_nid": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "callee": "step", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L32"}, {"caller_nid": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L33"}, {"caller_nid": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L33"}, {"caller_nid": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L37"}, {"caller_nid": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L37"}, {"caller_nid": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py", "source_location": "L40"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/3c79e1deedac0c26c30d8fb11950b069b5b47ca785522e6913d515121248aeb6.json b/graphify-out/cache/ast/3c79e1deedac0c26c30d8fb11950b069b5b47ca785522e6913d515121248aeb6.json new file mode 100644 index 0000000..f9f07a3 --- /dev/null +++ b/graphify-out/cache/ast/3c79e1deedac0c26c30d8fb11950b069b5b47ca785522e6913d515121248aeb6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_context_py", "label": "context.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L1"}, {"id": "logging_context_set_run_context", "label": "set_run_context()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L68"}, {"id": "logging_context_get_run_context", "label": "get_run_context()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L114"}, {"id": "logging_context_clear_run_context", "label": "clear_run_context()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L124"}, {"id": "logging_context_rationale_1", "label": "Per-task structured-tag context vars for the logging system. Backend Spec \u00a716.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L1"}, {"id": "logging_context_rationale_76", "label": "Push the supplied context vars on entry and reset them on exit. Vars whose", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L76"}, {"id": "logging_context_rationale_115", "label": "Return a snapshot of the active context as a plain ``dict``. Used by the fo", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L115"}, {"id": "logging_context_rationale_125", "label": "Reset every context var to ``None``. Provided for test fixtures that want t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L125"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_context_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_context_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_context_py", "target": "contextvars", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_context_py", "target": "logging_context_set_run_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L68", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_context_py", "target": "logging_context_get_run_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L114", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_context_py", "target": "logging_context_clear_run_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L124", "weight": 1.0}, {"source": "logging_context_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_context_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L1", "weight": 1.0}, {"source": "logging_context_rationale_76", "target": "logging_context_set_run_context", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L76", "weight": 1.0}, {"source": "logging_context_rationale_115", "target": "logging_context_get_run_context", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L115", "weight": 1.0}, {"source": "logging_context_rationale_125", "target": "logging_context_clear_run_context", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L125", "weight": 1.0}], "raw_calls": [{"caller_nid": "logging_context_set_run_context", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L106"}, {"caller_nid": "logging_context_set_run_context", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L106"}, {"caller_nid": "logging_context_set_run_context", "callee": "reversed", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L110"}, {"caller_nid": "logging_context_set_run_context", "callee": "reset", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L111"}, {"caller_nid": "logging_context_get_run_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L121"}, {"caller_nid": "logging_context_clear_run_context", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py", "source_location": "L133"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/3dd6e5c296575597ad98f244cdd0814f54c1f74b07b61602e3532cec57d542a5.json b/graphify-out/cache/ast/3dd6e5c296575597ad98f244cdd0814f54c1f74b07b61602e3532cec57d542a5.json new file mode 100644 index 0000000..9395ae7 --- /dev/null +++ b/graphify-out/cache/ast/3dd6e5c296575597ad98f244cdd0814f54c1f74b07b61602e3532cec57d542a5.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_plugin_guide_ipc_envelope_md", "label": "ipc_envelope.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L1"}, {"id": "plugin_guide_ipc_envelope_ipc_envelope", "label": "IPC Envelope", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L1"}, {"id": "plugin_guide_ipc_envelope_stdin_host_to_worker", "label": "Stdin (host to worker)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L12"}, {"id": "plugin_guide_ipc_envelope_codeblock_1", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L16"}, {"id": "plugin_guide_ipc_envelope_stdout_worker_to_host", "label": "Stdout (worker to host)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L31"}, {"id": "plugin_guide_ipc_envelope_codeblock_2", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L35"}, {"id": "plugin_guide_ipc_envelope_stderr_structured_log_channel", "label": "Stderr (structured log channel)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L54"}, {"id": "plugin_guide_ipc_envelope_exit_codes", "label": "Exit codes", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L61"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_plugin_guide_ipc_envelope_md", "target": "plugin_guide_ipc_envelope_ipc_envelope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L1", "weight": 1.0}, {"source": "plugin_guide_ipc_envelope_ipc_envelope", "target": "plugin_guide_ipc_envelope_stdin_host_to_worker", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L12", "weight": 1.0}, {"source": "plugin_guide_ipc_envelope_stdin_host_to_worker", "target": "plugin_guide_ipc_envelope_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L16", "weight": 1.0}, {"source": "plugin_guide_ipc_envelope_ipc_envelope", "target": "plugin_guide_ipc_envelope_stdout_worker_to_host", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L31", "weight": 1.0}, {"source": "plugin_guide_ipc_envelope_stdout_worker_to_host", "target": "plugin_guide_ipc_envelope_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L35", "weight": 1.0}, {"source": "plugin_guide_ipc_envelope_ipc_envelope", "target": "plugin_guide_ipc_envelope_stderr_structured_log_channel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L54", "weight": 1.0}, {"source": "plugin_guide_ipc_envelope_ipc_envelope", "target": "plugin_guide_ipc_envelope_exit_codes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md", "source_location": "L61", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/3dfc647b6f5ddc53ae6dc116a53d777c0bb04f37142b164bb57c0726d59a59c5.json b/graphify-out/cache/ast/3dfc647b6f5ddc53ae6dc116a53d777c0bb04f37142b164bb57c0726d59a59c5.json new file mode 100644 index 0000000..7160a1e --- /dev/null +++ b/graphify-out/cache/ast/3dfc647b6f5ddc53ae6dc116a53d777c0bb04f37142b164bb57c0726d59a59c5.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_lims_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/4057566f4922fd594460a51f02878459cdba2f2c978cf76fef663bd60dbc9c1d.json b/graphify-out/cache/ast/4057566f4922fd594460a51f02878459cdba2f2c978cf76fef663bd60dbc9c1d.json new file mode 100644 index 0000000..d381a0b --- /dev/null +++ b/graphify-out/cache/ast/4057566f4922fd594460a51f02878459cdba2f2c978cf76fef663bd60dbc9c1d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "label": "wizard_equipment_page.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L1"}, {"id": "page_objects_wizard_equipment_page_wizardequipmentpage", "label": "WizardEquipmentPage", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L8"}, {"id": "page_objects_wizard_equipment_page_wizardequipmentpage_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L9"}, {"id": "page_objects_wizard_equipment_page_step_identity", "label": "step_identity()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L14"}, {"id": "page_objects_wizard_equipment_page_equipment_id", "label": "equipment_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L18"}, {"id": "page_objects_wizard_equipment_page_label", "label": "label()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L22"}, {"id": "page_objects_wizard_equipment_page_step_paths", "label": "step_paths()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L26"}, {"id": "page_objects_wizard_equipment_page_local_root", "label": "local_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L31"}, {"id": "page_objects_wizard_equipment_page_nas_root", "label": "nas_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L35"}, {"id": "page_objects_wizard_equipment_page_sync_mode", "label": "sync_mode()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L40"}, {"id": "page_objects_wizard_equipment_page_transport_type", "label": "transport_type()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L44"}, {"id": "page_objects_wizard_equipment_page_sftp_host", "label": "sftp_host()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L49"}, {"id": "page_objects_wizard_equipment_page_sftp_user", "label": "sftp_user()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L53"}, {"id": "page_objects_wizard_equipment_page_sftp_remote_path", "label": "sftp_remote_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L57"}, {"id": "page_objects_wizard_equipment_page_smb_host", "label": "smb_host()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L62"}, {"id": "page_objects_wizard_equipment_page_smb_share", "label": "smb_share()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L66"}, {"id": "page_objects_wizard_equipment_page_smb_user", "label": "smb_user()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L70"}, {"id": "page_objects_wizard_equipment_page_confirm", "label": "confirm()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L75"}, {"id": "page_objects_wizard_equipment_page_cancel", "label": "cancel()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L79"}, {"id": "page_objects_wizard_equipment_page_next_button", "label": "next_button()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L83"}, {"id": "page_objects_wizard_equipment_page_back", "label": "back()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L87"}, {"id": "page_objects_wizard_equipment_page_success", "label": "success()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L91"}, {"id": "page_objects_wizard_equipment_page_rationale_1", "label": "Page object for the Add-Equipment wizard (Redesign \u00a76).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_wizardequipmentpage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L8", "weight": 1.0}, {"source": "page_objects_wizard_equipment_page_wizardequipmentpage", "target": "page_objects_wizard_equipment_page_wizardequipmentpage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_step_identity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_equipment_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_step_paths", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_local_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_nas_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_sync_mode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_transport_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_sftp_host", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_sftp_user", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_sftp_remote_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_smb_host", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_smb_share", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L66", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_smb_user", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L70", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_confirm", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L75", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_cancel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L79", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_next_button", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_back", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L87", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "target": "page_objects_wizard_equipment_page_success", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L91", "weight": 1.0}, {"source": "page_objects_wizard_equipment_page_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_equipment_page_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_objects_wizard_equipment_page_step_identity", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L15"}, {"caller_nid": "page_objects_wizard_equipment_page_equipment_id", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L19"}, {"caller_nid": "page_objects_wizard_equipment_page_label", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L23"}, {"caller_nid": "page_objects_wizard_equipment_page_step_paths", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L27"}, {"caller_nid": "page_objects_wizard_equipment_page_local_root", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L32"}, {"caller_nid": "page_objects_wizard_equipment_page_nas_root", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L36"}, {"caller_nid": "page_objects_wizard_equipment_page_sync_mode", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L41"}, {"caller_nid": "page_objects_wizard_equipment_page_transport_type", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L45"}, {"caller_nid": "page_objects_wizard_equipment_page_sftp_host", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L50"}, {"caller_nid": "page_objects_wizard_equipment_page_sftp_user", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L54"}, {"caller_nid": "page_objects_wizard_equipment_page_sftp_remote_path", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L58"}, {"caller_nid": "page_objects_wizard_equipment_page_smb_host", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L63"}, {"caller_nid": "page_objects_wizard_equipment_page_smb_share", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L67"}, {"caller_nid": "page_objects_wizard_equipment_page_smb_user", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L71"}, {"caller_nid": "page_objects_wizard_equipment_page_confirm", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L76"}, {"caller_nid": "page_objects_wizard_equipment_page_cancel", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L80"}, {"caller_nid": "page_objects_wizard_equipment_page_next_button", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L84"}, {"caller_nid": "page_objects_wizard_equipment_page_back", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L88"}, {"caller_nid": "page_objects_wizard_equipment_page_success", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py", "source_location": "L92"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/40f4f0021e2b076ac53e1c60246b665d8e35f6fd7fa35d4086d7e463e8156799.json b/graphify-out/cache/ast/40f4f0021e2b076ac53e1c60246b665d8e35f6fd7fa35d4086d7e463e8156799.json new file mode 100644 index 0000000..39e9bd6 --- /dev/null +++ b/graphify-out/cache/ast/40f4f0021e2b076ac53e1c60246b665d8e35f6fd7fa35d4086d7e463e8156799.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_window_launcher_py", "label": "window_launcher.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L1"}, {"id": "tray_window_launcher_resolve_window_executable", "label": "_resolve_window_executable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L35"}, {"id": "tray_window_launcher_windowlauncher", "label": "WindowLauncher", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L55"}, {"id": "tray_window_launcher_windowlauncher_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L63"}, {"id": "tray_window_launcher_windowlauncher_open", "label": ".open()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L77"}, {"id": "tray_window_launcher_windowlauncher_close", "label": ".close()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L89"}, {"id": "tray_window_launcher_is_alive", "label": "is_alive()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L103"}, {"id": "tray_window_launcher_pid", "label": "pid()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L110"}, {"id": "tray_window_launcher_windowlauncher_argv", "label": "._argv()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L120"}, {"id": "tray_window_launcher_windowlauncher_focus_existing", "label": "._focus_existing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L126"}, {"id": "tray_window_launcher_rationale_1", "label": "Spawn / focus the on-demand window subprocess. Backend Spec \u00a74.3.2. The tray cl", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L1"}, {"id": "tray_window_launcher_rationale_36", "label": "Return the argv prefix for spawning ``exlab-wizard-window``. Resolution ord", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L36"}, {"id": "tray_window_launcher_rationale_56", "label": "Spawn ``exlab-wizard-window`` as a subprocess, track its PID. On a re-open", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L56"}, {"id": "tray_window_launcher_rationale_78", "label": "Spawn a window subprocess, or focus the existing one.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L78"}, {"id": "tray_window_launcher_rationale_90", "label": "Terminate the live window subprocess, if any. Idempotent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L90"}, {"id": "tray_window_launcher_rationale_104", "label": "Return ``True`` while the window subprocess is running.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L104"}, {"id": "tray_window_launcher_rationale_111", "label": "Return the live window's PID, or ``None`` if no window is up.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L111"}, {"id": "tray_window_launcher_rationale_121", "label": "Return the argv to spawn the window subprocess.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L121"}, {"id": "tray_window_launcher_rationale_127", "label": "Best-effort raise/focus of the existing window. v1 logs the request; th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L127"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_window_launcher_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_window_launcher_py", "target": "shutil", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_window_launcher_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_window_launcher_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_window_launcher_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_window_launcher_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_window_launcher_py", "target": "tray_window_launcher_resolve_window_executable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_window_launcher_py", "target": "tray_window_launcher_windowlauncher", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L55", "weight": 1.0}, {"source": "tray_window_launcher_windowlauncher", "target": "tray_window_launcher_windowlauncher_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L63", "weight": 1.0}, {"source": "tray_window_launcher_windowlauncher", "target": "tray_window_launcher_windowlauncher_open", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L77", "weight": 1.0}, {"source": "tray_window_launcher_windowlauncher", "target": "tray_window_launcher_windowlauncher_close", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L89", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_window_launcher_py", "target": "tray_window_launcher_is_alive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L103", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_window_launcher_py", "target": "tray_window_launcher_pid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L110", "weight": 1.0}, {"source": "tray_window_launcher_windowlauncher", "target": "tray_window_launcher_windowlauncher_argv", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L120", "weight": 1.0}, {"source": "tray_window_launcher_windowlauncher", "target": "tray_window_launcher_windowlauncher_focus_existing", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L126", "weight": 1.0}, {"source": "tray_window_launcher_windowlauncher_open", "target": "tray_window_launcher_windowlauncher_focus_existing", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L80", "weight": 1.0}, {"source": "tray_window_launcher_windowlauncher_open", "target": "tray_window_launcher_windowlauncher_argv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L82", "weight": 1.0}, {"source": "tray_window_launcher_windowlauncher_argv", "target": "tray_window_launcher_resolve_window_executable", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L124", "weight": 1.0}, {"source": "tray_window_launcher_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_window_launcher_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_window_launcher_rationale_36", "target": "tray_window_launcher_resolve_window_executable", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L36", "weight": 1.0}, {"source": "tray_window_launcher_rationale_56", "target": "tray_window_launcher_windowlauncher", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L56", "weight": 1.0}, {"source": "tray_window_launcher_rationale_78", "target": "tray_window_launcher_windowlauncher_open", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L78", "weight": 1.0}, {"source": "tray_window_launcher_rationale_90", "target": "tray_window_launcher_windowlauncher_close", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L90", "weight": 1.0}, {"source": "tray_window_launcher_rationale_104", "target": "tray_window_launcher_windowlauncher_is_alive", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L104", "weight": 1.0}, {"source": "tray_window_launcher_rationale_111", "target": "tray_window_launcher_windowlauncher_pid", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L111", "weight": 1.0}, {"source": "tray_window_launcher_rationale_121", "target": "tray_window_launcher_windowlauncher_argv", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L121", "weight": 1.0}, {"source": "tray_window_launcher_rationale_127", "target": "tray_window_launcher_windowlauncher_focus_existing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L127", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_window_launcher_resolve_window_executable", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L46"}, {"caller_nid": "tray_window_launcher_resolve_window_executable", "callee": "which", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L49"}, {"caller_nid": "tray_window_launcher_windowlauncher_init", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L69"}, {"caller_nid": "tray_window_launcher_windowlauncher_open", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L83"}, {"caller_nid": "tray_window_launcher_windowlauncher_open", "callee": "Popen", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L84"}, {"caller_nid": "tray_window_launcher_windowlauncher_close", "callee": "poll", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L93"}, {"caller_nid": "tray_window_launcher_windowlauncher_close", "callee": "terminate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L94"}, {"caller_nid": "tray_window_launcher_windowlauncher_close", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L96"}, {"caller_nid": "tray_window_launcher_windowlauncher_close", "callee": "kill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L98"}, {"caller_nid": "tray_window_launcher_windowlauncher_close", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L99"}, {"caller_nid": "tray_window_launcher_is_alive", "callee": "poll", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L107"}, {"caller_nid": "tray_window_launcher_windowlauncher_focus_existing", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py", "source_location": "L134"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/4105c1e8d1f1786d09dd9e16eb9665990fe17069fecd93c62e44dca45358e455.json b/graphify-out/cache/ast/4105c1e8d1f1786d09dd9e16eb9665990fe17069fecd93c62e44dca45358e455.json new file mode 100644 index 0000000..e98deb5 --- /dev/null +++ b/graphify-out/cache/ast/4105c1e8d1f1786d09dd9e16eb9665990fe17069fecd93c62e44dca45358e455.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/__init__.py", "source_location": "L1"}, {"id": "validator_init_rationale_1", "label": "Validator engine package. Backend Spec \u00a78.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/__init__.py", "source_location": "L1"}], "edges": [{"source": "validator_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/434eda36af4dc064789e34016e457465548f784243c2b9b32e8dd14225571a56.json b/graphify-out/cache/ast/434eda36af4dc064789e34016e457465548f784243c2b9b32e8dd14225571a56.json new file mode 100644 index 0000000..1f5685a --- /dev/null +++ b/graphify-out/cache/ast/434eda36af4dc064789e34016e457465548f784243c2b9b32e8dd14225571a56.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_17_picker_step_py", "label": "test_flow_17_picker_step.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L1"}, {"id": "e2e_test_flow_17_picker_step_goto", "label": "_goto()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L12"}, {"id": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", "label": "test_flow_17_creation_buttons_enabled_on_owned_node()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L25"}, {"id": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_disabled_on_received_node", "label": "test_flow_17_creation_buttons_disabled_on_received_node()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L41"}, {"id": "e2e_test_flow_17_picker_step_rationale_1", "label": "E2E flow 17: creation-button enablement on received nodes (Redesign decision 1).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_17_picker_step_py", "target": "e2e_test_flow_17_picker_step_goto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_17_picker_step_py", "target": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_17_picker_step_py", "target": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_disabled_on_received_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L41", "weight": 1.0}, {"source": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", "target": "e2e_test_flow_17_picker_step_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L26", "weight": 1.0}, {"source": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_disabled_on_received_node", "target": "e2e_test_flow_17_picker_step_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L47", "weight": 1.0}, {"source": "e2e_test_flow_17_picker_step_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_17_picker_step_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_17_picker_step_goto", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L14"}, {"caller_nid": "e2e_test_flow_17_picker_step_goto", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L16"}, {"caller_nid": "e2e_test_flow_17_picker_step_goto", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L17"}, {"caller_nid": "e2e_test_flow_17_picker_step_goto", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L21"}, {"caller_nid": "e2e_test_flow_17_picker_step_goto", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L22"}, {"caller_nid": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L27"}, {"caller_nid": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L27"}, {"caller_nid": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L31"}, {"caller_nid": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L31"}, {"caller_nid": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L32"}, {"caller_nid": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L35"}, {"caller_nid": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L36"}, {"caller_nid": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", "callee": "get_attribute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L38"}, {"caller_nid": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_disabled_on_received_node", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L49"}, {"caller_nid": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_disabled_on_received_node", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L50"}, {"caller_nid": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_disabled_on_received_node", "callee": "get_attribute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py", "source_location": "L51"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/44c391dfce445c141dfed5734d654cd324c009ba7625fce253d65af6df46e087.json b/graphify-out/cache/ast/44c391dfce445c141dfed5734d654cd324c009ba7625fce253d65af6df46e087.json new file mode 100644 index 0000000..ed0db95 --- /dev/null +++ b/graphify-out/cache/ast/44c391dfce445c141dfed5734d654cd324c009ba7625fce253d65af6df46e087.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_05_browse_view_py", "label": "test_flow_05_browse_view.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L1"}, {"id": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "label": "test_flow_05_browse_view()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L15"}, {"id": "e2e_test_flow_05_browse_view_rationale_1", "label": "E2E flow 05: Browse view -- open existing project + sessions. Frontend Spec \u00a76.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_05_browse_view_py", "target": "tests_e2e_page_objects_main_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_05_browse_view_py", "target": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L15", "weight": 1.0}, {"source": "e2e_test_flow_05_browse_view_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_05_browse_view_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "MainPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L16"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L17"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L18"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L20"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L22"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L23"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L24"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L25"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L26"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L27"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L29"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L30"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L32"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L33"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "find", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L36"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "inner_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L36"}, {"caller_nid": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py", "source_location": "L36"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/44c62ed0402bf6989bb4f4dbdcc84474744e8e00236ec921511bc356bf125715.json b/graphify-out/cache/ast/44c62ed0402bf6989bb4f4dbdcc84474744e8e00236ec921511bc356bf125715.json new file mode 100644 index 0000000..b521ac9 --- /dev/null +++ b/graphify-out/cache/ast/44c62ed0402bf6989bb4f4dbdcc84474744e8e00236ec921511bc356bf125715.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_test_main_py", "label": "test_main.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_main.py", "source_location": "L1"}, {"id": "unit_test_main_test_main_returns_zero", "label": "test_main_returns_zero()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_main.py", "source_location": "L14"}, {"id": "unit_test_main_test_main_prints_hint", "label": "test_main_prints_hint()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_main.py", "source_location": "L19"}, {"id": "unit_test_main_rationale_1", "label": "Tests for the CLI alias entry point in ``exlab_wizard.__main__``. The entry poi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_main.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_test_main_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_main.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_main_py", "target": "exlab_wizard_main", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_main.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_main_py", "target": "unit_test_main_test_main_returns_zero", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_main.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_main_py", "target": "unit_test_main_test_main_prints_hint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_main.py", "source_location": "L19", "weight": 1.0}, {"source": "unit_test_main_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_test_main_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_main.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "unit_test_main_test_main_returns_zero", "callee": "main", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_main.py", "source_location": "L15"}, {"caller_nid": "unit_test_main_test_main_prints_hint", "callee": "main", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_main.py", "source_location": "L20"}, {"caller_nid": "unit_test_main_test_main_prints_hint", "callee": "readouterr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_main.py", "source_location": "L21"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/450f3cfac392d77657e35574d0d8bb48462285d8f6867d85d1e257ded4597b82.json b/graphify-out/cache/ast/450f3cfac392d77657e35574d0d8bb48462285d8f6867d85d1e257ded4597b82.json new file mode 100644 index 0000000..3bb9d8f --- /dev/null +++ b/graphify-out/cache/ast/450f3cfac392d77657e35574d0d8bb48462285d8f6867d85d1e257ded4597b82.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "label": "client.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L1"}, {"id": "lims_client_limsclient", "label": "LIMSClient", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L42"}, {"id": "lims_client_limsclient_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L55"}, {"id": "lims_client_endpoint", "label": "endpoint()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L71"}, {"id": "lims_client_email", "label": "email()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L76"}, {"id": "lims_client_limsclient_login", "label": ".login()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L80"}, {"id": "lims_client_limsclient_list_projects", "label": ".list_projects()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L105"}, {"id": "lims_client_limsclient_get_project", "label": ".get_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L125"}, {"id": "lims_client_limsclient_get_me", "label": ".get_me()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L139"}, {"id": "lims_client_limsclient_health_check", "label": ".health_check()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L144"}, {"id": "lims_client_limsclient_close", "label": ".close()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L167"}, {"id": "lims_client_limsclient_get_json", "label": "._get_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L175"}, {"id": "lims_client_limsclient_request_with_relogin", "label": "._request_with_relogin()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L180"}, {"id": "lims_client_project_from_row", "label": "_project_from_row()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L190"}, {"id": "lims_client_rationale_1", "label": "Read-only LIMS client (Mapping B). Backend Spec \u00a77.2. The client wraps an :clas", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L1"}, {"id": "lims_client_rationale_43", "label": "Read-only LIMS client. Backend Spec \u00a77.2 Mapping B. Cookie-session auth: :m", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L43"}, {"id": "lims_client_rationale_72", "label": "Configured base URL (trailing slashes stripped).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L72"}, {"id": "lims_client_rationale_77", "label": "Configured operator email; used as the login username.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L77"}, {"id": "lims_client_rationale_81", "label": "POST ``/api/v1/login`` with email + password. On success the underlying", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L81"}, {"id": "lims_client_rationale_106", "label": "``GET /api/v1/projects``; returns one LIMSProject per row. ``status_fil", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L106"}, {"id": "lims_client_rationale_126", "label": "``GET /api/v1/projects/``; returns None on 404. ``uid_or_short_id``", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L126"}, {"id": "lims_client_rationale_140", "label": "``GET /api/v1/me``; returns the current operator's row.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L140"}, {"id": "lims_client_rationale_145", "label": "Return a ``HealthStatus`` snapshot. Backend Spec \u00a77.2.3. Calls ``GET /a", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L145"}, {"id": "lims_client_rationale_168", "label": "Close the underlying ``httpx.AsyncClient``. Idempotent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L168"}, {"id": "lims_client_rationale_181", "label": "Issue one request; on 401 retry once after a fresh ``login``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L181"}, {"id": "lims_client_rationale_191", "label": "Decode one ``/projects`` row into LIMSProject. Adds a fresh UTC ``fetch", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L191"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "target": "httpx", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "target": "exlab_wizard_lims_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "target": "lims_client_limsclient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L42", "weight": 1.0}, {"source": "lims_client_limsclient", "target": "lims_client_limsclient_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L55", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "target": "lims_client_endpoint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L71", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "target": "lims_client_email", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L76", "weight": 1.0}, {"source": "lims_client_limsclient", "target": "lims_client_limsclient_login", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L80", "weight": 1.0}, {"source": "lims_client_limsclient", "target": "lims_client_limsclient_list_projects", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L105", "weight": 1.0}, {"source": "lims_client_limsclient", "target": "lims_client_limsclient_get_project", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L125", "weight": 1.0}, {"source": "lims_client_limsclient", "target": "lims_client_limsclient_get_me", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L139", "weight": 1.0}, {"source": "lims_client_limsclient", "target": "lims_client_limsclient_health_check", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L144", "weight": 1.0}, {"source": "lims_client_limsclient", "target": "lims_client_limsclient_close", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L167", "weight": 1.0}, {"source": "lims_client_limsclient", "target": "lims_client_limsclient_get_json", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L175", "weight": 1.0}, {"source": "lims_client_limsclient", "target": "lims_client_limsclient_request_with_relogin", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L180", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "target": "lims_client_project_from_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L190", "weight": 1.0}, {"source": "lims_client_limsclient_list_projects", "target": "lims_client_limsclient_get_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L117", "weight": 1.0}, {"source": "lims_client_limsclient_list_projects", "target": "lims_client_project_from_row", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L119", "weight": 1.0}, {"source": "lims_client_limsclient_get_project", "target": "lims_client_limsclient_request_with_relogin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L133", "weight": 1.0}, {"source": "lims_client_limsclient_get_project", "target": "lims_client_project_from_row", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L137", "weight": 1.0}, {"source": "lims_client_limsclient_get_me", "target": "lims_client_limsclient_get_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L141", "weight": 1.0}, {"source": "lims_client_limsclient_health_check", "target": "lims_client_limsclient_request_with_relogin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L154", "weight": 1.0}, {"source": "lims_client_limsclient_get_json", "target": "lims_client_limsclient_request_with_relogin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L176", "weight": 1.0}, {"source": "lims_client_limsclient_request_with_relogin", "target": "lims_client_limsclient_login", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L186", "weight": 1.0}, {"source": "lims_client_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_client_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L1", "weight": 1.0}, {"source": "lims_client_rationale_43", "target": "lims_client_limsclient", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L43", "weight": 1.0}, {"source": "lims_client_rationale_72", "target": "lims_client_limsclient_endpoint", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L72", "weight": 1.0}, {"source": "lims_client_rationale_77", "target": "lims_client_limsclient_email", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L77", "weight": 1.0}, {"source": "lims_client_rationale_81", "target": "lims_client_limsclient_login", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L81", "weight": 1.0}, {"source": "lims_client_rationale_106", "target": "lims_client_limsclient_list_projects", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L106", "weight": 1.0}, {"source": "lims_client_rationale_126", "target": "lims_client_limsclient_get_project", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L126", "weight": 1.0}, {"source": "lims_client_rationale_140", "target": "lims_client_limsclient_get_me", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L140", "weight": 1.0}, {"source": "lims_client_rationale_145", "target": "lims_client_limsclient_health_check", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L145", "weight": 1.0}, {"source": "lims_client_rationale_168", "target": "lims_client_limsclient_close", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L168", "weight": 1.0}, {"source": "lims_client_rationale_181", "target": "lims_client_limsclient_request_with_relogin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L181", "weight": 1.0}, {"source": "lims_client_rationale_191", "target": "lims_client_limsclient_project_from_row", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L191", "weight": 1.0}], "raw_calls": [{"caller_nid": "lims_client_limsclient_init", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L62"}, {"caller_nid": "lims_client_limsclient_init", "callee": "AsyncClient", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L65"}, {"caller_nid": "lims_client_limsclient_login", "callee": "_password_provider", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L90"}, {"caller_nid": "lims_client_limsclient_login", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L93"}, {"caller_nid": "lims_client_limsclient_login", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L94"}, {"caller_nid": "lims_client_limsclient_login", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L99"}, {"caller_nid": "lims_client_limsclient_login", "callee": "raise_for_status", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L103"}, {"caller_nid": "lims_client_limsclient_list_projects", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L118"}, {"caller_nid": "lims_client_limsclient_list_projects", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L121"}, {"caller_nid": "lims_client_limsclient_get_project", "callee": "raise_for_status", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L136"}, {"caller_nid": "lims_client_limsclient_get_project", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L137"}, {"caller_nid": "lims_client_limsclient_get_me", "callee": "convert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L142"}, {"caller_nid": "lims_client_limsclient_health_check", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L152"}, {"caller_nid": "lims_client_limsclient_health_check", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L156"}, {"caller_nid": "lims_client_limsclient_health_check", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L156"}, {"caller_nid": "lims_client_limsclient_health_check", "callee": "HealthStatus", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L157"}, {"caller_nid": "lims_client_limsclient_health_check", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L157"}, {"caller_nid": "lims_client_limsclient_health_check", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L158"}, {"caller_nid": "lims_client_limsclient_health_check", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L158"}, {"caller_nid": "lims_client_limsclient_health_check", "callee": "HealthStatus", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L160"}, {"caller_nid": "lims_client_limsclient_health_check", "callee": "HealthStatus", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L161"}, {"caller_nid": "lims_client_limsclient_close", "callee": "aclose", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L169"}, {"caller_nid": "lims_client_limsclient_get_json", "callee": "raise_for_status", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L177"}, {"caller_nid": "lims_client_limsclient_get_json", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L178"}, {"caller_nid": "lims_client_limsclient_request_with_relogin", "callee": "request", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L182"}, {"caller_nid": "lims_client_limsclient_request_with_relogin", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L185"}, {"caller_nid": "lims_client_limsclient_request_with_relogin", "callee": "request", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L187"}, {"caller_nid": "lims_client_project_from_row", "callee": "LIMSProject", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L196"}, {"caller_nid": "lims_client_project_from_row", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L200"}, {"caller_nid": "lims_client_project_from_row", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L202"}, {"caller_nid": "lims_client_project_from_row", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L204"}, {"caller_nid": "lims_client_project_from_row", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py", "source_location": "L205"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/47a3e3411e64df363fca528ebaa9c33011c93219dc608ac675fba55a6b8f732f.json b/graphify-out/cache/ast/47a3e3411e64df363fca528ebaa9c33011c93219dc608ac675fba55a6b8f732f.json new file mode 100644 index 0000000..77f9973 --- /dev/null +++ b/graphify-out/cache/ast/47a3e3411e64df363fca528ebaa9c33011c93219dc608ac675fba55a6b8f732f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "label": "engine.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1"}, {"id": "validator_engine_creationvalidationinput", "label": "CreationValidationInput", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L114"}, {"id": "validator_engine_split_path_segments", "label": "_split_path_segments()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L162"}, {"id": "validator_engine_auditscopeequipment", "label": "AuditScopeEquipment", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L193"}, {"id": "typeddict", "label": "TypedDict", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "validator_engine_auditscopeproject", "label": "AuditScopeProject", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L206"}, {"id": "validator_engine_auditscopeall", "label": "AuditScopeAll", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L217"}, {"id": "validator_engine_validator", "label": "Validator", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L236"}, {"id": "validator_engine_validator_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L251"}, {"id": "validator_engine_config", "label": "config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L267"}, {"id": "validator_engine_validator_reconfigure", "label": ".reconfigure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L275"}, {"id": "validator_engine_validator_validate_creation", "label": ".validate_creation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L303"}, {"id": "validator_engine_materialise", "label": "_materialise()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L398"}, {"id": "validator_engine_from_config", "label": "from_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L428"}, {"id": "validator_engine_validator_audit", "label": ".audit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L451"}, {"id": "validator_engine_validator_query_problems", "label": ".query_problems()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L482"}, {"id": "validator_engine_validator_resolve_scope_roots", "label": "._resolve_scope_roots()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L494"}, {"id": "validator_engine_validator_walk_root", "label": "._walk_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L513"}, {"id": "validator_engine_validator_walk_dir", "label": "._walk_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L532"}, {"id": "validator_engine_validator_classify_level", "label": "._classify_level()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L602"}, {"id": "validator_engine_validator_compute_run_path", "label": "._compute_run_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L655"}, {"id": "validator_engine_validator_apply_directory_rules", "label": "._apply_directory_rules()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L697"}, {"id": "validator_engine_validator_extend_findings", "label": "._extend_findings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L787"}, {"id": "validator_engine_validator_apply_missing_required_field_rule", "label": "._apply_missing_required_field_rule()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L814"}, {"id": "validator_engine_validator_apply_directory_name_rules", "label": "._apply_directory_name_rules()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L862"}, {"id": "validator_engine_validator_apply_file_rules", "label": "._apply_file_rules()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L905"}, {"id": "validator_engine_validator_content_scan_eligible", "label": "._content_scan_eligible()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L978"}, {"id": "validator_engine_validator_read_text_for_scan", "label": "._read_text_for_scan()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L996"}, {"id": "validator_engine_validator_read_creation_for", "label": "._read_creation_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1014"}, {"id": "validator_engine_extract_overrides_and_sync", "label": "_extract_overrides_and_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1041"}, {"id": "validator_engine_materialise_audit", "label": "_materialise_audit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1061"}, {"id": "validator_engine_tier_rank", "label": "_tier_rank()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1112"}, {"id": "validator_engine_finding_sort_key", "label": "_finding_sort_key()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1126"}, {"id": "validator_engine_level_for_orphan", "label": "_level_for_orphan()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1143"}, {"id": "validator_engine_rationale_1", "label": "Validator engine. Backend Spec \u00a74.4.4, \u00a78.1, \u00a711.7, \u00a711.8. The engine is the si", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1"}, {"id": "validator_engine_rationale_115", "label": "Input bundle for creation-time validation. Backend Spec \u00a78.1, \u00a711.8. All fi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L115"}, {"id": "validator_engine_rationale_163", "label": "Split ``proposed_path`` into per-segment names. Accepts both POSIX and Wind", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L163"}, {"id": "validator_engine_rationale_194", "label": "Audit one equipment subtree. Spec \u00a711.8. The ``value`` is the equipment ID", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L194"}, {"id": "validator_engine_rationale_207", "label": "Audit one ``/`` subtree. Spec \u00a711.8. The ``value`` is a", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L207"}, {"id": "validator_engine_rationale_218", "label": "Audit every configured equipment + staging when orchestrator on. Spec \u00a711.8", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L218"}, {"id": "validator_engine_rationale_237", "label": "Run \u00a78.1 rules in creation-time and audit modes. Backend Spec \u00a711.8. The co", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L237"}, {"id": "validator_engine_rationale_268", "label": "The :class:`ValidatorConfig` this engine instance was built with. Expos", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L268"}, {"id": "validator_engine_rationale_282", "label": "Re-seed the config + audit-mode roots in place (no tray relaunch). Mirr", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L282"}, {"id": "validator_engine_rationale_304", "label": "Run every \u00a78.1 creation-time rule against ``params``. Returns a flat li", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L304"}, {"id": "validator_engine_rationale_399", "label": "Wrap a rule-helper dict in a :class:`Finding`. The \u00a78.1 rule helpers re", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L399"}, {"id": "validator_engine_rationale_429", "label": "Build a :class:`Validator` from the full ``config.yaml`` model. Project", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L429"}, {"id": "validator_engine_rationale_452", "label": "Walk a directory subtree and return all findings. Backend Spec \u00a711.8. U", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L452"}, {"id": "validator_engine_rationale_483", "label": "Public read-only alias for :meth:`audit`. Backend Spec \u00a711.8. Read-only", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L483"}, {"id": "validator_engine_rationale_495", "label": "Map an :class:`AuditScope` onto the directory roots to walk.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L495"}, {"id": "validator_engine_rationale_514", "label": "Walk a single subtree rooted at ``root`` (depth-first). Returns a flat", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L514"}, {"id": "validator_engine_rationale_539", "label": "Recursive ``os.scandir`` walk; apply rules at every level. Per-director", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L539"}, {"id": "validator_engine_rationale_607", "label": "Classify a directory's role in an equipment subtree. Equipment root is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L607"}, {"id": "validator_engine_rationale_661", "label": "Return the \u00a711.8 ``run_path`` for findings at ``directory``. Per spec,", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L661"}, {"id": "validator_engine_rationale_707", "label": "Apply rules whose scope is the run-level directory itself. Three rule f", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L707"}, {"id": "validator_engine_rationale_797", "label": "Materialise raw rule output into :class:`Finding` instances. Reduces au", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L797"}, {"id": "validator_engine_rationale_824", "label": "Read ``readme_fields.json`` and call ``check_missing_required_field``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L824"}, {"id": "validator_engine_rationale_871", "label": "Apply name-level rules (placeholder + illegal char) to a directory. Res", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L871"}, {"id": "validator_engine_rationale_914", "label": "Apply file-name + file-content rules to a single file. Filename rules (", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L914"}, {"id": "validator_engine_rationale_979", "label": "Return True iff the file passes the size + extension gates. Spec \u00a78.1.1", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L979"}, {"id": "validator_engine_rationale_997", "label": "Read text bytes for placeholder scan, applying the binary sniff. Return", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L997"}, {"id": "validator_engine_rationale_1017", "label": "Read ``/.exlab-wizard/creation.json`` if present. Returns ``", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1017"}, {"id": "validator_engine_rationale_1044", "label": "Return ``(active_problem_classes, sync_status)`` for a payload. ``activ", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1044"}, {"id": "validator_engine_rationale_1069", "label": "Audit-mode counterpart of :meth:`_materialise`. Computes ``override_act", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1069"}, {"id": "validator_engine_rationale_1113", "label": "Hard tier sorts before soft tier (\u00a711.8). Returns 0 for ``\"hard\"`` and 1 fo", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1113"}, {"id": "validator_engine_rationale_1127", "label": "Sort key for the \u00a711.8 finding list ordering. Tuple: ``(tier_rank, rule, of", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1127"}, {"id": "validator_engine_rationale_1144", "label": "Translate the engine-level enum into the rules.check_orphan input. The orph", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1144"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L61", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "exlab_wizard_cache_creation_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L68", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "exlab_wizard_io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L82", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "exlab_wizard_validator", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L89", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "exlab_wizard_validator_findings", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L90", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_creationvalidationinput", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L114", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_split_path_segments", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L162", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_auditscopeequipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L193", "weight": 1.0}, {"source": "validator_engine_auditscopeequipment", "target": "typeddict", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L193", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_auditscopeproject", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L206", "weight": 1.0}, {"source": "validator_engine_auditscopeproject", "target": "typeddict", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L206", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_auditscopeall", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L217", "weight": 1.0}, {"source": "validator_engine_auditscopeall", "target": "typeddict", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L217", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_validator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L236", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L251", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L267", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_reconfigure", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L275", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_validate_creation", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L303", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_materialise", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L398", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_from_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L428", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_audit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L451", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_query_problems", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L482", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_resolve_scope_roots", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L494", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_walk_root", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L513", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_walk_dir", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L532", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_classify_level", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L602", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_compute_run_path", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L655", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_apply_directory_rules", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L697", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_extend_findings", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L787", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_apply_missing_required_field_rule", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L814", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_apply_directory_name_rules", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L862", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_apply_file_rules", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L905", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_content_scan_eligible", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L978", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_read_text_for_scan", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L996", "weight": 1.0}, {"source": "validator_engine_validator", "target": "validator_engine_validator_read_creation_for", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1014", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_extract_overrides_and_sync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1041", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_materialise_audit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1061", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_tier_rank", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1112", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_finding_sort_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1126", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "target": "validator_engine_level_for_orphan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1143", "weight": 1.0}, {"source": "validator_engine_validator_validate_creation", "target": "validator_engine_split_path_segments", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L333", "weight": 1.0}, {"source": "validator_engine_validator_validate_creation", "target": "validator_engine_materialise", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L384", "weight": 1.0}, {"source": "validator_engine_validator_audit", "target": "validator_engine_validator_resolve_scope_roots", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L476", "weight": 1.0}, {"source": "validator_engine_validator_audit", "target": "validator_engine_validator_walk_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L479", "weight": 1.0}, {"source": "validator_engine_validator_query_problems", "target": "validator_engine_validator_audit", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L490", "weight": 1.0}, {"source": "validator_engine_validator_walk_root", "target": "validator_engine_validator_walk_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L525", "weight": 1.0}, {"source": "validator_engine_validator_walk_dir", "target": "validator_engine_validator_classify_level", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L554", "weight": 1.0}, {"source": "validator_engine_validator_walk_dir", "target": "validator_engine_validator_read_creation_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L555", "weight": 1.0}, {"source": "validator_engine_validator_walk_dir", "target": "validator_engine_validator_compute_run_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L556", "weight": 1.0}, {"source": "validator_engine_validator_walk_dir", "target": "validator_engine_validator_apply_directory_rules", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L559", "weight": 1.0}, {"source": "validator_engine_validator_walk_dir", "target": "validator_engine_validator_apply_file_rules", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L581", "weight": 1.0}, {"source": "validator_engine_validator_walk_dir", "target": "validator_engine_validator_apply_directory_name_rules", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L589", "weight": 1.0}, {"source": "validator_engine_validator_apply_directory_rules", "target": "validator_engine_extract_overrides_and_sync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L722", "weight": 1.0}, {"source": "validator_engine_validator_apply_directory_rules", "target": "validator_engine_level_for_orphan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L725", "weight": 1.0}, {"source": "validator_engine_validator_apply_directory_rules", "target": "validator_engine_validator_extend_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L727", "weight": 1.0}, {"source": "validator_engine_validator_apply_directory_rules", "target": "validator_engine_validator_apply_missing_required_field_rule", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L755", "weight": 1.0}, {"source": "validator_engine_validator_apply_directory_rules", "target": "validator_engine_validator_apply_directory_name_rules", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L779", "weight": 1.0}, {"source": "validator_engine_validator_extend_findings", "target": "validator_engine_materialise_audit", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L805", "weight": 1.0}, {"source": "validator_engine_validator_apply_missing_required_field_rule", "target": "validator_engine_validator_extend_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L850", "weight": 1.0}, {"source": "validator_engine_validator_apply_directory_name_rules", "target": "validator_engine_extract_overrides_and_sync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L878", "weight": 1.0}, {"source": "validator_engine_validator_apply_directory_name_rules", "target": "validator_engine_validator_extend_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L881", "weight": 1.0}, {"source": "validator_engine_validator_apply_file_rules", "target": "validator_engine_extract_overrides_and_sync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L921", "weight": 1.0}, {"source": "validator_engine_validator_apply_file_rules", "target": "validator_engine_validator_extend_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L925", "weight": 1.0}, {"source": "validator_engine_validator_apply_file_rules", "target": "validator_engine_validator_content_scan_eligible", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L958", "weight": 1.0}, {"source": "validator_engine_validator_apply_file_rules", "target": "validator_engine_validator_read_text_for_scan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L960", "weight": 1.0}, {"source": "validator_engine_finding_sort_key", "target": "validator_engine_tier_rank", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1135", "weight": 1.0}, {"source": "validator_engine_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_engine_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1", "weight": 1.0}, {"source": "validator_engine_rationale_115", "target": "validator_engine_creationvalidationinput", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L115", "weight": 1.0}, {"source": "validator_engine_rationale_163", "target": "validator_engine_split_path_segments", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L163", "weight": 1.0}, {"source": "validator_engine_rationale_194", "target": "validator_engine_auditscopeequipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L194", "weight": 1.0}, {"source": "validator_engine_rationale_207", "target": "validator_engine_auditscopeproject", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L207", "weight": 1.0}, {"source": "validator_engine_rationale_218", "target": "validator_engine_auditscopeall", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L218", "weight": 1.0}, {"source": "validator_engine_rationale_237", "target": "validator_engine_validator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L237", "weight": 1.0}, {"source": "validator_engine_rationale_268", "target": "validator_engine_validator_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L268", "weight": 1.0}, {"source": "validator_engine_rationale_282", "target": "validator_engine_validator_reconfigure", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L282", "weight": 1.0}, {"source": "validator_engine_rationale_304", "target": "validator_engine_validator_validate_creation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L304", "weight": 1.0}, {"source": "validator_engine_rationale_399", "target": "validator_engine_validator_materialise", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L399", "weight": 1.0}, {"source": "validator_engine_rationale_429", "target": "validator_engine_validator_from_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L429", "weight": 1.0}, {"source": "validator_engine_rationale_452", "target": "validator_engine_validator_audit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L452", "weight": 1.0}, {"source": "validator_engine_rationale_483", "target": "validator_engine_validator_query_problems", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L483", "weight": 1.0}, {"source": "validator_engine_rationale_495", "target": "validator_engine_validator_resolve_scope_roots", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L495", "weight": 1.0}, {"source": "validator_engine_rationale_514", "target": "validator_engine_validator_walk_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L514", "weight": 1.0}, {"source": "validator_engine_rationale_539", "target": "validator_engine_validator_walk_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L539", "weight": 1.0}, {"source": "validator_engine_rationale_607", "target": "validator_engine_validator_classify_level", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L607", "weight": 1.0}, {"source": "validator_engine_rationale_661", "target": "validator_engine_validator_compute_run_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L661", "weight": 1.0}, {"source": "validator_engine_rationale_707", "target": "validator_engine_validator_apply_directory_rules", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L707", "weight": 1.0}, {"source": "validator_engine_rationale_797", "target": "validator_engine_validator_extend_findings", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L797", "weight": 1.0}, {"source": "validator_engine_rationale_824", "target": "validator_engine_validator_apply_missing_required_field_rule", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L824", "weight": 1.0}, {"source": "validator_engine_rationale_871", "target": "validator_engine_validator_apply_directory_name_rules", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L871", "weight": 1.0}, {"source": "validator_engine_rationale_914", "target": "validator_engine_validator_apply_file_rules", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L914", "weight": 1.0}, {"source": "validator_engine_rationale_979", "target": "validator_engine_validator_content_scan_eligible", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L979", "weight": 1.0}, {"source": "validator_engine_rationale_997", "target": "validator_engine_validator_read_text_for_scan", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L997", "weight": 1.0}, {"source": "validator_engine_rationale_1017", "target": "validator_engine_validator_read_creation_for", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1017", "weight": 1.0}, {"source": "validator_engine_rationale_1044", "target": "validator_engine_validator_extract_overrides_and_sync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1044", "weight": 1.0}, {"source": "validator_engine_rationale_1069", "target": "validator_engine_validator_materialise_audit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1069", "weight": 1.0}, {"source": "validator_engine_rationale_1113", "target": "validator_engine_tier_rank", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1113", "weight": 1.0}, {"source": "validator_engine_rationale_1127", "target": "validator_engine_finding_sort_key", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1127", "weight": 1.0}, {"source": "validator_engine_rationale_1144", "target": "validator_engine_level_for_orphan", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1144", "weight": 1.0}], "raw_calls": [{"caller_nid": "validator_engine_split_path_segments", "callee": "PureWindowsPath", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L180"}, {"caller_nid": "validator_engine_split_path_segments", "callee": "PurePosixPath", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L182"}, {"caller_nid": "validator_engine_split_path_segments", "callee": "replace", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L182"}, {"caller_nid": "validator_engine_validator_init", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L258"}, {"caller_nid": "validator_engine_validator_init", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L259"}, {"caller_nid": "validator_engine_validator_init", "callee": "frozenset", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L262"}, {"caller_nid": "validator_engine_validator_init", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L263"}, {"caller_nid": "validator_engine_validator_reconfigure", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L291"}, {"caller_nid": "validator_engine_validator_reconfigure", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L292"}, {"caller_nid": "validator_engine_validator_reconfigure", "callee": "frozenset", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L297"}, {"caller_nid": "validator_engine_validator_reconfigure", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L298"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L335"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L342"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "fromkeys", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L343"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L348"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "check_unresolved_placeholder", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L349"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L351"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L352"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L355"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "check_illegal_filesystem_character", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L356"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L358"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L361"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "check_reserved_filesystem_name", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L362"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L363"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L366"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "check_mode_prefix_mismatch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L367"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L373"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "check_missing_required_field", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L374"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L375"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L376"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L379"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L381"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "check_malformed_yaml_front_matter", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L381"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L387"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L389"}, {"caller_nid": "validator_engine_validator_validate_creation", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L393"}, {"caller_nid": "validator_engine_materialise", "callee": "Finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L411"}, {"caller_nid": "validator_engine_materialise", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L415"}, {"caller_nid": "validator_engine_materialise", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L417"}, {"caller_nid": "validator_engine_materialise", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L418"}, {"caller_nid": "validator_engine_from_config", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L437"}, {"caller_nid": "validator_engine_from_config", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L438"}, {"caller_nid": "validator_engine_from_config", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L440"}, {"caller_nid": "validator_engine_from_config", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L441"}, {"caller_nid": "validator_engine_from_config", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L442"}, {"caller_nid": "validator_engine_from_config", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L444"}, {"caller_nid": "validator_engine_from_config", "callee": "cls", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L445"}, {"caller_nid": "validator_engine_from_config", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L446"}, {"caller_nid": "validator_engine_validator_audit", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L479"}, {"caller_nid": "validator_engine_validator_audit", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L480"}, {"caller_nid": "validator_engine_validator_resolve_scope_roots", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L499"}, {"caller_nid": "validator_engine_validator_resolve_scope_roots", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L502"}, {"caller_nid": "validator_engine_validator_resolve_scope_roots", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L504"}, {"caller_nid": "validator_engine_validator_resolve_scope_roots", "callee": "values", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L504"}, {"caller_nid": "validator_engine_validator_resolve_scope_roots", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L506"}, {"caller_nid": "validator_engine_validator_resolve_scope_roots", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L509"}, {"caller_nid": "validator_engine_validator_walk_root", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L521"}, {"caller_nid": "validator_engine_validator_walk_root", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L521"}, {"caller_nid": "validator_engine_validator_walk_root", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L523"}, {"caller_nid": "validator_engine_validator_walk_root", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L523"}, {"caller_nid": "validator_engine_validator_walk_dir", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L569"}, {"caller_nid": "validator_engine_validator_walk_dir", "callee": "scandir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L569"}, {"caller_nid": "validator_engine_validator_walk_dir", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L579"}, {"caller_nid": "validator_engine_validator_walk_dir", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L580"}, {"caller_nid": "validator_engine_validator_walk_dir", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L588"}, {"caller_nid": "validator_engine_validator_classify_level", "callee": "relative_to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L625"}, {"caller_nid": "validator_engine_validator_classify_level", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L625"}, {"caller_nid": "validator_engine_validator_classify_level", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L629"}, {"caller_nid": "validator_engine_validator_classify_level", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L631"}, {"caller_nid": "validator_engine_validator_classify_level", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L633"}, {"caller_nid": "validator_engine_validator_classify_level", "callee": "is_run_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L639"}, {"caller_nid": "validator_engine_validator_classify_level", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L645"}, {"caller_nid": "validator_engine_validator_classify_level", "callee": "is_test_run_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L646"}, {"caller_nid": "validator_engine_validator_classify_level", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L649"}, {"caller_nid": "validator_engine_validator_classify_level", "callee": "is_run_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L650"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L676"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "relative_to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L681"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L681"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L683"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L685"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L686"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L686"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L686"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L687"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L688"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L688"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L688"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L689"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "is_run_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L689"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L690"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L690"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L690"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L691"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L692"}, {"caller_nid": "validator_engine_validator_compute_run_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L692"}, {"caller_nid": "validator_engine_validator_apply_directory_rules", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L723"}, {"caller_nid": "validator_engine_validator_apply_directory_rules", "callee": "check_orphan", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L728"}, {"caller_nid": "validator_engine_validator_apply_directory_rules", "callee": "check_mode_prefix_mismatch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L742"}, {"caller_nid": "validator_engine_validator_apply_directory_rules", "callee": "check_unsafe_project_name", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L770"}, {"caller_nid": "validator_engine_validator_extend_findings", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L804"}, {"caller_nid": "validator_engine_validator_apply_missing_required_field_rule", "callee": "readme_fields_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L832"}, {"caller_nid": "validator_engine_validator_apply_missing_required_field_rule", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L833"}, {"caller_nid": "validator_engine_validator_apply_missing_required_field_rule", "callee": "read_msgspec_json", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L836"}, {"caller_nid": "validator_engine_validator_apply_missing_required_field_rule", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L838"}, {"caller_nid": "validator_engine_validator_apply_missing_required_field_rule", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L842"}, {"caller_nid": "validator_engine_validator_apply_missing_required_field_rule", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L843"}, {"caller_nid": "validator_engine_validator_apply_missing_required_field_rule", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L844"}, {"caller_nid": "validator_engine_validator_apply_missing_required_field_rule", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L845"}, {"caller_nid": "validator_engine_validator_apply_missing_required_field_rule", "callee": "to_builtins", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L849"}, {"caller_nid": "validator_engine_validator_apply_missing_required_field_rule", "callee": "check_missing_required_field", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L851"}, {"caller_nid": "validator_engine_validator_apply_missing_required_field_rule", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L857"}, {"caller_nid": "validator_engine_validator_apply_directory_name_rules", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L879"}, {"caller_nid": "validator_engine_validator_apply_directory_name_rules", "callee": "check_unresolved_placeholder", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L882"}, {"caller_nid": "validator_engine_validator_apply_directory_name_rules", "callee": "check_illegal_filesystem_character", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L894"}, {"caller_nid": "validator_engine_validator_apply_file_rules", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L922"}, {"caller_nid": "validator_engine_validator_apply_file_rules", "callee": "check_unresolved_placeholder", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L926"}, {"caller_nid": "validator_engine_validator_apply_file_rules", "callee": "check_illegal_filesystem_character", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L938"}, {"caller_nid": "validator_engine_validator_apply_file_rules", "callee": "check_reserved_filesystem_name", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L949"}, {"caller_nid": "validator_engine_validator_apply_file_rules", "callee": "check_unresolved_placeholder", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L964"}, {"caller_nid": "validator_engine_validator_content_scan_eligible", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L987"}, {"caller_nid": "validator_engine_validator_content_scan_eligible", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L991"}, {"caller_nid": "validator_engine_validator_read_text_for_scan", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1005"}, {"caller_nid": "validator_engine_validator_read_text_for_scan", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1006"}, {"caller_nid": "validator_engine_validator_read_text_for_scan", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1009"}, {"caller_nid": "validator_engine_validator_read_text_for_scan", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1012"}, {"caller_nid": "validator_engine_validator_read_creation_for", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1025"}, {"caller_nid": "validator_engine_validator_read_creation_for", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1026"}, {"caller_nid": "validator_engine_validator_read_creation_for", "callee": "read_msgspec_json_raw", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1029"}, {"caller_nid": "validator_engine_validator_read_creation_for", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1031"}, {"caller_nid": "validator_engine_validator_read_creation_for", "callee": "convert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1034"}, {"caller_nid": "validator_engine_validator_read_creation_for", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1036"}, {"caller_nid": "validator_engine_extract_overrides_and_sync", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1053"}, {"caller_nid": "validator_engine_extract_overrides_and_sync", "callee": "select_active_overrides", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1054"}, {"caller_nid": "validator_engine_materialise_audit", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1077"}, {"caller_nid": "validator_engine_materialise_audit", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1078"}, {"caller_nid": "validator_engine_materialise_audit", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1079"}, {"caller_nid": "validator_engine_materialise_audit", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1083"}, {"caller_nid": "validator_engine_materialise_audit", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1083"}, {"caller_nid": "validator_engine_materialise_audit", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1085"}, {"caller_nid": "validator_engine_materialise_audit", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1086"}, {"caller_nid": "validator_engine_materialise_audit", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1086"}, {"caller_nid": "validator_engine_materialise_audit", "callee": "Finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1094"}, {"caller_nid": "validator_engine_materialise_audit", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py", "source_location": "L1100"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/47c5ce5f10d7b4e6d10cbb99e8d2c413cd75128782fb8e7c3405afc426b24dfc.json b/graphify-out/cache/ast/47c5ce5f10d7b4e6d10cbb99e8d2c413cd75128782fb8e7c3405afc426b24dfc.json new file mode 100644 index 0000000..50393f5 --- /dev/null +++ b/graphify-out/cache/ast/47c5ce5f10d7b4e6d10cbb99e8d2c413cd75128782fb8e7c3405afc426b24dfc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "label": "config.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L1"}, {"id": "routers_config_configupdateresponse", "label": "ConfigUpdateResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L46"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "routers_config_equipmentappendresponse", "label": "EquipmentAppendResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L57"}, {"id": "routers_config_build_config_router", "label": "build_config_router()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L74"}, {"id": "routers_config_await_or_call", "label": "_await_or_call()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L163"}, {"id": "routers_config_apply_live_config", "label": "_apply_live_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L171"}, {"id": "routers_config_rationale_1", "label": "``/config`` router. Backend Spec \u00a74.6.1, \u00a74.9. Endpoints: * ``GET /config`` --", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L1"}, {"id": "routers_config_rationale_47", "label": "``PUT /config`` response with the new setup state.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L47"}, {"id": "routers_config_rationale_58", "label": "``POST /config/equipment`` response: the new setup state + appended id. Red", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L58"}, {"id": "routers_config_rationale_75", "label": "Construct the ``/config`` router. Routes are always available.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L75"}, {"id": "routers_config_rationale_164", "label": "Invoke a saver that may be sync or async.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L164"}, {"id": "routers_config_rationale_172", "label": "Push ``cfg`` into the running components, then keep it as the live config.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L172"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "inspect", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "exlab_wizard_api_dependencies", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "routers_config_configupdateresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L46", "weight": 1.0}, {"source": "routers_config_configupdateresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "routers_config_equipmentappendresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L57", "weight": 1.0}, {"source": "routers_config_equipmentappendresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "routers_config_build_config_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L74", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "routers_config_await_or_call", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L163", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "target": "routers_config_apply_live_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L171", "weight": 1.0}, {"source": "routers_config_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_config_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L1", "weight": 1.0}, {"source": "routers_config_rationale_47", "target": "routers_config_configupdateresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L47", "weight": 1.0}, {"source": "routers_config_rationale_58", "target": "routers_config_equipmentappendresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L58", "weight": 1.0}, {"source": "routers_config_rationale_75", "target": "routers_config_build_config_router", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L75", "weight": 1.0}, {"source": "routers_config_rationale_164", "target": "routers_config_await_or_call", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L164", "weight": 1.0}, {"source": "routers_config_rationale_172", "target": "routers_config_apply_live_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L172", "weight": 1.0}], "raw_calls": [{"caller_nid": "routers_config_build_config_router", "callee": "APIRouter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L76"}, {"caller_nid": "routers_config_build_config_router", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L78"}, {"caller_nid": "routers_config_build_config_router", "callee": "put", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L89"}, {"caller_nid": "routers_config_build_config_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L116"}, {"caller_nid": "routers_config_await_or_call", "callee": "callable_", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L165"}, {"caller_nid": "routers_config_await_or_call", "callee": "isawaitable", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L166"}, {"caller_nid": "routers_config_apply_live_config", "callee": "apply_live_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L182"}, {"caller_nid": "routers_config_apply_live_config", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py", "source_location": "L184"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/47f3d052ba3e9905c21fb6b8da981f2c208412e6900bb3b95f0c6a1a12981500.json b/graphify-out/cache/ast/47f3d052ba3e9905c21fb6b8da981f2c208412e6900bb3b95f0c6a1a12981500.json new file mode 100644 index 0000000..4f801a9 --- /dev/null +++ b/graphify-out/cache/ast/47f3d052ba3e9905c21fb6b8da981f2c208412e6900bb3b95f0c6a1a12981500.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "label": "test_manager.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L1"}, {"id": "logging_test_manager_isolate_central_log", "label": "_isolate_central_log()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L30"}, {"id": "logging_test_manager_test_get_logger_importable_from_package", "label": "test_get_logger_importable_from_package()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L50"}, {"id": "logging_test_manager_test_get_logger_importable_from_manager_module", "label": "test_get_logger_importable_from_manager_module()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L56"}, {"id": "logging_test_manager_test_package_and_manager_export_the_same_callable", "label": "test_package_and_manager_export_the_same_callable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L62"}, {"id": "logging_test_manager_test_get_logger_returns_stdlib_logger_instance", "label": "test_get_logger_returns_stdlib_logger_instance()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L69"}, {"id": "logging_test_manager_test_get_logger_sets_name_on_returned_logger", "label": "test_get_logger_sets_name_on_returned_logger()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L76"}, {"id": "logging_test_manager_test_get_logger_is_idempotent_for_same_name", "label": "test_get_logger_is_idempotent_for_same_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L83"}, {"id": "logging_test_manager_test_get_logger_returns_distinct_loggers_for_different_names", "label": "test_get_logger_returns_distinct_loggers_for_different_names()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L93"}, {"id": "logging_test_manager_test_logging_package_all_contains_get_logger", "label": "test_logging_package_all_contains_get_logger()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L103"}, {"id": "logging_test_manager_test_configure_logging_with_default_threshold_and_handlers", "label": "test_configure_logging_with_default_threshold_and_handlers()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L112"}, {"id": "logging_test_manager_test_configure_logging_applies_config_level", "label": "test_configure_logging_applies_config_level()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L121"}, {"id": "logging_test_manager_test_configure_logging_idempotent_does_not_accumulate_handlers", "label": "test_configure_logging_idempotent_does_not_accumulate_handlers()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L128"}, {"id": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", "label": "test_configure_logging_routes_records_through_queue_listener()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L143"}, {"id": "logging_test_manager_test_shutdown_logging_is_idempotent", "label": "test_shutdown_logging_is_idempotent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L154"}, {"id": "logging_test_manager_test_configure_logging_installs_central_rotating_file_handler", "label": "test_configure_logging_installs_central_rotating_file_handler()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L161"}, {"id": "logging_test_manager_test_configure_logging_stderr_handler_is_warn_capped", "label": "test_configure_logging_stderr_handler_is_warn_capped()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L176"}, {"id": "logging_test_manager_test_resolve_threshold_unknown_level_falls_back_to_info", "label": "test_resolve_threshold_unknown_level_falls_back_to_info()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L192"}, {"id": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", "label": "test_configure_logging_strips_pre_existing_queue_handler()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L207"}, {"id": "logging_test_manager_test_build_real_handlers_includes_equipment_handler_when_local_root_set", "label": "test_build_real_handlers_includes_equipment_handler_when_local_root_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L228"}, {"id": "logging_test_manager_rationale_1", "label": "Tests for the logger factory + ``configure_logging`` in ``exlab_wizard.logging.m", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L1"}, {"id": "logging_test_manager_rationale_31", "label": "Redirect ``os_central_log_path`` to ``tmp_path`` so manager tests don't writ", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L31"}, {"id": "logging_test_manager_rationale_113", "label": "First call with ``config=None`` installs the queue-handler chain at INFO.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L113"}, {"id": "logging_test_manager_rationale_122", "label": "``LoggingConfig.level`` drives the root threshold (\u00a716.5).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L122"}, {"id": "logging_test_manager_rationale_129", "label": "\u00a716.2.2: re-calling ``configure_logging`` tears down + rebuilds. The launch", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L129"}, {"id": "logging_test_manager_rationale_144", "label": "A logger.info() call in the configured handler chain produces a record that", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L144"}, {"id": "logging_test_manager_rationale_155", "label": "A second ``_shutdown_logging`` call must be a no-op (used by quit).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L155"}, {"id": "logging_test_manager_rationale_162", "label": "The downstream handler chain must include a ``RotatingFileHandler`` against", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L162"}, {"id": "logging_test_manager_rationale_177", "label": "\u00a716.2.1: the stderr handler is capped at WARN even when the global threshold", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L177"}, {"id": "logging_test_manager_rationale_193", "label": "A ``LoggingConfig`` with a level that ``getLevelName`` doesn't know about de", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L193"}, {"id": "logging_test_manager_rationale_208", "label": "If a stray ``QueueHandler`` is on the root logger before ``configure_logging", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L208"}, {"id": "logging_test_manager_rationale_231", "label": "When ``local_root`` is configured, the listener chain includes an :class:`Eq", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L231"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_handlers", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "unittest", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "exlab_wizard_logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "exlab_wizard_logging_manager", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_isolate_central_log", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_get_logger_importable_from_package", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_get_logger_importable_from_manager_module", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_package_and_manager_export_the_same_callable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_get_logger_returns_stdlib_logger_instance", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_get_logger_sets_name_on_returned_logger", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_get_logger_is_idempotent_for_same_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_get_logger_returns_distinct_loggers_for_different_names", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_logging_package_all_contains_get_logger", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L103", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_configure_logging_with_default_threshold_and_handlers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L112", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_configure_logging_applies_config_level", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L121", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_configure_logging_idempotent_does_not_accumulate_handlers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L128", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L143", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_shutdown_logging_is_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L154", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_configure_logging_installs_central_rotating_file_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L161", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_configure_logging_stderr_handler_is_warn_capped", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L176", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_resolve_threshold_unknown_level_falls_back_to_info", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L192", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L207", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "target": "logging_test_manager_test_build_real_handlers_includes_equipment_handler_when_local_root_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L228", "weight": 1.0}, {"source": "logging_test_manager_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_logging_test_manager_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L1", "weight": 1.0}, {"source": "logging_test_manager_rationale_31", "target": "logging_test_manager_isolate_central_log", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L31", "weight": 1.0}, {"source": "logging_test_manager_rationale_113", "target": "logging_test_manager_test_configure_logging_with_default_threshold_and_handlers", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L113", "weight": 1.0}, {"source": "logging_test_manager_rationale_122", "target": "logging_test_manager_test_configure_logging_applies_config_level", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L122", "weight": 1.0}, {"source": "logging_test_manager_rationale_129", "target": "logging_test_manager_test_configure_logging_idempotent_does_not_accumulate_handlers", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L129", "weight": 1.0}, {"source": "logging_test_manager_rationale_144", "target": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L144", "weight": 1.0}, {"source": "logging_test_manager_rationale_155", "target": "logging_test_manager_test_shutdown_logging_is_idempotent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L155", "weight": 1.0}, {"source": "logging_test_manager_rationale_162", "target": "logging_test_manager_test_configure_logging_installs_central_rotating_file_handler", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L162", "weight": 1.0}, {"source": "logging_test_manager_rationale_177", "target": "logging_test_manager_test_configure_logging_stderr_handler_is_warn_capped", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L177", "weight": 1.0}, {"source": "logging_test_manager_rationale_193", "target": "logging_test_manager_test_resolve_threshold_unknown_level_falls_back_to_info", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L193", "weight": 1.0}, {"source": "logging_test_manager_rationale_208", "target": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L208", "weight": 1.0}, {"source": "logging_test_manager_rationale_231", "target": "logging_test_manager_test_build_real_handlers_includes_equipment_handler_when_local_root_set", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L231", "weight": 1.0}], "raw_calls": [{"caller_nid": "logging_test_manager_isolate_central_log", "callee": "patch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L35"}, {"caller_nid": "logging_test_manager_isolate_central_log", "callee": "patch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L39"}, {"caller_nid": "logging_test_manager_isolate_central_log", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L41"}, {"caller_nid": "logging_test_manager_isolate_central_log", "callee": "_shutdown_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L47"}, {"caller_nid": "logging_test_manager_test_get_logger_importable_from_package", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L53"}, {"caller_nid": "logging_test_manager_test_get_logger_importable_from_manager_module", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L59"}, {"caller_nid": "logging_test_manager_test_get_logger_returns_stdlib_logger_instance", "callee": "get_logger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L72"}, {"caller_nid": "logging_test_manager_test_get_logger_returns_stdlib_logger_instance", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L73"}, {"caller_nid": "logging_test_manager_test_get_logger_sets_name_on_returned_logger", "callee": "get_logger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L79"}, {"caller_nid": "logging_test_manager_test_get_logger_is_idempotent_for_same_name", "callee": "get_logger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L88"}, {"caller_nid": "logging_test_manager_test_get_logger_is_idempotent_for_same_name", "callee": "get_logger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L89"}, {"caller_nid": "logging_test_manager_test_get_logger_returns_distinct_loggers_for_different_names", "callee": "get_logger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L96"}, {"caller_nid": "logging_test_manager_test_get_logger_returns_distinct_loggers_for_different_names", "callee": "get_logger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L97"}, {"caller_nid": "logging_test_manager_test_configure_logging_with_default_threshold_and_handlers", "callee": "configure_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L114"}, {"caller_nid": "logging_test_manager_test_configure_logging_with_default_threshold_and_handlers", "callee": "getLogger", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L115"}, {"caller_nid": "logging_test_manager_test_configure_logging_with_default_threshold_and_handlers", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L116"}, {"caller_nid": "logging_test_manager_test_configure_logging_with_default_threshold_and_handlers", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L117"}, {"caller_nid": "logging_test_manager_test_configure_logging_applies_config_level", "callee": "configure_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L123"}, {"caller_nid": "logging_test_manager_test_configure_logging_applies_config_level", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L123"}, {"caller_nid": "logging_test_manager_test_configure_logging_applies_config_level", "callee": "getLogger", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L124"}, {"caller_nid": "logging_test_manager_test_configure_logging_idempotent_does_not_accumulate_handlers", "callee": "configure_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L135"}, {"caller_nid": "logging_test_manager_test_configure_logging_idempotent_does_not_accumulate_handlers", "callee": "configure_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L136"}, {"caller_nid": "logging_test_manager_test_configure_logging_idempotent_does_not_accumulate_handlers", "callee": "configure_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L137"}, {"caller_nid": "logging_test_manager_test_configure_logging_idempotent_does_not_accumulate_handlers", "callee": "getLogger", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L138"}, {"caller_nid": "logging_test_manager_test_configure_logging_idempotent_does_not_accumulate_handlers", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L139"}, {"caller_nid": "logging_test_manager_test_configure_logging_idempotent_does_not_accumulate_handlers", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L140"}, {"caller_nid": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", "callee": "configure_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L146"}, {"caller_nid": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L146"}, {"caller_nid": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", "callee": "getLogger", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L147"}, {"caller_nid": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L149"}, {"caller_nid": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", "callee": "_shutdown_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L151"}, {"caller_nid": "logging_test_manager_test_shutdown_logging_is_idempotent", "callee": "configure_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L156"}, {"caller_nid": "logging_test_manager_test_shutdown_logging_is_idempotent", "callee": "_shutdown_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L157"}, {"caller_nid": "logging_test_manager_test_shutdown_logging_is_idempotent", "callee": "_shutdown_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L158"}, {"caller_nid": "logging_test_manager_test_configure_logging_installs_central_rotating_file_handler", "callee": "configure_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L164"}, {"caller_nid": "logging_test_manager_test_configure_logging_installs_central_rotating_file_handler", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L164"}, {"caller_nid": "logging_test_manager_test_configure_logging_installs_central_rotating_file_handler", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L168"}, {"caller_nid": "logging_test_manager_test_configure_logging_installs_central_rotating_file_handler", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L169"}, {"caller_nid": "logging_test_manager_test_configure_logging_stderr_handler_is_warn_capped", "callee": "configure_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L179"}, {"caller_nid": "logging_test_manager_test_configure_logging_stderr_handler_is_warn_capped", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L179"}, {"caller_nid": "logging_test_manager_test_configure_logging_stderr_handler_is_warn_capped", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L186"}, {"caller_nid": "logging_test_manager_test_configure_logging_stderr_handler_is_warn_capped", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L187"}, {"caller_nid": "logging_test_manager_test_configure_logging_stderr_handler_is_warn_capped", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L189"}, {"caller_nid": "logging_test_manager_test_resolve_threshold_unknown_level_falls_back_to_info", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L201"}, {"caller_nid": "logging_test_manager_test_resolve_threshold_unknown_level_falls_back_to_info", "callee": "__setattr__", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L202"}, {"caller_nid": "logging_test_manager_test_resolve_threshold_unknown_level_falls_back_to_info", "callee": "_resolve_threshold", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L203"}, {"caller_nid": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", "callee": "QueueHandler", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L213"}, {"caller_nid": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", "callee": "Queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L213"}, {"caller_nid": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", "callee": "getLogger", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L214"}, {"caller_nid": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", "callee": "addHandler", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L215"}, {"caller_nid": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", "callee": "configure_logging", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L217"}, {"caller_nid": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", "callee": "removeHandler", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L221"}, {"caller_nid": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L224"}, {"caller_nid": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L225"}, {"caller_nid": "logging_test_manager_test_build_real_handlers_includes_equipment_handler_when_local_root_set", "callee": "_build_real_handlers", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L237"}, {"caller_nid": "logging_test_manager_test_build_real_handlers_includes_equipment_handler_when_local_root_set", "callee": "StructuredTagFormatter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L241"}, {"caller_nid": "logging_test_manager_test_build_real_handlers_includes_equipment_handler_when_local_root_set", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L243"}, {"caller_nid": "logging_test_manager_test_build_real_handlers_includes_equipment_handler_when_local_root_set", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L243"}, {"caller_nid": "logging_test_manager_test_build_real_handlers_includes_equipment_handler_when_local_root_set", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py", "source_location": "L245"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/48758daf3ed586f6c0719a7a6f9e095f47e5b2f7024887ab2409179c142b65e6.json b/graphify-out/cache/ast/48758daf3ed586f6c0719a7a6f9e095f47e5b2f7024887ab2409179c142b65e6.json new file mode 100644 index 0000000..7184a70 --- /dev/null +++ b/graphify-out/cache/ast/48758daf3ed586f6c0719a7a6f9e095f47e5b2f7024887ab2409179c142b65e6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_internal_readme_md", "label": "README.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L1"}, {"id": "internal_readme_internal_bundled_starter_content", "label": "`_internal/` -- bundled starter content", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L1"}, {"id": "internal_readme_layout", "label": "Layout", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L13"}, {"id": "internal_readme_codeblock_1", "label": "code:block1 (_internal/)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L15"}, {"id": "internal_readme_populating_for_v1", "label": "Populating for v1", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L24"}, {"id": "internal_readme_bundled_templates_spec_5", "label": "Bundled templates (Spec \u00a75)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L30"}, {"id": "internal_readme_bundled_plugins_spec_6_5_6_6", "label": "Bundled plugins (Spec \u00a76.5, \u00a76.6)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L47"}, {"id": "internal_readme_v1_status", "label": "v1 status", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L58"}], "edges": [{"source": "users_alex_projects_exlabwizard_internal_readme_md", "target": "internal_readme_internal_bundled_starter_content", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L1", "weight": 1.0}, {"source": "internal_readme_internal_bundled_starter_content", "target": "internal_readme_layout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L13", "weight": 1.0}, {"source": "internal_readme_layout", "target": "internal_readme_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L15", "weight": 1.0}, {"source": "internal_readme_internal_bundled_starter_content", "target": "internal_readme_populating_for_v1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L24", "weight": 1.0}, {"source": "internal_readme_populating_for_v1", "target": "internal_readme_bundled_templates_spec_5", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L30", "weight": 1.0}, {"source": "internal_readme_populating_for_v1", "target": "internal_readme_bundled_plugins_spec_6_5_6_6", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L47", "weight": 1.0}, {"source": "internal_readme_internal_bundled_starter_content", "target": "internal_readme_v1_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/_internal/README.md", "source_location": "L58", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/48ff8b91831724a572c51e3d0a3bd3723912ba556421144950abc9eaa5a018ba.json b/graphify-out/cache/ast/48ff8b91831724a572c51e3d0a3bd3723912ba556421144950abc9eaa5a018ba.json new file mode 100644 index 0000000..4421bc7 --- /dev/null +++ b/graphify-out/cache/ast/48ff8b91831724a572c51e3d0a3bd3723912ba556421144950abc9eaa5a018ba.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "label": "test_operations.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L1"}, {"id": "api_test_operations_ready_config", "label": "_ready_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L23"}, {"id": "api_test_operations_stubcontroller", "label": "_StubController", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L45"}, {"id": "api_test_operations_stubcontroller_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L46"}, {"id": "api_test_operations_make_project_request", "label": "_make_project_request()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L50"}, {"id": "api_test_operations_test_get_operations_lists_in_flight_sessions", "label": "test_get_operations_lists_in_flight_sessions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L67"}, {"id": "api_test_operations_test_get_operations_excludes_done_and_aborted", "label": "test_get_operations_excludes_done_and_aborted()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L86"}, {"id": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "label": "test_get_operations_emits_plugin_name_when_input_required()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L108"}, {"id": "api_test_operations_test_get_operations_503_when_controller_missing", "label": "test_get_operations_503_when_controller_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L127"}, {"id": "api_test_operations_rationale_1", "label": "Unit tests for the ``/operations`` router.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "fastapi_testclient", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "exlab_wizard_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "exlab_wizard_controller_creation", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "exlab_wizard_controller_session_store", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "exlab_wizard_controller_state_machine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "api_test_operations_ready_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "api_test_operations_stubcontroller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L45", "weight": 1.0}, {"source": "api_test_operations_stubcontroller", "target": "api_test_operations_stubcontroller_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "api_test_operations_make_project_request", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "api_test_operations_test_get_operations_lists_in_flight_sessions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "api_test_operations_test_get_operations_excludes_done_and_aborted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L86", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L108", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "target": "api_test_operations_test_get_operations_503_when_controller_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L127", "weight": 1.0}, {"source": "api_test_operations_test_get_operations_lists_in_flight_sessions", "target": "api_test_operations_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L68", "weight": 1.0}, {"source": "api_test_operations_test_get_operations_lists_in_flight_sessions", "target": "api_test_operations_make_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L69", "weight": 1.0}, {"source": "api_test_operations_test_get_operations_lists_in_flight_sessions", "target": "api_test_operations_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L74", "weight": 1.0}, {"source": "api_test_operations_test_get_operations_excludes_done_and_aborted", "target": "api_test_operations_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L87", "weight": 1.0}, {"source": "api_test_operations_test_get_operations_excludes_done_and_aborted", "target": "api_test_operations_make_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L88", "weight": 1.0}, {"source": "api_test_operations_test_get_operations_excludes_done_and_aborted", "target": "api_test_operations_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L100", "weight": 1.0}, {"source": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "target": "api_test_operations_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L109", "weight": 1.0}, {"source": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "target": "api_test_operations_make_project_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L110", "weight": 1.0}, {"source": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "target": "api_test_operations_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L117", "weight": 1.0}, {"source": "api_test_operations_test_get_operations_503_when_controller_missing", "target": "api_test_operations_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L128", "weight": 1.0}, {"source": "api_test_operations_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_api_test_operations_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_test_operations_ready_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L24"}, {"caller_nid": "api_test_operations_ready_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L25"}, {"caller_nid": "api_test_operations_ready_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L27"}, {"caller_nid": "api_test_operations_ready_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L32"}, {"caller_nid": "api_test_operations_ready_config", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L40"}, {"caller_nid": "api_test_operations_ready_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L41"}, {"caller_nid": "api_test_operations_stubcontroller_init", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L47"}, {"caller_nid": "api_test_operations_make_project_request", "callee": "ProjectCreateRequest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L51"}, {"caller_nid": "api_test_operations_make_project_request", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L53"}, {"caller_nid": "api_test_operations_test_get_operations_lists_in_flight_sessions", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L69"}, {"caller_nid": "api_test_operations_test_get_operations_lists_in_flight_sessions", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L70"}, {"caller_nid": "api_test_operations_test_get_operations_lists_in_flight_sessions", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L71"}, {"caller_nid": "api_test_operations_test_get_operations_lists_in_flight_sessions", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L72"}, {"caller_nid": "api_test_operations_test_get_operations_lists_in_flight_sessions", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L73"}, {"caller_nid": "api_test_operations_test_get_operations_lists_in_flight_sessions", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L76"}, {"caller_nid": "api_test_operations_test_get_operations_lists_in_flight_sessions", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L77"}, {"caller_nid": "api_test_operations_test_get_operations_lists_in_flight_sessions", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L78"}, {"caller_nid": "api_test_operations_test_get_operations_lists_in_flight_sessions", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L80"}, {"caller_nid": "api_test_operations_test_get_operations_lists_in_flight_sessions", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L81"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L88"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L89"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L90"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L91"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L92"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L93"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L94"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L95"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L96"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L97"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L98"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L99"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L102"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L103"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L104"}, {"caller_nid": "api_test_operations_test_get_operations_excludes_done_and_aborted", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L104"}, {"caller_nid": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L110"}, {"caller_nid": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L111"}, {"caller_nid": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L112"}, {"caller_nid": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L113"}, {"caller_nid": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L114"}, {"caller_nid": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L116"}, {"caller_nid": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L119"}, {"caller_nid": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L120"}, {"caller_nid": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L121"}, {"caller_nid": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L121"}, {"caller_nid": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L122"}, {"caller_nid": "api_test_operations_test_get_operations_503_when_controller_missing", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L128"}, {"caller_nid": "api_test_operations_test_get_operations_503_when_controller_missing", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L129"}, {"caller_nid": "api_test_operations_test_get_operations_503_when_controller_missing", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L130"}, {"caller_nid": "api_test_operations_test_get_operations_503_when_controller_missing", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py", "source_location": "L131"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/497a3941849d31cca9052858983af1c7ce9aa10fa2c37733323c80bd344ab5ea.json b/graphify-out/cache/ast/497a3941849d31cca9052858983af1c7ce9aa10fa2c37733323c80bd344ab5ea.json new file mode 100644 index 0000000..6cdf1af --- /dev/null +++ b/graphify-out/cache/ast/497a3941849d31cca9052858983af1c7ce9aa10fa2c37733323c80bd344ab5ea.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "label": "test_nas_client_extra.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1"}, {"id": "sync_test_nas_client_extra_build_config", "label": "_build_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L51"}, {"id": "sync_test_nas_client_extra_make_creation", "label": "_make_creation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L87"}, {"id": "sync_test_nas_client_extra_populate_run", "label": "_populate_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L101"}, {"id": "sync_test_nas_client_extra_factory", "label": "_factory()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L113"}, {"id": "sync_test_nas_client_extra_stubkeyring", "label": "_StubKeyring", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L124"}, {"id": "sync_test_nas_client_extra_stubkeyring_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L127"}, {"id": "sync_test_nas_client_extra_stubkeyring_get_password", "label": ".get_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L130"}, {"id": "sync_test_nas_client_extra_test_build_transport_driver_sftp", "label": "test_build_transport_driver_sftp()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L135"}, {"id": "sync_test_nas_client_extra_test_build_transport_driver_smb", "label": "test_build_transport_driver_smb()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L154"}, {"id": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "label": "test_hash_mismatch_first_failure_retries()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L180"}, {"id": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "label": "test_hash_mismatch_second_failure_terminal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L237"}, {"id": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "label": "test_cleanup_full_delete_when_retain_cache_false()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L275"}, {"id": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "label": "test_cleanup_retain_cache_keeps_metadata()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L311"}, {"id": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "label": "test_cleanup_disabled_keeps_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L349"}, {"id": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "label": "test_cleanup_eligible_when_min_verify_passes_unmet()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L387"}, {"id": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "label": "test_cleanup_blocked_by_remote_stat()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L423"}, {"id": "sync_test_nas_client_extra_client", "label": "_client()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L465"}, {"id": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "label": "test_delete_local_skips_keep_local_files_incl_nested()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L475"}, {"id": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "label": "test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L504"}, {"id": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "label": "test_delete_local_does_not_descend_or_remove_directory_symlink()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L537"}, {"id": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", "label": "test_delete_local_keep_local_survives_retain_cache_false()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L563"}, {"id": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", "label": "test_delete_local_retain_cache_false_drops_whole_run_without_keep_local()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L580"}, {"id": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "label": "test_cleanup_marks_cleared_in_sync_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L594"}, {"id": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "label": "test_cleanup_keeps_keep_local_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L634"}, {"id": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "label": "test_cleanup_deferred_when_run_only_partially_synced()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L677"}, {"id": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "label": "test_worker_marks_failed_when_local_run_vanished()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L734"}, {"id": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "label": "test_verifier_mismatch_first_failure_then_pass()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L780"}, {"id": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "label": "test_verifier_mismatch_second_failure_terminal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L831"}, {"id": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", "label": "test_default_push_factory_uses_real_driver()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L871"}, {"id": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "label": "test_network_error_records_backoff_retry()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L895"}, {"id": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", "label": "test_compute_nas_path_returns_none_when_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L929"}, {"id": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", "label": "test_build_transport_driver_rejects_unknown_type()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L945"}, {"id": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", "label": "test_mark_synced_no_op_when_creation_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L963"}, {"id": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", "label": "test_delete_local_no_op_when_path_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L981"}, {"id": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", "label": "test_infer_equipment_id_falls_back_to_first()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L995"}, {"id": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "label": "test_partial_batch_credits_verified_files_in_sync_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1026"}, {"id": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "label": "test_full_batch_credits_every_file_in_sync_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1083"}, {"id": "sync_test_nas_client_extra_rationale_1", "label": "Extra coverage tests for ``exlab_wizard.sync.nas_client``. These hit the sub-br", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1"}, {"id": "sync_test_nas_client_extra_rationale_125", "label": "Minimal keyring stub returning a fixed password by username.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L125"}, {"id": "sync_test_nas_client_extra_rationale_181", "label": "A first hash-mismatch from the transport re-queues without backoff. The fir", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L181"}, {"id": "sync_test_nas_client_extra_rationale_238", "label": "A second consecutive hash-mismatch terminates FAILED.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L238"}, {"id": "sync_test_nas_client_extra_rationale_276", "label": "``retain_cache=False`` removes the entire run directory after CLEANED.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L276"}, {"id": "sync_test_nas_client_extra_rationale_312", "label": "``retain_cache=True`` deletes data files but keeps ``.exlab-wizard/``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L312"}, {"id": "sync_test_nas_client_extra_rationale_350", "label": "``nas_cleanup.enabled=False`` -> job stays VERIFIED, no cleanup.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L350"}, {"id": "sync_test_nas_client_extra_rationale_388", "label": "Job lands in CLEANUP_ELIGIBLE when min_verify_passes > current passes.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L388"}, {"id": "sync_test_nas_client_extra_rationale_424", "label": "A failing remote_stat keeps the job in CLEANUP_ELIGIBLE, not CLEANED.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L424"}, {"id": "sync_test_nas_client_extra_rationale_466", "label": "Build an un-init'd client for direct ``_delete_local`` calls.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L466"}, {"id": "sync_test_nas_client_extra_rationale_476", "label": "``_delete_local`` keeps ``keep_local`` files, incl. a nested one.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L476"}, {"id": "sync_test_nas_client_extra_rationale_505", "label": "A directory holding only deleted files is pruned (deepest-first); a parent s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L505"}, {"id": "sync_test_nas_client_extra_rationale_538", "label": "A directory symlink inside the run is left untouched -- its target's content", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L538"}, {"id": "sync_test_nas_client_extra_rationale_564", "label": "A ``keep_local`` file survives even when ``retain_cache=False``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L564"}, {"id": "sync_test_nas_client_extra_rationale_583", "label": "With ``retain_cache=False`` and no kept files the run dir is removed.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L583"}, {"id": "sync_test_nas_client_extra_rationale_595", "label": "A full cleanup pass stamps ``cleared_at`` in ``sync_state.json``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L595"}, {"id": "sync_test_nas_client_extra_rationale_635", "label": "A file flagged ``keep_local`` survives the cleanup sweep.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L635"}, {"id": "sync_test_nas_client_extra_rationale_678", "label": "Cleanup does not run while a tracked file remains unverified. A pre-existin", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L678"}, {"id": "sync_test_nas_client_extra_rationale_735", "label": "A run dir deleted between enqueue and worker pick -> FAILED.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L735"}, {"id": "sync_test_nas_client_extra_rationale_781", "label": "A rclone-check mismatch retries once, then passes.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L781"}, {"id": "sync_test_nas_client_extra_rationale_832", "label": "Two consecutive verifier mismatches terminate FAILED.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L832"}, {"id": "sync_test_nas_client_extra_rationale_872", "label": "When no factory is injected, the client builds the per-equipment driver. We", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L872"}, {"id": "sync_test_nas_client_extra_rationale_930", "label": "Helper returns ``None`` when ``creation.paths.nas`` is the empty string.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L930"}, {"id": "sync_test_nas_client_extra_rationale_946", "label": "An unknown transport type raises ValueError from the helper.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L946"}, {"id": "sync_test_nas_client_extra_rationale_964", "label": "``_mark_synced`` is a no-op when ``creation.json`` doesn't exist.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L964"}, {"id": "sync_test_nas_client_extra_rationale_982", "label": "``_delete_local`` is a no-op when the run directory is already gone.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L982"}, {"id": "sync_test_nas_client_extra_rationale_996", "label": "If neither ``creation.paths.local`` nor ``run_path`` contains a configured e", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L996"}, {"id": "sync_test_nas_client_extra_rationale_1027", "label": "A batch where one file fails verification still credits the others in ``sync", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1027"}, {"id": "sync_test_nas_client_extra_rationale_1084", "label": "A fully-successful batch credits every verified file in sync_state.json.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1084"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "exlab_wizard_cache_creation_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "exlab_wizard_sync_nas_client", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "exlab_wizard_sync_queue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "exlab_wizard_sync_transports", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "exlab_wizard_validator_engine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "tests_unit_sync_helpers", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_build_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_make_creation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L87", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_populate_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L101", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_factory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L113", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_stubkeyring", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L124", "weight": 1.0}, {"source": "sync_test_nas_client_extra_stubkeyring", "target": "sync_test_nas_client_extra_stubkeyring_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L127", "weight": 1.0}, {"source": "sync_test_nas_client_extra_stubkeyring", "target": "sync_test_nas_client_extra_stubkeyring_get_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L130", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_build_transport_driver_sftp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_build_transport_driver_smb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L154", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L180", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L237", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L275", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L311", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L349", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L387", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L423", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_client", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L465", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L475", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L504", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L537", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L563", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L580", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L594", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L634", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L677", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L734", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L780", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L831", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L871", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L895", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L929", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L945", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L963", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L981", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L995", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1026", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "target": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1083", "weight": 1.0}, {"source": "sync_test_nas_client_extra_populate_run", "target": "sync_test_nas_client_extra_make_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L109", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_build_transport_driver_sftp", "target": "sync_test_nas_client_extra_stubkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L149", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_build_transport_driver_smb", "target": "sync_test_nas_client_extra_stubkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L170", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L187", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L188", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L207", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L239", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L240", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L253", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L277", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L278", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L291", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L313", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L314", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L327", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L351", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L352", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L365", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L389", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L390", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L403", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L425", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L426", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L439", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L489", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "target": "sync_test_nas_client_extra_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L490", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L522", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "target": "sync_test_nas_client_extra_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L523", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L551", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "target": "sync_test_nas_client_extra_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L552", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L570", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", "target": "sync_test_nas_client_extra_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L571", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L588", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", "target": "sync_test_nas_client_extra_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L589", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L598", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L599", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L612", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L638", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L639", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L656", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L687", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L688", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L705", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L736", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L737", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L754", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L784", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L785", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L809", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L835", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L836", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L853", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L878", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L896", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L897", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L910", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", "target": "sync_test_nas_client_extra_stubkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L960", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L965", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L983", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L998", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1033", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1034", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1047", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "target": "sync_test_nas_client_extra_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1087", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "target": "sync_test_nas_client_extra_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1088", "weight": 1.0}, {"source": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "target": "sync_test_nas_client_extra_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1101", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_extra_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_125", "target": "sync_test_nas_client_extra_stubkeyring", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L125", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_181", "target": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L181", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_238", "target": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L238", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_276", "target": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L276", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_312", "target": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L312", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_350", "target": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L350", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_388", "target": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L388", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_424", "target": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L424", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_466", "target": "sync_test_nas_client_extra_client", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L466", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_476", "target": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L476", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_505", "target": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L505", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_538", "target": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L538", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_564", "target": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L564", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_583", "target": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L583", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_595", "target": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L595", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_635", "target": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L635", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_678", "target": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L678", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_735", "target": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L735", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_781", "target": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L781", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_832", "target": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L832", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_872", "target": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L872", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_930", "target": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L930", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_946", "target": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L946", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_964", "target": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L964", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_982", "target": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L982", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_996", "target": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L996", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_1027", "target": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1027", "weight": 1.0}, {"source": "sync_test_nas_client_extra_rationale_1084", "target": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1084", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_test_nas_client_extra_build_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L60"}, {"caller_nid": "sync_test_nas_client_extra_build_config", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L65"}, {"caller_nid": "sync_test_nas_client_extra_build_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L67"}, {"caller_nid": "sync_test_nas_client_extra_build_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L68"}, {"caller_nid": "sync_test_nas_client_extra_build_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L68"}, {"caller_nid": "sync_test_nas_client_extra_build_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L70"}, {"caller_nid": "sync_test_nas_client_extra_build_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L73"}, {"caller_nid": "sync_test_nas_client_extra_build_config", "callee": "NASCleanupConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L78"}, {"caller_nid": "sync_test_nas_client_extra_make_creation", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L88"}, {"caller_nid": "sync_test_nas_client_extra_make_creation", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L94"}, {"caller_nid": "sync_test_nas_client_extra_make_creation", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L95"}, {"caller_nid": "sync_test_nas_client_extra_make_creation", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L97"}, {"caller_nid": "sync_test_nas_client_extra_make_creation", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L97"}, {"caller_nid": "sync_test_nas_client_extra_populate_run", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L103"}, {"caller_nid": "sync_test_nas_client_extra_populate_run", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L104"}, {"caller_nid": "sync_test_nas_client_extra_populate_run", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L105"}, {"caller_nid": "sync_test_nas_client_extra_populate_run", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L106"}, {"caller_nid": "sync_test_nas_client_extra_populate_run", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L108"}, {"caller_nid": "sync_test_nas_client_extra_populate_run", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L109"}, {"caller_nid": "sync_test_nas_client_extra_populate_run", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L109"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_sftp", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L136"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_sftp", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L139"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_sftp", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L141"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_sftp", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L146"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_sftp", "callee": "_build_transport_driver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L149"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_sftp", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L151"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_smb", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L155"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_smb", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L158"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_smb", "callee": "RcloneSmbTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L160"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_smb", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L167"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_smb", "callee": "_build_transport_driver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L170"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_smb", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L172"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L189"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L202"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L205"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "callee": "local_check_factory", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L213"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L216"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L218"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L220"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L221"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L228"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L230"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L234"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L241"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L248"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L251"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L256"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L258"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L259"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L260"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L263"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L265"}, {"caller_nid": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L267"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L279"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L286"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L289"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "callee": "local_check_factory", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L292"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L295"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L297"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L298"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L299"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L302"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L304"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L306"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L308"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L315"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L322"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L325"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "local_check_factory", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L328"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L331"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L333"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L334"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L335"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L338"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L340"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L342"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L343"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L344"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L346"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L353"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L360"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L363"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "callee": "local_check_factory", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L366"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L369"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L371"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L373"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L374"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L377"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L379"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L381"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L382"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L384"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L391"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L398"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L401"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "callee": "local_check_factory", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L404"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L407"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L409"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L410"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L411"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L414"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L416"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L418"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L420"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L427"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L434"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L437"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "callee": "local_check_factory", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L440"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L444"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L446"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L447"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L448"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L451"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L453"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L455"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L457"}, {"caller_nid": "sync_test_nas_client_extra_client", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L467"}, {"caller_nid": "sync_test_nas_client_extra_client", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L470"}, {"caller_nid": "sync_test_nas_client_extra_client", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L471"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L478"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L479"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L480"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L482"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L483"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L484"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L486"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L487"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "_delete_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L491"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L494"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L495"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L496"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L498"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L499"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L501"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L508"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L511"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L512"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L513"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L514"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L518"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L519"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L520"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "_delete_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L524"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L527"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L528"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L530"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L532"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L534"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L542"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L543"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L546"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L547"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "callee": "symlink_to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L549"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "callee": "_delete_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L553"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L553"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L556"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "callee": "is_symlink", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L558"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L559"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L560"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L566"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L567"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L568"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", "callee": "_delete_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L572"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L575"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L576"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L577"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L585"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L586"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", "callee": "_delete_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L590"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L590"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L591"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L600"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L607"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L610"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "local_check_factory", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L613"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L616"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L618"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L619"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L620"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L623"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L625"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L627"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L629"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L629"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", "callee": "rollup_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L631"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L640"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L641"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "set_keep_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L643"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L650"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L653"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "local_check_factory", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L657"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L660"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L662"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L663"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L664"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L667"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L669"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L671"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L672"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L674"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L689"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L690"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L692"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L699"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L702"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "local_check_factory", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L706"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L709"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L711"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L712"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L713"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L716"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L718"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L720"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L721"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L724"}, {"caller_nid": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L726"}, {"caller_nid": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L738"}, {"caller_nid": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L749"}, {"caller_nid": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L752"}, {"caller_nid": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L757"}, {"caller_nid": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L759"}, {"caller_nid": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "callee": "rmtree", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L763"}, {"caller_nid": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L764"}, {"caller_nid": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L765"}, {"caller_nid": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L768"}, {"caller_nid": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L770"}, {"caller_nid": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L772"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L786"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L804"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L807"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L813"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L815"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L816"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L817"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L824"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L826"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L828"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L837"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L848"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L851"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L857"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L859"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L860"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L861"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L864"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L866"}, {"caller_nid": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L868"}, {"caller_nid": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L879"}, {"caller_nid": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L880"}, {"caller_nid": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L883"}, {"caller_nid": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L887"}, {"caller_nid": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", "callee": "_build_push", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L889"}, {"caller_nid": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L890"}, {"caller_nid": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L892"}, {"caller_nid": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L898"}, {"caller_nid": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L905"}, {"caller_nid": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L908"}, {"caller_nid": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L913"}, {"caller_nid": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L915"}, {"caller_nid": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L916"}, {"caller_nid": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L917"}, {"caller_nid": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L920"}, {"caller_nid": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L922"}, {"caller_nid": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L926"}, {"caller_nid": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L931"}, {"caller_nid": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L937"}, {"caller_nid": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L938"}, {"caller_nid": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L940"}, {"caller_nid": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", "callee": "_compute_nas_path", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L942"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L950"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", "callee": "model_construct", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L952"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L955"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", "callee": "_BogusTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L957"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L959"}, {"caller_nid": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", "callee": "_build_transport_driver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L960"}, {"caller_nid": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L966"}, {"caller_nid": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L967"}, {"caller_nid": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L970"}, {"caller_nid": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L973"}, {"caller_nid": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", "callee": "_mark_synced", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L976"}, {"caller_nid": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L978"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L984"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L985"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L988"}, {"caller_nid": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", "callee": "_delete_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L992"}, {"caller_nid": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L999"}, {"caller_nid": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1000"}, {"caller_nid": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1003"}, {"caller_nid": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1006"}, {"caller_nid": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1012"}, {"caller_nid": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1013"}, {"caller_nid": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1015"}, {"caller_nid": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", "callee": "_infer_equipment_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1017"}, {"caller_nid": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1017"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1035"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1036"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1041"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1044"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "corrupt_one_check_factory", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1048"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1051"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1053"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1056"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1057"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1060"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1062"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1068"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1077"}, {"caller_nid": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1080"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1089"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1090"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1095"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1098"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "local_check_factory", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1102"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1105"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1107"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1108"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1109"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1116"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1118"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1119"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1120"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "values", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1121"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1127"}, {"caller_nid": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py", "source_location": "L1129"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/4ac23e27349983325d860067f92b6b832f614d6c2520696b0bd0a550e1501245.json b/graphify-out/cache/ast/4ac23e27349983325d860067f92b6b832f614d6c2520696b0bd0a550e1501245.json new file mode 100644 index 0000000..0a70d8e --- /dev/null +++ b/graphify-out/cache/ast/4ac23e27349983325d860067f92b6b832f614d6c2520696b0bd0a550e1501245.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_limits_py", "label": "limits.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/limits.py", "source_location": "L1"}, {"id": "constants_limits_rationale_1", "label": "Hard-coded numeric limits, timeouts, and policy ceilings. Every value here is c", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/limits.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_limits_py", "target": "exlab_wizard_constants_filenames", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/limits.py", "source_location": "L10", "weight": 1.0}, {"source": "constants_limits_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_limits_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/limits.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/4ad4ca90c59e062c96b1037e4feabda29fa391c3455c9df842f0fa7d46a3408e.json b/graphify-out/cache/ast/4ad4ca90c59e062c96b1037e4feabda29fa391c3455c9df842f0fa7d46a3408e.json new file mode 100644 index 0000000..c917257 --- /dev/null +++ b/graphify-out/cache/ast/4ad4ca90c59e062c96b1037e4feabda29fa391c3455c9df842f0fa7d46a3408e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_utils_test_state_py", "label": "test_state.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L1"}, {"id": "utils_test_state_state", "label": "_State", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L12"}, {"id": "strenum", "label": "StrEnum", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "utils_test_state_test_allowed_transition_returns_none", "label": "test_allowed_transition_returns_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L25"}, {"id": "utils_test_state_test_disallowed_transition_raises", "label": "test_disallowed_transition_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L29"}, {"id": "utils_test_state_test_terminal_transition_raises", "label": "test_terminal_transition_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L34"}, {"id": "utils_test_state_test_unknown_source_raises", "label": "test_unknown_source_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L39"}, {"id": "utils_test_state_rationale_1", "label": "Tests for ``exlab_wizard.utils.state``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_state_py", "target": "enum", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_state_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_state_py", "target": "exlab_wizard_utils_state", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_state_py", "target": "utils_test_state_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L12", "weight": 1.0}, {"source": "utils_test_state_state", "target": "strenum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_state_py", "target": "utils_test_state_test_allowed_transition_returns_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_state_py", "target": "utils_test_state_test_disallowed_transition_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_state_py", "target": "utils_test_state_test_terminal_transition_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_state_py", "target": "utils_test_state_test_unknown_source_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L39", "weight": 1.0}, {"source": "utils_test_state_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_utils_test_state_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_test_state_test_allowed_transition_returns_none", "callee": "assert_forward_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L26"}, {"caller_nid": "utils_test_state_test_disallowed_transition_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L30"}, {"caller_nid": "utils_test_state_test_disallowed_transition_raises", "callee": "assert_forward_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L31"}, {"caller_nid": "utils_test_state_test_terminal_transition_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L35"}, {"caller_nid": "utils_test_state_test_terminal_transition_raises", "callee": "assert_forward_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L36"}, {"caller_nid": "utils_test_state_test_unknown_source_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L43"}, {"caller_nid": "utils_test_state_test_unknown_source_raises", "callee": "assert_forward_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py", "source_location": "L44"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/4b4c2fb61d4bd5320eab2ec1fcd6b85f1038250554682b78e29ac667918869ab.json b/graphify-out/cache/ast/4b4c2fb61d4bd5320eab2ec1fcd6b85f1038250554682b78e29ac667918869ab.json new file mode 100644 index 0000000..401c000 --- /dev/null +++ b/graphify-out/cache/ast/4b4c2fb61d4bd5320eab2ec1fcd6b85f1038250554682b78e29ac667918869ab.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_schemas_py", "label": "schemas.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L1"}, {"id": "lims_schemas_limsproject", "label": "LIMSProject", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L36"}, {"id": "struct", "label": "Struct", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "lims_schemas_limsuser", "label": "LIMSUser", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L60"}, {"id": "lims_schemas_healthstatus", "label": "HealthStatus", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L79"}, {"id": "lims_schemas_rationale_1", "label": "msgspec.Struct types for the LIMS read-only client. Backend Spec \u00a77.2. These ty", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L1"}, {"id": "lims_schemas_rationale_41", "label": "One LIMS project row. Backend Spec \u00a77.2.3. The ``metadata`` field is a JSON", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L41"}, {"id": "lims_schemas_rationale_66", "label": "One LIMS user row. Backend Spec \u00a77.2.3. Mirrors the upstream ``safe_user``", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L66"}, {"id": "lims_schemas_rationale_80", "label": "Result of ``LIMSClient.health_check()``. Backend Spec \u00a77.2.3. ``ok`` is Tru", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L80"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_schemas_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_schemas_py", "target": "msgspec", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_schemas_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_schemas_py", "target": "lims_schemas_limsproject", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L36", "weight": 1.0}, {"source": "lims_schemas_limsproject", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_schemas_py", "target": "lims_schemas_limsuser", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L60", "weight": 1.0}, {"source": "lims_schemas_limsuser", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_schemas_py", "target": "lims_schemas_healthstatus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L79", "weight": 1.0}, {"source": "lims_schemas_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_schemas_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L1", "weight": 1.0}, {"source": "lims_schemas_rationale_41", "target": "lims_schemas_limsproject", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L41", "weight": 1.0}, {"source": "lims_schemas_rationale_66", "target": "lims_schemas_limsuser", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L66", "weight": 1.0}, {"source": "lims_schemas_rationale_80", "target": "lims_schemas_healthstatus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py", "source_location": "L80", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/4b9f91ede10a213358caa5b02c88946f5ae78dd2be20f434b4f919e05bf641e6.json b/graphify-out/cache/ast/4b9f91ede10a213358caa5b02c88946f5ae78dd2be20f434b4f919e05bf641e6.json new file mode 100644 index 0000000..e1379a7 --- /dev/null +++ b/graphify-out/cache/ast/4b9f91ede10a213358caa5b02c88946f5ae78dd2be20f434b4f919e05bf641e6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_error_plugin_plugin_py", "label": "plugin.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L1"}, {"id": "error_plugin_plugin_errorplugin", "label": "ErrorPlugin", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L17"}, {"id": "plugin", "label": "Plugin", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "error_plugin_plugin_errorplugin_can_handle", "label": ".can_handle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L25"}, {"id": "error_plugin_plugin_errorplugin_transform", "label": ".transform()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L28"}, {"id": "error_plugin_plugin_rationale_1", "label": "error_plugin -- raises PluginError mid-transform. Exercises the Backend Spec \u00a76", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L1"}, {"id": "error_plugin_plugin_rationale_18", "label": "Always raises PluginError on transform.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L18"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_error_plugin_plugin_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_error_plugin_plugin_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_error_plugin_plugin_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_error_plugin_plugin_py", "target": "exlab_wizard_plugins", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_error_plugin_plugin_py", "target": "error_plugin_plugin_errorplugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L17", "weight": 1.0}, {"source": "error_plugin_plugin_errorplugin", "target": "plugin", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L17", "weight": 1.0}, {"source": "error_plugin_plugin_errorplugin", "target": "error_plugin_plugin_errorplugin_can_handle", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L25", "weight": 1.0}, {"source": "error_plugin_plugin_errorplugin", "target": "error_plugin_plugin_errorplugin_transform", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L28", "weight": 1.0}, {"source": "error_plugin_plugin_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_error_plugin_plugin_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L1", "weight": 1.0}, {"source": "error_plugin_plugin_rationale_18", "target": "error_plugin_plugin_errorplugin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L18", "weight": 1.0}], "raw_calls": [{"caller_nid": "error_plugin_plugin_errorplugin_transform", "callee": "PluginError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py", "source_location": "L29"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/4cee7330ad11ed90efc78f859a27e8874266d5445315c6ffc5dc7578bc0e88a2.json b/graphify-out/cache/ast/4cee7330ad11ed90efc78f859a27e8874266d5445315c6ffc5dc7578bc0e88a2.json new file mode 100644 index 0000000..172174c --- /dev/null +++ b/graphify-out/cache/ast/4cee7330ad11ed90efc78f859a27e8874266d5445315c6ffc5dc7578bc0e88a2.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "label": "_worker.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L1"}, {"id": "plugins_worker_workeroutcome", "label": "_WorkerOutcome", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L57"}, {"id": "plugins_worker_read_stdin_envelope", "label": "_read_stdin_envelope()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L73"}, {"id": "plugins_worker_decode_files", "label": "_decode_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L88"}, {"id": "plugins_worker_build_context", "label": "_build_context()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L105"}, {"id": "plugins_worker_load_plugin_class", "label": "_load_plugin_class()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L144"}, {"id": "plugins_worker_run_lifecycle", "label": "_run_lifecycle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L170"}, {"id": "plugins_worker_serialize_change", "label": "_serialize_change()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L296"}, {"id": "plugins_worker_swallowcallbackerrors", "label": "_SwallowCallbackErrors", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L311"}, {"id": "plugins_worker_swallowcallbackerrors_enter", "label": ".__enter__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L319"}, {"id": "plugins_worker_swallowcallbackerrors_exit", "label": ".__exit__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L322"}, {"id": "plugins_worker_main", "label": "main()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L350"}, {"id": "plugins_worker_rationale_1", "label": "Plugin worker entry point. Backend Spec \u00a76.3.1, \u00a76.3.2. Invoked as ``python -m", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L1"}, {"id": "plugins_worker_rationale_58", "label": "Aggregated worker-side result before stdout serialization.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L58"}, {"id": "plugins_worker_rationale_74", "label": "Read a single JSON object from stdin and return it as a dict. The host writ", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L74"}, {"id": "plugins_worker_rationale_89", "label": "Resolve incoming file path strings against ``dst_root``. Paths are accepted", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L89"}, {"id": "plugins_worker_rationale_110", "label": "Materialize a :class:`PluginContext` from the stdin envelope. Returns the c", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L110"}, {"id": "plugins_worker_rationale_145", "label": "Import the plugin module and return the exported ``Plugin`` symbol. The hos", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L145"}, {"id": "plugins_worker_rationale_177", "label": "Execute the plugin's transform lifecycle against ``files``. The lifecycle i", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L177"}, {"id": "plugins_worker_rationale_297", "label": "Convert a :class:`FileChange` to its IPC dict shape.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L297"}, {"id": "plugins_worker_rationale_312", "label": "Context manager that suppresses errors from ``on_plugin_failure``. Per Back", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L312"}, {"id": "plugins_worker_rationale_351", "label": "Worker entry point. Returns the process exit code.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L351"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "importlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "traceback", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "exlab_wizard_plugins_base", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "exlab_wizard_plugins_logger", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "plugins_worker_workeroutcome", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "plugins_worker_read_stdin_envelope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L73", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "plugins_worker_decode_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L88", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "plugins_worker_build_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L105", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "plugins_worker_load_plugin_class", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L144", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "plugins_worker_run_lifecycle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L170", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "plugins_worker_serialize_change", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L296", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "plugins_worker_swallowcallbackerrors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L311", "weight": 1.0}, {"source": "plugins_worker_swallowcallbackerrors", "target": "plugins_worker_swallowcallbackerrors_enter", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L319", "weight": 1.0}, {"source": "plugins_worker_swallowcallbackerrors", "target": "plugins_worker_swallowcallbackerrors_exit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L322", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "target": "plugins_worker_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L350", "weight": 1.0}, {"source": "plugins_worker_build_context", "target": "plugins_worker_decode_files", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L133", "weight": 1.0}, {"source": "plugins_worker_run_lifecycle", "target": "plugins_worker_workeroutcome", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L196", "weight": 1.0}, {"source": "plugins_worker_run_lifecycle", "target": "plugins_worker_swallowcallbackerrors", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L213", "weight": 1.0}, {"source": "plugins_worker_run_lifecycle", "target": "plugins_worker_serialize_change", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L249", "weight": 1.0}, {"source": "plugins_worker_main", "target": "plugins_worker_read_stdin_envelope", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L355", "weight": 1.0}, {"source": "plugins_worker_main", "target": "plugins_worker_build_context", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L386", "weight": 1.0}, {"source": "plugins_worker_main", "target": "plugins_worker_load_plugin_class", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L402", "weight": 1.0}, {"source": "plugins_worker_main", "target": "plugins_worker_run_lifecycle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L424", "weight": 1.0}, {"source": "plugins_worker_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_worker_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L1", "weight": 1.0}, {"source": "plugins_worker_rationale_58", "target": "plugins_worker_workeroutcome", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L58", "weight": 1.0}, {"source": "plugins_worker_rationale_74", "target": "plugins_worker_read_stdin_envelope", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L74", "weight": 1.0}, {"source": "plugins_worker_rationale_89", "target": "plugins_worker_decode_files", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L89", "weight": 1.0}, {"source": "plugins_worker_rationale_110", "target": "plugins_worker_build_context", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L110", "weight": 1.0}, {"source": "plugins_worker_rationale_145", "target": "plugins_worker_load_plugin_class", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L145", "weight": 1.0}, {"source": "plugins_worker_rationale_177", "target": "plugins_worker_run_lifecycle", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L177", "weight": 1.0}, {"source": "plugins_worker_rationale_297", "target": "plugins_worker_serialize_change", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L297", "weight": 1.0}, {"source": "plugins_worker_rationale_312", "target": "plugins_worker_swallowcallbackerrors", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L312", "weight": 1.0}, {"source": "plugins_worker_rationale_351", "target": "plugins_worker_main", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L351", "weight": 1.0}], "raw_calls": [{"caller_nid": "plugins_worker_read_stdin_envelope", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L82"}, {"caller_nid": "plugins_worker_read_stdin_envelope", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L84"}, {"caller_nid": "plugins_worker_read_stdin_envelope", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L85"}, {"caller_nid": "plugins_worker_decode_files", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L98"}, {"caller_nid": "plugins_worker_decode_files", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L98"}, {"caller_nid": "plugins_worker_decode_files", "callee": "is_absolute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L99"}, {"caller_nid": "plugins_worker_decode_files", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L101"}, {"caller_nid": "plugins_worker_build_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L116"}, {"caller_nid": "plugins_worker_build_context", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L117"}, {"caller_nid": "plugins_worker_build_context", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L117"}, {"caller_nid": "plugins_worker_build_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L117"}, {"caller_nid": "plugins_worker_build_context", "callee": "getcwd", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L117"}, {"caller_nid": "plugins_worker_build_context", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L118"}, {"caller_nid": "plugins_worker_build_context", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L118"}, {"caller_nid": "plugins_worker_build_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L118"}, {"caller_nid": "plugins_worker_build_context", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L118"}, {"caller_nid": "plugins_worker_build_context", "callee": "PluginContext", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L120"}, {"caller_nid": "plugins_worker_build_context", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L121"}, {"caller_nid": "plugins_worker_build_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L121"}, {"caller_nid": "plugins_worker_build_context", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L124"}, {"caller_nid": "plugins_worker_build_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L124"}, {"caller_nid": "plugins_worker_build_context", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L125"}, {"caller_nid": "plugins_worker_build_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L125"}, {"caller_nid": "plugins_worker_build_context", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L126"}, {"caller_nid": "plugins_worker_build_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L126"}, {"caller_nid": "plugins_worker_build_context", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L127"}, {"caller_nid": "plugins_worker_build_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L127"}, {"caller_nid": "plugins_worker_build_context", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L128"}, {"caller_nid": "plugins_worker_build_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L128"}, {"caller_nid": "plugins_worker_build_context", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L129"}, {"caller_nid": "plugins_worker_build_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L129"}, {"caller_nid": "plugins_worker_build_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L133"}, {"caller_nid": "plugins_worker_build_context", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L134"}, {"caller_nid": "plugins_worker_build_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L134"}, {"caller_nid": "plugins_worker_build_context", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L135"}, {"caller_nid": "plugins_worker_build_context", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L135"}, {"caller_nid": "plugins_worker_load_plugin_class", "callee": "import_module", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L152"}, {"caller_nid": "plugins_worker_load_plugin_class", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L153"}, {"caller_nid": "plugins_worker_load_plugin_class", "callee": "ImportError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L155"}, {"caller_nid": "plugins_worker_load_plugin_class", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L158"}, {"caller_nid": "plugins_worker_load_plugin_class", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L158"}, {"caller_nid": "plugins_worker_load_plugin_class", "callee": "TypeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L159"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L205"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L205"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "pre_transform_all", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L208"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "on_plugin_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L214"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L218"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "on_plugin_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L221"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "can_handle", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L226"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L227"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L228"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L232"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L234"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L237"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "describe_changes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L244"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L245"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L247"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "transform", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L253"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L254"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L255"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L261"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L262"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "on_plugin_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L265"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L269"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L271"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L273"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L276"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "on_plugin_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L280"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "post_transform_all", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L284"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L287"}, {"caller_nid": "plugins_worker_run_lifecycle", "callee": "on_plugin_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L290"}, {"caller_nid": "plugins_worker_serialize_change", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L299"}, {"caller_nid": "plugins_worker_serialize_change", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L302"}, {"caller_nid": "plugins_worker_swallowcallbackerrors_exit", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L325"}, {"caller_nid": "plugins_worker_swallowcallbackerrors_exit", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L326"}, {"caller_nid": "plugins_worker_swallowcallbackerrors_exit", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L331"}, {"caller_nid": "plugins_worker_swallowcallbackerrors_exit", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L332"}, {"caller_nid": "plugins_worker_swallowcallbackerrors_exit", "callee": "flush", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L338"}, {"caller_nid": "plugins_worker_main", "callee": "WorkerPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L352"}, {"caller_nid": "plugins_worker_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L357"}, {"caller_nid": "plugins_worker_main", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L358"}, {"caller_nid": "plugins_worker_main", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L362"}, {"caller_nid": "plugins_worker_main", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L362"}, {"caller_nid": "plugins_worker_main", "callee": "flush", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L367"}, {"caller_nid": "plugins_worker_main", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L370"}, {"caller_nid": "plugins_worker_main", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L370"}, {"caller_nid": "plugins_worker_main", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L370"}, {"caller_nid": "plugins_worker_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L372"}, {"caller_nid": "plugins_worker_main", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L373"}, {"caller_nid": "plugins_worker_main", "callee": "flush", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L382"}, {"caller_nid": "plugins_worker_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L388"}, {"caller_nid": "plugins_worker_main", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L389"}, {"caller_nid": "plugins_worker_main", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L393"}, {"caller_nid": "plugins_worker_main", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L393"}, {"caller_nid": "plugins_worker_main", "callee": "flush", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L398"}, {"caller_nid": "plugins_worker_main", "callee": "plugin_cls", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L403"}, {"caller_nid": "plugins_worker_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L405"}, {"caller_nid": "plugins_worker_main", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L406"}, {"caller_nid": "plugins_worker_main", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L412"}, {"caller_nid": "plugins_worker_main", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L413"}, {"caller_nid": "plugins_worker_main", "callee": "format_exc", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L414"}, {"caller_nid": "plugins_worker_main", "callee": "flush", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L420"}, {"caller_nid": "plugins_worker_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L426"}, {"caller_nid": "plugins_worker_main", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L427"}, {"caller_nid": "plugins_worker_main", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L432"}, {"caller_nid": "plugins_worker_main", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L433"}, {"caller_nid": "plugins_worker_main", "callee": "format_exc", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L434"}, {"caller_nid": "plugins_worker_main", "callee": "flush", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L440"}, {"caller_nid": "plugins_worker_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L450"}, {"caller_nid": "plugins_worker_main", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L450"}, {"caller_nid": "plugins_worker_main", "callee": "flush", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py", "source_location": "L451"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/4dc162a2a3937aca7184b82e0b6bae2da1a4dd1d31b37e9e3edc01b1ecbab710.json b/graphify-out/cache/ast/4dc162a2a3937aca7184b82e0b6bae2da1a4dd1d31b37e9e3edc01b1ecbab710.json new file mode 100644 index 0000000..b7d6f24 --- /dev/null +++ b/graphify-out/cache/ast/4dc162a2a3937aca7184b82e0b6bae2da1a4dd1d31b37e9e3edc01b1ecbab710.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_keyring_py", "label": "keyring.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/keyring.py", "source_location": "L1"}, {"id": "constants_keyring_keyring_nas_username", "label": "keyring_nas_username()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/keyring.py", "source_location": "L26"}, {"id": "constants_keyring_rationale_1", "label": "OS-keyring service/username conventions used for credential storage. The wizard", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/keyring.py", "source_location": "L1"}, {"id": "constants_keyring_rationale_27", "label": "Return the keyring username for the given equipment's NAS credential. Equip", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/keyring.py", "source_location": "L27"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_keyring_py", "target": "exlab_wizard_constants_app", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/keyring.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_keyring_py", "target": "constants_keyring_keyring_nas_username", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/keyring.py", "source_location": "L26", "weight": 1.0}, {"source": "constants_keyring_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_keyring_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/keyring.py", "source_location": "L1", "weight": 1.0}, {"source": "constants_keyring_rationale_27", "target": "constants_keyring_keyring_nas_username", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/keyring.py", "source_location": "L27", "weight": 1.0}], "raw_calls": [{"caller_nid": "constants_keyring_keyring_nas_username", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/keyring.py", "source_location": "L34"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/4de544cd5a94ce6637589519eb5590af1d31d7e65df1561cd18c795a4ae79f1e.json b/graphify-out/cache/ast/4de544cd5a94ce6637589519eb5590af1d31d7e65df1561cd18c795a4ae79f1e.json new file mode 100644 index 0000000..979465f --- /dev/null +++ b/graphify-out/cache/ast/4de544cd5a94ce6637589519eb5590af1d31d7e65df1561cd18c795a4ae79f1e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_25_production_main_wiring_py", "label": "test_flow_25_production_main_wiring.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L1"}, {"id": "e2e_test_flow_25_production_main_wiring_goto", "label": "_goto()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L21"}, {"id": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "label": "test_flow_25_main_route_renders_redesigned_layout()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L40"}, {"id": "e2e_test_flow_25_production_main_wiring_test_flow_25_add_equipment_button_navigates_to_wizard", "label": "test_flow_25_add_equipment_button_navigates_to_wizard()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L75"}, {"id": "e2e_test_flow_25_production_main_wiring_test_flow_25_select_node_threads_selected_into_url", "label": "test_flow_25_select_node_threads_selected_into_url()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L82"}, {"id": "e2e_test_flow_25_production_main_wiring_test_flow_25_selected_query_renders_centre_and_right_panes", "label": "test_flow_25_selected_query_renders_centre_and_right_panes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L95"}, {"id": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", "label": "test_flow_25_breadcrumb_navigation_re_navigates_main()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L105"}, {"id": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", "label": "test_flow_25_toggle_right_pane_toggles_query_param()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L121"}, {"id": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", "label": "test_flow_25_tree_context_action_deep_links_into_settings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L132"}, {"id": "e2e_test_flow_25_production_main_wiring_test_flow_25_received_equipment_disables_creation_buttons", "label": "test_flow_25_received_equipment_disables_creation_buttons()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L147"}, {"id": "e2e_test_flow_25_production_main_wiring_test_flow_25_footer_clear_verified_routes_to_callback", "label": "test_flow_25_footer_clear_verified_routes_to_callback()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L172"}, {"id": "e2e_test_flow_25_production_main_wiring_rationale_1", "label": "E2E flow 25: production /main is wired to the redesigned renderer. This suite e", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L1"}, {"id": "e2e_test_flow_25_production_main_wiring_rationale_22", "label": "Navigate to ``url`` with one retry on transient NiceGUI failures.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L22"}, {"id": "e2e_test_flow_25_production_main_wiring_rationale_41", "label": "The /main route mounts the redesigned renderer, not the legacy one. Asserts", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L41"}, {"id": "e2e_test_flow_25_production_main_wiring_rationale_76", "label": "The Add Equipment toolbar button navigates to /wizard/equipment.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L76"}, {"id": "e2e_test_flow_25_production_main_wiring_rationale_83", "label": "Clicking an equipment node updates the URL with ?selected=. Exercises o", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L83"}, {"id": "e2e_test_flow_25_production_main_wiring_rationale_96", "label": "Loading /main?selected=TEST_EQ1 directly renders the centre + right panes.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L96"}, {"id": "e2e_test_flow_25_production_main_wiring_rationale_106", "label": "Clicking a breadcrumb segment routes back through /main?selected=. The brea", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L106"}, {"id": "e2e_test_flow_25_production_main_wiring_rationale_122", "label": "Clicking the right-pane toggle flips ?right_pane=collapsed in the URL.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L122"}, {"id": "e2e_test_flow_25_production_main_wiring_rationale_133", "label": "Owned-equipment Edit menu navigates to /settings with the equipment id. Rou", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L133"}, {"id": "e2e_test_flow_25_production_main_wiring_rationale_148", "label": "Selecting a TEST_RELAY_* node disables the New Project/Run/Test-Run buttons.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L148"}, {"id": "e2e_test_flow_25_production_main_wiring_rationale_173", "label": "The footer Clear-verified button is wired to a callback. Asserts the button", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L173"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_25_production_main_wiring_py", "target": "e2e_test_flow_25_production_main_wiring_goto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_25_production_main_wiring_py", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_25_production_main_wiring_py", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_add_equipment_button_navigates_to_wizard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L75", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_25_production_main_wiring_py", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_select_node_threads_selected_into_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L82", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_25_production_main_wiring_py", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_selected_query_renders_centre_and_right_panes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L95", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_25_production_main_wiring_py", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L105", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_25_production_main_wiring_py", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L121", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_25_production_main_wiring_py", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L132", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_25_production_main_wiring_py", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_received_equipment_disables_creation_buttons", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L147", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_25_production_main_wiring_py", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_footer_clear_verified_routes_to_callback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L172", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "target": "e2e_test_flow_25_production_main_wiring_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L50", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_test_flow_25_add_equipment_button_navigates_to_wizard", "target": "e2e_test_flow_25_production_main_wiring_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L77", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_test_flow_25_select_node_threads_selected_into_url", "target": "e2e_test_flow_25_production_main_wiring_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L89", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_test_flow_25_selected_query_renders_centre_and_right_panes", "target": "e2e_test_flow_25_production_main_wiring_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L97", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", "target": "e2e_test_flow_25_production_main_wiring_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L112", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", "target": "e2e_test_flow_25_production_main_wiring_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L123", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", "target": "e2e_test_flow_25_production_main_wiring_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L137", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_test_flow_25_received_equipment_disables_creation_buttons", "target": "e2e_test_flow_25_production_main_wiring_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L154", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_test_flow_25_footer_clear_verified_routes_to_callback", "target": "e2e_test_flow_25_production_main_wiring_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L180", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_25_production_main_wiring_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_rationale_22", "target": "e2e_test_flow_25_production_main_wiring_goto", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L22", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_rationale_41", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L41", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_rationale_76", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_add_equipment_button_navigates_to_wizard", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L76", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_rationale_83", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_select_node_threads_selected_into_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L83", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_rationale_96", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_selected_query_renders_centre_and_right_panes", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L96", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_rationale_106", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L106", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_rationale_122", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L122", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_rationale_133", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L133", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_rationale_148", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_received_equipment_disables_creation_buttons", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L148", "weight": 1.0}, {"source": "e2e_test_flow_25_production_main_wiring_rationale_173", "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_footer_clear_verified_routes_to_callback", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L173", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_25_production_main_wiring_goto", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L24"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_goto", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L26"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_goto", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L27"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_goto", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L31"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_goto", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L32"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L59"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L59"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L62"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L62"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L63"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L63"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L64"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L64"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L67"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L67"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_add_equipment_button_navigates_to_wizard", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L78"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_add_equipment_button_navigates_to_wizard", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L78"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_add_equipment_button_navigates_to_wizard", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L79"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_select_node_threads_selected_into_url", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L90"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_select_node_threads_selected_into_url", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L90"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_select_node_threads_selected_into_url", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L91"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_select_node_threads_selected_into_url", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L91"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_select_node_threads_selected_into_url", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L92"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_selected_query_renders_centre_and_right_panes", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L100"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_selected_query_renders_centre_and_right_panes", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L100"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_selected_query_renders_centre_and_right_panes", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L102"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_selected_query_renders_centre_and_right_panes", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L102"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L113"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L113"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L114"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L115"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L117"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L118"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L124"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L124"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L125"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L125"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L126"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L128"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L128"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L129"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L138"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L139"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L140"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L141"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L141"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L142"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_received_equipment_disables_creation_buttons", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L161"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_received_equipment_disables_creation_buttons", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L162"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_received_equipment_disables_creation_buttons", "callee": "get_attribute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L163"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_received_equipment_disables_creation_buttons", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L168"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_received_equipment_disables_creation_buttons", "callee": "get_attribute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L169"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_footer_clear_verified_routes_to_callback", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L181"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_footer_clear_verified_routes_to_callback", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L182"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_footer_clear_verified_routes_to_callback", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L183"}, {"caller_nid": "e2e_test_flow_25_production_main_wiring_test_flow_25_footer_clear_verified_routes_to_callback", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py", "source_location": "L186"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/4e19bfe780b0771a6a6bb9ba0b26b0f8e03859a0b09dba96f7ef4b91b2aa5627.json b/graphify-out/cache/ast/4e19bfe780b0771a6a6bb9ba0b26b0f8e03859a0b09dba96f7ef4b91b2aa5627.json new file mode 100644 index 0000000..3b4ccb7 --- /dev/null +++ b/graphify-out/cache/ast/4e19bfe780b0771a6a6bb9ba0b26b0f8e03859a0b09dba96f7ef4b91b2aa5627.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "label": "app.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L1"}, {"id": "api_app_auditchannel", "label": "AuditChannel", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L77"}, {"id": "api_app_auditchannel_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L85"}, {"id": "api_app_auditchannel_subscribe", "label": ".subscribe()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L89"}, {"id": "api_app_auditchannel_publish_snapshot", "label": ".publish_snapshot()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L97"}, {"id": "api_app_auditchannel_publish_delta", "label": ".publish_delta()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L106"}, {"id": "api_app_auditchannel_broadcast", "label": "._broadcast()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L123"}, {"id": "api_app_auditchannel_close", "label": ".close()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L128"}, {"id": "api_app_drain", "label": "_drain()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L136"}, {"id": "api_app_finding_to_dict", "label": "_finding_to_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L152"}, {"id": "api_app_appdependencies", "label": "AppDependencies", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L167"}, {"id": "api_app_create_app", "label": "create_app()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L254"}, {"id": "api_app_audit_loop", "label": "_audit_loop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L339"}, {"id": "api_app_diff_findings", "label": "_diff_findings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L381"}, {"id": "api_app_rationale_1", "label": "FastAPI app + lifespan + dependency wiring. Backend Spec \u00a74.6. The :func:`creat", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L1"}, {"id": "api_app_rationale_78", "label": "Multi-subscriber pub-sub for the Problems WebSocket. Backend Spec \u00a74.6.2. S", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L78"}, {"id": "api_app_rationale_90", "label": "Return an async iterator that yields every published frame.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L90"}, {"id": "api_app_rationale_129", "label": "Close every subscriber's queue. Idempotent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L129"}, {"id": "api_app_rationale_140", "label": "Yield from the subscriber queue until a sentinel arrives.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L140"}, {"id": "api_app_rationale_153", "label": "Best-effort serialize a Finding-like object to dict.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L153"}, {"id": "api_app_rationale_168", "label": "Bundle of live components the API surface dispatches to. Production wiring", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L168"}, {"id": "api_app_rationale_261", "label": "Build the FastAPI app. Backend Spec \u00a74.6. ``config``: optional pre-loaded `", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L261"}, {"id": "api_app_rationale_340", "label": "Background task that re-runs the validator audit every interval. Diffs the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L340"}, {"id": "api_app_rationale_384", "label": "Return ``(added, removed, changed)`` keyed on ``(rule, offending_path)``. T", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L384"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "contextlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard_api_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard_api_health", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard_api_routers_browse", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard_api_routers_config", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard_api_routers_operations", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard_api_routers_problems", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard_api_routers_sessions", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard_api_routers_staging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard_api_setup", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "api_app_auditchannel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L77", "weight": 1.0}, {"source": "api_app_auditchannel", "target": "api_app_auditchannel_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L85", "weight": 1.0}, {"source": "api_app_auditchannel", "target": "api_app_auditchannel_subscribe", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L89", "weight": 1.0}, {"source": "api_app_auditchannel", "target": "api_app_auditchannel_publish_snapshot", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L97", "weight": 1.0}, {"source": "api_app_auditchannel", "target": "api_app_auditchannel_publish_delta", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L106", "weight": 1.0}, {"source": "api_app_auditchannel", "target": "api_app_auditchannel_broadcast", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L123", "weight": 1.0}, {"source": "api_app_auditchannel", "target": "api_app_auditchannel_close", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L128", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "api_app_drain", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L136", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "api_app_finding_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L152", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "api_app_appdependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L167", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "api_app_create_app", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L254", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "api_app_audit_loop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L339", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "target": "api_app_diff_findings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L381", "weight": 1.0}, {"source": "api_app_auditchannel_subscribe", "target": "api_app_drain", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L95", "weight": 1.0}, {"source": "api_app_auditchannel_publish_snapshot", "target": "api_app_finding_to_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L100", "weight": 1.0}, {"source": "api_app_auditchannel_publish_snapshot", "target": "api_app_auditchannel_broadcast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L104", "weight": 1.0}, {"source": "api_app_auditchannel_publish_delta", "target": "api_app_finding_to_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L116", "weight": 1.0}, {"source": "api_app_auditchannel_publish_delta", "target": "api_app_auditchannel_broadcast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L121", "weight": 1.0}, {"source": "api_app_create_app", "target": "api_app_appdependencies", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L271", "weight": 1.0}, {"source": "api_app_create_app", "target": "api_app_auditchannel", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L273", "weight": 1.0}, {"source": "api_app_audit_loop", "target": "api_app_diff_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L368", "weight": 1.0}, {"source": "api_app_audit_loop", "target": "api_app_auditchannel_publish_snapshot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L371", "weight": 1.0}, {"source": "api_app_audit_loop", "target": "api_app_auditchannel_publish_delta", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L373", "weight": 1.0}, {"source": "api_app_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_app_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L1", "weight": 1.0}, {"source": "api_app_rationale_78", "target": "api_app_auditchannel", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L78", "weight": 1.0}, {"source": "api_app_rationale_90", "target": "api_app_auditchannel_subscribe", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L90", "weight": 1.0}, {"source": "api_app_rationale_129", "target": "api_app_auditchannel_close", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L129", "weight": 1.0}, {"source": "api_app_rationale_140", "target": "api_app_drain", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L140", "weight": 1.0}, {"source": "api_app_rationale_153", "target": "api_app_finding_to_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L153", "weight": 1.0}, {"source": "api_app_rationale_168", "target": "api_app_appdependencies", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L168", "weight": 1.0}, {"source": "api_app_rationale_261", "target": "api_app_create_app", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L261", "weight": 1.0}, {"source": "api_app_rationale_340", "target": "api_app_audit_loop", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L340", "weight": 1.0}, {"source": "api_app_rationale_384", "target": "api_app_diff_findings", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L384", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_app_auditchannel_subscribe", "callee": "Queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L91"}, {"caller_nid": "api_app_auditchannel_subscribe", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L92"}, {"caller_nid": "api_app_auditchannel_subscribe", "callee": "put_nowait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L94"}, {"caller_nid": "api_app_auditchannel_broadcast", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L124"}, {"caller_nid": "api_app_auditchannel_broadcast", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L125"}, {"caller_nid": "api_app_auditchannel_broadcast", "callee": "put_nowait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L126"}, {"caller_nid": "api_app_auditchannel_close", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L131"}, {"caller_nid": "api_app_auditchannel_close", "callee": "put_nowait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L132"}, {"caller_nid": "api_app_auditchannel_close", "callee": "clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L133"}, {"caller_nid": "api_app_drain", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L143"}, {"caller_nid": "api_app_drain", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L144"}, {"caller_nid": "api_app_drain", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L148"}, {"caller_nid": "api_app_drain", "callee": "remove", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L149"}, {"caller_nid": "api_app_finding_to_dict", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L154"}, {"caller_nid": "api_app_finding_to_dict", "callee": "to_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L155"}, {"caller_nid": "api_app_finding_to_dict", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L156"}, {"caller_nid": "api_app_finding_to_dict", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L158"}, {"caller_nid": "api_app_create_app", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L311"}, {"caller_nid": "api_app_create_app", "callee": "APIRouter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L314"}, {"caller_nid": "api_app_create_app", "callee": "include_router", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L315"}, {"caller_nid": "api_app_create_app", "callee": "build_sessions_router", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L315"}, {"caller_nid": "api_app_create_app", "callee": "include_router", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L316"}, {"caller_nid": "api_app_create_app", "callee": "build_operations_router", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L316"}, {"caller_nid": "api_app_create_app", "callee": "include_router", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L317"}, {"caller_nid": "api_app_create_app", "callee": "build_problems_router", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L317"}, {"caller_nid": "api_app_create_app", "callee": "include_router", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L318"}, {"caller_nid": "api_app_create_app", "callee": "build_config_router", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L318"}, {"caller_nid": "api_app_create_app", "callee": "include_router", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L319"}, {"caller_nid": "api_app_create_app", "callee": "build_browse_router", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L319"}, {"caller_nid": "api_app_create_app", "callee": "include_router", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L320"}, {"caller_nid": "api_app_create_app", "callee": "build_health_router", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L320"}, {"caller_nid": "api_app_create_app", "callee": "include_router", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L321"}, {"caller_nid": "api_app_create_app", "callee": "build_setup_router", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L321"}, {"caller_nid": "api_app_create_app", "callee": "include_router", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L327"}, {"caller_nid": "api_app_create_app", "callee": "build_staging_router", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L327"}, {"caller_nid": "api_app_create_app", "callee": "include_router", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L328"}, {"caller_nid": "api_app_create_app", "callee": "register_exception_handlers", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L330"}, {"caller_nid": "api_app_audit_loop", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L348"}, {"caller_nid": "api_app_audit_loop", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L350"}, {"caller_nid": "api_app_audit_loop", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L354"}, {"caller_nid": "api_app_audit_loop", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L356"}, {"caller_nid": "api_app_audit_loop", "callee": "sum", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L362"}, {"caller_nid": "api_app_audit_loop", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L363"}, {"caller_nid": "api_app_audit_loop", "callee": "sum", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L365"}, {"caller_nid": "api_app_audit_loop", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L366"}, {"caller_nid": "api_app_audit_loop", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L376"}, {"caller_nid": "api_app_diff_findings", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L392"}, {"caller_nid": "api_app_diff_findings", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L393"}, {"caller_nid": "api_app_diff_findings", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L395"}, {"caller_nid": "api_app_diff_findings", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L396"}, {"caller_nid": "api_app_diff_findings", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py", "source_location": "L403"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/4e38efb60a50b0454590ba538a160e146a00f0a1ec4315bf48844f73b64eaa35.json b/graphify-out/cache/ast/4e38efb60a50b0454590ba538a160e146a00f0a1ec4315bf48844f73b64eaa35.json new file mode 100644 index 0000000..bfdae0c --- /dev/null +++ b/graphify-out/cache/ast/4e38efb60a50b0454590ba538a160e146a00f0a1ec4315bf48844f73b64eaa35.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "label": "test_loader.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L1"}, {"id": "config_test_loader_test_load_config_complete_yaml", "label": "test_load_config_complete_yaml()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L46"}, {"id": "config_test_loader_test_load_config_missing_file_raises", "label": "test_load_config_missing_file_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L83"}, {"id": "config_test_loader_test_load_config_invalid_yaml_raises", "label": "test_load_config_invalid_yaml_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L91"}, {"id": "config_test_loader_test_load_config_top_level_not_mapping_raises", "label": "test_load_config_top_level_not_mapping_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L100"}, {"id": "config_test_loader_test_load_config_validation_error_raises_config_error", "label": "test_load_config_validation_error_raises_config_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L108"}, {"id": "config_test_loader_test_load_config_from_text_empty_returns_empty_config", "label": "test_load_config_from_text_empty_returns_empty_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L132"}, {"id": "config_test_loader_test_load_config_unreadable_path_raises_config_error", "label": "test_load_config_unreadable_path_raises_config_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L141"}, {"id": "config_test_loader_test_save_config_atomic", "label": "test_save_config_atomic()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L163"}, {"id": "config_test_loader_test_save_config_preserves_comments_round_trip", "label": "test_save_config_preserves_comments_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L175"}, {"id": "config_test_loader_test_save_config_preserves_key_order", "label": "test_save_config_preserves_key_order()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L189"}, {"id": "config_test_loader_test_save_config_creates_parent_dirs", "label": "test_save_config_creates_parent_dirs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L205"}, {"id": "config_test_loader_test_save_config_without_original_text_writes_fresh", "label": "test_save_config_without_original_text_writes_fresh()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L215"}, {"id": "config_test_loader_test_dump_config_round_trip", "label": "test_dump_config_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L234"}, {"id": "config_test_loader_test_test_mode_unset_leaves_equipment_ids_unchanged", "label": "test_test_mode_unset_leaves_equipment_ids_unchanged()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L306"}, {"id": "config_test_loader_test_test_mode_enabled_prefixes_every_equipment_id", "label": "test_test_mode_enabled_prefixes_every_equipment_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L313"}, {"id": "config_test_loader_test_test_mode_is_idempotent_on_already_prefixed_ids", "label": "test_test_mode_is_idempotent_on_already_prefixed_ids()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L326"}, {"id": "config_test_loader_test_test_mode_preserves_unique_id_invariant", "label": "test_test_mode_preserves_unique_id_invariant()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L358"}, {"id": "config_test_loader_test_test_mode_truthy_values_trigger_prefix", "label": "test_test_mode_truthy_values_trigger_prefix()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L374"}, {"id": "config_test_loader_test_test_mode_falsy_values_do_not_trigger_prefix", "label": "test_test_mode_falsy_values_do_not_trigger_prefix()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L386"}, {"id": "config_test_loader_test_test_mode_unset_via_delenv_does_not_trigger_prefix", "label": "test_test_mode_unset_via_delenv_does_not_trigger_prefix()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L395"}, {"id": "config_test_loader_test_apply_test_mode_prefix_helper_is_a_pure_function", "label": "test_apply_test_mode_prefix_helper_is_a_pure_function()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L404"}, {"id": "config_test_loader_test_load_config_uses_ruamel_round_trip", "label": "test_load_config_uses_ruamel_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L423"}, {"id": "config_test_loader_rationale_1", "label": "Tests for ``exlab_wizard.config.loader``. Backend Spec \u00a79. The loader is the si", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L1"}, {"id": "config_test_loader_rationale_307", "label": "The default code path is a no-op: no env var, no rewrite.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L307"}, {"id": "config_test_loader_rationale_314", "label": "A truthy env value rewrites every id with the canonical prefix.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L314"}, {"id": "config_test_loader_rationale_329", "label": "An already-``TEST_``-prefixed id must NOT be re-prefixed.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L329"}, {"id": "config_test_loader_rationale_359", "label": "The transformed config still passes Config.model_validate.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L359"}, {"id": "config_test_loader_rationale_377", "label": "Every accepted spelling flips the loader on (case-insensitive).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L377"}, {"id": "config_test_loader_rationale_389", "label": "Falsy / unrecognized values leave the loaded config untouched.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L389"}, {"id": "config_test_loader_rationale_398", "label": "An absent env var (not just empty) leaves the config untouched.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L398"}, {"id": "config_test_loader_rationale_407", "label": "``apply_test_mode_prefix`` itself ignores the env var. The env-var check is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L407"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "ruamel_yaml", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "exlab_wizard_config_loader", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_load_config_complete_yaml", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_load_config_missing_file_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_load_config_invalid_yaml_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L91", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_load_config_top_level_not_mapping_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L100", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_load_config_validation_error_raises_config_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L108", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_load_config_from_text_empty_returns_empty_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L132", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_load_config_unreadable_path_raises_config_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L141", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_save_config_atomic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L163", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_save_config_preserves_comments_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L175", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_save_config_preserves_key_order", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L189", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_save_config_creates_parent_dirs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L205", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_save_config_without_original_text_writes_fresh", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L215", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_dump_config_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L234", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_test_mode_unset_leaves_equipment_ids_unchanged", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L306", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_test_mode_enabled_prefixes_every_equipment_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L313", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_test_mode_is_idempotent_on_already_prefixed_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L326", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_test_mode_preserves_unique_id_invariant", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L358", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_test_mode_truthy_values_trigger_prefix", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L374", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_test_mode_falsy_values_do_not_trigger_prefix", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L386", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_test_mode_unset_via_delenv_does_not_trigger_prefix", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L395", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_apply_test_mode_prefix_helper_is_a_pure_function", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L404", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "target": "config_test_loader_test_load_config_uses_ruamel_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L423", "weight": 1.0}, {"source": "config_test_loader_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_config_test_loader_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L1", "weight": 1.0}, {"source": "config_test_loader_rationale_307", "target": "config_test_loader_test_test_mode_unset_leaves_equipment_ids_unchanged", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L307", "weight": 1.0}, {"source": "config_test_loader_rationale_314", "target": "config_test_loader_test_test_mode_enabled_prefixes_every_equipment_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L314", "weight": 1.0}, {"source": "config_test_loader_rationale_329", "target": "config_test_loader_test_test_mode_is_idempotent_on_already_prefixed_ids", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L329", "weight": 1.0}, {"source": "config_test_loader_rationale_359", "target": "config_test_loader_test_test_mode_preserves_unique_id_invariant", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L359", "weight": 1.0}, {"source": "config_test_loader_rationale_377", "target": "config_test_loader_test_test_mode_truthy_values_trigger_prefix", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L377", "weight": 1.0}, {"source": "config_test_loader_rationale_389", "target": "config_test_loader_test_test_mode_falsy_values_do_not_trigger_prefix", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L389", "weight": 1.0}, {"source": "config_test_loader_rationale_398", "target": "config_test_loader_test_test_mode_unset_via_delenv_does_not_trigger_prefix", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L398", "weight": 1.0}, {"source": "config_test_loader_rationale_407", "target": "config_test_loader_test_apply_test_mode_prefix_helper_is_a_pure_function", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L407", "weight": 1.0}], "raw_calls": [{"caller_nid": "config_test_loader_test_load_config_complete_yaml", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L47"}, {"caller_nid": "config_test_loader_test_load_config_complete_yaml", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L48"}, {"caller_nid": "config_test_loader_test_load_config_complete_yaml", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L62"}, {"caller_nid": "config_test_loader_test_load_config_missing_file_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L85"}, {"caller_nid": "config_test_loader_test_load_config_missing_file_raises", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L86"}, {"caller_nid": "config_test_loader_test_load_config_missing_file_raises", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L88"}, {"caller_nid": "config_test_loader_test_load_config_missing_file_raises", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L88"}, {"caller_nid": "config_test_loader_test_load_config_invalid_yaml_raises", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L94"}, {"caller_nid": "config_test_loader_test_load_config_invalid_yaml_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L95"}, {"caller_nid": "config_test_loader_test_load_config_invalid_yaml_raises", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L96"}, {"caller_nid": "config_test_loader_test_load_config_invalid_yaml_raises", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L97"}, {"caller_nid": "config_test_loader_test_load_config_top_level_not_mapping_raises", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L102"}, {"caller_nid": "config_test_loader_test_load_config_top_level_not_mapping_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L103"}, {"caller_nid": "config_test_loader_test_load_config_top_level_not_mapping_raises", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L104"}, {"caller_nid": "config_test_loader_test_load_config_top_level_not_mapping_raises", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L105"}, {"caller_nid": "config_test_loader_test_load_config_validation_error_raises_config_error", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L113"}, {"caller_nid": "config_test_loader_test_load_config_validation_error_raises_config_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L126"}, {"caller_nid": "config_test_loader_test_load_config_validation_error_raises_config_error", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L127"}, {"caller_nid": "config_test_loader_test_load_config_validation_error_raises_config_error", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L128"}, {"caller_nid": "config_test_loader_test_load_config_validation_error_raises_config_error", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L129"}, {"caller_nid": "config_test_loader_test_load_config_validation_error_raises_config_error", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L129"}, {"caller_nid": "config_test_loader_test_load_config_from_text_empty_returns_empty_config", "callee": "load_config_from_text", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L135"}, {"caller_nid": "config_test_loader_test_load_config_from_text_empty_returns_empty_config", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L136"}, {"caller_nid": "config_test_loader_test_load_config_unreadable_path_raises_config_error", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L147"}, {"caller_nid": "config_test_loader_test_load_config_unreadable_path_raises_config_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L148"}, {"caller_nid": "config_test_loader_test_load_config_unreadable_path_raises_config_error", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L149"}, {"caller_nid": "config_test_loader_test_load_config_unreadable_path_raises_config_error", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L150"}, {"caller_nid": "config_test_loader_test_load_config_unreadable_path_raises_config_error", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L150"}, {"caller_nid": "config_test_loader_test_load_config_unreadable_path_raises_config_error", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L153"}, {"caller_nid": "config_test_loader_test_load_config_unreadable_path_raises_config_error", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L155"}, {"caller_nid": "config_test_loader_test_save_config_atomic", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L164"}, {"caller_nid": "config_test_loader_test_save_config_atomic", "callee": "save_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L167"}, {"caller_nid": "config_test_loader_test_save_config_atomic", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L169"}, {"caller_nid": "config_test_loader_test_save_config_atomic", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L172"}, {"caller_nid": "config_test_loader_test_save_config_preserves_comments_round_trip", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L177"}, {"caller_nid": "config_test_loader_test_save_config_preserves_comments_round_trip", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L178"}, {"caller_nid": "config_test_loader_test_save_config_preserves_comments_round_trip", "callee": "save_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L181"}, {"caller_nid": "config_test_loader_test_save_config_preserves_comments_round_trip", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L183"}, {"caller_nid": "config_test_loader_test_save_config_preserves_key_order", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L191"}, {"caller_nid": "config_test_loader_test_save_config_preserves_key_order", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L192"}, {"caller_nid": "config_test_loader_test_save_config_preserves_key_order", "callee": "save_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L195"}, {"caller_nid": "config_test_loader_test_save_config_preserves_key_order", "callee": "YAML", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L197"}, {"caller_nid": "config_test_loader_test_save_config_preserves_key_order", "callee": "load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L198"}, {"caller_nid": "config_test_loader_test_save_config_preserves_key_order", "callee": "load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L199"}, {"caller_nid": "config_test_loader_test_save_config_preserves_key_order", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L199"}, {"caller_nid": "config_test_loader_test_save_config_preserves_key_order", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L202"}, {"caller_nid": "config_test_loader_test_save_config_preserves_key_order", "callee": "keys", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L202"}, {"caller_nid": "config_test_loader_test_save_config_preserves_key_order", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L202"}, {"caller_nid": "config_test_loader_test_save_config_preserves_key_order", "callee": "keys", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L202"}, {"caller_nid": "config_test_loader_test_save_config_creates_parent_dirs", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L206"}, {"caller_nid": "config_test_loader_test_save_config_creates_parent_dirs", "callee": "save_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L209"}, {"caller_nid": "config_test_loader_test_save_config_creates_parent_dirs", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L211"}, {"caller_nid": "config_test_loader_test_save_config_creates_parent_dirs", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L212"}, {"caller_nid": "config_test_loader_test_save_config_without_original_text_writes_fresh", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L216"}, {"caller_nid": "config_test_loader_test_save_config_without_original_text_writes_fresh", "callee": "save_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L219"}, {"caller_nid": "config_test_loader_test_save_config_without_original_text_writes_fresh", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L225"}, {"caller_nid": "config_test_loader_test_save_config_without_original_text_writes_fresh", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L226"}, {"caller_nid": "config_test_loader_test_save_config_without_original_text_writes_fresh", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L226"}, {"caller_nid": "config_test_loader_test_dump_config_round_trip", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L262"}, {"caller_nid": "config_test_loader_test_dump_config_round_trip", "callee": "dump_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L264"}, {"caller_nid": "config_test_loader_test_dump_config_round_trip", "callee": "load_config_from_text", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L265"}, {"caller_nid": "config_test_loader_test_dump_config_round_trip", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L266"}, {"caller_nid": "config_test_loader_test_dump_config_round_trip", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L266"}, {"caller_nid": "config_test_loader_test_test_mode_unset_leaves_equipment_ids_unchanged", "callee": "delenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L308"}, {"caller_nid": "config_test_loader_test_test_mode_unset_leaves_equipment_ids_unchanged", "callee": "load_config_from_text", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L309"}, {"caller_nid": "config_test_loader_test_test_mode_enabled_prefixes_every_equipment_id", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L315"}, {"caller_nid": "config_test_loader_test_test_mode_enabled_prefixes_every_equipment_id", "callee": "load_config_from_text", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L316"}, {"caller_nid": "config_test_loader_test_test_mode_is_idempotent_on_already_prefixed_ids", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L330"}, {"caller_nid": "config_test_loader_test_test_mode_is_idempotent_on_already_prefixed_ids", "callee": "load_config_from_text", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L352"}, {"caller_nid": "config_test_loader_test_test_mode_preserves_unique_id_invariant", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L360"}, {"caller_nid": "config_test_loader_test_test_mode_preserves_unique_id_invariant", "callee": "load_config_from_text", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L361"}, {"caller_nid": "config_test_loader_test_test_mode_preserves_unique_id_invariant", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L366"}, {"caller_nid": "config_test_loader_test_test_mode_preserves_unique_id_invariant", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L366"}, {"caller_nid": "config_test_loader_test_test_mode_preserves_unique_id_invariant", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L367"}, {"caller_nid": "config_test_loader_test_test_mode_preserves_unique_id_invariant", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L370"}, {"caller_nid": "config_test_loader_test_test_mode_truthy_values_trigger_prefix", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L378"}, {"caller_nid": "config_test_loader_test_test_mode_truthy_values_trigger_prefix", "callee": "load_config_from_text", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L379"}, {"caller_nid": "config_test_loader_test_test_mode_truthy_values_trigger_prefix", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L380"}, {"caller_nid": "config_test_loader_test_test_mode_truthy_values_trigger_prefix", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L380"}, {"caller_nid": "config_test_loader_test_test_mode_falsy_values_do_not_trigger_prefix", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L390"}, {"caller_nid": "config_test_loader_test_test_mode_falsy_values_do_not_trigger_prefix", "callee": "load_config_from_text", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L391"}, {"caller_nid": "config_test_loader_test_test_mode_unset_via_delenv_does_not_trigger_prefix", "callee": "delenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L399"}, {"caller_nid": "config_test_loader_test_test_mode_unset_via_delenv_does_not_trigger_prefix", "callee": "load_config_from_text", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L400"}, {"caller_nid": "config_test_loader_test_apply_test_mode_prefix_helper_is_a_pure_function", "callee": "delenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L412"}, {"caller_nid": "config_test_loader_test_apply_test_mode_prefix_helper_is_a_pure_function", "callee": "load_config_from_text", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L413"}, {"caller_nid": "config_test_loader_test_apply_test_mode_prefix_helper_is_a_pure_function", "callee": "apply_test_mode_prefix", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L414"}, {"caller_nid": "config_test_loader_test_load_config_uses_ruamel_round_trip", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L429"}, {"caller_nid": "config_test_loader_test_load_config_uses_ruamel_round_trip", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L430"}, {"caller_nid": "config_test_loader_test_load_config_uses_ruamel_round_trip", "callee": "save_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L433"}, {"caller_nid": "config_test_loader_test_load_config_uses_ruamel_round_trip", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py", "source_location": "L434"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/4ede0b1018462b7d41300158178b622398500aac1a98362f1bfbbbbc82a02824.json b/graphify-out/cache/ast/4ede0b1018462b7d41300158178b622398500aac1a98362f1bfbbbbc82a02824.json new file mode 100644 index 0000000..edbccae --- /dev/null +++ b/graphify-out/cache/ast/4ede0b1018462b7d41300158178b622398500aac1a98362f1bfbbbbc82a02824.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_superpowers_specs_2026_05_21_operator_free_per_file_nas_sync_design_md", "label": "2026-05-21-operator-free-per-file-nas-sync-design.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L1"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "label": "Operator-free, per-file quiescence-driven NAS sync \u2014 design", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L1"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_context", "label": "Context", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L7"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_goals", "label": "Goals", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L23"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_non_goals", "label": "Non-goals", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L31"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_the_model", "label": "The model", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L38"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_config_changes_config_models_py", "label": "Config changes (`config/models.py`)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L63"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_run_lifecycle_rollup_approach_1", "label": "Run lifecycle \u2014 rollup (Approach 1)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L86"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_per_file_sync_state_sync_state_json", "label": "Per-file sync state \u2014 `sync_state.json`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L101"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_codeblock_1", "label": "code:block1 ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L107"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_ingest_json_contract_risk_2_resolution", "label": "`ingest.json` contract (risk 2 resolution)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L124"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_keep_local_per_file", "label": "`keep-local` (per-file)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L137"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_gui_per_file_display_state", "label": "GUI per-file display state", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L146"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_failure_handling", "label": "Failure handling", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L167"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_cleanup_rollup", "label": "Cleanup \u2014 rollup", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L176"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_transport_batching_risk_1_resolution", "label": "Transport batching (risk 1 resolution)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L183"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_components_touched", "label": "Components touched", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L203"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_testing", "label": "Testing", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L228"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_migration", "label": "Migration", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L244"}, {"id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_open_questions_out_of_scope", "label": "Open questions / out of scope", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L252"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_superpowers_specs_2026_05_21_operator_free_per_file_nas_sync_design_md", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L1", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L7", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_goals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L23", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_non_goals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L31", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_the_model", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L38", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_config_changes_config_models_py", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L63", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_run_lifecycle_rollup_approach_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L86", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_per_file_sync_state_sync_state_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L101", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_per_file_sync_state_sync_state_json", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L107", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_ingest_json_contract_risk_2_resolution", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L124", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_keep_local_per_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L137", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_gui_per_file_display_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L146", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_failure_handling", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L167", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_cleanup_rollup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L176", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_transport_batching_risk_1_resolution", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L183", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_components_touched", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L203", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_testing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L228", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_migration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L244", "weight": 1.0}, {"source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_open_questions_out_of_scope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", "source_location": "L252", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/4ef0374174df8b6355f7257824348925f59f2d2f2a98db62e68d0c58b4ffd882.json b/graphify-out/cache/ast/4ef0374174df8b6355f7257824348925f59f2d2f2a98db62e68d0c58b4ffd882.json new file mode 100644 index 0000000..9b63b78 --- /dev/null +++ b/graphify-out/cache/ast/4ef0374174df8b6355f7257824348925f59f2d2f2a98db62e68d0c58b4ffd882.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "label": "events.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L1"}, {"id": "api_events_phaseevent", "label": "PhaseEvent", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L46"}, {"id": "struct", "label": "Struct", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_events_progressevent", "label": "ProgressEvent", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L63"}, {"id": "api_events_inputrequiredevent", "label": "InputRequiredEvent", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L76"}, {"id": "api_events_warningevent", "label": "WarningEvent", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L96"}, {"id": "api_events_doneevent", "label": "DoneEvent", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L113"}, {"id": "api_events_failedevent", "label": "FailedEvent", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L129"}, {"id": "api_events_snapshotevent", "label": "SnapshotEvent", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L146"}, {"id": "api_events_deltaevent", "label": "DeltaEvent", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L163"}, {"id": "api_events_encode_event", "label": "encode_event()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L189"}, {"id": "api_events_event_from_dict", "label": "event_from_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L198"}, {"id": "api_events_rationale_1", "label": "WebSocket frame envelope types. Backend Spec \u00a74.6.2. These ``msgspec.Struct`` t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L1"}, {"id": "api_events_rationale_52", "label": "Per-state phase frame. Backend Spec \u00a74.6.2. Emitted on every state transiti", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L52"}, {"id": "api_events_rationale_69", "label": "Progress frame for the long-running plugin pass. Backend Spec \u00a74.6.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L69"}, {"id": "api_events_rationale_82", "label": "Plugin escalation frame. Backend Spec \u00a74.6.2 / \u00a76.4. ``fields`` is the plug", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L82"}, {"id": "api_events_rationale_102", "label": "Non-fatal warning frame. Backend Spec \u00a74.6.2. Emitted by the controller whe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L102"}, {"id": "api_events_rationale_119", "label": "Terminal success frame. Backend Spec \u00a74.6.2. ``result`` carries the final s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L119"}, {"id": "api_events_rationale_135", "label": "Terminal failure frame. Backend Spec \u00a74.6.2. ``error`` follows the \u00a74.6.3 e", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L135"}, {"id": "api_events_rationale_152", "label": "Full audit snapshot frame for the Problems pub-sub channel. Sent immediatel", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L152"}, {"id": "api_events_rationale_169", "label": "Delta frame for the Problems pub-sub channel. Backend Spec \u00a74.6.2. Sent on", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L169"}, {"id": "api_events_rationale_190", "label": "Encode a typed WebSocket frame to JSON bytes via ``msgspec.json``. Single d", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L190"}, {"id": "api_events_rationale_199", "label": "Convert a plain dict (e.g. from the controller's event queue) into the match", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L199"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "msgspec", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "msgspec", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "api_events_phaseevent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L46", "weight": 1.0}, {"source": "api_events_phaseevent", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "api_events_progressevent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L63", "weight": 1.0}, {"source": "api_events_progressevent", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "api_events_inputrequiredevent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L76", "weight": 1.0}, {"source": "api_events_inputrequiredevent", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "api_events_warningevent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L96", "weight": 1.0}, {"source": "api_events_warningevent", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L96", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "api_events_doneevent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L113", "weight": 1.0}, {"source": "api_events_doneevent", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L113", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "api_events_failedevent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L129", "weight": 1.0}, {"source": "api_events_failedevent", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L129", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "api_events_snapshotevent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L146", "weight": 1.0}, {"source": "api_events_snapshotevent", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L146", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "api_events_deltaevent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L163", "weight": 1.0}, {"source": "api_events_deltaevent", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L163", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "api_events_encode_event", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L189", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "target": "api_events_event_from_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L198", "weight": 1.0}, {"source": "api_events_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_events_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L1", "weight": 1.0}, {"source": "api_events_rationale_52", "target": "api_events_phaseevent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L52", "weight": 1.0}, {"source": "api_events_rationale_69", "target": "api_events_progressevent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L69", "weight": 1.0}, {"source": "api_events_rationale_82", "target": "api_events_inputrequiredevent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L82", "weight": 1.0}, {"source": "api_events_rationale_102", "target": "api_events_warningevent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L102", "weight": 1.0}, {"source": "api_events_rationale_119", "target": "api_events_doneevent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L119", "weight": 1.0}, {"source": "api_events_rationale_135", "target": "api_events_failedevent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L135", "weight": 1.0}, {"source": "api_events_rationale_152", "target": "api_events_snapshotevent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L152", "weight": 1.0}, {"source": "api_events_rationale_169", "target": "api_events_deltaevent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L169", "weight": 1.0}, {"source": "api_events_rationale_190", "target": "api_events_encode_event", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L190", "weight": 1.0}, {"source": "api_events_rationale_199", "target": "api_events_event_from_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L199", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_events_encode_event", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L195"}, {"caller_nid": "api_events_event_from_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L211"}, {"caller_nid": "api_events_event_from_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L222"}, {"caller_nid": "api_events_event_from_dict", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L222"}, {"caller_nid": "api_events_event_from_dict", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L225"}, {"caller_nid": "api_events_event_from_dict", "callee": "convert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py", "source_location": "L226"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/4face01f58f97cf4c91402d2512e62d238273fb895e42ba813dba742d606a55a.json b/graphify-out/cache/ast/4face01f58f97cf4c91402d2512e62d238273fb895e42ba813dba742d606a55a.json new file mode 100644 index 0000000..349f979 --- /dev/null +++ b/graphify-out/cache/ast/4face01f58f97cf4c91402d2512e62d238273fb895e42ba813dba742d606a55a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_06_plugin_system_md", "label": "06_Plugin_System.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L1"}, {"id": "design_spec_sections_06_plugin_system_6_plugin_system", "label": "6. Plugin System", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L1"}, {"id": "design_spec_sections_06_plugin_system_6_0_where_plugins_sit_in_the_pipeline", "label": "6.0 Where Plugins Sit in the Pipeline", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L9"}, {"id": "design_spec_sections_06_plugin_system_codeblock_1", "label": "code:block1 (\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L11"}, {"id": "design_spec_sections_06_plugin_system_6_1_plugin_contract", "label": "6.1 Plugin Contract", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L52"}, {"id": "design_spec_sections_06_plugin_system_6_1_1_package_layout", "label": "6.1.1 Package layout", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L56"}, {"id": "design_spec_sections_06_plugin_system_codeblock_2", "label": "code:block2 (/)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L58"}, {"id": "design_spec_sections_06_plugin_system_6_1_2_manifest_yml_schema", "label": "6.1.2 `manifest.yml` schema", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L70"}, {"id": "design_spec_sections_06_plugin_system_codeblock_3", "label": "code:yaml (# Required identity fields)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L74"}, {"id": "design_spec_sections_06_plugin_system_6_1_3_the_plugin_base_class", "label": "6.1.3 The `Plugin` base class", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L104"}, {"id": "design_spec_sections_06_plugin_system_codeblock_4", "label": "code:python (# exlab_wizard/plugins/__init__.py -- shipped with the app)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L106"}, {"id": "design_spec_sections_06_plugin_system_6_1_5_what_plugins_must_not_touch", "label": "6.1.5 What plugins must not touch", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L254"}, {"id": "design_spec_sections_06_plugin_system_6_1_4_the_plugincontext_object", "label": "6.1.4 The `PluginContext` object", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L266"}, {"id": "design_spec_sections_06_plugin_system_codeblock_5", "label": "code:python (@dataclass(frozen=True))", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L270"}, {"id": "design_spec_sections_06_plugin_system_6_2_plugin_registry", "label": "6.2 Plugin Registry", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L287"}, {"id": "design_spec_sections_06_plugin_system_6_2_1_discovery", "label": "6.2.1 Discovery", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L289"}, {"id": "design_spec_sections_06_plugin_system_6_2_2_resolution_per_creation_session", "label": "6.2.2 Resolution per creation session", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L308"}, {"id": "design_spec_sections_06_plugin_system_6_2_3_order_control_via_exlab_plugins", "label": "6.2.3 Order control via `_exlab_plugins`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L319"}, {"id": "design_spec_sections_06_plugin_system_codeblock_6", "label": "code:yaml (_exlab_plugins:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L323"}, {"id": "design_spec_sections_06_plugin_system_6_2_4_what_gets_recorded_in_creation_json", "label": "6.2.4 What gets recorded in `creation.json`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L334"}, {"id": "design_spec_sections_06_plugin_system_codeblock_7", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L338"}, {"id": "design_spec_sections_06_plugin_system_6_3_subprocess_isolation", "label": "6.3 Subprocess Isolation", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L354"}, {"id": "design_spec_sections_06_plugin_system_6_3_1_process_model", "label": "6.3.1 Process model", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L358"}, {"id": "design_spec_sections_06_plugin_system_6_3_2_ipc_envelope", "label": "6.3.2 IPC envelope", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L370"}, {"id": "design_spec_sections_06_plugin_system_codeblock_8", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L376"}, {"id": "design_spec_sections_06_plugin_system_codeblock_9", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L387"}, {"id": "design_spec_sections_06_plugin_system_6_3_3_resource_limits", "label": "6.3.3 Resource limits", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L401"}, {"id": "design_spec_sections_06_plugin_system_6_3_4_failure_handling", "label": "6.3.4 Failure handling", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L422"}, {"id": "design_spec_sections_06_plugin_system_6_3_6_validation_worker_subprocess_mode_validate", "label": "6.3.6 Validation-worker subprocess (mode = `validate`)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L439"}, {"id": "design_spec_sections_06_plugin_system_6_3_5_security_model_what_isolation_does_and_does_not_solve", "label": "6.3.5 Security model: what isolation does and does not solve", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L460"}, {"id": "design_spec_sections_06_plugin_system_6_4_plugin_input_escalation_plugininputrequired", "label": "6.4 Plugin Input Escalation (`PluginInputRequired`)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L487"}, {"id": "design_spec_sections_06_plugin_system_6_4_1_suspend_resume_flow", "label": "6.4.1 Suspend / resume flow", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L494"}, {"id": "design_spec_sections_06_plugin_system_6_4_2_resume_contract_what_the_plugin_author_must_guarantee", "label": "6.4.2 Resume contract (what the plugin author must guarantee)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L504"}, {"id": "design_spec_sections_06_plugin_system_6_5_base_plugin_scaffold_hello_plugin", "label": "6.5 Base Plugin Scaffold (`hello_plugin`)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L517"}, {"id": "design_spec_sections_06_plugin_system_6_5_1_directory", "label": "6.5.1 Directory", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L521"}, {"id": "design_spec_sections_06_plugin_system_codeblock_10", "label": "code:block10 (hello_plugin/)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L523"}, {"id": "design_spec_sections_06_plugin_system_6_5_2_init_py", "label": "6.5.2 `__init__.py`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L531"}, {"id": "design_spec_sections_06_plugin_system_codeblock_11", "label": "code:python (\"\"\"hello_plugin -- minimal example plugin for ExLab-Wizard.)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L533"}, {"id": "design_spec_sections_06_plugin_system_6_5_3_manifest_yml", "label": "6.5.3 `manifest.yml`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L544"}, {"id": "design_spec_sections_06_plugin_system_codeblock_12", "label": "code:yaml (name: \"hello_plugin\")", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L546"}, {"id": "design_spec_sections_06_plugin_system_6_5_4_plugin_py", "label": "6.5.4 `plugin.py`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L564"}, {"id": "design_spec_sections_06_plugin_system_codeblock_13", "label": "code:python (from pathlib import Path)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L566"}, {"id": "design_spec_sections_06_plugin_system_6_5_5_readme_md", "label": "6.5.5 `README.md`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L598"}, {"id": "design_spec_sections_06_plugin_system_6_6_worked_example_xlsx_field_filler", "label": "6.6 Worked Example: `xlsx_field_filler`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L602"}, {"id": "design_spec_sections_06_plugin_system_6_6_1_what_it_does", "label": "6.6.1 What it does", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L606"}, {"id": "design_spec_sections_06_plugin_system_6_6_2_manifest_yml", "label": "6.6.2 `manifest.yml`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L610"}, {"id": "design_spec_sections_06_plugin_system_codeblock_14", "label": "code:yaml (name: \"xlsx_field_filler\")", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L612"}, {"id": "design_spec_sections_06_plugin_system_6_6_3_plugin_py", "label": "6.6.3 `plugin.py`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L635"}, {"id": "design_spec_sections_06_plugin_system_codeblock_15", "label": "code:python (from pathlib import Path)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L637"}, {"id": "design_spec_sections_06_plugin_system_6_6_4_what_this_exercises", "label": "6.6.4 What this exercises", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L809"}, {"id": "design_spec_sections_06_plugin_system_6_7_example_plugins_illustrative_catalog", "label": "6.7 Example Plugins (Illustrative Catalog)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L825"}, {"id": "design_spec_sections_06_plugin_system_6_8_plugin_authoring_checklist", "label": "6.8 Plugin Authoring Checklist", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L835"}, {"id": "design_spec_sections_06_plugin_system_6_9_lint_cli_exlab_wizard_plugins_lint", "label": "6.9 Lint CLI: `exlab-wizard plugins lint`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L849"}, {"id": "design_spec_sections_06_plugin_system_codeblock_16", "label": "code:block16 (exlab-wizard plugins lint )", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L855"}, {"id": "design_spec_sections_06_plugin_system_6_10_test_debug_cli_exlab_wizard_plugins_exec", "label": "6.10 Test / Debug CLI: `exlab-wizard plugins exec`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md", "source_location": "L899"}, {"id": "design_spec_sections_06_plugin_system_codeblock_17", "label": "code:block17 (exlab-wizard plugins exec --against :`` (spec, not bare name). Regre", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L240"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "keyring", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "keyring_backend", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "exlab_wizard_constants_keyring", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "exlab_wizard_lims_keyring_store", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "exlab_wizard_sync_nas_client", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "exlab_wizard_tray", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "exlab_wizard_tray_dependencies", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "tray_test_dependencies_inmemorykeyring", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L44", "weight": 1.0}, {"source": "tray_test_dependencies_inmemorykeyring", "target": "tray_test_dependencies_inmemorykeyring_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L49", "weight": 1.0}, {"source": "tray_test_dependencies_inmemorykeyring", "target": "tray_test_dependencies_inmemorykeyring_get_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L52", "weight": 1.0}, {"source": "tray_test_dependencies_inmemorykeyring", "target": "tray_test_dependencies_inmemorykeyring_set_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L55", "weight": 1.0}, {"source": "tray_test_dependencies_inmemorykeyring", "target": "tray_test_dependencies_inmemorykeyring_delete_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "tray_test_dependencies_swap_keyring", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "tray_test_dependencies_test_build_production_dependencies_exposes_keyring_store", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L80", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L120", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L137", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "tray_test_dependencies_nas_config_with_two_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L159", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L194", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "tray_test_dependencies_test_check_nas_passwords_present_handles_none_store_and_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L208", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L214", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "target": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L237", "weight": 1.0}, {"source": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", "target": "tray_test_dependencies_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L128", "weight": 1.0}, {"source": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", "target": "tray_test_dependencies_inmemorykeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L128", "weight": 1.0}, {"source": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", "target": "tray_test_dependencies_inmemorykeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L130", "weight": 1.0}, {"source": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", "target": "tray_test_dependencies_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L142", "weight": 1.0}, {"source": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", "target": "tray_test_dependencies_inmemorykeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L142", "weight": 1.0}, {"source": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", "target": "tray_test_dependencies_inmemorykeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L144", "weight": 1.0}, {"source": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", "target": "tray_test_dependencies_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L197", "weight": 1.0}, {"source": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", "target": "tray_test_dependencies_inmemorykeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L197", "weight": 1.0}, {"source": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", "target": "tray_test_dependencies_inmemorykeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L200", "weight": 1.0}, {"source": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", "target": "tray_test_dependencies_nas_config_with_two_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L201", "weight": 1.0}, {"source": "tray_test_dependencies_test_check_nas_passwords_present_handles_none_store_and_config", "target": "tray_test_dependencies_nas_config_with_two_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L209", "weight": 1.0}, {"source": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", "target": "tray_test_dependencies_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L220", "weight": 1.0}, {"source": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", "target": "tray_test_dependencies_inmemorykeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L220", "weight": 1.0}, {"source": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", "target": "tray_test_dependencies_nas_config_with_two_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L222", "weight": 1.0}, {"source": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "target": "tray_test_dependencies_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L260", "weight": 1.0}, {"source": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "target": "tray_test_dependencies_inmemorykeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L260", "weight": 1.0}, {"source": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "target": "tray_test_dependencies_nas_config_with_two_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L262", "weight": 1.0}, {"source": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "target": "tray_test_dependencies_inmemorykeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L263", "weight": 1.0}, {"source": "tray_test_dependencies_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_tray_test_dependencies_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_test_dependencies_rationale_45", "target": "tray_test_dependencies_inmemorykeyring", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L45", "weight": 1.0}, {"source": "tray_test_dependencies_rationale_73", "target": "tray_test_dependencies_test_build_production_dependencies_exposes_keyring_store", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L73", "weight": 1.0}, {"source": "tray_test_dependencies_rationale_83", "target": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L83", "weight": 1.0}, {"source": "tray_test_dependencies_rationale_121", "target": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L121", "weight": 1.0}, {"source": "tray_test_dependencies_rationale_140", "target": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L140", "weight": 1.0}, {"source": "tray_test_dependencies_rationale_160", "target": "tray_test_dependencies_nas_config_with_two_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L160", "weight": 1.0}, {"source": "tray_test_dependencies_rationale_217", "target": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L217", "weight": 1.0}, {"source": "tray_test_dependencies_rationale_240", "target": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L240", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_test_dependencies_inmemorykeyring_get_password", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L53"}, {"caller_nid": "tray_test_dependencies_inmemorykeyring_delete_password", "callee": "pop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L59"}, {"caller_nid": "tray_test_dependencies_swap_keyring", "callee": "get_keyring", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L64"}, {"caller_nid": "tray_test_dependencies_swap_keyring", "callee": "set_keyring", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L65"}, {"caller_nid": "tray_test_dependencies_swap_keyring", "callee": "set_keyring", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L69"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_exposes_keyring_store", "callee": "build_production_dependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L75"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_exposes_keyring_store", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L77"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L91"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L92"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L93"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L93"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L95"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L98"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L101"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L106"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L111"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "callee": "build_production_dependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L113"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L115"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L116"}, {"caller_nid": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L117"}, {"caller_nid": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L129"}, {"caller_nid": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L131"}, {"caller_nid": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", "callee": "_check_keyring_present", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L134"}, {"caller_nid": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L143"}, {"caller_nid": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L145"}, {"caller_nid": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", "callee": "_build_lims_client", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L149"}, {"caller_nid": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", "callee": "_password_provider", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L151"}, {"caller_nid": "tray_test_dependencies_nas_config_with_two_equipment", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L161"}, {"caller_nid": "tray_test_dependencies_nas_config_with_two_equipment", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L162"}, {"caller_nid": "tray_test_dependencies_nas_config_with_two_equipment", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L164"}, {"caller_nid": "tray_test_dependencies_nas_config_with_two_equipment", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L170"}, {"caller_nid": "tray_test_dependencies_nas_config_with_two_equipment", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L177"}, {"caller_nid": "tray_test_dependencies_nas_config_with_two_equipment", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L183"}, {"caller_nid": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L198"}, {"caller_nid": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", "callee": "keyring_nas_username", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L200"}, {"caller_nid": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", "callee": "_check_nas_passwords_present", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L203"}, {"caller_nid": "tray_test_dependencies_test_check_nas_passwords_present_handles_none_store_and_config", "callee": "_check_nas_passwords_present", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L210"}, {"caller_nid": "tray_test_dependencies_test_check_nas_passwords_present_handles_none_store_and_config", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L210"}, {"caller_nid": "tray_test_dependencies_test_check_nas_passwords_present_handles_none_store_and_config", "callee": "_check_nas_passwords_present", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L211"}, {"caller_nid": "tray_test_dependencies_test_check_nas_passwords_present_handles_none_store_and_config", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L211"}, {"caller_nid": "tray_test_dependencies_test_check_nas_passwords_present_handles_none_store_and_config", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L211"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L221"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", "callee": "build_production_dependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L224"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", "callee": "_make_equipment_probe", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L230"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L231"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", "callee": "probe", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L231"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L253"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L254"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L254"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "callee": "copy", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L256"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "callee": "chmod", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L257"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L257"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L258"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L261"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "callee": "keyring_nas_username", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L263"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "callee": "build_production_dependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L265"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "callee": "_make_equipment_probe", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L269"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L270"}, {"caller_nid": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", "callee": "probe", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py", "source_location": "L270"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/51b1d63c5037198315baa6c65496fdcebc3f200d9e2cab6120bf0e8e9070a79a.json b/graphify-out/cache/ast/51b1d63c5037198315baa6c65496fdcebc3f200d9e2cab6120bf0e8e9070a79a.json new file mode 100644 index 0000000..6ef87e9 --- /dev/null +++ b/graphify-out/cache/ast/51b1d63c5037198315baa6c65496fdcebc3f200d9e2cab6120bf0e8e9070a79a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "label": "settings.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L1"}, {"id": "pages_settings_password_requiring_nas_equipment", "label": "_password_requiring_nas_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L60"}, {"id": "pages_settings_settings_sections_for", "label": "settings_sections_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L78"}, {"id": "pages_settings_settingsstate", "label": "SettingsState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L98"}, {"id": "pages_settings_first_incomplete_section", "label": "first_incomplete_section()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L107"}, {"id": "pages_settings_save_button_label", "label": "save_button_label()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L128"}, {"id": "pages_settings_section_has_warning", "label": "section_has_warning()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L138"}, {"id": "pages_settings_section_is_dirty", "label": "section_is_dirty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L144"}, {"id": "pages_settings_build_settings_draft", "label": "build_settings_draft()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L150"}, {"id": "pages_settings_finalize_settings_draft", "label": "finalize_settings_draft()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L161"}, {"id": "pages_settings_lims_credential_initial_state", "label": "lims_credential_initial_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L179"}, {"id": "pages_settings_render_settings_page", "label": "render_settings_page()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L192"}, {"id": "pages_settings_render_chip_editor", "label": "_render_chip_editor()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L391"}, {"id": "pages_settings_render_section_body", "label": "_render_section_body()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L476"}, {"id": "pages_settings_render_equipment_section", "label": "_render_equipment_section()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L712"}, {"id": "pages_settings_render_nas_credentials_section", "label": "_render_nas_credentials_section()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L839"}, {"id": "pages_settings_rationale_1", "label": "Settings dialog (Frontend Spec \u00a77). Two-pane modal with a left vertical-nav and", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L1"}, {"id": "pages_settings_rationale_61", "label": "Return nas-mode equipment whose transport sources a keyring password. Share", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L61"}, {"id": "pages_settings_rationale_79", "label": "Return the visible section ids for ``config``. The NAS-credentials section", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L79"}, {"id": "pages_settings_rationale_99", "label": "Mutable state for the dialog.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L99"}, {"id": "pages_settings_rationale_108", "label": "Return the first section ID in canonical order that's incomplete. The dynam", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L108"}, {"id": "pages_settings_rationale_129", "label": "Compute the *Save all* button label, including the badge count.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L129"}, {"id": "pages_settings_rationale_139", "label": "Return ``True`` when the sidebar should decorate ``section``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L139"}, {"id": "pages_settings_rationale_145", "label": "Return ``True`` when ``section`` has uncommitted edits.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L145"}, {"id": "pages_settings_rationale_151", "label": "Return the editable deep-copy draft the settings dialog mutates. ``None`` (", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L151"}, {"id": "pages_settings_rationale_162", "label": "Re-validate a mutated draft into a clean :class:`Config`. The dialog's two-", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L162"}, {"id": "pages_settings_rationale_180", "label": "Return the credential-row state seeding the LIMS password field. A password", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L180"}, {"id": "pages_settings_rationale_211", "label": "Render the settings dialog. ``config`` is the live ``config.yaml`` model (o", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L211"}, {"id": "pages_settings_rationale_401", "label": "Reusable chip / list editor bound to a draft string list (T7 / T10). Mutate", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L401"}, {"id": "pages_settings_rationale_492", "label": "Render the content for a single section, bound to ``draft``. Every scalar f", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L492"}, {"id": "pages_settings_rationale_713", "label": "Render the equipment list + a full add-equipment sub-form. Adding an entry", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L713"}, {"id": "pages_settings_rationale_847", "label": "Render one keyring-credential row + Test-connection panel per equipment. Rc", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L847"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "exlab_wizard_ui", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "exlab_wizard_ui_components", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_password_requiring_nas_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_settings_sections_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L78", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_settingsstate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L98", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_first_incomplete_section", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L107", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_save_button_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L128", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_section_has_warning", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L138", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_section_is_dirty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L144", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_build_settings_draft", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L150", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_finalize_settings_draft", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L161", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_lims_credential_initial_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L179", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_render_settings_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L192", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_render_chip_editor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L391", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_render_section_body", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L476", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "exlab_wizard_ui_equipment_form", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L709", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_render_equipment_section", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L712", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "target": "pages_settings_render_nas_credentials_section", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L839", "weight": 1.0}, {"source": "pages_settings_settings_sections_for", "target": "pages_settings_password_requiring_nas_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L87", "weight": 1.0}, {"source": "pages_settings_render_settings_page", "target": "pages_settings_settingsstate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L240", "weight": 1.0}, {"source": "pages_settings_render_settings_page", "target": "pages_settings_first_incomplete_section", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L245", "weight": 1.0}, {"source": "pages_settings_render_settings_page", "target": "pages_settings_build_settings_draft", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L257", "weight": 1.0}, {"source": "pages_settings_render_settings_page", "target": "pages_settings_settings_sections_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L261", "weight": 1.0}, {"source": "pages_settings_render_settings_page", "target": "pages_settings_save_button_label", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L265", "weight": 1.0}, {"source": "pages_settings_render_settings_page", "target": "pages_settings_section_has_warning", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L267", "weight": 1.0}, {"source": "pages_settings_render_settings_page", "target": "pages_settings_section_is_dirty", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L334", "weight": 1.0}, {"source": "pages_settings_render_settings_page", "target": "pages_settings_render_section_body", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L343", "weight": 1.0}, {"source": "pages_settings_render_section_body", "target": "pages_settings_lims_credential_initial_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L543", "weight": 1.0}, {"source": "pages_settings_render_section_body", "target": "pages_settings_render_equipment_section", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L554", "weight": 1.0}, {"source": "pages_settings_render_section_body", "target": "pages_settings_render_nas_credentials_section", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L556", "weight": 1.0}, {"source": "pages_settings_render_section_body", "target": "pages_settings_render_chip_editor", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L584", "weight": 1.0}, {"source": "pages_settings_render_nas_credentials_section", "target": "pages_settings_password_requiring_nas_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L863", "weight": 1.0}, {"source": "pages_settings_render_nas_credentials_section", "target": "pages_settings_lims_credential_initial_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L890", "weight": 1.0}, {"source": "pages_settings_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_settings_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L1", "weight": 1.0}, {"source": "pages_settings_rationale_61", "target": "pages_settings_password_requiring_nas_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L61", "weight": 1.0}, {"source": "pages_settings_rationale_79", "target": "pages_settings_settings_sections_for", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L79", "weight": 1.0}, {"source": "pages_settings_rationale_99", "target": "pages_settings_settingsstate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L99", "weight": 1.0}, {"source": "pages_settings_rationale_108", "target": "pages_settings_first_incomplete_section", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L108", "weight": 1.0}, {"source": "pages_settings_rationale_129", "target": "pages_settings_save_button_label", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L129", "weight": 1.0}, {"source": "pages_settings_rationale_139", "target": "pages_settings_section_has_warning", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L139", "weight": 1.0}, {"source": "pages_settings_rationale_145", "target": "pages_settings_section_is_dirty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L145", "weight": 1.0}, {"source": "pages_settings_rationale_151", "target": "pages_settings_build_settings_draft", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L151", "weight": 1.0}, {"source": "pages_settings_rationale_162", "target": "pages_settings_finalize_settings_draft", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L162", "weight": 1.0}, {"source": "pages_settings_rationale_180", "target": "pages_settings_lims_credential_initial_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L180", "weight": 1.0}, {"source": "pages_settings_rationale_211", "target": "pages_settings_render_settings_page", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L211", "weight": 1.0}, {"source": "pages_settings_rationale_401", "target": "pages_settings_render_chip_editor", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L401", "weight": 1.0}, {"source": "pages_settings_rationale_492", "target": "pages_settings_render_section_body", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L492", "weight": 1.0}, {"source": "pages_settings_rationale_713", "target": "pages_settings_render_equipment_section", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L713", "weight": 1.0}, {"source": "pages_settings_rationale_847", "target": "pages_settings_render_nas_credentials_section", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L847", "weight": 1.0}], "raw_calls": [{"caller_nid": "pages_settings_password_requiring_nas_equipment", "callee": "transport_requires_keyring_password", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L74"}, {"caller_nid": "pages_settings_settings_sections_for", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L91"}, {"caller_nid": "pages_settings_settings_sections_for", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L93"}, {"caller_nid": "pages_settings_settings_sections_for", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L94"}, {"caller_nid": "pages_settings_first_incomplete_section", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L119"}, {"caller_nid": "pages_settings_first_incomplete_section", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L121"}, {"caller_nid": "pages_settings_build_settings_draft", "callee": "model_copy", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L158"}, {"caller_nid": "pages_settings_build_settings_draft", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L158"}, {"caller_nid": "pages_settings_finalize_settings_draft", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L176"}, {"caller_nid": "pages_settings_finalize_settings_draft", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L176"}, {"caller_nid": "pages_settings_lims_credential_initial_state", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L189"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L266"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L268"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L277"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L277"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "card", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L277"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L289"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L289"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L289"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L309"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "splitter", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L309"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L310"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L310"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L310"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L313"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L313"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L313"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L313"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L320"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "_select_section", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L322"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L325"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L325"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L335"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L335"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L337"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "icon", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L337"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L340"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L340"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L374"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L374"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L374"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L380"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L380"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "on_discard", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L382"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L384"}, {"caller_nid": "pages_settings_render_settings_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L384"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L412"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L412"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L412"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "_render_chips", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L443"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L445"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L445"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L463"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L463"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L463"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L464"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L464"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "_add", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L464"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L471"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L471"}, {"caller_nid": "pages_settings_render_chip_editor", "callee": "_reset", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L471"}, {"caller_nid": "pages_settings_render_section_body", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L510"}, {"caller_nid": "pages_settings_render_section_body", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L510"}, {"caller_nid": "pages_settings_render_section_body", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L510"}, {"caller_nid": "pages_settings_render_section_body", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L510"}, {"caller_nid": "pages_settings_render_section_body", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L515"}, {"caller_nid": "pages_settings_render_section_body", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L515"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L523"}, {"caller_nid": "pages_settings_render_section_body", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L523"}, {"caller_nid": "pages_settings_render_section_body", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L523"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L526"}, {"caller_nid": "pages_settings_render_section_body", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L526"}, {"caller_nid": "pages_settings_render_section_body", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L526"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L529"}, {"caller_nid": "pages_settings_render_section_body", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L529"}, {"caller_nid": "pages_settings_render_section_body", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L529"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L533"}, {"caller_nid": "pages_settings_render_section_body", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L533"}, {"caller_nid": "pages_settings_render_section_body", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L533"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L536"}, {"caller_nid": "pages_settings_render_section_body", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L536"}, {"caller_nid": "pages_settings_render_section_body", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L536"}, {"caller_nid": "pages_settings_render_section_body", "callee": "credential_field", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L539"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L546"}, {"caller_nid": "pages_settings_render_section_body", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L546"}, {"caller_nid": "pages_settings_render_section_body", "callee": "number", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L546"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L549"}, {"caller_nid": "pages_settings_render_section_body", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L549"}, {"caller_nid": "pages_settings_render_section_body", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L549"}, {"caller_nid": "pages_settings_render_section_body", "callee": "test_connection_panel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L552"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L563"}, {"caller_nid": "pages_settings_render_section_body", "callee": "checkbox", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L563"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L566"}, {"caller_nid": "pages_settings_render_section_body", "callee": "number", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L566"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L569"}, {"caller_nid": "pages_settings_render_section_body", "callee": "number", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L569"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L572"}, {"caller_nid": "pages_settings_render_section_body", "callee": "checkbox", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L572"}, {"caller_nid": "pages_settings_render_section_body", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L580"}, {"caller_nid": "pages_settings_render_section_body", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L580"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L591"}, {"caller_nid": "pages_settings_render_section_body", "callee": "number", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L591"}, {"caller_nid": "pages_settings_render_section_body", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L595"}, {"caller_nid": "pages_settings_render_section_body", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L595"}, {"caller_nid": "pages_settings_render_section_body", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L606"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L610"}, {"caller_nid": "pages_settings_render_section_body", "callee": "radio", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L610"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L613"}, {"caller_nid": "pages_settings_render_section_body", "callee": "number", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L613"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L616"}, {"caller_nid": "pages_settings_render_section_body", "callee": "number", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L616"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L626"}, {"caller_nid": "pages_settings_render_section_body", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L626"}, {"caller_nid": "pages_settings_render_section_body", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L629"}, {"caller_nid": "pages_settings_render_section_body", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L629"}, {"caller_nid": "pages_settings_render_section_body", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L632"}, {"caller_nid": "pages_settings_render_section_body", "callee": "suggested_staging_root", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L632"}, {"caller_nid": "pages_settings_render_section_body", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L655"}, {"caller_nid": "pages_settings_render_section_body", "callee": "checkbox", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L655"}, {"caller_nid": "pages_settings_render_section_body", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L661"}, {"caller_nid": "pages_settings_render_section_body", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L665"}, {"caller_nid": "pages_settings_render_section_body", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L665"}, {"caller_nid": "pages_settings_render_section_body", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L668"}, {"caller_nid": "pages_settings_render_section_body", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L668"}, {"caller_nid": "pages_settings_render_section_body", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L675"}, {"caller_nid": "pages_settings_render_section_body", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L675"}, {"caller_nid": "pages_settings_render_section_body", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L677"}, {"caller_nid": "pages_settings_render_section_body", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L702"}, {"caller_nid": "pages_settings_render_section_body", "callee": "_confirm_quit", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L702"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L727"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L727"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L727"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "_render_rows", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L745"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L747"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L747"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L750"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L750"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L751"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L751"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L752"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L752"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L760"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "radio", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L760"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "_transport_fields", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L800"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "on_value_change", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L801"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "refresh", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L801"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L836"}, {"caller_nid": "pages_settings_render_equipment_section", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L836"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L865"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L865"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L870"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L870"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L877"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L877"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L877"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L877"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "nas_credential_handlers", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L883"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "credential_field", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L886"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "nas_password_present_for", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L891"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L895"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L895"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L910"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L910"}, {"caller_nid": "pages_settings_render_nas_credentials_section", "callee": "_make_test", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py", "source_location": "L910"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/52fcbdd846718b7ed27f97c801c6bf220823403bbdddfb18eed630639639f981.json b/graphify-out/cache/ast/52fcbdd846718b7ed27f97c801c6bf220823403bbdddfb18eed630639639f981.json new file mode 100644 index 0000000..49f2088 --- /dev/null +++ b/graphify-out/cache/ast/52fcbdd846718b7ed27f97c801c6bf220823403bbdddfb18eed630639639f981.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_sync_transports_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/53628a99e3ed551343e3af649dc2e0492f2d3a7901dc967dcedbf4d76dfe9129.json b/graphify-out/cache/ast/53628a99e3ed551343e3af649dc2e0492f2d3a7901dc967dcedbf4d76dfe9129.json new file mode 100644 index 0000000..3c16556 --- /dev/null +++ b/graphify-out/cache/ast/53628a99e3ed551343e3af649dc2e0492f2d3a7901dc967dcedbf4d76dfe9129.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "label": "test_flow_27_nas_credential_settings.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L1"}, {"id": "e2e_test_flow_27_nas_credential_settings_seed_config", "label": "_seed_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L46"}, {"id": "e2e_test_flow_27_nas_credential_settings_install_stub_rclone", "label": "_install_stub_rclone()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L95"}, {"id": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "label": "nas_prod_server()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L105"}, {"id": "e2e_test_flow_27_nas_credential_settings_setup_state", "label": "_setup_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L175"}, {"id": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "label": "test_nas_credential_gate_set_test_and_clear()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L179"}, {"id": "e2e_test_flow_27_nas_credential_settings_rationale_1", "label": "E2E flow 27: NAS-credential setup gate + Settings section (rclone-only). Boots", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L1"}, {"id": "e2e_test_flow_27_nas_credential_settings_rationale_47", "label": "Write a config.yaml with one nas-mode equipment under the tmp HOME. LIMS is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L47"}, {"id": "e2e_test_flow_27_nas_credential_settings_rationale_106", "label": "Spawn the production wizard seeded with a credential-less nas equipment. Yi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L106"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "shutil", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "stat", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "httpx", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "tests_e2e_prod_server", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "tests_e2e_conftest", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "e2e_test_flow_27_nas_credential_settings_seed_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "e2e_test_flow_27_nas_credential_settings_install_stub_rclone", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L95", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L105", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "e2e_test_flow_27_nas_credential_settings_setup_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L175", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "target": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L179", "weight": 1.0}, {"source": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "target": "e2e_test_flow_27_nas_credential_settings_install_stub_rclone", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L119", "weight": 1.0}, {"source": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "target": "e2e_test_flow_27_nas_credential_settings_seed_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L128", "weight": 1.0}, {"source": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "target": "e2e_test_flow_27_nas_credential_settings_setup_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L184", "weight": 1.0}, {"source": "e2e_test_flow_27_nas_credential_settings_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_27_nas_credential_settings_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_test_flow_27_nas_credential_settings_rationale_47", "target": "e2e_test_flow_27_nas_credential_settings_seed_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L47", "weight": 1.0}, {"source": "e2e_test_flow_27_nas_credential_settings_rationale_106", "target": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L106", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L65"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L66"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L67"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L68"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L69"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L71"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L71"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L73"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L76"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L78"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L86"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L86"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L88"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "resolve_config_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L89"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L90"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_seed_config", "callee": "save_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L91"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_install_stub_rclone", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L96"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_install_stub_rclone", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L97"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_install_stub_rclone", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L97"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_install_stub_rclone", "callee": "copy", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L99"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_install_stub_rclone", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L100"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_install_stub_rclone", "callee": "chmod", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L101"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L112"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L114"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L115"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L117"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "prod_app_env", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L121"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L122"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "free_port", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L130"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "Popen", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L131"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L141"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L149"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L151"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L156"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "terminate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L158"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L160"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "kill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L162"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "skip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L163"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "terminate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L167"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L169"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "kill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L171"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L172"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_setup_state", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L176"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_setup_state", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L176"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "new_context", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L186"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "new_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L187"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L190"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L191"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L192"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L192"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L193"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L193"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L194"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L194"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L199"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L199"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L200"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L200"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L203"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L203"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L204"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L204"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L205"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L212"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L212"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L213"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "get_by_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L213"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L216"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L216"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L217"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L217"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L220"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L220"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L221"}, {"caller_nid": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py", "source_location": "L225"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/53e582475d773b27ec968c07be7346f1bcad0e4093bc87d8ae91bf1b0586d2a7.json b/graphify-out/cache/ast/53e582475d773b27ec968c07be7346f1bcad0e4093bc87d8ae91bf1b0586d2a7.json new file mode 100644 index 0000000..7ef54e5 --- /dev/null +++ b/graphify-out/cache/ast/53e582475d773b27ec968c07be7346f1bcad0e4093bc87d8ae91bf1b0586d2a7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "label": "notifications.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L1"}, {"id": "ui_notifications_severity", "label": "Severity", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L35"}, {"id": "strenum", "label": "StrEnum", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "ui_notifications_bannerid", "label": "BannerId", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L44"}, {"id": "ui_notifications_containerid", "label": "ContainerId", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L58"}, {"id": "ui_notifications_actionspec", "label": "ActionSpec", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L67"}, {"id": "ui_notifications_emit_toast", "label": "_emit_toast()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L106"}, {"id": "ui_notifications_notify_success", "label": "notify_success()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L165"}, {"id": "ui_notifications_notify_info", "label": "notify_info()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L179"}, {"id": "ui_notifications_notify_warning", "label": "notify_warning()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L190"}, {"id": "ui_notifications_notify_error", "label": "notify_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L204"}, {"id": "ui_notifications_notify_field_error", "label": "notify_field_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L223"}, {"id": "ui_notifications_notify_form_error", "label": "notify_form_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L233"}, {"id": "ui_notifications_clear_field_error", "label": "clear_field_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L243"}, {"id": "ui_notifications_clear_form_errors", "label": "clear_form_errors()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L249"}, {"id": "ui_notifications_get_field_error", "label": "get_field_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L255"}, {"id": "ui_notifications_get_form_error", "label": "get_form_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L261"}, {"id": "ui_notifications_show_banner", "label": "show_banner()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L272"}, {"id": "ui_notifications_clear_banner", "label": "clear_banner()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L312"}, {"id": "ui_notifications_list_active_banners", "label": "list_active_banners()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L318"}, {"id": "ui_notifications_banner_overflow_count", "label": "banner_overflow_count()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L334"}, {"id": "ui_notifications_reset_for_tests", "label": "reset_for_tests()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L341"}, {"id": "ui_notifications_rationale_1", "label": "Canonical notification helpers (Frontend Spec \u00a72.2). This module is the **only*", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L1"}, {"id": "ui_notifications_rationale_36", "label": "Banner severity (Frontend \u00a72.2.3).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L36"}, {"id": "ui_notifications_rationale_45", "label": "Closed-set banner triggers (Frontend \u00a72.2.3). Adding a new banner is a deli", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L45"}, {"id": "ui_notifications_rationale_59", "label": "Banner placement scopes (Frontend \u00a72.2.3).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L59"}, {"id": "ui_notifications_rationale_68", "label": "A single action affordance attached to a notification. At most one action p", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L68"}, {"id": "ui_notifications_rationale_113", "label": "Lower-level wrapper around ``ui.notify``. Calls into NiceGUI lazily to avoi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L113"}, {"id": "ui_notifications_rationale_166", "label": "Show a success toast (Frontend \u00a72.2.2). 4 s default duration; 12 s when an", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L166"}, {"id": "ui_notifications_rationale_180", "label": "Show an info toast (Frontend \u00a72.2.2).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L180"}, {"id": "ui_notifications_rationale_191", "label": "Show a warning toast (Frontend \u00a72.2.2). 8 s default duration; 12 s when an", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L191"}, {"id": "ui_notifications_rationale_205", "label": "Show an error toast (Frontend \u00a72.2.2). 8 s default duration; 12 s when an a", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L205"}, {"id": "ui_notifications_rationale_224", "label": "Register a field-level inline error (Frontend \u00a72.2.4).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L224"}, {"id": "ui_notifications_rationale_234", "label": "Register a form-level inline error (Frontend \u00a72.2.4).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L234"}, {"id": "ui_notifications_rationale_244", "label": "Clear a previously registered field-level error.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L244"}, {"id": "ui_notifications_rationale_250", "label": "Clear all form-level errors registered against ``form_id``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L250"}, {"id": "ui_notifications_rationale_256", "label": "Return the registered field-level error for ``field_id`` or ``None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L256"}, {"id": "ui_notifications_rationale_262", "label": "Return the registered form-level error for ``form_id`` or ``None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L262"}, {"id": "ui_notifications_rationale_281", "label": "Activate a banner from the closed \u00a72.2.3 set. Raises: ValueError: w", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L281"}, {"id": "ui_notifications_rationale_313", "label": "Deactivate a banner if it was active.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L313"}, {"id": "ui_notifications_rationale_321", "label": "Return active banners, optionally filtered by container. Banners are return", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L321"}, {"id": "ui_notifications_rationale_335", "label": "How many banners exceed the stacking cap of 2 (Frontend \u00a72.2.3).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L335"}, {"id": "ui_notifications_rationale_342", "label": "Clear all module-level state. Test fixtures only.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L342"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "enum", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_severity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L35", "weight": 1.0}, {"source": "ui_notifications_severity", "target": "strenum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_bannerid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L44", "weight": 1.0}, {"source": "ui_notifications_bannerid", "target": "strenum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_containerid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L58", "weight": 1.0}, {"source": "ui_notifications_containerid", "target": "strenum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_actionspec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_emit_toast", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L106", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_notify_success", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L165", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_notify_info", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L179", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_notify_warning", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L190", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_notify_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L204", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_notify_field_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L223", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_notify_form_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L233", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_clear_field_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L243", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_clear_form_errors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L249", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_get_field_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L255", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_get_form_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L261", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_show_banner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L272", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_clear_banner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L312", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_list_active_banners", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L318", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_banner_overflow_count", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L334", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "target": "ui_notifications_reset_for_tests", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L341", "weight": 1.0}, {"source": "ui_notifications_notify_success", "target": "ui_notifications_emit_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L171", "weight": 1.0}, {"source": "ui_notifications_notify_info", "target": "ui_notifications_emit_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L182", "weight": 1.0}, {"source": "ui_notifications_notify_warning", "target": "ui_notifications_emit_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L196", "weight": 1.0}, {"source": "ui_notifications_notify_error", "target": "ui_notifications_emit_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L210", "weight": 1.0}, {"source": "ui_notifications_banner_overflow_count", "target": "ui_notifications_list_active_banners", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L337", "weight": 1.0}, {"source": "ui_notifications_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_notifications_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_notifications_rationale_36", "target": "ui_notifications_severity", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L36", "weight": 1.0}, {"source": "ui_notifications_rationale_45", "target": "ui_notifications_bannerid", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L45", "weight": 1.0}, {"source": "ui_notifications_rationale_59", "target": "ui_notifications_containerid", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L59", "weight": 1.0}, {"source": "ui_notifications_rationale_68", "target": "ui_notifications_actionspec", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L68", "weight": 1.0}, {"source": "ui_notifications_rationale_113", "target": "ui_notifications_emit_toast", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L113", "weight": 1.0}, {"source": "ui_notifications_rationale_166", "target": "ui_notifications_notify_success", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L166", "weight": 1.0}, {"source": "ui_notifications_rationale_180", "target": "ui_notifications_notify_info", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L180", "weight": 1.0}, {"source": "ui_notifications_rationale_191", "target": "ui_notifications_notify_warning", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L191", "weight": 1.0}, {"source": "ui_notifications_rationale_205", "target": "ui_notifications_notify_error", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L205", "weight": 1.0}, {"source": "ui_notifications_rationale_224", "target": "ui_notifications_notify_field_error", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L224", "weight": 1.0}, {"source": "ui_notifications_rationale_234", "target": "ui_notifications_notify_form_error", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L234", "weight": 1.0}, {"source": "ui_notifications_rationale_244", "target": "ui_notifications_clear_field_error", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L244", "weight": 1.0}, {"source": "ui_notifications_rationale_250", "target": "ui_notifications_clear_form_errors", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L250", "weight": 1.0}, {"source": "ui_notifications_rationale_256", "target": "ui_notifications_get_field_error", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L256", "weight": 1.0}, {"source": "ui_notifications_rationale_262", "target": "ui_notifications_get_form_error", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L262", "weight": 1.0}, {"source": "ui_notifications_rationale_281", "target": "ui_notifications_show_banner", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L281", "weight": 1.0}, {"source": "ui_notifications_rationale_313", "target": "ui_notifications_clear_banner", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L313", "weight": 1.0}, {"source": "ui_notifications_rationale_321", "target": "ui_notifications_list_active_banners", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L321", "weight": 1.0}, {"source": "ui_notifications_rationale_335", "target": "ui_notifications_banner_overflow_count", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L335", "weight": 1.0}, {"source": "ui_notifications_rationale_342", "target": "ui_notifications_reset_for_tests", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L342", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_notifications_emit_toast", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L137"}, {"caller_nid": "ui_notifications_emit_toast", "callee": "notify", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L162"}, {"caller_nid": "ui_notifications_notify_field_error", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L227"}, {"caller_nid": "ui_notifications_notify_form_error", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L237"}, {"caller_nid": "ui_notifications_clear_field_error", "callee": "pop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L246"}, {"caller_nid": "ui_notifications_clear_form_errors", "callee": "pop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L252"}, {"caller_nid": "ui_notifications_get_field_error", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L258"}, {"caller_nid": "ui_notifications_get_form_error", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L264"}, {"caller_nid": "ui_notifications_show_banner", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L287"}, {"caller_nid": "ui_notifications_show_banner", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L288"}, {"caller_nid": "ui_notifications_show_banner", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L300"}, {"caller_nid": "ui_notifications_show_banner", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L307"}, {"caller_nid": "ui_notifications_clear_banner", "callee": "pop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L315"}, {"caller_nid": "ui_notifications_list_active_banners", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L328"}, {"caller_nid": "ui_notifications_list_active_banners", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L328"}, {"caller_nid": "ui_notifications_banner_overflow_count", "callee": "max", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L338"}, {"caller_nid": "ui_notifications_banner_overflow_count", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L338"}, {"caller_nid": "ui_notifications_reset_for_tests", "callee": "clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L344"}, {"caller_nid": "ui_notifications_reset_for_tests", "callee": "clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L345"}, {"caller_nid": "ui_notifications_reset_for_tests", "callee": "clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py", "source_location": "L346"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/545997dcb0472c7726df0b8bd423f66c9a25eb9ea64636fc3f61e0aeab1d26ae.json b/graphify-out/cache/ast/545997dcb0472c7726df0b8bd423f66c9a25eb9ea64636fc3f61e0aeab1d26ae.json new file mode 100644 index 0000000..5b33483 --- /dev/null +++ b/graphify-out/cache/ast/545997dcb0472c7726df0b8bd423f66c9a25eb9ea64636fc3f61e0aeab1d26ae.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_09_orchestrator_py", "label": "test_flow_09_orchestrator.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L1"}, {"id": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "label": "test_flow_09_orchestrator()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L20"}, {"id": "e2e_test_flow_09_orchestrator_rationale_1", "label": "E2E flow 09: Orchestrator staging panel + quiescence-sync trigger. Frontend Spe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_09_orchestrator_py", "target": "tests_e2e_page_objects_staging_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_09_orchestrator_py", "target": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L20", "weight": 1.0}, {"source": "e2e_test_flow_09_orchestrator_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_09_orchestrator_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "StagingPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L21"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L22"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L23"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L25"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L26"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L26"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L27"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "inner_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L27"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L27"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L29"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "force_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L29"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L30"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L31"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L31"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L32"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "inner_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L32"}, {"caller_nid": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py", "source_location": "L32"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/54ed51551d05e095bf8965795ae67025113ff7c6f78d59f4644cf9bc4bf2bfcb.json b/graphify-out/cache/ast/54ed51551d05e095bf8965795ae67025113ff7c6f78d59f4644cf9bc4bf2bfcb.json new file mode 100644 index 0000000..faef96b --- /dev/null +++ b/graphify-out/cache/ast/54ed51551d05e095bf8965795ae67025113ff7c6f78d59f4644cf9bc4bf2bfcb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "label": "nas_client.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1"}, {"id": "sync_nas_client_syncjobhandle", "label": "SyncJobHandle", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L98"}, {"id": "sync_nas_client_remote_name_for", "label": "_remote_name_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L117"}, {"id": "sync_nas_client_build_target_for", "label": "_build_target_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L128"}, {"id": "sync_nas_client_resolve_env_for_equipment", "label": "_resolve_env_for_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L143"}, {"id": "sync_nas_client_build_transport_driver", "label": "_build_transport_driver()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L189"}, {"id": "sync_nas_client_nassyncclient", "label": "NASSyncClient", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L257"}, {"id": "sync_nas_client_nassyncclient_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L277"}, {"id": "sync_nas_client_nassyncclient_apply_config", "label": ".apply_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L313"}, {"id": "sync_nas_client_nassyncclient_close", "label": ".close()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L334"}, {"id": "sync_nas_client_nassyncclient_enqueue", "label": ".enqueue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L347"}, {"id": "sync_nas_client_nassyncclient_status", "label": ".status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L441"}, {"id": "sync_nas_client_nassyncclient_retry", "label": ".retry()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L452"}, {"id": "sync_nas_client_nassyncclient_force_verify", "label": ".force_verify()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L457"}, {"id": "sync_nas_client_nassyncclient_worker_loop", "label": "._worker_loop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L502"}, {"id": "sync_nas_client_nassyncclient_next_due_job", "label": "._next_due_job()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L522"}, {"id": "sync_nas_client_nassyncclient_drive_job", "label": "._drive_job()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L533"}, {"id": "sync_nas_client_nassyncclient_build_push", "label": "._build_push()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L754"}, {"id": "sync_nas_client_nassyncclient_build_check", "label": "._build_check()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L766"}, {"id": "sync_nas_client_nassyncclient_compute_local_shas", "label": "._compute_local_shas()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L779"}, {"id": "sync_nas_client_nassyncclient_handle_push_failure", "label": "._handle_push_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L822"}, {"id": "sync_nas_client_nassyncclient_reconcile_synced_files", "label": "._reconcile_synced_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L846"}, {"id": "sync_nas_client_discover_run_files", "label": "_discover_run_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L887"}, {"id": "sync_nas_client_file_signature", "label": "_file_signature()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L912"}, {"id": "sync_nas_client_write_files_from", "label": "_write_files_from()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L921"}, {"id": "sync_nas_client_nassyncclient_maybe_cleanup", "label": "._maybe_cleanup()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L940"}, {"id": "sync_nas_client_nassyncclient_delete_local", "label": "._delete_local()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1002"}, {"id": "sync_nas_client_nassyncclient_infer_equipment_id", "label": "._infer_equipment_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1023"}, {"id": "sync_nas_client_compute_nas_path", "label": "_compute_nas_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1046"}, {"id": "sync_nas_client_nassyncclient_mark_blocked", "label": "._mark_blocked()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1050"}, {"id": "sync_nas_client_nassyncclient_mark_synced", "label": "._mark_synced()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1059"}, {"id": "sync_nas_client_nassyncclient_mark_cleaned", "label": "._mark_cleaned()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1072"}, {"id": "sync_nas_client_rationale_1", "label": "NAS sync client. Backend Spec \u00a77.1, \u00a77.3. The :class:`NASSyncClient` is the pub", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1"}, {"id": "sync_nas_client_rationale_99", "label": "Lightweight handle returned by :meth:`NASSyncClient.enqueue`. ``job_id`` is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L99"}, {"id": "sync_nas_client_rationale_118", "label": "Return the inline rclone remote name used for ``equipment``. The remote nam", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L118"}, {"id": "sync_nas_client_rationale_133", "label": "Compose the rclone destination string for a run directory.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L133"}, {"id": "sync_nas_client_rationale_147", "label": "Look up the password, obscure it, build the rclone env. Returns ``(env, mas", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L147"}, {"id": "sync_nas_client_rationale_193", "label": "Return a ``(driver, push_callable, check_callable)`` triple. Both supported", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L193"}, {"id": "sync_nas_client_rationale_258", "label": "Durable, per-equipment NAS sync queue with Pre-Sync Gate. Backend Spec \u00a77.1", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L258"}, {"id": "sync_nas_client_rationale_314", "label": "Swap the cached config + equipment map in place (no relaunch). The ``eq", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L314"}, {"id": "sync_nas_client_rationale_329", "label": "Open the queue and start the worker task. Backend Spec \u00a77.1.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L329"}, {"id": "sync_nas_client_rationale_335", "label": "Stop the worker and close the queue DB. Idempotent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L335"}, {"id": "sync_nas_client_rationale_352", "label": "Pre-Sync Gate -> if hard-tier finding without override, mark ``sync_stat", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L352"}, {"id": "sync_nas_client_rationale_442", "label": "Return the queue state of the job for ``run_path``. ``\"none\"`` when no", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L442"}, {"id": "sync_nas_client_rationale_453", "label": "Re-arm a ``FAILED`` job. Backend Spec \u00a77.1.5 (Problems-tab Retry).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L453"}, {"id": "sync_nas_client_rationale_458", "label": "Re-run ``rclone check --download`` against the configured remote. Used", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L458"}, {"id": "sync_nas_client_rationale_503", "label": "Pick the next due job and drive it through the state machine.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L503"}, {"id": "sync_nas_client_rationale_523", "label": "Return the next QUEUED row whose backoff has passed (or None).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L523"}, {"id": "sync_nas_client_rationale_534", "label": "Drive ``job`` from QUEUED through one transport+verify pass. Worker sem", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L534"}, {"id": "sync_nas_client_rationale_755", "label": "Resolve the push callable for ``equipment.transport``. Tests can inject", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L755"}, {"id": "sync_nas_client_rationale_767", "label": "Resolve the ``rclone check`` callable for ``equipment.transport``. Test", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L767"}, {"id": "sync_nas_client_rationale_784", "label": "Compute the SHA-256 hex digest of each file in ``files``. Slot A of the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L784"}, {"id": "sync_nas_client_rationale_823", "label": "Translate a transport failure into a queue update.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L823"}, {"id": "sync_nas_client_rationale_852", "label": "Credit every individually-verified file in ``sync_state.json``. Per-fil", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L852"}, {"id": "sync_nas_client_rationale_888", "label": "Return every non-cache regular file under ``run_path`` as POSIX rel paths.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L888"}, {"id": "sync_nas_client_rationale_913", "label": "Return the ``(st_size, st_mtime_ns)`` signature for ``path``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L913"}, {"id": "sync_nas_client_rationale_922", "label": "Write a transport ``--files-from`` list and return its path. One run-re", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L922"}, {"id": "sync_nas_client_rationale_941", "label": "Apply the \u00a77.1.6 interlocks; if all pass, run the cleanup. Operator-fre", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L941"}, {"id": "sync_nas_client_rationale_1007", "label": "Delete ``run_path`` data files honoring ``retain_cache`` and ``keep_local``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1007"}, {"id": "sync_nas_client_rationale_1024", "label": "Return the equipment id for a run path. Prefers an explicit equipment i", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1024"}, {"id": "sync_nas_client_rationale_1047", "label": "Return the recorded NAS-side path from a creation payload.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1047"}, {"id": "sync_nas_client_rationale_1051", "label": "Mutate ``creation.json`` ``sync_status`` to ``blocked_by_validation``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1051"}, {"id": "sync_nas_client_rationale_1060", "label": "Mutate ``creation.json`` ``sync_status`` to ``synced``. Backend Spec \u00a77.1.4.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1060"}, {"id": "sync_nas_client_rationale_1073", "label": "Mutate ``creation.json`` ``sync_status`` to ``cleaned``. Backend Spec \u00a77.1.10.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1073"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "tempfile", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_cache_creation_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_cache_sync_state_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_constants_keyring", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_sync_bandwidth", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_sync_cleanup", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_sync_pre_sync_gate", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_sync_queue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_sync_run_delete", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_sync_transports", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_sync_transports_rclone", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L55", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_sync_verifier", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L61", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_validator_engine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "exlab_wizard_validator_findings", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L64", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "sync_nas_client_syncjobhandle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L98", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "sync_nas_client_remote_name_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L117", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "sync_nas_client_build_target_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L128", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "sync_nas_client_resolve_env_for_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L143", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "sync_nas_client_build_transport_driver", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L189", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "sync_nas_client_nassyncclient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L257", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L277", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_apply_config", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L313", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L328", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_close", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L334", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_enqueue", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L347", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_status", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L441", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_retry", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L452", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_force_verify", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L457", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_worker_loop", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L502", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_next_due_job", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L522", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_drive_job", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L533", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_build_push", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L754", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_build_check", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L766", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_compute_local_shas", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L779", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_handle_push_failure", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L822", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_reconcile_synced_files", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L846", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "sync_nas_client_discover_run_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L887", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "sync_nas_client_file_signature", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L912", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "sync_nas_client_write_files_from", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L921", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_maybe_cleanup", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L940", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_delete_local", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1002", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_infer_equipment_id", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1023", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "target": "sync_nas_client_compute_nas_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1046", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_mark_blocked", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1050", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_mark_synced", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1059", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient", "target": "sync_nas_client_nassyncclient_mark_cleaned", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1072", "weight": 1.0}, {"source": "sync_nas_client_resolve_env_for_equipment", "target": "sync_nas_client_remote_name_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L180", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_init", "target": "sync_nas_client_nassyncclient_worker_loop", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L331", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_enqueue", "target": "sync_nas_client_nassyncclient_mark_blocked", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L394", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_enqueue", "target": "sync_nas_client_syncjobhandle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L395", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_enqueue", "target": "sync_nas_client_nassyncclient_infer_equipment_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L402", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_enqueue", "target": "sync_nas_client_compute_nas_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L435", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_force_verify", "target": "sync_nas_client_nassyncclient_build_check", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L488", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_force_verify", "target": "sync_nas_client_write_files_from", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L489", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_worker_loop", "target": "sync_nas_client_nassyncclient_next_due_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L505", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_worker_loop", "target": "sync_nas_client_nassyncclient_drive_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L516", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_drive_job", "target": "sync_nas_client_discover_run_files", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L596", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_drive_job", "target": "sync_nas_client_nassyncclient_compute_local_shas", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L597", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_drive_job", "target": "sync_nas_client_nassyncclient_build_push", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L603", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_drive_job", "target": "sync_nas_client_write_files_from", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L607", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_drive_job", "target": "sync_nas_client_nassyncclient_handle_push_failure", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L619", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_drive_job", "target": "sync_nas_client_nassyncclient_build_check", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L634", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_drive_job", "target": "sync_nas_client_nassyncclient_mark_synced", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L649", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_drive_job", "target": "sync_nas_client_nassyncclient_maybe_cleanup", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L650", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_drive_job", "target": "sync_nas_client_nassyncclient_reconcile_synced_files", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L683", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_build_push", "target": "sync_nas_client_build_transport_driver", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L763", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_build_check", "target": "sync_nas_client_build_transport_driver", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L776", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_reconcile_synced_files", "target": "sync_nas_client_file_signature", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L874", "weight": 1.0}, {"source": "sync_nas_client_write_files_from", "target": "sync_nas_client_nassyncclient_close", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L937", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_maybe_cleanup", "target": "sync_nas_client_nassyncclient_delete_local", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L992", "weight": 1.0}, {"source": "sync_nas_client_nassyncclient_maybe_cleanup", "target": "sync_nas_client_nassyncclient_mark_cleaned", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L993", "weight": 1.0}, {"source": "sync_nas_client_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_nas_client_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1", "weight": 1.0}, {"source": "sync_nas_client_rationale_99", "target": "sync_nas_client_syncjobhandle", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L99", "weight": 1.0}, {"source": "sync_nas_client_rationale_118", "target": "sync_nas_client_remote_name_for", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L118", "weight": 1.0}, {"source": "sync_nas_client_rationale_133", "target": "sync_nas_client_build_target_for", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L133", "weight": 1.0}, {"source": "sync_nas_client_rationale_147", "target": "sync_nas_client_resolve_env_for_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L147", "weight": 1.0}, {"source": "sync_nas_client_rationale_193", "target": "sync_nas_client_build_transport_driver", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L193", "weight": 1.0}, {"source": "sync_nas_client_rationale_258", "target": "sync_nas_client_nassyncclient", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L258", "weight": 1.0}, {"source": "sync_nas_client_rationale_314", "target": "sync_nas_client_nassyncclient_apply_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L314", "weight": 1.0}, {"source": "sync_nas_client_rationale_329", "target": "sync_nas_client_nassyncclient_init", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L329", "weight": 1.0}, {"source": "sync_nas_client_rationale_335", "target": "sync_nas_client_nassyncclient_close", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L335", "weight": 1.0}, {"source": "sync_nas_client_rationale_352", "target": "sync_nas_client_nassyncclient_enqueue", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L352", "weight": 1.0}, {"source": "sync_nas_client_rationale_442", "target": "sync_nas_client_nassyncclient_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L442", "weight": 1.0}, {"source": "sync_nas_client_rationale_453", "target": "sync_nas_client_nassyncclient_retry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L453", "weight": 1.0}, {"source": "sync_nas_client_rationale_458", "target": "sync_nas_client_nassyncclient_force_verify", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L458", "weight": 1.0}, {"source": "sync_nas_client_rationale_503", "target": "sync_nas_client_nassyncclient_worker_loop", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L503", "weight": 1.0}, {"source": "sync_nas_client_rationale_523", "target": "sync_nas_client_nassyncclient_next_due_job", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L523", "weight": 1.0}, {"source": "sync_nas_client_rationale_534", "target": "sync_nas_client_nassyncclient_drive_job", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L534", "weight": 1.0}, {"source": "sync_nas_client_rationale_755", "target": "sync_nas_client_nassyncclient_build_push", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L755", "weight": 1.0}, {"source": "sync_nas_client_rationale_767", "target": "sync_nas_client_nassyncclient_build_check", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L767", "weight": 1.0}, {"source": "sync_nas_client_rationale_784", "target": "sync_nas_client_nassyncclient_compute_local_shas", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L784", "weight": 1.0}, {"source": "sync_nas_client_rationale_823", "target": "sync_nas_client_nassyncclient_handle_push_failure", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L823", "weight": 1.0}, {"source": "sync_nas_client_rationale_852", "target": "sync_nas_client_nassyncclient_reconcile_synced_files", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L852", "weight": 1.0}, {"source": "sync_nas_client_rationale_888", "target": "sync_nas_client_nassyncclient_discover_run_files", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L888", "weight": 1.0}, {"source": "sync_nas_client_rationale_913", "target": "sync_nas_client_nassyncclient_file_signature", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L913", "weight": 1.0}, {"source": "sync_nas_client_rationale_922", "target": "sync_nas_client_nassyncclient_write_files_from", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L922", "weight": 1.0}, {"source": "sync_nas_client_rationale_941", "target": "sync_nas_client_nassyncclient_maybe_cleanup", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L941", "weight": 1.0}, {"source": "sync_nas_client_rationale_1007", "target": "sync_nas_client_nassyncclient_delete_local", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1007", "weight": 1.0}, {"source": "sync_nas_client_rationale_1024", "target": "sync_nas_client_nassyncclient_infer_equipment_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1024", "weight": 1.0}, {"source": "sync_nas_client_rationale_1047", "target": "sync_nas_client_nassyncclient_compute_nas_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1047", "weight": 1.0}, {"source": "sync_nas_client_rationale_1051", "target": "sync_nas_client_nassyncclient_mark_blocked", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1051", "weight": 1.0}, {"source": "sync_nas_client_rationale_1060", "target": "sync_nas_client_nassyncclient_mark_synced", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1060", "weight": 1.0}, {"source": "sync_nas_client_rationale_1073", "target": "sync_nas_client_nassyncclient_mark_cleaned", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1073", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_nas_client_remote_name_for", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L125"}, {"caller_nid": "sync_nas_client_build_target_for", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L134"}, {"caller_nid": "sync_nas_client_build_target_for", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L135"}, {"caller_nid": "sync_nas_client_build_target_for", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L137"}, {"caller_nid": "sync_nas_client_build_target_for", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L139"}, {"caller_nid": "sync_nas_client_resolve_env_for_equipment", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L156"}, {"caller_nid": "sync_nas_client_resolve_env_for_equipment", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L157"}, {"caller_nid": "sync_nas_client_resolve_env_for_equipment", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L158"}, {"caller_nid": "sync_nas_client_resolve_env_for_equipment", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L162"}, {"caller_nid": "sync_nas_client_resolve_env_for_equipment", "callee": "getter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L168"}, {"caller_nid": "sync_nas_client_resolve_env_for_equipment", "callee": "keyring_nas_username", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L168"}, {"caller_nid": "sync_nas_client_resolve_env_for_equipment", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L172"}, {"caller_nid": "sync_nas_client_resolve_env_for_equipment", "callee": "TransportError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L174"}, {"caller_nid": "sync_nas_client_resolve_env_for_equipment", "callee": "TransportError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L177"}, {"caller_nid": "sync_nas_client_resolve_env_for_equipment", "callee": "obscure", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L179"}, {"caller_nid": "sync_nas_client_resolve_env_for_equipment", "callee": "build_rclone_env", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L181"}, {"caller_nid": "sync_nas_client_resolve_env_for_equipment", "callee": "pass_env_keys_for", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L186"}, {"caller_nid": "sync_nas_client_build_transport_driver", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L214"}, {"caller_nid": "sync_nas_client_build_transport_driver", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L215"}, {"caller_nid": "sync_nas_client_build_transport_driver", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L216"}, {"caller_nid": "sync_nas_client_build_transport_driver", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L217"}, {"caller_nid": "sync_nas_client_build_transport_driver", "callee": "RcloneDriver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L219"}, {"caller_nid": "sync_nas_client_nassyncclient_init", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L295"}, {"caller_nid": "sync_nas_client_nassyncclient_init", "callee": "SyncQueue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L301"}, {"caller_nid": "sync_nas_client_nassyncclient_init", "callee": "Event", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L305"}, {"caller_nid": "sync_nas_client_nassyncclient_init", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L330"}, {"caller_nid": "sync_nas_client_nassyncclient_init", "callee": "create_task", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L331"}, {"caller_nid": "sync_nas_client_nassyncclient_init", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L332"}, {"caller_nid": "sync_nas_client_nassyncclient_close", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L337"}, {"caller_nid": "sync_nas_client_nassyncclient_close", "callee": "cancel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L339"}, {"caller_nid": "sync_nas_client_nassyncclient_close", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L340"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L384"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L385"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "read_creation_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L386"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "is_eligible", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L388"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L398"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L399"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "get_by_run_path", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L403"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "requeue_with_files", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L409"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L410"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L414"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "reset_to_queued", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L418"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L419"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L423"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L429"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L432"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L438"}, {"caller_nid": "sync_nas_client_nassyncclient_enqueue", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L439"}, {"caller_nid": "sync_nas_client_nassyncclient_status", "callee": "get_by_run_path", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L447"}, {"caller_nid": "sync_nas_client_nassyncclient_retry", "callee": "reset_to_queued", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L454"}, {"caller_nid": "sync_nas_client_nassyncclient_retry", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L455"}, {"caller_nid": "sync_nas_client_nassyncclient_force_verify", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L475"}, {"caller_nid": "sync_nas_client_nassyncclient_force_verify", "callee": "VerifyResult", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L480"}, {"caller_nid": "sync_nas_client_nassyncclient_force_verify", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L484"}, {"caller_nid": "sync_nas_client_nassyncclient_force_verify", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L485"}, {"caller_nid": "sync_nas_client_nassyncclient_force_verify", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L485"}, {"caller_nid": "sync_nas_client_nassyncclient_force_verify", "callee": "keys", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L485"}, {"caller_nid": "sync_nas_client_nassyncclient_force_verify", "callee": "VerifyResult", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L487"}, {"caller_nid": "sync_nas_client_nassyncclient_force_verify", "callee": "check", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L492"}, {"caller_nid": "sync_nas_client_nassyncclient_force_verify", "callee": "VerifyResult", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L494"}, {"caller_nid": "sync_nas_client_nassyncclient_force_verify", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L496"}, {"caller_nid": "sync_nas_client_nassyncclient_force_verify", "callee": "unlink", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L497"}, {"caller_nid": "sync_nas_client_nassyncclient_force_verify", "callee": "from_check_result", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L498"}, {"caller_nid": "sync_nas_client_nassyncclient_worker_loop", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L508"}, {"caller_nid": "sync_nas_client_nassyncclient_worker_loop", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L509"}, {"caller_nid": "sync_nas_client_nassyncclient_worker_loop", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L510"}, {"caller_nid": "sync_nas_client_nassyncclient_worker_loop", "callee": "clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L513"}, {"caller_nid": "sync_nas_client_nassyncclient_worker_loop", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L520"}, {"caller_nid": "sync_nas_client_nassyncclient_next_due_job", "callee": "list_in_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L524"}, {"caller_nid": "sync_nas_client_nassyncclient_next_due_job", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L525"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L556"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L557"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L558"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L565"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L567"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L575"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "effective_bandwidth_limit_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L584"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L585"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "push", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L609"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L615"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L615"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L623"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L643"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L647"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "check", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L656"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "VerifyResult", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L658"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L660"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "from_check_result", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L667"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L670"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "unlink", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L671"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L674"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "unlink", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L675"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L704"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L714"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L726"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L732"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L741"}, {"caller_nid": "sync_nas_client_nassyncclient_drive_job", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L742"}, {"caller_nid": "sync_nas_client_nassyncclient_build_push", "callee": "_push_callable_factory", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L762"}, {"caller_nid": "sync_nas_client_nassyncclient_build_check", "callee": "_check_callable_factory", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L775"}, {"caller_nid": "sync_nas_client_nassyncclient_compute_local_shas", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L817"}, {"caller_nid": "sync_nas_client_nassyncclient_handle_push_failure", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L826"}, {"caller_nid": "sync_nas_client_nassyncclient_handle_push_failure", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L834"}, {"caller_nid": "sync_nas_client_nassyncclient_handle_push_failure", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L836"}, {"caller_nid": "sync_nas_client_nassyncclient_handle_push_failure", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L844"}, {"caller_nid": "sync_nas_client_nassyncclient_reconcile_synced_files", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L869"}, {"caller_nid": "sync_nas_client_nassyncclient_reconcile_synced_files", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L872"}, {"caller_nid": "sync_nas_client_nassyncclient_reconcile_synced_files", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L877"}, {"caller_nid": "sync_nas_client_nassyncclient_reconcile_synced_files", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L878"}, {"caller_nid": "sync_nas_client_nassyncclient_reconcile_synced_files", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L883"}, {"caller_nid": "sync_nas_client_discover_run_files", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L899"}, {"caller_nid": "sync_nas_client_discover_run_files", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L899"}, {"caller_nid": "sync_nas_client_discover_run_files", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L902"}, {"caller_nid": "sync_nas_client_discover_run_files", "callee": "rglob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L902"}, {"caller_nid": "sync_nas_client_discover_run_files", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L903"}, {"caller_nid": "sync_nas_client_discover_run_files", "callee": "relative_to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L905"}, {"caller_nid": "sync_nas_client_discover_run_files", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L908"}, {"caller_nid": "sync_nas_client_discover_run_files", "callee": "as_posix", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L908"}, {"caller_nid": "sync_nas_client_discover_run_files", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L909"}, {"caller_nid": "sync_nas_client_file_signature", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L915"}, {"caller_nid": "sync_nas_client_write_files_from", "callee": "NamedTemporaryFile", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L927"}, {"caller_nid": "sync_nas_client_write_files_from", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L935"}, {"caller_nid": "sync_nas_client_write_files_from", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L935"}, {"caller_nid": "sync_nas_client_write_files_from", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L938"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L952"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L958"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "rollup_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L959"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L961"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L968"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L970"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L971"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "read_creation_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L972"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L973"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "_remote_stat_callable", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L975"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "utc_now", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L976"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "cleanup_interlocks_satisfied", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L977"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L985"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L990"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L991"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L998"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "cache_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L998"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "mark_cleared", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L999"}, {"caller_nid": "sync_nas_client_nassyncclient_maybe_cleanup", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1000"}, {"caller_nid": "sync_nas_client_nassyncclient_delete_local", "callee": "delete_run_files", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1015"}, {"caller_nid": "sync_nas_client_nassyncclient_delete_local", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1017"}, {"caller_nid": "sync_nas_client_nassyncclient_infer_equipment_id", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1034"}, {"caller_nid": "sync_nas_client_nassyncclient_infer_equipment_id", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1035"}, {"caller_nid": "sync_nas_client_nassyncclient_infer_equipment_id", "callee": "next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1042"}, {"caller_nid": "sync_nas_client_nassyncclient_infer_equipment_id", "callee": "iter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1042"}, {"caller_nid": "sync_nas_client_nassyncclient_mark_blocked", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1057"}, {"caller_nid": "sync_nas_client_nassyncclient_mark_synced", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1061"}, {"caller_nid": "sync_nas_client_nassyncclient_mark_synced", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1062"}, {"caller_nid": "sync_nas_client_nassyncclient_mark_synced", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1069"}, {"caller_nid": "sync_nas_client_nassyncclient_mark_synced", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1070"}, {"caller_nid": "sync_nas_client_nassyncclient_mark_cleaned", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1079"}, {"caller_nid": "sync_nas_client_nassyncclient_mark_cleaned", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1080"}, {"caller_nid": "sync_nas_client_nassyncclient_mark_cleaned", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1087"}, {"caller_nid": "sync_nas_client_nassyncclient_mark_cleaned", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py", "source_location": "L1088"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/55fcb5b75e29cebd1c1335f93881bbf11c003df3b897e7cd64059ecc6fbcb4b5.json b/graphify-out/cache/ast/55fcb5b75e29cebd1c1335f93881bbf11c003df3b897e7cd64059ecc6fbcb4b5.json new file mode 100644 index 0000000..b77ffbe --- /dev/null +++ b/graphify-out/cache/ast/55fcb5b75e29cebd1c1335f93881bbf11c003df3b897e7cd64059ecc6fbcb4b5.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_page_objects_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/__init__.py", "source_location": "L1"}, {"id": "page_objects_init_rationale_1", "label": "Page object package for the Phase 16 e2e suite. Each module wraps the stable ``", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_init_py", "target": "tests_e2e_page_objects_main_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/__init__.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_init_py", "target": "tests_e2e_page_objects_problems_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/__init__.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_init_py", "target": "tests_e2e_page_objects_settings_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/__init__.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_init_py", "target": "tests_e2e_page_objects_staging_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/__init__.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_init_py", "target": "tests_e2e_page_objects_welcome_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/__init__.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_init_py", "target": "tests_e2e_page_objects_wizard_project_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/__init__.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_init_py", "target": "tests_e2e_page_objects_wizard_run_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/__init__.py", "source_location": "L13", "weight": 1.0}, {"source": "page_objects_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_page_objects_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/565d8c93babc04f07053da63eb06f9376563b7e4f1db86cab588fe80e881a93c.json b/graphify-out/cache/ast/565d8c93babc04f07053da63eb06f9376563b7e4f1db86cab588fe80e881a93c.json new file mode 100644 index 0000000..b316565 --- /dev/null +++ b/graphify-out/cache/ast/565d8c93babc04f07053da63eb06f9376563b7e4f1db86cab588fe80e881a93c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_refresh_coordinator_py", "label": "refresh_coordinator.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L1"}, {"id": "client_refresh_coordinator_refreshcoordinator", "label": "RefreshCoordinator", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L21"}, {"id": "client_refresh_coordinator_refreshcoordinator_record_tree_refresh", "label": ".record_tree_refresh()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L27"}, {"id": "client_refresh_coordinator_refreshcoordinator_record_folder_refresh", "label": ".record_folder_refresh()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L30"}, {"id": "client_refresh_coordinator_refreshcoordinator_should_skip_folder", "label": ".should_skip_folder()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L33"}, {"id": "client_refresh_coordinator_refreshcoordinator_should_skip_tree", "label": ".should_skip_tree()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L37"}, {"id": "client_refresh_coordinator_rationale_1", "label": "Refresh coordinator: coalesce the 30 s tree refresh with the folder feed. GUI/O", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L1"}, {"id": "client_refresh_coordinator_rationale_22", "label": "Tracks the last refresh time per source (\"tree\" | \"folder\").", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L22"}, {"id": "client_refresh_coordinator_rationale_34", "label": "True if the tree just walked and the folder feed should yield.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L34"}, {"id": "client_refresh_coordinator_rationale_38", "label": "True if the folder feed just walked and the tree should yield.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L38"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_refresh_coordinator_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_refresh_coordinator_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_refresh_coordinator_py", "target": "client_refresh_coordinator_refreshcoordinator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L21", "weight": 1.0}, {"source": "client_refresh_coordinator_refreshcoordinator", "target": "client_refresh_coordinator_refreshcoordinator_record_tree_refresh", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L27", "weight": 1.0}, {"source": "client_refresh_coordinator_refreshcoordinator", "target": "client_refresh_coordinator_refreshcoordinator_record_folder_refresh", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L30", "weight": 1.0}, {"source": "client_refresh_coordinator_refreshcoordinator", "target": "client_refresh_coordinator_refreshcoordinator_should_skip_folder", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L33", "weight": 1.0}, {"source": "client_refresh_coordinator_refreshcoordinator", "target": "client_refresh_coordinator_refreshcoordinator_should_skip_tree", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L37", "weight": 1.0}, {"source": "client_refresh_coordinator_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_refresh_coordinator_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L1", "weight": 1.0}, {"source": "client_refresh_coordinator_rationale_22", "target": "client_refresh_coordinator_refreshcoordinator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L22", "weight": 1.0}, {"source": "client_refresh_coordinator_rationale_34", "target": "client_refresh_coordinator_refreshcoordinator_should_skip_folder", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L34", "weight": 1.0}, {"source": "client_refresh_coordinator_rationale_38", "target": "client_refresh_coordinator_refreshcoordinator_should_skip_tree", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L38", "weight": 1.0}], "raw_calls": [{"caller_nid": "client_refresh_coordinator_refreshcoordinator_record_tree_refresh", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L28"}, {"caller_nid": "client_refresh_coordinator_refreshcoordinator_record_folder_refresh", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L31"}, {"caller_nid": "client_refresh_coordinator_refreshcoordinator_should_skip_folder", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L35"}, {"caller_nid": "client_refresh_coordinator_refreshcoordinator_should_skip_tree", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py", "source_location": "L39"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5738343d0630b1a6f0255ea77d07fc2f8f67d5846fdf4f78bb06991ce393f156.json b/graphify-out/cache/ast/5738343d0630b1a6f0255ea77d07fc2f8f67d5846fdf4f78bb06991ce393f156.json new file mode 100644 index 0000000..d3536e2 --- /dev/null +++ b/graphify-out/cache/ast/5738343d0630b1a6f0255ea77d07fc2f8f67d5846fdf4f78bb06991ce393f156.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "label": "generate_screenshots.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L1"}, {"id": "scripts_generate_screenshots_free_port", "label": "_free_port()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L69"}, {"id": "scripts_generate_screenshots_start_server", "label": "_start_server()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L76"}, {"id": "scripts_generate_screenshots_stop_server", "label": "_stop_server()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L138"}, {"id": "scripts_generate_screenshots_capture", "label": "_capture()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L148"}, {"id": "scripts_generate_screenshots_capture_capability", "label": "_capture_capability()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L178"}, {"id": "scripts_generate_screenshots_capability_plan", "label": "_capability_plan()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L209"}, {"id": "scripts_generate_screenshots_main", "label": "main()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L337"}, {"id": "scripts_generate_screenshots_rationale_1", "label": "Generate Playwright screenshots for the Sphinx user guide. CLI: python scr", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L1"}, {"id": "scripts_generate_screenshots_rationale_70", "label": "Return a free TCP port on 127.0.0.1.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L70"}, {"id": "scripts_generate_screenshots_rationale_77", "label": "Spawn the uvicorn-hosted e2e test app; return (proc, base_url). Mirrors the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L77"}, {"id": "scripts_generate_screenshots_rationale_139", "label": "Best-effort termination of the uvicorn subprocess.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L139"}, {"id": "scripts_generate_screenshots_rationale_158", "label": "Navigate to ``route``, optionally wait for a selector, screenshot. Returns", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L158"}, {"id": "scripts_generate_screenshots_rationale_185", "label": "Capture every step in the capability; return (succeeded, total).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L185"}, {"id": "scripts_generate_screenshots_rationale_210", "label": "Return the (capability_id, steps) list driving the screenshot run. Routes a", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L210"}, {"id": "scripts_generate_screenshots_rationale_338", "label": "Entry point; returns a process exit code (0 on full success).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L338"}], "edges": [{"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "socket", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "contextlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "httpx", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L54", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "tests_e2e_conftest", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "scripts_generate_screenshots_free_port", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "scripts_generate_screenshots_start_server", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "scripts_generate_screenshots_stop_server", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L138", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "scripts_generate_screenshots_capture", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L148", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "scripts_generate_screenshots_capture_capability", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L178", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "scripts_generate_screenshots_capability_plan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L209", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "target": "scripts_generate_screenshots_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L337", "weight": 1.0}, {"source": "scripts_generate_screenshots_start_server", "target": "scripts_generate_screenshots_free_port", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L83", "weight": 1.0}, {"source": "scripts_generate_screenshots_capture_capability", "target": "scripts_generate_screenshots_capture", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L196", "weight": 1.0}, {"source": "scripts_generate_screenshots_main", "target": "scripts_generate_screenshots_start_server", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L365", "weight": 1.0}, {"source": "scripts_generate_screenshots_main", "target": "scripts_generate_screenshots_capability_plan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L378", "weight": 1.0}, {"source": "scripts_generate_screenshots_main", "target": "scripts_generate_screenshots_capture_capability", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L380", "weight": 1.0}, {"source": "scripts_generate_screenshots_main", "target": "scripts_generate_screenshots_stop_server", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L388", "weight": 1.0}, {"source": "scripts_generate_screenshots_rationale_1", "target": "users_alex_projects_exlabwizard_scripts_generate_screenshots_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L1", "weight": 1.0}, {"source": "scripts_generate_screenshots_rationale_70", "target": "scripts_generate_screenshots_free_port", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L70", "weight": 1.0}, {"source": "scripts_generate_screenshots_rationale_77", "target": "scripts_generate_screenshots_start_server", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L77", "weight": 1.0}, {"source": "scripts_generate_screenshots_rationale_139", "target": "scripts_generate_screenshots_stop_server", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L139", "weight": 1.0}, {"source": "scripts_generate_screenshots_rationale_158", "target": "scripts_generate_screenshots_capture", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L158", "weight": 1.0}, {"source": "scripts_generate_screenshots_rationale_185", "target": "scripts_generate_screenshots_capture_capability", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L185", "weight": 1.0}, {"source": "scripts_generate_screenshots_rationale_210", "target": "scripts_generate_screenshots_capability_plan", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L210", "weight": 1.0}, {"source": "scripts_generate_screenshots_rationale_338", "target": "scripts_generate_screenshots_main", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L338", "weight": 1.0}], "raw_calls": [{"caller_nid": "scripts_generate_screenshots_free_port", "callee": "closing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L71"}, {"caller_nid": "scripts_generate_screenshots_free_port", "callee": "socket", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L71"}, {"caller_nid": "scripts_generate_screenshots_free_port", "callee": "bind", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L72"}, {"caller_nid": "scripts_generate_screenshots_free_port", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L73"}, {"caller_nid": "scripts_generate_screenshots_free_port", "callee": "getsockname", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L73"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L87"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L88"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L93"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L95"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L96"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L97"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "Popen", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L101"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L111"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L119"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L121"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L127"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "terminate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L129"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L131"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "kill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L133"}, {"caller_nid": "scripts_generate_screenshots_start_server", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L134"}, {"caller_nid": "scripts_generate_screenshots_stop_server", "callee": "terminate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L140"}, {"caller_nid": "scripts_generate_screenshots_stop_server", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L142"}, {"caller_nid": "scripts_generate_screenshots_stop_server", "callee": "kill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L144"}, {"caller_nid": "scripts_generate_screenshots_stop_server", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L145"}, {"caller_nid": "scripts_generate_screenshots_capture", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L163"}, {"caller_nid": "scripts_generate_screenshots_capture", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L165"}, {"caller_nid": "scripts_generate_screenshots_capture", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L166"}, {"caller_nid": "scripts_generate_screenshots_capture", "callee": "wait_for_selector", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L168"}, {"caller_nid": "scripts_generate_screenshots_capture", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L170"}, {"caller_nid": "scripts_generate_screenshots_capture", "callee": "screenshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L171"}, {"caller_nid": "scripts_generate_screenshots_capture", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L171"}, {"caller_nid": "scripts_generate_screenshots_capture", "callee": "print", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L174"}, {"caller_nid": "scripts_generate_screenshots_capture_capability", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L187"}, {"caller_nid": "scripts_generate_screenshots_capture_capability", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L188"}, {"caller_nid": "scripts_generate_screenshots_capture_capability", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L191"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L339"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L340"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L340"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L341"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "print", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L342"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "print", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L349"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "print", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L350"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "_resolve_chromium_executable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L353"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "print", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L355"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "print", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L357"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L364"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "print", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L366"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "sync_playwright", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L370"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "launch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L374"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "new_context", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L376"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "new_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L377"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "print", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L379"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L379"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L383"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L384"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L386"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "print", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L390"}, {"caller_nid": "scripts_generate_screenshots_main", "callee": "print", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py", "source_location": "L394"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5807bcb53d032daedbbe6a025c96147bdca7abd8f67d7b0259c65658bfced1c0.json b/graphify-out/cache/ast/5807bcb53d032daedbbe6a025c96147bdca7abd8f67d7b0259c65658bfced1c0.json new file mode 100644 index 0000000..6c88f45 --- /dev/null +++ b/graphify-out/cache/ast/5807bcb53d032daedbbe6a025c96147bdca7abd8f67d7b0259c65658bfced1c0.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_prod_app_py", "label": "_prod_app.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_app.py", "source_location": "L1"}, {"id": "e2e_prod_app_create_prod_app_factory", "label": "create_prod_app_factory()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_app.py", "source_location": "L23"}, {"id": "e2e_prod_app_rationale_1", "label": "uvicorn ``--factory`` entrypoint for the *production* wizard app. ``_test_app.p", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_app.py", "source_location": "L1"}, {"id": "e2e_prod_app_rationale_24", "label": "Build the production wizard app (NiceGUI mounted at ``/``).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_app.py", "source_location": "L24"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_prod_app_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_app.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_app_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_app.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_prod_app_py", "target": "e2e_prod_app_create_prod_app_factory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_app.py", "source_location": "L23", "weight": 1.0}, {"source": "e2e_prod_app_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_prod_app_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_app.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_prod_app_rationale_24", "target": "e2e_prod_app_create_prod_app_factory", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_app.py", "source_location": "L24", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_prod_app_create_prod_app_factory", "callee": "_build_default_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_app.py", "source_location": "L28"}, {"caller_nid": "e2e_prod_app_create_prod_app_factory", "callee": "ensure_state_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_app.py", "source_location": "L28"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5961f25db7aefc1631060005b6a2cdea97e81ac2d404214d983a445051536b35.json b/graphify-out/cache/ast/5961f25db7aefc1631060005b6a2cdea97e81ac2d404214d983a445051536b35.json new file mode 100644 index 0000000..42227a0 --- /dev/null +++ b/graphify-out/cache/ast/5961f25db7aefc1631060005b6a2cdea97e81ac2d404214d983a445051536b35.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "label": "setup.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L1"}, {"id": "api_setup_setupstatusresponse", "label": "SetupStatusResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L72"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_setup_limstestrequest", "label": "LIMSTestRequest", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L83"}, {"id": "api_setup_equipmenttestrequest", "label": "EquipmentTestRequest", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L99"}, {"id": "api_setup_proberesult", "label": "ProbeResult", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L115"}, {"id": "api_setup_autostartrequest", "label": "AutostartRequest", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L133"}, {"id": "api_setup_autostartresult", "label": "AutostartResult", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L141"}, {"id": "api_setup_compute_setup_state", "label": "compute_setup_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L155"}, {"id": "api_setup_is_creation_blocked", "label": "is_creation_blocked()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L172"}, {"id": "api_setup_setup_state_gate", "label": "setup_state_gate()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L182"}, {"id": "api_setup_build_setup_router", "label": "build_setup_router()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L221"}, {"id": "api_setup_coerce_probe_dict", "label": "_coerce_probe_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L312"}, {"id": "api_setup_resolve_equipment", "label": "_resolve_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L329"}, {"id": "api_setup_await_or_call", "label": "_await_or_call()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L348"}, {"id": "api_setup_rationale_1", "label": "Setup-state gate + ``/setup/*`` endpoints. Backend Spec \u00a74.6, \u00a74.9. Two respons", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L1"}, {"id": "api_setup_rationale_73", "label": "``GET /setup/status`` response. Backend Spec \u00a74.9.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L73"}, {"id": "api_setup_rationale_84", "label": "``POST /setup/test-lims`` request body. Either reference the currently-conf", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L84"}, {"id": "api_setup_rationale_100", "label": "``POST /setup/test-equipment`` request body. Rclone-only NAS sync migration", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L100"}, {"id": "api_setup_rationale_116", "label": "Common ``ok``/``reason`` payload for the diagnostics endpoints.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L116"}, {"id": "api_setup_rationale_134", "label": "``POST /setup/autostart`` request body. Backend Spec \u00a74.9.5 step 0.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L134"}, {"id": "api_setup_rationale_142", "label": "``POST /setup/autostart`` response.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L142"}, {"id": "api_setup_rationale_156", "label": "Evaluate the \u00a74.9.1 state for the app's current dependencies. The dependenc", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L156"}, {"id": "api_setup_rationale_173", "label": "Return True when ``state`` should gate creation flows. Per \u00a74.9.4 the soft", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L173"}, {"id": "api_setup_rationale_183", "label": "FastAPI dependency that gates a route on setup state. Looks up the app's bo", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L183"}, {"id": "api_setup_rationale_222", "label": "Construct the ``/setup/*`` router. Always-available endpoints.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L222"}, {"id": "api_setup_rationale_313", "label": "Build a ``ProbeResult`` from a probe's plain-dict return value. Wired throu", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L313"}, {"id": "api_setup_rationale_330", "label": "Resolve the equipment to probe by id through ``deps.config``. Rclone-only N", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L330"}, {"id": "api_setup_rationale_349", "label": "Invoke a probe that may be sync or async; await the result. The probes are", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L349"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "inspect", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "exlab_wizard_api_dependencies", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "api_setup_setupstatusresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L72", "weight": 1.0}, {"source": "api_setup_setupstatusresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "api_setup_limstestrequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L83", "weight": 1.0}, {"source": "api_setup_limstestrequest", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "api_setup_equipmenttestrequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L99", "weight": 1.0}, {"source": "api_setup_equipmenttestrequest", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L99", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "api_setup_proberesult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L115", "weight": 1.0}, {"source": "api_setup_proberesult", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L115", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "api_setup_autostartrequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L133", "weight": 1.0}, {"source": "api_setup_autostartrequest", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L133", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "api_setup_autostartresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L141", "weight": 1.0}, {"source": "api_setup_autostartresult", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L141", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "api_setup_compute_setup_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L155", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "api_setup_is_creation_blocked", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L172", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "api_setup_setup_state_gate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L182", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "api_setup_build_setup_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L221", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "api_setup_coerce_probe_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L312", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "api_setup_resolve_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L329", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "target": "api_setup_await_or_call", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L348", "weight": 1.0}, {"source": "api_setup_setup_state_gate", "target": "api_setup_compute_setup_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L197", "weight": 1.0}, {"source": "api_setup_setup_state_gate", "target": "api_setup_is_creation_blocked", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L198", "weight": 1.0}, {"source": "api_setup_coerce_probe_dict", "target": "api_setup_proberesult", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L322", "weight": 1.0}, {"source": "api_setup_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_setup_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L1", "weight": 1.0}, {"source": "api_setup_rationale_73", "target": "api_setup_setupstatusresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L73", "weight": 1.0}, {"source": "api_setup_rationale_84", "target": "api_setup_limstestrequest", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L84", "weight": 1.0}, {"source": "api_setup_rationale_100", "target": "api_setup_equipmenttestrequest", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L100", "weight": 1.0}, {"source": "api_setup_rationale_116", "target": "api_setup_proberesult", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L116", "weight": 1.0}, {"source": "api_setup_rationale_134", "target": "api_setup_autostartrequest", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L134", "weight": 1.0}, {"source": "api_setup_rationale_142", "target": "api_setup_autostartresult", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L142", "weight": 1.0}, {"source": "api_setup_rationale_156", "target": "api_setup_compute_setup_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L156", "weight": 1.0}, {"source": "api_setup_rationale_173", "target": "api_setup_is_creation_blocked", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L173", "weight": 1.0}, {"source": "api_setup_rationale_183", "target": "api_setup_setup_state_gate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L183", "weight": 1.0}, {"source": "api_setup_rationale_222", "target": "api_setup_build_setup_router", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L222", "weight": 1.0}, {"source": "api_setup_rationale_313", "target": "api_setup_coerce_probe_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L313", "weight": 1.0}, {"source": "api_setup_rationale_330", "target": "api_setup_resolve_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L330", "weight": 1.0}, {"source": "api_setup_rationale_349", "target": "api_setup_await_or_call", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L349", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_setup_compute_setup_state", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L164"}, {"caller_nid": "api_setup_compute_setup_state", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L166"}, {"caller_nid": "api_setup_compute_setup_state", "callee": "lims_password_present", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L167"}, {"caller_nid": "api_setup_compute_setup_state", "callee": "nas_password_present", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L168"}, {"caller_nid": "api_setup_setup_state_gate", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L191"}, {"caller_nid": "api_setup_setup_state_gate", "callee": "setup_state_missing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L200"}, {"caller_nid": "api_setup_setup_state_gate", "callee": "nas_password_present", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L203"}, {"caller_nid": "api_setup_setup_state_gate", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L205"}, {"caller_nid": "api_setup_build_setup_router", "callee": "APIRouter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L223"}, {"caller_nid": "api_setup_build_setup_router", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L225"}, {"caller_nid": "api_setup_build_setup_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L242"}, {"caller_nid": "api_setup_build_setup_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L261"}, {"caller_nid": "api_setup_build_setup_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L289"}, {"caller_nid": "api_setup_coerce_probe_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L320"}, {"caller_nid": "api_setup_coerce_probe_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L321"}, {"caller_nid": "api_setup_coerce_probe_dict", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L323"}, {"caller_nid": "api_setup_coerce_probe_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L323"}, {"caller_nid": "api_setup_coerce_probe_dict", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L324"}, {"caller_nid": "api_setup_coerce_probe_dict", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L325"}, {"caller_nid": "api_setup_resolve_equipment", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L339"}, {"caller_nid": "api_setup_resolve_equipment", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L340"}, {"caller_nid": "api_setup_await_or_call", "callee": "callable_", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L355"}, {"caller_nid": "api_setup_await_or_call", "callee": "isawaitable", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py", "source_location": "L356"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5a4a745453c300072357dcd2abcd12fbe111ba81567dda475ec36e0424569846.json b/graphify-out/cache/ast/5a4a745453c300072357dcd2abcd12fbe111ba81567dda475ec36e0424569846.json new file mode 100644 index 0000000..b5884fc --- /dev/null +++ b/graphify-out/cache/ast/5a4a745453c300072357dcd2abcd12fbe111ba81567dda475ec36e0424569846.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "label": "creation_writer.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L1"}, {"id": "cache_creation_writer_select_active_overrides", "label": "select_active_overrides()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L69"}, {"id": "cache_creation_writer_is_future", "label": "_is_future()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L123"}, {"id": "cache_creation_writer_apply_migration_defaults", "label": "_apply_migration_defaults()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L143"}, {"id": "cache_creation_writer_creationwriter", "label": "CreationWriter", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L188"}, {"id": "cache_creation_writer_creationwriter_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L191"}, {"id": "cache_creation_writer_creationwriter_write_creation", "label": ".write_creation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L204"}, {"id": "cache_creation_writer_creationwriter_update_creation_atomic", "label": ".update_creation_atomic()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L214"}, {"id": "cache_creation_writer_creationwriter_read_creation_snapshot", "label": ".read_creation_snapshot()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L232"}, {"id": "cache_creation_writer_creationwriter_write_creation_sync", "label": "._write_creation_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L243"}, {"id": "cache_creation_writer_creationwriter_update_creation_sync", "label": "._update_creation_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L248"}, {"id": "cache_creation_writer_creationwriter_read_creation_sync", "label": "._read_creation_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L267"}, {"id": "cache_creation_writer_creationwriter_decode_raw", "label": "._decode_raw()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L276"}, {"id": "cache_creation_writer_creationwriter_encode_and_replace", "label": "._encode_and_replace()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L300"}, {"id": "cache_creation_writer_payload_to_dict", "label": "_payload_to_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L316"}, {"id": "cache_creation_writer_merge_unknown_fields", "label": "_merge_unknown_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L327"}, {"id": "cache_creation_writer_rationale_1", "label": "Atomic reader/writer for ``creation.json``. Backend Spec \u00a74.4.5. All ``creation", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L1"}, {"id": "cache_creation_writer_rationale_74", "label": "Return the subset of override entries that are currently active. Implements", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L74"}, {"id": "cache_creation_writer_rationale_124", "label": "Return True if ``expires_at`` (UTC ISO-8601) is strictly after ``now``. The", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L124"}, {"id": "cache_creation_writer_rationale_144", "label": "Apply \u00a711.3 history-table defaults for fields missing on old minors. Return", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L144"}, {"id": "cache_creation_writer_rationale_189", "label": "Atomic reader/writer for ``creation.json``. Backend Spec \u00a74.4.5.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L189"}, {"id": "cache_creation_writer_rationale_192", "label": "Construct the writer. ``lock_timeout_seconds`` is the wall-clock cap fo", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L192"}, {"id": "cache_creation_writer_rationale_205", "label": "Write a fresh ``creation.json``. Reserved for initial creation. Acquire", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L205"}, {"id": "cache_creation_writer_rationale_219", "label": "Read, mutate, and write ``creation.json`` under one ``LOCK_EX``. The fu", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L219"}, {"id": "cache_creation_writer_rationale_233", "label": "Read a snapshot under ``LOCK_SH`` (shared/read lock). Concurrent reader", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L233"}, {"id": "cache_creation_writer_rationale_277", "label": "Load the file as a raw ``dict`` (no Struct conversion yet). We need the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L277"}, {"id": "cache_creation_writer_rationale_301", "label": "Encode ``payload`` to bytes, write atomically via atomic_write_bytes. T", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L301"}, {"id": "cache_creation_writer_rationale_317", "label": "Recursively convert a ``CreationJson`` into a plain ``dict``. Uses :func:`m", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L317"}, {"id": "cache_creation_writer_rationale_328", "label": "Copy keys from ``raw`` that are NOT in ``new_dict`` back into it. This is h", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L328"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "uuid", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "filelock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "msgspec", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "exlab_wizard_cache", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "exlab_wizard_io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "cache_creation_writer_select_active_overrides", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "cache_creation_writer_is_future", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L123", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "cache_creation_writer_apply_migration_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L143", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "cache_creation_writer_creationwriter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L188", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter", "target": "cache_creation_writer_creationwriter_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L191", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter", "target": "cache_creation_writer_creationwriter_write_creation", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L204", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter", "target": "cache_creation_writer_creationwriter_update_creation_atomic", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L214", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter", "target": "cache_creation_writer_creationwriter_read_creation_snapshot", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L232", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter", "target": "cache_creation_writer_creationwriter_write_creation_sync", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L243", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter", "target": "cache_creation_writer_creationwriter_update_creation_sync", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L248", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter", "target": "cache_creation_writer_creationwriter_read_creation_sync", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L267", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter", "target": "cache_creation_writer_creationwriter_decode_raw", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L276", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter", "target": "cache_creation_writer_creationwriter_encode_and_replace", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L300", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "cache_creation_writer_payload_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L316", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "target": "cache_creation_writer_merge_unknown_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L327", "weight": 1.0}, {"source": "cache_creation_writer_select_active_overrides", "target": "cache_creation_writer_is_future", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L117", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter_write_creation_sync", "target": "cache_creation_writer_creationwriter_encode_and_replace", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L246", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter_write_creation_sync", "target": "cache_creation_writer_payload_to_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L246", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter_update_creation_sync", "target": "cache_creation_writer_creationwriter_decode_raw", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L255", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter_update_creation_sync", "target": "cache_creation_writer_apply_migration_defaults", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L256", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter_update_creation_sync", "target": "cache_creation_writer_payload_to_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L260", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter_update_creation_sync", "target": "cache_creation_writer_merge_unknown_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L263", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter_update_creation_sync", "target": "cache_creation_writer_creationwriter_encode_and_replace", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L264", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter_read_creation_sync", "target": "cache_creation_writer_creationwriter_decode_raw", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L270", "weight": 1.0}, {"source": "cache_creation_writer_creationwriter_read_creation_sync", "target": "cache_creation_writer_apply_migration_defaults", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L271", "weight": 1.0}, {"source": "cache_creation_writer_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_creation_writer_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L1", "weight": 1.0}, {"source": "cache_creation_writer_rationale_74", "target": "cache_creation_writer_select_active_overrides", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L74", "weight": 1.0}, {"source": "cache_creation_writer_rationale_124", "target": "cache_creation_writer_is_future", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L124", "weight": 1.0}, {"source": "cache_creation_writer_rationale_144", "target": "cache_creation_writer_apply_migration_defaults", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L144", "weight": 1.0}, {"source": "cache_creation_writer_rationale_189", "target": "cache_creation_writer_creationwriter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L189", "weight": 1.0}, {"source": "cache_creation_writer_rationale_192", "target": "cache_creation_writer_creationwriter_init", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L192", "weight": 1.0}, {"source": "cache_creation_writer_rationale_205", "target": "cache_creation_writer_creationwriter_write_creation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L205", "weight": 1.0}, {"source": "cache_creation_writer_rationale_219", "target": "cache_creation_writer_creationwriter_update_creation_atomic", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L219", "weight": 1.0}, {"source": "cache_creation_writer_rationale_233", "target": "cache_creation_writer_creationwriter_read_creation_snapshot", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L233", "weight": 1.0}, {"source": "cache_creation_writer_rationale_277", "target": "cache_creation_writer_creationwriter_decode_raw", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L277", "weight": 1.0}, {"source": "cache_creation_writer_rationale_301", "target": "cache_creation_writer_creationwriter_encode_and_replace", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L301", "weight": 1.0}, {"source": "cache_creation_writer_rationale_317", "target": "cache_creation_writer_payload_to_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L317", "weight": 1.0}, {"source": "cache_creation_writer_rationale_328", "target": "cache_creation_writer_merge_unknown_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L328", "weight": 1.0}], "raw_calls": [{"caller_nid": "cache_creation_writer_select_active_overrides", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L88"}, {"caller_nid": "cache_creation_writer_select_active_overrides", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L90"}, {"caller_nid": "cache_creation_writer_select_active_overrides", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L94"}, {"caller_nid": "cache_creation_writer_select_active_overrides", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L96"}, {"caller_nid": "cache_creation_writer_select_active_overrides", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L98"}, {"caller_nid": "cache_creation_writer_select_active_overrides", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L102"}, {"caller_nid": "cache_creation_writer_select_active_overrides", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L104"}, {"caller_nid": "cache_creation_writer_select_active_overrides", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L108"}, {"caller_nid": "cache_creation_writer_select_active_overrides", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L112"}, {"caller_nid": "cache_creation_writer_select_active_overrides", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L114"}, {"caller_nid": "cache_creation_writer_select_active_overrides", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L116"}, {"caller_nid": "cache_creation_writer_select_active_overrides", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L119"}, {"caller_nid": "cache_creation_writer_is_future", "callee": "parse_utc_iso_or_none", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L131"}, {"caller_nid": "cache_creation_writer_is_future", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L133"}, {"caller_nid": "cache_creation_writer_apply_migration_defaults", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L169"}, {"caller_nid": "cache_creation_writer_apply_migration_defaults", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L170"}, {"caller_nid": "cache_creation_writer_apply_migration_defaults", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L172"}, {"caller_nid": "cache_creation_writer_apply_migration_defaults", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L174"}, {"caller_nid": "cache_creation_writer_apply_migration_defaults", "callee": "uuid4", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L174"}, {"caller_nid": "cache_creation_writer_apply_migration_defaults", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L176"}, {"caller_nid": "cache_creation_writer_apply_migration_defaults", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L177"}, {"caller_nid": "cache_creation_writer_apply_migration_defaults", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L178"}, {"caller_nid": "cache_creation_writer_apply_migration_defaults", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L179"}, {"caller_nid": "cache_creation_writer_creationwriter_write_creation", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L212"}, {"caller_nid": "cache_creation_writer_creationwriter_update_creation_atomic", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L230"}, {"caller_nid": "cache_creation_writer_creationwriter_read_creation_snapshot", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L239"}, {"caller_nid": "cache_creation_writer_creationwriter_write_creation_sync", "callee": "FileLock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L244"}, {"caller_nid": "cache_creation_writer_creationwriter_write_creation_sync", "callee": "lock_path_for", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L244"}, {"caller_nid": "cache_creation_writer_creationwriter_update_creation_sync", "callee": "FileLock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L253"}, {"caller_nid": "cache_creation_writer_creationwriter_update_creation_sync", "callee": "lock_path_for", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L253"}, {"caller_nid": "cache_creation_writer_creationwriter_update_creation_sync", "callee": "convert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L258"}, {"caller_nid": "cache_creation_writer_creationwriter_update_creation_sync", "callee": "mutator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L259"}, {"caller_nid": "cache_creation_writer_creationwriter_read_creation_sync", "callee": "ReadWriteLock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L268"}, {"caller_nid": "cache_creation_writer_creationwriter_read_creation_sync", "callee": "lock_path_for", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L268"}, {"caller_nid": "cache_creation_writer_creationwriter_read_creation_sync", "callee": "read_lock", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L269"}, {"caller_nid": "cache_creation_writer_creationwriter_read_creation_sync", "callee": "convert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L272"}, {"caller_nid": "cache_creation_writer_creationwriter_decode_raw", "callee": "read_msgspec_json_raw", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L288"}, {"caller_nid": "cache_creation_writer_creationwriter_decode_raw", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L293"}, {"caller_nid": "cache_creation_writer_creationwriter_decode_raw", "callee": "require_schema_major", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L294"}, {"caller_nid": "cache_creation_writer_creationwriter_decode_raw", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L295"}, {"caller_nid": "cache_creation_writer_creationwriter_decode_raw", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L295"}, {"caller_nid": "cache_creation_writer_creationwriter_encode_and_replace", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L307"}, {"caller_nid": "cache_creation_writer_creationwriter_encode_and_replace", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L308"}, {"caller_nid": "cache_creation_writer_payload_to_dict", "callee": "to_builtins", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L324"}, {"caller_nid": "cache_creation_writer_merge_unknown_fields", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py", "source_location": "L339"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5a4cc121c737ac11899dba260ec8ad24d7823d74ef578a8148fd2978dd35ab08.json b/graphify-out/cache/ast/5a4cc121c737ac11899dba260ec8ad24d7823d74ef578a8148fd2978dd35ab08.json new file mode 100644 index 0000000..9f3e1c3 --- /dev/null +++ b/graphify-out/cache/ast/5a4cc121c737ac11899dba260ec8ad24d7823d74ef578a8148fd2978dd35ab08.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_07_plugin_input_required_py", "label": "test_flow_07_plugin_input_required.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L1"}, {"id": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "label": "test_flow_07_plugin_input_required()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L14"}, {"id": "e2e_test_flow_07_plugin_input_required_rationale_1", "label": "E2E flow 07: Plugin input-required round trip. Frontend Spec \u00a76.4.5 (plugin ste", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_07_plugin_input_required_py", "target": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L14", "weight": 1.0}, {"source": "e2e_test_flow_07_plugin_input_required_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_07_plugin_input_required_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L15"}, {"caller_nid": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L16"}, {"caller_nid": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L18"}, {"caller_nid": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L18"}, {"caller_nid": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L19"}, {"caller_nid": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L19"}, {"caller_nid": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L20"}, {"caller_nid": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L20"}, {"caller_nid": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L21"}, {"caller_nid": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L21"}, {"caller_nid": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L26"}, {"caller_nid": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L29"}, {"caller_nid": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py", "source_location": "L29"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5a626c3ace3fcb4d13f819d2decaa7eef2c43039ed0902f543e558fb6652a047.json b/graphify-out/cache/ast/5a626c3ace3fcb4d13f819d2decaa7eef2c43039ed0902f543e558fb6652a047.json new file mode 100644 index 0000000..983ce9b --- /dev/null +++ b/graphify-out/cache/ast/5a626c3ace3fcb4d13f819d2decaa7eef2c43039ed0902f543e558fb6652a047.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_reconfigure_py", "label": "test_engine_reconfigure.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L1"}, {"id": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", "label": "test_reconfigure_refreshes_scan_limits_and_roots()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L16"}, {"id": "validator_test_engine_reconfigure_test_reconfigure_defaults_to_empty_roots", "label": "test_reconfigure_defaults_to_empty_roots()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L37"}, {"id": "validator_test_engine_reconfigure_rationale_1", "label": "Unit tests for ``Validator.reconfigure`` (live config reload). The settings dia", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_reconfigure_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_reconfigure_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_reconfigure_py", "target": "exlab_wizard_validator_engine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_reconfigure_py", "target": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_reconfigure_py", "target": "validator_test_engine_reconfigure_test_reconfigure_defaults_to_empty_roots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L37", "weight": 1.0}, {"source": "validator_test_engine_reconfigure_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_reconfigure_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L17"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L18"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", "callee": "reconfigure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L24"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L25"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L26"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L27"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", "callee": "frozenset", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L32"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L33"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L34"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_defaults_to_empty_roots", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L38"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_defaults_to_empty_roots", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L39"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_defaults_to_empty_roots", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L40"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_defaults_to_empty_roots", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L41"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_defaults_to_empty_roots", "callee": "reconfigure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L43"}, {"caller_nid": "validator_test_engine_reconfigure_test_reconfigure_defaults_to_empty_roots", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py", "source_location": "L43"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5a84d90f53ec7cfd2abbf95a7ca3c10625c4ca790da4869e1095058169e0e0bc.json b/graphify-out/cache/ast/5a84d90f53ec7cfd2abbf95a7ca3c10625c4ca790da4869e1095058169e0e0bc.json new file mode 100644 index 0000000..42a0f6c --- /dev/null +++ b/graphify-out/cache/ast/5a84d90f53ec7cfd2abbf95a7ca3c10625c4ca790da4869e1095058169e0e0bc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_exlab_wizard_frontend_spec_md", "label": "ExLab-Wizard_Frontend_Spec.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1"}, {"id": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "label": "ExLab-Wizard: Frontend Design Specification", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1"}, {"id": "design_specs_exlab_wizard_frontend_spec_table_of_contents", "label": "Table of Contents", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L9"}, {"id": "design_specs_exlab_wizard_frontend_spec_1_purpose_and_scope", "label": "1. Purpose and Scope", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L27"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_framework_choice", "label": "2. Framework Choice", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L39"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", "label": "2.1 Visual tokens and the design system", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L56"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_1_1_the_design_py_module", "label": "2.1.1 The `design.py` module", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L60"}, {"id": "design_specs_exlab_wizard_frontend_spec_codeblock_1", "label": "code:python (# exlab_wizard/ui/design.py \u2014 mirrors DESIGN.md; update both)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L66"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_1_2_what_lives_in_design_md_vs_in_this_spec", "label": "2.1.2 What lives in DESIGN.md vs in this spec", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L123"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_1_3_exlab_wizard_typography_overrides", "label": "2.1.3 ExLab-Wizard typography overrides", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L130"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_1_4_warning_tier_color_resolves_oq_3", "label": "2.1.4 Warning-tier color (resolves OQ #3)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L143"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_1_5_css_styling_reference_rule", "label": "2.1.5 CSS styling reference rule", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L160"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_1_6_design_md_absolute_constraints_binding", "label": "2.1.6 DESIGN.md absolute constraints (binding)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L173"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", "label": "2.2 Notification taxonomy", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L183"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_2_1_pattern_selection_rule", "label": "2.2.1 Pattern selection rule", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L187"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_2_2_toast_specifications", "label": "2.2.2 Toast specifications", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L205"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_2_3_banner_specifications", "label": "2.2.3 Banner specifications", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L228"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_2_4_inline_message_specifications", "label": "2.2.4 Inline message specifications", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L252"}, {"id": "design_specs_exlab_wizard_frontend_spec_2_2_5_the_notify_helper_api", "label": "2.2.5 The `notify()` helper API", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L268"}, {"id": "design_specs_exlab_wizard_frontend_spec_codeblock_2", "label": "code:python (# Action results -> toasts (\u00a72.2.2))", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L272"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_main_window", "label": "3. Main Window", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L307"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", "label": "3.1 Application Lifecycle and First-Launch State", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L311"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_1_1_setup_complete_definition", "label": "3.1.1 Setup-complete definition", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L319"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_1_2_boot_flow", "label": "3.1.2 Boot flow", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L329"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_1_3_welcome_card_first_launch_only", "label": "3.1.3 Welcome Card (first launch only)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L356"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_1_4_setup_incomplete_state_on_the_main_window", "label": "3.1.4 Setup-Incomplete state on the Main Window", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L376"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_1_5_first_launch_defaults", "label": "3.1.5 First-launch defaults", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L393"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_1_6_bundled_content_discovery", "label": "3.1.6 Bundled content discovery", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L404"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_1_7_lims_configuration_online_and_offline_workstations", "label": "3.1.7 LIMS configuration: online and offline workstations", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L412"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_2_layout", "label": "3.2 Layout", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L418"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_3_refresh_semantics", "label": "3.3 Refresh Semantics", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L433"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", "label": "3.4 Tray Icon and Window Lifecycle", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L437"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_4_1_tray_menu", "label": "3.4.1 Tray menu", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L441"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_4_2_status_submenu", "label": "3.4.2 Status submenu", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L453"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_4_3_window_lifecycle", "label": "3.4.3 Window lifecycle", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L469"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_4_4_why_this_lifecycle_matters_for_the_lab_workflow", "label": "3.4.4 Why this lifecycle matters for the lab workflow", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L486"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_4_5_os_notifications", "label": "3.4.5 OS notifications", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L494"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_4_6_quitting_the_app", "label": "3.4.6 Quitting the app", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L503"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_4_7_linux_fallback_no_system_tray", "label": "3.4.7 Linux fallback (no system tray)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L510"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", "label": "3.5 Tree details, filters, and status bar", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L521"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_5_1_lims_name_resolution", "label": "3.5.1 LIMS name resolution", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L525"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_5_2_tree_node_display_format", "label": "3.5.2 Tree node display format", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L535"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_5_3_archived_and_deleted_lims_project_handling", "label": "3.5.3 Archived and deleted LIMS-project handling", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L546"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_5_4_search_and_filter_chips", "label": "3.5.4 Search and filter chips", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L558"}, {"id": "design_specs_exlab_wizard_frontend_spec_codeblock_3", "label": "code:block3 ([ search by name, short_id, or run label ... ] [Active \u2713] )", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L562"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_5_5_status_bar_bottom_of_the_main_window", "label": "3.5.5 Status bar (bottom of the main window)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L580"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_5_6_empty_states", "label": "3.5.6 Empty states", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L594"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", "label": "3.6 Detail pane (right panel)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L604"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_6_1_title_bar", "label": "3.6.1 Title bar", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L610"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_6_2_project_detail_sections", "label": "3.6.2 Project detail sections", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L622"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_6_3_run_detail_sections", "label": "3.6.3 Run detail sections", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L633"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_6_4_validation_and_override_summary", "label": "3.6.4 Validation and override summary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L646"}, {"id": "design_specs_exlab_wizard_frontend_spec_codeblock_4", "label": "code:block4 (\u26a0 Unresolved placeholder token \u00b7 Run_)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L654"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_6_5_action_affordances", "label": "3.6.5 Action affordances", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L668"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_6_6_empty_selection", "label": "3.6.6 Empty selection", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L690"}, {"id": "design_specs_exlab_wizard_frontend_spec_3_7_keyboard_shortcuts", "label": "3.7 Keyboard shortcuts", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L698"}, {"id": "design_specs_exlab_wizard_frontend_spec_4_new_project_wizard", "label": "4. New Project Wizard", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L723"}, {"id": "design_specs_exlab_wizard_frontend_spec_4_1_lims_picker_behavior", "label": "4.1 LIMS Picker Behavior", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L739"}, {"id": "design_specs_exlab_wizard_frontend_spec_5_new_run_wizard_experimental_and_test_modes", "label": "5. New Run Wizard (Experimental and Test Modes)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L750"}, {"id": "design_specs_exlab_wizard_frontend_spec_5_1_mode_binding_at_launch", "label": "5.1 Mode Binding at Launch", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L754"}, {"id": "design_specs_exlab_wizard_frontend_spec_5_2_steps", "label": "5.2 Steps", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L761"}, {"id": "design_specs_exlab_wizard_frontend_spec_5_3_visual_differentiation", "label": "5.3 Visual Differentiation", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L772"}, {"id": "design_specs_exlab_wizard_frontend_spec_6_readme_authoring_step", "label": "6. README Authoring Step", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L780"}, {"id": "design_specs_exlab_wizard_frontend_spec_6_1_layout", "label": "6.1 Layout", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L784"}, {"id": "design_specs_exlab_wizard_frontend_spec_6_2_pre_fill_rules", "label": "6.2 Pre-fill Rules", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L796"}, {"id": "design_specs_exlab_wizard_frontend_spec_6_3_preview_behavior", "label": "6.3 Preview Behavior", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L806"}, {"id": "design_specs_exlab_wizard_frontend_spec_6_4_required_field_error_messaging", "label": "6.4 Required-Field Error Messaging", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L810"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "label": "7. Settings Dialog", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L816"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_1_modality", "label": "7.1 Modality", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L822"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_2_layout_sidebar_navigation", "label": "7.2 Layout \u2014 sidebar navigation", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L828"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_3_save_and_discard_model", "label": "7.3 Save and Discard model", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L839"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_4_reusable_patterns", "label": "7.4 Reusable patterns", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L851"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_4_1_credential_field", "label": "7.4.1 Credential field", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L853"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_4_2_test_connection_feedback_panel", "label": "7.4.2 Test-connection feedback panel", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L865"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_5_paths_section", "label": "7.5 Paths section", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L877"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_6_lims_section", "label": "7.6 LIMS section", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L889"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_7_equipment_list_section", "label": "7.7 Equipment List section", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L907"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_7_1_list_table", "label": "7.7.1 List table", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L911"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_7_2_add_edit_sub_dialog", "label": "7.7.2 Add / Edit sub-dialog", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L929"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_7_3_bandwidth_schedule_editor", "label": "7.7.3 Bandwidth schedule editor", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L962"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_8_nas_cleanup_section", "label": "7.8 NAS Cleanup section", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L990"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_9_operators_section", "label": "7.9 Operators section", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1003"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_10_validator_section", "label": "7.10 Validator section", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1009"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_11_logging_section", "label": "7.11 Logging section", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1018"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_12_orchestrator_mode_section", "label": "7.12 Orchestrator Mode section", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1028"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_13_application_section", "label": "7.13 Application section", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1042"}, {"id": "design_specs_exlab_wizard_frontend_spec_7_14_setup_incomplete_state", "label": "7.14 Setup-incomplete state", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1054"}, {"id": "design_specs_exlab_wizard_frontend_spec_8_orchestrator_mode_surfaces", "label": "8. Orchestrator Mode Surfaces", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1064"}, {"id": "design_specs_exlab_wizard_frontend_spec_8_1_equipment_selector", "label": "8.1 Equipment Selector", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1068"}, {"id": "design_specs_exlab_wizard_frontend_spec_8_2_staging_panel", "label": "8.2 Staging Panel", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1072"}, {"id": "design_specs_exlab_wizard_frontend_spec_8_3_clear_verified_runs_action", "label": "8.3 Clear Verified Runs Action", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1085"}, {"id": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", "label": "9. Plugin Input Escalation", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1091"}, {"id": "design_specs_exlab_wizard_frontend_spec_9_1_escalation_dialog_layout", "label": "9.1 Escalation dialog layout", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1095"}, {"id": "design_specs_exlab_wizard_frontend_spec_9_2_multiple_consecutive_escalations_from_one_session_sequential", "label": "9.2 Multiple consecutive escalations from one session (sequential)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1112"}, {"id": "design_specs_exlab_wizard_frontend_spec_9_3_mid_plugin_pass_progress_per_plugin_sub_progress", "label": "9.3 Mid-plugin-pass progress (per-plugin sub-progress)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1120"}, {"id": "design_specs_exlab_wizard_frontend_spec_codeblock_5", "label": "code:block5 (Running plugins )", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1124"}, {"id": "design_specs_exlab_wizard_frontend_spec_9_4_cancel_during_escalation_confirmation_dialog", "label": "9.4 Cancel during escalation -- confirmation dialog", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1139"}, {"id": "design_specs_exlab_wizard_frontend_spec_9_5_disconnect_and_resume_the_in_flight_operations_panel", "label": "9.5 Disconnect and resume -- the in-flight operations panel", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1154"}, {"id": "design_specs_exlab_wizard_frontend_spec_9_6_concurrent_suspended_sessions", "label": "9.6 Concurrent suspended sessions", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1181"}, {"id": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", "label": "10. Error, Progress, and Summary Presentation", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1192"}, {"id": "design_specs_exlab_wizard_frontend_spec_10_1_progress", "label": "10.1 Progress", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1194"}, {"id": "design_specs_exlab_wizard_frontend_spec_10_2_errors", "label": "10.2 Errors", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1198"}, {"id": "design_specs_exlab_wizard_frontend_spec_10_3_success_summary", "label": "10.3 Success Summary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1206"}, {"id": "design_specs_exlab_wizard_frontend_spec_10_4_sync_blocked_banner", "label": "10.4 Sync-Blocked Banner", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1216"}, {"id": "design_specs_exlab_wizard_frontend_spec_10_5_recovery_flows", "label": "10.5 Recovery flows", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1226"}, {"id": "design_specs_exlab_wizard_frontend_spec_10_5_1_nas_sync_failure_recovery", "label": "10.5.1 NAS sync failure recovery", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1230"}, {"id": "design_specs_exlab_wizard_frontend_spec_10_5_2_lims_unreachability_mid_wizard", "label": "10.5.2 LIMS unreachability mid-wizard", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1252"}, {"id": "design_specs_exlab_wizard_frontend_spec_10_5_3_crash_and_orphan_recovery", "label": "10.5.3 Crash and orphan recovery", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1270"}, {"id": "design_specs_exlab_wizard_frontend_spec_10_5_4_pre_flight_checks_before_creation", "label": "10.5.4 Pre-flight checks before creation", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1287"}, {"id": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", "label": "11. Problems Tab", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1301"}, {"id": "design_specs_exlab_wizard_frontend_spec_11_1_layout", "label": "11.1 Layout", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1305"}, {"id": "design_specs_exlab_wizard_frontend_spec_11_2_severity_tier_visual_treatment", "label": "11.2 Severity Tier Visual Treatment", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1330"}, {"id": "design_specs_exlab_wizard_frontend_spec_11_3_per_row_actions", "label": "11.3 Per-Row Actions", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1336"}, {"id": "design_specs_exlab_wizard_frontend_spec_11_4_empty_state", "label": "11.4 Empty State", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1347"}, {"id": "design_specs_exlab_wizard_frontend_spec_11_4_1_new_finding_surfacing_during_the_session", "label": "11.4.1 New-finding surfacing during the session", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1355"}, {"id": "design_specs_exlab_wizard_frontend_spec_11_5_override_and_allow_sync_dialog", "label": "11.5 Override-and-Allow-Sync Dialog", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1365"}, {"id": "design_specs_exlab_wizard_frontend_spec_11_6_cross_surface_links", "label": "11.6 Cross-Surface Links", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1381"}, {"id": "design_specs_exlab_wizard_frontend_spec_12_widget_mappings", "label": "12. Widget Mappings", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1394"}, {"id": "design_specs_exlab_wizard_frontend_spec_12_1_template_variable_form_from_copier_yml_questions", "label": "12.1 Template Variable Form (from `copier.yml` questions)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1398"}, {"id": "design_specs_exlab_wizard_frontend_spec_12_2_readme_form_fields", "label": "12.2 README Form Fields", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1408"}, {"id": "design_specs_exlab_wizard_frontend_spec_12_3_required_field_indication", "label": "12.3 Required-Field Indication", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1418"}, {"id": "design_specs_exlab_wizard_frontend_spec_13_open_questions", "label": "13. Open Questions", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1426"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_exlab_wizard_frontend_spec_md", "target": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_table_of_contents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L9", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_1_purpose_and_scope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L27", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_2_framework_choice", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L39", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_framework_choice", "target": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L56", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", "target": "design_specs_exlab_wizard_frontend_spec_2_1_1_the_design_py_module", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L60", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_1_1_the_design_py_module", "target": "design_specs_exlab_wizard_frontend_spec_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L66", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", "target": "design_specs_exlab_wizard_frontend_spec_2_1_2_what_lives_in_design_md_vs_in_this_spec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L123", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", "target": "design_specs_exlab_wizard_frontend_spec_2_1_3_exlab_wizard_typography_overrides", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L130", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", "target": "design_specs_exlab_wizard_frontend_spec_2_1_4_warning_tier_color_resolves_oq_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L143", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", "target": "design_specs_exlab_wizard_frontend_spec_2_1_5_css_styling_reference_rule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L160", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", "target": "design_specs_exlab_wizard_frontend_spec_2_1_6_design_md_absolute_constraints_binding", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L173", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_framework_choice", "target": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L183", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", "target": "design_specs_exlab_wizard_frontend_spec_2_2_1_pattern_selection_rule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L187", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", "target": "design_specs_exlab_wizard_frontend_spec_2_2_2_toast_specifications", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L205", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", "target": "design_specs_exlab_wizard_frontend_spec_2_2_3_banner_specifications", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L228", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", "target": "design_specs_exlab_wizard_frontend_spec_2_2_4_inline_message_specifications", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L252", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", "target": "design_specs_exlab_wizard_frontend_spec_2_2_5_the_notify_helper_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L268", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_2_2_5_the_notify_helper_api", "target": "design_specs_exlab_wizard_frontend_spec_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L272", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_3_main_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L307", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_main_window", "target": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L311", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", "target": "design_specs_exlab_wizard_frontend_spec_3_1_1_setup_complete_definition", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L319", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", "target": "design_specs_exlab_wizard_frontend_spec_3_1_2_boot_flow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L329", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", "target": "design_specs_exlab_wizard_frontend_spec_3_1_3_welcome_card_first_launch_only", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L356", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", "target": "design_specs_exlab_wizard_frontend_spec_3_1_4_setup_incomplete_state_on_the_main_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L376", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", "target": "design_specs_exlab_wizard_frontend_spec_3_1_5_first_launch_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L393", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", "target": "design_specs_exlab_wizard_frontend_spec_3_1_6_bundled_content_discovery", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L404", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", "target": "design_specs_exlab_wizard_frontend_spec_3_1_7_lims_configuration_online_and_offline_workstations", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L412", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_main_window", "target": "design_specs_exlab_wizard_frontend_spec_3_2_layout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L418", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_main_window", "target": "design_specs_exlab_wizard_frontend_spec_3_3_refresh_semantics", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L433", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_main_window", "target": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L437", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", "target": "design_specs_exlab_wizard_frontend_spec_3_4_1_tray_menu", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L441", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", "target": "design_specs_exlab_wizard_frontend_spec_3_4_2_status_submenu", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L453", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", "target": "design_specs_exlab_wizard_frontend_spec_3_4_3_window_lifecycle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L469", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", "target": "design_specs_exlab_wizard_frontend_spec_3_4_4_why_this_lifecycle_matters_for_the_lab_workflow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L486", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", "target": "design_specs_exlab_wizard_frontend_spec_3_4_5_os_notifications", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L494", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", "target": "design_specs_exlab_wizard_frontend_spec_3_4_6_quitting_the_app", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L503", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", "target": "design_specs_exlab_wizard_frontend_spec_3_4_7_linux_fallback_no_system_tray", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L510", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_main_window", "target": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L521", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", "target": "design_specs_exlab_wizard_frontend_spec_3_5_1_lims_name_resolution", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L525", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", "target": "design_specs_exlab_wizard_frontend_spec_3_5_2_tree_node_display_format", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L535", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", "target": "design_specs_exlab_wizard_frontend_spec_3_5_3_archived_and_deleted_lims_project_handling", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L546", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", "target": "design_specs_exlab_wizard_frontend_spec_3_5_4_search_and_filter_chips", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L558", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_5_4_search_and_filter_chips", "target": "design_specs_exlab_wizard_frontend_spec_codeblock_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L562", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", "target": "design_specs_exlab_wizard_frontend_spec_3_5_5_status_bar_bottom_of_the_main_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L580", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", "target": "design_specs_exlab_wizard_frontend_spec_3_5_6_empty_states", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L594", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_main_window", "target": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L604", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", "target": "design_specs_exlab_wizard_frontend_spec_3_6_1_title_bar", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L610", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", "target": "design_specs_exlab_wizard_frontend_spec_3_6_2_project_detail_sections", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L622", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", "target": "design_specs_exlab_wizard_frontend_spec_3_6_3_run_detail_sections", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L633", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", "target": "design_specs_exlab_wizard_frontend_spec_3_6_4_validation_and_override_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L646", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_6_4_validation_and_override_summary", "target": "design_specs_exlab_wizard_frontend_spec_codeblock_4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L654", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", "target": "design_specs_exlab_wizard_frontend_spec_3_6_5_action_affordances", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L668", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", "target": "design_specs_exlab_wizard_frontend_spec_3_6_6_empty_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L690", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_3_main_window", "target": "design_specs_exlab_wizard_frontend_spec_3_7_keyboard_shortcuts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L698", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_4_new_project_wizard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L723", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_4_new_project_wizard", "target": "design_specs_exlab_wizard_frontend_spec_4_1_lims_picker_behavior", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L739", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_5_new_run_wizard_experimental_and_test_modes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L750", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_5_new_run_wizard_experimental_and_test_modes", "target": "design_specs_exlab_wizard_frontend_spec_5_1_mode_binding_at_launch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L754", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_5_new_run_wizard_experimental_and_test_modes", "target": "design_specs_exlab_wizard_frontend_spec_5_2_steps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L761", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_5_new_run_wizard_experimental_and_test_modes", "target": "design_specs_exlab_wizard_frontend_spec_5_3_visual_differentiation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L772", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_6_readme_authoring_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L780", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_6_readme_authoring_step", "target": "design_specs_exlab_wizard_frontend_spec_6_1_layout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L784", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_6_readme_authoring_step", "target": "design_specs_exlab_wizard_frontend_spec_6_2_pre_fill_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L796", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_6_readme_authoring_step", "target": "design_specs_exlab_wizard_frontend_spec_6_3_preview_behavior", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L806", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_6_readme_authoring_step", "target": "design_specs_exlab_wizard_frontend_spec_6_4_required_field_error_messaging", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L810", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L816", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_1_modality", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L822", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_2_layout_sidebar_navigation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L828", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_3_save_and_discard_model", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L839", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_4_reusable_patterns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L851", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_4_reusable_patterns", "target": "design_specs_exlab_wizard_frontend_spec_7_4_1_credential_field", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L853", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_4_reusable_patterns", "target": "design_specs_exlab_wizard_frontend_spec_7_4_2_test_connection_feedback_panel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L865", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_5_paths_section", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L877", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_6_lims_section", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L889", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_7_equipment_list_section", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L907", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_7_equipment_list_section", "target": "design_specs_exlab_wizard_frontend_spec_7_7_1_list_table", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L911", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_7_equipment_list_section", "target": "design_specs_exlab_wizard_frontend_spec_7_7_2_add_edit_sub_dialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L929", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_7_equipment_list_section", "target": "design_specs_exlab_wizard_frontend_spec_7_7_3_bandwidth_schedule_editor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L962", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_8_nas_cleanup_section", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L990", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_9_operators_section", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1003", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_10_validator_section", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1009", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_11_logging_section", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1018", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_12_orchestrator_mode_section", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1028", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_13_application_section", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1042", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", "target": "design_specs_exlab_wizard_frontend_spec_7_14_setup_incomplete_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1054", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_8_orchestrator_mode_surfaces", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1064", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_8_orchestrator_mode_surfaces", "target": "design_specs_exlab_wizard_frontend_spec_8_1_equipment_selector", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1068", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_8_orchestrator_mode_surfaces", "target": "design_specs_exlab_wizard_frontend_spec_8_2_staging_panel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1072", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_8_orchestrator_mode_surfaces", "target": "design_specs_exlab_wizard_frontend_spec_8_3_clear_verified_runs_action", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1085", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1091", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", "target": "design_specs_exlab_wizard_frontend_spec_9_1_escalation_dialog_layout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1095", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", "target": "design_specs_exlab_wizard_frontend_spec_9_2_multiple_consecutive_escalations_from_one_session_sequential", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1112", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", "target": "design_specs_exlab_wizard_frontend_spec_9_3_mid_plugin_pass_progress_per_plugin_sub_progress", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1120", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_9_3_mid_plugin_pass_progress_per_plugin_sub_progress", "target": "design_specs_exlab_wizard_frontend_spec_codeblock_5", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1124", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", "target": "design_specs_exlab_wizard_frontend_spec_9_4_cancel_during_escalation_confirmation_dialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1139", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", "target": "design_specs_exlab_wizard_frontend_spec_9_5_disconnect_and_resume_the_in_flight_operations_panel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1154", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", "target": "design_specs_exlab_wizard_frontend_spec_9_6_concurrent_suspended_sessions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1181", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1192", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", "target": "design_specs_exlab_wizard_frontend_spec_10_1_progress", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1194", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", "target": "design_specs_exlab_wizard_frontend_spec_10_2_errors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1198", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", "target": "design_specs_exlab_wizard_frontend_spec_10_3_success_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1206", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", "target": "design_specs_exlab_wizard_frontend_spec_10_4_sync_blocked_banner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1216", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", "target": "design_specs_exlab_wizard_frontend_spec_10_5_recovery_flows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1226", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_10_5_recovery_flows", "target": "design_specs_exlab_wizard_frontend_spec_10_5_1_nas_sync_failure_recovery", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1230", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_10_5_recovery_flows", "target": "design_specs_exlab_wizard_frontend_spec_10_5_2_lims_unreachability_mid_wizard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1252", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_10_5_recovery_flows", "target": "design_specs_exlab_wizard_frontend_spec_10_5_3_crash_and_orphan_recovery", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1270", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_10_5_recovery_flows", "target": "design_specs_exlab_wizard_frontend_spec_10_5_4_pre_flight_checks_before_creation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1287", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1301", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", "target": "design_specs_exlab_wizard_frontend_spec_11_1_layout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1305", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", "target": "design_specs_exlab_wizard_frontend_spec_11_2_severity_tier_visual_treatment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1330", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", "target": "design_specs_exlab_wizard_frontend_spec_11_3_per_row_actions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1336", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", "target": "design_specs_exlab_wizard_frontend_spec_11_4_empty_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1347", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", "target": "design_specs_exlab_wizard_frontend_spec_11_4_1_new_finding_surfacing_during_the_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1355", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", "target": "design_specs_exlab_wizard_frontend_spec_11_5_override_and_allow_sync_dialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1365", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", "target": "design_specs_exlab_wizard_frontend_spec_11_6_cross_surface_links", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1381", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_12_widget_mappings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1394", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_12_widget_mappings", "target": "design_specs_exlab_wizard_frontend_spec_12_1_template_variable_form_from_copier_yml_questions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1398", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_12_widget_mappings", "target": "design_specs_exlab_wizard_frontend_spec_12_2_readme_form_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1408", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_12_widget_mappings", "target": "design_specs_exlab_wizard_frontend_spec_12_3_required_field_indication", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1418", "weight": 1.0}, {"source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", "target": "design_specs_exlab_wizard_frontend_spec_13_open_questions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md", "source_location": "L1426", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/5ab87aadad41b8710104312585e50607593f0fef95d1ba19992bcdde73773d7d.json b/graphify-out/cache/ast/5ab87aadad41b8710104312585e50607593f0fef95d1ba19992bcdde73773d7d.json new file mode 100644 index 0000000..77894a9 --- /dev/null +++ b/graphify-out/cache/ast/5ab87aadad41b8710104312585e50607593f0fef95d1ba19992bcdde73773d7d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_run_delete_py", "label": "run_delete.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L1"}, {"id": "sync_run_delete_delete_run_files", "label": "delete_run_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L38"}, {"id": "sync_run_delete_prune_empty_dirs", "label": "_prune_empty_dirs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L94"}, {"id": "sync_run_delete_rationale_1", "label": "Keep-local-aware, symlink-safe deletion of a run's staging copy. Operator-free", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L1"}, {"id": "sync_run_delete_rationale_44", "label": "Delete ``run_path`` data files honoring ``retain_cache`` and ``keep_local``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L44"}, {"id": "sync_run_delete_rationale_95", "label": "Remove now-empty real directories under ``run_path`` (deepest first). The r", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L95"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_run_delete_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_run_delete_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_run_delete_py", "target": "shutil", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_run_delete_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_run_delete_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_run_delete_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_run_delete_py", "target": "sync_run_delete_delete_run_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_run_delete_py", "target": "sync_run_delete_prune_empty_dirs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L94", "weight": 1.0}, {"source": "sync_run_delete_delete_run_files", "target": "sync_run_delete_prune_empty_dirs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L91", "weight": 1.0}, {"source": "sync_run_delete_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_run_delete_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L1", "weight": 1.0}, {"source": "sync_run_delete_rationale_44", "target": "sync_run_delete_delete_run_files", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L44", "weight": 1.0}, {"source": "sync_run_delete_rationale_95", "target": "sync_run_delete_prune_empty_dirs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L95", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_run_delete_delete_run_files", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L59"}, {"caller_nid": "sync_run_delete_delete_run_files", "callee": "rmtree", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L65"}, {"caller_nid": "sync_run_delete_delete_run_files", "callee": "walk", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L73"}, {"caller_nid": "sync_run_delete_delete_run_files", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L74"}, {"caller_nid": "sync_run_delete_delete_run_files", "callee": "is_symlink", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L77"}, {"caller_nid": "sync_run_delete_delete_run_files", "callee": "relative_to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L79"}, {"caller_nid": "sync_run_delete_delete_run_files", "callee": "as_posix", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L84"}, {"caller_nid": "sync_run_delete_delete_run_files", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L89"}, {"caller_nid": "sync_run_delete_delete_run_files", "callee": "unlink", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L90"}, {"caller_nid": "sync_run_delete_prune_empty_dirs", "callee": "walk", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L103"}, {"caller_nid": "sync_run_delete_prune_empty_dirs", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L104"}, {"caller_nid": "sync_run_delete_prune_empty_dirs", "callee": "is_symlink", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L106"}, {"caller_nid": "sync_run_delete_prune_empty_dirs", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L108"}, {"caller_nid": "sync_run_delete_prune_empty_dirs", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L111"}, {"caller_nid": "sync_run_delete_prune_empty_dirs", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L111"}, {"caller_nid": "sync_run_delete_prune_empty_dirs", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L114"}, {"caller_nid": "sync_run_delete_prune_empty_dirs", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L115"}, {"caller_nid": "sync_run_delete_prune_empty_dirs", "callee": "iterdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L115"}, {"caller_nid": "sync_run_delete_prune_empty_dirs", "callee": "rmdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py", "source_location": "L116"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5b01b70d0dd15ca94c2687cea10d01fdad35e02b3415e14e7b119165bde1f699.json b/graphify-out/cache/ast/5b01b70d0dd15ca94c2687cea10d01fdad35e02b3415e14e7b119165bde1f699.json new file mode 100644 index 0000000..39bee01 --- /dev/null +++ b/graphify-out/cache/ast/5b01b70d0dd15ca94c2687cea10d01fdad35e02b3415e14e7b119165bde1f699.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_08_error_handling_principles_md", "label": "08_Error_Handling_Principles.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L1"}, {"id": "design_spec_sections_08_error_handling_principles_8_error_handling_principles", "label": "8. Error Handling Principles", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L1"}, {"id": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", "label": "8.1 Path Validation Rules", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L11"}, {"id": "design_spec_sections_08_error_handling_principles_8_1_1_unresolved_placeholder_rule_hard_tier", "label": "8.1.1 Unresolved-placeholder rule (hard tier)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L15"}, {"id": "design_spec_sections_08_error_handling_principles_8_1_2_illegal_filesystem_character_rule_hard_tier", "label": "8.1.2 Illegal-filesystem-character rule (hard tier)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L39"}, {"id": "design_spec_sections_08_error_handling_principles_8_1_3_mode_prefix_mismatch_rule_hard_tier", "label": "8.1.3 Mode-prefix mismatch rule (hard tier)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L51"}, {"id": "design_spec_sections_08_error_handling_principles_8_1_4_orphan_rule_soft_tier", "label": "8.1.4 Orphan rule (soft tier)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L60"}, {"id": "design_spec_sections_08_error_handling_principles_8_1_5_missing_required_field_rule_soft_tier", "label": "8.1.5 Missing-required-field rule (soft tier)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L66"}, {"id": "design_spec_sections_08_error_handling_principles_8_1_6_tier_mapping", "label": "8.1.6 Tier mapping", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L70"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_08_error_handling_principles_md", "target": "design_spec_sections_08_error_handling_principles_8_error_handling_principles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L1", "weight": 1.0}, {"source": "design_spec_sections_08_error_handling_principles_8_error_handling_principles", "target": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L11", "weight": 1.0}, {"source": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", "target": "design_spec_sections_08_error_handling_principles_8_1_1_unresolved_placeholder_rule_hard_tier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L15", "weight": 1.0}, {"source": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", "target": "design_spec_sections_08_error_handling_principles_8_1_2_illegal_filesystem_character_rule_hard_tier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L39", "weight": 1.0}, {"source": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", "target": "design_spec_sections_08_error_handling_principles_8_1_3_mode_prefix_mismatch_rule_hard_tier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L51", "weight": 1.0}, {"source": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", "target": "design_spec_sections_08_error_handling_principles_8_1_4_orphan_rule_soft_tier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L60", "weight": 1.0}, {"source": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", "target": "design_spec_sections_08_error_handling_principles_8_1_5_missing_required_field_rule_soft_tier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L66", "weight": 1.0}, {"source": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", "target": "design_spec_sections_08_error_handling_principles_8_1_6_tier_mapping", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md", "source_location": "L70", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/5b787fe907342d14be038006915d35d92a57b2b55fbe030dcb2994fa515e40b6.json b/graphify-out/cache/ast/5b787fe907342d14be038006915d35d92a57b2b55fbe030dcb2994fa515e40b6.json new file mode 100644 index 0000000..999e049 --- /dev/null +++ b/graphify-out/cache/ast/5b787fe907342d14be038006915d35d92a57b2b55fbe030dcb2994fa515e40b6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "label": "test_time.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L1"}, {"id": "utils_test_time_test_utc_now_iso_format", "label": "test_utc_now_iso_format()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L20"}, {"id": "utils_test_time_test_dt_to_iso_naive_assumed_utc", "label": "test_dt_to_iso_naive_assumed_utc()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L25"}, {"id": "utils_test_time_test_dt_to_iso_utc_aware", "label": "test_dt_to_iso_utc_aware()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L30"}, {"id": "utils_test_time_test_dt_to_iso_non_utc_zone_converts", "label": "test_dt_to_iso_non_utc_zone_converts()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L35"}, {"id": "utils_test_time_test_parse_utc_iso_z_form", "label": "test_parse_utc_iso_z_form()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L42"}, {"id": "utils_test_time_test_parse_utc_iso_offset_form", "label": "test_parse_utc_iso_offset_form()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L47"}, {"id": "utils_test_time_test_parse_utc_iso_naive_input_tagged_utc", "label": "test_parse_utc_iso_naive_input_tagged_utc()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L52"}, {"id": "utils_test_time_test_parse_utc_iso_round_trip_with_now", "label": "test_parse_utc_iso_round_trip_with_now()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L57"}, {"id": "utils_test_time_test_parse_utc_iso_raises_on_garbage", "label": "test_parse_utc_iso_raises_on_garbage()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L63"}, {"id": "utils_test_time_test_parse_utc_iso_or_none_handles_none", "label": "test_parse_utc_iso_or_none_handles_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L68"}, {"id": "utils_test_time_test_parse_utc_iso_or_none_handles_empty", "label": "test_parse_utc_iso_or_none_handles_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L72"}, {"id": "utils_test_time_test_parse_utc_iso_or_none_handles_malformed", "label": "test_parse_utc_iso_or_none_handles_malformed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L76"}, {"id": "utils_test_time_test_parse_utc_iso_or_none_returns_datetime_for_valid", "label": "test_parse_utc_iso_or_none_returns_datetime_for_valid()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L80"}, {"id": "utils_test_time_rationale_1", "label": "Tests for ``exlab_wizard.utils.time``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "utils_test_time_test_utc_now_iso_format", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "utils_test_time_test_dt_to_iso_naive_assumed_utc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "utils_test_time_test_dt_to_iso_utc_aware", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "utils_test_time_test_dt_to_iso_non_utc_zone_converts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "utils_test_time_test_parse_utc_iso_z_form", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "utils_test_time_test_parse_utc_iso_offset_form", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "utils_test_time_test_parse_utc_iso_naive_input_tagged_utc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "utils_test_time_test_parse_utc_iso_round_trip_with_now", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "utils_test_time_test_parse_utc_iso_raises_on_garbage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "utils_test_time_test_parse_utc_iso_or_none_handles_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L68", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "utils_test_time_test_parse_utc_iso_or_none_handles_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "utils_test_time_test_parse_utc_iso_or_none_handles_malformed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "target": "utils_test_time_test_parse_utc_iso_or_none_returns_datetime_for_valid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L80", "weight": 1.0}, {"source": "utils_test_time_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_utils_test_time_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_test_time_test_utc_now_iso_format", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L21"}, {"caller_nid": "utils_test_time_test_utc_now_iso_format", "callee": "match", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L22"}, {"caller_nid": "utils_test_time_test_dt_to_iso_naive_assumed_utc", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L26"}, {"caller_nid": "utils_test_time_test_dt_to_iso_naive_assumed_utc", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L27"}, {"caller_nid": "utils_test_time_test_dt_to_iso_utc_aware", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L31"}, {"caller_nid": "utils_test_time_test_dt_to_iso_utc_aware", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L32"}, {"caller_nid": "utils_test_time_test_dt_to_iso_non_utc_zone_converts", "callee": "timezone", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L36"}, {"caller_nid": "utils_test_time_test_dt_to_iso_non_utc_zone_converts", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L36"}, {"caller_nid": "utils_test_time_test_dt_to_iso_non_utc_zone_converts", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L37"}, {"caller_nid": "utils_test_time_test_dt_to_iso_non_utc_zone_converts", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L39"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_z_form", "callee": "parse_utc_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L43"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_z_form", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L44"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_offset_form", "callee": "parse_utc_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L48"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_offset_form", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L49"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_naive_input_tagged_utc", "callee": "parse_utc_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L53"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_naive_input_tagged_utc", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L54"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_round_trip_with_now", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L58"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_round_trip_with_now", "callee": "parse_utc_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L59"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_round_trip_with_now", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L60"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_raises_on_garbage", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L64"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_raises_on_garbage", "callee": "parse_utc_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L65"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_or_none_handles_none", "callee": "parse_utc_iso_or_none", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L69"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_or_none_handles_empty", "callee": "parse_utc_iso_or_none", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L73"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_or_none_handles_malformed", "callee": "parse_utc_iso_or_none", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L77"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_or_none_returns_datetime_for_valid", "callee": "parse_utc_iso_or_none", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L81"}, {"caller_nid": "utils_test_time_test_parse_utc_iso_or_none_returns_datetime_for_valid", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py", "source_location": "L82"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5c1639c0d7ff61b9bbaa3f0b856a61bf5f979cec7ddb74000565ed528d7a24f9.json b/graphify-out/cache/ast/5c1639c0d7ff61b9bbaa3f0b856a61bf5f979cec7ddb74000565ed528d7a24f9.json new file mode 100644 index 0000000..5d69e9f --- /dev/null +++ b/graphify-out/cache/ast/5c1639c0d7ff61b9bbaa3f0b856a61bf5f979cec7ddb74000565ed528d7a24f9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_validation_summary_py", "label": "validation_summary.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L1"}, {"id": "components_validation_summary_findingexcerpt", "label": "FindingExcerpt", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L23"}, {"id": "components_validation_summary_validationsummary", "label": "ValidationSummary", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L31"}, {"id": "components_validation_summary_header_line", "label": "header_line()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L43"}, {"id": "components_validation_summary_excerpt_line", "label": "excerpt_line()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L61"}, {"id": "components_validation_summary_overflow_line", "label": "overflow_line()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L67"}, {"id": "components_validation_summary_override_line", "label": "override_line()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L82"}, {"id": "components_validation_summary_validation_summary", "label": "validation_summary()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L93"}, {"id": "components_validation_summary_rationale_1", "label": "Validation summary block (Frontend Spec \u00a73.6.4, \u00a711.4.1). Renders the per-run v", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L1"}, {"id": "components_validation_summary_rationale_24", "label": "A single finding row used in the summary.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L24"}, {"id": "components_validation_summary_rationale_32", "label": "Inputs to the summary block.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L32"}, {"id": "components_validation_summary_rationale_44", "label": "Return ``(text, color_var)`` for the section header.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L44"}, {"id": "components_validation_summary_rationale_62", "label": "Compose one-line text for a finding excerpt (Frontend \u00a73.6.4).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L62"}, {"id": "components_validation_summary_rationale_68", "label": "Return the *\"+ N more in Problems\"* line, or ``None`` if not needed. Fronte", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L68"}, {"id": "components_validation_summary_rationale_83", "label": "Return the override summary line if an override is active.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L83"}, {"id": "components_validation_summary_rationale_94", "label": "Build the summary block.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L94"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_validation_summary_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_validation_summary_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_validation_summary_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_validation_summary_py", "target": "components_validation_summary_findingexcerpt", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_validation_summary_py", "target": "components_validation_summary_validationsummary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_validation_summary_py", "target": "components_validation_summary_header_line", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_validation_summary_py", "target": "components_validation_summary_excerpt_line", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L61", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_validation_summary_py", "target": "components_validation_summary_overflow_line", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_validation_summary_py", "target": "components_validation_summary_override_line", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L82", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_validation_summary_py", "target": "components_validation_summary_validation_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L93", "weight": 1.0}, {"source": "components_validation_summary_validation_summary", "target": "components_validation_summary_header_line", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L96", "weight": 1.0}, {"source": "components_validation_summary_validation_summary", "target": "components_validation_summary_excerpt_line", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L97", "weight": 1.0}, {"source": "components_validation_summary_validation_summary", "target": "components_validation_summary_overflow_line", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L98", "weight": 1.0}, {"source": "components_validation_summary_validation_summary", "target": "components_validation_summary_override_line", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L99", "weight": 1.0}, {"source": "components_validation_summary_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_validation_summary_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L1", "weight": 1.0}, {"source": "components_validation_summary_rationale_24", "target": "components_validation_summary_findingexcerpt", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L24", "weight": 1.0}, {"source": "components_validation_summary_rationale_32", "target": "components_validation_summary_validationsummary", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L32", "weight": 1.0}, {"source": "components_validation_summary_rationale_44", "target": "components_validation_summary_header_line", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L44", "weight": 1.0}, {"source": "components_validation_summary_rationale_62", "target": "components_validation_summary_excerpt_line", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L62", "weight": 1.0}, {"source": "components_validation_summary_rationale_68", "target": "components_validation_summary_overflow_line", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L68", "weight": 1.0}, {"source": "components_validation_summary_rationale_83", "target": "components_validation_summary_override_line", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L83", "weight": 1.0}, {"source": "components_validation_summary_rationale_94", "target": "components_validation_summary_validation_summary", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L94", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_validation_summary_overflow_line", "callee": "min", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L74"}, {"caller_nid": "components_validation_summary_overflow_line", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L74"}, {"caller_nid": "components_validation_summary_overflow_line", "callee": "max", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L76"}, {"caller_nid": "components_validation_summary_validation_summary", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L113"}, {"caller_nid": "components_validation_summary_validation_summary", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L113"}, {"caller_nid": "components_validation_summary_validation_summary", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L113"}, {"caller_nid": "components_validation_summary_validation_summary", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L116"}, {"caller_nid": "components_validation_summary_validation_summary", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L116"}, {"caller_nid": "components_validation_summary_validation_summary", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L123"}, {"caller_nid": "components_validation_summary_validation_summary", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L123"}, {"caller_nid": "components_validation_summary_validation_summary", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L129"}, {"caller_nid": "components_validation_summary_validation_summary", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L129"}, {"caller_nid": "components_validation_summary_validation_summary", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L136"}, {"caller_nid": "components_validation_summary_validation_summary", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py", "source_location": "L136"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5c17091f0b93e9e41737df9dae85a917cdbe0a41fe13f528e8e40add39fe19da.json b/graphify-out/cache/ast/5c17091f0b93e9e41737df9dae85a917cdbe0a41fe13f528e8e40add39fe19da.json new file mode 100644 index 0000000..2550a27 --- /dev/null +++ b/graphify-out/cache/ast/5c17091f0b93e9e41737df9dae85a917cdbe0a41fe13f528e8e40add39fe19da.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_test_tray_window_smoke_py", "label": "test_tray_window_smoke.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L1"}, {"id": "integration_test_tray_window_smoke_wait_for", "label": "_wait_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L24"}, {"id": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", "label": "test_root_serves_html_after_mount()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L40"}, {"id": "integration_test_tray_window_smoke_rationale_1", "label": "Integration smoke: pywebview-facing root path returns HTML, not JSON 404. This", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_window_smoke_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_window_smoke_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_window_smoke_py", "target": "httpx", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_window_smoke_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_window_smoke_py", "target": "exlab_wizard_tray_server_runner", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_window_smoke_py", "target": "integration_test_tray_window_smoke_wait_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_window_smoke_py", "target": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L40", "weight": 1.0}, {"source": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", "target": "integration_test_tray_window_smoke_wait_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L51", "weight": 1.0}, {"source": "integration_test_tray_window_smoke_rationale_1", "target": "users_alex_projects_exlabwizard_tests_integration_test_tray_window_smoke_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "integration_test_tray_window_smoke_wait_for", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L25"}, {"caller_nid": "integration_test_tray_window_smoke_wait_for", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L27"}, {"caller_nid": "integration_test_tray_window_smoke_wait_for", "callee": "Client", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L29"}, {"caller_nid": "integration_test_tray_window_smoke_wait_for", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L30"}, {"caller_nid": "integration_test_tray_window_smoke_wait_for", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L35"}, {"caller_nid": "integration_test_tray_window_smoke_wait_for", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L37"}, {"caller_nid": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", "callee": "_build_default_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L44"}, {"caller_nid": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", "callee": "skip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L46"}, {"caller_nid": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", "callee": "ServerRunner", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L48"}, {"caller_nid": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L49"}, {"caller_nid": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L58"}, {"caller_nid": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py", "source_location": "L63"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5ccae045d5260942c6a5279b46a312e1a65377adf66a4cbd151d06f4d005a21c.json b/graphify-out/cache/ast/5ccae045d5260942c6a5279b46a312e1a65377adf66a4cbd151d06f4d005a21c.json new file mode 100644 index 0000000..2ebe2e2 --- /dev/null +++ b/graphify-out/cache/ast/5ccae045d5260942c6a5279b46a312e1a65377adf66a4cbd151d06f4d005a21c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_quit_coordinator_py", "label": "quit_coordinator.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L1"}, {"id": "tray_quit_coordinator_quitcoordinator", "label": "QuitCoordinator", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L49"}, {"id": "tray_quit_coordinator_quitcoordinator_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L57"}, {"id": "tray_quit_coordinator_quitcoordinator_quit", "label": ".quit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L82"}, {"id": "tray_quit_coordinator_quitcoordinator_is_idle", "label": "._is_idle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L112"}, {"id": "tray_quit_coordinator_quitcoordinator_wait_for_idle", "label": "._wait_for_idle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L125"}, {"id": "tray_quit_coordinator_quitcoordinator_prompt_force_quit", "label": "._prompt_force_quit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L147"}, {"id": "tray_quit_coordinator_safe_count", "label": "_safe_count()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L163"}, {"id": "tray_quit_coordinator_rationale_1", "label": "Graceful tray shutdown coordinator. Backend Spec \u00a74.3.2. Steps documented in \u00a74", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L1"}, {"id": "tray_quit_coordinator_rationale_50", "label": "Drive the \u00a74.3.2 graceful-shutdown protocol. Construction-time dependencies", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L50"}, {"id": "tray_quit_coordinator_rationale_83", "label": "Run the graceful-shutdown protocol. ``sigterm=True`` reduces the wait w", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L83"}, {"id": "tray_quit_coordinator_rationale_113", "label": "Return True iff the \u00a74.3.2 predicate holds. ``SessionStore.active_sessi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L113"}, {"id": "tray_quit_coordinator_rationale_126", "label": "Poll :meth:`_is_idle` up to ``deadline_seconds`` seconds. Returns True", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L126"}, {"id": "tray_quit_coordinator_rationale_148", "label": "Invoke the operator-facing force-quit prompt. Returns ``True`` to indic", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L148"}, {"id": "tray_quit_coordinator_rationale_164", "label": "Return ``int(obj.)`` defensively. Falls through ``None``, missing att", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L164"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_quit_coordinator_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_quit_coordinator_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_quit_coordinator_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_quit_coordinator_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_quit_coordinator_py", "target": "exlab_wizard_tray_server_runner", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_quit_coordinator_py", "target": "exlab_wizard_tray_window_launcher", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_quit_coordinator_py", "target": "tray_quit_coordinator_quitcoordinator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L49", "weight": 1.0}, {"source": "tray_quit_coordinator_quitcoordinator", "target": "tray_quit_coordinator_quitcoordinator_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L57", "weight": 1.0}, {"source": "tray_quit_coordinator_quitcoordinator", "target": "tray_quit_coordinator_quitcoordinator_quit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L82", "weight": 1.0}, {"source": "tray_quit_coordinator_quitcoordinator", "target": "tray_quit_coordinator_quitcoordinator_is_idle", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L112", "weight": 1.0}, {"source": "tray_quit_coordinator_quitcoordinator", "target": "tray_quit_coordinator_quitcoordinator_wait_for_idle", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L125", "weight": 1.0}, {"source": "tray_quit_coordinator_quitcoordinator", "target": "tray_quit_coordinator_quitcoordinator_prompt_force_quit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L147", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_quit_coordinator_py", "target": "tray_quit_coordinator_safe_count", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L163", "weight": 1.0}, {"source": "tray_quit_coordinator_quitcoordinator_quit", "target": "tray_quit_coordinator_quitcoordinator_wait_for_idle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L92", "weight": 1.0}, {"source": "tray_quit_coordinator_quitcoordinator_quit", "target": "tray_quit_coordinator_quitcoordinator_prompt_force_quit", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L95", "weight": 1.0}, {"source": "tray_quit_coordinator_quitcoordinator_is_idle", "target": "tray_quit_coordinator_safe_count", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L121", "weight": 1.0}, {"source": "tray_quit_coordinator_quitcoordinator_wait_for_idle", "target": "tray_quit_coordinator_quitcoordinator_is_idle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L135", "weight": 1.0}, {"source": "tray_quit_coordinator_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_quit_coordinator_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_quit_coordinator_rationale_50", "target": "tray_quit_coordinator_quitcoordinator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L50", "weight": 1.0}, {"source": "tray_quit_coordinator_rationale_83", "target": "tray_quit_coordinator_quitcoordinator_quit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L83", "weight": 1.0}, {"source": "tray_quit_coordinator_rationale_113", "target": "tray_quit_coordinator_quitcoordinator_is_idle", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L113", "weight": 1.0}, {"source": "tray_quit_coordinator_rationale_126", "target": "tray_quit_coordinator_quitcoordinator_wait_for_idle", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L126", "weight": 1.0}, {"source": "tray_quit_coordinator_rationale_148", "target": "tray_quit_coordinator_quitcoordinator_prompt_force_quit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L148", "weight": 1.0}, {"source": "tray_quit_coordinator_rationale_164", "target": "tray_quit_coordinator_safe_count", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L164", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_quit_coordinator_quitcoordinator_init", "callee": "float", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L74"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_init", "callee": "float", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L75"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_init", "callee": "float", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L76"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_quit", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L90"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_quit", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L94"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_quit", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L96"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_quit", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L100"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_quit", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L104"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_quit", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L105"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_quit", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L106"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_wait_for_idle", "callee": "time", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L139"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_wait_for_idle", "callee": "get_event_loop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L139"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_wait_for_idle", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L141"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_wait_for_idle", "callee": "time", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L144"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_wait_for_idle", "callee": "get_event_loop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L144"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_prompt_force_quit", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L157"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_prompt_force_quit", "callee": "_on_force_quit_prompt", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L157"}, {"caller_nid": "tray_quit_coordinator_quitcoordinator_prompt_force_quit", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L159"}, {"caller_nid": "tray_quit_coordinator_safe_count", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L175"}, {"caller_nid": "tray_quit_coordinator_safe_count", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L176"}, {"caller_nid": "tray_quit_coordinator_safe_count", "callee": "raw", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L178"}, {"caller_nid": "tray_quit_coordinator_safe_count", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py", "source_location": "L182"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5d3fb0db90e6882756a28435f0744bbd4e58eb725222a4177e82e2a7e6a485fa.json b/graphify-out/cache/ast/5d3fb0db90e6882756a28435f0744bbd4e58eb725222a4177e82e2a7e6a485fa.json new file mode 100644 index 0000000..410a9fd --- /dev/null +++ b/graphify-out/cache/ast/5d3fb0db90e6882756a28435f0744bbd4e58eb725222a4177e82e2a7e6a485fa.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "label": "test_full_flow.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L1"}, {"id": "api_test_full_flow_ready_config", "label": "ready_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L51"}, {"id": "api_test_full_flow_app_with_real_controller", "label": "app_with_real_controller()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L80"}, {"id": "api_test_full_flow_client", "label": "_client()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L110"}, {"id": "api_test_full_flow_test_full_project_creation_flow", "label": "test_full_project_creation_flow()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L116"}, {"id": "api_test_full_flow_test_health_returns_ready_when_setup_complete", "label": "test_health_returns_ready_when_setup_complete()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L160"}, {"id": "api_test_full_flow_test_health_warns_when_lims_unreachable", "label": "test_health_warns_when_lims_unreachable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L170"}, {"id": "api_test_full_flow_test_setup_status_each_incomplete_state", "label": "test_setup_status_each_incomplete_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L180"}, {"id": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", "label": "test_create_session_blocked_when_setup_incomplete()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L214"}, {"id": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "label": "test_lims_unreachable_does_not_block_creation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L238"}, {"id": "api_test_full_flow_test_problems_refresh_returns_audit_count", "label": "test_problems_refresh_returns_audit_count()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L290"}, {"id": "api_test_full_flow_test_get_problems_returns_findings_and_filters", "label": "test_get_problems_returns_findings_and_filters()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L313"}, {"id": "api_test_full_flow_test_put_config_validates_and_updates_state", "label": "test_put_config_validates_and_updates_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L333"}, {"id": "api_test_full_flow_test_get_tree_in_ready_state", "label": "test_get_tree_in_ready_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L353"}, {"id": "api_test_full_flow_test_websocket_streams_session_events_sync", "label": "test_websocket_streams_session_events_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L366"}, {"id": "api_test_full_flow_build_minimal_controller", "label": "_build_minimal_controller()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L438"}, {"id": "api_test_full_flow_rationale_1", "label": "Full-flow integration test for the FastAPI surface. Drives one project-creation", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L1"}, {"id": "api_test_full_flow_rationale_81", "label": "Build a FastAPI app with the real controller + validator wired.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L81"}, {"id": "api_test_full_flow_rationale_117", "label": "End-to-end: POST /sessions -> session reaches DONE -> creation.json on disk.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L117"}, {"id": "api_test_full_flow_rationale_181", "label": "Each non-soft INCOMPLETE_* state surfaces the right next_action.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L181"}, {"id": "api_test_full_flow_rationale_215", "label": "POST /sessions returns 503 + setup_incomplete in non-soft INCOMPLETE_* states.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L215"}, {"id": "api_test_full_flow_rationale_239", "label": "The soft block does not gate POST /sessions per \u00a74.9.4.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L239"}, {"id": "api_test_full_flow_rationale_291", "label": "``POST /problems/refresh`` invokes Validator.audit and returns the count.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L291"}, {"id": "api_test_full_flow_rationale_367", "label": "End-to-end WebSocket stream of phase frames. Uses the synchronous TestClien", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L367"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "httpx", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "exlab_wizard_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "exlab_wizard_cache_creation_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "exlab_wizard_cache_equipment", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "exlab_wizard_controller", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "exlab_wizard_template_copier_driver", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "exlab_wizard_validator_engine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_ready_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_app_with_real_controller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L80", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_client", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L110", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_test_full_project_creation_flow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L116", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_test_health_returns_ready_when_setup_complete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L160", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_test_health_warns_when_lims_unreachable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L170", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_test_setup_status_each_incomplete_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L180", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L214", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L238", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_test_problems_refresh_returns_audit_count", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L290", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_test_get_problems_returns_findings_and_filters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L313", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_test_put_config_validates_and_updates_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L333", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_test_get_tree_in_ready_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L353", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_test_websocket_streams_session_events_sync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L366", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "target": "api_test_full_flow_build_minimal_controller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L438", "weight": 1.0}, {"source": "api_test_full_flow_test_full_project_creation_flow", "target": "api_test_full_flow_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L135", "weight": 1.0}, {"source": "api_test_full_flow_test_health_returns_ready_when_setup_complete", "target": "api_test_full_flow_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L162", "weight": 1.0}, {"source": "api_test_full_flow_test_health_warns_when_lims_unreachable", "target": "api_test_full_flow_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L173", "weight": 1.0}, {"source": "api_test_full_flow_test_setup_status_each_incomplete_state", "target": "api_test_full_flow_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L204", "weight": 1.0}, {"source": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", "target": "api_test_full_flow_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L229", "weight": 1.0}, {"source": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "target": "api_test_full_flow_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L279", "weight": 1.0}, {"source": "api_test_full_flow_test_problems_refresh_returns_audit_count", "target": "api_test_full_flow_build_minimal_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L294", "weight": 1.0}, {"source": "api_test_full_flow_test_problems_refresh_returns_audit_count", "target": "api_test_full_flow_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L304", "weight": 1.0}, {"source": "api_test_full_flow_test_get_problems_returns_findings_and_filters", "target": "api_test_full_flow_build_minimal_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L318", "weight": 1.0}, {"source": "api_test_full_flow_test_get_problems_returns_findings_and_filters", "target": "api_test_full_flow_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L327", "weight": 1.0}, {"source": "api_test_full_flow_test_put_config_validates_and_updates_state", "target": "api_test_full_flow_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L344", "weight": 1.0}, {"source": "api_test_full_flow_test_get_tree_in_ready_state", "target": "api_test_full_flow_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L356", "weight": 1.0}, {"source": "api_test_full_flow_rationale_1", "target": "users_alex_projects_exlabwizard_tests_integration_api_test_full_flow_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L1", "weight": 1.0}, {"source": "api_test_full_flow_rationale_81", "target": "api_test_full_flow_app_with_real_controller", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L81", "weight": 1.0}, {"source": "api_test_full_flow_rationale_117", "target": "api_test_full_flow_test_full_project_creation_flow", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L117", "weight": 1.0}, {"source": "api_test_full_flow_rationale_181", "target": "api_test_full_flow_test_setup_status_each_incomplete_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L181", "weight": 1.0}, {"source": "api_test_full_flow_rationale_215", "target": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L215", "weight": 1.0}, {"source": "api_test_full_flow_rationale_239", "target": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L239", "weight": 1.0}, {"source": "api_test_full_flow_rationale_291", "target": "api_test_full_flow_test_problems_refresh_returns_audit_count", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L291", "weight": 1.0}, {"source": "api_test_full_flow_rationale_367", "target": "api_test_full_flow_test_websocket_streams_session_events_sync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L367", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_test_full_flow_ready_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L52"}, {"caller_nid": "api_test_full_flow_ready_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L53"}, {"caller_nid": "api_test_full_flow_ready_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L54"}, {"caller_nid": "api_test_full_flow_ready_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L55"}, {"caller_nid": "api_test_full_flow_ready_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L56"}, {"caller_nid": "api_test_full_flow_ready_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L59"}, {"caller_nid": "api_test_full_flow_ready_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L62"}, {"caller_nid": "api_test_full_flow_ready_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L64"}, {"caller_nid": "api_test_full_flow_ready_config", "callee": "OperatorsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L72"}, {"caller_nid": "api_test_full_flow_ready_config", "callee": "READMEConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L73"}, {"caller_nid": "api_test_full_flow_ready_config", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L74"}, {"caller_nid": "api_test_full_flow_ready_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L75"}, {"caller_nid": "api_test_full_flow_ready_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L75"}, {"caller_nid": "api_test_full_flow_app_with_real_controller", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L82"}, {"caller_nid": "api_test_full_flow_app_with_real_controller", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L83"}, {"caller_nid": "api_test_full_flow_app_with_real_controller", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L84"}, {"caller_nid": "api_test_full_flow_app_with_real_controller", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L85"}, {"caller_nid": "api_test_full_flow_app_with_real_controller", "callee": "from_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L86"}, {"caller_nid": "api_test_full_flow_app_with_real_controller", "callee": "CreationController", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L87"}, {"caller_nid": "api_test_full_flow_app_with_real_controller", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L90"}, {"caller_nid": "api_test_full_flow_app_with_real_controller", "callee": "NoOpReadmeGenerator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L94"}, {"caller_nid": "api_test_full_flow_app_with_real_controller", "callee": "NoOpNASSync", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L95"}, {"caller_nid": "api_test_full_flow_app_with_real_controller", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L96"}, {"caller_nid": "api_test_full_flow_app_with_real_controller", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L98"}, {"caller_nid": "api_test_full_flow_app_with_real_controller", "callee": "AuditChannel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L104"}, {"caller_nid": "api_test_full_flow_app_with_real_controller", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L106"}, {"caller_nid": "api_test_full_flow_client", "callee": "ASGITransport", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L111"}, {"caller_nid": "api_test_full_flow_client", "callee": "AsyncClient", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L112"}, {"caller_nid": "api_test_full_flow_test_full_project_creation_flow", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L122"}, {"caller_nid": "api_test_full_flow_test_full_project_creation_flow", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L136"}, {"caller_nid": "api_test_full_flow_test_full_project_creation_flow", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L138"}, {"caller_nid": "api_test_full_flow_test_full_project_creation_flow", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L141"}, {"caller_nid": "api_test_full_flow_test_full_project_creation_flow", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L145"}, {"caller_nid": "api_test_full_flow_test_full_project_creation_flow", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L147"}, {"caller_nid": "api_test_full_flow_test_full_project_creation_flow", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L153"}, {"caller_nid": "api_test_full_flow_test_full_project_creation_flow", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L154"}, {"caller_nid": "api_test_full_flow_test_full_project_creation_flow", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L154"}, {"caller_nid": "api_test_full_flow_test_health_returns_ready_when_setup_complete", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L163"}, {"caller_nid": "api_test_full_flow_test_health_returns_ready_when_setup_complete", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L165"}, {"caller_nid": "api_test_full_flow_test_health_warns_when_lims_unreachable", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L171"}, {"caller_nid": "api_test_full_flow_test_health_warns_when_lims_unreachable", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L172"}, {"caller_nid": "api_test_full_flow_test_health_warns_when_lims_unreachable", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L174"}, {"caller_nid": "api_test_full_flow_test_health_warns_when_lims_unreachable", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L174"}, {"caller_nid": "api_test_full_flow_test_setup_status_each_incomplete_state", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L184"}, {"caller_nid": "api_test_full_flow_test_setup_status_each_incomplete_state", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L186"}, {"caller_nid": "api_test_full_flow_test_setup_status_each_incomplete_state", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L187"}, {"caller_nid": "api_test_full_flow_test_setup_status_each_incomplete_state", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L193"}, {"caller_nid": "api_test_full_flow_test_setup_status_each_incomplete_state", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L194"}, {"caller_nid": "api_test_full_flow_test_setup_status_each_incomplete_state", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L195"}, {"caller_nid": "api_test_full_flow_test_setup_status_each_incomplete_state", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L202"}, {"caller_nid": "api_test_full_flow_test_setup_status_each_incomplete_state", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L203"}, {"caller_nid": "api_test_full_flow_test_setup_status_each_incomplete_state", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L205"}, {"caller_nid": "api_test_full_flow_test_setup_status_each_incomplete_state", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L207"}, {"caller_nid": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L216"}, {"caller_nid": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L216"}, {"caller_nid": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L217"}, {"caller_nid": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L230"}, {"caller_nid": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L232"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L240"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L241"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "from_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L242"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "CreationController", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L243"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L246"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "NoOpReadmeGenerator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L250"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "NoOpNASSync", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L251"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L252"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L254"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L262"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L266"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L280"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L283"}, {"caller_nid": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L284"}, {"caller_nid": "api_test_full_flow_test_problems_refresh_returns_audit_count", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L292"}, {"caller_nid": "api_test_full_flow_test_problems_refresh_returns_audit_count", "callee": "from_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L293"}, {"caller_nid": "api_test_full_flow_test_problems_refresh_returns_audit_count", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L295"}, {"caller_nid": "api_test_full_flow_test_problems_refresh_returns_audit_count", "callee": "AuditChannel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L301"}, {"caller_nid": "api_test_full_flow_test_problems_refresh_returns_audit_count", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L303"}, {"caller_nid": "api_test_full_flow_test_problems_refresh_returns_audit_count", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L305"}, {"caller_nid": "api_test_full_flow_test_problems_refresh_returns_audit_count", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L307"}, {"caller_nid": "api_test_full_flow_test_problems_refresh_returns_audit_count", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L309"}, {"caller_nid": "api_test_full_flow_test_get_problems_returns_findings_and_filters", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L316"}, {"caller_nid": "api_test_full_flow_test_get_problems_returns_findings_and_filters", "callee": "from_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L317"}, {"caller_nid": "api_test_full_flow_test_get_problems_returns_findings_and_filters", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L319"}, {"caller_nid": "api_test_full_flow_test_get_problems_returns_findings_and_filters", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L326"}, {"caller_nid": "api_test_full_flow_test_get_problems_returns_findings_and_filters", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L328"}, {"caller_nid": "api_test_full_flow_test_put_config_validates_and_updates_state", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L334"}, {"caller_nid": "api_test_full_flow_test_put_config_validates_and_updates_state", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L334"}, {"caller_nid": "api_test_full_flow_test_put_config_validates_and_updates_state", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L335"}, {"caller_nid": "api_test_full_flow_test_put_config_validates_and_updates_state", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L336"}, {"caller_nid": "api_test_full_flow_test_put_config_validates_and_updates_state", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L337"}, {"caller_nid": "api_test_full_flow_test_put_config_validates_and_updates_state", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L338"}, {"caller_nid": "api_test_full_flow_test_put_config_validates_and_updates_state", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L339"}, {"caller_nid": "api_test_full_flow_test_put_config_validates_and_updates_state", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L340"}, {"caller_nid": "api_test_full_flow_test_put_config_validates_and_updates_state", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L342"}, {"caller_nid": "api_test_full_flow_test_put_config_validates_and_updates_state", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L342"}, {"caller_nid": "api_test_full_flow_test_put_config_validates_and_updates_state", "callee": "put", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L345"}, {"caller_nid": "api_test_full_flow_test_put_config_validates_and_updates_state", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L345"}, {"caller_nid": "api_test_full_flow_test_put_config_validates_and_updates_state", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L347"}, {"caller_nid": "api_test_full_flow_test_get_tree_in_ready_state", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L354"}, {"caller_nid": "api_test_full_flow_test_get_tree_in_ready_state", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L355"}, {"caller_nid": "api_test_full_flow_test_get_tree_in_ready_state", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L357"}, {"caller_nid": "api_test_full_flow_test_get_tree_in_ready_state", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L359"}, {"caller_nid": "api_test_full_flow_test_get_tree_in_ready_state", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L362"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L376"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L377"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "from_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L378"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "CreationController", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L379"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L382"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "NoOpReadmeGenerator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L386"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "NoOpNASSync", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L387"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L388"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L390"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L397"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L401"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L414"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L415"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L417"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "websocket_connect", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L421"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L422"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "receive_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L424"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L427"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L427"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L428"}, {"caller_nid": "api_test_full_flow_test_websocket_streams_session_events_sync", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L430"}, {"caller_nid": "api_test_full_flow_build_minimal_controller", "callee": "CreationController", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L439"}, {"caller_nid": "api_test_full_flow_build_minimal_controller", "callee": "from_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L441"}, {"caller_nid": "api_test_full_flow_build_minimal_controller", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L442"}, {"caller_nid": "api_test_full_flow_build_minimal_controller", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L445"}, {"caller_nid": "api_test_full_flow_build_minimal_controller", "callee": "NoOpReadmeGenerator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L446"}, {"caller_nid": "api_test_full_flow_build_minimal_controller", "callee": "NoOpNASSync", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L447"}, {"caller_nid": "api_test_full_flow_build_minimal_controller", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py", "source_location": "L448"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5d430831309bc1021f4aa35d22d1e56edf1f822467af9492e34cc277de4f227d.json b/graphify-out/cache/ast/5d430831309bc1021f4aa35d22d1e56edf1f822467af9492e34cc277de4f227d.json new file mode 100644 index 0000000..757c525 --- /dev/null +++ b/graphify-out/cache/ast/5d430831309bc1021f4aa35d22d1e56edf1f822467af9492e34cc277de4f227d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_remaining_work_tasks_md", "label": "REMAINING_WORK_TASKS.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L1"}, {"id": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", "label": "ExLab-Wizard \u2014 Remaining Work: Tracked Tasks", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L1"}, {"id": "docs_remaining_work_tasks_how_to_use_this_tracker", "label": "How to use this tracker", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L7"}, {"id": "docs_remaining_work_tasks_phase_1_release_blocking_correctness", "label": "Phase 1 \u2014 Release-blocking correctness", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L18"}, {"id": "docs_remaining_work_tasks_x_t1_inject_the_real_readmegenerator_reconcile_readmecontext_return_type", "label": "- [x] T1 \u2014 Inject the real `ReadmeGenerator` (+ reconcile `ReadmeContext` / return type)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L20"}, {"id": "docs_remaining_work_tasks_phase_2_session_control_epic_build_in_order_they_compound", "label": "Phase 2 \u2014 Session-control epic (build in order; they compound)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L47"}, {"id": "docs_remaining_work_tasks_x_t2_event_subscription_consumer_in_the_creation_flow_shared_foundation", "label": "- [x] T2 \u2014 Event-subscription consumer in the creation flow (shared foundation)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L49"}, {"id": "docs_remaining_work_tasks_x_t3_render_the_operations_modal_toolbar_footer_hooks", "label": "- [x] T3 \u2014 Render the Operations modal + toolbar/footer hooks", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L72"}, {"id": "docs_remaining_work_tasks_x_t4_wire_resume_cancel_9_4_confirm_9_6_disable_rule", "label": "- [x] T4 \u2014 Wire Resume / Cancel (+ \u00a79.4 confirm, \u00a79.6 disable rule)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L95"}, {"id": "docs_remaining_work_tasks_x_t5_plugin_input_required_escalation_dialog_new_component", "label": "- [x] T5 \u2014 Plugin `INPUT_REQUIRED` escalation dialog (new component)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L112"}, {"id": "docs_remaining_work_tasks_phase_3_visibility_usability", "label": "Phase 3 \u2014 Visibility & usability", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L136"}, {"id": "docs_remaining_work_tasks_x_t6_live_problems_audit_stream_real_counts", "label": "- [x] T6 \u2014 Live Problems/audit stream + real counts", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L138"}, {"id": "docs_remaining_work_tasks_x_t7_operators_allowlist_chip_editor", "label": "- [x] T7 \u2014 Operators allowlist chip editor", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L161"}, {"id": "docs_remaining_work_tasks_x_t8_start_at_login_checkbox_wiring", "label": "- [x] T8 \u2014 \"Start at login\" checkbox wiring", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L177"}, {"id": "docs_remaining_work_tasks_x_t9_quit_exlab_wizard_now_button_deps_quit_hook", "label": "- [x] T9 \u2014 \"Quit ExLab-Wizard now\" button (+ `deps` quit hook)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L192"}, {"id": "docs_remaining_work_tasks_x_t10_content_scan_extensions_chip_editor_reset_to_defaults", "label": "- [x] T10 \u2014 `content_scan_extensions` chip editor + reset-to-defaults", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L206"}, {"id": "docs_remaining_work_tasks_x_t11_application_section_status_labels_parity_7_13", "label": "- [x] T11 \u2014 Application-section status labels parity (\u00a77.13)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L219"}, {"id": "docs_remaining_work_tasks_phase_4_cleanups_anytime", "label": "Phase 4 \u2014 Cleanups (anytime)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L233"}, {"id": "docs_remaining_work_tasks_x_t12_resolve_the_offline_catalogue_version_policy_todo", "label": "- [x] T12 \u2014 Resolve the offline-catalogue version-policy TODO", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L235"}, {"id": "docs_remaining_work_tasks_x_t13_delete_the_stale_plugin_registry_comment", "label": "- [x] T13 \u2014 Delete the stale plugin-registry comment", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L248"}, {"id": "docs_remaining_work_tasks_shared_foundations_build_once_reused_across_tasks", "label": "Shared foundations (build once, reused across tasks)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L263"}, {"id": "docs_remaining_work_tasks_progress", "label": "Progress", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L269"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_remaining_work_tasks_md", "target": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L1", "weight": 1.0}, {"source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", "target": "docs_remaining_work_tasks_how_to_use_this_tracker", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L7", "weight": 1.0}, {"source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", "target": "docs_remaining_work_tasks_phase_1_release_blocking_correctness", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L18", "weight": 1.0}, {"source": "docs_remaining_work_tasks_phase_1_release_blocking_correctness", "target": "docs_remaining_work_tasks_x_t1_inject_the_real_readmegenerator_reconcile_readmecontext_return_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L20", "weight": 1.0}, {"source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", "target": "docs_remaining_work_tasks_phase_2_session_control_epic_build_in_order_they_compound", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L47", "weight": 1.0}, {"source": "docs_remaining_work_tasks_phase_2_session_control_epic_build_in_order_they_compound", "target": "docs_remaining_work_tasks_x_t2_event_subscription_consumer_in_the_creation_flow_shared_foundation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L49", "weight": 1.0}, {"source": "docs_remaining_work_tasks_phase_2_session_control_epic_build_in_order_they_compound", "target": "docs_remaining_work_tasks_x_t3_render_the_operations_modal_toolbar_footer_hooks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L72", "weight": 1.0}, {"source": "docs_remaining_work_tasks_phase_2_session_control_epic_build_in_order_they_compound", "target": "docs_remaining_work_tasks_x_t4_wire_resume_cancel_9_4_confirm_9_6_disable_rule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L95", "weight": 1.0}, {"source": "docs_remaining_work_tasks_phase_2_session_control_epic_build_in_order_they_compound", "target": "docs_remaining_work_tasks_x_t5_plugin_input_required_escalation_dialog_new_component", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L112", "weight": 1.0}, {"source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", "target": "docs_remaining_work_tasks_phase_3_visibility_usability", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L136", "weight": 1.0}, {"source": "docs_remaining_work_tasks_phase_3_visibility_usability", "target": "docs_remaining_work_tasks_x_t6_live_problems_audit_stream_real_counts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L138", "weight": 1.0}, {"source": "docs_remaining_work_tasks_phase_3_visibility_usability", "target": "docs_remaining_work_tasks_x_t7_operators_allowlist_chip_editor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L161", "weight": 1.0}, {"source": "docs_remaining_work_tasks_phase_3_visibility_usability", "target": "docs_remaining_work_tasks_x_t8_start_at_login_checkbox_wiring", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L177", "weight": 1.0}, {"source": "docs_remaining_work_tasks_phase_3_visibility_usability", "target": "docs_remaining_work_tasks_x_t9_quit_exlab_wizard_now_button_deps_quit_hook", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L192", "weight": 1.0}, {"source": "docs_remaining_work_tasks_phase_3_visibility_usability", "target": "docs_remaining_work_tasks_x_t10_content_scan_extensions_chip_editor_reset_to_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L206", "weight": 1.0}, {"source": "docs_remaining_work_tasks_phase_3_visibility_usability", "target": "docs_remaining_work_tasks_x_t11_application_section_status_labels_parity_7_13", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L219", "weight": 1.0}, {"source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", "target": "docs_remaining_work_tasks_phase_4_cleanups_anytime", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L233", "weight": 1.0}, {"source": "docs_remaining_work_tasks_phase_4_cleanups_anytime", "target": "docs_remaining_work_tasks_x_t12_resolve_the_offline_catalogue_version_policy_todo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L235", "weight": 1.0}, {"source": "docs_remaining_work_tasks_phase_4_cleanups_anytime", "target": "docs_remaining_work_tasks_x_t13_delete_the_stale_plugin_registry_comment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L248", "weight": 1.0}, {"source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", "target": "docs_remaining_work_tasks_shared_foundations_build_once_reused_across_tasks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L263", "weight": 1.0}, {"source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", "target": "docs_remaining_work_tasks_progress", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md", "source_location": "L269", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/5da15664d9fc6efea6a438779880e2034b908e0deacd40f9e6161ab69a057d10.json b/graphify-out/cache/ast/5da15664d9fc6efea6a438779880e2034b908e0deacd40f9e6161ab69a057d10.json new file mode 100644 index 0000000..853438a --- /dev/null +++ b/graphify-out/cache/ast/5da15664d9fc6efea6a438779880e2034b908e0deacd40f9e6161ab69a057d10.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "label": "test_events.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L1"}, {"id": "api_test_events_test_phase_event_round_trip", "label": "test_phase_event_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L24"}, {"id": "api_test_events_test_progress_event_includes_kind", "label": "test_progress_event_includes_kind()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L34"}, {"id": "api_test_events_test_input_required_event_carries_fields", "label": "test_input_required_event_carries_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L41"}, {"id": "api_test_events_test_warning_event_serializes", "label": "test_warning_event_serializes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L52"}, {"id": "api_test_events_test_done_event_carries_result", "label": "test_done_event_carries_result()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L62"}, {"id": "api_test_events_test_failed_event_carries_error", "label": "test_failed_event_carries_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L69"}, {"id": "api_test_events_test_snapshot_event_lists_findings", "label": "test_snapshot_event_lists_findings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L76"}, {"id": "api_test_events_test_delta_event_serializes_three_lists", "label": "test_delta_event_serializes_three_lists()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L85"}, {"id": "api_test_events_test_event_from_dict_round_trips_each_kind", "label": "test_event_from_dict_round_trips_each_kind()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L92"}, {"id": "api_test_events_test_event_from_dict_rejects_unknown_kind", "label": "test_event_from_dict_rejects_unknown_kind()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L111"}, {"id": "api_test_events_test_event_from_dict_rejects_missing_kind", "label": "test_event_from_dict_rejects_missing_kind()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L116"}, {"id": "api_test_events_rationale_1", "label": "Unit tests for ``exlab_wizard.api.events``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "exlab_wizard_api_events", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "api_test_events_test_phase_event_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "api_test_events_test_progress_event_includes_kind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "api_test_events_test_input_required_event_carries_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "api_test_events_test_warning_event_serializes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "api_test_events_test_done_event_carries_result", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "api_test_events_test_failed_event_carries_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "api_test_events_test_snapshot_event_lists_findings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "api_test_events_test_delta_event_serializes_three_lists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L85", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "api_test_events_test_event_from_dict_round_trips_each_kind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L92", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "api_test_events_test_event_from_dict_rejects_unknown_kind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L111", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "target": "api_test_events_test_event_from_dict_rejects_missing_kind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L116", "weight": 1.0}, {"source": "api_test_events_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_api_test_events_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_test_events_test_phase_event_round_trip", "callee": "PhaseEvent", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L25"}, {"caller_nid": "api_test_events_test_phase_event_round_trip", "callee": "encode_event", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L26"}, {"caller_nid": "api_test_events_test_phase_event_round_trip", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L27"}, {"caller_nid": "api_test_events_test_progress_event_includes_kind", "callee": "ProgressEvent", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L35"}, {"caller_nid": "api_test_events_test_progress_event_includes_kind", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L36"}, {"caller_nid": "api_test_events_test_progress_event_includes_kind", "callee": "encode_event", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L36"}, {"caller_nid": "api_test_events_test_input_required_event_carries_fields", "callee": "InputRequiredEvent", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L42"}, {"caller_nid": "api_test_events_test_input_required_event_carries_fields", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L47"}, {"caller_nid": "api_test_events_test_input_required_event_carries_fields", "callee": "encode_event", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L47"}, {"caller_nid": "api_test_events_test_warning_event_serializes", "callee": "WarningEvent", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L53"}, {"caller_nid": "api_test_events_test_warning_event_serializes", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L54"}, {"caller_nid": "api_test_events_test_warning_event_serializes", "callee": "encode_event", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L54"}, {"caller_nid": "api_test_events_test_done_event_carries_result", "callee": "DoneEvent", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L63"}, {"caller_nid": "api_test_events_test_done_event_carries_result", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L64"}, {"caller_nid": "api_test_events_test_done_event_carries_result", "callee": "encode_event", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L64"}, {"caller_nid": "api_test_events_test_failed_event_carries_error", "callee": "FailedEvent", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L70"}, {"caller_nid": "api_test_events_test_failed_event_carries_error", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L71"}, {"caller_nid": "api_test_events_test_failed_event_carries_error", "callee": "encode_event", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L71"}, {"caller_nid": "api_test_events_test_snapshot_event_lists_findings", "callee": "SnapshotEvent", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L77"}, {"caller_nid": "api_test_events_test_snapshot_event_lists_findings", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L80"}, {"caller_nid": "api_test_events_test_snapshot_event_lists_findings", "callee": "encode_event", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L80"}, {"caller_nid": "api_test_events_test_snapshot_event_lists_findings", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L82"}, {"caller_nid": "api_test_events_test_delta_event_serializes_three_lists", "callee": "DeltaEvent", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L86"}, {"caller_nid": "api_test_events_test_delta_event_serializes_three_lists", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L87"}, {"caller_nid": "api_test_events_test_delta_event_serializes_three_lists", "callee": "encode_event", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L87"}, {"caller_nid": "api_test_events_test_event_from_dict_round_trips_each_kind", "callee": "event_from_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L104"}, {"caller_nid": "api_test_events_test_event_from_dict_round_trips_each_kind", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L107"}, {"caller_nid": "api_test_events_test_event_from_dict_round_trips_each_kind", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L107"}, {"caller_nid": "api_test_events_test_event_from_dict_rejects_unknown_kind", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L112"}, {"caller_nid": "api_test_events_test_event_from_dict_rejects_unknown_kind", "callee": "event_from_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L113"}, {"caller_nid": "api_test_events_test_event_from_dict_rejects_missing_kind", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L117"}, {"caller_nid": "api_test_events_test_event_from_dict_rejects_missing_kind", "callee": "event_from_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py", "source_location": "L118"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5da6d2f475760a896fa1c7464284f57c9acba2851dbbacb8676700d6a28732dc.json b/graphify-out/cache/ast/5da6d2f475760a896fa1c7464284f57c9acba2851dbbacb8676700d6a28732dc.json new file mode 100644 index 0000000..81ca021 --- /dev/null +++ b/graphify-out/cache/ast/5da6d2f475760a896fa1c7464284f57c9acba2851dbbacb8676700d6a28732dc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_page_objects_staging_page_py", "label": "staging_page.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L1"}, {"id": "page_objects_staging_page_stagingpage", "label": "StagingPage", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L11"}, {"id": "page_objects_staging_page_stagingpage_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L14"}, {"id": "page_objects_staging_page_dock", "label": "dock()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L18"}, {"id": "page_objects_staging_page_stagingpage_row", "label": ".row()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L22"}, {"id": "page_objects_staging_page_stagingpage_force_sync", "label": ".force_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L26"}, {"id": "page_objects_staging_page_stagingpage_clear", "label": ".clear()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L30"}, {"id": "page_objects_staging_page_stagingpage_view_log", "label": ".view_log()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L34"}, {"id": "page_objects_staging_page_clear_verified", "label": "clear_verified()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L39"}, {"id": "page_objects_staging_page_rationale_1", "label": "Page object for the orchestrator staging dock. Frontend Spec \u00a73.9.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L1"}, {"id": "page_objects_staging_page_rationale_12", "label": "Locators for the staging dock + per-row actions.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L12"}, {"id": "page_objects_staging_page_rationale_19", "label": "The staging dock container.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L19"}, {"id": "page_objects_staging_page_rationale_27", "label": "The Force-sync button on the Nth row.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L27"}, {"id": "page_objects_staging_page_rationale_31", "label": "The Clear button on the Nth row.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L31"}, {"id": "page_objects_staging_page_rationale_35", "label": "The View-log button on the Nth row.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L35"}, {"id": "page_objects_staging_page_rationale_40", "label": "The toolbar Clear-verified-runs button.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L40"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_staging_page_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_staging_page_py", "target": "playwright_sync_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_staging_page_py", "target": "page_objects_staging_page_stagingpage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L11", "weight": 1.0}, {"source": "page_objects_staging_page_stagingpage", "target": "page_objects_staging_page_stagingpage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_staging_page_py", "target": "page_objects_staging_page_dock", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L18", "weight": 1.0}, {"source": "page_objects_staging_page_stagingpage", "target": "page_objects_staging_page_stagingpage_row", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L22", "weight": 1.0}, {"source": "page_objects_staging_page_stagingpage", "target": "page_objects_staging_page_stagingpage_force_sync", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L26", "weight": 1.0}, {"source": "page_objects_staging_page_stagingpage", "target": "page_objects_staging_page_stagingpage_clear", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L30", "weight": 1.0}, {"source": "page_objects_staging_page_stagingpage", "target": "page_objects_staging_page_stagingpage_view_log", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_staging_page_py", "target": "page_objects_staging_page_clear_verified", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L39", "weight": 1.0}, {"source": "page_objects_staging_page_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_page_objects_staging_page_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L1", "weight": 1.0}, {"source": "page_objects_staging_page_rationale_12", "target": "page_objects_staging_page_stagingpage", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L12", "weight": 1.0}, {"source": "page_objects_staging_page_rationale_19", "target": "page_objects_staging_page_stagingpage_dock", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L19", "weight": 1.0}, {"source": "page_objects_staging_page_rationale_27", "target": "page_objects_staging_page_stagingpage_force_sync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L27", "weight": 1.0}, {"source": "page_objects_staging_page_rationale_31", "target": "page_objects_staging_page_stagingpage_clear", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L31", "weight": 1.0}, {"source": "page_objects_staging_page_rationale_35", "target": "page_objects_staging_page_stagingpage_view_log", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L35", "weight": 1.0}, {"source": "page_objects_staging_page_rationale_40", "target": "page_objects_staging_page_stagingpage_clear_verified", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L40", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_objects_staging_page_dock", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L20"}, {"caller_nid": "page_objects_staging_page_stagingpage_row", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L24"}, {"caller_nid": "page_objects_staging_page_stagingpage_force_sync", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L28"}, {"caller_nid": "page_objects_staging_page_stagingpage_clear", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L32"}, {"caller_nid": "page_objects_staging_page_stagingpage_view_log", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L36"}, {"caller_nid": "page_objects_staging_page_clear_verified", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py", "source_location": "L41"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5de80b0faf7c8244c4ee175d2d1bc0d2472311ce487c76b481a77f86d12aa9bb.json b/graphify-out/cache/ast/5de80b0faf7c8244c4ee175d2d1bc0d2472311ce487c76b481a77f86d12aa9bb.json new file mode 100644 index 0000000..ba36f75 --- /dev/null +++ b/graphify-out/cache/ast/5de80b0faf7c8244c4ee175d2d1bc0d2472311ce487c76b481a77f86d12aa9bb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_cache_py", "label": "cache.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L1"}, {"id": "lims_cache_limscache", "label": "LIMSCache", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L102"}, {"id": "lims_cache_limscache_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L110"}, {"id": "lims_cache_limscache_close", "label": ".close()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L123"}, {"id": "lims_cache_limscache_upsert_many", "label": ".upsert_many()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L129"}, {"id": "lims_cache_limscache_list_projects", "label": ".list_projects()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L156"}, {"id": "lims_cache_limscache_get_project", "label": ".get_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L171"}, {"id": "lims_cache_limscache_is_fresh", "label": ".is_fresh()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L180"}, {"id": "lims_cache_limscache_require_conn", "label": "._require_conn()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L202"}, {"id": "lims_cache_row_to_project", "label": "_row_to_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L209"}, {"id": "lims_cache_rationale_1", "label": "aiosqlite-backed cache for LIMS project rows. Backend Spec \u00a77.2.4. The cache li", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L1"}, {"id": "lims_cache_rationale_103", "label": "SQLite TTL cache for LIMS project rows. Backend Spec \u00a77.2.4. The cache is a", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L103"}, {"id": "lims_cache_rationale_116", "label": "Create the table and index if absent. Idempotent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L116"}, {"id": "lims_cache_rationale_124", "label": "Close the underlying aiosqlite connection.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L124"}, {"id": "lims_cache_rationale_130", "label": "Insert or update every row. ``last_refreshed`` is taken from each ``LIMS", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L130"}, {"id": "lims_cache_rationale_159", "label": "Return every cached project for ``endpoint``, optionally filtered by ``s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L159"}, {"id": "lims_cache_rationale_172", "label": "Return one project by uid or short_id, or None if absent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L172"}, {"id": "lims_cache_rationale_181", "label": "True iff the most recent ``last_refreshed`` is within ``ttl_hours`` of t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L181"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_cache_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_cache_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_cache_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_cache_py", "target": "aiosqlite", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_cache_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_cache_py", "target": "exlab_wizard_lims_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_cache_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_cache_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_cache_py", "target": "lims_cache_limscache", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L102", "weight": 1.0}, {"source": "lims_cache_limscache", "target": "lims_cache_limscache_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L110", "weight": 1.0}, {"source": "lims_cache_limscache", "target": "lims_cache_limscache_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L115", "weight": 1.0}, {"source": "lims_cache_limscache", "target": "lims_cache_limscache_close", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L123", "weight": 1.0}, {"source": "lims_cache_limscache", "target": "lims_cache_limscache_upsert_many", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L129", "weight": 1.0}, {"source": "lims_cache_limscache", "target": "lims_cache_limscache_list_projects", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L156", "weight": 1.0}, {"source": "lims_cache_limscache", "target": "lims_cache_limscache_get_project", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L171", "weight": 1.0}, {"source": "lims_cache_limscache", "target": "lims_cache_limscache_is_fresh", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L180", "weight": 1.0}, {"source": "lims_cache_limscache", "target": "lims_cache_limscache_require_conn", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L202", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_cache_py", "target": "lims_cache_row_to_project", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L209", "weight": 1.0}, {"source": "lims_cache_limscache_upsert_many", "target": "lims_cache_limscache_require_conn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L137", "weight": 1.0}, {"source": "lims_cache_limscache_list_projects", "target": "lims_cache_limscache_require_conn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L162", "weight": 1.0}, {"source": "lims_cache_limscache_list_projects", "target": "lims_cache_row_to_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L165", "weight": 1.0}, {"source": "lims_cache_limscache_get_project", "target": "lims_cache_limscache_require_conn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L173", "weight": 1.0}, {"source": "lims_cache_limscache_get_project", "target": "lims_cache_row_to_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L178", "weight": 1.0}, {"source": "lims_cache_limscache_is_fresh", "target": "lims_cache_limscache_require_conn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L185", "weight": 1.0}, {"source": "lims_cache_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_cache_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L1", "weight": 1.0}, {"source": "lims_cache_rationale_103", "target": "lims_cache_limscache", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L103", "weight": 1.0}, {"source": "lims_cache_rationale_116", "target": "lims_cache_limscache_init", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L116", "weight": 1.0}, {"source": "lims_cache_rationale_124", "target": "lims_cache_limscache_close", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L124", "weight": 1.0}, {"source": "lims_cache_rationale_130", "target": "lims_cache_limscache_upsert_many", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L130", "weight": 1.0}, {"source": "lims_cache_rationale_159", "target": "lims_cache_limscache_list_projects", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L159", "weight": 1.0}, {"source": "lims_cache_rationale_172", "target": "lims_cache_limscache_get_project", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L172", "weight": 1.0}, {"source": "lims_cache_rationale_181", "target": "lims_cache_limscache_is_fresh", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L181", "weight": 1.0}], "raw_calls": [{"caller_nid": "lims_cache_limscache_init", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L111"}, {"caller_nid": "lims_cache_limscache_init", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L117"}, {"caller_nid": "lims_cache_limscache_init", "callee": "connect", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L118"}, {"caller_nid": "lims_cache_limscache_init", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L118"}, {"caller_nid": "lims_cache_limscache_init", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L119"}, {"caller_nid": "lims_cache_limscache_init", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L120"}, {"caller_nid": "lims_cache_limscache_init", "callee": "commit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L121"}, {"caller_nid": "lims_cache_limscache_upsert_many", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L148"}, {"caller_nid": "lims_cache_limscache_upsert_many", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L148"}, {"caller_nid": "lims_cache_limscache_upsert_many", "callee": "executemany", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L153"}, {"caller_nid": "lims_cache_limscache_upsert_many", "callee": "commit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L154"}, {"caller_nid": "lims_cache_limscache_list_projects", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L163"}, {"caller_nid": "lims_cache_limscache_list_projects", "callee": "fetchall", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L164"}, {"caller_nid": "lims_cache_limscache_list_projects", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L167"}, {"caller_nid": "lims_cache_limscache_get_project", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L174"}, {"caller_nid": "lims_cache_limscache_get_project", "callee": "fetchone", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L177"}, {"caller_nid": "lims_cache_limscache_is_fresh", "callee": "execute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L186"}, {"caller_nid": "lims_cache_limscache_is_fresh", "callee": "fetchone", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L187"}, {"caller_nid": "lims_cache_limscache_is_fresh", "callee": "parse_utc_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L191"}, {"caller_nid": "lims_cache_limscache_is_fresh", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L193"}, {"caller_nid": "lims_cache_limscache_is_fresh", "callee": "utc_now", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L195"}, {"caller_nid": "lims_cache_limscache_is_fresh", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L195"}, {"caller_nid": "lims_cache_limscache_require_conn", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L205"}, {"caller_nid": "lims_cache_row_to_project", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L221"}, {"caller_nid": "lims_cache_row_to_project", "callee": "LIMSProject", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py", "source_location": "L222"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5df0448dae72edfc46ce9f02dc3ef234893b69f03b369eff51cdf15842186e9c.json b/graphify-out/cache/ast/5df0448dae72edfc46ce9f02dc3ef234893b69f03b369eff51cdf15842186e9c.json new file mode 100644 index 0000000..f002fff --- /dev/null +++ b/graphify-out/cache/ast/5df0448dae72edfc46ce9f02dc3ef234893b69f03b369eff51cdf15842186e9c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "label": "sessions.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L1"}, {"id": "routers_sessions_projectsessionbody", "label": "_ProjectSessionBody", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L63"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "routers_sessions_runsessionbody", "label": "_RunSessionBody", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L83"}, {"id": "routers_sessions_sessionhandleresponse", "label": "SessionHandleResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L105"}, {"id": "routers_sessions_resumebody", "label": "_ResumeBody", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L119"}, {"id": "routers_sessions_cancelbody", "label": "_CancelBody", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L127"}, {"id": "routers_sessions_build_sessions_router", "label": "build_sessions_router()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L140"}, {"id": "routers_sessions_build_project_request", "label": "_build_project_request()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L284"}, {"id": "routers_sessions_build_run_request", "label": "_build_run_request()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L297"}, {"id": "routers_sessions_handle_to_response", "label": "_handle_to_response()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L316"}, {"id": "routers_sessions_stream_session_events", "label": "_stream_session_events()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L336"}, {"id": "routers_sessions_rationale_1", "label": "``/sessions`` router. Backend Spec \u00a74.6.1, \u00a74.6.2. Endpoints: * ``POST /sessio", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L1"}, {"id": "routers_sessions_rationale_64", "label": "Body for a project-creation session. The ``kind`` discriminator selects thi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L64"}, {"id": "routers_sessions_rationale_84", "label": "Body for a run / test-run creation session.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L84"}, {"id": "routers_sessions_rationale_106", "label": "Response shape for the create / status endpoints.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L106"}, {"id": "routers_sessions_rationale_120", "label": "``POST /sessions/{id}/resume`` body.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L120"}, {"id": "routers_sessions_rationale_128", "label": "``POST /sessions/{id}/cancel`` body.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L128"}, {"id": "routers_sessions_rationale_141", "label": "Construct the ``/sessions`` router. Routes are gated by the setup-state dep", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L141"}, {"id": "routers_sessions_rationale_317", "label": "Build the response model from a controller :class:`SessionHandle` and the live s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L317"}, {"id": "routers_sessions_rationale_341", "label": "Pump events from the controller's queue into the WebSocket. Each frame from", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L341"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "exlab_wizard_api_dependencies", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "exlab_wizard_api_events", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "exlab_wizard_api_setup", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "exlab_wizard_controller", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "routers_sessions_projectsessionbody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L63", "weight": 1.0}, {"source": "routers_sessions_projectsessionbody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "routers_sessions_runsessionbody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L83", "weight": 1.0}, {"source": "routers_sessions_runsessionbody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "routers_sessions_sessionhandleresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L105", "weight": 1.0}, {"source": "routers_sessions_sessionhandleresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L105", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "routers_sessions_resumebody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L119", "weight": 1.0}, {"source": "routers_sessions_resumebody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L119", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "routers_sessions_cancelbody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L127", "weight": 1.0}, {"source": "routers_sessions_cancelbody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L127", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "routers_sessions_build_sessions_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L140", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "routers_sessions_build_project_request", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L284", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "routers_sessions_build_run_request", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L297", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "routers_sessions_handle_to_response", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L316", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "target": "routers_sessions_stream_session_events", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L336", "weight": 1.0}, {"source": "routers_sessions_handle_to_response", "target": "routers_sessions_sessionhandleresponse", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L325", "weight": 1.0}, {"source": "routers_sessions_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_sessions_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L1", "weight": 1.0}, {"source": "routers_sessions_rationale_64", "target": "routers_sessions_projectsessionbody", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L64", "weight": 1.0}, {"source": "routers_sessions_rationale_84", "target": "routers_sessions_runsessionbody", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L84", "weight": 1.0}, {"source": "routers_sessions_rationale_106", "target": "routers_sessions_sessionhandleresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L106", "weight": 1.0}, {"source": "routers_sessions_rationale_120", "target": "routers_sessions_resumebody", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L120", "weight": 1.0}, {"source": "routers_sessions_rationale_128", "target": "routers_sessions_cancelbody", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L128", "weight": 1.0}, {"source": "routers_sessions_rationale_141", "target": "routers_sessions_build_sessions_router", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L141", "weight": 1.0}, {"source": "routers_sessions_rationale_317", "target": "routers_sessions_handle_to_response", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L317", "weight": 1.0}, {"source": "routers_sessions_rationale_341", "target": "routers_sessions_stream_session_events", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L341", "weight": 1.0}], "raw_calls": [{"caller_nid": "routers_sessions_build_sessions_router", "callee": "APIRouter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L147"}, {"caller_nid": "routers_sessions_build_sessions_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L149"}, {"caller_nid": "routers_sessions_build_sessions_router", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L153"}, {"caller_nid": "routers_sessions_build_sessions_router", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L167"}, {"caller_nid": "routers_sessions_build_sessions_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L191"}, {"caller_nid": "routers_sessions_build_sessions_router", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L194"}, {"caller_nid": "routers_sessions_build_sessions_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L222"}, {"caller_nid": "routers_sessions_build_sessions_router", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L225"}, {"caller_nid": "routers_sessions_build_sessions_router", "callee": "websocket", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L254"}, {"caller_nid": "routers_sessions_build_project_request", "callee": "ProjectCreateRequest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L285"}, {"caller_nid": "routers_sessions_build_project_request", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L287"}, {"caller_nid": "routers_sessions_build_project_request", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L288"}, {"caller_nid": "routers_sessions_build_project_request", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L289"}, {"caller_nid": "routers_sessions_build_project_request", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L293"}, {"caller_nid": "routers_sessions_build_run_request", "callee": "parse_utc_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L300"}, {"caller_nid": "routers_sessions_build_run_request", "callee": "RunCreateRequest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L301"}, {"caller_nid": "routers_sessions_build_run_request", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L304"}, {"caller_nid": "routers_sessions_build_run_request", "callee": "RunKind", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L305"}, {"caller_nid": "routers_sessions_build_run_request", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L306"}, {"caller_nid": "routers_sessions_build_run_request", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L310"}, {"caller_nid": "routers_sessions_build_run_request", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L312"}, {"caller_nid": "routers_sessions_handle_to_response", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L319"}, {"caller_nid": "routers_sessions_handle_to_response", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L319"}, {"caller_nid": "routers_sessions_stream_session_events", "callee": "subscribe", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L347"}, {"caller_nid": "routers_sessions_stream_session_events", "callee": "event_from_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L349"}, {"caller_nid": "routers_sessions_stream_session_events", "callee": "send_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L355"}, {"caller_nid": "routers_sessions_stream_session_events", "callee": "encode_event", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L355"}, {"caller_nid": "routers_sessions_stream_session_events", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L356"}, {"caller_nid": "routers_sessions_stream_session_events", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L359"}, {"caller_nid": "routers_sessions_stream_session_events", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py", "source_location": "L360"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5e7a9d021360ba2e6febb9bb71bc3da6d4b511f28e04f81ba23db96ad9b115a4.json b/graphify-out/cache/ast/5e7a9d021360ba2e6febb9bb71bc3da6d4b511f28e04f81ba23db96ad9b115a4.json new file mode 100644 index 0000000..9416e09 --- /dev/null +++ b/graphify-out/cache/ast/5e7a9d021360ba2e6febb9bb71bc3da6d4b511f28e04f81ba23db96ad9b115a4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_constants_test_schema_versions_py", "label": "test_schema_versions.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L1"}, {"id": "constants_test_schema_versions_test_creation_json_version_is_pinned", "label": "test_creation_json_version_is_pinned()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L13"}, {"id": "constants_test_schema_versions_test_readme_fields_json_version_is_pinned", "label": "test_readme_fields_json_version_is_pinned()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L18"}, {"id": "constants_test_schema_versions_test_sync_state_json_version_is_pinned", "label": "test_sync_state_json_version_is_pinned()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L23"}, {"id": "constants_test_schema_versions_test_equipment_json_version_is_pinned", "label": "test_equipment_json_version_is_pinned()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L28"}, {"id": "constants_test_schema_versions_test_test_runs_json_version_is_pinned", "label": "test_test_runs_json_version_is_pinned()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L33"}, {"id": "constants_test_schema_versions_test_offline_catalogue_version_is_pinned", "label": "test_offline_catalogue_version_is_pinned()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L38"}, {"id": "constants_test_schema_versions_test_readme_front_matter_schema_version_is_pinned", "label": "test_readme_front_matter_schema_version_is_pinned()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L43"}, {"id": "constants_test_schema_versions_test_all_schema_versions_are_strings", "label": "test_all_schema_versions_are_strings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L48"}, {"id": "constants_test_schema_versions_test_schema_versions_re_exported_from_package", "label": "test_schema_versions_re_exported_from_package()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L63"}, {"id": "constants_test_schema_versions_rationale_1", "label": "Verify the literal values pinned in ``schema_versions``. Each schema-version co", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_schema_versions_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_schema_versions_py", "target": "constants_test_schema_versions_test_creation_json_version_is_pinned", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_schema_versions_py", "target": "constants_test_schema_versions_test_readme_fields_json_version_is_pinned", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_schema_versions_py", "target": "constants_test_schema_versions_test_sync_state_json_version_is_pinned", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_schema_versions_py", "target": "constants_test_schema_versions_test_equipment_json_version_is_pinned", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_schema_versions_py", "target": "constants_test_schema_versions_test_test_runs_json_version_is_pinned", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_schema_versions_py", "target": "constants_test_schema_versions_test_offline_catalogue_version_is_pinned", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_schema_versions_py", "target": "constants_test_schema_versions_test_readme_front_matter_schema_version_is_pinned", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_schema_versions_py", "target": "constants_test_schema_versions_test_all_schema_versions_are_strings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_schema_versions_py", "target": "constants_test_schema_versions_test_schema_versions_re_exported_from_package", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L63", "weight": 1.0}, {"source": "constants_test_schema_versions_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_constants_test_schema_versions_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "constants_test_schema_versions_test_all_schema_versions_are_strings", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L60"}, {"caller_nid": "constants_test_schema_versions_test_all_schema_versions_are_strings", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py", "source_location": "L60"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5ee1ecdbd7b9ef222385487441b3d1141541e90b33c0dc62e554731c7a2d619c.json b/graphify-out/cache/ast/5ee1ecdbd7b9ef222385487441b3d1141541e90b33c0dc62e554731c7a2d619c.json new file mode 100644 index 0000000..76a3ba4 --- /dev/null +++ b/graphify-out/cache/ast/5ee1ecdbd7b9ef222385487441b3d1141541e90b33c0dc62e554731c7a2d619c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "label": "test_settings_page.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L1"}, {"id": "ui_test_settings_page_test_build_draft_from_none_yields_defaults", "label": "test_build_draft_from_none_yields_defaults()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L27"}, {"id": "ui_test_settings_page_test_build_draft_copies_existing_config", "label": "test_build_draft_copies_existing_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L36"}, {"id": "ui_test_settings_page_test_draft_edits_do_not_leak_into_source", "label": "test_draft_edits_do_not_leak_into_source()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L49"}, {"id": "ui_test_settings_page_test_finalize_coerces_widget_floats_back_to_int", "label": "test_finalize_coerces_widget_floats_back_to_int()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L60"}, {"id": "ui_test_settings_page_test_finalize_round_trips_edited_scalar_fields", "label": "test_finalize_round_trips_edited_scalar_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L73"}, {"id": "ui_test_settings_page_test_finalize_allows_blank_staging_root", "label": "test_finalize_allows_blank_staging_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L90"}, {"id": "ui_test_settings_page_test_finalize_raises_on_invalid_edit", "label": "test_finalize_raises_on_invalid_edit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L104"}, {"id": "ui_test_settings_page_test_lims_credential_initial_state_not_set_when_keyring_empty", "label": "test_lims_credential_initial_state_not_set_when_keyring_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L113"}, {"id": "ui_test_settings_page_test_lims_credential_initial_state_set_when_keyring_has_password", "label": "test_lims_credential_initial_state_set_when_keyring_has_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L118"}, {"id": "ui_test_settings_page_rationale_1", "label": "Tests for the settings-page config binding helpers. ``render_settings_page`` it", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L1"}, {"id": "ui_test_settings_page_rationale_91", "label": "staging_root is opt-in: a blank value finalizes cleanly (the field is option", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L91"}, {"id": "ui_test_settings_page_rationale_119", "label": "A password already in the OS keyring opens the row in *Set*.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L119"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "exlab_wizard_api_app", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "exlab_wizard_ui_components", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "exlab_wizard_ui_pages_settings", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "ui_test_settings_page_test_build_draft_from_none_yields_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "ui_test_settings_page_test_build_draft_copies_existing_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "ui_test_settings_page_test_draft_edits_do_not_leak_into_source", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "ui_test_settings_page_test_finalize_coerces_widget_floats_back_to_int", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "ui_test_settings_page_test_finalize_round_trips_edited_scalar_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L73", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "ui_test_settings_page_test_finalize_allows_blank_staging_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L90", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "ui_test_settings_page_test_finalize_raises_on_invalid_edit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L104", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "ui_test_settings_page_test_lims_credential_initial_state_not_set_when_keyring_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L113", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "target": "ui_test_settings_page_test_lims_credential_initial_state_set_when_keyring_has_password", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L118", "weight": 1.0}, {"source": "ui_test_settings_page_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_page_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_settings_page_rationale_91", "target": "ui_test_settings_page_test_finalize_allows_blank_staging_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L91", "weight": 1.0}, {"source": "ui_test_settings_page_rationale_119", "target": "ui_test_settings_page_test_lims_credential_initial_state_set_when_keyring_has_password", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L119", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_settings_page_test_build_draft_from_none_yields_defaults", "callee": "build_settings_draft", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L28"}, {"caller_nid": "ui_test_settings_page_test_build_draft_from_none_yields_defaults", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L29"}, {"caller_nid": "ui_test_settings_page_test_build_draft_copies_existing_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L37"}, {"caller_nid": "ui_test_settings_page_test_build_draft_copies_existing_config", "callee": "build_settings_draft", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L41"}, {"caller_nid": "ui_test_settings_page_test_draft_edits_do_not_leak_into_source", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L50"}, {"caller_nid": "ui_test_settings_page_test_draft_edits_do_not_leak_into_source", "callee": "build_settings_draft", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L51"}, {"caller_nid": "ui_test_settings_page_test_finalize_coerces_widget_floats_back_to_int", "callee": "build_settings_draft", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L61"}, {"caller_nid": "ui_test_settings_page_test_finalize_coerces_widget_floats_back_to_int", "callee": "finalize_settings_draft", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L66"}, {"caller_nid": "ui_test_settings_page_test_finalize_coerces_widget_floats_back_to_int", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L69"}, {"caller_nid": "ui_test_settings_page_test_finalize_round_trips_edited_scalar_fields", "callee": "build_settings_draft", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L74"}, {"caller_nid": "ui_test_settings_page_test_finalize_round_trips_edited_scalar_fields", "callee": "finalize_settings_draft", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L83"}, {"caller_nid": "ui_test_settings_page_test_finalize_allows_blank_staging_root", "callee": "build_settings_draft", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L94"}, {"caller_nid": "ui_test_settings_page_test_finalize_allows_blank_staging_root", "callee": "finalize_settings_draft", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L98"}, {"caller_nid": "ui_test_settings_page_test_finalize_raises_on_invalid_edit", "callee": "build_settings_draft", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L105"}, {"caller_nid": "ui_test_settings_page_test_finalize_raises_on_invalid_edit", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L109"}, {"caller_nid": "ui_test_settings_page_test_finalize_raises_on_invalid_edit", "callee": "finalize_settings_draft", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L110"}, {"caller_nid": "ui_test_settings_page_test_lims_credential_initial_state_not_set_when_keyring_empty", "callee": "lims_credential_initial_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L114"}, {"caller_nid": "ui_test_settings_page_test_lims_credential_initial_state_set_when_keyring_has_password", "callee": "lims_credential_initial_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py", "source_location": "L121"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5f3ec5b4202b38ffb33448be5ed5cdd425e759a80b7129b71c4393052f8c6f9a.json b/graphify-out/cache/ast/5f3ec5b4202b38ffb33448be5ed5cdd425e759a80b7129b71c4393052f8c6f9a.json new file mode 100644 index 0000000..ceafb74 --- /dev/null +++ b/graphify-out/cache/ast/5f3ec5b4202b38ffb33448be5ed5cdd425e759a80b7129b71c4393052f8c6f9a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "label": "conftest.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L1"}, {"id": "e2e_conftest_free_port", "label": "_free_port()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L46"}, {"id": "e2e_conftest_resolve_chromium_executable", "label": "_resolve_chromium_executable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L53"}, {"id": "e2e_conftest_server_url", "label": "server_url()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L90"}, {"id": "e2e_conftest_browser", "label": "browser()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L155"}, {"id": "e2e_conftest_page", "label": "page()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L181"}, {"id": "e2e_conftest_rationale_1", "label": "E2E test fixtures (Phase 16). Boots a real uvicorn process serving the e2e test", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L1"}, {"id": "e2e_conftest_rationale_47", "label": "Return a free TCP port on 127.0.0.1.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L47"}, {"id": "e2e_conftest_rationale_54", "label": "Return a chromium executable path or None. Search order: 1. ``EXLAB_E2", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L54"}, {"id": "e2e_conftest_rationale_91", "label": "Spawn a real uvicorn process serving the e2e test app and yield its URL. Th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L91"}, {"id": "e2e_conftest_rationale_156", "label": "Yield a chromium browser (headless).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L156"}, {"id": "e2e_conftest_rationale_182", "label": "Yield a fresh Playwright page for each test.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L182"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "socket", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "contextlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "httpx", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "playwright_sync_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "e2e_conftest_free_port", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "e2e_conftest_resolve_chromium_executable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "e2e_conftest_server_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L90", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "e2e_conftest_browser", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L155", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "target": "e2e_conftest_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L181", "weight": 1.0}, {"source": "e2e_conftest_server_url", "target": "e2e_conftest_free_port", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L100", "weight": 1.0}, {"source": "e2e_conftest_browser", "target": "e2e_conftest_resolve_chromium_executable", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L159", "weight": 1.0}, {"source": "e2e_conftest_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_conftest_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_conftest_rationale_47", "target": "e2e_conftest_free_port", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L47", "weight": 1.0}, {"source": "e2e_conftest_rationale_54", "target": "e2e_conftest_resolve_chromium_executable", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L54", "weight": 1.0}, {"source": "e2e_conftest_rationale_91", "target": "e2e_conftest_server_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L91", "weight": 1.0}, {"source": "e2e_conftest_rationale_156", "target": "e2e_conftest_browser", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L156", "weight": 1.0}, {"source": "e2e_conftest_rationale_182", "target": "e2e_conftest_page", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L182", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_conftest_free_port", "callee": "closing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L48"}, {"caller_nid": "e2e_conftest_free_port", "callee": "socket", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L48"}, {"caller_nid": "e2e_conftest_free_port", "callee": "bind", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L49"}, {"caller_nid": "e2e_conftest_free_port", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L50"}, {"caller_nid": "e2e_conftest_free_port", "callee": "getsockname", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L50"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L65"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L66"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L66"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L70"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L72"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L72"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L73"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L73"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L74"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "home", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L74"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L77"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L79"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "glob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L79"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L81"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L82"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L84"}, {"caller_nid": "e2e_conftest_resolve_chromium_executable", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L85"}, {"caller_nid": "e2e_conftest_server_url", "callee": "mktemp", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L99"}, {"caller_nid": "e2e_conftest_server_url", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L101"}, {"caller_nid": "e2e_conftest_server_url", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L101"}, {"caller_nid": "e2e_conftest_server_url", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L105"}, {"caller_nid": "e2e_conftest_server_url", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L106"}, {"caller_nid": "e2e_conftest_server_url", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L107"}, {"caller_nid": "e2e_conftest_server_url", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L107"}, {"caller_nid": "e2e_conftest_server_url", "callee": "Popen", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L109"}, {"caller_nid": "e2e_conftest_server_url", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L119"}, {"caller_nid": "e2e_conftest_server_url", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L127"}, {"caller_nid": "e2e_conftest_server_url", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L129"}, {"caller_nid": "e2e_conftest_server_url", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L135"}, {"caller_nid": "e2e_conftest_server_url", "callee": "terminate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L137"}, {"caller_nid": "e2e_conftest_server_url", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L139"}, {"caller_nid": "e2e_conftest_server_url", "callee": "kill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L141"}, {"caller_nid": "e2e_conftest_server_url", "callee": "skip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L142"}, {"caller_nid": "e2e_conftest_server_url", "callee": "terminate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L146"}, {"caller_nid": "e2e_conftest_server_url", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L148"}, {"caller_nid": "e2e_conftest_server_url", "callee": "kill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L150"}, {"caller_nid": "e2e_conftest_server_url", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L151"}, {"caller_nid": "e2e_conftest_browser", "callee": "skip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L158"}, {"caller_nid": "e2e_conftest_browser", "callee": "sync_playwright", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L161"}, {"caller_nid": "e2e_conftest_browser", "callee": "launch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L166"}, {"caller_nid": "e2e_conftest_browser", "callee": "skip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L168"}, {"caller_nid": "e2e_conftest_browser", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L175"}, {"caller_nid": "e2e_conftest_browser", "callee": "skip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L177"}, {"caller_nid": "e2e_conftest_page", "callee": "new_context", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L183"}, {"caller_nid": "e2e_conftest_page", "callee": "new_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L184"}, {"caller_nid": "e2e_conftest_page", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py", "source_location": "L188"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/5f8c2adee66e5c3958644913f391e73c03c014c8362332f7939753b3cf648a3b.json b/graphify-out/cache/ast/5f8c2adee66e5c3958644913f391e73c03c014c8362332f7939753b3cf648a3b.json new file mode 100644 index 0000000..cd9ff26 --- /dev/null +++ b/graphify-out/cache/ast/5f8c2adee66e5c3958644913f391e73c03c014c8362332f7939753b3cf648a3b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_state_machine_py", "label": "state_machine.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L1"}, {"id": "controller_state_machine_sessionstate", "label": "SessionState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L45"}, {"id": "strenum", "label": "StrEnum", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "controller_state_machine_phase", "label": "Phase", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L66"}, {"id": "controller_state_machine_state_to_phase", "label": "state_to_phase()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L102"}, {"id": "controller_state_machine_build_valid_transitions", "label": "_build_valid_transitions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L139"}, {"id": "controller_state_machine_assert_transition", "label": "assert_transition()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L159"}, {"id": "controller_state_machine_rationale_1", "label": "Creation-session state machine. Backend Spec \u00a74.7, \u00a74.7.1. Defines two enums an", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L1"}, {"id": "controller_state_machine_rationale_46", "label": "Internal creation-session state. Backend Spec \u00a74.7. Values mirror the \u00a74.7", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L46"}, {"id": "controller_state_machine_rationale_67", "label": "Externally-emitted ``phase`` event. Backend Spec \u00a74.6.2. Sent over the ``WS", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L67"}, {"id": "controller_state_machine_rationale_103", "label": "Return the :class:`Phase` event corresponding to ``state``. Backend Spec \u00a74", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L103"}, {"id": "controller_state_machine_rationale_140", "label": "Augment forward transitions with cancel/fail edges.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L140"}, {"id": "controller_state_machine_rationale_160", "label": "Raise :class:`ValueError` if ``current -> new_state`` is illegal. Defensive", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L160"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_state_machine_py", "target": "enum", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_state_machine_py", "target": "exlab_wizard_utils_state", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_state_machine_py", "target": "controller_state_machine_sessionstate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L45", "weight": 1.0}, {"source": "controller_state_machine_sessionstate", "target": "strenum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_state_machine_py", "target": "controller_state_machine_phase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L66", "weight": 1.0}, {"source": "controller_state_machine_phase", "target": "strenum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L66", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_state_machine_py", "target": "controller_state_machine_state_to_phase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L102", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_state_machine_py", "target": "controller_state_machine_build_valid_transitions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L139", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_state_machine_py", "target": "controller_state_machine_assert_transition", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L159", "weight": 1.0}, {"source": "controller_state_machine_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_state_machine_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L1", "weight": 1.0}, {"source": "controller_state_machine_rationale_46", "target": "controller_state_machine_sessionstate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L46", "weight": 1.0}, {"source": "controller_state_machine_rationale_67", "target": "controller_state_machine_phase", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L67", "weight": 1.0}, {"source": "controller_state_machine_rationale_103", "target": "controller_state_machine_state_to_phase", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L103", "weight": 1.0}, {"source": "controller_state_machine_rationale_140", "target": "controller_state_machine_build_valid_transitions", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L140", "weight": 1.0}, {"source": "controller_state_machine_rationale_160", "target": "controller_state_machine_assert_transition", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L160", "weight": 1.0}], "raw_calls": [{"caller_nid": "controller_state_machine_build_valid_transitions", "callee": "frozenset", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L142"}, {"caller_nid": "controller_state_machine_build_valid_transitions", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L143"}, {"caller_nid": "controller_state_machine_assert_transition", "callee": "assert_forward_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py", "source_location": "L168"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/60e2fc8536486d4ec36063a201330b024a7f13e4b5d93740459c3d4b075be60c.json b/graphify-out/cache/ast/60e2fc8536486d4ec36063a201330b024a7f13e4b5d93740459c3d4b075be60c.json new file mode 100644 index 0000000..78e620b --- /dev/null +++ b/graphify-out/cache/ast/60e2fc8536486d4ec36063a201330b024a7f13e4b5d93740459c3d4b075be60c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "label": "test_schema_major_mismatch.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L1"}, {"id": "integration_test_schema_major_mismatch_cachecase", "label": "_CacheCase", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L39"}, {"id": "integration_test_schema_major_mismatch_resolve_reader", "label": "_resolve_reader()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L156"}, {"id": "integration_test_schema_major_mismatch_test_cross_major_read_raises_schema_major_mismatch", "label": "test_cross_major_read_raises_schema_major_mismatch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L195"}, {"id": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", "label": "test_cross_major_read_records_higher_majors_too()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L218"}, {"id": "integration_test_schema_major_mismatch_rationale_1", "label": "Integration tests for the cross-major-read-fails contract from \u00a711.9.2. For eve", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L1"}, {"id": "integration_test_schema_major_mismatch_rationale_40", "label": "One cache-file flavour to exercise against the reader gate.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L40"}, {"id": "integration_test_schema_major_mismatch_rationale_157", "label": "Walk the candidate matrix and return the first reader method we find. Each", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L157"}, {"id": "integration_test_schema_major_mismatch_rationale_199", "label": "A v2.0 file MUST be refused by every v1.x reader (\u00a711.9.2 rule 3).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L199"}, {"id": "integration_test_schema_major_mismatch_rationale_222", "label": "A v3.7 file is also refused; the rule isn't tied to ``2.0`` specifically.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L222"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "target": "importlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "target": "integration_test_schema_major_mismatch_cachecase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "target": "integration_test_schema_major_mismatch_resolve_reader", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L156", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "target": "integration_test_schema_major_mismatch_test_cross_major_read_raises_schema_major_mismatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L195", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "target": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L218", "weight": 1.0}, {"source": "integration_test_schema_major_mismatch_test_cross_major_read_raises_schema_major_mismatch", "target": "integration_test_schema_major_mismatch_resolve_reader", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L200", "weight": 1.0}, {"source": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", "target": "integration_test_schema_major_mismatch_resolve_reader", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L223", "weight": 1.0}, {"source": "integration_test_schema_major_mismatch_rationale_1", "target": "users_alex_projects_exlabwizard_tests_integration_test_schema_major_mismatch_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L1", "weight": 1.0}, {"source": "integration_test_schema_major_mismatch_rationale_40", "target": "integration_test_schema_major_mismatch_cachecase", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L40", "weight": 1.0}, {"source": "integration_test_schema_major_mismatch_rationale_157", "target": "integration_test_schema_major_mismatch_resolve_reader", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L157", "weight": 1.0}, {"source": "integration_test_schema_major_mismatch_rationale_199", "target": "integration_test_schema_major_mismatch_test_cross_major_read_raises_schema_major_mismatch", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L199", "weight": 1.0}, {"source": "integration_test_schema_major_mismatch_rationale_222", "target": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L222", "weight": 1.0}], "raw_calls": [{"caller_nid": "integration_test_schema_major_mismatch_resolve_reader", "callee": "import_module", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L170"}, {"caller_nid": "integration_test_schema_major_mismatch_resolve_reader", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L175"}, {"caller_nid": "integration_test_schema_major_mismatch_resolve_reader", "callee": "cls", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L180"}, {"caller_nid": "integration_test_schema_major_mismatch_resolve_reader", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L185"}, {"caller_nid": "integration_test_schema_major_mismatch_resolve_reader", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L186"}, {"caller_nid": "integration_test_schema_major_mismatch_resolve_reader", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L189"}, {"caller_nid": "integration_test_schema_major_mismatch_resolve_reader", "callee": "skip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L191"}, {"caller_nid": "integration_test_schema_major_mismatch_test_cross_major_read_raises_schema_major_mismatch", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L202"}, {"caller_nid": "integration_test_schema_major_mismatch_test_cross_major_read_raises_schema_major_mismatch", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L202"}, {"caller_nid": "integration_test_schema_major_mismatch_test_cross_major_read_raises_schema_major_mismatch", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L204"}, {"caller_nid": "integration_test_schema_major_mismatch_test_cross_major_read_raises_schema_major_mismatch", "callee": "read", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L205"}, {"caller_nid": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L225"}, {"caller_nid": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L227"}, {"caller_nid": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L227"}, {"caller_nid": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L229"}, {"caller_nid": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", "callee": "read", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py", "source_location": "L230"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/619a92538621f7b7d8fa448b69bbf78284db44bd38812dbc548f223590946506.json b/graphify-out/cache/ast/619a92538621f7b7d8fa448b69bbf78284db44bd38812dbc548f223590946506.json new file mode 100644 index 0000000..1fc9998 --- /dev/null +++ b/graphify-out/cache/ast/619a92538621f7b7d8fa448b69bbf78284db44bd38812dbc548f223590946506.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_20_file_explorer_py", "label": "test_flow_20_file_explorer.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L1"}, {"id": "e2e_test_flow_20_file_explorer_goto", "label": "_goto()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L10"}, {"id": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", "label": "test_flow_20_file_explorer_renders_three_regions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L23"}, {"id": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "label": "test_flow_20_select_run_node_renders_metadata_pane()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L42"}, {"id": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", "label": "test_flow_20_breadcrumb_is_present_when_node_selected()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L53"}, {"id": "e2e_test_flow_20_file_explorer_rationale_1", "label": "E2E flow 20: file-explorer navigation (Redesign \u00a74). Tree selection drives the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_20_file_explorer_py", "target": "e2e_test_flow_20_file_explorer_goto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_20_file_explorer_py", "target": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_20_file_explorer_py", "target": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_20_file_explorer_py", "target": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L53", "weight": 1.0}, {"source": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", "target": "e2e_test_flow_20_file_explorer_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L24", "weight": 1.0}, {"source": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "target": "e2e_test_flow_20_file_explorer_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L43", "weight": 1.0}, {"source": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", "target": "e2e_test_flow_20_file_explorer_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L54", "weight": 1.0}, {"source": "e2e_test_flow_20_file_explorer_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_20_file_explorer_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_20_file_explorer_goto", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L12"}, {"caller_nid": "e2e_test_flow_20_file_explorer_goto", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L14"}, {"caller_nid": "e2e_test_flow_20_file_explorer_goto", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L15"}, {"caller_nid": "e2e_test_flow_20_file_explorer_goto", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L19"}, {"caller_nid": "e2e_test_flow_20_file_explorer_goto", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L20"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L34"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L34"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L36"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L36"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L38"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L38"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L39"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L39"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L44"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L44"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L45"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L45"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L46"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L47"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L47"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L48"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L48"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L49"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L49"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L50"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L50"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L55"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L56"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L57"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L58"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L59"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L59"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L60"}, {"caller_nid": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py", "source_location": "L62"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/634a36b718e798e9a6cd2a6ee738798a156b6be4c53f48d0d52fde67d625131e.json b/graphify-out/cache/ast/634a36b718e798e9a6cd2a6ee738798a156b6be4c53f48d0d52fde67d625131e.json new file mode 100644 index 0000000..bff287c --- /dev/null +++ b/graphify-out/cache/ast/634a36b718e798e9a6cd2a6ee738798a156b6be4c53f48d0d52fde67d625131e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_api_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/__init__.py", "source_location": "L1"}, {"id": "api_init_rationale_1", "label": "Unit tests for ``exlab_wizard.api``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/__init__.py", "source_location": "L1"}], "edges": [{"source": "api_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_api_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/635d0c61b43b09842520abe24225a10245134d3373267c69626c71fa1c8a6949.json b/graphify-out/cache/ast/635d0c61b43b09842520abe24225a10245134d3373267c69626c71fa1c8a6949.json new file mode 100644 index 0000000..4608e8e --- /dev/null +++ b/graphify-out/cache/ast/635d0c61b43b09842520abe24225a10245134d3373267c69626c71fa1c8a6949.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_03_directory_structure_convention_md", "label": "03_Directory_Structure_Convention.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/03_Directory_Structure_Convention.md", "source_location": "L1"}, {"id": "design_spec_sections_03_directory_structure_convention_3_directory_structure_convention", "label": "3. Directory Structure Convention", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/03_Directory_Structure_Convention.md", "source_location": "L1"}, {"id": "design_spec_sections_03_directory_structure_convention_codeblock_1", "label": "code:block1 (/)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/03_Directory_Structure_Convention.md", "source_location": "L7"}, {"id": "design_spec_sections_03_directory_structure_convention_codeblock_2", "label": "code:block2 (/data/lab/CONFOCAL_01/UCR-000-I-D_WHEELDON/Runs/Run_2026-04-)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/03_Directory_Structure_Convention.md", "source_location": "L20"}, {"id": "design_spec_sections_03_directory_structure_convention_3_1_equipment_id_format", "label": "3.1 Equipment-ID format", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/03_Directory_Structure_Convention.md", "source_location": "L28"}, {"id": "design_spec_sections_03_directory_structure_convention_3_2_project_folder_name", "label": "3.2 Project-folder name", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/03_Directory_Structure_Convention.md", "source_location": "L41"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_03_directory_structure_convention_md", "target": "design_spec_sections_03_directory_structure_convention_3_directory_structure_convention", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/03_Directory_Structure_Convention.md", "source_location": "L1", "weight": 1.0}, {"source": "design_spec_sections_03_directory_structure_convention_3_directory_structure_convention", "target": "design_spec_sections_03_directory_structure_convention_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/03_Directory_Structure_Convention.md", "source_location": "L7", "weight": 1.0}, {"source": "design_spec_sections_03_directory_structure_convention_3_directory_structure_convention", "target": "design_spec_sections_03_directory_structure_convention_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/03_Directory_Structure_Convention.md", "source_location": "L20", "weight": 1.0}, {"source": "design_spec_sections_03_directory_structure_convention_3_directory_structure_convention", "target": "design_spec_sections_03_directory_structure_convention_3_1_equipment_id_format", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/03_Directory_Structure_Convention.md", "source_location": "L28", "weight": 1.0}, {"source": "design_spec_sections_03_directory_structure_convention_3_directory_structure_convention", "target": "design_spec_sections_03_directory_structure_convention_3_2_project_folder_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/03_Directory_Structure_Convention.md", "source_location": "L41", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/643a25bc2d957e0633f4a63d8fa5dcf3d49bf14708815a3628f9a289636fb5e3.json b/graphify-out/cache/ast/643a25bc2d957e0633f4a63d8fa5dcf3d49bf14708815a3628f9a289636fb5e3.json new file mode 100644 index 0000000..9255fb7 --- /dev/null +++ b/graphify-out/cache/ast/643a25bc2d957e0633f4a63d8fa5dcf3d49bf14708815a3628f9a289636fb5e3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "label": "staging.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L1"}, {"id": "routers_staging_stagedrunrow", "label": "StagedRunRow", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L59"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "routers_staging_staginglistresponse", "label": "StagingListResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L75"}, {"id": "routers_staging_forcesyncresponse", "label": "ForceSyncResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L83"}, {"id": "routers_staging_clearresponse", "label": "ClearResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L93"}, {"id": "routers_staging_clearverifiedresponse", "label": "ClearVerifiedResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L103"}, {"id": "routers_staging_keeplocalrequest", "label": "KeepLocalRequest", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L111"}, {"id": "routers_staging_keeplocalresponse", "label": "KeepLocalResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L126"}, {"id": "routers_staging_build_staging_router", "label": "build_staging_router()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L141"}, {"id": "routers_staging_row_from_summary", "label": "_row_from_summary()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L315"}, {"id": "routers_staging_is_real_run", "label": "_is_real_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L329"}, {"id": "routers_staging_require_config", "label": "_require_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L352"}, {"id": "routers_staging_require_nas_sync", "label": "_require_nas_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L370"}, {"id": "routers_staging_rationale_1", "label": "``/staging`` router. Backend Spec \u00a713.7, \u00a713.8. Four endpoints back the orchest", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L1"}, {"id": "routers_staging_rationale_60", "label": "One staging-panel row. Backend Spec \u00a713.8.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L60"}, {"id": "routers_staging_rationale_76", "label": "``GET /staging`` response.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L76"}, {"id": "routers_staging_rationale_84", "label": "``POST /staging/{run_path}/force-sync`` response.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L84"}, {"id": "routers_staging_rationale_94", "label": "``POST /staging/{run_path}/clear`` response.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L94"}, {"id": "routers_staging_rationale_104", "label": "``POST /staging/clear-verified`` response (Redesign \u00a74.6).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L104"}, {"id": "routers_staging_rationale_112", "label": "``POST /staging/{run_path}/keep-local`` request body. Operator-free per-fil", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L112"}, {"id": "routers_staging_rationale_127", "label": "``POST /staging/{run_path}/keep-local`` response.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L127"}, {"id": "routers_staging_rationale_142", "label": "Construct the ``/staging`` router. Backend Spec \u00a713.7, \u00a713.8.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L142"}, {"id": "routers_staging_rationale_330", "label": "Return True when ``run_path`` is a real run inside an allowed root. A \"real", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L330"}, {"id": "routers_staging_rationale_353", "label": "Return the live :class:`Config` or raise 503 when no config is wired. Redes", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L353"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "exlab_wizard_api_dependencies", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "exlab_wizard_orchestrator_staging_clear", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "exlab_wizard_orchestrator_staging_query", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "routers_staging_stagedrunrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L59", "weight": 1.0}, {"source": "routers_staging_stagedrunrow", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "routers_staging_staginglistresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L75", "weight": 1.0}, {"source": "routers_staging_staginglistresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L75", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "routers_staging_forcesyncresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L83", "weight": 1.0}, {"source": "routers_staging_forcesyncresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "routers_staging_clearresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L93", "weight": 1.0}, {"source": "routers_staging_clearresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "routers_staging_clearverifiedresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L103", "weight": 1.0}, {"source": "routers_staging_clearverifiedresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L103", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "routers_staging_keeplocalrequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L111", "weight": 1.0}, {"source": "routers_staging_keeplocalrequest", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L111", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "routers_staging_keeplocalresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L126", "weight": 1.0}, {"source": "routers_staging_keeplocalresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L126", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "routers_staging_build_staging_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L141", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "routers_staging_row_from_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L315", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "routers_staging_is_real_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L329", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "routers_staging_require_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L352", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "target": "routers_staging_require_nas_sync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L370", "weight": 1.0}, {"source": "routers_staging_row_from_summary", "target": "routers_staging_stagedrunrow", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L316", "weight": 1.0}, {"source": "routers_staging_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_staging_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L1", "weight": 1.0}, {"source": "routers_staging_rationale_60", "target": "routers_staging_stagedrunrow", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L60", "weight": 1.0}, {"source": "routers_staging_rationale_76", "target": "routers_staging_staginglistresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L76", "weight": 1.0}, {"source": "routers_staging_rationale_84", "target": "routers_staging_forcesyncresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L84", "weight": 1.0}, {"source": "routers_staging_rationale_94", "target": "routers_staging_clearresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L94", "weight": 1.0}, {"source": "routers_staging_rationale_104", "target": "routers_staging_clearverifiedresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L104", "weight": 1.0}, {"source": "routers_staging_rationale_112", "target": "routers_staging_keeplocalrequest", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L112", "weight": 1.0}, {"source": "routers_staging_rationale_127", "target": "routers_staging_keeplocalresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L127", "weight": 1.0}, {"source": "routers_staging_rationale_142", "target": "routers_staging_build_staging_router", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L142", "weight": 1.0}, {"source": "routers_staging_rationale_330", "target": "routers_staging_is_real_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L330", "weight": 1.0}, {"source": "routers_staging_rationale_353", "target": "routers_staging_require_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L353", "weight": 1.0}], "raw_calls": [{"caller_nid": "routers_staging_build_staging_router", "callee": "APIRouter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L143"}, {"caller_nid": "routers_staging_build_staging_router", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L145"}, {"caller_nid": "routers_staging_build_staging_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L156"}, {"caller_nid": "routers_staging_build_staging_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L190"}, {"caller_nid": "routers_staging_build_staging_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L247"}, {"caller_nid": "routers_staging_build_staging_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L272"}, {"caller_nid": "routers_staging_is_real_run", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L344"}, {"caller_nid": "routers_staging_is_real_run", "callee": "_path_is_under_allowed_root", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L347"}, {"caller_nid": "routers_staging_is_real_run", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L349"}, {"caller_nid": "routers_staging_is_real_run", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L349"}, {"caller_nid": "routers_staging_require_config", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L358"}, {"caller_nid": "routers_staging_require_config", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L360"}, {"caller_nid": "routers_staging_require_nas_sync", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L371"}, {"caller_nid": "routers_staging_require_nas_sync", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py", "source_location": "L373"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/648369a893c9277ad872d3cc2e296e62bff3c28dc06cdc07d67f0ccbb938c88c.json b/graphify-out/cache/ast/648369a893c9277ad872d3cc2e296e62bff3c28dc06cdc07d67f0ccbb938c88c.json new file mode 100644 index 0000000..05fada5 --- /dev/null +++ b/graphify-out/cache/ast/648369a893c9277ad872d3cc2e296e62bff3c28dc06cdc07d67f0ccbb938c88c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_filenames_py", "label": "filenames.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/filenames.py", "source_location": "L1"}, {"id": "constants_filenames_rationale_1", "label": "Canonical filenames and on-disk path fragments used throughout the app. All val", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/filenames.py", "source_location": "L1"}], "edges": [{"source": "constants_filenames_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_filenames_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/filenames.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/65af476962ff94fa88e704c60c1eb28358b423c3a8cf499aca999e9e432afe18.json b/graphify-out/cache/ast/65af476962ff94fa88e704c60c1eb28358b423c3a8cf499aca999e9e432afe18.json new file mode 100644 index 0000000..6288dc9 --- /dev/null +++ b/graphify-out/cache/ast/65af476962ff94fa88e704c60c1eb28358b423c3a8cf499aca999e9e432afe18.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_constants_test_enum_literal_alignment_py", "label": "test_enum_literal_alignment.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enum_literal_alignment.py", "source_location": "L1"}, {"id": "constants_test_enum_literal_alignment_test_enum_values_match_expected_literal_set", "label": "test_enum_values_match_expected_literal_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enum_literal_alignment.py", "source_location": "L67"}, {"id": "constants_test_enum_literal_alignment_rationale_1", "label": "Assert that ``StrEnum`` value sets match their sibling ``Literal`` aliases. Per", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enum_literal_alignment.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enum_literal_alignment_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enum_literal_alignment.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enum_literal_alignment_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enum_literal_alignment.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enum_literal_alignment_py", "target": "constants_test_enum_literal_alignment_test_enum_values_match_expected_literal_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enum_literal_alignment.py", "source_location": "L67", "weight": 1.0}, {"source": "constants_test_enum_literal_alignment_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_constants_test_enum_literal_alignment_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enum_literal_alignment.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/65cae53b43927d94fb2bbcbbc19f346975fdcac55aa8601ea0ef53e75a11d95e.json b/graphify-out/cache/ast/65cae53b43927d94fb2bbcbbc19f346975fdcac55aa8601ea0ef53e75a11d95e.json new file mode 100644 index 0000000..05c1799 --- /dev/null +++ b/graphify-out/cache/ast/65cae53b43927d94fb2bbcbbc19f346975fdcac55aa8601ea0ef53e75a11d95e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_tree_py", "label": "tree.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L1"}, {"id": "components_tree_treefilters", "label": "TreeFilters", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L71"}, {"id": "components_tree_equipmentnode", "label": "EquipmentNode", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L81"}, {"id": "components_tree_projectnode", "label": "ProjectNode", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L90"}, {"id": "components_tree_runnode", "label": "RunNode", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L97"}, {"id": "components_tree_treenode", "label": "TreeNode", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L105"}, {"id": "components_tree_matches_search", "label": "_matches_search()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L117"}, {"id": "components_tree_filter_project", "label": "filter_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L125"}, {"id": "components_tree_filter_run", "label": "filter_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L139"}, {"id": "components_tree_build_nodes", "label": "build_nodes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L148"}, {"id": "components_tree_sync_icon_url", "label": "_sync_icon_url()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L235"}, {"id": "components_tree_to_nicegui_nodes", "label": "to_nicegui_nodes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L251"}, {"id": "components_tree_ctx_emit", "label": "_ctx_emit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L297"}, {"id": "components_tree_tree_header_slot", "label": "_tree_header_slot()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L312"}, {"id": "components_tree_build_tree", "label": "build_tree()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py", "source_location": "L363"}, {"id": "components_tree_rationale_1", "label": "Project / equipment tree (Frontend Spec \u00a73.5). Renders the ``//assets/``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L111"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "target": "exlab_wizard_ui", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "target": "ui_test_theme_test_root_css_contains_primary_palette", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "target": "ui_test_theme_test_root_css_contains_okabe_ito_palette", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "target": "ui_test_theme_test_root_css_contains_semantic_aliases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "target": "ui_test_theme_test_root_css_contains_typography_tokens", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "target": "ui_test_theme_test_root_css_contains_spacing_scale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "target": "ui_test_theme_test_root_css_contains_radius_tokens", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L65", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "target": "ui_test_theme_test_root_css_contains_shadow_tokens", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "target": "ui_test_theme_test_root_css_navy_tinted_shadows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "target": "ui_test_theme_test_root_css_motion_tokens", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L88", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "target": "ui_test_theme_test_root_css_starts_with_root_block", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L94", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "target": "ui_test_theme_test_root_css_includes_body_resets", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L101", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "target": "ui_test_theme_test_resolve_assets_dir_points_at_repo_assets_in_source_layout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L110", "weight": 1.0}, {"source": "ui_test_theme_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_theme_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_theme_rationale_82", "target": "ui_test_theme_test_root_css_navy_tinted_shadows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L82", "weight": 1.0}, {"source": "ui_test_theme_rationale_95", "target": "ui_test_theme_test_root_css_starts_with_root_block", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L95", "weight": 1.0}, {"source": "ui_test_theme_rationale_102", "target": "ui_test_theme_test_root_css_includes_body_resets", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L102", "weight": 1.0}, {"source": "ui_test_theme_rationale_111", "target": "ui_test_theme_test_resolve_assets_dir_points_at_repo_assets_in_source_layout", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L111", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_theme_test_root_css_contains_primary_palette", "callee": "build_root_css", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L14"}, {"caller_nid": "ui_test_theme_test_root_css_contains_okabe_ito_palette", "callee": "build_root_css", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L29"}, {"caller_nid": "ui_test_theme_test_root_css_contains_semantic_aliases", "callee": "build_root_css", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L44"}, {"caller_nid": "ui_test_theme_test_root_css_contains_typography_tokens", "callee": "build_root_css", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L52"}, {"caller_nid": "ui_test_theme_test_root_css_contains_spacing_scale", "callee": "build_root_css", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L60"}, {"caller_nid": "ui_test_theme_test_root_css_contains_radius_tokens", "callee": "build_root_css", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L66"}, {"caller_nid": "ui_test_theme_test_root_css_contains_shadow_tokens", "callee": "build_root_css", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L73"}, {"caller_nid": "ui_test_theme_test_root_css_navy_tinted_shadows", "callee": "build_root_css", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L84"}, {"caller_nid": "ui_test_theme_test_root_css_motion_tokens", "callee": "build_root_css", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L89"}, {"caller_nid": "ui_test_theme_test_root_css_starts_with_root_block", "callee": "build_root_css", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L97"}, {"caller_nid": "ui_test_theme_test_root_css_starts_with_root_block", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L98"}, {"caller_nid": "ui_test_theme_test_root_css_starts_with_root_block", "callee": "lstrip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L98"}, {"caller_nid": "ui_test_theme_test_root_css_includes_body_resets", "callee": "build_root_css", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L104"}, {"caller_nid": "ui_test_theme_test_resolve_assets_dir_points_at_repo_assets_in_source_layout", "callee": "resolve_assets_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L113"}, {"caller_nid": "ui_test_theme_test_resolve_assets_dir_points_at_repo_assets_in_source_layout", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L114"}, {"caller_nid": "ui_test_theme_test_resolve_assets_dir_points_at_repo_assets_in_source_layout", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L115"}, {"caller_nid": "ui_test_theme_test_resolve_assets_dir_points_at_repo_assets_in_source_layout", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py", "source_location": "L116"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/68e626e7cf472b8d654e4f9ed8ba114939d9d8c704e82260ad1d5e198efd3274.json b/graphify-out/cache/ast/68e626e7cf472b8d654e4f9ed8ba114939d9d8c704e82260ad1d5e198efd3274.json new file mode 100644 index 0000000..a28b5a7 --- /dev/null +++ b/graphify-out/cache/ast/68e626e7cf472b8d654e4f9ed8ba114939d9d8c704e82260ad1d5e198efd3274.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_lims_exlab_v1_readme_md", "label": "README.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/README.md", "source_location": "L1"}, {"id": "exlab_v1_readme_exlab_v1_lims_contract_snapshots", "label": "exlab v1 LIMS contract snapshots", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/README.md", "source_location": "L1"}, {"id": "exlab_v1_readme_files", "label": "Files", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/README.md", "source_location": "L9"}, {"id": "exlab_v1_readme_provenance", "label": "Provenance", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/README.md", "source_location": "L18"}, {"id": "exlab_v1_readme_regenerating", "label": "Regenerating", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/README.md", "source_location": "L26"}, {"id": "exlab_v1_readme_codeblock_1", "label": "code:bash (./scripts/regen_lims_snapshots.sh)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/README.md", "source_location": "L30"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_lims_exlab_v1_readme_md", "target": "exlab_v1_readme_exlab_v1_lims_contract_snapshots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/README.md", "source_location": "L1", "weight": 1.0}, {"source": "exlab_v1_readme_exlab_v1_lims_contract_snapshots", "target": "exlab_v1_readme_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/README.md", "source_location": "L9", "weight": 1.0}, {"source": "exlab_v1_readme_exlab_v1_lims_contract_snapshots", "target": "exlab_v1_readme_provenance", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/README.md", "source_location": "L18", "weight": 1.0}, {"source": "exlab_v1_readme_exlab_v1_lims_contract_snapshots", "target": "exlab_v1_readme_regenerating", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/README.md", "source_location": "L26", "weight": 1.0}, {"source": "exlab_v1_readme_regenerating", "target": "exlab_v1_readme_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/README.md", "source_location": "L30", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/69cebae448eef188123888a4c3ffbbaee39eaf1b3ef83d8fddc8644166cc5567.json b/graphify-out/cache/ast/69cebae448eef188123888a4c3ffbbaee39eaf1b3ef83d8fddc8644166cc5567.json new file mode 100644 index 0000000..e379391 --- /dev/null +++ b/graphify-out/cache/ast/69cebae448eef188123888a4c3ffbbaee39eaf1b3ef83d8fddc8644166cc5567.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_22_onboarding_redesign_py", "label": "test_flow_22_onboarding_redesign.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L1"}, {"id": "e2e_test_flow_22_onboarding_redesign_goto", "label": "_goto()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L19"}, {"id": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", "label": "test_flow_22_welcome_to_add_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L32"}, {"id": "e2e_test_flow_22_onboarding_redesign_test_flow_22_main_window_has_add_equipment_in_toolbar", "label": "test_flow_22_main_window_has_add_equipment_in_toolbar()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L47"}, {"id": "e2e_test_flow_22_onboarding_redesign_rationale_1", "label": "E2E flow 22: onboarding via the new Add-Equipment wizard (Redesign decision 2).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_22_onboarding_redesign_py", "target": "tests_e2e_page_objects_welcome_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_22_onboarding_redesign_py", "target": "tests_e2e_page_objects_wizard_equipment_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_22_onboarding_redesign_py", "target": "e2e_test_flow_22_onboarding_redesign_goto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_22_onboarding_redesign_py", "target": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_22_onboarding_redesign_py", "target": "e2e_test_flow_22_onboarding_redesign_test_flow_22_main_window_has_add_equipment_in_toolbar", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L47", "weight": 1.0}, {"source": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", "target": "e2e_test_flow_22_onboarding_redesign_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L35", "weight": 1.0}, {"source": "e2e_test_flow_22_onboarding_redesign_test_flow_22_main_window_has_add_equipment_in_toolbar", "target": "e2e_test_flow_22_onboarding_redesign_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L48", "weight": 1.0}, {"source": "e2e_test_flow_22_onboarding_redesign_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_22_onboarding_redesign_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_22_onboarding_redesign_goto", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L21"}, {"caller_nid": "e2e_test_flow_22_onboarding_redesign_goto", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L23"}, {"caller_nid": "e2e_test_flow_22_onboarding_redesign_goto", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L24"}, {"caller_nid": "e2e_test_flow_22_onboarding_redesign_goto", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L28"}, {"caller_nid": "e2e_test_flow_22_onboarding_redesign_goto", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L29"}, {"caller_nid": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", "callee": "WelcomePage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L33"}, {"caller_nid": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", "callee": "WizardEquipmentPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L34"}, {"caller_nid": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L36"}, {"caller_nid": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L37"}, {"caller_nid": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L38"}, {"caller_nid": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L43"}, {"caller_nid": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L44"}, {"caller_nid": "e2e_test_flow_22_onboarding_redesign_test_flow_22_main_window_has_add_equipment_in_toolbar", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L49"}, {"caller_nid": "e2e_test_flow_22_onboarding_redesign_test_flow_22_main_window_has_add_equipment_in_toolbar", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py", "source_location": "L49"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/6a42872fdd553122adf2b899b14f036aeeb3e688e44c700610a65e8d0393b393.json b/graphify-out/cache/ast/6a42872fdd553122adf2b899b14f036aeeb3e688e44c700610a65e8d0393b393.json new file mode 100644 index 0000000..f37f2a8 --- /dev/null +++ b/graphify-out/cache/ast/6a42872fdd553122adf2b899b14f036aeeb3e688e44c700610a65e8d0393b393.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "label": "test_pages.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L1"}, {"id": "ui_test_pages_test_welcome_card_spec_default_autostart_on", "label": "test_welcome_card_spec_default_autostart_on()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L25"}, {"id": "ui_test_pages_test_welcome_card_three_bullets", "label": "test_welcome_card_three_bullets()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L36"}, {"id": "ui_test_pages_test_main_default_chips_match_spec", "label": "test_main_default_chips_match_spec()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L56"}, {"id": "ui_test_pages_test_main_chip_state_to_tree_filters_round_trip", "label": "test_main_chip_state_to_tree_filters_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L66"}, {"id": "ui_test_pages_test_main_problems_badge_simple_count_when_no_soft", "label": "test_main_problems_badge_simple_count_when_no_soft()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L76"}, {"id": "ui_test_pages_test_main_problems_badge_compound_when_soft_present", "label": "test_main_problems_badge_compound_when_soft_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L81"}, {"id": "ui_test_pages_test_main_setup_incomplete_banner_uses_warning", "label": "test_main_setup_incomplete_banner_uses_warning()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L86"}, {"id": "ui_test_pages_test_main_setup_banner_subline_tailored_for_nas_credentials", "label": "test_main_setup_banner_subline_tailored_for_nas_credentials()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L94"}, {"id": "ui_test_pages_test_wizard_project_seven_steps", "label": "test_wizard_project_seven_steps()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L109"}, {"id": "ui_test_pages_test_wizard_project_can_advance_blocks_until_lims_picked", "label": "test_wizard_project_can_advance_blocks_until_lims_picked()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L117"}, {"id": "ui_test_pages_test_wizard_project_can_advance_blocks_until_template_picked", "label": "test_wizard_project_can_advance_blocks_until_template_picked()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L126"}, {"id": "ui_test_pages_test_wizard_project_readme_requires_core_fields", "label": "test_wizard_project_readme_requires_core_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L133"}, {"id": "ui_test_pages_test_wizard_project_preview_blocks_with_validator_findings", "label": "test_wizard_project_preview_blocks_with_validator_findings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L140"}, {"id": "ui_test_pages_test_wizard_project_preview_blocks_with_low_disk", "label": "test_wizard_project_preview_blocks_with_low_disk()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L148"}, {"id": "ui_test_pages_test_wizard_project_preview_blocks_when_plugin_host_unhealthy", "label": "test_wizard_project_preview_blocks_when_plugin_host_unhealthy()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L160"}, {"id": "ui_test_pages_test_wizard_project_preview_passes_when_clear", "label": "test_wizard_project_preview_passes_when_clear()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L168"}, {"id": "ui_test_pages_test_wizard_run_six_steps", "label": "test_wizard_run_six_steps()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L182"}, {"id": "ui_test_pages_test_wizard_run_test_mode_title", "label": "test_wizard_run_test_mode_title()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L186"}, {"id": "ui_test_pages_test_wizard_run_experimental_mode_title", "label": "test_wizard_run_experimental_mode_title()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L191"}, {"id": "ui_test_pages_test_wizard_run_test_button_uses_warning_color", "label": "test_wizard_run_test_button_uses_warning_color()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L196"}, {"id": "ui_test_pages_test_wizard_run_experimental_button_uses_primary_color", "label": "test_wizard_run_experimental_button_uses_primary_color()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L204"}, {"id": "ui_test_pages_test_wizard_run_preview_test_path_highlights", "label": "test_wizard_run_preview_test_path_highlights()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L210"}, {"id": "ui_test_pages_test_wizard_run_preview_experimental_no_test_marker", "label": "test_wizard_run_preview_experimental_no_test_marker()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L224"}, {"id": "ui_test_pages_test_wizard_run_can_advance_blocks_until_project_and_equipment", "label": "test_wizard_run_can_advance_blocks_until_project_and_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L235"}, {"id": "ui_test_pages_test_wizard_run_readme_blocks_until_core_fields", "label": "test_wizard_run_readme_blocks_until_core_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L243"}, {"id": "ui_test_pages_test_settings_nine_sections_includes_operators", "label": "test_settings_nine_sections_includes_operators()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L255"}, {"id": "ui_test_pages_test_settings_first_incomplete_returns_canonical_first", "label": "test_settings_first_incomplete_returns_canonical_first()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L268"}, {"id": "ui_test_pages_test_settings_first_incomplete_resolves_nas_credentials", "label": "test_settings_first_incomplete_resolves_nas_credentials()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L275"}, {"id": "ui_test_pages_test_settings_save_button_label_setup_incomplete", "label": "test_settings_save_button_label_setup_incomplete()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L283"}, {"id": "ui_test_pages_test_settings_save_button_label_no_changes", "label": "test_settings_save_button_label_no_changes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L288"}, {"id": "ui_test_pages_test_settings_save_button_label_with_count_badge", "label": "test_settings_save_button_label_with_count_badge()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L293"}, {"id": "ui_test_pages_test_settings_section_warning_only_for_incomplete", "label": "test_settings_section_warning_only_for_incomplete()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L298"}, {"id": "ui_test_pages_sample_findings", "label": "_sample_findings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L309"}, {"id": "ui_test_pages_test_problems_filter_default_shows_hard_only", "label": "test_problems_filter_default_shows_hard_only()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L336"}, {"id": "ui_test_pages_test_problems_filter_show_soft_when_chip_on", "label": "test_problems_filter_show_soft_when_chip_on()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L345"}, {"id": "ui_test_pages_test_problems_filter_search_path_substring", "label": "test_problems_filter_search_path_substring()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L352"}, {"id": "ui_test_pages_test_problems_filter_scope_filters_by_equipment", "label": "test_problems_filter_scope_filters_by_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L358"}, {"id": "ui_test_pages_test_problems_override_reason_min_length", "label": "test_problems_override_reason_min_length()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L364"}, {"id": "ui_test_pages_test_problems_override_reason_max_length", "label": "test_problems_override_reason_max_length()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L372"}, {"id": "ui_test_pages_test_problems_override_reason_accepts_valid", "label": "test_problems_override_reason_accepts_valid()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L381"}, {"id": "ui_test_pages_test_problems_override_reason_trims_whitespace", "label": "test_problems_override_reason_trims_whitespace()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L387"}, {"id": "ui_test_pages_test_problems_near_limit_flag", "label": "test_problems_near_limit_flag()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L394"}, {"id": "ui_test_pages_test_problems_empty_state_default", "label": "test_problems_empty_state_default()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L401"}, {"id": "ui_test_pages_test_problems_empty_state_with_hidden_soft_count", "label": "test_problems_empty_state_with_hidden_soft_count()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L406"}, {"id": "ui_test_pages_test_problems_empty_state_with_active_filter", "label": "test_problems_empty_state_with_active_filter()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L412"}, {"id": "ui_test_pages_test_problems_chip_definitions_match_spec", "label": "test_problems_chip_definitions_match_spec()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L418"}, {"id": "ui_test_pages_rationale_1", "label": "Unit tests for UI pages. Pages render NiceGUI elements; these tests exercise th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L1"}, {"id": "ui_test_pages_rationale_26", "label": "Welcome card defaults autostart to on (Frontend \u00a73.1.3).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L26"}, {"id": "ui_test_pages_rationale_37", "label": "Three bullets describing what the app does. Redesign decision 2: bullets re", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L37"}, {"id": "ui_test_pages_rationale_57", "label": "Active default-on, Archived default-off, Test runs default-on.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L57"}, {"id": "ui_test_pages_rationale_67", "label": "Translation preserves the chip state.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L67"}, {"id": "ui_test_pages_rationale_87", "label": "Setup-incomplete banner uses ``--color-warning`` per Frontend \u00a73.1.4.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L87"}, {"id": "ui_test_pages_rationale_95", "label": "The NAS-credential next-action points the operator at the section.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L95"}, {"id": "ui_test_pages_rationale_110", "label": "Frontend \u00a74 mandates seven steps in a fixed order.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L110"}, {"id": "ui_test_pages_rationale_118", "label": "Step 1 requires a LIMS short_id.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L118"}, {"id": "ui_test_pages_rationale_149", "label": "Pre-flight: less than 100 MB free aborts (Frontend \u00a710.5.4).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L149"}, {"id": "ui_test_pages_rationale_197", "label": "Test-mode primary button uses ``warning`` color (Frontend \u00a75.3).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L197"}, {"id": "ui_test_pages_rationale_211", "label": "Test runs add a TestRuns/ folder and TestRun_ leaf prefix.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L211"}, {"id": "ui_test_pages_rationale_256", "label": "Settings has nine sections (Frontend \u00a77.2 + \u00a77.9 operators). The ``operator", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L256"}, {"id": "ui_test_pages_rationale_269", "label": "First incomplete section is the first per canonical order.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L269"}, {"id": "ui_test_pages_rationale_276", "label": "The dynamic NAS-credentials section is auto-selected when it's the gate.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L276"}, {"id": "ui_test_pages_rationale_337", "label": "Hard chip default-on; Soft default-off.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L337"}, {"id": "ui_test_pages_rationale_365", "label": "Frontend \u00a711.5: minimum 10 chars after trim.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L365"}, {"id": "ui_test_pages_rationale_373", "label": "Frontend \u00a711.5: maximum 500 chars after trim.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L373"}, {"id": "ui_test_pages_rationale_388", "label": "Whitespace is trimmed before length check.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L388"}, {"id": "ui_test_pages_rationale_395", "label": "Within 10 of the maximum -> near-limit warning.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L395"}, {"id": "ui_test_pages_rationale_419", "label": "Five problem-class chips per Backend \u00a78.1.1-\u00a78.1.5.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L419"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_welcome_card_spec_default_autostart_on", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_welcome_card_three_bullets", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_main_default_chips_match_spec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_main_chip_state_to_tree_filters_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L66", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_main_problems_badge_simple_count_when_no_soft", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_main_problems_badge_compound_when_soft_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_main_setup_incomplete_banner_uses_warning", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L86", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_main_setup_banner_subline_tailored_for_nas_credentials", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L94", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_project_seven_steps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L109", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_project_can_advance_blocks_until_lims_picked", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L117", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_project_can_advance_blocks_until_template_picked", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L126", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_project_readme_requires_core_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L133", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_project_preview_blocks_with_validator_findings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L140", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_project_preview_blocks_with_low_disk", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L148", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_project_preview_blocks_when_plugin_host_unhealthy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L160", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_project_preview_passes_when_clear", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L168", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_run_six_steps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L182", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_run_test_mode_title", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L186", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_run_experimental_mode_title", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L191", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_run_test_button_uses_warning_color", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L196", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_run_experimental_button_uses_primary_color", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L204", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_run_preview_test_path_highlights", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L210", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_run_preview_experimental_no_test_marker", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L224", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_run_can_advance_blocks_until_project_and_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L235", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_wizard_run_readme_blocks_until_core_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L243", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_settings_nine_sections_includes_operators", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L255", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_settings_first_incomplete_returns_canonical_first", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L268", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_settings_first_incomplete_resolves_nas_credentials", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L275", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_settings_save_button_label_setup_incomplete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L283", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_settings_save_button_label_no_changes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L288", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_settings_save_button_label_with_count_badge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L293", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_settings_section_warning_only_for_incomplete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L298", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_sample_findings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L309", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_problems_filter_default_shows_hard_only", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L336", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_problems_filter_show_soft_when_chip_on", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L345", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_problems_filter_search_path_substring", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L352", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_problems_filter_scope_filters_by_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L358", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_problems_override_reason_min_length", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L364", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_problems_override_reason_max_length", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L372", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_problems_override_reason_accepts_valid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L381", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_problems_override_reason_trims_whitespace", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L387", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_problems_near_limit_flag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L394", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_problems_empty_state_default", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L401", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_problems_empty_state_with_hidden_soft_count", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L406", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_problems_empty_state_with_active_filter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L412", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "target": "ui_test_pages_test_problems_chip_definitions_match_spec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L418", "weight": 1.0}, {"source": "ui_test_pages_test_problems_filter_default_shows_hard_only", "target": "ui_test_pages_sample_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L340", "weight": 1.0}, {"source": "ui_test_pages_test_problems_filter_show_soft_when_chip_on", "target": "ui_test_pages_sample_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L348", "weight": 1.0}, {"source": "ui_test_pages_test_problems_filter_search_path_substring", "target": "ui_test_pages_sample_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L354", "weight": 1.0}, {"source": "ui_test_pages_test_problems_filter_scope_filters_by_equipment", "target": "ui_test_pages_sample_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L360", "weight": 1.0}, {"source": "ui_test_pages_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_pages_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_pages_rationale_26", "target": "ui_test_pages_test_welcome_card_spec_default_autostart_on", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L26", "weight": 1.0}, {"source": "ui_test_pages_rationale_37", "target": "ui_test_pages_test_welcome_card_three_bullets", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L37", "weight": 1.0}, {"source": "ui_test_pages_rationale_57", "target": "ui_test_pages_test_main_default_chips_match_spec", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L57", "weight": 1.0}, {"source": "ui_test_pages_rationale_67", "target": "ui_test_pages_test_main_chip_state_to_tree_filters_round_trip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L67", "weight": 1.0}, {"source": "ui_test_pages_rationale_87", "target": "ui_test_pages_test_main_setup_incomplete_banner_uses_warning", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L87", "weight": 1.0}, {"source": "ui_test_pages_rationale_95", "target": "ui_test_pages_test_main_setup_banner_subline_tailored_for_nas_credentials", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L95", "weight": 1.0}, {"source": "ui_test_pages_rationale_110", "target": "ui_test_pages_test_wizard_project_seven_steps", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L110", "weight": 1.0}, {"source": "ui_test_pages_rationale_118", "target": "ui_test_pages_test_wizard_project_can_advance_blocks_until_lims_picked", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L118", "weight": 1.0}, {"source": "ui_test_pages_rationale_149", "target": "ui_test_pages_test_wizard_project_preview_blocks_with_low_disk", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L149", "weight": 1.0}, {"source": "ui_test_pages_rationale_197", "target": "ui_test_pages_test_wizard_run_test_button_uses_warning_color", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L197", "weight": 1.0}, {"source": "ui_test_pages_rationale_211", "target": "ui_test_pages_test_wizard_run_preview_test_path_highlights", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L211", "weight": 1.0}, {"source": "ui_test_pages_rationale_256", "target": "ui_test_pages_test_settings_nine_sections_includes_operators", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L256", "weight": 1.0}, {"source": "ui_test_pages_rationale_269", "target": "ui_test_pages_test_settings_first_incomplete_returns_canonical_first", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L269", "weight": 1.0}, {"source": "ui_test_pages_rationale_276", "target": "ui_test_pages_test_settings_first_incomplete_resolves_nas_credentials", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L276", "weight": 1.0}, {"source": "ui_test_pages_rationale_337", "target": "ui_test_pages_test_problems_filter_default_shows_hard_only", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L337", "weight": 1.0}, {"source": "ui_test_pages_rationale_365", "target": "ui_test_pages_test_problems_override_reason_min_length", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L365", "weight": 1.0}, {"source": "ui_test_pages_rationale_373", "target": "ui_test_pages_test_problems_override_reason_max_length", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L373", "weight": 1.0}, {"source": "ui_test_pages_rationale_388", "target": "ui_test_pages_test_problems_override_reason_trims_whitespace", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L388", "weight": 1.0}, {"source": "ui_test_pages_rationale_395", "target": "ui_test_pages_test_problems_near_limit_flag", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L395", "weight": 1.0}, {"source": "ui_test_pages_rationale_419", "target": "ui_test_pages_test_problems_chip_definitions_match_spec", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L419", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_pages_test_welcome_card_spec_default_autostart_on", "callee": "welcome_card_spec", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L28"}, {"caller_nid": "ui_test_pages_test_welcome_card_three_bullets", "callee": "welcome_card_spec", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L45"}, {"caller_nid": "ui_test_pages_test_welcome_card_three_bullets", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L46"}, {"caller_nid": "ui_test_pages_test_welcome_card_three_bullets", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L47"}, {"caller_nid": "ui_test_pages_test_welcome_card_three_bullets", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L47"}, {"caller_nid": "ui_test_pages_test_welcome_card_three_bullets", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L48"}, {"caller_nid": "ui_test_pages_test_main_default_chips_match_spec", "callee": "_default_chips", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L59"}, {"caller_nid": "ui_test_pages_test_main_chip_state_to_tree_filters_round_trip", "callee": "MainPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L69"}, {"caller_nid": "ui_test_pages_test_main_chip_state_to_tree_filters_round_trip", "callee": "chip_state_to_tree_filters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L70"}, {"caller_nid": "ui_test_pages_test_main_problems_badge_simple_count_when_no_soft", "callee": "MainPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L77"}, {"caller_nid": "ui_test_pages_test_main_problems_badge_simple_count_when_no_soft", "callee": "problems_badge_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L78"}, {"caller_nid": "ui_test_pages_test_main_problems_badge_compound_when_soft_present", "callee": "MainPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L82"}, {"caller_nid": "ui_test_pages_test_main_problems_badge_compound_when_soft_present", "callee": "problems_badge_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L83"}, {"caller_nid": "ui_test_pages_test_main_setup_incomplete_banner_uses_warning", "callee": "setup_incomplete_banner_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L89"}, {"caller_nid": "ui_test_pages_test_main_setup_banner_subline_tailored_for_nas_credentials", "callee": "setup_incomplete_banner_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L97"}, {"caller_nid": "ui_test_pages_test_main_setup_banner_subline_tailored_for_nas_credentials", "callee": "setup_incomplete_banner_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L100"}, {"caller_nid": "ui_test_pages_test_wizard_project_seven_steps", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L112"}, {"caller_nid": "ui_test_pages_test_wizard_project_can_advance_blocks_until_lims_picked", "callee": "ProjectWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L120"}, {"caller_nid": "ui_test_pages_test_wizard_project_can_advance_blocks_until_lims_picked", "callee": "can_advance", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L121"}, {"caller_nid": "ui_test_pages_test_wizard_project_can_advance_blocks_until_lims_picked", "callee": "can_advance", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L123"}, {"caller_nid": "ui_test_pages_test_wizard_project_can_advance_blocks_until_template_picked", "callee": "ProjectWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L127"}, {"caller_nid": "ui_test_pages_test_wizard_project_can_advance_blocks_until_template_picked", "callee": "can_advance", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L128"}, {"caller_nid": "ui_test_pages_test_wizard_project_can_advance_blocks_until_template_picked", "callee": "can_advance", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L130"}, {"caller_nid": "ui_test_pages_test_wizard_project_readme_requires_core_fields", "callee": "ProjectWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L134"}, {"caller_nid": "ui_test_pages_test_wizard_project_readme_requires_core_fields", "callee": "can_advance", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L135"}, {"caller_nid": "ui_test_pages_test_wizard_project_readme_requires_core_fields", "callee": "can_advance", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L137"}, {"caller_nid": "ui_test_pages_test_wizard_project_preview_blocks_with_validator_findings", "callee": "ProjectWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L141"}, {"caller_nid": "ui_test_pages_test_wizard_project_preview_blocks_with_validator_findings", "callee": "preview_step_clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L145"}, {"caller_nid": "ui_test_pages_test_wizard_project_preview_blocks_with_low_disk", "callee": "ProjectWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L151"}, {"caller_nid": "ui_test_pages_test_wizard_project_preview_blocks_with_low_disk", "callee": "preview_step_clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L155"}, {"caller_nid": "ui_test_pages_test_wizard_project_preview_blocks_with_low_disk", "callee": "disk_space_pre_flight_message", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L156"}, {"caller_nid": "ui_test_pages_test_wizard_project_preview_blocks_when_plugin_host_unhealthy", "callee": "ProjectWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L161"}, {"caller_nid": "ui_test_pages_test_wizard_project_preview_blocks_when_plugin_host_unhealthy", "callee": "preview_step_clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L165"}, {"caller_nid": "ui_test_pages_test_wizard_project_preview_passes_when_clear", "callee": "ProjectWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L169"}, {"caller_nid": "ui_test_pages_test_wizard_project_preview_passes_when_clear", "callee": "preview_step_clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L174"}, {"caller_nid": "ui_test_pages_test_wizard_run_six_steps", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L183"}, {"caller_nid": "ui_test_pages_test_wizard_run_test_mode_title", "callee": "RunWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L187"}, {"caller_nid": "ui_test_pages_test_wizard_run_test_mode_title", "callee": "title_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L188"}, {"caller_nid": "ui_test_pages_test_wizard_run_experimental_mode_title", "callee": "RunWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L192"}, {"caller_nid": "ui_test_pages_test_wizard_run_experimental_mode_title", "callee": "title_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L193"}, {"caller_nid": "ui_test_pages_test_wizard_run_test_button_uses_warning_color", "callee": "RunWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L199"}, {"caller_nid": "ui_test_pages_test_wizard_run_test_button_uses_warning_color", "callee": "primary_button_color", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L200"}, {"caller_nid": "ui_test_pages_test_wizard_run_test_button_uses_warning_color", "callee": "primary_button_label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L201"}, {"caller_nid": "ui_test_pages_test_wizard_run_experimental_button_uses_primary_color", "callee": "RunWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L205"}, {"caller_nid": "ui_test_pages_test_wizard_run_experimental_button_uses_primary_color", "callee": "primary_button_color", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L206"}, {"caller_nid": "ui_test_pages_test_wizard_run_experimental_button_uses_primary_color", "callee": "primary_button_label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L207"}, {"caller_nid": "ui_test_pages_test_wizard_run_preview_test_path_highlights", "callee": "RunWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L213"}, {"caller_nid": "ui_test_pages_test_wizard_run_preview_test_path_highlights", "callee": "preview_path_segments", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L218"}, {"caller_nid": "ui_test_pages_test_wizard_run_preview_test_path_highlights", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L220"}, {"caller_nid": "ui_test_pages_test_wizard_run_preview_test_path_highlights", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L220"}, {"caller_nid": "ui_test_pages_test_wizard_run_preview_experimental_no_test_marker", "callee": "RunWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L225"}, {"caller_nid": "ui_test_pages_test_wizard_run_preview_experimental_no_test_marker", "callee": "preview_path_segments", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L230"}, {"caller_nid": "ui_test_pages_test_wizard_run_can_advance_blocks_until_project_and_equipment", "callee": "RunWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L236"}, {"caller_nid": "ui_test_pages_test_wizard_run_can_advance_blocks_until_project_and_equipment", "callee": "can_advance", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L237"}, {"caller_nid": "ui_test_pages_test_wizard_run_can_advance_blocks_until_project_and_equipment", "callee": "can_advance", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L240"}, {"caller_nid": "ui_test_pages_test_wizard_run_readme_blocks_until_core_fields", "callee": "RunWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L244"}, {"caller_nid": "ui_test_pages_test_wizard_run_readme_blocks_until_core_fields", "callee": "can_advance", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L245"}, {"caller_nid": "ui_test_pages_test_wizard_run_readme_blocks_until_core_fields", "callee": "can_advance", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L247"}, {"caller_nid": "ui_test_pages_test_settings_nine_sections_includes_operators", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L262"}, {"caller_nid": "ui_test_pages_test_settings_first_incomplete_returns_canonical_first", "callee": "first_incomplete_section", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L271"}, {"caller_nid": "ui_test_pages_test_settings_first_incomplete_resolves_nas_credentials", "callee": "first_incomplete_section", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L278"}, {"caller_nid": "ui_test_pages_test_settings_first_incomplete_resolves_nas_credentials", "callee": "first_incomplete_section", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L280"}, {"caller_nid": "ui_test_pages_test_settings_save_button_label_setup_incomplete", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L284"}, {"caller_nid": "ui_test_pages_test_settings_save_button_label_setup_incomplete", "callee": "save_button_label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L285"}, {"caller_nid": "ui_test_pages_test_settings_save_button_label_no_changes", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L289"}, {"caller_nid": "ui_test_pages_test_settings_save_button_label_no_changes", "callee": "save_button_label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L290"}, {"caller_nid": "ui_test_pages_test_settings_save_button_label_with_count_badge", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L294"}, {"caller_nid": "ui_test_pages_test_settings_save_button_label_with_count_badge", "callee": "save_button_label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L295"}, {"caller_nid": "ui_test_pages_test_settings_section_warning_only_for_incomplete", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L299"}, {"caller_nid": "ui_test_pages_test_settings_section_warning_only_for_incomplete", "callee": "section_has_warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L300"}, {"caller_nid": "ui_test_pages_test_settings_section_warning_only_for_incomplete", "callee": "section_has_warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L301"}, {"caller_nid": "ui_test_pages_sample_findings", "callee": "Finding", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L311"}, {"caller_nid": "ui_test_pages_sample_findings", "callee": "Finding", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L322"}, {"caller_nid": "ui_test_pages_test_problems_filter_default_shows_hard_only", "callee": "ProblemsPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L339"}, {"caller_nid": "ui_test_pages_test_problems_filter_default_shows_hard_only", "callee": "filter_findings", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L340"}, {"caller_nid": "ui_test_pages_test_problems_filter_default_shows_hard_only", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L341"}, {"caller_nid": "ui_test_pages_test_problems_filter_show_soft_when_chip_on", "callee": "ProblemsPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L346"}, {"caller_nid": "ui_test_pages_test_problems_filter_show_soft_when_chip_on", "callee": "toggle", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L347"}, {"caller_nid": "ui_test_pages_test_problems_filter_show_soft_when_chip_on", "callee": "filter_findings", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L348"}, {"caller_nid": "ui_test_pages_test_problems_filter_show_soft_when_chip_on", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L349"}, {"caller_nid": "ui_test_pages_test_problems_filter_search_path_substring", "callee": "ProblemsPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L353"}, {"caller_nid": "ui_test_pages_test_problems_filter_search_path_substring", "callee": "filter_findings", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L354"}, {"caller_nid": "ui_test_pages_test_problems_filter_search_path_substring", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L355"}, {"caller_nid": "ui_test_pages_test_problems_filter_search_path_substring", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L355"}, {"caller_nid": "ui_test_pages_test_problems_filter_scope_filters_by_equipment", "callee": "ProblemsPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L359"}, {"caller_nid": "ui_test_pages_test_problems_filter_scope_filters_by_equipment", "callee": "filter_findings", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L360"}, {"caller_nid": "ui_test_pages_test_problems_override_reason_min_length", "callee": "validate_override_reason", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L367"}, {"caller_nid": "ui_test_pages_test_problems_override_reason_max_length", "callee": "validate_override_reason", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L376"}, {"caller_nid": "ui_test_pages_test_problems_override_reason_accepts_valid", "callee": "validate_override_reason", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L382"}, {"caller_nid": "ui_test_pages_test_problems_override_reason_trims_whitespace", "callee": "validate_override_reason", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L390"}, {"caller_nid": "ui_test_pages_test_problems_near_limit_flag", "callee": "near_limit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L397"}, {"caller_nid": "ui_test_pages_test_problems_near_limit_flag", "callee": "near_limit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L398"}, {"caller_nid": "ui_test_pages_test_problems_empty_state_default", "callee": "ProblemsPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L402"}, {"caller_nid": "ui_test_pages_test_problems_empty_state_default", "callee": "empty_state_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L403"}, {"caller_nid": "ui_test_pages_test_problems_empty_state_with_hidden_soft_count", "callee": "ProblemsPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L407"}, {"caller_nid": "ui_test_pages_test_problems_empty_state_with_hidden_soft_count", "callee": "empty_state_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L408"}, {"caller_nid": "ui_test_pages_test_problems_empty_state_with_active_filter", "callee": "ProblemsPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L413"}, {"caller_nid": "ui_test_pages_test_problems_empty_state_with_active_filter", "callee": "empty_state_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L414"}, {"caller_nid": "ui_test_pages_test_problems_chip_definitions_match_spec", "callee": "class_chip_definitions", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py", "source_location": "L421"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/6abab2b7f2f4c1bb219ec280063ac666d91d607f43fa0ff82997a4bf5cac60f8.json b/graphify-out/cache/ast/6abab2b7f2f4c1bb219ec280063ac666d91d607f43fa0ff82997a4bf5cac60f8.json new file mode 100644 index 0000000..9c519c7 --- /dev/null +++ b/graphify-out/cache/ast/6abab2b7f2f4c1bb219ec280063ac666d91d607f43fa0ff82997a4bf5cac60f8.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_status_py", "label": "status.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L1"}, {"id": "tray_status_statussnapshot", "label": "StatusSnapshot", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L45"}, {"id": "tray_status_snapshot_status", "label": "snapshot_status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L53"}, {"id": "tray_status_format_status", "label": "format_status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L76"}, {"id": "tray_status_statusticker", "label": "StatusTicker", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L91"}, {"id": "tray_status_statusticker_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L100"}, {"id": "tray_status_statusticker_start", "label": ".start()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L120"}, {"id": "tray_status_statusticker_stop", "label": ".stop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L129"}, {"id": "tray_status_statusticker_tick_once", "label": ".tick_once()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L136"}, {"id": "tray_status_statusticker_run", "label": "._run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L156"}, {"id": "tray_status_safe_int", "label": "_safe_int()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L162"}, {"id": "tray_status_rationale_1", "label": "Status-submenu rendering. Backend Spec \u00a74.3.2. The tray's status submenu shows", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L1"}, {"id": "tray_status_rationale_46", "label": "Immutable view over the \u00a74.3.2 status inputs.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L46"}, {"id": "tray_status_rationale_58", "label": "Build a :class:`StatusSnapshot` from live component references. Each compon", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L58"}, {"id": "tray_status_rationale_77", "label": "Return the menu-label string for the \u00a74.3.2 formatter.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L77"}, {"id": "tray_status_rationale_92", "label": "Polls :func:`snapshot_status` on a fixed cadence. On every tick the formatt", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L92"}, {"id": "tray_status_rationale_121", "label": "Spawn the ticker thread. Idempotent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L121"}, {"id": "tray_status_rationale_130", "label": "Signal the ticker to exit. Idempotent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L130"}, {"id": "tray_status_rationale_137", "label": "Run a single tick synchronously. Returns the new label. Tests call this", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L137"}, {"id": "tray_status_rationale_163", "label": "Best-effort numeric read; missing / None / non-int returns 0.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L163"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_status_py", "target": "threading", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_status_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_status_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_status_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_status_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_status_py", "target": "tray_status_statussnapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_status_py", "target": "tray_status_snapshot_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_status_py", "target": "tray_status_format_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_status_py", "target": "tray_status_statusticker", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L91", "weight": 1.0}, {"source": "tray_status_statusticker", "target": "tray_status_statusticker_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L100", "weight": 1.0}, {"source": "tray_status_statusticker", "target": "tray_status_statusticker_start", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L120", "weight": 1.0}, {"source": "tray_status_statusticker", "target": "tray_status_statusticker_stop", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L129", "weight": 1.0}, {"source": "tray_status_statusticker", "target": "tray_status_statusticker_tick_once", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L136", "weight": 1.0}, {"source": "tray_status_statusticker", "target": "tray_status_statusticker_run", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L156", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_status_py", "target": "tray_status_safe_int", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L162", "weight": 1.0}, {"source": "tray_status_snapshot_status", "target": "tray_status_safe_int", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L66", "weight": 1.0}, {"source": "tray_status_snapshot_status", "target": "tray_status_statussnapshot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L69", "weight": 1.0}, {"source": "tray_status_statusticker_tick_once", "target": "tray_status_snapshot_status", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L142", "weight": 1.0}, {"source": "tray_status_statusticker_tick_once", "target": "tray_status_format_status", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L143", "weight": 1.0}, {"source": "tray_status_statusticker_run", "target": "tray_status_statusticker_tick_once", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L158", "weight": 1.0}, {"source": "tray_status_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_status_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_status_rationale_46", "target": "tray_status_statussnapshot", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L46", "weight": 1.0}, {"source": "tray_status_rationale_58", "target": "tray_status_snapshot_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L58", "weight": 1.0}, {"source": "tray_status_rationale_77", "target": "tray_status_format_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L77", "weight": 1.0}, {"source": "tray_status_rationale_92", "target": "tray_status_statusticker", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L92", "weight": 1.0}, {"source": "tray_status_rationale_121", "target": "tray_status_statusticker_start", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L121", "weight": 1.0}, {"source": "tray_status_rationale_130", "target": "tray_status_statusticker_stop", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L130", "weight": 1.0}, {"source": "tray_status_rationale_137", "target": "tray_status_statusticker_tick_once", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L137", "weight": 1.0}, {"source": "tray_status_rationale_163", "target": "tray_status_safe_int", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L163", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_status_format_status", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L81"}, {"caller_nid": "tray_status_format_status", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L85"}, {"caller_nid": "tray_status_format_status", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L88"}, {"caller_nid": "tray_status_statusticker_init", "callee": "float", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L111"}, {"caller_nid": "tray_status_statusticker_init", "callee": "Event", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L112"}, {"caller_nid": "tray_status_statusticker_start", "callee": "is_alive", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L122"}, {"caller_nid": "tray_status_statusticker_start", "callee": "clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L124"}, {"caller_nid": "tray_status_statusticker_start", "callee": "Thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L125"}, {"caller_nid": "tray_status_statusticker_stop", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L131"}, {"caller_nid": "tray_status_statusticker_stop", "callee": "is_alive", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L132"}, {"caller_nid": "tray_status_statusticker_stop", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L133"}, {"caller_nid": "tray_status_statusticker_tick_once", "callee": "_on_update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L147"}, {"caller_nid": "tray_status_statusticker_tick_once", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L149"}, {"caller_nid": "tray_status_statusticker_run", "callee": "is_set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L157"}, {"caller_nid": "tray_status_statusticker_run", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L159"}, {"caller_nid": "tray_status_safe_int", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L166"}, {"caller_nid": "tray_status_safe_int", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L167"}, {"caller_nid": "tray_status_safe_int", "callee": "raw", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L169"}, {"caller_nid": "tray_status_safe_int", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py", "source_location": "L173"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/6c0329fc6368d0d1933859897c14ac100b576700308c5787bfb1ac1440ee640f.json b/graphify-out/cache/ast/6c0329fc6368d0d1933859897c14ac100b576700308c5787bfb1ac1440ee640f.json new file mode 100644 index 0000000..9d1bfe5 --- /dev/null +++ b/graphify-out/cache/ast/6c0329fc6368d0d1933859897c14ac100b576700308c5787bfb1ac1440ee640f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_credential_field_py", "label": "credential_field.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L1"}, {"id": "components_credential_field_credentialstate", "label": "CredentialState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L28"}, {"id": "components_credential_field_begin_edit", "label": "begin_edit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L41"}, {"id": "components_credential_field_cancel_edit", "label": "cancel_edit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L54"}, {"id": "components_credential_field_commit_edit", "label": "commit_edit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L60"}, {"id": "components_credential_field_clear_credential", "label": "clear_credential()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L74"}, {"id": "components_credential_field_credential_props", "label": "credential_props()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L81"}, {"id": "components_credential_field_credential_field", "label": "credential_field()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L113"}, {"id": "components_credential_field_rationale_1", "label": "Credential field component (Frontend Spec \u00a77.4.1). Three resting / transient st", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L1"}, {"id": "components_credential_field_rationale_29", "label": "In-memory state for a credential row. ``resting`` records which resting sta", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L29"}, {"id": "components_credential_field_rationale_42", "label": "Return the editing state, remembering ``state`` as the resting target. Idem", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L42"}, {"id": "components_credential_field_rationale_55", "label": "Return the resting state to collapse to when an edit is cancelled.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L55"}, {"id": "components_credential_field_rationale_61", "label": "Resolve a Save click. Returns ``(new_state, should_save)``. A non-empty ``t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L61"}, {"id": "components_credential_field_rationale_75", "label": "Return the state after the operator confirms a Clear action.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L75"}, {"id": "components_credential_field_rationale_82", "label": "Compute the visible labels / button names for a state. Returns a dict with", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L82"}, {"id": "components_credential_field_rationale_121", "label": "Build a credential row (Frontend Spec \u00a77.4.1). Three states drive the row:", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L121"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_credential_field_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_credential_field_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_credential_field_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_credential_field_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_credential_field_py", "target": "components_credential_field_credentialstate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_credential_field_py", "target": "components_credential_field_begin_edit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_credential_field_py", "target": "components_credential_field_cancel_edit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L54", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_credential_field_py", "target": "components_credential_field_commit_edit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_credential_field_py", "target": "components_credential_field_clear_credential", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L74", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_credential_field_py", "target": "components_credential_field_credential_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_credential_field_py", "target": "components_credential_field_credential_field", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L113", "weight": 1.0}, {"source": "components_credential_field_begin_edit", "target": "components_credential_field_credentialstate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L50", "weight": 1.0}, {"source": "components_credential_field_cancel_edit", "target": "components_credential_field_credentialstate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L57", "weight": 1.0}, {"source": "components_credential_field_commit_edit", "target": "components_credential_field_credentialstate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L70", "weight": 1.0}, {"source": "components_credential_field_clear_credential", "target": "components_credential_field_credentialstate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L78", "weight": 1.0}, {"source": "components_credential_field_credential_field", "target": "components_credential_field_credentialstate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L139", "weight": 1.0}, {"source": "components_credential_field_credential_field", "target": "components_credential_field_credential_props", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L140", "weight": 1.0}, {"source": "components_credential_field_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_credential_field_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L1", "weight": 1.0}, {"source": "components_credential_field_rationale_29", "target": "components_credential_field_credentialstate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L29", "weight": 1.0}, {"source": "components_credential_field_rationale_42", "target": "components_credential_field_begin_edit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L42", "weight": 1.0}, {"source": "components_credential_field_rationale_55", "target": "components_credential_field_cancel_edit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L55", "weight": 1.0}, {"source": "components_credential_field_rationale_61", "target": "components_credential_field_commit_edit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L61", "weight": 1.0}, {"source": "components_credential_field_rationale_75", "target": "components_credential_field_clear_credential", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L75", "weight": 1.0}, {"source": "components_credential_field_rationale_82", "target": "components_credential_field_credential_props", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L82", "weight": 1.0}, {"source": "components_credential_field_rationale_121", "target": "components_credential_field_credential_field", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L121", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_credential_field_credential_field", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L151"}, {"caller_nid": "components_credential_field_credential_field", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L151"}, {"caller_nid": "components_credential_field_credential_field", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L151"}, {"caller_nid": "components_credential_field_credential_field", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L153"}, {"caller_nid": "components_credential_field_credential_field", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L153"}, {"caller_nid": "components_credential_field_credential_field", "callee": "_row", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py", "source_location": "L220"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/6c8fda0fdacc0bf8a28b753e074e3577bd0b5cda888cd5d6ce12f57f720aec5a.json b/graphify-out/cache/ast/6c8fda0fdacc0bf8a28b753e074e3577bd0b5cda888cd5d6ce12f57f720aec5a.json new file mode 100644 index 0000000..7c6298f --- /dev/null +++ b/graphify-out/cache/ast/6c8fda0fdacc0bf8a28b753e074e3577bd0b5cda888cd5d6ce12f57f720aec5a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_md", "label": "DESIGN.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/DESIGN.md", "source_location": "L1"}, {"id": "exlabwizard_design_frontend_design_style_guide", "label": "Frontend Design Style Guide", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/DESIGN.md", "source_location": "L1"}, {"id": "exlabwizard_design_absolute_constraints", "label": "Absolute Constraints", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/DESIGN.md", "source_location": "L12"}, {"id": "exlabwizard_design_00_logo_and_branding", "label": "00 -- Logo and Branding", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/DESIGN.md", "source_location": "L37"}, {"id": "exlabwizard_design_01_color_palette", "label": "01 -- Color Palette", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/DESIGN.md", "source_location": "L44"}, {"id": "exlabwizard_design_primary_colors_ui_only", "label": "Primary Colors -- UI Only", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/DESIGN.md", "source_location": "L46"}, {"id": "exlabwizard_design_data_colors_okabe_ito_visualization_only", "label": "Data Colors -- Okabe-Ito -- Visualization Only", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/DESIGN.md", "source_location": "L59"}, {"id": "exlabwizard_design_surface_neutral_tokens", "label": "Surface & Neutral Tokens", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/DESIGN.md", "source_location": "L90"}, {"id": "exlabwizard_design_semantic_color_assignments", "label": "Semantic Color Assignments", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/DESIGN.md", "source_location": "L100"}, {"id": "exlabwizard_design_color_selection_decision_logic", "label": "Color Selection Decision Logic", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/DESIGN.md", "source_location": "L109"}, {"id": "exlabwizard_design_02_typography", "label": "02 -- Typography", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/DESIGN.md", "source_location": "L131"}, {"id": "exlabwizard_design_codeblock_1", "label": "code:css (--font-display: 'DM Serif Display', Georgia, serif;)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/DESIGN.md", "source_location": "L136"}, {"id": "exlabwizard_design_codeblock_2", "label": "code:html (/Runs/Run_*.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L548"}, {"id": "unit_test_paths_rationale_561", "label": "Redesign \u00a73.4: two runs in the same minute resolve to the same path (Copier", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L561"}, {"id": "unit_test_paths_rationale_632", "label": "A non-str project_name hits the isinstance guard.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L632"}, {"id": "unit_test_paths_rationale_645", "label": "An empty-string project_name also hits the same guard.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L645"}, {"id": "unit_test_paths_rationale_673", "label": "Spaces and ordinary punctuation are fine -- the name is used verbatim.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L673"}, {"id": "unit_test_paths_rationale_709", "label": "The \u00a73.2 contract is 'used verbatim' -- no canonicalisation.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L709"}, {"id": "unit_test_paths_rationale_733", "label": "Only one path is empty -- still INCOMPLETE_MISSING_PATHS.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L733"}, {"id": "unit_test_paths_rationale_760", "label": "Only ``label`` gates orchestrator identity; a blank label trips it.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L760"}, {"id": "unit_test_paths_rationale_773", "label": "A staging root without a label still trips -- staging never substitutes.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L773"}, {"id": "unit_test_paths_rationale_789", "label": "staging_root is opt-in: a blank value does not block READY.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L789"}, {"id": "unit_test_paths_rationale_806", "label": "The orchestrator missing-field rollup no longer mentions staging_root.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L806"}, {"id": "unit_test_paths_rationale_837", "label": "Offline catalogue path satisfies the LIMS slot without endpoint+email.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L837"}, {"id": "unit_test_paths_rationale_868", "label": "endpoint+email present but keyring lacks the password -> INCOMPLETE_NO_LIMS.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L868"}, {"id": "unit_test_paths_rationale_877", "label": "Nas-mode equipment without its keyring entry gates with the new state.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L877"}, {"id": "unit_test_paths_rationale_884", "label": "A configured LIMS does not mask the missing NAS credential.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L884"}, {"id": "unit_test_paths_rationale_896", "label": "Adding the keyring entry advances the state to the next gate.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L896"}, {"id": "unit_test_paths_rationale_906", "label": "The missing list names each equipment id whose keyring entry is absent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L906"}, {"id": "unit_test_paths_rationale_929", "label": "endpoint present but email empty -> INCOMPLETE_NO_LIMS (email is required).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L929"}, {"id": "unit_test_paths_rationale_981", "label": "Soft block: surfaces a banner, not a missing-field list.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L981"}, {"id": "unit_test_paths_rationale_1019", "label": "When config is None but state is INCOMPLETE_MISSING_PATHS, every paths field", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1019"}, {"id": "unit_test_paths_rationale_1030", "label": "When config is None but state is INCOMPLETE_NO_LIMS, the whole lims block is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1030"}, {"id": "unit_test_paths_rationale_1038", "label": "endpoint+email both filled in but no offline catalogue -> the keyring-passwo", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1038"}, {"id": "unit_test_paths_rationale_1064", "label": "Defensive fallback: any value that isn't a recognized SetupState returns an", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1064"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_make_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_make_orchestrator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L70", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_ready_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L80", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_fake_home", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L105", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_config_path_macos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L128", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_config_path_windows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L134", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_config_path_linux_with_xdg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L142", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_config_path_linux_without_xdg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L150", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_state_path_macos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L161", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_state_path_windows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L167", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_state_path_linux_with_xdg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L175", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_state_path_linux_without_xdg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L183", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_cache_path_macos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L194", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_cache_path_windows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L200", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_cache_path_linux_with_xdg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L208", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_cache_path_linux_without_xdg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L216", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_central_log_path_macos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L227", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_central_log_path_windows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L233", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_central_log_path_linux_with_xdg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L241", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_os_central_log_path_linux_without_xdg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L251", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_suggested_staging_root_linux_fallback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L268", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_suggested_staging_root_linux_honors_xdg_data_home", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L276", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_suggested_staging_root_macos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L285", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_suggested_staging_root_windows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L293", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_test_mode_suffixes_os_config_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L316", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_test_mode_suffixes_os_state_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L325", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_test_mode_suffixes_os_cache_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L332", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_test_mode_suffixes_os_central_log_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L339", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_test_mode_suffixes_suggested_staging_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L348", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_test_mode_off_does_not_suffix", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L359", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_ensure_dir_creates_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L378", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_ensure_dir_idempotent_when_exists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L386", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_ensure_state_dir_creates_state_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L395", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_ensure_central_log_dir_creates_parent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L404", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_canonicalize_equipment_id_accepts_canonical", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L418", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_canonicalize_equipment_id_accepts_other_canonical_examples", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L426", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_lowercase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L430", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_hyphen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L435", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_leading_digit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L440", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_space", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L445", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_non_ascii", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L450", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_too_long", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L455", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_canonicalize_equipment_id_accepts_max_length", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L463", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L468", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L473", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_int", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L480", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_canonicalize_equipment_id_does_not_mutate_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L488", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_compose_run_path_experimental", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L506", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_compose_run_path_test", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L518", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_compose_run_path_strftime_format", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L530", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_compose_run_path_experimental_under_runs_subdir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L547", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_compose_run_path_same_minute_collision_returns_same_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L560", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_compose_run_path_rejects_invalid_equipment_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L581", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_compose_run_path_rejects_unsafe_project_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L592", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_compose_project_path_basic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L603", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_compose_project_path_rejects_invalid_equipment_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L613", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_compose_project_path_rejects_unsafe_project_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L622", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_compose_run_path_rejects_non_str_project_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L631", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_compose_run_path_rejects_empty_project_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L644", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_compose_project_path_rejects_non_str_project_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L657", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_validate_project_name_accepts_human_readable_names", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L672", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_validate_project_name_rejects_unsafe_names", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L696", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_validate_project_name_rejects_overlong_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L702", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_validate_project_name_does_not_mutate_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L708", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_no_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L719", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_missing_paths", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L723", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L732", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_no_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L746", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_no_orchestrator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L759", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L772", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L788", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L805", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_no_lims", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L822", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L836", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_lims_unreachable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L856", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_ready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L863", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_keyring_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L867", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_nas_keyring_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L876", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_nas_state_precedes_lims_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L883", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_nas_state_resolves_once_password_added", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L895", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_missing_for_no_nas_credential_lists_per_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L905", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_next_action_for_no_nas_credential", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L919", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L928", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_next_action_table", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L959", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_missing_when_no_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L968", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_missing_when_ready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L976", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_missing_when_lims_unreachable_returns_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L980", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_missing_for_paths_lists_each_unset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L985", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_missing_for_no_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L996", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1001", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_missing_for_missing_paths_with_none_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1018", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_missing_for_no_lims_with_none_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1029", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1037", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "target": "unit_test_paths_test_setup_state_missing_unrecognized_state_returns_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1063", "weight": 1.0}, {"source": "unit_test_paths_ready_config", "target": "unit_test_paths_make_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L96", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_missing_paths", "target": "unit_test_paths_make_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L726", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_missing_paths", "target": "unit_test_paths_make_orchestrator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L727", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", "target": "unit_test_paths_make_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L740", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", "target": "unit_test_paths_make_orchestrator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L741", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_no_equipment", "target": "unit_test_paths_make_orchestrator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L754", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_no_orchestrator", "target": "unit_test_paths_make_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L767", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", "target": "unit_test_paths_make_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L782", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", "target": "unit_test_paths_make_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L799", "weight": 1.0}, {"source": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", "target": "unit_test_paths_make_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L815", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_no_lims", "target": "unit_test_paths_make_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L830", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_no_lims", "target": "unit_test_paths_make_orchestrator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L831", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", "target": "unit_test_paths_make_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L849", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", "target": "unit_test_paths_make_orchestrator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L850", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_lims_unreachable", "target": "unit_test_paths_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L857", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_ready", "target": "unit_test_paths_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L864", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_keyring_missing", "target": "unit_test_paths_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L869", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_nas_keyring_missing", "target": "unit_test_paths_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L878", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_nas_state_precedes_lims_state", "target": "unit_test_paths_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L885", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_nas_state_resolves_once_password_added", "target": "unit_test_paths_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L897", "weight": 1.0}, {"source": "unit_test_paths_test_setup_state_missing_for_no_nas_credential_lists_per_equipment", "target": "unit_test_paths_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L909", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", "target": "unit_test_paths_make_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L937", "weight": 1.0}, {"source": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", "target": "unit_test_paths_make_orchestrator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L938", "weight": 1.0}, {"source": "unit_test_paths_test_setup_state_missing_when_ready", "target": "unit_test_paths_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L977", "weight": 1.0}, {"source": "unit_test_paths_test_setup_state_missing_when_lims_unreachable_returns_empty", "target": "unit_test_paths_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L982", "weight": 1.0}, {"source": "unit_test_paths_test_setup_state_missing_for_no_equipment", "target": "unit_test_paths_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L997", "weight": 1.0}, {"source": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", "target": "unit_test_paths_make_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1009", "weight": 1.0}, {"source": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", "target": "unit_test_paths_make_orchestrator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1010", "weight": 1.0}, {"source": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", "target": "unit_test_paths_make_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1051", "weight": 1.0}, {"source": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", "target": "unit_test_paths_make_orchestrator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1052", "weight": 1.0}, {"source": "unit_test_paths_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_test_paths_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1", "weight": 1.0}, {"source": "unit_test_paths_rationale_53", "target": "unit_test_paths_make_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L53", "weight": 1.0}, {"source": "unit_test_paths_rationale_71", "target": "unit_test_paths_make_orchestrator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L71", "weight": 1.0}, {"source": "unit_test_paths_rationale_81", "target": "unit_test_paths_ready_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L81", "weight": 1.0}, {"source": "unit_test_paths_rationale_106", "target": "unit_test_paths_fake_home", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L106", "weight": 1.0}, {"source": "unit_test_paths_rationale_351", "target": "unit_test_paths_test_test_mode_suffixes_suggested_staging_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L351", "weight": 1.0}, {"source": "unit_test_paths_rationale_360", "target": "unit_test_paths_test_test_mode_off_does_not_suffix", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L360", "weight": 1.0}, {"source": "unit_test_paths_rationale_474", "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_none", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L474", "weight": 1.0}, {"source": "unit_test_paths_rationale_481", "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_int", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L481", "weight": 1.0}, {"source": "unit_test_paths_rationale_489", "target": "unit_test_paths_test_canonicalize_equipment_id_does_not_mutate_input", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L489", "weight": 1.0}, {"source": "unit_test_paths_rationale_531", "target": "unit_test_paths_test_compose_run_path_strftime_format", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L531", "weight": 1.0}, {"source": "unit_test_paths_rationale_548", "target": "unit_test_paths_test_compose_run_path_experimental_under_runs_subdir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L548", "weight": 1.0}, {"source": "unit_test_paths_rationale_561", "target": "unit_test_paths_test_compose_run_path_same_minute_collision_returns_same_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L561", "weight": 1.0}, {"source": "unit_test_paths_rationale_632", "target": "unit_test_paths_test_compose_run_path_rejects_non_str_project_name", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L632", "weight": 1.0}, {"source": "unit_test_paths_rationale_645", "target": "unit_test_paths_test_compose_run_path_rejects_empty_project_name", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L645", "weight": 1.0}, {"source": "unit_test_paths_rationale_673", "target": "unit_test_paths_test_validate_project_name_accepts_human_readable_names", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L673", "weight": 1.0}, {"source": "unit_test_paths_rationale_709", "target": "unit_test_paths_test_validate_project_name_does_not_mutate_input", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L709", "weight": 1.0}, {"source": "unit_test_paths_rationale_733", "target": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L733", "weight": 1.0}, {"source": "unit_test_paths_rationale_760", "target": "unit_test_paths_test_evaluate_setup_state_no_orchestrator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L760", "weight": 1.0}, {"source": "unit_test_paths_rationale_773", "target": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L773", "weight": 1.0}, {"source": "unit_test_paths_rationale_789", "target": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L789", "weight": 1.0}, {"source": "unit_test_paths_rationale_806", "target": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L806", "weight": 1.0}, {"source": "unit_test_paths_rationale_837", "target": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L837", "weight": 1.0}, {"source": "unit_test_paths_rationale_868", "target": "unit_test_paths_test_evaluate_setup_state_keyring_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L868", "weight": 1.0}, {"source": "unit_test_paths_rationale_877", "target": "unit_test_paths_test_evaluate_setup_state_nas_keyring_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L877", "weight": 1.0}, {"source": "unit_test_paths_rationale_884", "target": "unit_test_paths_test_evaluate_setup_state_nas_state_precedes_lims_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L884", "weight": 1.0}, {"source": "unit_test_paths_rationale_896", "target": "unit_test_paths_test_evaluate_setup_state_nas_state_resolves_once_password_added", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L896", "weight": 1.0}, {"source": "unit_test_paths_rationale_906", "target": "unit_test_paths_test_setup_state_missing_for_no_nas_credential_lists_per_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L906", "weight": 1.0}, {"source": "unit_test_paths_rationale_929", "target": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L929", "weight": 1.0}, {"source": "unit_test_paths_rationale_981", "target": "unit_test_paths_test_setup_state_missing_when_lims_unreachable_returns_empty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L981", "weight": 1.0}, {"source": "unit_test_paths_rationale_1019", "target": "unit_test_paths_test_setup_state_missing_for_missing_paths_with_none_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1019", "weight": 1.0}, {"source": "unit_test_paths_rationale_1030", "target": "unit_test_paths_test_setup_state_missing_for_no_lims_with_none_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1030", "weight": 1.0}, {"source": "unit_test_paths_rationale_1038", "target": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1038", "weight": 1.0}, {"source": "unit_test_paths_rationale_1064", "target": "unit_test_paths_test_setup_state_missing_unrecognized_state_returns_empty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1064", "weight": 1.0}], "raw_calls": [{"caller_nid": "unit_test_paths_make_equipment", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L54"}, {"caller_nid": "unit_test_paths_make_orchestrator", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L74"}, {"caller_nid": "unit_test_paths_ready_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L89"}, {"caller_nid": "unit_test_paths_ready_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L90"}, {"caller_nid": "unit_test_paths_ready_config", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L95"}, {"caller_nid": "unit_test_paths_ready_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L97"}, {"caller_nid": "unit_test_paths_fake_home", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L108"}, {"caller_nid": "unit_test_paths_fake_home", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L109"}, {"caller_nid": "unit_test_paths_fake_home", "callee": "classmethod", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L109"}, {"caller_nid": "unit_test_paths_fake_home", "callee": "delenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L119"}, {"caller_nid": "unit_test_paths_test_os_config_path_macos", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L129"}, {"caller_nid": "unit_test_paths_test_os_config_path_macos", "callee": "os_config_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L131"}, {"caller_nid": "unit_test_paths_test_os_config_path_windows", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L135"}, {"caller_nid": "unit_test_paths_test_os_config_path_windows", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L137"}, {"caller_nid": "unit_test_paths_test_os_config_path_windows", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L137"}, {"caller_nid": "unit_test_paths_test_os_config_path_windows", "callee": "os_config_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L139"}, {"caller_nid": "unit_test_paths_test_os_config_path_linux_with_xdg", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L143"}, {"caller_nid": "unit_test_paths_test_os_config_path_linux_with_xdg", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L145"}, {"caller_nid": "unit_test_paths_test_os_config_path_linux_with_xdg", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L145"}, {"caller_nid": "unit_test_paths_test_os_config_path_linux_with_xdg", "callee": "os_config_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L147"}, {"caller_nid": "unit_test_paths_test_os_config_path_linux_without_xdg", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L151"}, {"caller_nid": "unit_test_paths_test_os_config_path_linux_without_xdg", "callee": "os_config_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L153"}, {"caller_nid": "unit_test_paths_test_os_state_path_macos", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L162"}, {"caller_nid": "unit_test_paths_test_os_state_path_macos", "callee": "os_state_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L164"}, {"caller_nid": "unit_test_paths_test_os_state_path_windows", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L168"}, {"caller_nid": "unit_test_paths_test_os_state_path_windows", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L170"}, {"caller_nid": "unit_test_paths_test_os_state_path_windows", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L170"}, {"caller_nid": "unit_test_paths_test_os_state_path_windows", "callee": "os_state_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L172"}, {"caller_nid": "unit_test_paths_test_os_state_path_linux_with_xdg", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L176"}, {"caller_nid": "unit_test_paths_test_os_state_path_linux_with_xdg", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L178"}, {"caller_nid": "unit_test_paths_test_os_state_path_linux_with_xdg", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L178"}, {"caller_nid": "unit_test_paths_test_os_state_path_linux_with_xdg", "callee": "os_state_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L180"}, {"caller_nid": "unit_test_paths_test_os_state_path_linux_without_xdg", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L184"}, {"caller_nid": "unit_test_paths_test_os_state_path_linux_without_xdg", "callee": "os_state_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L186"}, {"caller_nid": "unit_test_paths_test_os_cache_path_macos", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L195"}, {"caller_nid": "unit_test_paths_test_os_cache_path_macos", "callee": "os_cache_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L197"}, {"caller_nid": "unit_test_paths_test_os_cache_path_windows", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L201"}, {"caller_nid": "unit_test_paths_test_os_cache_path_windows", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L203"}, {"caller_nid": "unit_test_paths_test_os_cache_path_windows", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L203"}, {"caller_nid": "unit_test_paths_test_os_cache_path_windows", "callee": "os_cache_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L205"}, {"caller_nid": "unit_test_paths_test_os_cache_path_linux_with_xdg", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L209"}, {"caller_nid": "unit_test_paths_test_os_cache_path_linux_with_xdg", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L211"}, {"caller_nid": "unit_test_paths_test_os_cache_path_linux_with_xdg", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L211"}, {"caller_nid": "unit_test_paths_test_os_cache_path_linux_with_xdg", "callee": "os_cache_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L213"}, {"caller_nid": "unit_test_paths_test_os_cache_path_linux_without_xdg", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L217"}, {"caller_nid": "unit_test_paths_test_os_cache_path_linux_without_xdg", "callee": "os_cache_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L219"}, {"caller_nid": "unit_test_paths_test_os_central_log_path_macos", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L228"}, {"caller_nid": "unit_test_paths_test_os_central_log_path_macos", "callee": "os_central_log_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L230"}, {"caller_nid": "unit_test_paths_test_os_central_log_path_windows", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L234"}, {"caller_nid": "unit_test_paths_test_os_central_log_path_windows", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L236"}, {"caller_nid": "unit_test_paths_test_os_central_log_path_windows", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L236"}, {"caller_nid": "unit_test_paths_test_os_central_log_path_windows", "callee": "os_central_log_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L238"}, {"caller_nid": "unit_test_paths_test_os_central_log_path_linux_with_xdg", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L244"}, {"caller_nid": "unit_test_paths_test_os_central_log_path_linux_with_xdg", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L246"}, {"caller_nid": "unit_test_paths_test_os_central_log_path_linux_with_xdg", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L246"}, {"caller_nid": "unit_test_paths_test_os_central_log_path_linux_with_xdg", "callee": "os_central_log_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L248"}, {"caller_nid": "unit_test_paths_test_os_central_log_path_linux_without_xdg", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L254"}, {"caller_nid": "unit_test_paths_test_os_central_log_path_linux_without_xdg", "callee": "os_central_log_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L256"}, {"caller_nid": "unit_test_paths_test_suggested_staging_root_linux_fallback", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L271"}, {"caller_nid": "unit_test_paths_test_suggested_staging_root_linux_fallback", "callee": "suggested_staging_root", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L273"}, {"caller_nid": "unit_test_paths_test_suggested_staging_root_linux_honors_xdg_data_home", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L279"}, {"caller_nid": "unit_test_paths_test_suggested_staging_root_linux_honors_xdg_data_home", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L281"}, {"caller_nid": "unit_test_paths_test_suggested_staging_root_linux_honors_xdg_data_home", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L281"}, {"caller_nid": "unit_test_paths_test_suggested_staging_root_linux_honors_xdg_data_home", "callee": "suggested_staging_root", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L282"}, {"caller_nid": "unit_test_paths_test_suggested_staging_root_macos", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L288"}, {"caller_nid": "unit_test_paths_test_suggested_staging_root_macos", "callee": "suggested_staging_root", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L290"}, {"caller_nid": "unit_test_paths_test_suggested_staging_root_windows", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L296"}, {"caller_nid": "unit_test_paths_test_suggested_staging_root_windows", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L298"}, {"caller_nid": "unit_test_paths_test_suggested_staging_root_windows", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L298"}, {"caller_nid": "unit_test_paths_test_suggested_staging_root_windows", "callee": "suggested_staging_root", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L300"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_os_config_path", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L319"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_os_config_path", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L320"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_os_config_path", "callee": "os_config_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L322"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_os_state_path", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L326"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_os_state_path", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L327"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_os_state_path", "callee": "os_state_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L329"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_os_cache_path", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L333"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_os_cache_path", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L334"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_os_cache_path", "callee": "os_cache_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L336"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_os_central_log_path", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L342"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_os_central_log_path", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L343"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_os_central_log_path", "callee": "os_central_log_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L345"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_suggested_staging_root", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L353"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_suggested_staging_root", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L354"}, {"caller_nid": "unit_test_paths_test_test_mode_suffixes_suggested_staging_root", "callee": "suggested_staging_root", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L356"}, {"caller_nid": "unit_test_paths_test_test_mode_off_does_not_suffix", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L361"}, {"caller_nid": "unit_test_paths_test_test_mode_off_does_not_suffix", "callee": "delenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L362"}, {"caller_nid": "unit_test_paths_test_test_mode_off_does_not_suffix", "callee": "os_config_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L363"}, {"caller_nid": "unit_test_paths_test_test_mode_off_does_not_suffix", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L366"}, {"caller_nid": "unit_test_paths_test_test_mode_off_does_not_suffix", "callee": "os_config_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L368"}, {"caller_nid": "unit_test_paths_test_ensure_dir_creates_missing", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L380"}, {"caller_nid": "unit_test_paths_test_ensure_dir_creates_missing", "callee": "ensure_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L381"}, {"caller_nid": "unit_test_paths_test_ensure_dir_creates_missing", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L383"}, {"caller_nid": "unit_test_paths_test_ensure_dir_idempotent_when_exists", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L388"}, {"caller_nid": "unit_test_paths_test_ensure_dir_idempotent_when_exists", "callee": "ensure_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L390"}, {"caller_nid": "unit_test_paths_test_ensure_dir_idempotent_when_exists", "callee": "ensure_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L391"}, {"caller_nid": "unit_test_paths_test_ensure_dir_idempotent_when_exists", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L392"}, {"caller_nid": "unit_test_paths_test_ensure_state_dir_creates_state_dir", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L398"}, {"caller_nid": "unit_test_paths_test_ensure_state_dir_creates_state_dir", "callee": "ensure_state_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L399"}, {"caller_nid": "unit_test_paths_test_ensure_state_dir_creates_state_dir", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L400"}, {"caller_nid": "unit_test_paths_test_ensure_state_dir_creates_state_dir", "callee": "os_state_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L401"}, {"caller_nid": "unit_test_paths_test_ensure_central_log_dir_creates_parent", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L407"}, {"caller_nid": "unit_test_paths_test_ensure_central_log_dir_creates_parent", "callee": "ensure_central_log_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L408"}, {"caller_nid": "unit_test_paths_test_ensure_central_log_dir_creates_parent", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L409"}, {"caller_nid": "unit_test_paths_test_ensure_central_log_dir_creates_parent", "callee": "os_central_log_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L410"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_accepts_canonical", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L419"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_accepts_other_canonical_examples", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L427"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_lowercase", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L431"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_lowercase", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L432"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_hyphen", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L436"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_hyphen", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L437"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_leading_digit", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L441"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_leading_digit", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L442"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_space", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L446"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_space", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L447"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_non_ascii", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L451"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_non_ascii", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L452"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_too_long", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L457"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_too_long", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L458"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_too_long", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L459"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_too_long", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L460"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_too_long", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L460"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_accepts_max_length", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L465"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_empty", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L469"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_empty", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L470"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_none", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L475"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_none", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L476"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_none", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L477"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_int", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L482"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_int", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L483"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_int", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L484"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_rejects_int", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L485"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_does_not_mutate_input", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L490"}, {"caller_nid": "unit_test_paths_test_canonicalize_equipment_id_does_not_mutate_input", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L491"}, {"caller_nid": "unit_test_paths_test_compose_run_path_experimental", "callee": "compose_run_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L507"}, {"caller_nid": "unit_test_paths_test_compose_run_path_test", "callee": "compose_run_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L519"}, {"caller_nid": "unit_test_paths_test_compose_run_path_strftime_format", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L535"}, {"caller_nid": "unit_test_paths_test_compose_run_path_strftime_format", "callee": "compose_run_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L536"}, {"caller_nid": "unit_test_paths_test_compose_run_path_strftime_format", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L537"}, {"caller_nid": "unit_test_paths_test_compose_run_path_experimental_under_runs_subdir", "callee": "compose_run_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L549"}, {"caller_nid": "unit_test_paths_test_compose_run_path_experimental_under_runs_subdir", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L550"}, {"caller_nid": "unit_test_paths_test_compose_run_path_same_minute_collision_returns_same_path", "callee": "compose_run_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L563"}, {"caller_nid": "unit_test_paths_test_compose_run_path_same_minute_collision_returns_same_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L564"}, {"caller_nid": "unit_test_paths_test_compose_run_path_same_minute_collision_returns_same_path", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L568"}, {"caller_nid": "unit_test_paths_test_compose_run_path_same_minute_collision_returns_same_path", "callee": "compose_run_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L570"}, {"caller_nid": "unit_test_paths_test_compose_run_path_same_minute_collision_returns_same_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L571"}, {"caller_nid": "unit_test_paths_test_compose_run_path_same_minute_collision_returns_same_path", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L575"}, {"caller_nid": "unit_test_paths_test_compose_run_path_rejects_invalid_equipment_id", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L582"}, {"caller_nid": "unit_test_paths_test_compose_run_path_rejects_invalid_equipment_id", "callee": "compose_run_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L583"}, {"caller_nid": "unit_test_paths_test_compose_run_path_rejects_unsafe_project_name", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L593"}, {"caller_nid": "unit_test_paths_test_compose_run_path_rejects_unsafe_project_name", "callee": "compose_run_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L594"}, {"caller_nid": "unit_test_paths_test_compose_project_path_basic", "callee": "compose_project_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L604"}, {"caller_nid": "unit_test_paths_test_compose_project_path_rejects_invalid_equipment_id", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L614"}, {"caller_nid": "unit_test_paths_test_compose_project_path_rejects_invalid_equipment_id", "callee": "compose_project_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L615"}, {"caller_nid": "unit_test_paths_test_compose_project_path_rejects_unsafe_project_name", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L623"}, {"caller_nid": "unit_test_paths_test_compose_project_path_rejects_unsafe_project_name", "callee": "compose_project_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L624"}, {"caller_nid": "unit_test_paths_test_compose_run_path_rejects_non_str_project_name", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L633"}, {"caller_nid": "unit_test_paths_test_compose_run_path_rejects_non_str_project_name", "callee": "compose_run_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L634"}, {"caller_nid": "unit_test_paths_test_compose_run_path_rejects_non_str_project_name", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L641"}, {"caller_nid": "unit_test_paths_test_compose_run_path_rejects_empty_project_name", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L646"}, {"caller_nid": "unit_test_paths_test_compose_run_path_rejects_empty_project_name", "callee": "compose_run_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L647"}, {"caller_nid": "unit_test_paths_test_compose_run_path_rejects_empty_project_name", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L654"}, {"caller_nid": "unit_test_paths_test_compose_project_path_rejects_non_str_project_name", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L658"}, {"caller_nid": "unit_test_paths_test_compose_project_path_rejects_non_str_project_name", "callee": "compose_project_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L659"}, {"caller_nid": "unit_test_paths_test_compose_project_path_rejects_non_str_project_name", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L664"}, {"caller_nid": "unit_test_paths_test_validate_project_name_accepts_human_readable_names", "callee": "validate_project_name", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L675"}, {"caller_nid": "unit_test_paths_test_validate_project_name_accepts_human_readable_names", "callee": "project_name_violations", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L676"}, {"caller_nid": "unit_test_paths_test_validate_project_name_rejects_unsafe_names", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L697"}, {"caller_nid": "unit_test_paths_test_validate_project_name_rejects_unsafe_names", "callee": "validate_project_name", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L698"}, {"caller_nid": "unit_test_paths_test_validate_project_name_rejects_unsafe_names", "callee": "project_name_violations", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L699"}, {"caller_nid": "unit_test_paths_test_validate_project_name_rejects_overlong_name", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L703"}, {"caller_nid": "unit_test_paths_test_validate_project_name_rejects_overlong_name", "callee": "validate_project_name", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L704"}, {"caller_nid": "unit_test_paths_test_validate_project_name_rejects_overlong_name", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L705"}, {"caller_nid": "unit_test_paths_test_validate_project_name_does_not_mutate_input", "callee": "validate_project_name", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L711"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_config", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L720"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_missing_paths", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L724"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_missing_paths", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L725"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_missing_paths", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L729"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L734"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L735"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L743"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_equipment", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L747"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_equipment", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L748"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_equipment", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L756"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_orchestrator", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L761"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_orchestrator", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L762"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_orchestrator", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L769"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L776"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L777"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L783"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L785"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L792"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L793"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L798"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L800"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L802"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L809"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L810"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L816"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", "callee": "setup_state_missing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L818"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_lims", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L823"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_lims", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L824"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_lims", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L829"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_no_lims", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L833"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L838"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L839"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L844"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L853"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_lims_unreachable", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L859"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_ready", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L864"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_keyring_missing", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L871"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_nas_keyring_missing", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L879"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_nas_state_precedes_lims_state", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L886"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_nas_state_resolves_once_password_added", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L898"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_nas_credential_lists_per_equipment", "callee": "setup_state_missing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L910"}, {"caller_nid": "unit_test_paths_test_setup_state_next_action_for_no_nas_credential", "callee": "setup_state_next_action", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L923"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L930"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L931"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L936"}, {"caller_nid": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", "callee": "evaluate_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L940"}, {"caller_nid": "unit_test_paths_test_setup_state_next_action_table", "callee": "setup_state_next_action", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L960"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_when_no_config", "callee": "setup_state_missing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L969"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_when_no_config", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L973"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_when_no_config", "callee": "keys", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L973"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_when_ready", "callee": "setup_state_missing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L977"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_when_lims_unreachable_returns_empty", "callee": "setup_state_missing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L982"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_paths_lists_each_unset", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L986"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_paths_lists_each_unset", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L987"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_paths_lists_each_unset", "callee": "setup_state_missing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L989"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_equipment", "callee": "setup_state_missing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L997"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_equipment", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L998"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1002"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1003"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1008"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", "callee": "setup_state_missing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1012"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_missing_paths_with_none_config", "callee": "setup_state_missing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1022"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_lims_with_none_config", "callee": "setup_state_missing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1033"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1040"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1041"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1046"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", "callee": "setup_state_missing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1054"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_unrecognized_state_returns_empty", "callee": "setup_state_missing", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1077"}, {"caller_nid": "unit_test_paths_test_setup_state_missing_unrecognized_state_returns_empty", "callee": "_BogusState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py", "source_location": "L1077"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/6f09a917ae5ded44abaed20c23e19231d08e35256a8bba69415f0b1e9210c485.json b/graphify-out/cache/ast/6f09a917ae5ded44abaed20c23e19231d08e35256a8bba69415f0b1e9210c485.json new file mode 100644 index 0000000..55de142 --- /dev/null +++ b/graphify-out/cache/ast/6f09a917ae5ded44abaed20c23e19231d08e35256a8bba69415f0b1e9210c485.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/__init__.py", "source_location": "L1"}, {"id": "api_init_rationale_1", "label": "HTTP API package. Backend Spec \u00a74. Public re-exports so callers (the launcher,", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_init_py", "target": "exlab_wizard_api_app", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/__init__.py", "source_location": "L7", "weight": 1.0}, {"source": "api_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/6f9b0988ae58214f2d6372a6b23554b6c6988c4de7a204ad43f80b8d51f44a26.json b/graphify-out/cache/ast/6f9b0988ae58214f2d6372a6b23554b6c6988c4de7a204ad43f80b8d51f44a26.json new file mode 100644 index 0000000..d9fcbec --- /dev/null +++ b/graphify-out/cache/ast/6f9b0988ae58214f2d6372a6b23554b6c6988c4de7a204ad43f80b8d51f44a26.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_window_pywebview_app_py", "label": "pywebview_app.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L1"}, {"id": "window_pywebview_app_build_window_url", "label": "build_window_url()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L42"}, {"id": "window_pywebview_app_is_debug_enabled", "label": "is_debug_enabled()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L51"}, {"id": "window_pywebview_app_run_window", "label": "run_window()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L59"}, {"id": "window_pywebview_app_import_webview", "label": "_import_webview()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L93"}, {"id": "window_pywebview_app_rationale_1", "label": "pywebview-driven native window. Backend Spec \u00a715.3.2. Opens a single pywebview", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L1"}, {"id": "window_pywebview_app_rationale_43", "label": "Return the URL the window points at. Always loopback (Backend \u00a74.1: \"binds", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L43"}, {"id": "window_pywebview_app_rationale_52", "label": "True when ``EXLAB_DEBUG`` is set to a truthy string. Backend \u00a715.3.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L52"}, {"id": "window_pywebview_app_rationale_65", "label": "Open a single pywebview window pointed at the handshake's port. ``create_wi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L65"}, {"id": "window_pywebview_app_rationale_94", "label": "Lazily import pywebview to keep the module import cheap.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L94"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_pywebview_app_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_pywebview_app_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_pywebview_app_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_pywebview_app_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_pywebview_app_py", "target": "exlab_wizard_window_main", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_pywebview_app_py", "target": "window_pywebview_app_build_window_url", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_pywebview_app_py", "target": "window_pywebview_app_is_debug_enabled", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_pywebview_app_py", "target": "window_pywebview_app_run_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_pywebview_app_py", "target": "window_pywebview_app_import_webview", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L93", "weight": 1.0}, {"source": "window_pywebview_app_run_window", "target": "window_pywebview_app_build_window_url", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L71", "weight": 1.0}, {"source": "window_pywebview_app_run_window", "target": "window_pywebview_app_is_debug_enabled", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L72", "weight": 1.0}, {"source": "window_pywebview_app_run_window", "target": "window_pywebview_app_import_webview", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L76", "weight": 1.0}, {"source": "window_pywebview_app_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_window_pywebview_app_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L1", "weight": 1.0}, {"source": "window_pywebview_app_rationale_43", "target": "window_pywebview_app_build_window_url", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L43", "weight": 1.0}, {"source": "window_pywebview_app_rationale_52", "target": "window_pywebview_app_is_debug_enabled", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L52", "weight": 1.0}, {"source": "window_pywebview_app_rationale_65", "target": "window_pywebview_app_run_window", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L65", "weight": 1.0}, {"source": "window_pywebview_app_rationale_94", "target": "window_pywebview_app_import_webview", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L94", "weight": 1.0}], "raw_calls": [{"caller_nid": "window_pywebview_app_build_window_url", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L48"}, {"caller_nid": "window_pywebview_app_is_debug_enabled", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L53"}, {"caller_nid": "window_pywebview_app_is_debug_enabled", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L56"}, {"caller_nid": "window_pywebview_app_is_debug_enabled", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L56"}, {"caller_nid": "window_pywebview_app_run_window", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L73"}, {"caller_nid": "window_pywebview_app_run_window", "callee": "create_window", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L82"}, {"caller_nid": "window_pywebview_app_run_window", "callee": "start", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py", "source_location": "L89"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/6fdcae056da1f051037a05e4ab6fbe26836c0950cd0c680b2e6da60deb044898.json b/graphify-out/cache/ast/6fdcae056da1f051037a05e4ab6fbe26836c0950cd0c680b2e6da60deb044898.json new file mode 100644 index 0000000..d109346 --- /dev/null +++ b/graphify-out/cache/ast/6fdcae056da1f051037a05e4ab6fbe26836c0950cd0c680b2e6da60deb044898.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "label": "test_session_store.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L1"}, {"id": "controller_test_session_store_test_open_returns_fresh_pending_session", "label": "test_open_returns_fresh_pending_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L36"}, {"id": "controller_test_session_store_test_open_assigns_uuid4_session_id", "label": "test_open_assigns_uuid4_session_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L46"}, {"id": "controller_test_session_store_test_open_two_sessions_get_distinct_ids", "label": "test_open_two_sessions_get_distinct_ids()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L54"}, {"id": "controller_test_session_store_test_open_sets_created_at_and_last_heartbeat_to_now", "label": "test_open_sets_created_at_and_last_heartbeat_to_now()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L61"}, {"id": "controller_test_session_store_test_get_returns_none_for_unknown_session_id", "label": "test_get_returns_none_for_unknown_session_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L75"}, {"id": "controller_test_session_store_test_get_returns_session_after_open", "label": "test_get_returns_session_after_open()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L80"}, {"id": "controller_test_session_store_test_iter_sorted_returns_pairs_oldest_created_first", "label": "test_iter_sorted_returns_pairs_oldest_created_first()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L87"}, {"id": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", "label": "test_gc_publishes_terminal_frame_to_live_subscriber()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L98"}, {"id": "controller_test_session_store_test_project_identifier_prefers_short_id_then_falls_back_to_project_name", "label": "test_project_identifier_prefers_short_id_then_falls_back_to_project_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L120"}, {"id": "controller_test_session_store_test_transition_updates_state_and_phase_together", "label": "test_transition_updates_state_and_phase_together()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L136"}, {"id": "controller_test_session_store_test_transition_to_input_required_sets_next_action_awaiting_input", "label": "test_transition_to_input_required_sets_next_action_awaiting_input()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L144"}, {"id": "controller_test_session_store_test_transition_back_to_plugin_pass_clears_next_action", "label": "test_transition_back_to_plugin_pass_clears_next_action()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L154"}, {"id": "controller_test_session_store_test_transition_rejects_unknown_session_id", "label": "test_transition_rejects_unknown_session_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L169"}, {"id": "controller_test_session_store_test_transition_rejects_illegal_state_transition", "label": "test_transition_rejects_illegal_state_transition()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L175"}, {"id": "controller_test_session_store_test_attach_event_queue_wires_queue_to_session", "label": "test_attach_event_queue_wires_queue_to_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L187"}, {"id": "controller_test_session_store_test_attach_event_queue_rejects_unknown_session_id", "label": "test_attach_event_queue_rejects_unknown_session_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L195"}, {"id": "controller_test_session_store_test_heartbeat_updates_last_heartbeat", "label": "test_heartbeat_updates_last_heartbeat()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L207"}, {"id": "controller_test_session_store_test_heartbeat_is_noop_for_unknown_session", "label": "test_heartbeat_is_noop_for_unknown_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L217"}, {"id": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", "label": "test_abandoned_older_than_returns_only_input_required_sessions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L228"}, {"id": "controller_test_session_store_test_abandoned_older_than_skips_recent_input_required_sessions", "label": "test_abandoned_older_than_skips_recent_input_required_sessions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L250"}, {"id": "controller_test_session_store_test_abandoned_older_than_returns_empty_when_no_sessions_exist", "label": "test_abandoned_older_than_returns_empty_when_no_sessions_exist()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L265"}, {"id": "controller_test_session_store_test_close_stores_outcome_for_done_session", "label": "test_close_stores_outcome_for_done_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L275"}, {"id": "controller_test_session_store_test_close_stores_outcome_in_error_for_failed_session", "label": "test_close_stores_outcome_in_error_for_failed_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L294"}, {"id": "controller_test_session_store_test_close_is_noop_for_unknown_session", "label": "test_close_is_noop_for_unknown_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L304"}, {"id": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", "label": "test_gc_loop_closes_abandoned_input_required_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L315"}, {"id": "controller_test_session_store_test_gc_loop_periodically_runs_and_can_be_cancelled", "label": "test_gc_loop_periodically_runs_and_can_be_cancelled()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L339"}, {"id": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", "label": "test_gc_loop_skips_non_input_required_sessions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L350"}, {"id": "controller_test_session_store_test_session_is_terminal_for_terminal_states", "label": "test_session_is_terminal_for_terminal_states()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L366"}, {"id": "controller_test_session_store_test_session_is_terminal_false_for_non_terminal_states", "label": "test_session_is_terminal_false_for_non_terminal_states()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L382"}, {"id": "controller_test_session_store_rationale_1", "label": "Tests for ``exlab_wizard.controller.session_store``. The session store is the i", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L1"}, {"id": "controller_test_session_store_rationale_99", "label": "An abandoned-session GC pass must wake a live ``subscribe()`` consumer. The", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L99"}, {"id": "controller_test_session_store_rationale_316", "label": "The GC pass moves abandoned ``INPUT_REQUIRED`` sessions to ``ABORTED``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L316"}, {"id": "controller_test_session_store_rationale_340", "label": "The ``gc_loop`` runs forever until cancelled.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L340"}, {"id": "controller_test_session_store_rationale_351", "label": "Even with a stale heartbeat, only INPUT_REQUIRED sessions are GC'd.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L351"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "uuid", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "exlab_wizard_controller_session_store", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "exlab_wizard_controller_state_machine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_open_returns_fresh_pending_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_open_assigns_uuid4_session_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_open_two_sessions_get_distinct_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L54", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_open_sets_created_at_and_last_heartbeat_to_now", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L61", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_get_returns_none_for_unknown_session_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L75", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_get_returns_session_after_open", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L80", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_iter_sorted_returns_pairs_oldest_created_first", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L87", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L98", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_project_identifier_prefers_short_id_then_falls_back_to_project_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L120", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_transition_updates_state_and_phase_together", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L136", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_transition_to_input_required_sets_next_action_awaiting_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L144", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_transition_back_to_plugin_pass_clears_next_action", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L154", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_transition_rejects_unknown_session_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L169", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_transition_rejects_illegal_state_transition", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L175", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_attach_event_queue_wires_queue_to_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L187", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_attach_event_queue_rejects_unknown_session_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L195", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_heartbeat_updates_last_heartbeat", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L207", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_heartbeat_is_noop_for_unknown_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L217", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L228", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_abandoned_older_than_skips_recent_input_required_sessions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L250", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_abandoned_older_than_returns_empty_when_no_sessions_exist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L265", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_close_stores_outcome_for_done_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L275", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_close_stores_outcome_in_error_for_failed_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L294", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_close_is_noop_for_unknown_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L304", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L315", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_gc_loop_periodically_runs_and_can_be_cancelled", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L339", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L350", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_session_is_terminal_for_terminal_states", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L366", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "target": "controller_test_session_store_test_session_is_terminal_false_for_non_terminal_states", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L382", "weight": 1.0}, {"source": "controller_test_session_store_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_controller_test_session_store_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L1", "weight": 1.0}, {"source": "controller_test_session_store_rationale_99", "target": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L99", "weight": 1.0}, {"source": "controller_test_session_store_rationale_316", "target": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L316", "weight": 1.0}, {"source": "controller_test_session_store_rationale_340", "target": "controller_test_session_store_test_gc_loop_periodically_runs_and_can_be_cancelled", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L340", "weight": 1.0}, {"source": "controller_test_session_store_rationale_351", "target": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L351", "weight": 1.0}], "raw_calls": [{"caller_nid": "controller_test_session_store_test_open_returns_fresh_pending_session", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L37"}, {"caller_nid": "controller_test_session_store_test_open_returns_fresh_pending_session", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L38"}, {"caller_nid": "controller_test_session_store_test_open_assigns_uuid4_session_id", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L47"}, {"caller_nid": "controller_test_session_store_test_open_assigns_uuid4_session_id", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L48"}, {"caller_nid": "controller_test_session_store_test_open_assigns_uuid4_session_id", "callee": "UUID", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L50"}, {"caller_nid": "controller_test_session_store_test_open_two_sessions_get_distinct_ids", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L55"}, {"caller_nid": "controller_test_session_store_test_open_two_sessions_get_distinct_ids", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L56"}, {"caller_nid": "controller_test_session_store_test_open_two_sessions_get_distinct_ids", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L57"}, {"caller_nid": "controller_test_session_store_test_open_sets_created_at_and_last_heartbeat_to_now", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L62"}, {"caller_nid": "controller_test_session_store_test_open_sets_created_at_and_last_heartbeat_to_now", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L63"}, {"caller_nid": "controller_test_session_store_test_open_sets_created_at_and_last_heartbeat_to_now", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L64"}, {"caller_nid": "controller_test_session_store_test_open_sets_created_at_and_last_heartbeat_to_now", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L65"}, {"caller_nid": "controller_test_session_store_test_get_returns_none_for_unknown_session_id", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L76"}, {"caller_nid": "controller_test_session_store_test_get_returns_none_for_unknown_session_id", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L77"}, {"caller_nid": "controller_test_session_store_test_get_returns_session_after_open", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L81"}, {"caller_nid": "controller_test_session_store_test_get_returns_session_after_open", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L82"}, {"caller_nid": "controller_test_session_store_test_get_returns_session_after_open", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L83"}, {"caller_nid": "controller_test_session_store_test_iter_sorted_returns_pairs_oldest_created_first", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L88"}, {"caller_nid": "controller_test_session_store_test_iter_sorted_returns_pairs_oldest_created_first", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L89"}, {"caller_nid": "controller_test_session_store_test_iter_sorted_returns_pairs_oldest_created_first", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L90"}, {"caller_nid": "controller_test_session_store_test_iter_sorted_returns_pairs_oldest_created_first", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L92"}, {"caller_nid": "controller_test_session_store_test_iter_sorted_returns_pairs_oldest_created_first", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L92"}, {"caller_nid": "controller_test_session_store_test_iter_sorted_returns_pairs_oldest_created_first", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L93"}, {"caller_nid": "controller_test_session_store_test_iter_sorted_returns_pairs_oldest_created_first", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L93"}, {"caller_nid": "controller_test_session_store_test_iter_sorted_returns_pairs_oldest_created_first", "callee": "iter_sorted", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L94"}, {"caller_nid": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L105"}, {"caller_nid": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L106"}, {"caller_nid": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L107"}, {"caller_nid": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L109"}, {"caller_nid": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", "callee": "Queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L110"}, {"caller_nid": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", "callee": "_gc_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L113"}, {"caller_nid": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L113"}, {"caller_nid": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", "callee": "get_nowait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L115"}, {"caller_nid": "controller_test_session_store_test_project_identifier_prefers_short_id_then_falls_back_to_project_name", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L123"}, {"caller_nid": "controller_test_session_store_test_project_identifier_prefers_short_id_then_falls_back_to_project_name", "callee": "project_identifier", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L124"}, {"caller_nid": "controller_test_session_store_test_project_identifier_prefers_short_id_then_falls_back_to_project_name", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L125"}, {"caller_nid": "controller_test_session_store_test_project_identifier_prefers_short_id_then_falls_back_to_project_name", "callee": "project_identifier", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L126"}, {"caller_nid": "controller_test_session_store_test_project_identifier_prefers_short_id_then_falls_back_to_project_name", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L127"}, {"caller_nid": "controller_test_session_store_test_project_identifier_prefers_short_id_then_falls_back_to_project_name", "callee": "project_identifier", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L128"}, {"caller_nid": "controller_test_session_store_test_transition_updates_state_and_phase_together", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L137"}, {"caller_nid": "controller_test_session_store_test_transition_updates_state_and_phase_together", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L138"}, {"caller_nid": "controller_test_session_store_test_transition_updates_state_and_phase_together", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L139"}, {"caller_nid": "controller_test_session_store_test_transition_to_input_required_sets_next_action_awaiting_input", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L145"}, {"caller_nid": "controller_test_session_store_test_transition_to_input_required_sets_next_action_awaiting_input", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L146"}, {"caller_nid": "controller_test_session_store_test_transition_to_input_required_sets_next_action_awaiting_input", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L147"}, {"caller_nid": "controller_test_session_store_test_transition_to_input_required_sets_next_action_awaiting_input", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L148"}, {"caller_nid": "controller_test_session_store_test_transition_to_input_required_sets_next_action_awaiting_input", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L149"}, {"caller_nid": "controller_test_session_store_test_transition_to_input_required_sets_next_action_awaiting_input", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L150"}, {"caller_nid": "controller_test_session_store_test_transition_back_to_plugin_pass_clears_next_action", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L155"}, {"caller_nid": "controller_test_session_store_test_transition_back_to_plugin_pass_clears_next_action", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L156"}, {"caller_nid": "controller_test_session_store_test_transition_back_to_plugin_pass_clears_next_action", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L163"}, {"caller_nid": "controller_test_session_store_test_transition_back_to_plugin_pass_clears_next_action", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L165"}, {"caller_nid": "controller_test_session_store_test_transition_rejects_unknown_session_id", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L170"}, {"caller_nid": "controller_test_session_store_test_transition_rejects_unknown_session_id", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L171"}, {"caller_nid": "controller_test_session_store_test_transition_rejects_unknown_session_id", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L172"}, {"caller_nid": "controller_test_session_store_test_transition_rejects_illegal_state_transition", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L176"}, {"caller_nid": "controller_test_session_store_test_transition_rejects_illegal_state_transition", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L177"}, {"caller_nid": "controller_test_session_store_test_transition_rejects_illegal_state_transition", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L178"}, {"caller_nid": "controller_test_session_store_test_transition_rejects_illegal_state_transition", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L179"}, {"caller_nid": "controller_test_session_store_test_attach_event_queue_wires_queue_to_session", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L188"}, {"caller_nid": "controller_test_session_store_test_attach_event_queue_wires_queue_to_session", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L189"}, {"caller_nid": "controller_test_session_store_test_attach_event_queue_wires_queue_to_session", "callee": "Queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L190"}, {"caller_nid": "controller_test_session_store_test_attach_event_queue_wires_queue_to_session", "callee": "attach_event_queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L191"}, {"caller_nid": "controller_test_session_store_test_attach_event_queue_rejects_unknown_session_id", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L196"}, {"caller_nid": "controller_test_session_store_test_attach_event_queue_rejects_unknown_session_id", "callee": "Queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L197"}, {"caller_nid": "controller_test_session_store_test_attach_event_queue_rejects_unknown_session_id", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L198"}, {"caller_nid": "controller_test_session_store_test_attach_event_queue_rejects_unknown_session_id", "callee": "attach_event_queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L199"}, {"caller_nid": "controller_test_session_store_test_heartbeat_updates_last_heartbeat", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L208"}, {"caller_nid": "controller_test_session_store_test_heartbeat_updates_last_heartbeat", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L209"}, {"caller_nid": "controller_test_session_store_test_heartbeat_updates_last_heartbeat", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L212"}, {"caller_nid": "controller_test_session_store_test_heartbeat_updates_last_heartbeat", "callee": "heartbeat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L213"}, {"caller_nid": "controller_test_session_store_test_heartbeat_is_noop_for_unknown_session", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L218"}, {"caller_nid": "controller_test_session_store_test_heartbeat_is_noop_for_unknown_session", "callee": "heartbeat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L220"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L229"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L230"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L237"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L239"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L239"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L241"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L242"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L243"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L243"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", "callee": "abandoned_older_than", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L245"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L245"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_skips_recent_input_required_sessions", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L251"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_skips_recent_input_required_sessions", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L252"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_skips_recent_input_required_sessions", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L259"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_skips_recent_input_required_sessions", "callee": "abandoned_older_than", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L261"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_skips_recent_input_required_sessions", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L261"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_empty_when_no_sessions_exist", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L266"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_empty_when_no_sessions_exist", "callee": "abandoned_older_than", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L267"}, {"caller_nid": "controller_test_session_store_test_abandoned_older_than_returns_empty_when_no_sessions_exist", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L267"}, {"caller_nid": "controller_test_session_store_test_close_stores_outcome_for_done_session", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L276"}, {"caller_nid": "controller_test_session_store_test_close_stores_outcome_for_done_session", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L277"}, {"caller_nid": "controller_test_session_store_test_close_stores_outcome_for_done_session", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L287"}, {"caller_nid": "controller_test_session_store_test_close_stores_outcome_for_done_session", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L289"}, {"caller_nid": "controller_test_session_store_test_close_stores_outcome_in_error_for_failed_session", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L295"}, {"caller_nid": "controller_test_session_store_test_close_stores_outcome_in_error_for_failed_session", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L296"}, {"caller_nid": "controller_test_session_store_test_close_stores_outcome_in_error_for_failed_session", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L297"}, {"caller_nid": "controller_test_session_store_test_close_stores_outcome_in_error_for_failed_session", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L299"}, {"caller_nid": "controller_test_session_store_test_close_is_noop_for_unknown_session", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L305"}, {"caller_nid": "controller_test_session_store_test_close_is_noop_for_unknown_session", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L307"}, {"caller_nid": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L317"}, {"caller_nid": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L318"}, {"caller_nid": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L325"}, {"caller_nid": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L327"}, {"caller_nid": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L327"}, {"caller_nid": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", "callee": "_gc_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L332"}, {"caller_nid": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L332"}, {"caller_nid": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L336"}, {"caller_nid": "controller_test_session_store_test_gc_loop_periodically_runs_and_can_be_cancelled", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L341"}, {"caller_nid": "controller_test_session_store_test_gc_loop_periodically_runs_and_can_be_cancelled", "callee": "create_task", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L343"}, {"caller_nid": "controller_test_session_store_test_gc_loop_periodically_runs_and_can_be_cancelled", "callee": "gc_loop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L343"}, {"caller_nid": "controller_test_session_store_test_gc_loop_periodically_runs_and_can_be_cancelled", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L344"}, {"caller_nid": "controller_test_session_store_test_gc_loop_periodically_runs_and_can_be_cancelled", "callee": "cancel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L345"}, {"caller_nid": "controller_test_session_store_test_gc_loop_periodically_runs_and_can_be_cancelled", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L346"}, {"caller_nid": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L352"}, {"caller_nid": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L353"}, {"caller_nid": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L354"}, {"caller_nid": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L355"}, {"caller_nid": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L355"}, {"caller_nid": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", "callee": "_gc_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L357"}, {"caller_nid": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L357"}, {"caller_nid": "controller_test_session_store_test_session_is_terminal_for_terminal_states", "callee": "Session", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L367"}, {"caller_nid": "controller_test_session_store_test_session_is_terminal_for_terminal_states", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L372"}, {"caller_nid": "controller_test_session_store_test_session_is_terminal_for_terminal_states", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L373"}, {"caller_nid": "controller_test_session_store_test_session_is_terminal_for_terminal_states", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L375"}, {"caller_nid": "controller_test_session_store_test_session_is_terminal_for_terminal_states", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L377"}, {"caller_nid": "controller_test_session_store_test_session_is_terminal_for_terminal_states", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L379"}, {"caller_nid": "controller_test_session_store_test_session_is_terminal_false_for_non_terminal_states", "callee": "Session", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L383"}, {"caller_nid": "controller_test_session_store_test_session_is_terminal_false_for_non_terminal_states", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L388"}, {"caller_nid": "controller_test_session_store_test_session_is_terminal_false_for_non_terminal_states", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L389"}, {"caller_nid": "controller_test_session_store_test_session_is_terminal_false_for_non_terminal_states", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py", "source_location": "L391"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/70931140f2b45a3b91939994f5fe938f96fc24fa3f30b4192df058358840d833.json b/graphify-out/cache/ast/70931140f2b45a3b91939994f5fe938f96fc24fa3f30b4192df058358840d833.json new file mode 100644 index 0000000..978503f --- /dev/null +++ b/graphify-out/cache/ast/70931140f2b45a3b91939994f5fe938f96fc24fa3f30b4192df058358840d833.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_orchestrator_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/70c86a4ae9c459d2656c318eac9fdbef3aa042ddc90ccc8a384ccd1dbf44e252.json b/graphify-out/cache/ast/70c86a4ae9c459d2656c318eac9fdbef3aa042ddc90ccc8a384ccd1dbf44e252.json new file mode 100644 index 0000000..455d902 --- /dev/null +++ b/graphify-out/cache/ast/70c86a4ae9c459d2656c318eac9fdbef3aa042ddc90ccc8a384ccd1dbf44e252.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_sync_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/__init__.py", "source_location": "L1"}, {"id": "sync_init_rationale_1", "label": "Unit tests for the NAS sync subsystem (Phase 10).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/__init__.py", "source_location": "L1"}], "edges": [{"source": "sync_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_sync_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/72b77e3dcb48399698327b442a99b76420448d2bce188bc1ace49914aa0066b8.json b/graphify-out/cache/ast/72b77e3dcb48399698327b442a99b76420448d2bce188bc1ace49914aa0066b8.json new file mode 100644 index 0000000..553b4c5 --- /dev/null +++ b/graphify-out/cache/ast/72b77e3dcb48399698327b442a99b76420448d2bce188bc1ace49914aa0066b8.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_input_required_plugin_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/__init__.py", "source_location": "L1"}, {"id": "input_required_plugin_init_rationale_1", "label": "input_required_plugin -- exercises the PluginInputRequired suspend/resume handsh", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_input_required_plugin_init_py", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_input_required_plugin_plugin_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/__init__.py", "source_location": "L3", "weight": 1.0}, {"source": "input_required_plugin_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_input_required_plugin_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/73801204ea6a86ef34eedbb20c3969681890ad904864e5c5e291ac28e2bb1c1b.json b/graphify-out/cache/ast/73801204ea6a86ef34eedbb20c3969681890ad904864e5c5e291ac28e2bb1c1b.json new file mode 100644 index 0000000..7ab1c3a --- /dev/null +++ b/graphify-out/cache/ast/73801204ea6a86ef34eedbb20c3969681890ad904864e5c5e291ac28e2bb1c1b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_travelling_badge_py", "label": "travelling_badge.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L1"}, {"id": "components_travelling_badge_badgeprops", "label": "BadgeProps", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L26"}, {"id": "components_travelling_badge_findinglocation", "label": "FindingLocation", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L34"}, {"id": "components_travelling_badge_travelling_badges", "label": "travelling_badges()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L46"}, {"id": "components_travelling_badge_shallowest_collapsed_ancestor", "label": "_shallowest_collapsed_ancestor()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L81"}, {"id": "components_travelling_badge_rationale_1", "label": "Travelling problem-badge pure function. GUI/Orchestrator Redesign \u00a74.5. Given t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L1"}, {"id": "components_travelling_badge_rationale_27", "label": "Render properties for a single tree node's badge.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L27"}, {"id": "components_travelling_badge_rationale_35", "label": "A validator finding pinned to a tree-node path. ``path`` is the slash-joine", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L35"}, {"id": "components_travelling_badge_rationale_50", "label": "Compute ``{node_id: BadgeProps}`` for every node that gets a badge. ``fold_", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L50"}, {"id": "components_travelling_badge_rationale_85", "label": "Walk root \u2192 leaf along ``path``; return the first collapsed ancestor. If ev", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L85"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_travelling_badge_py", "target": "collections", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_travelling_badge_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_travelling_badge_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_travelling_badge_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_travelling_badge_py", "target": "exlab_wizard_constants_enums", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_travelling_badge_py", "target": "components_travelling_badge_badgeprops", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_travelling_badge_py", "target": "components_travelling_badge_findinglocation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_travelling_badge_py", "target": "components_travelling_badge_travelling_badges", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_travelling_badge_py", "target": "components_travelling_badge_shallowest_collapsed_ancestor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L81", "weight": 1.0}, {"source": "components_travelling_badge_travelling_badges", "target": "components_travelling_badge_shallowest_collapsed_ancestor", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L62", "weight": 1.0}, {"source": "components_travelling_badge_travelling_badges", "target": "components_travelling_badge_badgeprops", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L75", "weight": 1.0}, {"source": "components_travelling_badge_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_travelling_badge_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L1", "weight": 1.0}, {"source": "components_travelling_badge_rationale_27", "target": "components_travelling_badge_badgeprops", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L27", "weight": 1.0}, {"source": "components_travelling_badge_rationale_35", "target": "components_travelling_badge_findinglocation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L35", "weight": 1.0}, {"source": "components_travelling_badge_rationale_50", "target": "components_travelling_badge_travelling_badges", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L50", "weight": 1.0}, {"source": "components_travelling_badge_rationale_85", "target": "components_travelling_badge_shallowest_collapsed_ancestor", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L85", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_travelling_badge_travelling_badges", "callee": "defaultdict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L58"}, {"caller_nid": "components_travelling_badge_travelling_badges", "callee": "defaultdict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L59"}, {"caller_nid": "components_travelling_badge_travelling_badges", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L69"}, {"caller_nid": "components_travelling_badge_travelling_badges", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L69"}, {"caller_nid": "components_travelling_badge_travelling_badges", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L70"}, {"caller_nid": "components_travelling_badge_travelling_badges", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L71"}, {"caller_nid": "components_travelling_badge_shallowest_collapsed_ancestor", "callee": "split", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L90"}, {"caller_nid": "components_travelling_badge_shallowest_collapsed_ancestor", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py", "source_location": "L98"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/742926469b57a2ebbb87e682b05801c0a79cc54a945311c49f82fe2b240859f7.json b/graphify-out/cache/ast/742926469b57a2ebbb87e682b05801c0a79cc54a945311c49f82fe2b240859f7.json new file mode 100644 index 0000000..d9824cb --- /dev/null +++ b/graphify-out/cache/ast/742926469b57a2ebbb87e682b05801c0a79cc54a945311c49f82fe2b240859f7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "label": "test_wizard_project_page.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L1"}, {"id": "ui_test_wizard_project_page_test_can_advance_equipment_step_requires_selection", "label": "test_can_advance_equipment_step_requires_selection()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L30"}, {"id": "ui_test_wizard_project_page_test_can_advance_variables_step_always_true", "label": "test_can_advance_variables_step_always_true()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L37"}, {"id": "ui_test_wizard_project_page_test_can_advance_confirm_step_always_true", "label": "test_can_advance_confirm_step_always_true()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L45"}, {"id": "ui_test_wizard_project_page_test_can_advance_default_step_is_lims_project", "label": "test_can_advance_default_step_is_lims_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L49"}, {"id": "ui_test_wizard_project_page_test_can_advance_readme_blocks_on_partial_core_fields", "label": "test_can_advance_readme_blocks_on_partial_core_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L58"}, {"id": "ui_test_wizard_project_page_test_disk_space_message_none_when_unknown", "label": "test_disk_space_message_none_when_unknown()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L71"}, {"id": "ui_test_wizard_project_page_test_disk_space_message_none_when_ample", "label": "test_disk_space_message_none_when_ample()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L76"}, {"id": "ui_test_wizard_project_page_test_disk_space_message_present_just_below_threshold", "label": "test_disk_space_message_present_just_below_threshold()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L81"}, {"id": "ui_test_wizard_project_page_test_state_lims_project_name_defaults_empty_and_is_settable", "label": "test_state_lims_project_name_defaults_empty_and_is_settable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L92"}, {"id": "ui_test_wizard_project_page_test_render_project_wizard_with_choices_does_not_raise", "label": "test_render_project_wizard_with_choices_does_not_raise()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L104"}, {"id": "ui_test_wizard_project_page_test_render_project_wizard_with_empty_choices_does_not_raise", "label": "test_render_project_wizard_with_empty_choices_does_not_raise()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L114"}, {"id": "ui_test_wizard_project_page_test_render_project_wizard_defaults_state_when_omitted", "label": "test_render_project_wizard_defaults_state_when_omitted()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L123"}, {"id": "ui_test_wizard_project_page_test_wizard_project_step_titles_cover_every_step", "label": "test_wizard_project_step_titles_cover_every_step()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L128"}, {"id": "ui_test_wizard_project_page_rationale_1", "label": "Tests for the New Project Wizard helpers (gaps not covered by test_pages). ``te", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "exlab_wizard_api_app", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "exlab_wizard_ui_pages_wizard_project", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "ui_test_wizard_project_page_test_can_advance_equipment_step_requires_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "ui_test_wizard_project_page_test_can_advance_variables_step_always_true", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "ui_test_wizard_project_page_test_can_advance_confirm_step_always_true", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "ui_test_wizard_project_page_test_can_advance_default_step_is_lims_project", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "ui_test_wizard_project_page_test_can_advance_readme_blocks_on_partial_core_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "ui_test_wizard_project_page_test_disk_space_message_none_when_unknown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L71", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "ui_test_wizard_project_page_test_disk_space_message_none_when_ample", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "ui_test_wizard_project_page_test_disk_space_message_present_just_below_threshold", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "ui_test_wizard_project_page_test_state_lims_project_name_defaults_empty_and_is_settable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L92", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "ui_test_wizard_project_page_test_render_project_wizard_with_choices_does_not_raise", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L104", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "ui_test_wizard_project_page_test_render_project_wizard_with_empty_choices_does_not_raise", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L114", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "ui_test_wizard_project_page_test_render_project_wizard_defaults_state_when_omitted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L123", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "target": "ui_test_wizard_project_page_test_wizard_project_step_titles_cover_every_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L128", "weight": 1.0}, {"source": "ui_test_wizard_project_page_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_project_page_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_wizard_project_page_test_can_advance_equipment_step_requires_selection", "callee": "ProjectWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L31"}, {"caller_nid": "ui_test_wizard_project_page_test_can_advance_equipment_step_requires_selection", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L32"}, {"caller_nid": "ui_test_wizard_project_page_test_can_advance_equipment_step_requires_selection", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L34"}, {"caller_nid": "ui_test_wizard_project_page_test_can_advance_variables_step_always_true", "callee": "ProjectWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L39"}, {"caller_nid": "ui_test_wizard_project_page_test_can_advance_variables_step_always_true", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L40"}, {"caller_nid": "ui_test_wizard_project_page_test_can_advance_variables_step_always_true", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L42"}, {"caller_nid": "ui_test_wizard_project_page_test_can_advance_confirm_step_always_true", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L46"}, {"caller_nid": "ui_test_wizard_project_page_test_can_advance_confirm_step_always_true", "callee": "ProjectWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L46"}, {"caller_nid": "ui_test_wizard_project_page_test_can_advance_default_step_is_lims_project", "callee": "ProjectWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L51"}, {"caller_nid": "ui_test_wizard_project_page_test_can_advance_default_step_is_lims_project", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L53"}, {"caller_nid": "ui_test_wizard_project_page_test_can_advance_default_step_is_lims_project", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L55"}, {"caller_nid": "ui_test_wizard_project_page_test_can_advance_readme_blocks_on_partial_core_fields", "callee": "ProjectWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L59"}, {"caller_nid": "ui_test_wizard_project_page_test_can_advance_readme_blocks_on_partial_core_fields", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L61"}, {"caller_nid": "ui_test_wizard_project_page_test_can_advance_readme_blocks_on_partial_core_fields", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L63"}, {"caller_nid": "ui_test_wizard_project_page_test_disk_space_message_none_when_unknown", "callee": "ProjectWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L72"}, {"caller_nid": "ui_test_wizard_project_page_test_disk_space_message_none_when_unknown", "callee": "disk_space_pre_flight_message", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L73"}, {"caller_nid": "ui_test_wizard_project_page_test_disk_space_message_none_when_ample", "callee": "ProjectWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L77"}, {"caller_nid": "ui_test_wizard_project_page_test_disk_space_message_none_when_ample", "callee": "disk_space_pre_flight_message", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L78"}, {"caller_nid": "ui_test_wizard_project_page_test_disk_space_message_present_just_below_threshold", "callee": "ProjectWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L82"}, {"caller_nid": "ui_test_wizard_project_page_test_disk_space_message_present_just_below_threshold", "callee": "disk_space_pre_flight_message", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L83"}, {"caller_nid": "ui_test_wizard_project_page_test_state_lims_project_name_defaults_empty_and_is_settable", "callee": "ProjectWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L93"}, {"caller_nid": "ui_test_wizard_project_page_test_render_project_wizard_with_choices_does_not_raise", "callee": "render_project_wizard", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L105"}, {"caller_nid": "ui_test_wizard_project_page_test_render_project_wizard_with_choices_does_not_raise", "callee": "ProjectWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L106"}, {"caller_nid": "ui_test_wizard_project_page_test_render_project_wizard_with_empty_choices_does_not_raise", "callee": "render_project_wizard", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L115"}, {"caller_nid": "ui_test_wizard_project_page_test_render_project_wizard_with_empty_choices_does_not_raise", "callee": "ProjectWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L116"}, {"caller_nid": "ui_test_wizard_project_page_test_render_project_wizard_defaults_state_when_omitted", "callee": "render_project_wizard", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L124"}, {"caller_nid": "ui_test_wizard_project_page_test_wizard_project_step_titles_cover_every_step", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L129"}, {"caller_nid": "ui_test_wizard_project_page_test_wizard_project_step_titles_cover_every_step", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py", "source_location": "L129"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/74e1bd4da27288719d774d70d5053253578b9f754dd8fa35f8cf73ada39b9941.json b/graphify-out/cache/ast/74e1bd4da27288719d774d70d5053253578b9f754dd8fa35f8cf73ada39b9941.json new file mode 100644 index 0000000..78acbb1 --- /dev/null +++ b/graphify-out/cache/ast/74e1bd4da27288719d774d70d5053253578b9f754dd8fa35f8cf73ada39b9941.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_01_onboarding_py", "label": "test_flow_01_onboarding.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L1"}, {"id": "e2e_test_flow_01_onboarding_goto", "label": "_goto()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L18"}, {"id": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "label": "test_flow_01_onboarding()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L37"}, {"id": "e2e_test_flow_01_onboarding_rationale_1", "label": "E2E flow 01: First-launch onboarding. Frontend Spec \u00a76.1 (welcome card + autost", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L1"}, {"id": "e2e_test_flow_01_onboarding_rationale_19", "label": "Navigate to a NiceGUI page, tolerating a transient ERR_ABORTED. NiceGUI's c", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L19"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_01_onboarding_py", "target": "tests_e2e_page_objects_main_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_01_onboarding_py", "target": "tests_e2e_page_objects_welcome_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_01_onboarding_py", "target": "e2e_test_flow_01_onboarding_goto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_01_onboarding_py", "target": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L37", "weight": 1.0}, {"source": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "target": "e2e_test_flow_01_onboarding_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L42", "weight": 1.0}, {"source": "e2e_test_flow_01_onboarding_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_01_onboarding_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_test_flow_01_onboarding_rationale_19", "target": "e2e_test_flow_01_onboarding_goto", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L19", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_01_onboarding_goto", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L26"}, {"caller_nid": "e2e_test_flow_01_onboarding_goto", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L28"}, {"caller_nid": "e2e_test_flow_01_onboarding_goto", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L29"}, {"caller_nid": "e2e_test_flow_01_onboarding_goto", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L33"}, {"caller_nid": "e2e_test_flow_01_onboarding_goto", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L34"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "WelcomePage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L38"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "MainPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L39"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L43"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "is_visible", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L44"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L47"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L48"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L54"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L54"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L59"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L59"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L60"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L60"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L61"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L61"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L64"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L64"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L65"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L65"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L68"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L68"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L69"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L73"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L75"}, {"caller_nid": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py", "source_location": "L75"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/750ee9f6635b3b279db64e825a3d5007d3eaf9c27d05a2200acf5046d18a792b.json b/graphify-out/cache/ast/750ee9f6635b3b279db64e825a3d5007d3eaf9c27d05a2200acf5046d18a792b.json new file mode 100644 index 0000000..150bfef --- /dev/null +++ b/graphify-out/cache/ast/750ee9f6635b3b279db64e825a3d5007d3eaf9c27d05a2200acf5046d18a792b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_io_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/__init__.py", "source_location": "L1"}, {"id": "io_init_rationale_1", "label": "Filesystem I/O helpers shared across the codebase. Backend Spec \u00a74.4 (file IO d", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_init_py", "target": "exlab_wizard_io_atomic_write", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/__init__.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_init_py", "target": "exlab_wizard_io_json_files", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/__init__.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_init_py", "target": "exlab_wizard_io_yaml_files", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/__init__.py", "source_location": "L17", "weight": 1.0}, {"source": "io_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_io_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/75642a5e1180cc9fc4df35bdd2546d6a463ee9ef76328a806347e3b2ed9bb406.json b/graphify-out/cache/ast/75642a5e1180cc9fc4df35bdd2546d6a463ee9ef76328a806347e3b2ed9bb406.json new file mode 100644 index 0000000..f005e74 --- /dev/null +++ b/graphify-out/cache/ast/75642a5e1180cc9fc4df35bdd2546d6a463ee9ef76328a806347e3b2ed9bb406.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_main_py", "label": "__main__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/__main__.py", "source_location": "L1"}, {"id": "exlab_wizard_main_main", "label": "main()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/__main__.py", "source_location": "L6"}, {"id": "exlab_wizard_main_rationale_1", "label": "CLI alias entry point. Backend Spec \u00a74.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/__main__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_main_py", "target": "exlab_wizard_main_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/__main__.py", "source_location": "L6", "weight": 1.0}, {"source": "exlab_wizard_main_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_main_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/__main__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "exlab_wizard_main_main", "callee": "print", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/__main__.py", "source_location": "L7"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/758082d33eb65da6f51e8ce806c03198296962827802f05328e94c1f57cb0a1c.json b/graphify-out/cache/ast/758082d33eb65da6f51e8ce806c03198296962827802f05328e94c1f57cb0a1c.json new file mode 100644 index 0000000..887d70d --- /dev/null +++ b/graphify-out/cache/ast/758082d33eb65da6f51e8ce806c03198296962827802f05328e94c1f57cb0a1c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "label": "keyboard.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L1"}, {"id": "ui_keyboard_shortcut", "label": "Shortcut", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L24"}, {"id": "strenum", "label": "StrEnum", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "ui_keyboard_keycombo", "label": "KeyCombo", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L39"}, {"id": "ui_keyboard_keycombo_matches", "label": ".matches()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L48"}, {"id": "ui_keyboard_shortcutbinding", "label": "ShortcutBinding", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L61"}, {"id": "ui_keyboard_shortcutregistry", "label": "ShortcutRegistry", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L130"}, {"id": "ui_keyboard_shortcutregistry_register", "label": ".register()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L140"}, {"id": "ui_keyboard_shortcutregistry_dispatch", "label": ".dispatch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L154"}, {"id": "ui_keyboard_list_bindings", "label": "list_bindings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L175"}, {"id": "ui_keyboard_get_binding", "label": "get_binding()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L181"}, {"id": "ui_keyboard_is_macos", "label": "is_macos()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L194"}, {"id": "ui_keyboard_combo_for_current_os", "label": "combo_for_current_os()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L200"}, {"id": "ui_keyboard_resolve", "label": "resolve()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L207"}, {"id": "ui_keyboard_bind_global_shortcuts", "label": "bind_global_shortcuts()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L224"}, {"id": "ui_keyboard_rationale_1", "label": "Keyboard-shortcut registry (Frontend Spec \u00a73.7). The bindings are intentionally", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L1"}, {"id": "ui_keyboard_rationale_25", "label": "Identifiers for the app-level shortcut set (Frontend \u00a73.7).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L25"}, {"id": "ui_keyboard_rationale_40", "label": "A modifier-and-key combination.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L40"}, {"id": "ui_keyboard_rationale_49", "label": "Return True if a NiceGUI ``KeyEventArguments`` matches this combo.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L49"}, {"id": "ui_keyboard_rationale_62", "label": "One row in the \u00a73.7 shortcut table.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L62"}, {"id": "ui_keyboard_rationale_131", "label": "A populated registry of shortcut handlers. Pages instantiate one registry,", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L131"}, {"id": "ui_keyboard_rationale_141", "label": "Attach a handler. Only one handler per shortcut. Raises: Va", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L141"}, {"id": "ui_keyboard_rationale_155", "label": "Invoke the handler for ``shortcut`` if registered. Returns ``True`` if", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L155"}, {"id": "ui_keyboard_rationale_176", "label": "Return the canonical bindings table (Frontend \u00a73.7).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L176"}, {"id": "ui_keyboard_rationale_182", "label": "Return the :class:`ShortcutBinding` for the given shortcut id. Raises:", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L182"}, {"id": "ui_keyboard_rationale_195", "label": "Return ``True`` when running on macOS (used for combo selection).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L195"}, {"id": "ui_keyboard_rationale_201", "label": "Resolve the :class:`KeyCombo` for the current OS.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L201"}, {"id": "ui_keyboard_rationale_215", "label": "Find the shortcut id matching the given key event, if any.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L215"}, {"id": "ui_keyboard_rationale_225", "label": "Install a NiceGUI keyboard listener for the registry. NiceGUI is imported l", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L225"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "enum", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "ui_keyboard_shortcut", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L24", "weight": 1.0}, {"source": "ui_keyboard_shortcut", "target": "strenum", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "ui_keyboard_keycombo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L39", "weight": 1.0}, {"source": "ui_keyboard_keycombo", "target": "ui_keyboard_keycombo_matches", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "ui_keyboard_shortcutbinding", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L61", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "ui_keyboard_shortcutregistry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L130", "weight": 1.0}, {"source": "ui_keyboard_shortcutregistry", "target": "ui_keyboard_shortcutregistry_register", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L140", "weight": 1.0}, {"source": "ui_keyboard_shortcutregistry", "target": "ui_keyboard_shortcutregistry_dispatch", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L154", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "ui_keyboard_list_bindings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L175", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "ui_keyboard_get_binding", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L181", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "ui_keyboard_is_macos", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L194", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "ui_keyboard_combo_for_current_os", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L200", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "ui_keyboard_resolve", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L207", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "target": "ui_keyboard_bind_global_shortcuts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L224", "weight": 1.0}, {"source": "ui_keyboard_combo_for_current_os", "target": "ui_keyboard_get_binding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L203", "weight": 1.0}, {"source": "ui_keyboard_combo_for_current_os", "target": "ui_keyboard_is_macos", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L204", "weight": 1.0}, {"source": "ui_keyboard_resolve", "target": "ui_keyboard_is_macos", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L218", "weight": 1.0}, {"source": "ui_keyboard_resolve", "target": "ui_keyboard_keycombo_matches", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L219", "weight": 1.0}, {"source": "ui_keyboard_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_keyboard_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_keyboard_rationale_25", "target": "ui_keyboard_shortcut", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L25", "weight": 1.0}, {"source": "ui_keyboard_rationale_40", "target": "ui_keyboard_keycombo", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L40", "weight": 1.0}, {"source": "ui_keyboard_rationale_49", "target": "ui_keyboard_keycombo_matches", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L49", "weight": 1.0}, {"source": "ui_keyboard_rationale_62", "target": "ui_keyboard_shortcutbinding", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L62", "weight": 1.0}, {"source": "ui_keyboard_rationale_131", "target": "ui_keyboard_shortcutregistry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L131", "weight": 1.0}, {"source": "ui_keyboard_rationale_141", "target": "ui_keyboard_shortcutregistry_register", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L141", "weight": 1.0}, {"source": "ui_keyboard_rationale_155", "target": "ui_keyboard_shortcutregistry_dispatch", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L155", "weight": 1.0}, {"source": "ui_keyboard_rationale_176", "target": "ui_keyboard_list_bindings", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L176", "weight": 1.0}, {"source": "ui_keyboard_rationale_182", "target": "ui_keyboard_get_binding", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L182", "weight": 1.0}, {"source": "ui_keyboard_rationale_195", "target": "ui_keyboard_is_macos", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L195", "weight": 1.0}, {"source": "ui_keyboard_rationale_201", "target": "ui_keyboard_combo_for_current_os", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L201", "weight": 1.0}, {"source": "ui_keyboard_rationale_215", "target": "ui_keyboard_resolve", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L215", "weight": 1.0}, {"source": "ui_keyboard_rationale_225", "target": "ui_keyboard_bind_global_shortcuts", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L225", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_keyboard_keycombo_matches", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L52"}, {"caller_nid": "ui_keyboard_keycombo_matches", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L52"}, {"caller_nid": "ui_keyboard_shortcutregistry_register", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L148"}, {"caller_nid": "ui_keyboard_shortcutregistry_dispatch", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L161"}, {"caller_nid": "ui_keyboard_shortcutregistry_dispatch", "callee": "handler", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L165"}, {"caller_nid": "ui_keyboard_shortcutregistry_dispatch", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L167"}, {"caller_nid": "ui_keyboard_get_binding", "callee": "KeyError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L191"}, {"caller_nid": "ui_keyboard_bind_global_shortcuts", "callee": "keyboard", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L249"}, {"caller_nid": "ui_keyboard_bind_global_shortcuts", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L250"}, {"caller_nid": "ui_keyboard_bind_global_shortcuts", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py", "source_location": "L254"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/761d1736072352f80b120270be1557c8a181e4cc87ed9f7a0ff0427003863055.json b/graphify-out/cache/ast/761d1736072352f80b120270be1557c8a181e4cc87ed9f7a0ff0427003863055.json new file mode 100644 index 0000000..d7925ee --- /dev/null +++ b/graphify-out/cache/ast/761d1736072352f80b120270be1557c8a181e4cc87ed9f7a0ff0427003863055.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_window_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/__init__.py", "source_location": "L1"}, {"id": "window_init_rationale_1", "label": "Window application package. Backend Spec \u00a74.3.2. Public API: * :func:`run_wind", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_init_py", "target": "exlab_wizard_window_main", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/__init__.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_init_py", "target": "exlab_wizard_window_pywebview_app", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/__init__.py", "source_location": "L21", "weight": 1.0}, {"source": "window_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_window_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/7638f45a6bf705a20884d1c131bb81f5fd7fb1f51d66c5a465c7438bee2596c4.json b/graphify-out/cache/ast/7638f45a6bf705a20884d1c131bb81f5fd7fb1f51d66c5a465c7438bee2596c4.json new file mode 100644 index 0000000..5cdc78b --- /dev/null +++ b/graphify-out/cache/ast/7638f45a6bf705a20884d1c131bb81f5fd7fb1f51d66c5a465c7438bee2596c4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_config_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/__init__.py", "source_location": "L1"}, {"id": "config_init_rationale_1", "label": "Unit tests for ``exlab_wizard.config``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/__init__.py", "source_location": "L1"}], "edges": [{"source": "config_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_config_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/77728d6be35b093516310ee1258b8cf1f8b12bfa81a0f8a7c910b5161031f00e.json b/graphify-out/cache/ast/77728d6be35b093516310ee1258b8cf1f8b12bfa81a0f8a7c910b5161031f00e.json new file mode 100644 index 0000000..e8cd12c --- /dev/null +++ b/graphify-out/cache/ast/77728d6be35b093516310ee1258b8cf1f8b12bfa81a0f8a7c910b5161031f00e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_dependencies_py", "label": "_dependencies.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L1"}, {"id": "api_dependencies_lims_password_present", "label": "lims_password_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L31"}, {"id": "api_dependencies_nas_password_present", "label": "nas_password_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L51"}, {"id": "api_dependencies_require_deps", "label": "require_deps()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L75"}, {"id": "api_dependencies_require_controller", "label": "require_controller()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L95"}, {"id": "api_dependencies_rationale_1", "label": "Shared FastAPI dependency helpers for the wizard's HTTP routers. The lifespan h", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L1"}, {"id": "api_dependencies_rationale_32", "label": "Return whether a LIMS password is stored -- the repo-wide reader. Every sur", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L32"}, {"id": "api_dependencies_rationale_52", "label": "Return whether the NAS keyring password is set for ``equipment_id``. Rclone", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L52"}, {"id": "api_dependencies_rationale_76", "label": "Return ``app.state.dependencies`` or raise a structured 503. A missing depe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L76"}, {"id": "api_dependencies_rationale_96", "label": "Return ``deps.controller`` or raise a structured 503. Used by the routes th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L96"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_dependencies_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_dependencies_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_dependencies_py", "target": "api_dependencies_lims_password_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_dependencies_py", "target": "api_dependencies_nas_password_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_dependencies_py", "target": "api_dependencies_require_deps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L75", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_dependencies_py", "target": "api_dependencies_require_controller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L95", "weight": 1.0}, {"source": "api_dependencies_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_dependencies_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L1", "weight": 1.0}, {"source": "api_dependencies_rationale_32", "target": "api_dependencies_lims_password_present", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L32", "weight": 1.0}, {"source": "api_dependencies_rationale_52", "target": "api_dependencies_nas_password_present", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L52", "weight": 1.0}, {"source": "api_dependencies_rationale_76", "target": "api_dependencies_require_deps", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L76", "weight": 1.0}, {"source": "api_dependencies_rationale_96", "target": "api_dependencies_require_controller", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L96", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_dependencies_lims_password_present", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L48"}, {"caller_nid": "api_dependencies_lims_password_present", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L48"}, {"caller_nid": "api_dependencies_nas_password_present", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L69"}, {"caller_nid": "api_dependencies_require_deps", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L83"}, {"caller_nid": "api_dependencies_require_deps", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L85"}, {"caller_nid": "api_dependencies_require_controller", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L102"}, {"caller_nid": "api_dependencies_require_controller", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L103"}, {"caller_nid": "api_dependencies_require_controller", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py", "source_location": "L105"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/77a09a38c0ce58e3f2b24a03a84b81922130a5a4f0703d5c15e12f3cd6ad4289.json b/graphify-out/cache/ast/77a09a38c0ce58e3f2b24a03a84b81922130a5a4f0703d5c15e12f3cd6ad4289.json new file mode 100644 index 0000000..d89b676 --- /dev/null +++ b/graphify-out/cache/ast/77a09a38c0ce58e3f2b24a03a84b81922130a5a4f0703d5c15e12f3cd6ad4289.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "label": "registry.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L1"}, {"id": "plugins_registry_pluginmanifest", "label": "PluginManifest", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L62"}, {"id": "plugins_registry_pluginrecord", "label": "PluginRecord", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L83"}, {"id": "plugins_registry_pluginplan", "label": "PluginPlan", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L103"}, {"id": "plugins_registry_registryreport", "label": "RegistryReport", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L115"}, {"id": "plugins_registry_pluginregistry", "label": "PluginRegistry", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L128"}, {"id": "plugins_registry_pluginregistry_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L140"}, {"id": "plugins_registry_pluginregistry_reload", "label": ".reload()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L157"}, {"id": "plugins_registry_pluginregistry_absorb", "label": "._absorb()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L181"}, {"id": "plugins_registry_pluginregistry_iter_root", "label": "._iter_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L210"}, {"id": "plugins_registry_pluginregistry_load_plugin", "label": "._load_plugin()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L230"}, {"id": "plugins_registry_pluginregistry_get", "label": ".get()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L354"}, {"id": "plugins_registry_pluginregistry_list_all", "label": ".list_all()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L358"}, {"id": "plugins_registry_pluginregistry_candidates_for", "label": ".candidates_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L362"}, {"id": "plugins_registry_as_str_list", "label": "_as_str_list()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L386"}, {"id": "plugins_registry_suffix_or_full", "label": "_suffix_or_full()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L393"}, {"id": "plugins_registry_rationale_1", "label": "Plugin registry -- manifest-driven discovery + dispatch resolution. Backend Spe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L1"}, {"id": "plugins_registry_rationale_63", "label": "Parsed ``manifest.yml`` contents. Backend Spec \u00a76.1.2. Mirrors the schema d", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L63"}, {"id": "plugins_registry_rationale_84", "label": "One plugin in the registry. Carries the parsed manifest, the source-on-disk", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L84"}, {"id": "plugins_registry_rationale_104", "label": "One plugin paired with the files in the rendered tree it matches. Built by", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L104"}, {"id": "plugins_registry_rationale_116", "label": "Outcome of a :meth:`PluginRegistry.reload` pass. ``loaded`` is the list of", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L116"}, {"id": "plugins_registry_rationale_129", "label": "Manifest-driven plugin registry. Constructed at host startup with the two c", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L129"}, {"id": "plugins_registry_rationale_158", "label": "Re-scan both plugin roots and rebuild the in-memory record table. Bundl", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L158"}, {"id": "plugins_registry_rationale_187", "label": "Merge one parsed plugin (or one rejection) into the report.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L187"}, {"id": "plugins_registry_rationale_215", "label": "Walk one plugin root and yield ``(record_or_None, reason_or_None)`` pairs.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L215"}, {"id": "plugins_registry_rationale_235", "label": "Parse one plugin directory. Returns ``(record, None)`` or ``(None, (name, reason", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L235"}, {"id": "plugins_registry_rationale_355", "label": "Return the record registered under ``name``, or ``None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L355"}, {"id": "plugins_registry_rationale_359", "label": "Return all registered records, sorted by name for stable output.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L359"}, {"id": "plugins_registry_rationale_363", "label": "Resolve plugins that match the given files by extension. For each regis", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L363"}, {"id": "plugins_registry_rationale_387", "label": "Coerce a YAML node into a ``list[str]``; non-list / non-string entries are dropp", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L387"}, {"id": "plugins_registry_rationale_394", "label": "Return the final suffix (``.xlsx``) for matching against ``supported_extensions`", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L394"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "yaml", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "exlab_wizard_io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "plugins_registry_pluginmanifest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "plugins_registry_pluginrecord", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "plugins_registry_pluginplan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L103", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "plugins_registry_registryreport", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L115", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "plugins_registry_pluginregistry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L128", "weight": 1.0}, {"source": "plugins_registry_pluginregistry", "target": "plugins_registry_pluginregistry_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L140", "weight": 1.0}, {"source": "plugins_registry_pluginregistry", "target": "plugins_registry_pluginregistry_reload", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L157", "weight": 1.0}, {"source": "plugins_registry_pluginregistry", "target": "plugins_registry_pluginregistry_absorb", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L181", "weight": 1.0}, {"source": "plugins_registry_pluginregistry", "target": "plugins_registry_pluginregistry_iter_root", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L210", "weight": 1.0}, {"source": "plugins_registry_pluginregistry", "target": "plugins_registry_pluginregistry_load_plugin", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L230", "weight": 1.0}, {"source": "plugins_registry_pluginregistry", "target": "plugins_registry_pluginregistry_get", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L354", "weight": 1.0}, {"source": "plugins_registry_pluginregistry", "target": "plugins_registry_pluginregistry_list_all", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L358", "weight": 1.0}, {"source": "plugins_registry_pluginregistry", "target": "plugins_registry_pluginregistry_candidates_for", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L362", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "plugins_registry_as_str_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L386", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "target": "plugins_registry_suffix_or_full", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L393", "weight": 1.0}, {"source": "plugins_registry_pluginregistry_reload", "target": "plugins_registry_registryreport", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L169", "weight": 1.0}, {"source": "plugins_registry_pluginregistry_reload", "target": "plugins_registry_pluginregistry_iter_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L173", "weight": 1.0}, {"source": "plugins_registry_pluginregistry_reload", "target": "plugins_registry_pluginregistry_absorb", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L174", "weight": 1.0}, {"source": "plugins_registry_pluginregistry_absorb", "target": "plugins_registry_pluginregistry_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L193", "weight": 1.0}, {"source": "plugins_registry_pluginregistry_iter_root", "target": "plugins_registry_pluginregistry_load_plugin", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L226", "weight": 1.0}, {"source": "plugins_registry_pluginregistry_load_plugin", "target": "plugins_registry_pluginregistry_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L280", "weight": 1.0}, {"source": "plugins_registry_pluginregistry_load_plugin", "target": "plugins_registry_pluginmanifest", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L326", "weight": 1.0}, {"source": "plugins_registry_pluginregistry_load_plugin", "target": "plugins_registry_as_str_list", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L333", "weight": 1.0}, {"source": "plugins_registry_pluginregistry_load_plugin", "target": "plugins_registry_pluginrecord", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L342", "weight": 1.0}, {"source": "plugins_registry_pluginregistry_candidates_for", "target": "plugins_registry_pluginregistry_list_all", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L373", "weight": 1.0}, {"source": "plugins_registry_pluginregistry_candidates_for", "target": "plugins_registry_suffix_or_full", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L375", "weight": 1.0}, {"source": "plugins_registry_pluginregistry_candidates_for", "target": "plugins_registry_pluginplan", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L377", "weight": 1.0}, {"source": "plugins_registry_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_registry_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L1", "weight": 1.0}, {"source": "plugins_registry_rationale_63", "target": "plugins_registry_pluginmanifest", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L63", "weight": 1.0}, {"source": "plugins_registry_rationale_84", "target": "plugins_registry_pluginrecord", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L84", "weight": 1.0}, {"source": "plugins_registry_rationale_104", "target": "plugins_registry_pluginplan", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L104", "weight": 1.0}, {"source": "plugins_registry_rationale_116", "target": "plugins_registry_registryreport", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L116", "weight": 1.0}, {"source": "plugins_registry_rationale_129", "target": "plugins_registry_pluginregistry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L129", "weight": 1.0}, {"source": "plugins_registry_rationale_158", "target": "plugins_registry_pluginregistry_reload", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L158", "weight": 1.0}, {"source": "plugins_registry_rationale_187", "target": "plugins_registry_pluginregistry_absorb", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L187", "weight": 1.0}, {"source": "plugins_registry_rationale_215", "target": "plugins_registry_pluginregistry_iter_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L215", "weight": 1.0}, {"source": "plugins_registry_rationale_235", "target": "plugins_registry_pluginregistry_load_plugin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L235", "weight": 1.0}, {"source": "plugins_registry_rationale_355", "target": "plugins_registry_pluginregistry_get", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L355", "weight": 1.0}, {"source": "plugins_registry_rationale_359", "target": "plugins_registry_pluginregistry_list_all", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L359", "weight": 1.0}, {"source": "plugins_registry_rationale_363", "target": "plugins_registry_pluginregistry_candidates_for", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L363", "weight": 1.0}, {"source": "plugins_registry_rationale_387", "target": "plugins_registry_as_str_list", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L387", "weight": 1.0}, {"source": "plugins_registry_rationale_394", "target": "plugins_registry_suffix_or_full", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L394", "weight": 1.0}], "raw_calls": [{"caller_nid": "plugins_registry_pluginregistry_absorb", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L190"}, {"caller_nid": "plugins_registry_pluginregistry_absorb", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L199"}, {"caller_nid": "plugins_registry_pluginregistry_absorb", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L208"}, {"caller_nid": "plugins_registry_pluginregistry_iter_root", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L220"}, {"caller_nid": "plugins_registry_pluginregistry_iter_root", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L223"}, {"caller_nid": "plugins_registry_pluginregistry_iter_root", "callee": "iterdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L223"}, {"caller_nid": "plugins_registry_pluginregistry_iter_root", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L224"}, {"caller_nid": "plugins_registry_pluginregistry_iter_root", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L227"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L241"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L242"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "load_yaml_manifest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L246"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L248"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L253"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L256"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L257"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "match", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L257"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L258"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L261"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L263"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L267"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L272"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L272"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L273"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L275"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L278"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L281"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L282"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L285"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L286"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L287"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L290"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L305"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L317"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L329"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L330"}, {"caller_nid": "plugins_registry_pluginregistry_load_plugin", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L331"}, {"caller_nid": "plugins_registry_pluginregistry_list_all", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L360"}, {"caller_nid": "plugins_registry_pluginregistry_candidates_for", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L374"}, {"caller_nid": "plugins_registry_pluginregistry_candidates_for", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L375"}, {"caller_nid": "plugins_registry_pluginregistry_candidates_for", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L377"}, {"caller_nid": "plugins_registry_as_str_list", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L388"}, {"caller_nid": "plugins_registry_as_str_list", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L390"}, {"caller_nid": "plugins_registry_as_str_list", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py", "source_location": "L390"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/788ecd1f6cfe28db26be907079c31e936768a020c2e36ff3e2f4270427c52a8c.json b/graphify-out/cache/ast/788ecd1f6cfe28db26be907079c31e936768a020c2e36ff3e2f4270427c52a8c.json new file mode 100644 index 0000000..bcbc023 --- /dev/null +++ b/graphify-out/cache/ast/788ecd1f6cfe28db26be907079c31e936768a020c2e36ff3e2f4270427c52a8c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_test_tray_lifecycle_py", "label": "test_tray_lifecycle.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L1"}, {"id": "integration_test_tray_lifecycle_wait_for_health", "label": "_wait_for_health()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L31"}, {"id": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", "label": "test_tray_lifecycle_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L48"}, {"id": "integration_test_tray_lifecycle_test_tray_lifecycle_window_handshake_reads_server_json", "label": "test_tray_lifecycle_window_handshake_reads_server_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L85"}, {"id": "integration_test_tray_lifecycle_rationale_1", "label": "Integration test: tray <-> window lifecycle round-trip. Backend Spec \u00a74.3.2. Th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L1"}, {"id": "integration_test_tray_lifecycle_rationale_32", "label": "Poll ``/api/v1/health`` until the server is accepting requests.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L32"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_lifecycle_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_lifecycle_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_lifecycle_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_lifecycle_py", "target": "httpx", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_lifecycle_py", "target": "exlab_wizard_api_app", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_lifecycle_py", "target": "exlab_wizard_tray_quit_coordinator", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_lifecycle_py", "target": "exlab_wizard_tray_server_runner", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_lifecycle_py", "target": "exlab_wizard_window_main", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_lifecycle_py", "target": "integration_test_tray_lifecycle_wait_for_health", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_lifecycle_py", "target": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_tray_lifecycle_py", "target": "integration_test_tray_lifecycle_test_tray_lifecycle_window_handshake_reads_server_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L85", "weight": 1.0}, {"source": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", "target": "integration_test_tray_lifecycle_wait_for_health", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L53", "weight": 1.0}, {"source": "integration_test_tray_lifecycle_rationale_1", "target": "users_alex_projects_exlabwizard_tests_integration_test_tray_lifecycle_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L1", "weight": 1.0}, {"source": "integration_test_tray_lifecycle_rationale_32", "target": "integration_test_tray_lifecycle_wait_for_health", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L32", "weight": 1.0}], "raw_calls": [{"caller_nid": "integration_test_tray_lifecycle_wait_for_health", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L33"}, {"caller_nid": "integration_test_tray_lifecycle_wait_for_health", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L35"}, {"caller_nid": "integration_test_tray_lifecycle_wait_for_health", "callee": "Client", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L37"}, {"caller_nid": "integration_test_tray_lifecycle_wait_for_health", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L38"}, {"caller_nid": "integration_test_tray_lifecycle_wait_for_health", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L43"}, {"caller_nid": "integration_test_tray_lifecycle_wait_for_health", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L45"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L49"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", "callee": "ServerRunner", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L50"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L51"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", "callee": "read_server_handshake", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L56"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", "callee": "getpid", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L62"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", "callee": "QuitCoordinator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L66"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L75"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", "callee": "quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L75"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L78"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L82"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_window_handshake_reads_server_json", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L86"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_window_handshake_reads_server_json", "callee": "ServerRunner", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L87"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_window_handshake_reads_server_json", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L88"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_window_handshake_reads_server_json", "callee": "read_server_handshake", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L92"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_window_handshake_reads_server_json", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L96"}, {"caller_nid": "integration_test_tray_lifecycle_test_tray_lifecycle_window_handshake_reads_server_json", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py", "source_location": "L98"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/792c4ad0ad6ddb792b15e9be60f5b4c91b026fecb4fd7f28c20854f5424bfc90.json b/graphify-out/cache/ast/792c4ad0ad6ddb792b15e9be60f5b4c91b026fecb4fd7f28c20854f5424bfc90.json new file mode 100644 index 0000000..a06d95a --- /dev/null +++ b/graphify-out/cache/ast/792c4ad0ad6ddb792b15e9be60f5b4c91b026fecb4fd7f28c20854f5424bfc90.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "label": "wizard_run_page.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L1"}, {"id": "page_objects_wizard_run_page_wizardrunpage", "label": "WizardRunPage", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L11"}, {"id": "page_objects_wizard_run_page_wizardrunpage_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L14"}, {"id": "page_objects_wizard_run_page_stepper", "label": "stepper()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L18"}, {"id": "page_objects_wizard_run_page_title", "label": "title()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L23"}, {"id": "page_objects_wizard_run_page_mode_badge_experimental", "label": "mode_badge_experimental()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L28"}, {"id": "page_objects_wizard_run_page_mode_badge_test", "label": "mode_badge_test()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L33"}, {"id": "page_objects_wizard_run_page_wizardrunpage_step", "label": ".step()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L37"}, {"id": "page_objects_wizard_run_page_back", "label": "back()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L42"}, {"id": "page_objects_wizard_run_page_cancel", "label": "cancel()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L50"}, {"id": "page_objects_wizard_run_page_next", "label": "next()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L55"}, {"id": "page_objects_wizard_run_page_submit", "label": "submit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L60"}, {"id": "page_objects_wizard_run_page_success_card", "label": "success_card()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L65"}, {"id": "page_objects_wizard_run_page_rationale_1", "label": "Page object for the New Run Wizard. Frontend Spec \u00a76.4.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L1"}, {"id": "page_objects_wizard_run_page_rationale_12", "label": "Locators for the run wizard (experimental + test mode).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L12"}, {"id": "page_objects_wizard_run_page_rationale_19", "label": "The vertical stepper that holds the six steps.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L19"}, {"id": "page_objects_wizard_run_page_rationale_24", "label": "The wizard's title label (changes per run kind).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L24"}, {"id": "page_objects_wizard_run_page_rationale_29", "label": "The mode badge for experimental runs.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L29"}, {"id": "page_objects_wizard_run_page_rationale_34", "label": "The mode badge for test runs.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L34"}, {"id": "page_objects_wizard_run_page_rationale_38", "label": "Locator for a specific step container.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L38"}, {"id": "page_objects_wizard_run_page_rationale_43", "label": "The back button on the active stepper navigation. Absent on the first s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L43"}, {"id": "page_objects_wizard_run_page_rationale_51", "label": "The cancel button; present on every step, returns to /main.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L51"}, {"id": "page_objects_wizard_run_page_rationale_56", "label": "The primary advance button on the active stepper navigation.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L56"}, {"id": "page_objects_wizard_run_page_rationale_61", "label": "The Create button on the confirm step.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L61"}, {"id": "page_objects_wizard_run_page_rationale_66", "label": "The success indicator rendered after submit.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L66"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "target": "playwright_sync_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "target": "page_objects_wizard_run_page_wizardrunpage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L11", "weight": 1.0}, {"source": "page_objects_wizard_run_page_wizardrunpage", "target": "page_objects_wizard_run_page_wizardrunpage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "target": "page_objects_wizard_run_page_stepper", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "target": "page_objects_wizard_run_page_title", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "target": "page_objects_wizard_run_page_mode_badge_experimental", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "target": "page_objects_wizard_run_page_mode_badge_test", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L33", "weight": 1.0}, {"source": "page_objects_wizard_run_page_wizardrunpage", "target": "page_objects_wizard_run_page_wizardrunpage_step", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "target": "page_objects_wizard_run_page_back", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "target": "page_objects_wizard_run_page_cancel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "target": "page_objects_wizard_run_page_next", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L55", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "target": "page_objects_wizard_run_page_submit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "target": "page_objects_wizard_run_page_success_card", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L65", "weight": 1.0}, {"source": "page_objects_wizard_run_page_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_run_page_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L1", "weight": 1.0}, {"source": "page_objects_wizard_run_page_rationale_12", "target": "page_objects_wizard_run_page_wizardrunpage", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L12", "weight": 1.0}, {"source": "page_objects_wizard_run_page_rationale_19", "target": "page_objects_wizard_run_page_wizardrunpage_stepper", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L19", "weight": 1.0}, {"source": "page_objects_wizard_run_page_rationale_24", "target": "page_objects_wizard_run_page_wizardrunpage_title", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L24", "weight": 1.0}, {"source": "page_objects_wizard_run_page_rationale_29", "target": "page_objects_wizard_run_page_wizardrunpage_mode_badge_experimental", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L29", "weight": 1.0}, {"source": "page_objects_wizard_run_page_rationale_34", "target": "page_objects_wizard_run_page_wizardrunpage_mode_badge_test", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L34", "weight": 1.0}, {"source": "page_objects_wizard_run_page_rationale_38", "target": "page_objects_wizard_run_page_wizardrunpage_step", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L38", "weight": 1.0}, {"source": "page_objects_wizard_run_page_rationale_43", "target": "page_objects_wizard_run_page_wizardrunpage_back", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L43", "weight": 1.0}, {"source": "page_objects_wizard_run_page_rationale_51", "target": "page_objects_wizard_run_page_wizardrunpage_cancel", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L51", "weight": 1.0}, {"source": "page_objects_wizard_run_page_rationale_56", "target": "page_objects_wizard_run_page_wizardrunpage_next", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L56", "weight": 1.0}, {"source": "page_objects_wizard_run_page_rationale_61", "target": "page_objects_wizard_run_page_wizardrunpage_submit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L61", "weight": 1.0}, {"source": "page_objects_wizard_run_page_rationale_66", "target": "page_objects_wizard_run_page_wizardrunpage_success_card", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L66", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_objects_wizard_run_page_stepper", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L20"}, {"caller_nid": "page_objects_wizard_run_page_title", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L25"}, {"caller_nid": "page_objects_wizard_run_page_mode_badge_experimental", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L30"}, {"caller_nid": "page_objects_wizard_run_page_mode_badge_test", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L35"}, {"caller_nid": "page_objects_wizard_run_page_wizardrunpage_step", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L39"}, {"caller_nid": "page_objects_wizard_run_page_back", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L47"}, {"caller_nid": "page_objects_wizard_run_page_cancel", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L52"}, {"caller_nid": "page_objects_wizard_run_page_next", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L57"}, {"caller_nid": "page_objects_wizard_run_page_submit", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L62"}, {"caller_nid": "page_objects_wizard_run_page_success_card", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py", "source_location": "L67"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/792f7e3fb077525f66bc30b79ee5f5b4848048348ffbd5030fe6f1beeb8e0573.json b/graphify-out/cache/ast/792f7e3fb077525f66bc30b79ee5f5b4848048348ffbd5030fe6f1beeb8e0573.json new file mode 100644 index 0000000..596f892 --- /dev/null +++ b/graphify-out/cache/ast/792f7e3fb077525f66bc30b79ee5f5b4848048348ffbd5030fe6f1beeb8e0573.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_plugins_hello_plugin_plugin_py", "label": "plugin.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L1"}, {"id": "hello_plugin_plugin_helloplugin", "label": "HelloPlugin", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L20"}, {"id": "plugin", "label": "Plugin", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "hello_plugin_plugin_helloplugin_can_handle", "label": ".can_handle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L28"}, {"id": "hello_plugin_plugin_helloplugin_transform", "label": ".transform()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L32"}, {"id": "hello_plugin_plugin_rationale_1", "label": "hello_plugin -- minimal real plugin used by the host integration suite. Backend", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L1"}, {"id": "hello_plugin_plugin_rationale_21", "label": "Append ``hello\\\\n`` to every ``.txt`` file the host hands us.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L21"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_hello_plugin_plugin_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_hello_plugin_plugin_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_hello_plugin_plugin_py", "target": "exlab_wizard_plugins", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_hello_plugin_plugin_py", "target": "hello_plugin_plugin_helloplugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L20", "weight": 1.0}, {"source": "hello_plugin_plugin_helloplugin", "target": "plugin", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L20", "weight": 1.0}, {"source": "hello_plugin_plugin_helloplugin", "target": "hello_plugin_plugin_helloplugin_can_handle", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L28", "weight": 1.0}, {"source": "hello_plugin_plugin_helloplugin", "target": "hello_plugin_plugin_helloplugin_transform", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L32", "weight": 1.0}, {"source": "hello_plugin_plugin_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_hello_plugin_plugin_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L1", "weight": 1.0}, {"source": "hello_plugin_plugin_rationale_21", "target": "hello_plugin_plugin_helloplugin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L21", "weight": 1.0}], "raw_calls": [{"caller_nid": "hello_plugin_plugin_helloplugin_transform", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L33"}, {"caller_nid": "hello_plugin_plugin_helloplugin_transform", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L35"}, {"caller_nid": "hello_plugin_plugin_helloplugin_transform", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L36"}, {"caller_nid": "hello_plugin_plugin_helloplugin_transform", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L38"}, {"caller_nid": "hello_plugin_plugin_helloplugin_transform", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py", "source_location": "L39"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/7ac3d111d8b615afdad242ac6b4486ecc67b846a7c2a6c66df7e6cd9c3629fba.json b/graphify-out/cache/ast/7ac3d111d8b615afdad242ac6b4486ecc67b846a7c2a6c66df7e6cd9c3629fba.json new file mode 100644 index 0000000..cc2184e --- /dev/null +++ b/graphify-out/cache/ast/7ac3d111d8b615afdad242ac6b4486ecc67b846a7c2a6c66df7e6cd9c3629fba.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "label": "test_sync_state_writer.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L1"}, {"id": "cache_test_sync_state_writer_state_path", "label": "_state_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L25"}, {"id": "cache_test_sync_state_writer_test_read_when_absent_returns_empty_state", "label": "test_read_when_absent_returns_empty_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L34"}, {"id": "cache_test_sync_state_writer_test_upsert_file_creates_a_record", "label": "test_upsert_file_creates_a_record()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L52"}, {"id": "cache_test_sync_state_writer_test_upsert_file_updates_existing_record", "label": "test_upsert_file_updates_existing_record()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L72"}, {"id": "cache_test_sync_state_writer_test_upsert_file_preserves_keep_local", "label": "test_upsert_file_preserves_keep_local()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L90"}, {"id": "cache_test_sync_state_writer_test_set_keep_local_creates_record_if_absent", "label": "test_set_keep_local_creates_record_if_absent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L112"}, {"id": "cache_test_sync_state_writer_test_set_keep_local_toggles_and_preserves_sync_fields", "label": "test_set_keep_local_toggles_and_preserves_sync_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L123"}, {"id": "cache_test_sync_state_writer_test_mark_cleared_sets_cleared_at", "label": "test_mark_cleared_sets_cleared_at()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L148"}, {"id": "cache_test_sync_state_writer_test_mark_cleared_on_absent_file_creates_state", "label": "test_mark_cleared_on_absent_file_creates_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L163"}, {"id": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "label": "test_mutators_create_missing_exlab_wizard_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L172"}, {"id": "cache_test_sync_state_writer_test_rollup_state_syncing_when_empty", "label": "test_rollup_state_syncing_when_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L203"}, {"id": "cache_test_sync_state_writer_test_rollup_state_syncing_when_some_unverified", "label": "test_rollup_state_syncing_when_some_unverified()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L208"}, {"id": "cache_test_sync_state_writer_test_rollup_state_synced_when_all_verified", "label": "test_rollup_state_synced_when_all_verified()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L219"}, {"id": "cache_test_sync_state_writer_test_rollup_state_cleared_takes_precedence_over_unverified", "label": "test_rollup_state_cleared_takes_precedence_over_unverified()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L230"}, {"id": "cache_test_sync_state_writer_test_sync_state_json_round_trips_through_msgspec", "label": "test_sync_state_json_round_trips_through_msgspec()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L244"}, {"id": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", "label": "test_read_raises_on_schema_major_mismatch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L272"}, {"id": "cache_test_sync_state_writer_test_concurrent_upserts_on_distinct_files_both_survive", "label": "test_concurrent_upserts_on_distinct_files_both_survive()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L302"}, {"id": "cache_test_sync_state_writer_rationale_1", "label": "Unit tests for ``exlab_wizard.cache.sync_state_writer``. Covers the operator-fr", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L1"}, {"id": "cache_test_sync_state_writer_rationale_173", "label": "Each blocking mutator mkdir's the run's ``.exlab-wizard/`` cache dir. S2 ro", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L173"}, {"id": "cache_test_sync_state_writer_rationale_273", "label": "A file at a different schema major than the writer is rejected. The writer", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L273"}, {"id": "cache_test_sync_state_writer_rationale_303", "label": "Two concurrent ``upsert_file`` calls on the same run, distinct paths. The `", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L303"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "exlab_wizard_cache_sync_state_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_state_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_read_when_absent_returns_empty_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_upsert_file_creates_a_record", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_upsert_file_updates_existing_record", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_upsert_file_preserves_keep_local", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L90", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_set_keep_local_creates_record_if_absent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L112", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_set_keep_local_toggles_and_preserves_sync_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L123", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_mark_cleared_sets_cleared_at", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L148", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_mark_cleared_on_absent_file_creates_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L163", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L172", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_rollup_state_syncing_when_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L203", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_rollup_state_syncing_when_some_unverified", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L208", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_rollup_state_synced_when_all_verified", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L219", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_rollup_state_cleared_takes_precedence_over_unverified", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L230", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_sync_state_json_round_trips_through_msgspec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L244", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L272", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "target": "cache_test_sync_state_writer_test_concurrent_upserts_on_distinct_files_both_survive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L302", "weight": 1.0}, {"source": "cache_test_sync_state_writer_test_read_when_absent_returns_empty_state", "target": "cache_test_sync_state_writer_state_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L44", "weight": 1.0}, {"source": "cache_test_sync_state_writer_test_upsert_file_creates_a_record", "target": "cache_test_sync_state_writer_state_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L62", "weight": 1.0}, {"source": "cache_test_sync_state_writer_test_mark_cleared_on_absent_file_creates_state", "target": "cache_test_sync_state_writer_state_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L169", "weight": 1.0}, {"source": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "target": "cache_test_sync_state_writer_state_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L192", "weight": 1.0}, {"source": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", "target": "cache_test_sync_state_writer_state_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L278", "weight": 1.0}, {"source": "cache_test_sync_state_writer_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_cache_test_sync_state_writer_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L1", "weight": 1.0}, {"source": "cache_test_sync_state_writer_rationale_173", "target": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L173", "weight": 1.0}, {"source": "cache_test_sync_state_writer_rationale_273", "target": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L273", "weight": 1.0}, {"source": "cache_test_sync_state_writer_rationale_303", "target": "cache_test_sync_state_writer_test_concurrent_upserts_on_distinct_files_both_survive", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L303", "weight": 1.0}], "raw_calls": [{"caller_nid": "cache_test_sync_state_writer_state_path", "callee": "cache_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L26"}, {"caller_nid": "cache_test_sync_state_writer_test_read_when_absent_returns_empty_state", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L35"}, {"caller_nid": "cache_test_sync_state_writer_test_read_when_absent_returns_empty_state", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L37"}, {"caller_nid": "cache_test_sync_state_writer_test_read_when_absent_returns_empty_state", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L39"}, {"caller_nid": "cache_test_sync_state_writer_test_read_when_absent_returns_empty_state", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L44"}, {"caller_nid": "cache_test_sync_state_writer_test_upsert_file_creates_a_record", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L53"}, {"caller_nid": "cache_test_sync_state_writer_test_upsert_file_creates_a_record", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L55"}, {"caller_nid": "cache_test_sync_state_writer_test_upsert_file_creates_a_record", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L62"}, {"caller_nid": "cache_test_sync_state_writer_test_upsert_file_creates_a_record", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L68"}, {"caller_nid": "cache_test_sync_state_writer_test_upsert_file_updates_existing_record", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L73"}, {"caller_nid": "cache_test_sync_state_writer_test_upsert_file_updates_existing_record", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L74"}, {"caller_nid": "cache_test_sync_state_writer_test_upsert_file_updates_existing_record", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L76"}, {"caller_nid": "cache_test_sync_state_writer_test_upsert_file_updates_existing_record", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L87"}, {"caller_nid": "cache_test_sync_state_writer_test_upsert_file_preserves_keep_local", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L91"}, {"caller_nid": "cache_test_sync_state_writer_test_upsert_file_preserves_keep_local", "callee": "set_keep_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L92"}, {"caller_nid": "cache_test_sync_state_writer_test_upsert_file_preserves_keep_local", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L94"}, {"caller_nid": "cache_test_sync_state_writer_test_set_keep_local_creates_record_if_absent", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L113"}, {"caller_nid": "cache_test_sync_state_writer_test_set_keep_local_creates_record_if_absent", "callee": "set_keep_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L115"}, {"caller_nid": "cache_test_sync_state_writer_test_set_keep_local_toggles_and_preserves_sync_fields", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L124"}, {"caller_nid": "cache_test_sync_state_writer_test_set_keep_local_toggles_and_preserves_sync_fields", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L125"}, {"caller_nid": "cache_test_sync_state_writer_test_set_keep_local_toggles_and_preserves_sync_fields", "callee": "set_keep_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L132"}, {"caller_nid": "cache_test_sync_state_writer_test_set_keep_local_toggles_and_preserves_sync_fields", "callee": "set_keep_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L138"}, {"caller_nid": "cache_test_sync_state_writer_test_mark_cleared_sets_cleared_at", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L149"}, {"caller_nid": "cache_test_sync_state_writer_test_mark_cleared_sets_cleared_at", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L150"}, {"caller_nid": "cache_test_sync_state_writer_test_mark_cleared_sets_cleared_at", "callee": "mark_cleared", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L152"}, {"caller_nid": "cache_test_sync_state_writer_test_mark_cleared_sets_cleared_at", "callee": "endswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L155"}, {"caller_nid": "cache_test_sync_state_writer_test_mark_cleared_sets_cleared_at", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L159"}, {"caller_nid": "cache_test_sync_state_writer_test_mark_cleared_on_absent_file_creates_state", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L164"}, {"caller_nid": "cache_test_sync_state_writer_test_mark_cleared_on_absent_file_creates_state", "callee": "mark_cleared", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L166"}, {"caller_nid": "cache_test_sync_state_writer_test_mark_cleared_on_absent_file_creates_state", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L169"}, {"caller_nid": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L179"}, {"caller_nid": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L182"}, {"caller_nid": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L184"}, {"caller_nid": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L186"}, {"caller_nid": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L188"}, {"caller_nid": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "callee": "set_keep_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L189"}, {"caller_nid": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "callee": "mark_cleared", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L190"}, {"caller_nid": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L192"}, {"caller_nid": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L193"}, {"caller_nid": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L194"}, {"caller_nid": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", "callee": "read_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L195"}, {"caller_nid": "cache_test_sync_state_writer_test_rollup_state_syncing_when_empty", "callee": "SyncStateJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L204"}, {"caller_nid": "cache_test_sync_state_writer_test_rollup_state_syncing_when_empty", "callee": "rollup_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L205"}, {"caller_nid": "cache_test_sync_state_writer_test_rollup_state_syncing_when_some_unverified", "callee": "SyncStateJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L209"}, {"caller_nid": "cache_test_sync_state_writer_test_rollup_state_syncing_when_some_unverified", "callee": "FileSyncRecord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L212"}, {"caller_nid": "cache_test_sync_state_writer_test_rollup_state_syncing_when_some_unverified", "callee": "FileSyncRecord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L213"}, {"caller_nid": "cache_test_sync_state_writer_test_rollup_state_syncing_when_some_unverified", "callee": "rollup_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L216"}, {"caller_nid": "cache_test_sync_state_writer_test_rollup_state_synced_when_all_verified", "callee": "SyncStateJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L220"}, {"caller_nid": "cache_test_sync_state_writer_test_rollup_state_synced_when_all_verified", "callee": "FileSyncRecord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L223"}, {"caller_nid": "cache_test_sync_state_writer_test_rollup_state_synced_when_all_verified", "callee": "FileSyncRecord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L224"}, {"caller_nid": "cache_test_sync_state_writer_test_rollup_state_synced_when_all_verified", "callee": "rollup_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L227"}, {"caller_nid": "cache_test_sync_state_writer_test_rollup_state_cleared_takes_precedence_over_unverified", "callee": "SyncStateJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L231"}, {"caller_nid": "cache_test_sync_state_writer_test_rollup_state_cleared_takes_precedence_over_unverified", "callee": "FileSyncRecord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L234"}, {"caller_nid": "cache_test_sync_state_writer_test_rollup_state_cleared_takes_precedence_over_unverified", "callee": "rollup_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L236"}, {"caller_nid": "cache_test_sync_state_writer_test_sync_state_json_round_trips_through_msgspec", "callee": "SyncStateJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L245"}, {"caller_nid": "cache_test_sync_state_writer_test_sync_state_json_round_trips_through_msgspec", "callee": "FileSyncRecord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L249"}, {"caller_nid": "cache_test_sync_state_writer_test_sync_state_json_round_trips_through_msgspec", "callee": "FileSyncRecord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L254"}, {"caller_nid": "cache_test_sync_state_writer_test_sync_state_json_round_trips_through_msgspec", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L258"}, {"caller_nid": "cache_test_sync_state_writer_test_sync_state_json_round_trips_through_msgspec", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L259"}, {"caller_nid": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L279"}, {"caller_nid": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L280"}, {"caller_nid": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L281"}, {"caller_nid": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L290"}, {"caller_nid": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L291"}, {"caller_nid": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L292"}, {"caller_nid": "cache_test_sync_state_writer_test_concurrent_upserts_on_distinct_files_both_survive", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L308"}, {"caller_nid": "cache_test_sync_state_writer_test_concurrent_upserts_on_distinct_files_both_survive", "callee": "gather", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L310"}, {"caller_nid": "cache_test_sync_state_writer_test_concurrent_upserts_on_distinct_files_both_survive", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L311"}, {"caller_nid": "cache_test_sync_state_writer_test_concurrent_upserts_on_distinct_files_both_survive", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L317"}, {"caller_nid": "cache_test_sync_state_writer_test_concurrent_upserts_on_distinct_files_both_survive", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L325"}, {"caller_nid": "cache_test_sync_state_writer_test_concurrent_upserts_on_distinct_files_both_survive", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py", "source_location": "L326"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/7b64a4bbb82b344924a1968a04dd4ee9d5723f5900386bba00f4f66a0c30f7a5.json b/graphify-out/cache/ast/7b64a4bbb82b344924a1968a04dd4ee9d5723f5900386bba00f4f66a0c30f7a5.json new file mode 100644 index 0000000..8ad0cf0 --- /dev/null +++ b/graphify-out/cache/ast/7b64a4bbb82b344924a1968a04dd4ee9d5723f5900386bba00f4f66a0c30f7a5.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_04_test_run_py", "label": "test_flow_04_test_run.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L1"}, {"id": "e2e_test_flow_04_test_run_test_flow_04_test_run", "label": "test_flow_04_test_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L17"}, {"id": "e2e_test_flow_04_test_run_rationale_1", "label": "E2E flow 04: Test-run wizard end-to-end. Frontend Spec \u00a76.4 (run wizard, test m", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_04_test_run_py", "target": "tests_e2e_page_objects_wizard_run_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_04_test_run_py", "target": "e2e_test_flow_04_test_run_test_flow_04_test_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L17", "weight": 1.0}, {"source": "e2e_test_flow_04_test_run_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_04_test_run_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "WizardRunPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L18"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L19"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L20"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L22"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L25"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L26"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L30"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "step", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L30"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L31"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L31"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L36"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L36"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L39"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L39"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L42"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L43"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L53"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L53"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L56"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L56"}, {"caller_nid": "e2e_test_flow_04_test_run_test_flow_04_test_run", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py", "source_location": "L59"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/7c55f27d8c1b2f28d52e5343b6cb0e8107602a224da9adfe53391279ceb91190.json b/graphify-out/cache/ast/7c55f27d8c1b2f28d52e5343b6cb0e8107602a224da9adfe53391279ceb91190.json new file mode 100644 index 0000000..e1a4274 --- /dev/null +++ b/graphify-out/cache/ast/7c55f27d8c1b2f28d52e5343b6cb0e8107602a224da9adfe53391279ceb91190.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "label": "test_autostart.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L1"}, {"id": "tray_test_autostart_test_macos_register_writes_plist", "label": "test_macos_register_writes_plist()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L24"}, {"id": "tray_test_autostart_test_macos_unregister_removes_plist", "label": "test_macos_unregister_removes_plist()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L40"}, {"id": "tray_test_autostart_test_macos_register_is_idempotent", "label": "test_macos_register_is_idempotent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L51"}, {"id": "tray_test_autostart_test_linux_register_writes_systemd_and_desktop", "label": "test_linux_register_writes_systemd_and_desktop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L63"}, {"id": "tray_test_autostart_test_linux_unregister_removes_both_files", "label": "test_linux_unregister_removes_both_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L80"}, {"id": "tray_test_autostart_test_linux_is_registered_when_only_desktop_present", "label": "test_linux_is_registered_when_only_desktop_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L87"}, {"id": "tray_test_autostart_fakekey", "label": "_FakeKey", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L100"}, {"id": "tray_test_autostart_fakekey_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L101"}, {"id": "tray_test_autostart_fakekey_enter", "label": ".__enter__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L105"}, {"id": "tray_test_autostart_fakekey_exit", "label": ".__exit__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L108"}, {"id": "tray_test_autostart_fakewinreg", "label": "_FakeWinreg", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L112"}, {"id": "tray_test_autostart_fakewinreg_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L118"}, {"id": "tray_test_autostart_fakewinreg_openkey", "label": ".OpenKey()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L122"}, {"id": "tray_test_autostart_fakewinreg_setvalueex", "label": ".SetValueEx()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L133"}, {"id": "tray_test_autostart_fakewinreg_queryvalueex", "label": ".QueryValueEx()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L145"}, {"id": "tray_test_autostart_fakewinreg_deletevalue", "label": ".DeleteValue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L150"}, {"id": "tray_test_autostart_fake_winreg", "label": "fake_winreg()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L155"}, {"id": "tray_test_autostart_test_windows_register_sets_run_value", "label": "test_windows_register_sets_run_value()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L161"}, {"id": "tray_test_autostart_test_windows_unregister_deletes_run_value", "label": "test_windows_unregister_deletes_run_value()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L173"}, {"id": "tray_test_autostart_test_windows_unregister_when_value_missing_is_safe", "label": "test_windows_unregister_when_value_missing_is_safe()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L185"}, {"id": "tray_test_autostart_test_windows_open_key_handles_filenotfound_on_query", "label": "test_windows_open_key_handles_filenotfound_on_query()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L193"}, {"id": "tray_test_autostart_test_silently_unlink_tolerates_missing", "label": "test_silently_unlink_tolerates_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L211"}, {"id": "tray_test_autostart_test_env_var_root_overrides_constructor", "label": "test_env_var_root_overrides_constructor()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L223"}, {"id": "tray_test_autostart_test_executable_path_property", "label": "test_executable_path_property()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L238"}, {"id": "tray_test_autostart_test_default_executable_falls_back_to_sys_executable", "label": "test_default_executable_falls_back_to_sys_executable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L244"}, {"id": "tray_test_autostart_test_detect_platform_returns_known_value", "label": "test_detect_platform_returns_known_value()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L250"}, {"id": "tray_test_autostart_test_detect_platform_dispatch", "label": "test_detect_platform_dispatch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L255"}, {"id": "tray_test_autostart_rationale_1", "label": "Tests for :mod:`exlab_wizard.tray.autostart`. Backend Spec \u00a715.7.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L1"}, {"id": "tray_test_autostart_rationale_196", "label": "When ``OpenKey`` raises FileNotFoundError, ``is_registered`` returns False.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L196"}, {"id": "tray_test_autostart_rationale_212", "label": "Internal helper tolerates a missing path without raising.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L212"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "exlab_wizard_tray_autostart", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_macos_register_writes_plist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_macos_unregister_removes_plist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_macos_register_is_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_linux_register_writes_systemd_and_desktop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_linux_unregister_removes_both_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L80", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_linux_is_registered_when_only_desktop_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L87", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_fakekey", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L100", "weight": 1.0}, {"source": "tray_test_autostart_fakekey", "target": "tray_test_autostart_fakekey_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L101", "weight": 1.0}, {"source": "tray_test_autostart_fakekey", "target": "tray_test_autostart_fakekey_enter", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L105", "weight": 1.0}, {"source": "tray_test_autostart_fakekey", "target": "tray_test_autostart_fakekey_exit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L108", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_fakewinreg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L112", "weight": 1.0}, {"source": "tray_test_autostart_fakewinreg", "target": "tray_test_autostart_fakewinreg_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L118", "weight": 1.0}, {"source": "tray_test_autostart_fakewinreg", "target": "tray_test_autostart_fakewinreg_openkey", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L122", "weight": 1.0}, {"source": "tray_test_autostart_fakewinreg", "target": "tray_test_autostart_fakewinreg_setvalueex", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L133", "weight": 1.0}, {"source": "tray_test_autostart_fakewinreg", "target": "tray_test_autostart_fakewinreg_queryvalueex", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L145", "weight": 1.0}, {"source": "tray_test_autostart_fakewinreg", "target": "tray_test_autostart_fakewinreg_deletevalue", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L150", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_fake_winreg", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L155", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_windows_register_sets_run_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L161", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_windows_unregister_deletes_run_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L173", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_windows_unregister_when_value_missing_is_safe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L185", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_windows_open_key_handles_filenotfound_on_query", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L193", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_silently_unlink_tolerates_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L211", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_env_var_root_overrides_constructor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L223", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_executable_path_property", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L238", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_default_executable_falls_back_to_sys_executable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L244", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_detect_platform_returns_known_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L250", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "target": "tray_test_autostart_test_detect_platform_dispatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L255", "weight": 1.0}, {"source": "tray_test_autostart_fakewinreg_openkey", "target": "tray_test_autostart_fakekey", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L131", "weight": 1.0}, {"source": "tray_test_autostart_fake_winreg", "target": "tray_test_autostart_fakewinreg", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L156", "weight": 1.0}, {"source": "tray_test_autostart_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_tray_test_autostart_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_test_autostart_rationale_196", "target": "tray_test_autostart_test_windows_open_key_handles_filenotfound_on_query", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L196", "weight": 1.0}, {"source": "tray_test_autostart_rationale_212", "target": "tray_test_autostart_test_silently_unlink_tolerates_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L212", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_test_autostart_test_macos_register_writes_plist", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L25"}, {"caller_nid": "tray_test_autostart_test_macos_register_writes_plist", "callee": "is_registered", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L30"}, {"caller_nid": "tray_test_autostart_test_macos_register_writes_plist", "callee": "register", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L31"}, {"caller_nid": "tray_test_autostart_test_macos_register_writes_plist", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L33"}, {"caller_nid": "tray_test_autostart_test_macos_register_writes_plist", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L34"}, {"caller_nid": "tray_test_autostart_test_macos_register_writes_plist", "callee": "is_registered", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L37"}, {"caller_nid": "tray_test_autostart_test_macos_unregister_removes_plist", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L41"}, {"caller_nid": "tray_test_autostart_test_macos_unregister_removes_plist", "callee": "register", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L46"}, {"caller_nid": "tray_test_autostart_test_macos_unregister_removes_plist", "callee": "unregister", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L47"}, {"caller_nid": "tray_test_autostart_test_macos_unregister_removes_plist", "callee": "is_registered", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L48"}, {"caller_nid": "tray_test_autostart_test_macos_register_is_idempotent", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L52"}, {"caller_nid": "tray_test_autostart_test_macos_register_is_idempotent", "callee": "register", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L53"}, {"caller_nid": "tray_test_autostart_test_macos_register_is_idempotent", "callee": "register", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L54"}, {"caller_nid": "tray_test_autostart_test_macos_register_is_idempotent", "callee": "is_registered", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L55"}, {"caller_nid": "tray_test_autostart_test_linux_register_writes_systemd_and_desktop", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L64"}, {"caller_nid": "tray_test_autostart_test_linux_register_writes_systemd_and_desktop", "callee": "is_registered", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L69"}, {"caller_nid": "tray_test_autostart_test_linux_register_writes_systemd_and_desktop", "callee": "register", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L70"}, {"caller_nid": "tray_test_autostart_test_linux_register_writes_systemd_and_desktop", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L73"}, {"caller_nid": "tray_test_autostart_test_linux_register_writes_systemd_and_desktop", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L74"}, {"caller_nid": "tray_test_autostart_test_linux_register_writes_systemd_and_desktop", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L75"}, {"caller_nid": "tray_test_autostart_test_linux_register_writes_systemd_and_desktop", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L76"}, {"caller_nid": "tray_test_autostart_test_linux_register_writes_systemd_and_desktop", "callee": "is_registered", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L77"}, {"caller_nid": "tray_test_autostart_test_linux_unregister_removes_both_files", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L81"}, {"caller_nid": "tray_test_autostart_test_linux_unregister_removes_both_files", "callee": "register", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L82"}, {"caller_nid": "tray_test_autostart_test_linux_unregister_removes_both_files", "callee": "unregister", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L83"}, {"caller_nid": "tray_test_autostart_test_linux_unregister_removes_both_files", "callee": "is_registered", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L84"}, {"caller_nid": "tray_test_autostart_test_linux_is_registered_when_only_desktop_present", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L88"}, {"caller_nid": "tray_test_autostart_test_linux_is_registered_when_only_desktop_present", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L90"}, {"caller_nid": "tray_test_autostart_test_linux_is_registered_when_only_desktop_present", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L91"}, {"caller_nid": "tray_test_autostart_test_linux_is_registered_when_only_desktop_present", "callee": "is_registered", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L92"}, {"caller_nid": "tray_test_autostart_fakewinreg_openkey", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L130"}, {"caller_nid": "tray_test_autostart_fakewinreg_queryvalueex", "callee": "FileNotFoundError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L147"}, {"caller_nid": "tray_test_autostart_fakewinreg_deletevalue", "callee": "pop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L151"}, {"caller_nid": "tray_test_autostart_fake_winreg", "callee": "setitem", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L157"}, {"caller_nid": "tray_test_autostart_test_windows_register_sets_run_value", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L162"}, {"caller_nid": "tray_test_autostart_test_windows_register_sets_run_value", "callee": "is_registered", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L167"}, {"caller_nid": "tray_test_autostart_test_windows_register_sets_run_value", "callee": "register", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L168"}, {"caller_nid": "tray_test_autostart_test_windows_register_sets_run_value", "callee": "is_registered", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L170"}, {"caller_nid": "tray_test_autostart_test_windows_unregister_deletes_run_value", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L174"}, {"caller_nid": "tray_test_autostart_test_windows_unregister_deletes_run_value", "callee": "register", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L179"}, {"caller_nid": "tray_test_autostart_test_windows_unregister_deletes_run_value", "callee": "unregister", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L180"}, {"caller_nid": "tray_test_autostart_test_windows_unregister_deletes_run_value", "callee": "is_registered", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L182"}, {"caller_nid": "tray_test_autostart_test_windows_unregister_when_value_missing_is_safe", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L189"}, {"caller_nid": "tray_test_autostart_test_windows_unregister_when_value_missing_is_safe", "callee": "unregister", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L190"}, {"caller_nid": "tray_test_autostart_test_windows_open_key_handles_filenotfound_on_query", "callee": "setitem", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L204"}, {"caller_nid": "tray_test_autostart_test_windows_open_key_handles_filenotfound_on_query", "callee": "_ErrorWinreg", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L204"}, {"caller_nid": "tray_test_autostart_test_windows_open_key_handles_filenotfound_on_query", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L205"}, {"caller_nid": "tray_test_autostart_test_windows_open_key_handles_filenotfound_on_query", "callee": "is_registered", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L206"}, {"caller_nid": "tray_test_autostart_test_windows_open_key_handles_filenotfound_on_query", "callee": "unregister", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L208"}, {"caller_nid": "tray_test_autostart_test_silently_unlink_tolerates_missing", "callee": "_silently_unlink", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L215"}, {"caller_nid": "tray_test_autostart_test_env_var_root_overrides_constructor", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L227"}, {"caller_nid": "tray_test_autostart_test_env_var_root_overrides_constructor", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L228"}, {"caller_nid": "tray_test_autostart_test_env_var_root_overrides_constructor", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L228"}, {"caller_nid": "tray_test_autostart_test_env_var_root_overrides_constructor", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L229"}, {"caller_nid": "tray_test_autostart_test_env_var_root_overrides_constructor", "callee": "register", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L234"}, {"caller_nid": "tray_test_autostart_test_env_var_root_overrides_constructor", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L235"}, {"caller_nid": "tray_test_autostart_test_executable_path_property", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L239"}, {"caller_nid": "tray_test_autostart_test_default_executable_falls_back_to_sys_executable", "callee": "AutostartManager", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L245"}, {"caller_nid": "tray_test_autostart_test_detect_platform_returns_known_value", "callee": "_detect_platform", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L251"}, {"caller_nid": "tray_test_autostart_test_detect_platform_dispatch", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L256"}, {"caller_nid": "tray_test_autostart_test_detect_platform_dispatch", "callee": "_detect_platform", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L257"}, {"caller_nid": "tray_test_autostart_test_detect_platform_dispatch", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L258"}, {"caller_nid": "tray_test_autostart_test_detect_platform_dispatch", "callee": "_detect_platform", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L259"}, {"caller_nid": "tray_test_autostart_test_detect_platform_dispatch", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L260"}, {"caller_nid": "tray_test_autostart_test_detect_platform_dispatch", "callee": "_detect_platform", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py", "source_location": "L261"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/7d6e9a3d55d2ab805524ecc66728c76b8c7d3241423ee0833755b75e130b898a.json b/graphify-out/cache/ast/7d6e9a3d55d2ab805524ecc66728c76b8c7d3241423ee0833755b75e130b898a.json new file mode 100644 index 0000000..202cf11 --- /dev/null +++ b/graphify-out/cache/ast/7d6e9a3d55d2ab805524ecc66728c76b8c7d3241423ee0833755b75e130b898a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "label": "test_generator.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L1"}, {"id": "readme_test_generator_system_fields", "label": "_system_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L57"}, {"id": "readme_test_generator_ctx", "label": "_ctx()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L73"}, {"id": "readme_test_generator_generator", "label": "generator()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L99"}, {"id": "readme_test_generator_test_generate_writes_both_files", "label": "test_generate_writes_both_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L109"}, {"id": "readme_test_generator_test_readme_starts_with_yaml_front_matter", "label": "test_readme_starts_with_yaml_front_matter()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L118"}, {"id": "readme_test_generator_test_readme_body_includes_label_and_objective", "label": "test_readme_body_includes_label_and_objective()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L135"}, {"id": "readme_test_generator_test_readme_fields_json_round_trips", "label": "test_readme_fields_json_round_trips()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L148"}, {"id": "readme_test_generator_test_empty_core_field_rejected", "label": "test_empty_core_field_rejected()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L192"}, {"id": "readme_test_generator_test_label_over_max_length_rejected", "label": "test_label_over_max_length_rejected()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L201"}, {"id": "readme_test_generator_test_objective_over_max_length_rejected", "label": "test_objective_over_max_length_rejected()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L208"}, {"id": "readme_test_generator_test_required_template_field_missing_raises", "label": "test_required_template_field_missing_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L222"}, {"id": "readme_test_generator_test_required_config_field_missing_raises", "label": "test_required_config_field_missing_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L231"}, {"id": "readme_test_generator_test_duplicate_field_id_across_layers_raises", "label": "test_duplicate_field_id_across_layers_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L247"}, {"id": "readme_test_generator_test_custom_field_label_collides_with_template_id", "label": "test_custom_field_label_collides_with_template_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L263"}, {"id": "readme_test_generator_test_core_field_redeclared_in_template_raises", "label": "test_core_field_redeclared_in_template_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L281"}, {"id": "readme_test_generator_test_core_field_redeclared_in_config_raises", "label": "test_core_field_redeclared_in_config_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L290"}, {"id": "readme_test_generator_test_project_level_system_run_is_none", "label": "test_project_level_system_run_is_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L304"}, {"id": "readme_test_generator_test_run_level_experimental_run_name", "label": "test_run_level_experimental_run_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L313"}, {"id": "readme_test_generator_test_run_level_test_run_name", "label": "test_run_level_test_run_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L322"}, {"id": "readme_test_generator_test_string_type_accepts_string_rejects_int", "label": "test_string_type_accepts_string_rejects_int()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L336"}, {"id": "readme_test_generator_test_text_type_accepts_multiline_rejects_list", "label": "test_text_type_accepts_multiline_rejects_list()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L354"}, {"id": "readme_test_generator_test_choice_type_accepts_listed_rejects_other", "label": "test_choice_type_accepts_listed_rejects_other()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L370"}, {"id": "readme_test_generator_test_choice_without_options_raises", "label": "test_choice_without_options_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L386"}, {"id": "readme_test_generator_test_date_type_accepts_iso8601_rejects_garbage", "label": "test_date_type_accepts_iso8601_rejects_garbage()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L396"}, {"id": "readme_test_generator_test_date_type_rejects_non_string", "label": "test_date_type_rejects_non_string()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L419"}, {"id": "readme_test_generator_test_boolean_type_accepts_bool_rejects_string", "label": "test_boolean_type_accepts_bool_rejects_string()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L429"}, {"id": "readme_test_generator_test_unknown_field_type_raises", "label": "test_unknown_field_type_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L449"}, {"id": "readme_test_generator_test_choice_type_rejects_non_string_value", "label": "test_choice_type_rejects_non_string_value()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L459"}, {"id": "readme_test_generator_test_generate_is_idempotent_byte_identical", "label": "test_generate_is_idempotent_byte_identical()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L476"}, {"id": "readme_test_generator_test_generated_at_uses_z_suffix", "label": "test_generated_at_uses_z_suffix()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L512"}, {"id": "readme_test_generator_test_cache_dir_created_on_demand", "label": "test_cache_dir_created_on_demand()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L520"}, {"id": "readme_test_generator_test_value_without_declaration_skips_typecheck", "label": "test_value_without_declaration_skips_typecheck()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L529"}, {"id": "readme_test_generator_test_optional_empty_field_is_skipped", "label": "test_optional_empty_field_is_skipped()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L546"}, {"id": "readme_test_generator_test_required_field_present_with_none_raises", "label": "test_required_field_present_with_none_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L556"}, {"id": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", "label": "test_generated_at_uses_z_for_naive_datetime()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L569"}, {"id": "readme_test_generator_rationale_1", "label": "Tests for :class:`exlab_wizard.readme.generator.ReadmeGenerator`. Pins the cont", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L1"}, {"id": "readme_test_generator_rationale_479", "label": "Calling generate twice with the same context produces identical bytes.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L479"}, {"id": "readme_test_generator_rationale_532", "label": "A value whose id has no declaration is permitted (controller-side merge).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L532"}, {"id": "readme_test_generator_rationale_547", "label": "An optional field with an empty value passes; type check is skipped.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L547"}, {"id": "readme_test_generator_rationale_559", "label": "``None`` is treated as absent for required fields.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L559"}, {"id": "readme_test_generator_rationale_572", "label": "Naive datetimes are treated as already-UTC (no timezone gymnastics).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L572"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "yaml", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "msgspec", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "exlab_wizard_readme", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_system_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_ctx", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L73", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_generator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L99", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_generate_writes_both_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L109", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_readme_starts_with_yaml_front_matter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L118", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_readme_body_includes_label_and_objective", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_readme_fields_json_round_trips", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L148", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_empty_core_field_rejected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L192", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_label_over_max_length_rejected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L201", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_objective_over_max_length_rejected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L208", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_required_template_field_missing_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L222", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_required_config_field_missing_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L231", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_duplicate_field_id_across_layers_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L247", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_custom_field_label_collides_with_template_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L263", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_core_field_redeclared_in_template_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L281", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_core_field_redeclared_in_config_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L290", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_project_level_system_run_is_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L304", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_run_level_experimental_run_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L313", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_run_level_test_run_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L322", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_string_type_accepts_string_rejects_int", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L336", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_text_type_accepts_multiline_rejects_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L354", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_choice_type_accepts_listed_rejects_other", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L370", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_choice_without_options_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L386", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_date_type_accepts_iso8601_rejects_garbage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L396", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_date_type_rejects_non_string", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L419", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_boolean_type_accepts_bool_rejects_string", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L429", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_unknown_field_type_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L449", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_choice_type_rejects_non_string_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L459", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_generate_is_idempotent_byte_identical", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L476", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_generated_at_uses_z_suffix", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L512", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_cache_dir_created_on_demand", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L520", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_value_without_declaration_skips_typecheck", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L529", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_optional_empty_field_is_skipped", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L546", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_required_field_present_with_none_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L556", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "target": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L569", "weight": 1.0}, {"source": "readme_test_generator_ctx", "target": "readme_test_generator_system_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L92", "weight": 1.0}, {"source": "readme_test_generator_test_generate_writes_both_files", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L110", "weight": 1.0}, {"source": "readme_test_generator_test_readme_starts_with_yaml_front_matter", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L121", "weight": 1.0}, {"source": "readme_test_generator_test_readme_body_includes_label_and_objective", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L140", "weight": 1.0}, {"source": "readme_test_generator_test_readme_fields_json_round_trips", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L151", "weight": 1.0}, {"source": "readme_test_generator_test_empty_core_field_rejected", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L197", "weight": 1.0}, {"source": "readme_test_generator_test_label_over_max_length_rejected", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L204", "weight": 1.0}, {"source": "readme_test_generator_test_objective_over_max_length_rejected", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L213", "weight": 1.0}, {"source": "readme_test_generator_test_required_template_field_missing_raises", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L227", "weight": 1.0}, {"source": "readme_test_generator_test_required_config_field_missing_raises", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L237", "weight": 1.0}, {"source": "readme_test_generator_test_duplicate_field_id_across_layers_raises", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L255", "weight": 1.0}, {"source": "readme_test_generator_test_custom_field_label_collides_with_template_id", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L271", "weight": 1.0}, {"source": "readme_test_generator_test_core_field_redeclared_in_template_raises", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L286", "weight": 1.0}, {"source": "readme_test_generator_test_core_field_redeclared_in_config_raises", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L295", "weight": 1.0}, {"source": "readme_test_generator_test_project_level_system_run_is_none", "target": "readme_test_generator_system_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L305", "weight": 1.0}, {"source": "readme_test_generator_test_project_level_system_run_is_none", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L306", "weight": 1.0}, {"source": "readme_test_generator_test_run_level_experimental_run_name", "target": "readme_test_generator_system_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L314", "weight": 1.0}, {"source": "readme_test_generator_test_run_level_experimental_run_name", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L315", "weight": 1.0}, {"source": "readme_test_generator_test_run_level_test_run_name", "target": "readme_test_generator_system_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L323", "weight": 1.0}, {"source": "readme_test_generator_test_run_level_test_run_name", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L324", "weight": 1.0}, {"source": "readme_test_generator_test_string_type_accepts_string_rejects_int", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L343", "weight": 1.0}, {"source": "readme_test_generator_test_text_type_accepts_multiline_rejects_list", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L360", "weight": 1.0}, {"source": "readme_test_generator_test_choice_type_accepts_listed_rejects_other", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L376", "weight": 1.0}, {"source": "readme_test_generator_test_choice_without_options_raises", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L391", "weight": 1.0}, {"source": "readme_test_generator_test_date_type_accepts_iso8601_rejects_garbage", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L402", "weight": 1.0}, {"source": "readme_test_generator_test_date_type_rejects_non_string", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L424", "weight": 1.0}, {"source": "readme_test_generator_test_boolean_type_accepts_bool_rejects_string", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L435", "weight": 1.0}, {"source": "readme_test_generator_test_unknown_field_type_raises", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L454", "weight": 1.0}, {"source": "readme_test_generator_test_choice_type_rejects_non_string_value", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L466", "weight": 1.0}, {"source": "readme_test_generator_test_generate_is_idempotent_byte_identical", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L480", "weight": 1.0}, {"source": "readme_test_generator_test_generated_at_uses_z_suffix", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L513", "weight": 1.0}, {"source": "readme_test_generator_test_cache_dir_created_on_demand", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L523", "weight": 1.0}, {"source": "readme_test_generator_test_value_without_declaration_skips_typecheck", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L538", "weight": 1.0}, {"source": "readme_test_generator_test_optional_empty_field_is_skipped", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L551", "weight": 1.0}, {"source": "readme_test_generator_test_required_field_present_with_none_raises", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L564", "weight": 1.0}, {"source": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", "target": "readme_test_generator_ctx", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L582", "weight": 1.0}, {"source": "readme_test_generator_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_readme_test_generator_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L1", "weight": 1.0}, {"source": "readme_test_generator_rationale_479", "target": "readme_test_generator_test_generate_is_idempotent_byte_identical", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L479", "weight": 1.0}, {"source": "readme_test_generator_rationale_532", "target": "readme_test_generator_test_value_without_declaration_skips_typecheck", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L532", "weight": 1.0}, {"source": "readme_test_generator_rationale_547", "target": "readme_test_generator_test_optional_empty_field_is_skipped", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L547", "weight": 1.0}, {"source": "readme_test_generator_rationale_559", "target": "readme_test_generator_test_required_field_present_with_none_raises", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L559", "weight": 1.0}, {"source": "readme_test_generator_rationale_572", "target": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L572", "weight": 1.0}], "raw_calls": [{"caller_nid": "readme_test_generator_system_fields", "callee": "SystemFields", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L62"}, {"caller_nid": "readme_test_generator_system_fields", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L63"}, {"caller_nid": "readme_test_generator_ctx", "callee": "ReadmeContext", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L86"}, {"caller_nid": "readme_test_generator_ctx", "callee": "CoreFields", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L88"}, {"caller_nid": "readme_test_generator_generator", "callee": "ReadmeGenerator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L100"}, {"caller_nid": "readme_test_generator_test_generate_writes_both_files", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L110"}, {"caller_nid": "readme_test_generator_test_generate_writes_both_files", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L113"}, {"caller_nid": "readme_test_generator_test_generate_writes_both_files", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L114"}, {"caller_nid": "readme_test_generator_test_readme_starts_with_yaml_front_matter", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L121"}, {"caller_nid": "readme_test_generator_test_readme_starts_with_yaml_front_matter", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L122"}, {"caller_nid": "readme_test_generator_test_readme_starts_with_yaml_front_matter", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L123"}, {"caller_nid": "readme_test_generator_test_readme_starts_with_yaml_front_matter", "callee": "partition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L126"}, {"caller_nid": "readme_test_generator_test_readme_starts_with_yaml_front_matter", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L127"}, {"caller_nid": "readme_test_generator_test_readme_starts_with_yaml_front_matter", "callee": "safe_load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L128"}, {"caller_nid": "readme_test_generator_test_readme_starts_with_yaml_front_matter", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L131"}, {"caller_nid": "readme_test_generator_test_readme_starts_with_yaml_front_matter", "callee": "lstrip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L131"}, {"caller_nid": "readme_test_generator_test_readme_body_includes_label_and_objective", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L138"}, {"caller_nid": "readme_test_generator_test_readme_body_includes_label_and_objective", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L142"}, {"caller_nid": "readme_test_generator_test_readme_body_includes_label_and_objective", "callee": "partition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L143"}, {"caller_nid": "readme_test_generator_test_readme_body_includes_label_and_objective", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L144"}, {"caller_nid": "readme_test_generator_test_readme_fields_json_round_trips", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L149"}, {"caller_nid": "readme_test_generator_test_readme_fields_json_round_trips", "callee": "CustomField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L154"}, {"caller_nid": "readme_test_generator_test_readme_fields_json_round_trips", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L156"}, {"caller_nid": "readme_test_generator_test_readme_fields_json_round_trips", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L164"}, {"caller_nid": "readme_test_generator_test_readme_fields_json_round_trips", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L173"}, {"caller_nid": "readme_test_generator_test_readme_fields_json_round_trips", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L173"}, {"caller_nid": "readme_test_generator_test_empty_core_field_rejected", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L196"}, {"caller_nid": "readme_test_generator_test_empty_core_field_rejected", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L197"}, {"caller_nid": "readme_test_generator_test_label_over_max_length_rejected", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L203"}, {"caller_nid": "readme_test_generator_test_label_over_max_length_rejected", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L204"}, {"caller_nid": "readme_test_generator_test_objective_over_max_length_rejected", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L212"}, {"caller_nid": "readme_test_generator_test_objective_over_max_length_rejected", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L213"}, {"caller_nid": "readme_test_generator_test_required_template_field_missing_raises", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L225"}, {"caller_nid": "readme_test_generator_test_required_template_field_missing_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L226"}, {"caller_nid": "readme_test_generator_test_required_template_field_missing_raises", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L227"}, {"caller_nid": "readme_test_generator_test_required_config_field_missing_raises", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L234"}, {"caller_nid": "readme_test_generator_test_required_config_field_missing_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L235"}, {"caller_nid": "readme_test_generator_test_required_config_field_missing_raises", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L236"}, {"caller_nid": "readme_test_generator_test_duplicate_field_id_across_layers_raises", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L250"}, {"caller_nid": "readme_test_generator_test_duplicate_field_id_across_layers_raises", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L251"}, {"caller_nid": "readme_test_generator_test_duplicate_field_id_across_layers_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L252"}, {"caller_nid": "readme_test_generator_test_duplicate_field_id_across_layers_raises", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L253"}, {"caller_nid": "readme_test_generator_test_custom_field_label_collides_with_template_id", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L266"}, {"caller_nid": "readme_test_generator_test_custom_field_label_collides_with_template_id", "callee": "CustomField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L267"}, {"caller_nid": "readme_test_generator_test_custom_field_label_collides_with_template_id", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L268"}, {"caller_nid": "readme_test_generator_test_custom_field_label_collides_with_template_id", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L269"}, {"caller_nid": "readme_test_generator_test_core_field_redeclared_in_template_raises", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L284"}, {"caller_nid": "readme_test_generator_test_core_field_redeclared_in_template_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L285"}, {"caller_nid": "readme_test_generator_test_core_field_redeclared_in_template_raises", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L286"}, {"caller_nid": "readme_test_generator_test_core_field_redeclared_in_config_raises", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L293"}, {"caller_nid": "readme_test_generator_test_core_field_redeclared_in_config_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L294"}, {"caller_nid": "readme_test_generator_test_core_field_redeclared_in_config_raises", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L295"}, {"caller_nid": "readme_test_generator_test_project_level_system_run_is_none", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L306"}, {"caller_nid": "readme_test_generator_test_project_level_system_run_is_none", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L307"}, {"caller_nid": "readme_test_generator_test_project_level_system_run_is_none", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L307"}, {"caller_nid": "readme_test_generator_test_run_level_experimental_run_name", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L315"}, {"caller_nid": "readme_test_generator_test_run_level_experimental_run_name", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L316"}, {"caller_nid": "readme_test_generator_test_run_level_experimental_run_name", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L316"}, {"caller_nid": "readme_test_generator_test_run_level_test_run_name", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L324"}, {"caller_nid": "readme_test_generator_test_run_level_test_run_name", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L325"}, {"caller_nid": "readme_test_generator_test_run_level_test_run_name", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L325"}, {"caller_nid": "readme_test_generator_test_string_type_accepts_string_rejects_int", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L339"}, {"caller_nid": "readme_test_generator_test_string_type_accepts_string_rejects_int", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L341"}, {"caller_nid": "readme_test_generator_test_string_type_accepts_string_rejects_int", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L346"}, {"caller_nid": "readme_test_generator_test_string_type_accepts_string_rejects_int", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L347"}, {"caller_nid": "readme_test_generator_test_text_type_accepts_multiline_rejects_list", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L357"}, {"caller_nid": "readme_test_generator_test_text_type_accepts_multiline_rejects_list", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L358"}, {"caller_nid": "readme_test_generator_test_text_type_accepts_multiline_rejects_list", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L362"}, {"caller_nid": "readme_test_generator_test_text_type_accepts_multiline_rejects_list", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L363"}, {"caller_nid": "readme_test_generator_test_choice_type_accepts_listed_rejects_other", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L373"}, {"caller_nid": "readme_test_generator_test_choice_type_accepts_listed_rejects_other", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L374"}, {"caller_nid": "readme_test_generator_test_choice_type_accepts_listed_rejects_other", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L378"}, {"caller_nid": "readme_test_generator_test_choice_type_accepts_listed_rejects_other", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L379"}, {"caller_nid": "readme_test_generator_test_choice_without_options_raises", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L387"}, {"caller_nid": "readme_test_generator_test_choice_without_options_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L388"}, {"caller_nid": "readme_test_generator_test_choice_without_options_raises", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L389"}, {"caller_nid": "readme_test_generator_test_date_type_accepts_iso8601_rejects_garbage", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L399"}, {"caller_nid": "readme_test_generator_test_date_type_accepts_iso8601_rejects_garbage", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L400"}, {"caller_nid": "readme_test_generator_test_date_type_accepts_iso8601_rejects_garbage", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L404"}, {"caller_nid": "readme_test_generator_test_date_type_accepts_iso8601_rejects_garbage", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L411"}, {"caller_nid": "readme_test_generator_test_date_type_accepts_iso8601_rejects_garbage", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L412"}, {"caller_nid": "readme_test_generator_test_date_type_rejects_non_string", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L420"}, {"caller_nid": "readme_test_generator_test_date_type_rejects_non_string", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L421"}, {"caller_nid": "readme_test_generator_test_date_type_rejects_non_string", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L422"}, {"caller_nid": "readme_test_generator_test_boolean_type_accepts_bool_rejects_string", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L432"}, {"caller_nid": "readme_test_generator_test_boolean_type_accepts_bool_rejects_string", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L433"}, {"caller_nid": "readme_test_generator_test_boolean_type_accepts_bool_rejects_string", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L437"}, {"caller_nid": "readme_test_generator_test_boolean_type_accepts_bool_rejects_string", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L441"}, {"caller_nid": "readme_test_generator_test_boolean_type_accepts_bool_rejects_string", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L442"}, {"caller_nid": "readme_test_generator_test_unknown_field_type_raises", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L450"}, {"caller_nid": "readme_test_generator_test_unknown_field_type_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L451"}, {"caller_nid": "readme_test_generator_test_unknown_field_type_raises", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L452"}, {"caller_nid": "readme_test_generator_test_choice_type_rejects_non_string_value", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L462"}, {"caller_nid": "readme_test_generator_test_choice_type_rejects_non_string_value", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L463"}, {"caller_nid": "readme_test_generator_test_choice_type_rejects_non_string_value", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L464"}, {"caller_nid": "readme_test_generator_test_generate_is_idempotent_byte_identical", "callee": "CustomField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L483"}, {"caller_nid": "readme_test_generator_test_generate_is_idempotent_byte_identical", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L485"}, {"caller_nid": "readme_test_generator_test_generate_is_idempotent_byte_identical", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L493"}, {"caller_nid": "readme_test_generator_test_generate_is_idempotent_byte_identical", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L496"}, {"caller_nid": "readme_test_generator_test_generate_is_idempotent_byte_identical", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L497"}, {"caller_nid": "readme_test_generator_test_generate_is_idempotent_byte_identical", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L498"}, {"caller_nid": "readme_test_generator_test_generate_is_idempotent_byte_identical", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L501"}, {"caller_nid": "readme_test_generator_test_generate_is_idempotent_byte_identical", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L502"}, {"caller_nid": "readme_test_generator_test_generate_is_idempotent_byte_identical", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L503"}, {"caller_nid": "readme_test_generator_test_generated_at_uses_z_suffix", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L513"}, {"caller_nid": "readme_test_generator_test_generated_at_uses_z_suffix", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L514"}, {"caller_nid": "readme_test_generator_test_generated_at_uses_z_suffix", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L514"}, {"caller_nid": "readme_test_generator_test_generated_at_uses_z_suffix", "callee": "endswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L515"}, {"caller_nid": "readme_test_generator_test_generated_at_uses_z_suffix", "callee": "endswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L516"}, {"caller_nid": "readme_test_generator_test_cache_dir_created_on_demand", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L522"}, {"caller_nid": "readme_test_generator_test_cache_dir_created_on_demand", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L523"}, {"caller_nid": "readme_test_generator_test_cache_dir_created_on_demand", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L524"}, {"caller_nid": "readme_test_generator_test_value_without_declaration_skips_typecheck", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L535"}, {"caller_nid": "readme_test_generator_test_value_without_declaration_skips_typecheck", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L536"}, {"caller_nid": "readme_test_generator_test_optional_empty_field_is_skipped", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L548"}, {"caller_nid": "readme_test_generator_test_optional_empty_field_is_skipped", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L549"}, {"caller_nid": "readme_test_generator_test_required_field_present_with_none_raises", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L560"}, {"caller_nid": "readme_test_generator_test_required_field_present_with_none_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L561"}, {"caller_nid": "readme_test_generator_test_required_field_present_with_none_raises", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L562"}, {"caller_nid": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", "callee": "SystemFields", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L573"}, {"caller_nid": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L574"}, {"caller_nid": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", "callee": "generate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L582"}, {"caller_nid": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L583"}, {"caller_nid": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py", "source_location": "L583"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/7d9570b0db714fd13dee04bd62f4a3a8da2d8e227397ac48598999ef1e0cf868.json b/graphify-out/cache/ast/7d9570b0db714fd13dee04bd62f4a3a8da2d8e227397ac48598999ef1e0cf868.json new file mode 100644 index 0000000..194522a --- /dev/null +++ b/graphify-out/cache/ast/7d9570b0db714fd13dee04bd62f4a3a8da2d8e227397ac48598999ef1e0cf868.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "label": "test_cache.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L1"}, {"id": "lims_test_cache_project", "label": "_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L19"}, {"id": "lims_test_cache_test_init_creates_table_idempotent", "label": "test_init_creates_table_idempotent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L39"}, {"id": "lims_test_cache_test_upsert_many_then_list", "label": "test_upsert_many_then_list()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L47"}, {"id": "lims_test_cache_test_upsert_many_empty_is_noop", "label": "test_upsert_many_empty_is_noop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L59"}, {"id": "lims_test_cache_test_upsert_updates_existing_row", "label": "test_upsert_updates_existing_row()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L70"}, {"id": "lims_test_cache_test_get_project_by_uid_or_short_id", "label": "test_get_project_by_uid_or_short_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L95"}, {"id": "lims_test_cache_test_get_project_missing_returns_none", "label": "test_get_project_missing_returns_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L108"}, {"id": "lims_test_cache_test_list_projects_status_filter", "label": "test_list_projects_status_filter()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L118"}, {"id": "lims_test_cache_test_is_fresh_true_when_within_ttl", "label": "test_is_fresh_true_when_within_ttl()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L135"}, {"id": "lims_test_cache_test_is_fresh_false_when_stale", "label": "test_is_fresh_false_when_stale()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L145"}, {"id": "lims_test_cache_test_is_fresh_false_when_empty", "label": "test_is_fresh_false_when_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L156"}, {"id": "lims_test_cache_test_is_fresh_handles_zulu_suffix", "label": "test_is_fresh_handles_zulu_suffix()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L165"}, {"id": "lims_test_cache_test_is_fresh_ignores_invalid_timestamp", "label": "test_is_fresh_ignores_invalid_timestamp()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L179"}, {"id": "lims_test_cache_test_endpoint_isolates_rows", "label": "test_endpoint_isolates_rows()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L192"}, {"id": "lims_test_cache_test_require_conn_before_init_raises", "label": "test_require_conn_before_init_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L206"}, {"id": "lims_test_cache_test_close_is_idempotent", "label": "test_close_is_idempotent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L212"}, {"id": "lims_test_cache_test_is_fresh_handles_naive_timestamp", "label": "test_is_fresh_handles_naive_timestamp()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L220"}, {"id": "lims_test_cache_rationale_1", "label": "Tests for :class:`exlab_wizard.lims.cache.LIMSCache`. The cache is the \u00a77.2.4 S", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L1"}, {"id": "lims_test_cache_rationale_221", "label": "A naive ISO timestamp (no offset) is treated as UTC by the cache.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L221"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "exlab_wizard_lims_cache", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "exlab_wizard_lims_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_project", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_init_creates_table_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_upsert_many_then_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_upsert_many_empty_is_noop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_upsert_updates_existing_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L70", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_get_project_by_uid_or_short_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L95", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_get_project_missing_returns_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L108", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_list_projects_status_filter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L118", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_is_fresh_true_when_within_ttl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_is_fresh_false_when_stale", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L145", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_is_fresh_false_when_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L156", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_is_fresh_handles_zulu_suffix", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L165", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_is_fresh_ignores_invalid_timestamp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L179", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_endpoint_isolates_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L192", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_require_conn_before_init_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L206", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_close_is_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L212", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "target": "lims_test_cache_test_is_fresh_handles_naive_timestamp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L220", "weight": 1.0}, {"source": "lims_test_cache_test_upsert_many_then_list", "target": "lims_test_cache_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L51", "weight": 1.0}, {"source": "lims_test_cache_test_upsert_updates_existing_row", "target": "lims_test_cache_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L74", "weight": 1.0}, {"source": "lims_test_cache_test_get_project_by_uid_or_short_id", "target": "lims_test_cache_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L99", "weight": 1.0}, {"source": "lims_test_cache_test_list_projects_status_filter", "target": "lims_test_cache_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L125", "weight": 1.0}, {"source": "lims_test_cache_test_is_fresh_true_when_within_ttl", "target": "lims_test_cache_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L139", "weight": 1.0}, {"source": "lims_test_cache_test_is_fresh_false_when_stale", "target": "lims_test_cache_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L150", "weight": 1.0}, {"source": "lims_test_cache_test_is_fresh_handles_zulu_suffix", "target": "lims_test_cache_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L172", "weight": 1.0}, {"source": "lims_test_cache_test_is_fresh_ignores_invalid_timestamp", "target": "lims_test_cache_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L185", "weight": 1.0}, {"source": "lims_test_cache_test_endpoint_isolates_rows", "target": "lims_test_cache_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L196", "weight": 1.0}, {"source": "lims_test_cache_test_is_fresh_handles_naive_timestamp", "target": "lims_test_cache_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L227", "weight": 1.0}, {"source": "lims_test_cache_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_lims_test_cache_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L1", "weight": 1.0}, {"source": "lims_test_cache_rationale_221", "target": "lims_test_cache_test_is_fresh_handles_naive_timestamp", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L221", "weight": 1.0}], "raw_calls": [{"caller_nid": "lims_test_cache_project", "callee": "LIMSProject", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L26"}, {"caller_nid": "lims_test_cache_project", "callee": "isoformat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L35"}, {"caller_nid": "lims_test_cache_project", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L35"}, {"caller_nid": "lims_test_cache_test_init_creates_table_idempotent", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L40"}, {"caller_nid": "lims_test_cache_test_init_creates_table_idempotent", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L41"}, {"caller_nid": "lims_test_cache_test_init_creates_table_idempotent", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L43"}, {"caller_nid": "lims_test_cache_test_init_creates_table_idempotent", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L44"}, {"caller_nid": "lims_test_cache_test_upsert_many_then_list", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L48"}, {"caller_nid": "lims_test_cache_test_upsert_many_then_list", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L49"}, {"caller_nid": "lims_test_cache_test_upsert_many_then_list", "callee": "upsert_many", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L52"}, {"caller_nid": "lims_test_cache_test_upsert_many_then_list", "callee": "list_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L53"}, {"caller_nid": "lims_test_cache_test_upsert_many_then_list", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L54"}, {"caller_nid": "lims_test_cache_test_upsert_many_then_list", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L56"}, {"caller_nid": "lims_test_cache_test_upsert_many_empty_is_noop", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L60"}, {"caller_nid": "lims_test_cache_test_upsert_many_empty_is_noop", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L61"}, {"caller_nid": "lims_test_cache_test_upsert_many_empty_is_noop", "callee": "upsert_many", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L63"}, {"caller_nid": "lims_test_cache_test_upsert_many_empty_is_noop", "callee": "list_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L64"}, {"caller_nid": "lims_test_cache_test_upsert_many_empty_is_noop", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L67"}, {"caller_nid": "lims_test_cache_test_upsert_updates_existing_row", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L71"}, {"caller_nid": "lims_test_cache_test_upsert_updates_existing_row", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L72"}, {"caller_nid": "lims_test_cache_test_upsert_updates_existing_row", "callee": "upsert_many", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L74"}, {"caller_nid": "lims_test_cache_test_upsert_updates_existing_row", "callee": "isoformat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L76"}, {"caller_nid": "lims_test_cache_test_upsert_updates_existing_row", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L76"}, {"caller_nid": "lims_test_cache_test_upsert_updates_existing_row", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L76"}, {"caller_nid": "lims_test_cache_test_upsert_updates_existing_row", "callee": "LIMSProject", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L77"}, {"caller_nid": "lims_test_cache_test_upsert_updates_existing_row", "callee": "upsert_many", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L86"}, {"caller_nid": "lims_test_cache_test_upsert_updates_existing_row", "callee": "list_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L87"}, {"caller_nid": "lims_test_cache_test_upsert_updates_existing_row", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L88"}, {"caller_nid": "lims_test_cache_test_upsert_updates_existing_row", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L92"}, {"caller_nid": "lims_test_cache_test_get_project_by_uid_or_short_id", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L96"}, {"caller_nid": "lims_test_cache_test_get_project_by_uid_or_short_id", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L97"}, {"caller_nid": "lims_test_cache_test_get_project_by_uid_or_short_id", "callee": "upsert_many", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L99"}, {"caller_nid": "lims_test_cache_test_get_project_by_uid_or_short_id", "callee": "get_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L100"}, {"caller_nid": "lims_test_cache_test_get_project_by_uid_or_short_id", "callee": "get_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L101"}, {"caller_nid": "lims_test_cache_test_get_project_by_uid_or_short_id", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L105"}, {"caller_nid": "lims_test_cache_test_get_project_missing_returns_none", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L109"}, {"caller_nid": "lims_test_cache_test_get_project_missing_returns_none", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L110"}, {"caller_nid": "lims_test_cache_test_get_project_missing_returns_none", "callee": "get_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L112"}, {"caller_nid": "lims_test_cache_test_get_project_missing_returns_none", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L115"}, {"caller_nid": "lims_test_cache_test_list_projects_status_filter", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L119"}, {"caller_nid": "lims_test_cache_test_list_projects_status_filter", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L120"}, {"caller_nid": "lims_test_cache_test_list_projects_status_filter", "callee": "upsert_many", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L122"}, {"caller_nid": "lims_test_cache_test_list_projects_status_filter", "callee": "list_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L129"}, {"caller_nid": "lims_test_cache_test_list_projects_status_filter", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L132"}, {"caller_nid": "lims_test_cache_test_is_fresh_true_when_within_ttl", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L136"}, {"caller_nid": "lims_test_cache_test_is_fresh_true_when_within_ttl", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L137"}, {"caller_nid": "lims_test_cache_test_is_fresh_true_when_within_ttl", "callee": "upsert_many", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L139"}, {"caller_nid": "lims_test_cache_test_is_fresh_true_when_within_ttl", "callee": "is_fresh", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L140"}, {"caller_nid": "lims_test_cache_test_is_fresh_true_when_within_ttl", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L142"}, {"caller_nid": "lims_test_cache_test_is_fresh_false_when_stale", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L146"}, {"caller_nid": "lims_test_cache_test_is_fresh_false_when_stale", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L147"}, {"caller_nid": "lims_test_cache_test_is_fresh_false_when_stale", "callee": "isoformat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L149"}, {"caller_nid": "lims_test_cache_test_is_fresh_false_when_stale", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L149"}, {"caller_nid": "lims_test_cache_test_is_fresh_false_when_stale", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L149"}, {"caller_nid": "lims_test_cache_test_is_fresh_false_when_stale", "callee": "upsert_many", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L150"}, {"caller_nid": "lims_test_cache_test_is_fresh_false_when_stale", "callee": "is_fresh", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L151"}, {"caller_nid": "lims_test_cache_test_is_fresh_false_when_stale", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L153"}, {"caller_nid": "lims_test_cache_test_is_fresh_false_when_empty", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L157"}, {"caller_nid": "lims_test_cache_test_is_fresh_false_when_empty", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L158"}, {"caller_nid": "lims_test_cache_test_is_fresh_false_when_empty", "callee": "is_fresh", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L160"}, {"caller_nid": "lims_test_cache_test_is_fresh_false_when_empty", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L162"}, {"caller_nid": "lims_test_cache_test_is_fresh_handles_zulu_suffix", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L166"}, {"caller_nid": "lims_test_cache_test_is_fresh_handles_zulu_suffix", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L167"}, {"caller_nid": "lims_test_cache_test_is_fresh_handles_zulu_suffix", "callee": "upsert_many", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L170"}, {"caller_nid": "lims_test_cache_test_is_fresh_handles_zulu_suffix", "callee": "is_fresh", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L174"}, {"caller_nid": "lims_test_cache_test_is_fresh_handles_zulu_suffix", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L176"}, {"caller_nid": "lims_test_cache_test_is_fresh_ignores_invalid_timestamp", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L180"}, {"caller_nid": "lims_test_cache_test_is_fresh_ignores_invalid_timestamp", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L181"}, {"caller_nid": "lims_test_cache_test_is_fresh_ignores_invalid_timestamp", "callee": "upsert_many", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L183"}, {"caller_nid": "lims_test_cache_test_is_fresh_ignores_invalid_timestamp", "callee": "is_fresh", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L187"}, {"caller_nid": "lims_test_cache_test_is_fresh_ignores_invalid_timestamp", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L189"}, {"caller_nid": "lims_test_cache_test_endpoint_isolates_rows", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L193"}, {"caller_nid": "lims_test_cache_test_endpoint_isolates_rows", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L194"}, {"caller_nid": "lims_test_cache_test_endpoint_isolates_rows", "callee": "upsert_many", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L196"}, {"caller_nid": "lims_test_cache_test_endpoint_isolates_rows", "callee": "upsert_many", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L197"}, {"caller_nid": "lims_test_cache_test_endpoint_isolates_rows", "callee": "list_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L198"}, {"caller_nid": "lims_test_cache_test_endpoint_isolates_rows", "callee": "list_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L199"}, {"caller_nid": "lims_test_cache_test_endpoint_isolates_rows", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L203"}, {"caller_nid": "lims_test_cache_test_require_conn_before_init_raises", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L207"}, {"caller_nid": "lims_test_cache_test_require_conn_before_init_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L208"}, {"caller_nid": "lims_test_cache_test_require_conn_before_init_raises", "callee": "list_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L209"}, {"caller_nid": "lims_test_cache_test_close_is_idempotent", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L213"}, {"caller_nid": "lims_test_cache_test_close_is_idempotent", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L214"}, {"caller_nid": "lims_test_cache_test_close_is_idempotent", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L215"}, {"caller_nid": "lims_test_cache_test_close_is_idempotent", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L217"}, {"caller_nid": "lims_test_cache_test_is_fresh_handles_naive_timestamp", "callee": "LIMSCache", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L222"}, {"caller_nid": "lims_test_cache_test_is_fresh_handles_naive_timestamp", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L223"}, {"caller_nid": "lims_test_cache_test_is_fresh_handles_naive_timestamp", "callee": "isoformat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L226"}, {"caller_nid": "lims_test_cache_test_is_fresh_handles_naive_timestamp", "callee": "replace", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L226"}, {"caller_nid": "lims_test_cache_test_is_fresh_handles_naive_timestamp", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L226"}, {"caller_nid": "lims_test_cache_test_is_fresh_handles_naive_timestamp", "callee": "upsert_many", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L227"}, {"caller_nid": "lims_test_cache_test_is_fresh_handles_naive_timestamp", "callee": "is_fresh", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L228"}, {"caller_nid": "lims_test_cache_test_is_fresh_handles_naive_timestamp", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py", "source_location": "L230"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/7da70f281459f4f3b02b36e031ac442ca36a786480a939579a7bcaa77eba6649.json b/graphify-out/cache/ast/7da70f281459f4f3b02b36e031ac442ca36a786480a939579a7bcaa77eba6649.json new file mode 100644 index 0000000..9597eeb --- /dev/null +++ b/graphify-out/cache/ast/7da70f281459f4f3b02b36e031ac442ca36a786480a939579a7bcaa77eba6649.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_window_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/__init__.py", "source_location": "L1"}, {"id": "window_init_rationale_1", "label": "Unit tests for ``exlab_wizard.window``. Backend Spec \u00a74.3.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/__init__.py", "source_location": "L1"}], "edges": [{"source": "window_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_window_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/7fd7b016b0b2facb4dbb29e99ec8869c3ea6793531dc4608daa69c17d423b7dc.json b/graphify-out/cache/ast/7fd7b016b0b2facb4dbb29e99ec8869c3ea6793531dc4608daa69c17d423b7dc.json new file mode 100644 index 0000000..10ee1e8 --- /dev/null +++ b/graphify-out/cache/ast/7fd7b016b0b2facb4dbb29e99ec8869c3ea6793531dc4608daa69c17d423b7dc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "label": "test_enums.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L1"}, {"id": "constants_test_enums_test_run_kind_values", "label": "test_run_kind_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L15"}, {"id": "constants_test_enums_test_run_kind_is_str", "label": "test_run_kind_is_str()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L23"}, {"id": "constants_test_enums_test_sync_status_values", "label": "test_sync_status_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L30"}, {"id": "constants_test_enums_test_tier_values", "label": "test_tier_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L47"}, {"id": "constants_test_enums_test_problem_class_values", "label": "test_problem_class_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L55"}, {"id": "constants_test_enums_test_finding_kind_values", "label": "test_finding_kind_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L80"}, {"id": "constants_test_enums_test_template_type_values", "label": "test_template_type_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L93"}, {"id": "constants_test_enums_test_run_scope_values", "label": "test_run_scope_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L102"}, {"id": "constants_test_enums_test_lims_project_status_values_pascal_case", "label": "test_lims_project_status_values_pascal_case()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L111"}, {"id": "constants_test_enums_test_lims_project_source_values", "label": "test_lims_project_source_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L126"}, {"id": "constants_test_enums_test_ingest_state_enum_is_removed", "label": "test_ingest_state_enum_is_removed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L139"}, {"id": "constants_test_enums_test_run_sync_state_values", "label": "test_run_sync_state_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L145"}, {"id": "constants_test_enums_test_setup_state_values", "label": "test_setup_state_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L151"}, {"id": "constants_test_enums_test_transport_type_values", "label": "test_transport_type_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L173"}, {"id": "constants_test_enums_test_completeness_signal_enum_removed", "label": "test_completeness_signal_enum_removed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L181"}, {"id": "constants_test_enums_test_staging_cleanup_mode_values", "label": "test_staging_cleanup_mode_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L186"}, {"id": "constants_test_enums_test_plugin_status_values", "label": "test_plugin_status_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L194"}, {"id": "constants_test_enums_test_creation_level_values", "label": "test_creation_level_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L211"}, {"id": "constants_test_enums_test_orchestrator_transport_type_values", "label": "test_orchestrator_transport_type_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L219"}, {"id": "constants_test_enums_test_field_type_values", "label": "test_field_type_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L227"}, {"id": "constants_test_enums_test_bandwidth_day_values", "label": "test_bandwidth_day_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L238"}, {"id": "constants_test_enums_test_session_kind_values", "label": "test_session_kind_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L246"}, {"id": "constants_test_enums_test_next_action_values", "label": "test_next_action_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L254"}, {"id": "constants_test_enums_test_audit_scope_kind_values", "label": "test_audit_scope_kind_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L262"}, {"id": "constants_test_enums_test_directory_level_values", "label": "test_directory_level_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L271"}, {"id": "constants_test_enums_test_platform_values", "label": "test_platform_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L279"}, {"id": "constants_test_enums_test_setup_next_action_values", "label": "test_setup_next_action_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L287"}, {"id": "constants_test_enums_test_sync_handle_state_values", "label": "test_sync_handle_state_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L295"}, {"id": "constants_test_enums_test_plugin_source_root_values", "label": "test_plugin_source_root_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L303"}, {"id": "constants_test_enums_test_tree_project_status_values", "label": "test_tree_project_status_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L311"}, {"id": "constants_test_enums_test_enums_re_exported_from_package", "label": "test_enums_re_exported_from_package()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L319"}, {"id": "constants_test_enums_rationale_1", "label": "Verify the ``StrEnum`` value strings match the design spec verbatim. These enum", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "enum", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_run_kind_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_run_kind_is_str", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_sync_status_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_tier_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_problem_class_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L55", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_finding_kind_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L80", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_template_type_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_run_scope_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L102", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_lims_project_status_values_pascal_case", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L111", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_lims_project_source_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L126", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_ingest_state_enum_is_removed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L139", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_run_sync_state_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L145", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_setup_state_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L151", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_transport_type_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L173", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_completeness_signal_enum_removed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L181", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_staging_cleanup_mode_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L186", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_plugin_status_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L194", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_creation_level_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L211", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_orchestrator_transport_type_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L219", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_field_type_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L227", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_bandwidth_day_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L238", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_session_kind_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L246", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_next_action_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L254", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_audit_scope_kind_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L262", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_directory_level_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L271", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_platform_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L279", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_setup_next_action_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L287", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_sync_handle_state_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L295", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_plugin_source_root_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L303", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_tree_project_status_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L311", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "target": "constants_test_enums_test_enums_re_exported_from_package", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L319", "weight": 1.0}, {"source": "constants_test_enums_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_constants_test_enums_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "constants_test_enums_test_run_kind_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L17"}, {"caller_nid": "constants_test_enums_test_sync_status_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L32"}, {"caller_nid": "constants_test_enums_test_tier_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L49"}, {"caller_nid": "constants_test_enums_test_problem_class_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L57"}, {"caller_nid": "constants_test_enums_test_finding_kind_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L82"}, {"caller_nid": "constants_test_enums_test_template_type_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L95"}, {"caller_nid": "constants_test_enums_test_run_scope_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L104"}, {"caller_nid": "constants_test_enums_test_lims_project_status_values_pascal_case", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L113"}, {"caller_nid": "constants_test_enums_test_lims_project_source_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L128"}, {"caller_nid": "constants_test_enums_test_ingest_state_enum_is_removed", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L142"}, {"caller_nid": "constants_test_enums_test_run_sync_state_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L147"}, {"caller_nid": "constants_test_enums_test_setup_state_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L153"}, {"caller_nid": "constants_test_enums_test_transport_type_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L175"}, {"caller_nid": "constants_test_enums_test_completeness_signal_enum_removed", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L183"}, {"caller_nid": "constants_test_enums_test_staging_cleanup_mode_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L188"}, {"caller_nid": "constants_test_enums_test_plugin_status_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L196"}, {"caller_nid": "constants_test_enums_test_creation_level_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L214"}, {"caller_nid": "constants_test_enums_test_orchestrator_transport_type_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L222"}, {"caller_nid": "constants_test_enums_test_field_type_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L230"}, {"caller_nid": "constants_test_enums_test_bandwidth_day_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L241"}, {"caller_nid": "constants_test_enums_test_session_kind_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L249"}, {"caller_nid": "constants_test_enums_test_next_action_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L257"}, {"caller_nid": "constants_test_enums_test_audit_scope_kind_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L265"}, {"caller_nid": "constants_test_enums_test_directory_level_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L274"}, {"caller_nid": "constants_test_enums_test_platform_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L281"}, {"caller_nid": "constants_test_enums_test_setup_next_action_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L290"}, {"caller_nid": "constants_test_enums_test_sync_handle_state_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L298"}, {"caller_nid": "constants_test_enums_test_plugin_source_root_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L306"}, {"caller_nid": "constants_test_enums_test_tree_project_status_values", "callee": "issubclass", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py", "source_location": "L313"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/82a1b6b52f0bd2e5197998f6c95bd8c48bc07f0c3e8801452346d2fd6fc91619.json b/graphify-out/cache/ast/82a1b6b52f0bd2e5197998f6c95bd8c48bc07f0c3e8801452346d2fd6fc91619.json new file mode 100644 index 0000000..ecdd327 --- /dev/null +++ b/graphify-out/cache/ast/82a1b6b52f0bd2e5197998f6c95bd8c48bc07f0c3e8801452346d2fd6fc91619.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "label": "test_scan.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L1"}, {"id": "orchestrator_test_scan_test_iter_subdirs_returns_empty_for_missing_path", "label": "test_iter_subdirs_returns_empty_for_missing_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L23"}, {"id": "orchestrator_test_scan_test_iter_subdirs_skips_cache_dir_and_dotfiles", "label": "test_iter_subdirs_skips_cache_dir_and_dotfiles()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L27"}, {"id": "orchestrator_test_scan_test_iter_subdirs_does_not_follow_symlinks", "label": "test_iter_subdirs_does_not_follow_symlinks()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L38"}, {"id": "orchestrator_test_scan_test_walk_run_leaves_returns_empty_when_root_missing", "label": "test_walk_run_leaves_returns_empty_when_root_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L54"}, {"id": "orchestrator_test_scan_test_walk_run_leaves_finds_experimental_and_test_runs", "label": "test_walk_run_leaves_finds_experimental_and_test_runs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L58"}, {"id": "orchestrator_test_scan_test_walk_run_leaves_handles_empty_tree", "label": "test_walk_run_leaves_handles_empty_tree()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L69"}, {"id": "orchestrator_test_scan_test_count_files_and_bytes_excludes_cache_dir_by_default", "label": "test_count_files_and_bytes_excludes_cache_dir_by_default()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L79"}, {"id": "orchestrator_test_scan_test_count_files_and_bytes_includes_cache_dir_when_requested", "label": "test_count_files_and_bytes_includes_cache_dir_when_requested()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L88"}, {"id": "orchestrator_test_scan_test_count_files_and_bytes_returns_zero_for_missing_path", "label": "test_count_files_and_bytes_returns_zero_for_missing_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L97"}, {"id": "orchestrator_test_scan_test_count_files_and_bytes_descends_into_subdirectories", "label": "test_count_files_and_bytes_descends_into_subdirectories()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L103"}, {"id": "orchestrator_test_scan_rationale_1", "label": "Unit tests for ``exlab_wizard.orchestrator._scan``. The shared filesystem helpe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L1"}, {"id": "orchestrator_test_scan_rationale_70", "label": "An empty staging_root has no run leaves -- not an error.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L70"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "target": "exlab_wizard_orchestrator_scan", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "target": "orchestrator_test_scan_test_iter_subdirs_returns_empty_for_missing_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "target": "orchestrator_test_scan_test_iter_subdirs_skips_cache_dir_and_dotfiles", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "target": "orchestrator_test_scan_test_iter_subdirs_does_not_follow_symlinks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "target": "orchestrator_test_scan_test_walk_run_leaves_returns_empty_when_root_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L54", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "target": "orchestrator_test_scan_test_walk_run_leaves_finds_experimental_and_test_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "target": "orchestrator_test_scan_test_walk_run_leaves_handles_empty_tree", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "target": "orchestrator_test_scan_test_count_files_and_bytes_excludes_cache_dir_by_default", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L79", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "target": "orchestrator_test_scan_test_count_files_and_bytes_includes_cache_dir_when_requested", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L88", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "target": "orchestrator_test_scan_test_count_files_and_bytes_returns_zero_for_missing_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L97", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "target": "orchestrator_test_scan_test_count_files_and_bytes_descends_into_subdirectories", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L103", "weight": 1.0}, {"source": "orchestrator_test_scan_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_scan_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L1", "weight": 1.0}, {"source": "orchestrator_test_scan_rationale_70", "target": "orchestrator_test_scan_test_walk_run_leaves_handles_empty_tree", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L70", "weight": 1.0}], "raw_calls": [{"caller_nid": "orchestrator_test_scan_test_iter_subdirs_returns_empty_for_missing_path", "callee": "iter_subdirs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L24"}, {"caller_nid": "orchestrator_test_scan_test_iter_subdirs_skips_cache_dir_and_dotfiles", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L28"}, {"caller_nid": "orchestrator_test_scan_test_iter_subdirs_skips_cache_dir_and_dotfiles", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L29"}, {"caller_nid": "orchestrator_test_scan_test_iter_subdirs_skips_cache_dir_and_dotfiles", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L30"}, {"caller_nid": "orchestrator_test_scan_test_iter_subdirs_skips_cache_dir_and_dotfiles", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L31"}, {"caller_nid": "orchestrator_test_scan_test_iter_subdirs_skips_cache_dir_and_dotfiles", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L32"}, {"caller_nid": "orchestrator_test_scan_test_iter_subdirs_skips_cache_dir_and_dotfiles", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L34"}, {"caller_nid": "orchestrator_test_scan_test_iter_subdirs_skips_cache_dir_and_dotfiles", "callee": "iter_subdirs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L34"}, {"caller_nid": "orchestrator_test_scan_test_iter_subdirs_does_not_follow_symlinks", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L40"}, {"caller_nid": "orchestrator_test_scan_test_iter_subdirs_does_not_follow_symlinks", "callee": "symlink_to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L42"}, {"caller_nid": "orchestrator_test_scan_test_iter_subdirs_does_not_follow_symlinks", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L43"}, {"caller_nid": "orchestrator_test_scan_test_iter_subdirs_does_not_follow_symlinks", "callee": "iter_subdirs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L43"}, {"caller_nid": "orchestrator_test_scan_test_walk_run_leaves_returns_empty_when_root_missing", "callee": "walk_run_leaves", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L55"}, {"caller_nid": "orchestrator_test_scan_test_walk_run_leaves_finds_experimental_and_test_runs", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L59"}, {"caller_nid": "orchestrator_test_scan_test_walk_run_leaves_finds_experimental_and_test_runs", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L60"}, {"caller_nid": "orchestrator_test_scan_test_walk_run_leaves_finds_experimental_and_test_runs", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L64"}, {"caller_nid": "orchestrator_test_scan_test_walk_run_leaves_finds_experimental_and_test_runs", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L65"}, {"caller_nid": "orchestrator_test_scan_test_walk_run_leaves_finds_experimental_and_test_runs", "callee": "walk_run_leaves", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L65"}, {"caller_nid": "orchestrator_test_scan_test_walk_run_leaves_handles_empty_tree", "callee": "walk_run_leaves", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L71"}, {"caller_nid": "orchestrator_test_scan_test_count_files_and_bytes_excludes_cache_dir_by_default", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L80"}, {"caller_nid": "orchestrator_test_scan_test_count_files_and_bytes_excludes_cache_dir_by_default", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L81"}, {"caller_nid": "orchestrator_test_scan_test_count_files_and_bytes_excludes_cache_dir_by_default", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L82"}, {"caller_nid": "orchestrator_test_scan_test_count_files_and_bytes_excludes_cache_dir_by_default", "callee": "count_files_and_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L83"}, {"caller_nid": "orchestrator_test_scan_test_count_files_and_bytes_includes_cache_dir_when_requested", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L89"}, {"caller_nid": "orchestrator_test_scan_test_count_files_and_bytes_includes_cache_dir_when_requested", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L90"}, {"caller_nid": "orchestrator_test_scan_test_count_files_and_bytes_includes_cache_dir_when_requested", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L91"}, {"caller_nid": "orchestrator_test_scan_test_count_files_and_bytes_includes_cache_dir_when_requested", "callee": "count_files_and_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L92"}, {"caller_nid": "orchestrator_test_scan_test_count_files_and_bytes_returns_zero_for_missing_path", "callee": "count_files_and_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L98"}, {"caller_nid": "orchestrator_test_scan_test_count_files_and_bytes_descends_into_subdirectories", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L104"}, {"caller_nid": "orchestrator_test_scan_test_count_files_and_bytes_descends_into_subdirectories", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L105"}, {"caller_nid": "orchestrator_test_scan_test_count_files_and_bytes_descends_into_subdirectories", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L106"}, {"caller_nid": "orchestrator_test_scan_test_count_files_and_bytes_descends_into_subdirectories", "callee": "count_files_and_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py", "source_location": "L107"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/82e46c93844dfa7a939ed91041323b3396fcd7a8d82f8a47086f97d315e29ad9.json b/graphify-out/cache/ast/82e46c93844dfa7a939ed91041323b3396fcd7a8d82f8a47086f97d315e29ad9.json new file mode 100644 index 0000000..94cbbfc --- /dev/null +++ b/graphify-out/cache/ast/82e46c93844dfa7a939ed91041323b3396fcd7a8d82f8a47086f97d315e29ad9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "label": "creation.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1"}, {"id": "controller_creation_projectcreaterequest", "label": "ProjectCreateRequest", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L141"}, {"id": "controller_creation_runcreaterequest", "label": "RunCreateRequest", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L160"}, {"id": "controller_creation_sessionhandle", "label": "SessionHandle", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L185"}, {"id": "controller_creation_readmegeneratorprotocol", "label": "ReadmeGeneratorProtocol", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L199"}, {"id": "protocol", "label": "Protocol", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "controller_creation_readmegeneratorprotocol_generate", "label": ".generate()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L207"}, {"id": "controller_creation_noopreadmegenerator", "label": "NoOpReadmeGenerator", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L210"}, {"id": "controller_creation_noopreadmegenerator_generate", "label": ".generate()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L219"}, {"id": "controller_creation_nassyncprotocol", "label": "NASSyncProtocol", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L226"}, {"id": "controller_creation_nassyncprotocol_enqueue", "label": ".enqueue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L229"}, {"id": "controller_creation_noopnassync", "label": "NoOpNASSync", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L232"}, {"id": "controller_creation_noopnassync_enqueue", "label": ".enqueue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L235"}, {"id": "controller_creation_creationcontroller", "label": "CreationController", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L244"}, {"id": "controller_creation_creationcontroller_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L252"}, {"id": "controller_creation_session_store", "label": "session_store()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L290"}, {"id": "controller_creation_creationcontroller_apply_config", "label": ".apply_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L294"}, {"id": "controller_creation_creationcontroller_create_project", "label": ".create_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L311"}, {"id": "controller_creation_creationcontroller_create_run", "label": ".create_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L324"}, {"id": "controller_creation_creationcontroller_resume", "label": ".resume()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L329"}, {"id": "controller_creation_creationcontroller_cancel", "label": ".cancel()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L353"}, {"id": "controller_creation_creationcontroller_status", "label": ".status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L396"}, {"id": "controller_creation_creationcontroller_subscribe", "label": ".subscribe()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L403"}, {"id": "controller_creation_creationcontroller_launch", "label": "._launch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L427"}, {"id": "controller_creation_creationcontroller_validate_inputs", "label": "._validate_inputs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L465"}, {"id": "controller_creation_creationcontroller_run_pipeline", "label": "._run_pipeline()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L607"}, {"id": "controller_creation_creationcontroller_pipeline_states", "label": "._pipeline_states()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L627"}, {"id": "controller_creation_creationcontroller_resolve_template", "label": "._resolve_template()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L728"}, {"id": "controller_creation_short_id_for", "label": "_short_id_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L733"}, {"id": "controller_creation_project_name_for", "label": "_project_name_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L749"}, {"id": "controller_creation_creationcontroller_resolve_run_lims_block", "label": "._resolve_run_lims_block()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L762"}, {"id": "controller_creation_run_kind_value_for", "label": "_run_kind_value_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L782"}, {"id": "controller_creation_creationcontroller_compose_destination_path", "label": "._compose_destination_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L793"}, {"id": "controller_creation_creationcontroller_render", "label": "._render()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L810"}, {"id": "controller_creation_creationcontroller_plugin_pass", "label": "._plugin_pass()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L837"}, {"id": "controller_creation_creationcontroller_build_readme_context", "label": "._build_readme_context()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L898"}, {"id": "controller_creation_creationcontroller_write_cache", "label": "._write_cache()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L963"}, {"id": "controller_creation_creationcontroller_write_equipment_json", "label": "._write_equipment_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1078"}, {"id": "controller_creation_creationcontroller_post_validate", "label": "._post_validate()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1114"}, {"id": "controller_creation_creationcontroller_transition", "label": "._transition()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1162"}, {"id": "controller_creation_creationcontroller_publish", "label": "._publish()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1183"}, {"id": "controller_creation_creationcontroller_fail", "label": "._fail()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1188"}, {"id": "controller_creation_creationcontroller_cleanup", "label": "._cleanup()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1198"}, {"id": "controller_creation_creationcontroller_handle", "label": "._handle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1217"}, {"id": "controller_creation_format_error", "label": "_format_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1226"}, {"id": "controller_creation_creationcontroller_append_log", "label": "._append_log()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1231"}, {"id": "controller_creation_required_field_ids", "label": "_required_field_ids()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1256"}, {"id": "controller_creation_readme_decls_from_template", "label": "_readme_decls_from_template()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1269"}, {"id": "controller_creation_readme_decls_from_config", "label": "_readme_decls_from_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1301"}, {"id": "controller_creation_os_username", "label": "_os_username()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1326"}, {"id": "controller_creation_has_hard_finding", "label": "_has_hard_finding()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1339"}, {"id": "controller_creation_attach_resolved", "label": "_attach_resolved()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1343"}, {"id": "controller_creation_rationale_1", "label": "Creation controller. Backend Spec \u00a74.4.1, \u00a74.7, \u00a74.8. Composes the validator, t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1"}, {"id": "controller_creation_rationale_142", "label": "Inputs for :meth:`CreationController.create_project`. Backend Spec \u00a74.6.1 /", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L142"}, {"id": "controller_creation_rationale_161", "label": "Inputs for :meth:`CreationController.create_run`. Backend Spec \u00a74.6.1 / UI-", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L161"}, {"id": "controller_creation_rationale_186", "label": "Snapshot of session state. Backend Spec \u00a74.4.1.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L186"}, {"id": "controller_creation_rationale_200", "label": "The README generator surface the controller depends on. Backend \u00a710. Mirror", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L200"}, {"id": "controller_creation_rationale_211", "label": "Lightweight README generator for tests / headless fixtures. Writes a tiny `", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L211"}, {"id": "controller_creation_rationale_227", "label": "The NAS sync surface the controller depends on. Phase 10.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L227"}, {"id": "controller_creation_rationale_233", "label": "No-op stand-in for :class:`NASSyncClient` until Phase 10 lands.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L233"}, {"id": "controller_creation_rationale_245", "label": "Drives the \u00a74.7 state machine end-to-end. Composes the validator (Phase 4),", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L245"}, {"id": "controller_creation_rationale_291", "label": "Expose the in-memory session store for the API surface.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L291"}, {"id": "controller_creation_rationale_295", "label": "Swap the controller's config (and optionally plugin host) in place. Eve", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L295"}, {"id": "controller_creation_rationale_312", "label": "Open a project-creation session and start the pipeline. The session is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L312"}, {"id": "controller_creation_rationale_325", "label": "Open a run-creation session and start the pipeline.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L325"}, {"id": "controller_creation_rationale_330", "label": "Supply ``extra_inputs`` after a ``PluginInputRequired`` prompt. Pushes", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L330"}, {"id": "controller_creation_rationale_354", "label": "Abort an in-flight session. Pushes a ``None`` onto the resume queue (so", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L354"}, {"id": "controller_creation_rationale_397", "label": "Return a snapshot :class:`SessionHandle` for ``session_id``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L397"}, {"id": "controller_creation_rationale_404", "label": "Yield WebSocket-event dicts for the named session. Wraps the session's", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L404"}, {"id": "controller_creation_rationale_428", "label": "Validate the request, then spawn the pipeline as a background task. The", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L428"}, {"id": "controller_creation_rationale_466", "label": "Run the \u00a72 mandatory-core-field gate. Raises :class:`ValidationError` o", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L466"}, {"id": "controller_creation_rationale_608", "label": "Drive the session from RENDERING to DONE / FAILED / ABORTED.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L608"}, {"id": "controller_creation_rationale_628", "label": "Run the RENDERING \u2192 DONE pipeline once.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L628"}, {"id": "controller_creation_rationale_734", "label": "Return the LIMS project ``short_id`` for the request. For a project req", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L734"}, {"id": "controller_creation_rationale_750", "label": "Return the human-readable LIMS project name for the request. This is th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L750"}, {"id": "controller_creation_rationale_763", "label": "Read the parent project's ``lims_project`` block for a run. A run inher", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L763"}, {"id": "controller_creation_rationale_783", "label": "Return the ``run_kind`` value to record on ``creation.json``. Project-l", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L783"}, {"id": "controller_creation_rationale_816", "label": "Render the resolved template into ``dst``. Copier receives the request'", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L816"}, {"id": "controller_creation_rationale_905", "label": "Compose the \u00a710 four-layer :class:`ReadmeContext` for ``req``. Maps the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L905"}, {"id": "controller_creation_rationale_973", "label": "Write README + creation.json into the destination tree.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L973"}, {"id": "controller_creation_rationale_1083", "label": "Write the per-equipment ``equipment.json`` registry record. Backend Spe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1083"}, {"id": "controller_creation_rationale_1120", "label": "Run :meth:`Validator.validate_creation` against the rendered tree. Catc", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1120"}, {"id": "controller_creation_rationale_1199", "label": "Remove or leave the partial directory per the spec.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1199"}, {"id": "controller_creation_rationale_1232", "label": "Best-effort append to the equipment-level log. Backend Spec \u00a711.5. Comp", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1232"}, {"id": "controller_creation_rationale_1257", "label": "Return the ``id`` of every entry in ``extra_fields`` with ``required: true``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1257"}, {"id": "controller_creation_rationale_1270", "label": "Map a template's ``_exlab_readme.fields`` dicts to typed declarations. Entr", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1270"}, {"id": "controller_creation_rationale_1302", "label": "Map ``config.readme.defaults`` entries to typed declarations. Core field id", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1302"}, {"id": "controller_creation_rationale_1327", "label": "Return the creating OS user for the README ``system.created_by``. Distinct", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1327"}, {"id": "controller_creation_rationale_1346", "label": "Stash the resolved template on the request so the pipeline can re-use it. T", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1346"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "getpass", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "shutil", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "socket", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_cache_creation_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_cache_equipment", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_cache_log_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_controller_session_store", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L79", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_controller_state_machine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L80", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L85", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L86", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L87", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L90", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_plugins_base", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L99", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_plugins_host", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L100", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_plugins_logger", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L101", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_readme", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L102", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_template_copier_driver", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L109", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L115", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_validator_engine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L116", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "exlab_wizard_validator_findings", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L117", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_projectcreaterequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L141", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_runcreaterequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L160", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_sessionhandle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L185", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_readmegeneratorprotocol", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L199", "weight": 1.0}, {"source": "controller_creation_readmegeneratorprotocol", "target": "protocol", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L199", "weight": 1.0}, {"source": "controller_creation_readmegeneratorprotocol", "target": "controller_creation_readmegeneratorprotocol_generate", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L207", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_noopreadmegenerator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L210", "weight": 1.0}, {"source": "controller_creation_noopreadmegenerator", "target": "controller_creation_noopreadmegenerator_generate", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L219", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_nassyncprotocol", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L226", "weight": 1.0}, {"source": "controller_creation_nassyncprotocol", "target": "protocol", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L226", "weight": 1.0}, {"source": "controller_creation_nassyncprotocol", "target": "controller_creation_nassyncprotocol_enqueue", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L229", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_noopnassync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L232", "weight": 1.0}, {"source": "controller_creation_noopnassync", "target": "controller_creation_noopnassync_enqueue", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L235", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_creationcontroller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L244", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L252", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_session_store", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L290", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_apply_config", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L294", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_create_project", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L311", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_create_run", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L324", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_resume", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L329", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_cancel", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L353", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_status", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L396", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_subscribe", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L403", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_launch", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L427", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_validate_inputs", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L465", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_run_pipeline", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L607", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_pipeline_states", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L627", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_resolve_template", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L728", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_short_id_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L733", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_project_name_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L749", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_resolve_run_lims_block", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L762", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_run_kind_value_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L782", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_compose_destination_path", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L793", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_render", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L810", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_plugin_pass", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L837", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_build_readme_context", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L898", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_write_cache", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L963", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_write_equipment_json", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1078", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_post_validate", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1114", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_transition", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1162", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_publish", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1183", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_fail", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1188", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_cleanup", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1198", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_handle", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1217", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_format_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1226", "weight": 1.0}, {"source": "controller_creation_creationcontroller", "target": "controller_creation_creationcontroller_append_log", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1231", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_required_field_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1256", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_readme_decls_from_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1269", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_readme_decls_from_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1301", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_os_username", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1326", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_has_hard_finding", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1339", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "target": "controller_creation_attach_resolved", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1343", "weight": 1.0}, {"source": "controller_creation_creationcontroller_init", "target": "controller_creation_noopreadmegenerator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L274", "weight": 1.0}, {"source": "controller_creation_creationcontroller_init", "target": "controller_creation_noopnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L276", "weight": 1.0}, {"source": "controller_creation_creationcontroller_create_project", "target": "controller_creation_creationcontroller_launch", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L322", "weight": 1.0}, {"source": "controller_creation_creationcontroller_create_run", "target": "controller_creation_creationcontroller_launch", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L327", "weight": 1.0}, {"source": "controller_creation_creationcontroller_resume", "target": "controller_creation_creationcontroller_handle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L351", "weight": 1.0}, {"source": "controller_creation_creationcontroller_cancel", "target": "controller_creation_creationcontroller_cleanup", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L394", "weight": 1.0}, {"source": "controller_creation_creationcontroller_status", "target": "controller_creation_creationcontroller_handle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L401", "weight": 1.0}, {"source": "controller_creation_creationcontroller_launch", "target": "controller_creation_creationcontroller_transition", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L444", "weight": 1.0}, {"source": "controller_creation_creationcontroller_launch", "target": "controller_creation_creationcontroller_validate_inputs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L446", "weight": 1.0}, {"source": "controller_creation_creationcontroller_launch", "target": "controller_creation_creationcontroller_fail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L448", "weight": 1.0}, {"source": "controller_creation_creationcontroller_launch", "target": "controller_creation_format_error", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L448", "weight": 1.0}, {"source": "controller_creation_creationcontroller_launch", "target": "controller_creation_creationcontroller_handle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L449", "weight": 1.0}, {"source": "controller_creation_creationcontroller_launch", "target": "controller_creation_creationcontroller_run_pipeline", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L457", "weight": 1.0}, {"source": "controller_creation_creationcontroller_validate_inputs", "target": "controller_creation_project_name_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L501", "weight": 1.0}, {"source": "controller_creation_creationcontroller_validate_inputs", "target": "controller_creation_creationcontroller_resolve_template", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L575", "weight": 1.0}, {"source": "controller_creation_creationcontroller_validate_inputs", "target": "controller_creation_attach_resolved", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L576", "weight": 1.0}, {"source": "controller_creation_creationcontroller_validate_inputs", "target": "controller_creation_required_field_ids", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L580", "weight": 1.0}, {"source": "controller_creation_creationcontroller_run_pipeline", "target": "controller_creation_creationcontroller_pipeline_states", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L610", "weight": 1.0}, {"source": "controller_creation_creationcontroller_run_pipeline", "target": "controller_creation_creationcontroller_cleanup", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L620", "weight": 1.0}, {"source": "controller_creation_creationcontroller_run_pipeline", "target": "controller_creation_creationcontroller_publish", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L621", "weight": 1.0}, {"source": "controller_creation_creationcontroller_run_pipeline", "target": "controller_creation_format_error", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L624", "weight": 1.0}, {"source": "controller_creation_creationcontroller_run_pipeline", "target": "controller_creation_creationcontroller_fail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L625", "weight": 1.0}, {"source": "controller_creation_creationcontroller_pipeline_states", "target": "controller_creation_creationcontroller_compose_destination_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L631", "weight": 1.0}, {"source": "controller_creation_creationcontroller_pipeline_states", "target": "controller_creation_creationcontroller_resolve_run_lims_block", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L653", "weight": 1.0}, {"source": "controller_creation_creationcontroller_pipeline_states", "target": "controller_creation_creationcontroller_render", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L656", "weight": 1.0}, {"source": "controller_creation_creationcontroller_pipeline_states", "target": "controller_creation_creationcontroller_transition", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L659", "weight": 1.0}, {"source": "controller_creation_creationcontroller_pipeline_states", "target": "controller_creation_creationcontroller_plugin_pass", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L660", "weight": 1.0}, {"source": "controller_creation_creationcontroller_pipeline_states", "target": "controller_creation_creationcontroller_fail", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L664", "weight": 1.0}, {"source": "controller_creation_creationcontroller_pipeline_states", "target": "controller_creation_creationcontroller_write_cache", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L672", "weight": 1.0}, {"source": "controller_creation_creationcontroller_pipeline_states", "target": "controller_creation_creationcontroller_post_validate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L683", "weight": 1.0}, {"source": "controller_creation_creationcontroller_pipeline_states", "target": "controller_creation_has_hard_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L684", "weight": 1.0}, {"source": "controller_creation_creationcontroller_pipeline_states", "target": "controller_creation_noopnassync_enqueue", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L690", "weight": 1.0}, {"source": "controller_creation_creationcontroller_pipeline_states", "target": "controller_creation_creationcontroller_publish", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L701", "weight": 1.0}, {"source": "controller_creation_creationcontroller_pipeline_states", "target": "controller_creation_creationcontroller_append_log", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L722", "weight": 1.0}, {"source": "controller_creation_creationcontroller_compose_destination_path", "target": "controller_creation_project_name_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L799", "weight": 1.0}, {"source": "controller_creation_creationcontroller_render", "target": "controller_creation_project_name_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L831", "weight": 1.0}, {"source": "controller_creation_creationcontroller_render", "target": "controller_creation_short_id_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L832", "weight": 1.0}, {"source": "controller_creation_creationcontroller_plugin_pass", "target": "controller_creation_short_id_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L853", "weight": 1.0}, {"source": "controller_creation_creationcontroller_build_readme_context", "target": "controller_creation_readme_decls_from_template", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L914", "weight": 1.0}, {"source": "controller_creation_creationcontroller_build_readme_context", "target": "controller_creation_readme_decls_from_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L915", "weight": 1.0}, {"source": "controller_creation_creationcontroller_build_readme_context", "target": "controller_creation_os_username", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L942", "weight": 1.0}, {"source": "controller_creation_creationcontroller_build_readme_context", "target": "controller_creation_short_id_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L948", "weight": 1.0}, {"source": "controller_creation_creationcontroller_build_readme_context", "target": "controller_creation_run_kind_value_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L950", "weight": 1.0}, {"source": "controller_creation_creationcontroller_write_cache", "target": "controller_creation_creationcontroller_build_readme_context", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L975", "weight": 1.0}, {"source": "controller_creation_creationcontroller_write_cache", "target": "controller_creation_noopreadmegenerator_generate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L976", "weight": 1.0}, {"source": "controller_creation_creationcontroller_write_cache", "target": "controller_creation_project_name_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1002", "weight": 1.0}, {"source": "controller_creation_creationcontroller_write_cache", "target": "controller_creation_run_kind_value_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1007", "weight": 1.0}, {"source": "controller_creation_creationcontroller_write_cache", "target": "controller_creation_creationcontroller_write_equipment_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1074", "weight": 1.0}, {"source": "controller_creation_creationcontroller_post_validate", "target": "controller_creation_run_kind_value_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1154", "weight": 1.0}, {"source": "controller_creation_creationcontroller_transition", "target": "controller_creation_creationcontroller_publish", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1174", "weight": 1.0}, {"source": "controller_creation_creationcontroller_fail", "target": "controller_creation_creationcontroller_publish", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1192", "weight": 1.0}, {"source": "controller_creation_creationcontroller_fail", "target": "controller_creation_creationcontroller_cleanup", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1196", "weight": 1.0}, {"source": "controller_creation_creationcontroller_cleanup", "target": "controller_creation_creationcontroller_compose_destination_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1206", "weight": 1.0}, {"source": "controller_creation_creationcontroller_handle", "target": "controller_creation_sessionhandle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1218", "weight": 1.0}, {"source": "controller_creation_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_creation_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1", "weight": 1.0}, {"source": "controller_creation_rationale_142", "target": "controller_creation_projectcreaterequest", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L142", "weight": 1.0}, {"source": "controller_creation_rationale_161", "target": "controller_creation_runcreaterequest", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L161", "weight": 1.0}, {"source": "controller_creation_rationale_186", "target": "controller_creation_sessionhandle", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L186", "weight": 1.0}, {"source": "controller_creation_rationale_200", "target": "controller_creation_readmegeneratorprotocol", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L200", "weight": 1.0}, {"source": "controller_creation_rationale_211", "target": "controller_creation_noopreadmegenerator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L211", "weight": 1.0}, {"source": "controller_creation_rationale_227", "target": "controller_creation_nassyncprotocol", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L227", "weight": 1.0}, {"source": "controller_creation_rationale_233", "target": "controller_creation_noopnassync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L233", "weight": 1.0}, {"source": "controller_creation_rationale_245", "target": "controller_creation_creationcontroller", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L245", "weight": 1.0}, {"source": "controller_creation_rationale_291", "target": "controller_creation_creationcontroller_session_store", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L291", "weight": 1.0}, {"source": "controller_creation_rationale_295", "target": "controller_creation_creationcontroller_apply_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L295", "weight": 1.0}, {"source": "controller_creation_rationale_312", "target": "controller_creation_creationcontroller_create_project", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L312", "weight": 1.0}, {"source": "controller_creation_rationale_325", "target": "controller_creation_creationcontroller_create_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L325", "weight": 1.0}, {"source": "controller_creation_rationale_330", "target": "controller_creation_creationcontroller_resume", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L330", "weight": 1.0}, {"source": "controller_creation_rationale_354", "target": "controller_creation_creationcontroller_cancel", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L354", "weight": 1.0}, {"source": "controller_creation_rationale_397", "target": "controller_creation_creationcontroller_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L397", "weight": 1.0}, {"source": "controller_creation_rationale_404", "target": "controller_creation_creationcontroller_subscribe", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L404", "weight": 1.0}, {"source": "controller_creation_rationale_428", "target": "controller_creation_creationcontroller_launch", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L428", "weight": 1.0}, {"source": "controller_creation_rationale_466", "target": "controller_creation_creationcontroller_validate_inputs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L466", "weight": 1.0}, {"source": "controller_creation_rationale_608", "target": "controller_creation_creationcontroller_run_pipeline", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L608", "weight": 1.0}, {"source": "controller_creation_rationale_628", "target": "controller_creation_creationcontroller_pipeline_states", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L628", "weight": 1.0}, {"source": "controller_creation_rationale_734", "target": "controller_creation_creationcontroller_short_id_for", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L734", "weight": 1.0}, {"source": "controller_creation_rationale_750", "target": "controller_creation_creationcontroller_project_name_for", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L750", "weight": 1.0}, {"source": "controller_creation_rationale_763", "target": "controller_creation_creationcontroller_resolve_run_lims_block", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L763", "weight": 1.0}, {"source": "controller_creation_rationale_783", "target": "controller_creation_creationcontroller_run_kind_value_for", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L783", "weight": 1.0}, {"source": "controller_creation_rationale_816", "target": "controller_creation_creationcontroller_render", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L816", "weight": 1.0}, {"source": "controller_creation_rationale_905", "target": "controller_creation_creationcontroller_build_readme_context", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L905", "weight": 1.0}, {"source": "controller_creation_rationale_973", "target": "controller_creation_creationcontroller_write_cache", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L973", "weight": 1.0}, {"source": "controller_creation_rationale_1083", "target": "controller_creation_creationcontroller_write_equipment_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1083", "weight": 1.0}, {"source": "controller_creation_rationale_1120", "target": "controller_creation_creationcontroller_post_validate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1120", "weight": 1.0}, {"source": "controller_creation_rationale_1199", "target": "controller_creation_creationcontroller_cleanup", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1199", "weight": 1.0}, {"source": "controller_creation_rationale_1232", "target": "controller_creation_creationcontroller_append_log", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1232", "weight": 1.0}, {"source": "controller_creation_rationale_1257", "target": "controller_creation_required_field_ids", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1257", "weight": 1.0}, {"source": "controller_creation_rationale_1270", "target": "controller_creation_readme_decls_from_template", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1270", "weight": 1.0}, {"source": "controller_creation_rationale_1302", "target": "controller_creation_readme_decls_from_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1302", "weight": 1.0}, {"source": "controller_creation_rationale_1327", "target": "controller_creation_os_username", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1327", "weight": 1.0}, {"source": "controller_creation_rationale_1346", "target": "controller_creation_attach_resolved", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1346", "weight": 1.0}], "raw_calls": [{"caller_nid": "controller_creation_noopreadmegenerator_generate", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L222"}, {"caller_nid": "controller_creation_noopreadmegenerator_generate", "callee": "readme_fields_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L223"}, {"caller_nid": "controller_creation_creationcontroller_init", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L278"}, {"caller_nid": "controller_creation_creationcontroller_create_project", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L321"}, {"caller_nid": "controller_creation_creationcontroller_create_run", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L326"}, {"caller_nid": "controller_creation_creationcontroller_resume", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L336"}, {"caller_nid": "controller_creation_creationcontroller_resume", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L338"}, {"caller_nid": "controller_creation_creationcontroller_resume", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L340"}, {"caller_nid": "controller_creation_creationcontroller_resume", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L344"}, {"caller_nid": "controller_creation_creationcontroller_resume", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L346"}, {"caller_nid": "controller_creation_creationcontroller_resume", "callee": "put", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L347"}, {"caller_nid": "controller_creation_creationcontroller_resume", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L347"}, {"caller_nid": "controller_creation_creationcontroller_resume", "callee": "heartbeat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L350"}, {"caller_nid": "controller_creation_creationcontroller_cancel", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L362"}, {"caller_nid": "controller_creation_creationcontroller_cancel", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L365"}, {"caller_nid": "controller_creation_creationcontroller_cancel", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L368"}, {"caller_nid": "controller_creation_creationcontroller_cancel", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L370"}, {"caller_nid": "controller_creation_creationcontroller_cancel", "callee": "put_nowait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L371"}, {"caller_nid": "controller_creation_creationcontroller_cancel", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L379"}, {"caller_nid": "controller_creation_creationcontroller_cancel", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L380"}, {"caller_nid": "controller_creation_creationcontroller_cancel", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L382"}, {"caller_nid": "controller_creation_creationcontroller_cancel", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L387"}, {"caller_nid": "controller_creation_creationcontroller_cancel", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L388"}, {"caller_nid": "controller_creation_creationcontroller_cancel", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L389"}, {"caller_nid": "controller_creation_creationcontroller_cancel", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L390"}, {"caller_nid": "controller_creation_creationcontroller_status", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L398"}, {"caller_nid": "controller_creation_creationcontroller_status", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L400"}, {"caller_nid": "controller_creation_creationcontroller_subscribe", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L409"}, {"caller_nid": "controller_creation_creationcontroller_subscribe", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L411"}, {"caller_nid": "controller_creation_creationcontroller_subscribe", "callee": "Queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L413"}, {"caller_nid": "controller_creation_creationcontroller_subscribe", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L416"}, {"caller_nid": "controller_creation_creationcontroller_subscribe", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L418"}, {"caller_nid": "controller_creation_creationcontroller_subscribe", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L419"}, {"caller_nid": "controller_creation_creationcontroller_subscribe", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L419"}, {"caller_nid": "controller_creation_creationcontroller_launch", "callee": "Queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L438"}, {"caller_nid": "controller_creation_creationcontroller_launch", "callee": "Queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L441"}, {"caller_nid": "controller_creation_creationcontroller_launch", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L451"}, {"caller_nid": "controller_creation_creationcontroller_launch", "callee": "create_task", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L457"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "ValidationError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L476"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L486"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "ValidationError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L488"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L491"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "validate_project_name", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L503"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "ValidationError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L505"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L508"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L514"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "ValidationError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L516"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L523"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "ValidationError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L524"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L527"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L533"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "ValidationError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L535"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L542"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "ValidationError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L544"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L549"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L553"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "ValidationError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L555"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L562"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "ValidationError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L563"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L566"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L581"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L592"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L592"}, {"caller_nid": "controller_creation_creationcontroller_validate_inputs", "callee": "ValidationError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L595"}, {"caller_nid": "controller_creation_creationcontroller_run_pipeline", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L616"}, {"caller_nid": "controller_creation_creationcontroller_run_pipeline", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L616"}, {"caller_nid": "controller_creation_creationcontroller_run_pipeline", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L617"}, {"caller_nid": "controller_creation_creationcontroller_run_pipeline", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L618"}, {"caller_nid": "controller_creation_creationcontroller_run_pipeline", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L619"}, {"caller_nid": "controller_creation_creationcontroller_pipeline_states", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L637"}, {"caller_nid": "controller_creation_creationcontroller_pipeline_states", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L637"}, {"caller_nid": "controller_creation_creationcontroller_pipeline_states", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L646"}, {"caller_nid": "controller_creation_creationcontroller_pipeline_states", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L652"}, {"caller_nid": "controller_creation_creationcontroller_pipeline_states", "callee": "__setattr__", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L653"}, {"caller_nid": "controller_creation_creationcontroller_pipeline_states", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L689"}, {"caller_nid": "controller_creation_creationcontroller_pipeline_states", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L693"}, {"caller_nid": "controller_creation_creationcontroller_pipeline_states", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L699"}, {"caller_nid": "controller_creation_creationcontroller_pipeline_states", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L713"}, {"caller_nid": "controller_creation_creationcontroller_pipeline_states", "callee": "to_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L716"}, {"caller_nid": "controller_creation_creationcontroller_pipeline_states", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L718"}, {"caller_nid": "controller_creation_creationcontroller_pipeline_states", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L721"}, {"caller_nid": "controller_creation_creationcontroller_resolve_template", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L729"}, {"caller_nid": "controller_creation_creationcontroller_resolve_template", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L730"}, {"caller_nid": "controller_creation_short_id_for", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L743"}, {"caller_nid": "controller_creation_short_id_for", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L744"}, {"caller_nid": "controller_creation_short_id_for", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L746"}, {"caller_nid": "controller_creation_short_id_for", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L746"}, {"caller_nid": "controller_creation_project_name_for", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L757"}, {"caller_nid": "controller_creation_project_name_for", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L760"}, {"caller_nid": "controller_creation_project_name_for", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L760"}, {"caller_nid": "controller_creation_project_name_for", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L760"}, {"caller_nid": "controller_creation_creationcontroller_resolve_run_lims_block", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L771"}, {"caller_nid": "controller_creation_creationcontroller_resolve_run_lims_block", "callee": "read_creation_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L773"}, {"caller_nid": "controller_creation_creationcontroller_resolve_run_lims_block", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L774"}, {"caller_nid": "controller_creation_creationcontroller_resolve_run_lims_block", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L777"}, {"caller_nid": "controller_creation_run_kind_value_for", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L789"}, {"caller_nid": "controller_creation_creationcontroller_compose_destination_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L794"}, {"caller_nid": "controller_creation_creationcontroller_compose_destination_path", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L795"}, {"caller_nid": "controller_creation_creationcontroller_compose_destination_path", "callee": "compose_project_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L796"}, {"caller_nid": "controller_creation_creationcontroller_compose_destination_path", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L801"}, {"caller_nid": "controller_creation_creationcontroller_compose_destination_path", "callee": "compose_run_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L802"}, {"caller_nid": "controller_creation_creationcontroller_render", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L827"}, {"caller_nid": "controller_creation_creationcontroller_render", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L828"}, {"caller_nid": "controller_creation_creationcontroller_render", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L829"}, {"caller_nid": "controller_creation_creationcontroller_render", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L830"}, {"caller_nid": "controller_creation_creationcontroller_render", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L831"}, {"caller_nid": "controller_creation_creationcontroller_render", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L832"}, {"caller_nid": "controller_creation_creationcontroller_render", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L833"}, {"caller_nid": "controller_creation_creationcontroller_render", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L834"}, {"caller_nid": "controller_creation_creationcontroller_render", "callee": "render", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L835"}, {"caller_nid": "controller_creation_creationcontroller_plugin_pass", "callee": "PluginPassResult", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L846"}, {"caller_nid": "controller_creation_creationcontroller_plugin_pass", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L852"}, {"caller_nid": "controller_creation_creationcontroller_plugin_pass", "callee": "PluginContext", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L854"}, {"caller_nid": "controller_creation_creationcontroller_plugin_pass", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L855"}, {"caller_nid": "controller_creation_creationcontroller_plugin_pass", "callee": "HostPluginLogger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L864"}, {"caller_nid": "controller_creation_creationcontroller_plugin_pass", "callee": "run_pass", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L891"}, {"caller_nid": "controller_creation_creationcontroller_plugin_pass", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L893"}, {"caller_nid": "controller_creation_creationcontroller_plugin_pass", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L894"}, {"caller_nid": "controller_creation_creationcontroller_build_readme_context", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L922"}, {"caller_nid": "controller_creation_creationcontroller_build_readme_context", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L931"}, {"caller_nid": "controller_creation_creationcontroller_build_readme_context", "callee": "CustomField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L932"}, {"caller_nid": "controller_creation_creationcontroller_build_readme_context", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L932"}, {"caller_nid": "controller_creation_creationcontroller_build_readme_context", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L935"}, {"caller_nid": "controller_creation_creationcontroller_build_readme_context", "callee": "next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L936"}, {"caller_nid": "controller_creation_creationcontroller_build_readme_context", "callee": "SystemFields", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L940"}, {"caller_nid": "controller_creation_creationcontroller_build_readme_context", "callee": "utc_now", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L941"}, {"caller_nid": "controller_creation_creationcontroller_build_readme_context", "callee": "ReadmeContext", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L952"}, {"caller_nid": "controller_creation_creationcontroller_build_readme_context", "callee": "CoreFields", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L954"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L977"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L980"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "get_cache_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L980"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L981"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L989"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L990"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L991"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L998"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L999"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1000"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1000"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1001"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1001"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "LIMSProjectSource", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1003"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1003"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1004"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1009"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "PluginApplied", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1019"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1022"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1022"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1023"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "PluginIsolation", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1024"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1025"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1025"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1025"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1026"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1026"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1026"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1027"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1027"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1027"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1039"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "OrchestratorBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1040"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "gethostname", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1042"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1047"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1049"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "RunKind", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1052"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1054"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1057"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1060"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1061"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1062"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1063"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1063"}, {"caller_nid": "controller_creation_creationcontroller_write_cache", "callee": "write_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1069"}, {"caller_nid": "controller_creation_creationcontroller_write_equipment_json", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1095"}, {"caller_nid": "controller_creation_creationcontroller_write_equipment_json", "callee": "equipment_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1097"}, {"caller_nid": "controller_creation_creationcontroller_write_equipment_json", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1102"}, {"caller_nid": "controller_creation_creationcontroller_write_equipment_json", "callee": "EquipmentJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1103"}, {"caller_nid": "controller_creation_creationcontroller_write_equipment_json", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1107"}, {"caller_nid": "controller_creation_creationcontroller_write_equipment_json", "callee": "write_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1112"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "rglob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1130"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1131"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1133"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1136"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1138"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1139"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1140"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1141"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "CreationValidationInput", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1149"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1150"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1151"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1152"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1153"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1154"}, {"caller_nid": "controller_creation_creationcontroller_post_validate", "callee": "validate_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1156"}, {"caller_nid": "controller_creation_creationcontroller_transition", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1163"}, {"caller_nid": "controller_creation_creationcontroller_transition", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1164"}, {"caller_nid": "controller_creation_creationcontroller_transition", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1179"}, {"caller_nid": "controller_creation_creationcontroller_publish", "callee": "Queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1185"}, {"caller_nid": "controller_creation_creationcontroller_publish", "callee": "put", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1186"}, {"caller_nid": "controller_creation_creationcontroller_fail", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1189"}, {"caller_nid": "controller_creation_creationcontroller_fail", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1190"}, {"caller_nid": "controller_creation_creationcontroller_fail", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1191"}, {"caller_nid": "controller_creation_creationcontroller_cleanup", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1209"}, {"caller_nid": "controller_creation_creationcontroller_cleanup", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1210"}, {"caller_nid": "controller_creation_creationcontroller_cleanup", "callee": "rmtree", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1211"}, {"caller_nid": "controller_creation_format_error", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1227"}, {"caller_nid": "controller_creation_format_error", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1227"}, {"caller_nid": "controller_creation_format_error", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1228"}, {"caller_nid": "controller_creation_format_error", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1229"}, {"caller_nid": "controller_creation_creationcontroller_append_log", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1239"}, {"caller_nid": "controller_creation_creationcontroller_append_log", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1240"}, {"caller_nid": "controller_creation_creationcontroller_append_log", "callee": "format_log_line", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1242"}, {"caller_nid": "controller_creation_creationcontroller_append_log", "callee": "utc_now", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1243"}, {"caller_nid": "controller_creation_creationcontroller_append_log", "callee": "append_log_line", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1248"}, {"caller_nid": "controller_creation_required_field_ids", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1260"}, {"caller_nid": "controller_creation_required_field_ids", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1262"}, {"caller_nid": "controller_creation_required_field_ids", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1263"}, {"caller_nid": "controller_creation_required_field_ids", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1264"}, {"caller_nid": "controller_creation_required_field_ids", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1265"}, {"caller_nid": "controller_creation_required_field_ids", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1266"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1280"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1282"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1283"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1285"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1286"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1287"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1288"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1290"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1290"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "FieldType", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1291"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1291"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1291"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1292"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1292"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1293"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1294"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1294"}, {"caller_nid": "controller_creation_readme_decls_from_template", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1295"}, {"caller_nid": "controller_creation_readme_decls_from_config", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1312"}, {"caller_nid": "controller_creation_readme_decls_from_config", "callee": "TemplateFieldDecl", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1313"}, {"caller_nid": "controller_creation_readme_decls_from_config", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1319"}, {"caller_nid": "controller_creation_os_username", "callee": "getuser", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1334"}, {"caller_nid": "controller_creation_os_username", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1336"}, {"caller_nid": "controller_creation_os_username", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1336"}, {"caller_nid": "controller_creation_has_hard_finding", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1340"}, {"caller_nid": "controller_creation_attach_resolved", "callee": "__setattr__", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py", "source_location": "L1352"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/837c366929693bfea4a895699e3ab6f412226d478c59536f27cd79d3d3717edd.json b/graphify-out/cache/ast/837c366929693bfea4a895699e3ab6f412226d478c59536f27cd79d3d3717edd.json new file mode 100644 index 0000000..7dd91a9 --- /dev/null +++ b/graphify-out/cache/ast/837c366929693bfea4a895699e3ab6f412226d478c59536f27cd79d3d3717edd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_breadcrumb_py", "label": "test_breadcrumb.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L1"}, {"id": "ui_test_breadcrumb_test_segments_from_none_returns_empty", "label": "test_segments_from_none_returns_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L11"}, {"id": "ui_test_breadcrumb_test_segments_from_empty_returns_empty", "label": "test_segments_from_empty_returns_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L15"}, {"id": "ui_test_breadcrumb_test_segments_for_run_node", "label": "test_segments_for_run_node()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L19"}, {"id": "ui_test_breadcrumb_test_segments_strip_empty_components", "label": "test_segments_strip_empty_components()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L32"}, {"id": "ui_test_breadcrumb_rationale_1", "label": "Unit tests for ``ui/components/breadcrumb``. Redesign \u00a74.7 / decision 7A.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L1"}, {"id": "ui_test_breadcrumb_rationale_33", "label": "A double-slash or trailing slash doesn't produce empty segments.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L33"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_breadcrumb_py", "target": "exlab_wizard_ui_components_breadcrumb", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_breadcrumb_py", "target": "ui_test_breadcrumb_test_segments_from_none_returns_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_breadcrumb_py", "target": "ui_test_breadcrumb_test_segments_from_empty_returns_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_breadcrumb_py", "target": "ui_test_breadcrumb_test_segments_for_run_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_breadcrumb_py", "target": "ui_test_breadcrumb_test_segments_strip_empty_components", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L32", "weight": 1.0}, {"source": "ui_test_breadcrumb_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_breadcrumb_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_breadcrumb_rationale_33", "target": "ui_test_breadcrumb_test_segments_strip_empty_components", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L33", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_breadcrumb_test_segments_from_none_returns_empty", "callee": "segments_from_node_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L12"}, {"caller_nid": "ui_test_breadcrumb_test_segments_from_empty_returns_empty", "callee": "segments_from_node_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L16"}, {"caller_nid": "ui_test_breadcrumb_test_segments_for_run_node", "callee": "segments_from_node_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L20"}, {"caller_nid": "ui_test_breadcrumb_test_segments_for_run_node", "callee": "BreadcrumbSegment", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L22"}, {"caller_nid": "ui_test_breadcrumb_test_segments_for_run_node", "callee": "BreadcrumbSegment", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L23"}, {"caller_nid": "ui_test_breadcrumb_test_segments_for_run_node", "callee": "BreadcrumbSegment", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L24"}, {"caller_nid": "ui_test_breadcrumb_test_segments_for_run_node", "callee": "BreadcrumbSegment", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L25"}, {"caller_nid": "ui_test_breadcrumb_test_segments_strip_empty_components", "callee": "segments_from_node_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L34"}, {"caller_nid": "ui_test_breadcrumb_test_segments_strip_empty_components", "callee": "BreadcrumbSegment", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L36"}, {"caller_nid": "ui_test_breadcrumb_test_segments_strip_empty_components", "callee": "BreadcrumbSegment", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py", "source_location": "L37"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/839b8f98fe64612dd351bde24046600b90c4f0f218a10101138b94360760ae92.json b/graphify-out/cache/ast/839b8f98fe64612dd351bde24046600b90c4f0f218a10101138b94360760ae92.json new file mode 100644 index 0000000..d0df156 --- /dev/null +++ b/graphify-out/cache/ast/839b8f98fe64612dd351bde24046600b90c4f0f218a10101138b94360760ae92.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_config_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/__init__.py", "source_location": "L1"}, {"id": "config_init_rationale_1", "label": "Config package. Backend Spec \u00a79.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/__init__.py", "source_location": "L1"}], "edges": [{"source": "config_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_config_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/845ebbc4f388167353d07928ecf421c706baebc2d643688169e08cde895820e5.json b/graphify-out/cache/ast/845ebbc4f388167353d07928ecf421c706baebc2d643688169e08cde895820e5.json new file mode 100644 index 0000000..4116c8f --- /dev/null +++ b/graphify-out/cache/ast/845ebbc4f388167353d07928ecf421c706baebc2d643688169e08cde895820e5.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_schema_py", "label": "sync_state_schema.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L1"}, {"id": "cache_sync_state_schema_filesyncrecord", "label": "FileSyncRecord", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L19"}, {"id": "struct", "label": "Struct", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "cache_sync_state_schema_syncstatejson", "label": "SyncStateJson", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L55"}, {"id": "cache_sync_state_schema_rationale_1", "label": "``msgspec.Struct`` types for the per-run ``sync_state.json`` cache. Operator-fr", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L1"}, {"id": "cache_sync_state_schema_rationale_24", "label": "Per-file sync record stored under ``sync_state.json``'s ``files`` map. One", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L24"}, {"id": "cache_sync_state_schema_rationale_60", "label": "``sync_state.json`` per-run sync-state record at schema version 1.0. Writte", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L60"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_schema_py", "target": "msgspec", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_schema_py", "target": "cache_sync_state_schema_filesyncrecord", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L19", "weight": 1.0}, {"source": "cache_sync_state_schema_filesyncrecord", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_schema_py", "target": "cache_sync_state_schema_syncstatejson", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L55", "weight": 1.0}, {"source": "cache_sync_state_schema_syncstatejson", "target": "struct", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L55", "weight": 1.0}, {"source": "cache_sync_state_schema_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_schema_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L1", "weight": 1.0}, {"source": "cache_sync_state_schema_rationale_24", "target": "cache_sync_state_schema_filesyncrecord", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L24", "weight": 1.0}, {"source": "cache_sync_state_schema_rationale_60", "target": "cache_sync_state_schema_syncstatejson", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py", "source_location": "L60", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/8463b4f5c1a59bbe7a0fff74e98571617cfe2c30f2e3ed5a0a5024f3c69d7a14.json b/graphify-out/cache/ast/8463b4f5c1a59bbe7a0fff74e98571617cfe2c30f2e3ed5a0a5024f3c69d7a14.json new file mode 100644 index 0000000..0336443 --- /dev/null +++ b/graphify-out/cache/ast/8463b4f5c1a59bbe7a0fff74e98571617cfe2c30f2e3ed5a0a5024f3c69d7a14.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_input_required_plugin_plugin_py", "label": "plugin.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L1"}, {"id": "input_required_plugin_plugin_inputrequiredplugin", "label": "InputRequiredPlugin", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L20"}, {"id": "plugin", "label": "Plugin", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "input_required_plugin_plugin_inputrequiredplugin_can_handle", "label": ".can_handle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L28"}, {"id": "input_required_plugin_plugin_inputrequiredplugin_transform", "label": ".transform()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L31"}, {"id": "input_required_plugin_plugin_rationale_1", "label": "input_required_plugin -- exercises Backend Spec \u00a76.4 suspend/resume. On the fir", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L1"}, {"id": "input_required_plugin_plugin_rationale_21", "label": "Demand a user-supplied ``color`` value before completing.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L21"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_input_required_plugin_plugin_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_input_required_plugin_plugin_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_input_required_plugin_plugin_py", "target": "exlab_wizard_plugins", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_input_required_plugin_plugin_py", "target": "input_required_plugin_plugin_inputrequiredplugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L20", "weight": 1.0}, {"source": "input_required_plugin_plugin_inputrequiredplugin", "target": "plugin", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L20", "weight": 1.0}, {"source": "input_required_plugin_plugin_inputrequiredplugin", "target": "input_required_plugin_plugin_inputrequiredplugin_can_handle", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L28", "weight": 1.0}, {"source": "input_required_plugin_plugin_inputrequiredplugin", "target": "input_required_plugin_plugin_inputrequiredplugin_transform", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L31", "weight": 1.0}, {"source": "input_required_plugin_plugin_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_input_required_plugin_plugin_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L1", "weight": 1.0}, {"source": "input_required_plugin_plugin_rationale_21", "target": "input_required_plugin_plugin_inputrequiredplugin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L21", "weight": 1.0}], "raw_calls": [{"caller_nid": "input_required_plugin_plugin_inputrequiredplugin_transform", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L35"}, {"caller_nid": "input_required_plugin_plugin_inputrequiredplugin_transform", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L36"}, {"caller_nid": "input_required_plugin_plugin_inputrequiredplugin_transform", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L36"}, {"caller_nid": "input_required_plugin_plugin_inputrequiredplugin_transform", "callee": "PluginInputRequired", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L38"}, {"caller_nid": "input_required_plugin_plugin_inputrequiredplugin_transform", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L50"}, {"caller_nid": "input_required_plugin_plugin_inputrequiredplugin_transform", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", "source_location": "L51"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/85542c94ea86d655ad0927b81c4e15ded2120f7d9d6a61e8d26b869cb014aa64.json b/graphify-out/cache/ast/85542c94ea86d655ad0927b81c4e15ded2120f7d9d6a61e8d26b869cb014aa64.json new file mode 100644 index 0000000..6f7d15e --- /dev/null +++ b/graphify-out/cache/ast/85542c94ea86d655ad0927b81c4e15ded2120f7d9d6a61e8d26b869cb014aa64.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_controller_test_creation_apply_config_py", "label": "test_creation_apply_config.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L1"}, {"id": "controller_test_creation_apply_config_controller", "label": "_controller()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L16"}, {"id": "controller_test_creation_apply_config_test_apply_config_swaps_config", "label": "test_apply_config_swaps_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L29"}, {"id": "controller_test_creation_apply_config_test_apply_config_reinjects_plugin_host_only_when_given", "label": "test_apply_config_reinjects_plugin_host_only_when_given()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L39"}, {"id": "controller_test_creation_apply_config_rationale_1", "label": "Unit tests for ``CreationController.apply_config`` (live config reload). The co", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_creation_apply_config_py", "target": "types", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_creation_apply_config_py", "target": "exlab_wizard_controller_creation", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_creation_apply_config_py", "target": "controller_test_creation_apply_config_controller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_creation_apply_config_py", "target": "controller_test_creation_apply_config_test_apply_config_swaps_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_controller_test_creation_apply_config_py", "target": "controller_test_creation_apply_config_test_apply_config_reinjects_plugin_host_only_when_given", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L39", "weight": 1.0}, {"source": "controller_test_creation_apply_config_test_apply_config_swaps_config", "target": "controller_test_creation_apply_config_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L31", "weight": 1.0}, {"source": "controller_test_creation_apply_config_test_apply_config_reinjects_plugin_host_only_when_given", "target": "controller_test_creation_apply_config_controller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L40", "weight": 1.0}, {"source": "controller_test_creation_apply_config_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_controller_test_creation_apply_config_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "controller_test_creation_apply_config_controller", "callee": "CreationController", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L19"}, {"caller_nid": "controller_test_creation_apply_config_controller", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L21"}, {"caller_nid": "controller_test_creation_apply_config_controller", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L22"}, {"caller_nid": "controller_test_creation_apply_config_controller", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L23"}, {"caller_nid": "controller_test_creation_apply_config_controller", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L24"}, {"caller_nid": "controller_test_creation_apply_config_controller", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L25"}, {"caller_nid": "controller_test_creation_apply_config_test_apply_config_swaps_config", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L30"}, {"caller_nid": "controller_test_creation_apply_config_test_apply_config_swaps_config", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L34"}, {"caller_nid": "controller_test_creation_apply_config_test_apply_config_swaps_config", "callee": "apply_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L35"}, {"caller_nid": "controller_test_creation_apply_config_test_apply_config_reinjects_plugin_host_only_when_given", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L40"}, {"caller_nid": "controller_test_creation_apply_config_test_apply_config_reinjects_plugin_host_only_when_given", "callee": "apply_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L44"}, {"caller_nid": "controller_test_creation_apply_config_test_apply_config_reinjects_plugin_host_only_when_given", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L44"}, {"caller_nid": "controller_test_creation_apply_config_test_apply_config_reinjects_plugin_host_only_when_given", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L48"}, {"caller_nid": "controller_test_creation_apply_config_test_apply_config_reinjects_plugin_host_only_when_given", "callee": "apply_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L49"}, {"caller_nid": "controller_test_creation_apply_config_test_apply_config_reinjects_plugin_host_only_when_given", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py", "source_location": "L49"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/867ce4d57dfc282bdad7e3717dd7315be38de4f76189f7d8d147d2c0b03b40fc.json b/graphify-out/cache/ast/867ce4d57dfc282bdad7e3717dd7315be38de4f76189f7d8d147d2c0b03b40fc.json new file mode 100644 index 0000000..8bbf75d --- /dev/null +++ b/graphify-out/cache/ast/867ce4d57dfc282bdad7e3717dd7315be38de4f76189f7d8d147d2c0b03b40fc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "label": "operations.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L1"}, {"id": "routers_operations_operationentry", "label": "OperationEntry", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L36"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "routers_operations_operationsresponse", "label": "OperationsResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L51"}, {"id": "routers_operations_build_operations_router", "label": "build_operations_router()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L59"}, {"id": "routers_operations_session_to_entry", "label": "_session_to_entry()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L89"}, {"id": "routers_operations_rationale_1", "label": "``/operations`` router. Backend Spec \u00a74.6.1, Frontend \u00a79.5. Lists all in-flight", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L1"}, {"id": "routers_operations_rationale_37", "label": "One row in the Operations panel. Backend Spec \u00a74.6.1, Frontend \u00a79.5.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L37"}, {"id": "routers_operations_rationale_52", "label": "``GET /operations`` response.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L52"}, {"id": "routers_operations_rationale_60", "label": "Construct the ``/operations`` router.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L60"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "target": "exlab_wizard_api_dependencies", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "target": "exlab_wizard_api_setup", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "target": "exlab_wizard_controller_session_store", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "target": "exlab_wizard_controller_state_machine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "target": "routers_operations_operationentry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L36", "weight": 1.0}, {"source": "routers_operations_operationentry", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "target": "routers_operations_operationsresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L51", "weight": 1.0}, {"source": "routers_operations_operationsresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "target": "routers_operations_build_operations_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "target": "routers_operations_session_to_entry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L89", "weight": 1.0}, {"source": "routers_operations_session_to_entry", "target": "routers_operations_operationentry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L96", "weight": 1.0}, {"source": "routers_operations_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_operations_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L1", "weight": 1.0}, {"source": "routers_operations_rationale_37", "target": "routers_operations_operationentry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L37", "weight": 1.0}, {"source": "routers_operations_rationale_52", "target": "routers_operations_operationsresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L52", "weight": 1.0}, {"source": "routers_operations_rationale_60", "target": "routers_operations_build_operations_router", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L60", "weight": 1.0}], "raw_calls": [{"caller_nid": "routers_operations_build_operations_router", "callee": "APIRouter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L61"}, {"caller_nid": "routers_operations_build_operations_router", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L63"}, {"caller_nid": "routers_operations_build_operations_router", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L66"}, {"caller_nid": "routers_operations_session_to_entry", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L94"}, {"caller_nid": "routers_operations_session_to_entry", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L95"}, {"caller_nid": "routers_operations_session_to_entry", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L99"}, {"caller_nid": "routers_operations_session_to_entry", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L100"}, {"caller_nid": "routers_operations_session_to_entry", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L101"}, {"caller_nid": "routers_operations_session_to_entry", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L102"}, {"caller_nid": "routers_operations_session_to_entry", "callee": "project_identifier", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L103"}, {"caller_nid": "routers_operations_session_to_entry", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py", "source_location": "L104"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/86834b3b02df09c51cf7eb20477b30128081b34aa5159f64c679bfc10033a1dc.json b/graphify-out/cache/ast/86834b3b02df09c51cf7eb20477b30128081b34aa5159f64c679bfc10033a1dc.json new file mode 100644 index 0000000..bbfbbfd --- /dev/null +++ b/graphify-out/cache/ast/86834b3b02df09c51cf7eb20477b30128081b34aa5159f64c679bfc10033a1dc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "label": "test_models.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1"}, {"id": "config_test_models_sftp_transport_dict", "label": "_sftp_transport_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L48"}, {"id": "config_test_models_smb_transport_dict", "label": "_smb_transport_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L59"}, {"id": "config_test_models_equipment_dict", "label": "_equipment_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L69"}, {"id": "config_test_models_full_config_dict", "label": "_full_config_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L84"}, {"id": "config_test_models_test_paths_config_defaults_are_empty_strings", "label": "test_paths_config_defaults_are_empty_strings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L208"}, {"id": "config_test_models_test_paths_config_rejects_unknown_keys", "label": "test_paths_config_rejects_unknown_keys()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L215"}, {"id": "config_test_models_test_lims_config_defaults", "label": "test_lims_config_defaults()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L225"}, {"id": "config_test_models_test_lims_config_rejects_negative_cache_ttl_hours", "label": "test_lims_config_rejects_negative_cache_ttl_hours()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L233"}, {"id": "config_test_models_test_lims_config_zero_cache_ttl_is_allowed", "label": "test_lims_config_zero_cache_ttl_is_allowed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L238"}, {"id": "config_test_models_test_readme_default_field_minimal_string_field", "label": "test_readme_default_field_minimal_string_field()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L249"}, {"id": "config_test_models_test_readme_default_field_id_must_match_template_question_id_pattern", "label": "test_readme_default_field_id_must_match_template_question_id_pattern()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L256"}, {"id": "config_test_models_test_readme_default_field_id_rejects_leading_digit", "label": "test_readme_default_field_id_rejects_leading_digit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L261"}, {"id": "config_test_models_test_readme_default_field_label_must_be_non_empty", "label": "test_readme_default_field_label_must_be_non_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L266"}, {"id": "config_test_models_test_readme_default_field_rejects_unknown_type", "label": "test_readme_default_field_rejects_unknown_type()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L271"}, {"id": "config_test_models_test_readme_choice_field_requires_options", "label": "test_readme_choice_field_requires_options()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L276"}, {"id": "config_test_models_test_readme_choice_field_rejects_empty_options_list", "label": "test_readme_choice_field_rejects_empty_options_list()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L282"}, {"id": "config_test_models_test_readme_choice_field_accepts_non_empty_options", "label": "test_readme_choice_field_accepts_non_empty_options()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L287"}, {"id": "config_test_models_test_readme_non_choice_field_does_not_require_options", "label": "test_readme_non_choice_field_does_not_require_options()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L292"}, {"id": "config_test_models_test_readme_config_default_is_empty_list", "label": "test_readme_config_default_is_empty_list()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L304"}, {"id": "config_test_models_test_bandwidth_window_happy_path", "label": "test_bandwidth_window_happy_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L314"}, {"id": "config_test_models_test_bandwidth_window_rejects_empty_days_list", "label": "test_bandwidth_window_rejects_empty_days_list()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L321"}, {"id": "config_test_models_test_bandwidth_window_rejects_invalid_day", "label": "test_bandwidth_window_rejects_invalid_day()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L326"}, {"id": "config_test_models_test_bandwidth_window_from_must_be_before_to", "label": "test_bandwidth_window_from_must_be_before_to()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L331"}, {"id": "config_test_models_test_bandwidth_window_equal_from_and_to_is_invalid", "label": "test_bandwidth_window_equal_from_and_to_is_invalid()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L336"}, {"id": "config_test_models_test_bandwidth_window_rejects_non_hhmm_time", "label": "test_bandwidth_window_rejects_non_hhmm_time()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L342"}, {"id": "config_test_models_test_bandwidth_window_rejects_invalid_hour", "label": "test_bandwidth_window_rejects_invalid_hour()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L347"}, {"id": "config_test_models_test_bandwidth_window_rejects_invalid_minute", "label": "test_bandwidth_window_rejects_invalid_minute()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L352"}, {"id": "config_test_models_test_bandwidth_config_defaults", "label": "test_bandwidth_config_defaults()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L362"}, {"id": "config_test_models_test_bandwidth_config_rejects_zero_upload_mbps", "label": "test_bandwidth_config_rejects_zero_upload_mbps()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L368"}, {"id": "config_test_models_test_bandwidth_config_rejects_negative_upload_mbps", "label": "test_bandwidth_config_rejects_negative_upload_mbps()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L373"}, {"id": "config_test_models_test_bandwidth_config_accepts_positive_upload_mbps", "label": "test_bandwidth_config_accepts_positive_upload_mbps()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L378"}, {"id": "config_test_models_test_sftp_transport_minimal", "label": "test_sftp_transport_minimal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L388"}, {"id": "config_test_models_test_sftp_transport_rejects_missing_host", "label": "test_sftp_transport_rejects_missing_host()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L395"}, {"id": "config_test_models_test_sftp_transport_rejects_empty_user", "label": "test_sftp_transport_rejects_empty_user()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L402"}, {"id": "config_test_models_test_sftp_transport_rejects_empty_remote_path", "label": "test_sftp_transport_rejects_empty_remote_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L409"}, {"id": "config_test_models_test_sftp_transport_rejects_out_of_range_port", "label": "test_sftp_transport_rejects_out_of_range_port()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L416"}, {"id": "config_test_models_test_sftp_transport_rejects_wrong_type_tag", "label": "test_sftp_transport_rejects_wrong_type_tag()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L423"}, {"id": "config_test_models_test_smb_transport_minimal", "label": "test_smb_transport_minimal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L435"}, {"id": "config_test_models_test_smb_transport_accepts_optional_domain_and_subpath", "label": "test_smb_transport_accepts_optional_domain_and_subpath()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L443"}, {"id": "config_test_models_test_smb_transport_rejects_missing_share", "label": "test_smb_transport_rejects_missing_share()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L452"}, {"id": "config_test_models_test_requires_keyring_password_true_for_sftp_and_smb", "label": "test_requires_keyring_password_true_for_sftp_and_smb()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L464"}, {"id": "config_test_models_test_requires_keyring_password_false_for_none", "label": "test_requires_keyring_password_false_for_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L471"}, {"id": "config_test_models_test_equipment_transport_discriminates_on_type_sftp", "label": "test_equipment_transport_discriminates_on_type_sftp()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L480"}, {"id": "config_test_models_test_equipment_transport_discriminates_on_type_smb", "label": "test_equipment_transport_discriminates_on_type_smb()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L485"}, {"id": "config_test_models_test_equipment_transport_rejects_unknown_type", "label": "test_equipment_transport_rejects_unknown_type()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L495"}, {"id": "config_test_models_test_orchestrator_staging_transport_smb_mount", "label": "test_orchestrator_staging_transport_smb_mount()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L507"}, {"id": "config_test_models_test_orchestrator_staging_transport_file_transfer", "label": "test_orchestrator_staging_transport_file_transfer()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L514"}, {"id": "config_test_models_test_orchestrator_staging_transport_rejects_unknown_type", "label": "test_orchestrator_staging_transport_rejects_unknown_type()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L521"}, {"id": "config_test_models_test_equipment_id_regex_accepts_canonical_form", "label": "test_equipment_id_regex_accepts_canonical_form()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L535"}, {"id": "config_test_models_test_equipment_id_rejects_lowercase", "label": "test_equipment_id_rejects_lowercase()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L540"}, {"id": "config_test_models_test_equipment_id_rejects_hyphen", "label": "test_equipment_id_rejects_hyphen()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L545"}, {"id": "config_test_models_test_equipment_id_rejects_leading_digit", "label": "test_equipment_id_rejects_leading_digit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L550"}, {"id": "config_test_models_test_equipment_id_rejects_too_long", "label": "test_equipment_id_rejects_too_long()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L555"}, {"id": "config_test_models_test_equipment_id_accepts_max_length", "label": "test_equipment_id_accepts_max_length()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L561"}, {"id": "config_test_models_test_equipment_config_rejects_removed_completeness_fields", "label": "test_equipment_config_rejects_removed_completeness_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L567"}, {"id": "config_test_models_test_equipment_label_must_be_non_empty", "label": "test_equipment_label_must_be_non_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L578"}, {"id": "config_test_models_test_equipment_local_root_must_be_non_empty", "label": "test_equipment_local_root_must_be_non_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L585"}, {"id": "config_test_models_test_equipment_nas_root_must_be_non_empty", "label": "test_equipment_nas_root_must_be_non_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L592"}, {"id": "config_test_models_test_equipment_orchestrator_staging_transport_optional", "label": "test_equipment_orchestrator_staging_transport_optional()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L599"}, {"id": "config_test_models_orch_staging_transport_dict", "label": "_orch_staging_transport_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L609"}, {"id": "config_test_models_test_sync_mode_defaults_to_nas_when_absent", "label": "test_sync_mode_defaults_to_nas_when_absent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L617"}, {"id": "config_test_models_test_sync_mode_nas_requires_transport_block", "label": "test_sync_mode_nas_requires_transport_block()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L622"}, {"id": "config_test_models_test_sync_mode_nas_forbids_orchestrator_staging_transport", "label": "test_sync_mode_nas_forbids_orchestrator_staging_transport()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L631"}, {"id": "config_test_models_test_sync_mode_stage_requires_orchestrator_staging_transport", "label": "test_sync_mode_stage_requires_orchestrator_staging_transport()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L640"}, {"id": "config_test_models_test_sync_mode_stage_forbids_transport_block", "label": "test_sync_mode_stage_forbids_transport_block()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L649"}, {"id": "config_test_models_test_sync_mode_stage_with_only_orchestrator_transport_is_valid", "label": "test_sync_mode_stage_with_only_orchestrator_transport_is_valid()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L659"}, {"id": "config_test_models_test_sync_mode_serializes_to_string", "label": "test_sync_mode_serializes_to_string()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L670"}, {"id": "config_test_models_test_sync_mode_rejects_unknown_value", "label": "test_sync_mode_rejects_unknown_value()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L678"}, {"id": "config_test_models_test_sync_mode_stage_round_trip_via_dict", "label": "test_sync_mode_stage_round_trip_via_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L685"}, {"id": "config_test_models_test_nas_cleanup_defaults", "label": "test_nas_cleanup_defaults()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L704"}, {"id": "config_test_models_test_nas_cleanup_min_verify_passes_at_least_one", "label": "test_nas_cleanup_min_verify_passes_at_least_one()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L712"}, {"id": "config_test_models_test_nas_cleanup_min_age_hours_non_negative", "label": "test_nas_cleanup_min_age_hours_non_negative()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L717"}, {"id": "config_test_models_test_logging_level_normalized_to_uppercase", "label": "test_logging_level_normalized_to_uppercase()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L727"}, {"id": "config_test_models_test_logging_level_rejects_unknown", "label": "test_logging_level_rejects_unknown()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L732"}, {"id": "config_test_models_test_logging_level_accepts_all_canonical_values", "label": "test_logging_level_accepts_all_canonical_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L737"}, {"id": "config_test_models_test_logging_level_strips_whitespace_and_normalizes", "label": "test_logging_level_strips_whitespace_and_normalizes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L743"}, {"id": "config_test_models_test_logging_level_rejects_non_string", "label": "test_logging_level_rejects_non_string()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L748"}, {"id": "config_test_models_test_logging_level_rejects_non_string_directly", "label": "test_logging_level_rejects_non_string_directly()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L758"}, {"id": "config_test_models_test_logging_central_log_max_mb_at_least_one", "label": "test_logging_central_log_max_mb_at_least_one()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L766"}, {"id": "config_test_models_test_logging_central_log_keep_at_least_one", "label": "test_logging_central_log_keep_at_least_one()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L771"}, {"id": "config_test_models_test_operators_config_defaults_to_empty_allowlist", "label": "test_operators_config_defaults_to_empty_allowlist()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L781"}, {"id": "config_test_models_test_operators_config_accepts_arbitrary_strings", "label": "test_operators_config_accepts_arbitrary_strings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L786"}, {"id": "config_test_models_test_validator_config_defaults", "label": "test_validator_config_defaults()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L796"}, {"id": "config_test_models_test_validator_content_scan_max_mib_at_least_one", "label": "test_validator_content_scan_max_mib_at_least_one()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L803"}, {"id": "config_test_models_test_validator_extensions_must_start_with_dot", "label": "test_validator_extensions_must_start_with_dot()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L808"}, {"id": "config_test_models_test_validator_extensions_rejects_dotless_among_others", "label": "test_validator_extensions_rejects_dotless_among_others()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L813"}, {"id": "config_test_models_test_plugins_config_default_allow_network_false", "label": "test_plugins_config_default_allow_network_false()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L823"}, {"id": "config_test_models_test_sync_config_defaults", "label": "test_sync_config_defaults()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L833"}, {"id": "config_test_models_test_sync_config_retry_attempts_non_negative", "label": "test_sync_config_retry_attempts_non_negative()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L842"}, {"id": "config_test_models_test_sync_config_quiescence_minutes_at_least_one", "label": "test_sync_config_quiescence_minutes_at_least_one()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L847"}, {"id": "config_test_models_test_sync_config_poll_interval_seconds_at_least_one", "label": "test_sync_config_poll_interval_seconds_at_least_one()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L852"}, {"id": "config_test_models_test_sync_config_accepts_custom_quiescence_settings", "label": "test_sync_config_accepts_custom_quiescence_settings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L857"}, {"id": "config_test_models_test_sync_config_ignore_globs_default_is_independent_per_instance", "label": "test_sync_config_ignore_globs_default_is_independent_per_instance()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L868"}, {"id": "config_test_models_test_orchestrator_staging_cleanup_defaults", "label": "test_orchestrator_staging_cleanup_defaults()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L881"}, {"id": "config_test_models_test_orchestrator_staging_cleanup_scheduled_requires_positive_hours", "label": "test_orchestrator_staging_cleanup_scheduled_requires_positive_hours()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L887"}, {"id": "config_test_models_test_orchestrator_staging_cleanup_rejects_unknown_mode", "label": "test_orchestrator_staging_cleanup_rejects_unknown_mode()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L893"}, {"id": "config_test_models_test_orchestrator_config_defaults", "label": "test_orchestrator_config_defaults()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L903"}, {"id": "config_test_models_test_config_fully_default_is_valid", "label": "test_config_fully_default_is_valid()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L918"}, {"id": "config_test_models_test_unique_equipment_ids_required", "label": "test_unique_equipment_ids_required()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L928"}, {"id": "config_test_models_test_distinct_equipment_ids_accepted", "label": "test_distinct_equipment_ids_accepted()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L940"}, {"id": "config_test_models_test_orchestrator_legacy_enabled_field_rejected", "label": "test_orchestrator_legacy_enabled_field_rejected()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L954"}, {"id": "config_test_models_test_orchestrator_label_and_staging_root_load_independently", "label": "test_orchestrator_label_and_staging_root_load_independently()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L970"}, {"id": "config_test_models_test_orchestrator_with_both_fields_is_valid", "label": "test_orchestrator_with_both_fields_is_valid()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L985"}, {"id": "config_test_models_test_config_rejects_unknown_top_level_key", "label": "test_config_rejects_unknown_top_level_key()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L999"}, {"id": "config_test_models_test_full_config_round_trip_via_dict", "label": "test_full_config_round_trip_via_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1009"}, {"id": "config_test_models_test_round_trip_preserves_bandwidth_alias_for_from", "label": "test_round_trip_preserves_bandwidth_alias_for_from()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1030"}, {"id": "config_test_models_test_config_with_equipment_appended_seeds_from_none", "label": "test_config_with_equipment_appended_seeds_from_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1044"}, {"id": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", "label": "test_config_with_equipment_appended_preserves_existing_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1052"}, {"id": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", "label": "test_config_with_equipment_appended_rejects_duplicate_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1069"}, {"id": "config_test_models_rationale_1", "label": "Unit tests for ``exlab_wizard.config.models``. Pydantic models that mirror ``co", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1"}, {"id": "config_test_models_rationale_49", "label": "Minimal valid rclone_sftp transport block.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L49"}, {"id": "config_test_models_rationale_60", "label": "Minimal valid rclone_smb transport block.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L60"}, {"id": "config_test_models_rationale_74", "label": "Build a valid EquipmentConfig dict with sensible defaults.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L74"}, {"id": "config_test_models_rationale_85", "label": "Full Config dict mirroring the \u00a79 example. Used by round-trip tests.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L85"}, {"id": "config_test_models_rationale_568", "label": "The operator-free quiescence redesign drops the per-equipment completeness-s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L568"}, {"id": "config_test_models_rationale_686", "label": "Build a stage-mode EquipmentConfig from a dict, dump it, compare.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L686"}, {"id": "config_test_models_rationale_904", "label": "Redesign \u00a73.1: the ``enabled`` toggle is removed; ``label`` and ``staging_ro", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L904"}, {"id": "config_test_models_rationale_955", "label": "Redesign \u00a73.1: the ``enabled`` toggle is removed; old configs that carry it", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L955"}, {"id": "config_test_models_rationale_971", "label": "They can be empty at load time (the setup-incomplete gate trips, not the Pyd", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L971"}, {"id": "config_test_models_rationale_1010", "label": "Build a Config from a \u00a79-shaped dict, dump it, and compare. ``model_dump()`", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1010"}, {"id": "config_test_models_rationale_1045", "label": "A ``None`` config (fresh install) yields a default Config + the device.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1045"}, {"id": "config_test_models_rationale_1053", "label": "Appending keeps prior equipment and other config sections, unmutated.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1053"}, {"id": "config_test_models_rationale_1070", "label": "A device whose id already exists raises ConfigError, not a silent merge.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1070"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_sftp_transport_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_smb_transport_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_equipment_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_full_config_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L84", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_paths_config_defaults_are_empty_strings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L208", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_paths_config_rejects_unknown_keys", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L215", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_lims_config_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L225", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_lims_config_rejects_negative_cache_ttl_hours", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L233", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_lims_config_zero_cache_ttl_is_allowed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L238", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_readme_default_field_minimal_string_field", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L249", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_readme_default_field_id_must_match_template_question_id_pattern", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L256", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_readme_default_field_id_rejects_leading_digit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L261", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_readme_default_field_label_must_be_non_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L266", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_readme_default_field_rejects_unknown_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L271", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_readme_choice_field_requires_options", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L276", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_readme_choice_field_rejects_empty_options_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L282", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_readme_choice_field_accepts_non_empty_options", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L287", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_readme_non_choice_field_does_not_require_options", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L292", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_readme_config_default_is_empty_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L304", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_bandwidth_window_happy_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L314", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_bandwidth_window_rejects_empty_days_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L321", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_bandwidth_window_rejects_invalid_day", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L326", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_bandwidth_window_from_must_be_before_to", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L331", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_bandwidth_window_equal_from_and_to_is_invalid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L336", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_bandwidth_window_rejects_non_hhmm_time", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L342", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_bandwidth_window_rejects_invalid_hour", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L347", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_bandwidth_window_rejects_invalid_minute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L352", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_bandwidth_config_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L362", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_bandwidth_config_rejects_zero_upload_mbps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L368", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_bandwidth_config_rejects_negative_upload_mbps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L373", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_bandwidth_config_accepts_positive_upload_mbps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L378", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sftp_transport_minimal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L388", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sftp_transport_rejects_missing_host", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L395", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sftp_transport_rejects_empty_user", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L402", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sftp_transport_rejects_empty_remote_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L409", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sftp_transport_rejects_out_of_range_port", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L416", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sftp_transport_rejects_wrong_type_tag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L423", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_smb_transport_minimal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L435", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_smb_transport_accepts_optional_domain_and_subpath", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L443", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_smb_transport_rejects_missing_share", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L452", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_requires_keyring_password_true_for_sftp_and_smb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L464", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_requires_keyring_password_false_for_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L471", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_transport_discriminates_on_type_sftp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L480", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_transport_discriminates_on_type_smb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L485", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_transport_rejects_unknown_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L495", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_orchestrator_staging_transport_smb_mount", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L507", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_orchestrator_staging_transport_file_transfer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L514", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_orchestrator_staging_transport_rejects_unknown_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L521", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_id_regex_accepts_canonical_form", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L535", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_id_rejects_lowercase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L540", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_id_rejects_hyphen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L545", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_id_rejects_leading_digit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L550", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_id_rejects_too_long", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L555", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_id_accepts_max_length", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L561", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_config_rejects_removed_completeness_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L567", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_label_must_be_non_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L578", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_local_root_must_be_non_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L585", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_nas_root_must_be_non_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L592", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_equipment_orchestrator_staging_transport_optional", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L599", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_orch_staging_transport_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L609", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_mode_defaults_to_nas_when_absent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L617", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_mode_nas_requires_transport_block", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L622", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_mode_nas_forbids_orchestrator_staging_transport", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L631", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_mode_stage_requires_orchestrator_staging_transport", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L640", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_mode_stage_forbids_transport_block", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L649", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_mode_stage_with_only_orchestrator_transport_is_valid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L659", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_mode_serializes_to_string", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L670", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_mode_rejects_unknown_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L678", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_mode_stage_round_trip_via_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L685", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_nas_cleanup_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L704", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_nas_cleanup_min_verify_passes_at_least_one", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L712", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_nas_cleanup_min_age_hours_non_negative", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L717", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_logging_level_normalized_to_uppercase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L727", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_logging_level_rejects_unknown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L732", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_logging_level_accepts_all_canonical_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L737", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_logging_level_strips_whitespace_and_normalizes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L743", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_logging_level_rejects_non_string", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L748", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_logging_level_rejects_non_string_directly", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L758", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_logging_central_log_max_mb_at_least_one", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L766", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_logging_central_log_keep_at_least_one", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L771", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_operators_config_defaults_to_empty_allowlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L781", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_operators_config_accepts_arbitrary_strings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L786", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_validator_config_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L796", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_validator_content_scan_max_mib_at_least_one", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L803", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_validator_extensions_must_start_with_dot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L808", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_validator_extensions_rejects_dotless_among_others", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L813", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_plugins_config_default_allow_network_false", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L823", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_config_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L833", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_config_retry_attempts_non_negative", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L842", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_config_quiescence_minutes_at_least_one", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L847", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_config_poll_interval_seconds_at_least_one", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L852", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_config_accepts_custom_quiescence_settings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L857", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_sync_config_ignore_globs_default_is_independent_per_instance", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L868", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_orchestrator_staging_cleanup_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L881", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_orchestrator_staging_cleanup_scheduled_requires_positive_hours", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L887", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_orchestrator_staging_cleanup_rejects_unknown_mode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L893", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_orchestrator_config_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L903", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_config_fully_default_is_valid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L918", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_unique_equipment_ids_required", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L928", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_distinct_equipment_ids_accepted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L940", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_orchestrator_legacy_enabled_field_rejected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L954", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_orchestrator_label_and_staging_root_load_independently", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L970", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_orchestrator_with_both_fields_is_valid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L985", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_config_rejects_unknown_top_level_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L999", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_full_config_round_trip_via_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1009", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_round_trip_preserves_bandwidth_alias_for_from", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1030", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_config_with_equipment_appended_seeds_from_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1044", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1052", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "target": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1069", "weight": 1.0}, {"source": "config_test_models_equipment_dict", "target": "config_test_models_sftp_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L80", "weight": 1.0}, {"source": "config_test_models_test_sftp_transport_minimal", "target": "config_test_models_sftp_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L389", "weight": 1.0}, {"source": "config_test_models_test_sftp_transport_rejects_missing_host", "target": "config_test_models_sftp_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L396", "weight": 1.0}, {"source": "config_test_models_test_sftp_transport_rejects_empty_user", "target": "config_test_models_sftp_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L403", "weight": 1.0}, {"source": "config_test_models_test_sftp_transport_rejects_empty_remote_path", "target": "config_test_models_sftp_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L410", "weight": 1.0}, {"source": "config_test_models_test_sftp_transport_rejects_out_of_range_port", "target": "config_test_models_sftp_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L417", "weight": 1.0}, {"source": "config_test_models_test_sftp_transport_rejects_wrong_type_tag", "target": "config_test_models_sftp_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L424", "weight": 1.0}, {"source": "config_test_models_test_smb_transport_minimal", "target": "config_test_models_smb_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L436", "weight": 1.0}, {"source": "config_test_models_test_smb_transport_accepts_optional_domain_and_subpath", "target": "config_test_models_smb_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L444", "weight": 1.0}, {"source": "config_test_models_test_smb_transport_rejects_missing_share", "target": "config_test_models_smb_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L453", "weight": 1.0}, {"source": "config_test_models_test_requires_keyring_password_true_for_sftp_and_smb", "target": "config_test_models_sftp_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L465", "weight": 1.0}, {"source": "config_test_models_test_requires_keyring_password_true_for_sftp_and_smb", "target": "config_test_models_smb_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L466", "weight": 1.0}, {"source": "config_test_models_test_equipment_transport_discriminates_on_type_sftp", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L481", "weight": 1.0}, {"source": "config_test_models_test_equipment_transport_discriminates_on_type_smb", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L487", "weight": 1.0}, {"source": "config_test_models_test_equipment_transport_discriminates_on_type_smb", "target": "config_test_models_smb_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L489", "weight": 1.0}, {"source": "config_test_models_test_equipment_transport_rejects_unknown_type", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L496", "weight": 1.0}, {"source": "config_test_models_test_equipment_id_regex_accepts_canonical_form", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L536", "weight": 1.0}, {"source": "config_test_models_test_equipment_id_rejects_lowercase", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L542", "weight": 1.0}, {"source": "config_test_models_test_equipment_id_rejects_hyphen", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L547", "weight": 1.0}, {"source": "config_test_models_test_equipment_id_rejects_leading_digit", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L552", "weight": 1.0}, {"source": "config_test_models_test_equipment_id_rejects_too_long", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L558", "weight": 1.0}, {"source": "config_test_models_test_equipment_id_accepts_max_length", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L563", "weight": 1.0}, {"source": "config_test_models_test_equipment_config_rejects_removed_completeness_fields", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L571", "weight": 1.0}, {"source": "config_test_models_test_equipment_label_must_be_non_empty", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L579", "weight": 1.0}, {"source": "config_test_models_test_equipment_local_root_must_be_non_empty", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L586", "weight": 1.0}, {"source": "config_test_models_test_equipment_nas_root_must_be_non_empty", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L593", "weight": 1.0}, {"source": "config_test_models_test_equipment_orchestrator_staging_transport_optional", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L600", "weight": 1.0}, {"source": "config_test_models_test_sync_mode_defaults_to_nas_when_absent", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L618", "weight": 1.0}, {"source": "config_test_models_test_sync_mode_nas_requires_transport_block", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L623", "weight": 1.0}, {"source": "config_test_models_test_sync_mode_nas_forbids_orchestrator_staging_transport", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L632", "weight": 1.0}, {"source": "config_test_models_test_sync_mode_nas_forbids_orchestrator_staging_transport", "target": "config_test_models_orch_staging_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L634", "weight": 1.0}, {"source": "config_test_models_test_sync_mode_stage_requires_orchestrator_staging_transport", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L641", "weight": 1.0}, {"source": "config_test_models_test_sync_mode_stage_forbids_transport_block", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L650", "weight": 1.0}, {"source": "config_test_models_test_sync_mode_stage_forbids_transport_block", "target": "config_test_models_orch_staging_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L652", "weight": 1.0}, {"source": "config_test_models_test_sync_mode_stage_with_only_orchestrator_transport_is_valid", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L660", "weight": 1.0}, {"source": "config_test_models_test_sync_mode_stage_with_only_orchestrator_transport_is_valid", "target": "config_test_models_orch_staging_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L663", "weight": 1.0}, {"source": "config_test_models_test_sync_mode_serializes_to_string", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L671", "weight": 1.0}, {"source": "config_test_models_test_sync_mode_rejects_unknown_value", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L679", "weight": 1.0}, {"source": "config_test_models_test_sync_mode_stage_round_trip_via_dict", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L687", "weight": 1.0}, {"source": "config_test_models_test_sync_mode_stage_round_trip_via_dict", "target": "config_test_models_orch_staging_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L690", "weight": 1.0}, {"source": "config_test_models_test_unique_equipment_ids_required", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L931", "weight": 1.0}, {"source": "config_test_models_test_distinct_equipment_ids_accepted", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L943", "weight": 1.0}, {"source": "config_test_models_test_distinct_equipment_ids_accepted", "target": "config_test_models_smb_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L946", "weight": 1.0}, {"source": "config_test_models_test_full_config_round_trip_via_dict", "target": "config_test_models_full_config_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1018", "weight": 1.0}, {"source": "config_test_models_test_round_trip_preserves_bandwidth_alias_for_from", "target": "config_test_models_full_config_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1031", "weight": 1.0}, {"source": "config_test_models_test_config_with_equipment_appended_seeds_from_none", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1046", "weight": 1.0}, {"source": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1054", "weight": 1.0}, {"source": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", "target": "config_test_models_smb_transport_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1059", "weight": 1.0}, {"source": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", "target": "config_test_models_equipment_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1071", "weight": 1.0}, {"source": "config_test_models_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_config_test_models_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1", "weight": 1.0}, {"source": "config_test_models_rationale_49", "target": "config_test_models_sftp_transport_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L49", "weight": 1.0}, {"source": "config_test_models_rationale_60", "target": "config_test_models_smb_transport_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L60", "weight": 1.0}, {"source": "config_test_models_rationale_74", "target": "config_test_models_equipment_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L74", "weight": 1.0}, {"source": "config_test_models_rationale_85", "target": "config_test_models_full_config_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L85", "weight": 1.0}, {"source": "config_test_models_rationale_568", "target": "config_test_models_test_equipment_config_rejects_removed_completeness_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L568", "weight": 1.0}, {"source": "config_test_models_rationale_686", "target": "config_test_models_test_sync_mode_stage_round_trip_via_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L686", "weight": 1.0}, {"source": "config_test_models_rationale_904", "target": "config_test_models_test_orchestrator_config_defaults", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L904", "weight": 1.0}, {"source": "config_test_models_rationale_955", "target": "config_test_models_test_orchestrator_legacy_enabled_field_rejected", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L955", "weight": 1.0}, {"source": "config_test_models_rationale_971", "target": "config_test_models_test_orchestrator_label_and_staging_root_load_independently", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L971", "weight": 1.0}, {"source": "config_test_models_rationale_1010", "target": "config_test_models_test_full_config_round_trip_via_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1010", "weight": 1.0}, {"source": "config_test_models_rationale_1045", "target": "config_test_models_test_config_with_equipment_appended_seeds_from_none", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1045", "weight": 1.0}, {"source": "config_test_models_rationale_1053", "target": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1053", "weight": 1.0}, {"source": "config_test_models_rationale_1070", "target": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1070", "weight": 1.0}], "raw_calls": [{"caller_nid": "config_test_models_test_paths_config_defaults_are_empty_strings", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L209"}, {"caller_nid": "config_test_models_test_paths_config_rejects_unknown_keys", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L216"}, {"caller_nid": "config_test_models_test_paths_config_rejects_unknown_keys", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L217"}, {"caller_nid": "config_test_models_test_lims_config_defaults", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L226"}, {"caller_nid": "config_test_models_test_lims_config_rejects_negative_cache_ttl_hours", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L234"}, {"caller_nid": "config_test_models_test_lims_config_rejects_negative_cache_ttl_hours", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L235"}, {"caller_nid": "config_test_models_test_lims_config_zero_cache_ttl_is_allowed", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L240"}, {"caller_nid": "config_test_models_test_readme_default_field_minimal_string_field", "callee": "READMEDefaultField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L250"}, {"caller_nid": "config_test_models_test_readme_default_field_id_must_match_template_question_id_pattern", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L257"}, {"caller_nid": "config_test_models_test_readme_default_field_id_must_match_template_question_id_pattern", "callee": "READMEDefaultField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L258"}, {"caller_nid": "config_test_models_test_readme_default_field_id_rejects_leading_digit", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L262"}, {"caller_nid": "config_test_models_test_readme_default_field_id_rejects_leading_digit", "callee": "READMEDefaultField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L263"}, {"caller_nid": "config_test_models_test_readme_default_field_label_must_be_non_empty", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L267"}, {"caller_nid": "config_test_models_test_readme_default_field_label_must_be_non_empty", "callee": "READMEDefaultField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L268"}, {"caller_nid": "config_test_models_test_readme_default_field_rejects_unknown_type", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L272"}, {"caller_nid": "config_test_models_test_readme_default_field_rejects_unknown_type", "callee": "READMEDefaultField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L273"}, {"caller_nid": "config_test_models_test_readme_choice_field_requires_options", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L277"}, {"caller_nid": "config_test_models_test_readme_choice_field_requires_options", "callee": "READMEDefaultField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L278"}, {"caller_nid": "config_test_models_test_readme_choice_field_requires_options", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L279"}, {"caller_nid": "config_test_models_test_readme_choice_field_requires_options", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L279"}, {"caller_nid": "config_test_models_test_readme_choice_field_rejects_empty_options_list", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L283"}, {"caller_nid": "config_test_models_test_readme_choice_field_rejects_empty_options_list", "callee": "READMEDefaultField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L284"}, {"caller_nid": "config_test_models_test_readme_choice_field_accepts_non_empty_options", "callee": "READMEDefaultField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L288"}, {"caller_nid": "config_test_models_test_readme_non_choice_field_does_not_require_options", "callee": "READMEDefaultField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L294"}, {"caller_nid": "config_test_models_test_readme_non_choice_field_does_not_require_options", "callee": "READMEDefaultField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L295"}, {"caller_nid": "config_test_models_test_readme_non_choice_field_does_not_require_options", "callee": "READMEDefaultField", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L296"}, {"caller_nid": "config_test_models_test_readme_config_default_is_empty_list", "callee": "READMEConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L305"}, {"caller_nid": "config_test_models_test_bandwidth_window_happy_path", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L315"}, {"caller_nid": "config_test_models_test_bandwidth_window_rejects_empty_days_list", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L322"}, {"caller_nid": "config_test_models_test_bandwidth_window_rejects_empty_days_list", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L323"}, {"caller_nid": "config_test_models_test_bandwidth_window_rejects_invalid_day", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L327"}, {"caller_nid": "config_test_models_test_bandwidth_window_rejects_invalid_day", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L328"}, {"caller_nid": "config_test_models_test_bandwidth_window_from_must_be_before_to", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L332"}, {"caller_nid": "config_test_models_test_bandwidth_window_from_must_be_before_to", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L333"}, {"caller_nid": "config_test_models_test_bandwidth_window_equal_from_and_to_is_invalid", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L338"}, {"caller_nid": "config_test_models_test_bandwidth_window_equal_from_and_to_is_invalid", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L339"}, {"caller_nid": "config_test_models_test_bandwidth_window_rejects_non_hhmm_time", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L343"}, {"caller_nid": "config_test_models_test_bandwidth_window_rejects_non_hhmm_time", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L344"}, {"caller_nid": "config_test_models_test_bandwidth_window_rejects_invalid_hour", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L348"}, {"caller_nid": "config_test_models_test_bandwidth_window_rejects_invalid_hour", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L349"}, {"caller_nid": "config_test_models_test_bandwidth_window_rejects_invalid_minute", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L353"}, {"caller_nid": "config_test_models_test_bandwidth_window_rejects_invalid_minute", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L354"}, {"caller_nid": "config_test_models_test_bandwidth_config_defaults", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L363"}, {"caller_nid": "config_test_models_test_bandwidth_config_rejects_zero_upload_mbps", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L369"}, {"caller_nid": "config_test_models_test_bandwidth_config_rejects_zero_upload_mbps", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L370"}, {"caller_nid": "config_test_models_test_bandwidth_config_rejects_negative_upload_mbps", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L374"}, {"caller_nid": "config_test_models_test_bandwidth_config_rejects_negative_upload_mbps", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L375"}, {"caller_nid": "config_test_models_test_bandwidth_config_accepts_positive_upload_mbps", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L379"}, {"caller_nid": "config_test_models_test_sftp_transport_minimal", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L389"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_missing_host", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L396"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_missing_host", "callee": "pop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L397"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_missing_host", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L398"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_missing_host", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L399"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_empty_user", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L403"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_empty_user", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L405"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_empty_user", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L406"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_empty_remote_path", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L410"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_empty_remote_path", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L412"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_empty_remote_path", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L413"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_out_of_range_port", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L417"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_out_of_range_port", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L419"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_out_of_range_port", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L420"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_wrong_type_tag", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L424"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_wrong_type_tag", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L426"}, {"caller_nid": "config_test_models_test_sftp_transport_rejects_wrong_type_tag", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L427"}, {"caller_nid": "config_test_models_test_smb_transport_minimal", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L436"}, {"caller_nid": "config_test_models_test_smb_transport_accepts_optional_domain_and_subpath", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L444"}, {"caller_nid": "config_test_models_test_smb_transport_accepts_optional_domain_and_subpath", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L447"}, {"caller_nid": "config_test_models_test_smb_transport_rejects_missing_share", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L453"}, {"caller_nid": "config_test_models_test_smb_transport_rejects_missing_share", "callee": "pop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L454"}, {"caller_nid": "config_test_models_test_smb_transport_rejects_missing_share", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L455"}, {"caller_nid": "config_test_models_test_smb_transport_rejects_missing_share", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L456"}, {"caller_nid": "config_test_models_test_requires_keyring_password_true_for_sftp_and_smb", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L465"}, {"caller_nid": "config_test_models_test_requires_keyring_password_true_for_sftp_and_smb", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L466"}, {"caller_nid": "config_test_models_test_requires_keyring_password_true_for_sftp_and_smb", "callee": "transport_requires_keyring_password", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L467"}, {"caller_nid": "config_test_models_test_requires_keyring_password_true_for_sftp_and_smb", "callee": "transport_requires_keyring_password", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L468"}, {"caller_nid": "config_test_models_test_requires_keyring_password_false_for_none", "callee": "transport_requires_keyring_password", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L472"}, {"caller_nid": "config_test_models_test_equipment_transport_discriminates_on_type_sftp", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L481"}, {"caller_nid": "config_test_models_test_equipment_transport_discriminates_on_type_sftp", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L482"}, {"caller_nid": "config_test_models_test_equipment_transport_discriminates_on_type_smb", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L486"}, {"caller_nid": "config_test_models_test_equipment_transport_discriminates_on_type_smb", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L492"}, {"caller_nid": "config_test_models_test_equipment_transport_rejects_unknown_type", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L498"}, {"caller_nid": "config_test_models_test_equipment_transport_rejects_unknown_type", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L499"}, {"caller_nid": "config_test_models_test_orchestrator_staging_transport_smb_mount", "callee": "OrchestratorStagingTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L508"}, {"caller_nid": "config_test_models_test_orchestrator_staging_transport_file_transfer", "callee": "OrchestratorStagingTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L515"}, {"caller_nid": "config_test_models_test_orchestrator_staging_transport_rejects_unknown_type", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L522"}, {"caller_nid": "config_test_models_test_orchestrator_staging_transport_rejects_unknown_type", "callee": "OrchestratorStagingTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L523"}, {"caller_nid": "config_test_models_test_equipment_id_regex_accepts_canonical_form", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L536"}, {"caller_nid": "config_test_models_test_equipment_id_rejects_lowercase", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L541"}, {"caller_nid": "config_test_models_test_equipment_id_rejects_lowercase", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L542"}, {"caller_nid": "config_test_models_test_equipment_id_rejects_hyphen", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L546"}, {"caller_nid": "config_test_models_test_equipment_id_rejects_hyphen", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L547"}, {"caller_nid": "config_test_models_test_equipment_id_rejects_leading_digit", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L551"}, {"caller_nid": "config_test_models_test_equipment_id_rejects_leading_digit", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L552"}, {"caller_nid": "config_test_models_test_equipment_id_rejects_too_long", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L557"}, {"caller_nid": "config_test_models_test_equipment_id_rejects_too_long", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L558"}, {"caller_nid": "config_test_models_test_equipment_id_accepts_max_length", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L563"}, {"caller_nid": "config_test_models_test_equipment_config_rejects_removed_completeness_fields", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L573"}, {"caller_nid": "config_test_models_test_equipment_config_rejects_removed_completeness_fields", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L574"}, {"caller_nid": "config_test_models_test_equipment_config_rejects_removed_completeness_fields", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L575"}, {"caller_nid": "config_test_models_test_equipment_label_must_be_non_empty", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L581"}, {"caller_nid": "config_test_models_test_equipment_label_must_be_non_empty", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L582"}, {"caller_nid": "config_test_models_test_equipment_local_root_must_be_non_empty", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L588"}, {"caller_nid": "config_test_models_test_equipment_local_root_must_be_non_empty", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L589"}, {"caller_nid": "config_test_models_test_equipment_nas_root_must_be_non_empty", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L595"}, {"caller_nid": "config_test_models_test_equipment_nas_root_must_be_non_empty", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L596"}, {"caller_nid": "config_test_models_test_equipment_orchestrator_staging_transport_optional", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L600"}, {"caller_nid": "config_test_models_test_sync_mode_defaults_to_nas_when_absent", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L618"}, {"caller_nid": "config_test_models_test_sync_mode_nas_requires_transport_block", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L626"}, {"caller_nid": "config_test_models_test_sync_mode_nas_requires_transport_block", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L627"}, {"caller_nid": "config_test_models_test_sync_mode_nas_requires_transport_block", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L628"}, {"caller_nid": "config_test_models_test_sync_mode_nas_forbids_orchestrator_staging_transport", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L635"}, {"caller_nid": "config_test_models_test_sync_mode_nas_forbids_orchestrator_staging_transport", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L636"}, {"caller_nid": "config_test_models_test_sync_mode_nas_forbids_orchestrator_staging_transport", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L637"}, {"caller_nid": "config_test_models_test_sync_mode_stage_requires_orchestrator_staging_transport", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L644"}, {"caller_nid": "config_test_models_test_sync_mode_stage_requires_orchestrator_staging_transport", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L645"}, {"caller_nid": "config_test_models_test_sync_mode_stage_requires_orchestrator_staging_transport", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L646"}, {"caller_nid": "config_test_models_test_sync_mode_stage_forbids_transport_block", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L654"}, {"caller_nid": "config_test_models_test_sync_mode_stage_forbids_transport_block", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L655"}, {"caller_nid": "config_test_models_test_sync_mode_stage_forbids_transport_block", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L656"}, {"caller_nid": "config_test_models_test_sync_mode_stage_with_only_orchestrator_transport_is_valid", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L664"}, {"caller_nid": "config_test_models_test_sync_mode_serializes_to_string", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L673"}, {"caller_nid": "config_test_models_test_sync_mode_serializes_to_string", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L674"}, {"caller_nid": "config_test_models_test_sync_mode_rejects_unknown_value", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L681"}, {"caller_nid": "config_test_models_test_sync_mode_rejects_unknown_value", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L682"}, {"caller_nid": "config_test_models_test_sync_mode_stage_round_trip_via_dict", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L691"}, {"caller_nid": "config_test_models_test_sync_mode_stage_round_trip_via_dict", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L692"}, {"caller_nid": "config_test_models_test_nas_cleanup_defaults", "callee": "NASCleanupConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L705"}, {"caller_nid": "config_test_models_test_nas_cleanup_min_verify_passes_at_least_one", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L713"}, {"caller_nid": "config_test_models_test_nas_cleanup_min_verify_passes_at_least_one", "callee": "NASCleanupConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L714"}, {"caller_nid": "config_test_models_test_nas_cleanup_min_age_hours_non_negative", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L718"}, {"caller_nid": "config_test_models_test_nas_cleanup_min_age_hours_non_negative", "callee": "NASCleanupConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L719"}, {"caller_nid": "config_test_models_test_logging_level_normalized_to_uppercase", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L728"}, {"caller_nid": "config_test_models_test_logging_level_rejects_unknown", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L733"}, {"caller_nid": "config_test_models_test_logging_level_rejects_unknown", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L734"}, {"caller_nid": "config_test_models_test_logging_level_accepts_all_canonical_values", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L739"}, {"caller_nid": "config_test_models_test_logging_level_strips_whitespace_and_normalizes", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L744"}, {"caller_nid": "config_test_models_test_logging_level_rejects_non_string", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L752"}, {"caller_nid": "config_test_models_test_logging_level_rejects_non_string", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L753"}, {"caller_nid": "config_test_models_test_logging_level_rejects_non_string", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L754"}, {"caller_nid": "config_test_models_test_logging_level_rejects_non_string", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L755"}, {"caller_nid": "config_test_models_test_logging_level_rejects_non_string_directly", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L761"}, {"caller_nid": "config_test_models_test_logging_level_rejects_non_string_directly", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L762"}, {"caller_nid": "config_test_models_test_logging_level_rejects_non_string_directly", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L763"}, {"caller_nid": "config_test_models_test_logging_central_log_max_mb_at_least_one", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L767"}, {"caller_nid": "config_test_models_test_logging_central_log_max_mb_at_least_one", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L768"}, {"caller_nid": "config_test_models_test_logging_central_log_keep_at_least_one", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L772"}, {"caller_nid": "config_test_models_test_logging_central_log_keep_at_least_one", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L773"}, {"caller_nid": "config_test_models_test_operators_config_defaults_to_empty_allowlist", "callee": "OperatorsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L782"}, {"caller_nid": "config_test_models_test_operators_config_accepts_arbitrary_strings", "callee": "OperatorsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L787"}, {"caller_nid": "config_test_models_test_validator_config_defaults", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L797"}, {"caller_nid": "config_test_models_test_validator_content_scan_max_mib_at_least_one", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L804"}, {"caller_nid": "config_test_models_test_validator_content_scan_max_mib_at_least_one", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L805"}, {"caller_nid": "config_test_models_test_validator_extensions_must_start_with_dot", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L809"}, {"caller_nid": "config_test_models_test_validator_extensions_must_start_with_dot", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L810"}, {"caller_nid": "config_test_models_test_validator_extensions_rejects_dotless_among_others", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L814"}, {"caller_nid": "config_test_models_test_validator_extensions_rejects_dotless_among_others", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L815"}, {"caller_nid": "config_test_models_test_plugins_config_default_allow_network_false", "callee": "PluginsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L824"}, {"caller_nid": "config_test_models_test_sync_config_defaults", "callee": "SyncConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L834"}, {"caller_nid": "config_test_models_test_sync_config_retry_attempts_non_negative", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L843"}, {"caller_nid": "config_test_models_test_sync_config_retry_attempts_non_negative", "callee": "SyncConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L844"}, {"caller_nid": "config_test_models_test_sync_config_quiescence_minutes_at_least_one", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L848"}, {"caller_nid": "config_test_models_test_sync_config_quiescence_minutes_at_least_one", "callee": "SyncConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L849"}, {"caller_nid": "config_test_models_test_sync_config_poll_interval_seconds_at_least_one", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L853"}, {"caller_nid": "config_test_models_test_sync_config_poll_interval_seconds_at_least_one", "callee": "SyncConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L854"}, {"caller_nid": "config_test_models_test_sync_config_accepts_custom_quiescence_settings", "callee": "SyncConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L858"}, {"caller_nid": "config_test_models_test_sync_config_ignore_globs_default_is_independent_per_instance", "callee": "SyncConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L870"}, {"caller_nid": "config_test_models_test_sync_config_ignore_globs_default_is_independent_per_instance", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L871"}, {"caller_nid": "config_test_models_test_sync_config_ignore_globs_default_is_independent_per_instance", "callee": "SyncConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L872"}, {"caller_nid": "config_test_models_test_orchestrator_staging_cleanup_defaults", "callee": "OrchestratorStagingCleanup", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L882"}, {"caller_nid": "config_test_models_test_orchestrator_staging_cleanup_scheduled_requires_positive_hours", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L889"}, {"caller_nid": "config_test_models_test_orchestrator_staging_cleanup_scheduled_requires_positive_hours", "callee": "OrchestratorStagingCleanup", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L890"}, {"caller_nid": "config_test_models_test_orchestrator_staging_cleanup_rejects_unknown_mode", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L894"}, {"caller_nid": "config_test_models_test_orchestrator_staging_cleanup_rejects_unknown_mode", "callee": "OrchestratorStagingCleanup", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L895"}, {"caller_nid": "config_test_models_test_orchestrator_config_defaults", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L907"}, {"caller_nid": "config_test_models_test_config_fully_default_is_valid", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L919"}, {"caller_nid": "config_test_models_test_unique_equipment_ids_required", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L935"}, {"caller_nid": "config_test_models_test_unique_equipment_ids_required", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L936"}, {"caller_nid": "config_test_models_test_unique_equipment_ids_required", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L937"}, {"caller_nid": "config_test_models_test_unique_equipment_ids_required", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L937"}, {"caller_nid": "config_test_models_test_unique_equipment_ids_required", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L937"}, {"caller_nid": "config_test_models_test_unique_equipment_ids_required", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L937"}, {"caller_nid": "config_test_models_test_distinct_equipment_ids_accepted", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L950"}, {"caller_nid": "config_test_models_test_orchestrator_legacy_enabled_field_rejected", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L957"}, {"caller_nid": "config_test_models_test_orchestrator_legacy_enabled_field_rejected", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L958"}, {"caller_nid": "config_test_models_test_orchestrator_legacy_enabled_field_rejected", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L967"}, {"caller_nid": "config_test_models_test_orchestrator_label_and_staging_root_load_independently", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L973"}, {"caller_nid": "config_test_models_test_orchestrator_with_both_fields_is_valid", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L986"}, {"caller_nid": "config_test_models_test_config_rejects_unknown_top_level_key", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1000"}, {"caller_nid": "config_test_models_test_config_rejects_unknown_top_level_key", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1001"}, {"caller_nid": "config_test_models_test_full_config_round_trip_via_dict", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1022"}, {"caller_nid": "config_test_models_test_full_config_round_trip_via_dict", "callee": "setdefault", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1023"}, {"caller_nid": "config_test_models_test_full_config_round_trip_via_dict", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1025"}, {"caller_nid": "config_test_models_test_full_config_round_trip_via_dict", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1026"}, {"caller_nid": "config_test_models_test_round_trip_preserves_bandwidth_alias_for_from", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1031"}, {"caller_nid": "config_test_models_test_round_trip_preserves_bandwidth_alias_for_from", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1032"}, {"caller_nid": "config_test_models_test_config_with_equipment_appended_seeds_from_none", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1046"}, {"caller_nid": "config_test_models_test_config_with_equipment_appended_seeds_from_none", "callee": "config_with_equipment_appended", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1047"}, {"caller_nid": "config_test_models_test_config_with_equipment_appended_seeds_from_none", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1048"}, {"caller_nid": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1054"}, {"caller_nid": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1055"}, {"caller_nid": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1055"}, {"caller_nid": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1056"}, {"caller_nid": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", "callee": "config_with_equipment_appended", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1062"}, {"caller_nid": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1071"}, {"caller_nid": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1072"}, {"caller_nid": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1073"}, {"caller_nid": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1074"}, {"caller_nid": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", "callee": "config_with_equipment_appended", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py", "source_location": "L1075"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/869f7ff699289c31e72d8ba123430438c564077a427d79c314382618dedaa6c5.json b/graphify-out/cache/ast/869f7ff699289c31e72d8ba123430438c564077a427d79c314382618dedaa6c5.json new file mode 100644 index 0000000..dbfcb99 --- /dev/null +++ b/graphify-out/cache/ast/869f7ff699289c31e72d8ba123430438c564077a427d79c314382618dedaa6c5.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_remaining_work_md", "label": "REMAINING_WORK.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L1"}, {"id": "docs_remaining_work_exlab_wizard_remaining_work_specification", "label": "ExLab-Wizard \u2014 Remaining Work Specification", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L1"}, {"id": "docs_remaining_work_0_context", "label": "0. Context", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L13"}, {"id": "docs_remaining_work_0_1_architecture_read_first", "label": "0.1 Architecture (read first)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L15"}, {"id": "docs_remaining_work_0_2_what_the_recent_edit_changed_and_didn_t", "label": "0.2 What the recent edit changed (and didn't)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L25"}, {"id": "docs_remaining_work_0_3_healthy_baseline_not_stubs", "label": "0.3 Healthy baseline (not stubs)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L32"}, {"id": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", "label": "A. UI controls that exist but are not functional", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L40"}, {"id": "docs_remaining_work_a1_quit_exlab_wizard_now_button_has_no_handler", "label": "A1 \u2014 \"Quit ExLab-Wizard now\" button has no handler", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L42"}, {"id": "docs_remaining_work_a2_start_at_login_autostart_checkbox_is_not_bound", "label": "A2 \u2014 \"Start at login\" autostart checkbox is not bound", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L52"}, {"id": "docs_remaining_work_a3_application_section_status_indicators_are_hardcoded_missing_7_13_parity", "label": "A3 \u2014 Application-section status indicators are hardcoded / missing (\u00a77.13 parity)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L62"}, {"id": "docs_remaining_work_a4_operators_allowlist_has_backend_enforcement_but_no_editor_ui", "label": "A4 \u2014 Operators allowlist has backend enforcement but **no editor UI**", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L69"}, {"id": "docs_remaining_work_a5_content_scan_extensions_renders_read_only_partial", "label": "A5 \u2014 `content_scan_extensions` renders read-only (partial)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L79"}, {"id": "docs_remaining_work_resolved_not_a_defect_previously_suspected_in_a", "label": "Resolved / not-a-defect (previously suspected in A)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L86"}, {"id": "docs_remaining_work_b_backend_features_fully_built_but_not_surfaced_in_the_gui", "label": "B. Backend features fully built but **not surfaced in the GUI**", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L92"}, {"id": "docs_remaining_work_b1_operations_modal_is_built_exported_and_rendered_nowhere_highest_impact", "label": "B1 \u2014 Operations modal is built, exported, and rendered nowhere \u2605 highest impact", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L100"}, {"id": "docs_remaining_work_b2_no_gui_path_to_resume_or_cancel_a_session", "label": "B2 \u2014 No GUI path to resume or cancel a session", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L111"}, {"id": "docs_remaining_work_b3_plugin_input_required_cannot_be_answered_from_the_gui", "label": "B3 \u2014 Plugin `INPUT_REQUIRED` cannot be answered from the GUI", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L118"}, {"id": "docs_remaining_work_b4_live_per_session_phase_progress_is_static_the_gui_never_subscribes", "label": "B4 \u2014 Live per-session phase progress is static; the GUI never subscribes", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L125"}, {"id": "docs_remaining_work_b5_audit_problems_live_stream_not_consumed_by_the_in_process_ui", "label": "B5 \u2014 Audit / Problems live stream not consumed by the in-process UI", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L132"}, {"id": "docs_remaining_work_c_no_op_default_collaborators", "label": "C. No-op default collaborators", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L149"}, {"id": "docs_remaining_work_c1_production_runs_on_the_stub_readme_generator_real_defect", "label": "C1 \u2014 Production runs on the **stub** README generator \u2605 real defect", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L151"}, {"id": "docs_remaining_work_c2_noopnassync_controller_default_informational_not_a_production_defect", "label": "C2 \u2014 `NoOpNASSync` controller default (informational \u2014 not a production defect)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L163"}, {"id": "docs_remaining_work_c3_runtime_guard_toasts_where_the_none_noop_path_surfaces_in_the_live_ui", "label": "C3 \u2014 Runtime guard toasts (where the `None`/NoOp path surfaces in the live UI)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L168"}, {"id": "docs_remaining_work_d_todo_stale_markers", "label": "D. TODO / stale markers", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L177"}, {"id": "docs_remaining_work_d1_offline_catalogue_schema_version_gate_is_stricter_than_the_cache_file_policy_open_spec_question", "label": "D1 \u2014 Offline-catalogue schema-version gate is stricter than the cache-file policy (open spec question)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L179"}, {"id": "docs_remaining_work_d2_stale_plugins_registry_py_not_yet_committed_comment_documentation_only", "label": "D2 \u2014 Stale \"plugins/registry.py not yet committed\" comment (documentation only)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L186"}, {"id": "docs_remaining_work_prioritized_backlog", "label": "Prioritized backlog", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L194"}, {"id": "docs_remaining_work_shared_foundations_to_build_once", "label": "Shared foundations to build once", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L212"}, {"id": "docs_remaining_work_suggested_sequencing", "label": "Suggested sequencing", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L218"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_remaining_work_md", "target": "docs_remaining_work_exlab_wizard_remaining_work_specification", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L1", "weight": 1.0}, {"source": "docs_remaining_work_exlab_wizard_remaining_work_specification", "target": "docs_remaining_work_0_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L13", "weight": 1.0}, {"source": "docs_remaining_work_0_context", "target": "docs_remaining_work_0_1_architecture_read_first", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L15", "weight": 1.0}, {"source": "docs_remaining_work_0_context", "target": "docs_remaining_work_0_2_what_the_recent_edit_changed_and_didn_t", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L25", "weight": 1.0}, {"source": "docs_remaining_work_0_context", "target": "docs_remaining_work_0_3_healthy_baseline_not_stubs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L32", "weight": 1.0}, {"source": "docs_remaining_work_exlab_wizard_remaining_work_specification", "target": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L40", "weight": 1.0}, {"source": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", "target": "docs_remaining_work_a1_quit_exlab_wizard_now_button_has_no_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L42", "weight": 1.0}, {"source": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", "target": "docs_remaining_work_a2_start_at_login_autostart_checkbox_is_not_bound", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L52", "weight": 1.0}, {"source": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", "target": "docs_remaining_work_a3_application_section_status_indicators_are_hardcoded_missing_7_13_parity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L62", "weight": 1.0}, {"source": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", "target": "docs_remaining_work_a4_operators_allowlist_has_backend_enforcement_but_no_editor_ui", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L69", "weight": 1.0}, {"source": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", "target": "docs_remaining_work_a5_content_scan_extensions_renders_read_only_partial", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L79", "weight": 1.0}, {"source": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", "target": "docs_remaining_work_resolved_not_a_defect_previously_suspected_in_a", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L86", "weight": 1.0}, {"source": "docs_remaining_work_exlab_wizard_remaining_work_specification", "target": "docs_remaining_work_b_backend_features_fully_built_but_not_surfaced_in_the_gui", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L92", "weight": 1.0}, {"source": "docs_remaining_work_b_backend_features_fully_built_but_not_surfaced_in_the_gui", "target": "docs_remaining_work_b1_operations_modal_is_built_exported_and_rendered_nowhere_highest_impact", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L100", "weight": 1.0}, {"source": "docs_remaining_work_b_backend_features_fully_built_but_not_surfaced_in_the_gui", "target": "docs_remaining_work_b2_no_gui_path_to_resume_or_cancel_a_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L111", "weight": 1.0}, {"source": "docs_remaining_work_b_backend_features_fully_built_but_not_surfaced_in_the_gui", "target": "docs_remaining_work_b3_plugin_input_required_cannot_be_answered_from_the_gui", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L118", "weight": 1.0}, {"source": "docs_remaining_work_b_backend_features_fully_built_but_not_surfaced_in_the_gui", "target": "docs_remaining_work_b4_live_per_session_phase_progress_is_static_the_gui_never_subscribes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L125", "weight": 1.0}, {"source": "docs_remaining_work_b_backend_features_fully_built_but_not_surfaced_in_the_gui", "target": "docs_remaining_work_b5_audit_problems_live_stream_not_consumed_by_the_in_process_ui", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L132", "weight": 1.0}, {"source": "docs_remaining_work_exlab_wizard_remaining_work_specification", "target": "docs_remaining_work_c_no_op_default_collaborators", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L149", "weight": 1.0}, {"source": "docs_remaining_work_c_no_op_default_collaborators", "target": "docs_remaining_work_c1_production_runs_on_the_stub_readme_generator_real_defect", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L151", "weight": 1.0}, {"source": "docs_remaining_work_c_no_op_default_collaborators", "target": "docs_remaining_work_c2_noopnassync_controller_default_informational_not_a_production_defect", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L163", "weight": 1.0}, {"source": "docs_remaining_work_c_no_op_default_collaborators", "target": "docs_remaining_work_c3_runtime_guard_toasts_where_the_none_noop_path_surfaces_in_the_live_ui", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L168", "weight": 1.0}, {"source": "docs_remaining_work_exlab_wizard_remaining_work_specification", "target": "docs_remaining_work_d_todo_stale_markers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L177", "weight": 1.0}, {"source": "docs_remaining_work_d_todo_stale_markers", "target": "docs_remaining_work_d1_offline_catalogue_schema_version_gate_is_stricter_than_the_cache_file_policy_open_spec_question", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L179", "weight": 1.0}, {"source": "docs_remaining_work_d_todo_stale_markers", "target": "docs_remaining_work_d2_stale_plugins_registry_py_not_yet_committed_comment_documentation_only", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L186", "weight": 1.0}, {"source": "docs_remaining_work_exlab_wizard_remaining_work_specification", "target": "docs_remaining_work_prioritized_backlog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L194", "weight": 1.0}, {"source": "docs_remaining_work_prioritized_backlog", "target": "docs_remaining_work_shared_foundations_to_build_once", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L212", "weight": 1.0}, {"source": "docs_remaining_work_prioritized_backlog", "target": "docs_remaining_work_suggested_sequencing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md", "source_location": "L218", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/86b29bcc79a26c8f1cf4026008f8827c2ae56b76528cf21b6856e1f855ccfd9d.json b/graphify-out/cache/ast/86b29bcc79a26c8f1cf4026008f8827c2ae56b76528cf21b6856e1f855ccfd9d.json new file mode 100644 index 0000000..5297f5d --- /dev/null +++ b/graphify-out/cache/ast/86b29bcc79a26c8f1cf4026008f8827c2ae56b76528cf21b6856e1f855ccfd9d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_user_guide_05_create_test_run_md", "label": "05_create_test_run.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md", "source_location": "L1"}, {"id": "user_guide_05_create_test_run_3_3_create_a_new_test_run", "label": "3.3 Create a New Test Run", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md", "source_location": "L1"}, {"id": "user_guide_05_create_test_run_capability_summary", "label": "Capability summary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md", "source_location": "L3"}, {"id": "user_guide_05_create_test_run_walkthrough", "label": "Walkthrough", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md", "source_location": "L15"}, {"id": "user_guide_05_create_test_run_screenshots", "label": "Screenshots", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md", "source_location": "L28"}, {"id": "user_guide_05_create_test_run_codeblock_1", "label": "code:{image} (:alt: New test run wizard, initial render)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md", "source_location": "L30"}, {"id": "user_guide_05_create_test_run_related_material", "label": "Related material", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md", "source_location": "L35"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_user_guide_05_create_test_run_md", "target": "user_guide_05_create_test_run_3_3_create_a_new_test_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md", "source_location": "L1", "weight": 1.0}, {"source": "user_guide_05_create_test_run_3_3_create_a_new_test_run", "target": "user_guide_05_create_test_run_capability_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md", "source_location": "L3", "weight": 1.0}, {"source": "user_guide_05_create_test_run_3_3_create_a_new_test_run", "target": "user_guide_05_create_test_run_walkthrough", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md", "source_location": "L15", "weight": 1.0}, {"source": "user_guide_05_create_test_run_3_3_create_a_new_test_run", "target": "user_guide_05_create_test_run_screenshots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md", "source_location": "L28", "weight": 1.0}, {"source": "user_guide_05_create_test_run_screenshots", "target": "user_guide_05_create_test_run_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md", "source_location": "L30", "weight": 1.0}, {"source": "user_guide_05_create_test_run_3_3_create_a_new_test_run", "target": "user_guide_05_create_test_run_related_material", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md", "source_location": "L35", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/87c02bf10416e68f3480ac6aa6c2fc35cc31dd86df658a1bfad6c37af5725860.json b/graphify-out/cache/ast/87c02bf10416e68f3480ac6aa6c2fc35cc31dd86df658a1bfad6c37af5725860.json new file mode 100644 index 0000000..39234d9 --- /dev/null +++ b/graphify-out/cache/ast/87c02bf10416e68f3480ac6aa6c2fc35cc31dd86df658a1bfad6c37af5725860.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_user_guide_06_readme_md", "label": "06_readme.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md", "source_location": "L1"}, {"id": "user_guide_06_readme_3_5_author_a_readme_at_creation_time", "label": "3.5 Author a README at Creation Time", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md", "source_location": "L1"}, {"id": "user_guide_06_readme_capability_summary", "label": "Capability summary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md", "source_location": "L3"}, {"id": "user_guide_06_readme_walkthrough", "label": "Walkthrough", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md", "source_location": "L18"}, {"id": "user_guide_06_readme_screenshots", "label": "Screenshots", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md", "source_location": "L35"}, {"id": "user_guide_06_readme_codeblock_1", "label": "code:{image} (:alt: README step inside the new-project wizard)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md", "source_location": "L37"}, {"id": "user_guide_06_readme_related_material", "label": "Related material", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md", "source_location": "L42"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_user_guide_06_readme_md", "target": "user_guide_06_readme_3_5_author_a_readme_at_creation_time", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md", "source_location": "L1", "weight": 1.0}, {"source": "user_guide_06_readme_3_5_author_a_readme_at_creation_time", "target": "user_guide_06_readme_capability_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md", "source_location": "L3", "weight": 1.0}, {"source": "user_guide_06_readme_3_5_author_a_readme_at_creation_time", "target": "user_guide_06_readme_walkthrough", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md", "source_location": "L18", "weight": 1.0}, {"source": "user_guide_06_readme_3_5_author_a_readme_at_creation_time", "target": "user_guide_06_readme_screenshots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md", "source_location": "L35", "weight": 1.0}, {"source": "user_guide_06_readme_screenshots", "target": "user_guide_06_readme_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md", "source_location": "L37", "weight": 1.0}, {"source": "user_guide_06_readme_3_5_author_a_readme_at_creation_time", "target": "user_guide_06_readme_related_material", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md", "source_location": "L42", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/87d3d2cccf5b575d397e65a17e73a9eef8189794cb5a5eab5c585cd15b3ad0fc.json b/graphify-out/cache/ast/87d3d2cccf5b575d397e65a17e73a9eef8189794cb5a5eab5c585cd15b3ad0fc.json new file mode 100644 index 0000000..dda3220 --- /dev/null +++ b/graphify-out/cache/ast/87d3d2cccf5b575d397e65a17e73a9eef8189794cb5a5eab5c585cd15b3ad0fc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_fresh_install_setup_py", "label": "test_flow_00_fresh_install_setup.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L1"}, {"id": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "label": "fresh_prod_server()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L49"}, {"id": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "label": "test_fresh_install_setup_writes_config_and_applies_live()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L107"}, {"id": "e2e_test_flow_00_fresh_install_setup_rationale_1", "label": "E2E flow 00: fresh-install first-launch setup against the PRODUCTION app. Unlik", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L1"}, {"id": "e2e_test_flow_00_fresh_install_setup_rationale_50", "label": "Spawn the production wizard app with HOME redirected to a fresh tmp dir. Yi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L50"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_fresh_install_setup_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_fresh_install_setup_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_fresh_install_setup_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_fresh_install_setup_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_fresh_install_setup_py", "target": "httpx", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_fresh_install_setup_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_fresh_install_setup_py", "target": "tests_e2e_prod_server", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_fresh_install_setup_py", "target": "tests_e2e_conftest", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_fresh_install_setup_py", "target": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_fresh_install_setup_py", "target": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L107", "weight": 1.0}, {"source": "e2e_test_flow_00_fresh_install_setup_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_fresh_install_setup_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_test_flow_00_fresh_install_setup_rationale_50", "target": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L50", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L57"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "free_port", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L58"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "prod_app_env", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L59"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "Popen", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L63"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L73"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L81"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L83"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L88"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "terminate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L90"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L92"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "kill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L94"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "skip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L95"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "terminate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L99"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L101"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "kill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L103"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L104"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "resolve_config_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L113"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L114"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L121"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "new_context", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L123"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "new_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L124"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L127"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L128"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L129"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L129"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L133"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L133"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L134"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L135"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L135"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L140"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L140"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L140"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L141"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L141"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L141"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L142"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L142"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L142"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L145"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L145"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L146"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L146"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L147"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L147"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L148"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L148"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L154"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L154"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L155"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "get_by_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L155"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L161"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L162"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L163"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L171"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L172"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L173"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L173"}, {"caller_nid": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py", "source_location": "L176"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/88f5e60e156eeca16a1dda3cf44ade4324fad1f00229cd4446f60884b43e221c.json b/graphify-out/cache/ast/88f5e60e156eeca16a1dda3cf44ade4324fad1f00229cd4446f60884b43e221c.json new file mode 100644 index 0000000..35cbb25 --- /dev/null +++ b/graphify-out/cache/ast/88f5e60e156eeca16a1dda3cf44ade4324fad1f00229cd4446f60884b43e221c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_cache_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/__init__.py", "source_location": "L1"}, {"id": "cache_init_rationale_1", "label": "Unit tests for ``exlab_wizard.cache``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/__init__.py", "source_location": "L1"}], "edges": [{"source": "cache_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_cache_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/89116762784246bb7ef352b8aba38431f7fef8e6050d1e86080e27a4ce2636ee.json b/graphify-out/cache/ast/89116762784246bb7ef352b8aba38431f7fef8e6050d1e86080e27a4ce2636ee.json new file mode 100644 index 0000000..ff2ee03 --- /dev/null +++ b/graphify-out/cache/ast/89116762784246bb7ef352b8aba38431f7fef8e6050d1e86080e27a4ce2636ee.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/__init__.py", "source_location": "L1"}, {"id": "pages_init_rationale_1", "label": "UI pages package. Each module exposes a render function plus its state dataclas", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_init_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/__init__.py", "source_location": "L7", "weight": 1.0}, {"source": "pages_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/891bf8bb135b799fa2f6c947f6b416fc2bbd61fca5562b0753b5078fbc84bf36.json b/graphify-out/cache/ast/891bf8bb135b799fa2f6c947f6b416fc2bbd61fca5562b0753b5078fbc84bf36.json new file mode 100644 index 0000000..1f7bbec --- /dev/null +++ b/graphify-out/cache/ast/891bf8bb135b799fa2f6c947f6b416fc2bbd61fca5562b0753b5078fbc84bf36.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "label": "test_creation_writer.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L1"}, {"id": "cache_test_creation_writer_build_minimal_payload", "label": "_build_minimal_payload()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L48"}, {"id": "cache_test_creation_writer_writer", "label": "writer()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L74"}, {"id": "cache_test_creation_writer_creation_path", "label": "creation_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L79"}, {"id": "cache_test_creation_writer_test_write_creation_emits_valid_current_version_file", "label": "test_write_creation_emits_valid_current_version_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L89"}, {"id": "cache_test_creation_writer_test_write_creation_pins_schema_version_to_writer_default", "label": "test_write_creation_pins_schema_version_to_writer_default()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L101"}, {"id": "cache_test_creation_writer_test_update_creation_atomic_mutates_target_field", "label": "test_update_creation_atomic_mutates_target_field()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L117"}, {"id": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", "label": "test_update_creation_atomic_preserves_unknown_top_level_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L133"}, {"id": "cache_test_creation_writer_test_update_creation_atomic_appends_validation_override", "label": "test_update_creation_atomic_appends_validation_override()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L152"}, {"id": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "label": "test_update_creation_atomic_serializes_concurrent_calls()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L178"}, {"id": "cache_test_creation_writer_test_read_creation_snapshot_returns_typed_struct", "label": "test_read_creation_snapshot_returns_typed_struct()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L219"}, {"id": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", "label": "test_read_creation_snapshot_supports_concurrent_readers()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L229"}, {"id": "cache_test_creation_writer_test_reading_2_0_file_raises_schema_major_mismatch", "label": "test_reading_2_0_file_raises_schema_major_mismatch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L247"}, {"id": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", "label": "test_reading_malformed_schema_version_raises_schema_major_mismatch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L260"}, {"id": "cache_test_creation_writer_test_reading_1_0_file_applies_documented_defaults", "label": "test_reading_1_0_file_applies_documented_defaults()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L273"}, {"id": "cache_test_creation_writer_test_reading_1_7_file_backfills_lims_project_subfields", "label": "test_reading_1_7_file_backfills_lims_project_subfields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L312"}, {"id": "cache_test_creation_writer_test_writer_bumps_schema_version_on_mutation_of_old_minor", "label": "test_writer_bumps_schema_version_on_mutation_of_old_minor()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L345"}, {"id": "cache_test_creation_writer_test_writing_always_emits_current_schema_version", "label": "test_writing_always_emits_current_schema_version()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L382"}, {"id": "cache_test_creation_writer_test_select_active_overrides_returns_empty_for_empty_input", "label": "test_select_active_overrides_returns_empty_for_empty_input()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L397"}, {"id": "cache_test_creation_writer_test_select_active_overrides_keeps_unrevoked_unexpired_entries", "label": "test_select_active_overrides_keeps_unrevoked_unexpired_entries()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L401"}, {"id": "cache_test_creation_writer_test_select_active_overrides_drops_revoked_entry", "label": "test_select_active_overrides_drops_revoked_entry()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L418"}, {"id": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", "label": "test_select_active_overrides_drops_expired_entry()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L443"}, {"id": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", "label": "test_select_active_overrides_uses_explicit_now_for_determinism()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L473"}, {"id": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", "label": "test_select_active_overrides_ignores_tombstone_for_unknown_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L493"}, {"id": "cache_test_creation_writer_test_select_active_overrides_treats_malformed_expires_at_as_expired", "label": "test_select_active_overrides_treats_malformed_expires_at_as_expired()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L519"}, {"id": "cache_test_creation_writer_test_round_trip_preserves_plugins_applied_with_isolation", "label": "test_round_trip_preserves_plugins_applied_with_isolation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L539"}, {"id": "cache_test_creation_writer_test_reading_file_with_missing_required_field_raises_validation_error", "label": "test_reading_file_with_missing_required_field_raises_validation_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L566"}, {"id": "cache_test_creation_writer_test_select_active_overrides_skips_tombstone_with_null_revokes_target", "label": "test_select_active_overrides_skips_tombstone_with_null_revokes_target()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L579"}, {"id": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", "label": "test_select_active_overrides_naive_expires_at_is_treated_as_utc()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L609"}, {"id": "cache_test_creation_writer_test_reading_file_missing_schema_version_raises_schema_major_mismatch", "label": "test_reading_file_missing_schema_version_raises_schema_major_mismatch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L629"}, {"id": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", "label": "test_update_creation_atomic_backfills_missing_override_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L640"}, {"id": "cache_test_creation_writer_rationale_1", "label": "Tests for the atomic ``creation.json`` writer in ``exlab_wizard.cache.creation_w", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L1"}, {"id": "cache_test_creation_writer_rationale_104", "label": "Even if the caller hands us an old version, the writer pins to current.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L104"}, {"id": "cache_test_creation_writer_rationale_136", "label": "Forward-compat: a v0.7 writer must not drop fields a v0.8 writer added.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L136"}, {"id": "cache_test_creation_writer_rationale_181", "label": "Two simultaneous mutators on the same path must serialize. This is a small-", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L181"}, {"id": "cache_test_creation_writer_rationale_232", "label": "Multiple LOCK_SH readers must not block each other.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L232"}, {"id": "cache_test_creation_writer_rationale_263", "label": "A non-MAJOR.MINOR string must surface as the same structured error rather th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L263"}, {"id": "cache_test_creation_writer_rationale_276", "label": "Spec \u00a711.3 history: a 1.0 file predates ``run_kind``, ``validation_overrides", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L276"}, {"id": "cache_test_creation_writer_rationale_315", "label": "1.7 -> 1.8 added ``lims_project.source`` and ``lims_project.cache_freshness_", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L315"}, {"id": "cache_test_creation_writer_rationale_348", "label": "Spec \u00a711.9.3 rule 3: on mutation, an older-minor file is rewritten at the wr", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L348"}, {"id": "cache_test_creation_writer_rationale_385", "label": "Spec \u00a711.9.3 rule 1: a writer at version R always writes R for new files.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L385"}, {"id": "cache_test_creation_writer_rationale_474", "label": "The matching algorithm uses ``now=`` for deterministic tests; the same fixtu", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L474"}, {"id": "cache_test_creation_writer_rationale_494", "label": "Spec \u00a711.3: orphan tombstones are logged WARN but have no effect.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L494"}, {"id": "cache_test_creation_writer_rationale_520", "label": "Fail-safe: a malformed ``expires_at`` re-engages the gate.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L520"}, {"id": "cache_test_creation_writer_rationale_580", "label": "A tombstone with no ``revokes`` key is silently skipped (no-op). Spec \u00a711.3", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L580"}, {"id": "cache_test_creation_writer_rationale_610", "label": "``_is_future``'s naive-datetime branch attaches UTC and compares against ``n", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L610"}, {"id": "cache_test_creation_writer_rationale_632", "label": "A file without a ``schema_version`` field is treated as a major mismatch --", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L632"}, {"id": "cache_test_creation_writer_rationale_643", "label": "Pre-1.6 files may carry override entries without an ``id``. The migration he", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L643"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "exlab_wizard_cache_creation_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_writer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L74", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_creation_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L79", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_write_creation_emits_valid_current_version_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L89", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_write_creation_pins_schema_version_to_writer_default", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L101", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_update_creation_atomic_mutates_target_field", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L117", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L133", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_update_creation_atomic_appends_validation_override", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L152", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L178", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_read_creation_snapshot_returns_typed_struct", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L219", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L229", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_reading_2_0_file_raises_schema_major_mismatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L247", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L260", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_reading_1_0_file_applies_documented_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L273", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_reading_1_7_file_backfills_lims_project_subfields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L312", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_writer_bumps_schema_version_on_mutation_of_old_minor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L345", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_writing_always_emits_current_schema_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L382", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_select_active_overrides_returns_empty_for_empty_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L397", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_select_active_overrides_keeps_unrevoked_unexpired_entries", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L401", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_select_active_overrides_drops_revoked_entry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L418", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L443", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L473", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L493", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_select_active_overrides_treats_malformed_expires_at_as_expired", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L519", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_round_trip_preserves_plugins_applied_with_isolation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L539", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_reading_file_with_missing_required_field_raises_validation_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L566", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_select_active_overrides_skips_tombstone_with_null_revokes_target", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L579", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L609", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_reading_file_missing_schema_version_raises_schema_major_mismatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L629", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "target": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L640", "weight": 1.0}, {"source": "cache_test_creation_writer_test_write_creation_emits_valid_current_version_file", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L92", "weight": 1.0}, {"source": "cache_test_creation_writer_test_write_creation_pins_schema_version_to_writer_default", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L105", "weight": 1.0}, {"source": "cache_test_creation_writer_test_update_creation_atomic_mutates_target_field", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L120", "weight": 1.0}, {"source": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L137", "weight": 1.0}, {"source": "cache_test_creation_writer_test_update_creation_atomic_appends_validation_override", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L155", "weight": 1.0}, {"source": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L187", "weight": 1.0}, {"source": "cache_test_creation_writer_test_read_creation_snapshot_returns_typed_struct", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L222", "weight": 1.0}, {"source": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L233", "weight": 1.0}, {"source": "cache_test_creation_writer_test_reading_2_0_file_raises_schema_major_mismatch", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L250", "weight": 1.0}, {"source": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L265", "weight": 1.0}, {"source": "cache_test_creation_writer_test_writing_always_emits_current_schema_version", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L386", "weight": 1.0}, {"source": "cache_test_creation_writer_test_round_trip_preserves_plugins_applied_with_isolation", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L542", "weight": 1.0}, {"source": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", "target": "cache_test_creation_writer_build_minimal_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L645", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_cache_test_creation_writer_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L1", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_104", "target": "cache_test_creation_writer_test_write_creation_pins_schema_version_to_writer_default", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L104", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_136", "target": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L136", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_181", "target": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L181", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_232", "target": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L232", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_263", "target": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L263", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_276", "target": "cache_test_creation_writer_test_reading_1_0_file_applies_documented_defaults", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L276", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_315", "target": "cache_test_creation_writer_test_reading_1_7_file_backfills_lims_project_subfields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L315", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_348", "target": "cache_test_creation_writer_test_writer_bumps_schema_version_on_mutation_of_old_minor", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L348", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_385", "target": "cache_test_creation_writer_test_writing_always_emits_current_schema_version", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L385", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_474", "target": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L474", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_494", "target": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L494", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_520", "target": "cache_test_creation_writer_test_select_active_overrides_treats_malformed_expires_at_as_expired", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L520", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_580", "target": "cache_test_creation_writer_test_select_active_overrides_skips_tombstone_with_null_revokes_target", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L580", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_610", "target": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L610", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_632", "target": "cache_test_creation_writer_test_reading_file_missing_schema_version_raises_schema_major_mismatch", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L632", "weight": 1.0}, {"source": "cache_test_creation_writer_rationale_643", "target": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L643", "weight": 1.0}], "raw_calls": [{"caller_nid": "cache_test_creation_writer_build_minimal_payload", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L49"}, {"caller_nid": "cache_test_creation_writer_build_minimal_payload", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L55"}, {"caller_nid": "cache_test_creation_writer_build_minimal_payload", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L60"}, {"caller_nid": "cache_test_creation_writer_build_minimal_payload", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L67"}, {"caller_nid": "cache_test_creation_writer_build_minimal_payload", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L69"}, {"caller_nid": "cache_test_creation_writer_build_minimal_payload", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L70"}, {"caller_nid": "cache_test_creation_writer_writer", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L75"}, {"caller_nid": "cache_test_creation_writer_test_write_creation_emits_valid_current_version_file", "callee": "write_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L93"}, {"caller_nid": "cache_test_creation_writer_test_write_creation_emits_valid_current_version_file", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L94"}, {"caller_nid": "cache_test_creation_writer_test_write_creation_emits_valid_current_version_file", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L95"}, {"caller_nid": "cache_test_creation_writer_test_write_creation_emits_valid_current_version_file", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L95"}, {"caller_nid": "cache_test_creation_writer_test_write_creation_pins_schema_version_to_writer_default", "callee": "write_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L106"}, {"caller_nid": "cache_test_creation_writer_test_write_creation_pins_schema_version_to_writer_default", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L107"}, {"caller_nid": "cache_test_creation_writer_test_write_creation_pins_schema_version_to_writer_default", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L107"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_mutates_target_field", "callee": "write_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L120"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_mutates_target_field", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L126"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_mutates_target_field", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L128"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_mutates_target_field", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L128"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L137"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L137"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L139"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L139"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L145"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L146"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L146"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_appends_validation_override", "callee": "write_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L155"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_appends_validation_override", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L171"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_appends_validation_override", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L172"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_appends_validation_override", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L173"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_appends_validation_override", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L173"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "callee": "write_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L187"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "callee": "gather", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L203"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L204"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "callee": "make_mutator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L204"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L205"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "callee": "make_mutator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L205"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L206"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "callee": "make_mutator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L206"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L208"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L208"}, {"caller_nid": "cache_test_creation_writer_test_read_creation_snapshot_returns_typed_struct", "callee": "write_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L222"}, {"caller_nid": "cache_test_creation_writer_test_read_creation_snapshot_returns_typed_struct", "callee": "read_creation_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L223"}, {"caller_nid": "cache_test_creation_writer_test_read_creation_snapshot_returns_typed_struct", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L224"}, {"caller_nid": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", "callee": "write_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L233"}, {"caller_nid": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", "callee": "gather", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L234"}, {"caller_nid": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", "callee": "read_creation_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L235"}, {"caller_nid": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L235"}, {"caller_nid": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L237"}, {"caller_nid": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L237"}, {"caller_nid": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L238"}, {"caller_nid": "cache_test_creation_writer_test_reading_2_0_file_raises_schema_major_mismatch", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L250"}, {"caller_nid": "cache_test_creation_writer_test_reading_2_0_file_raises_schema_major_mismatch", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L250"}, {"caller_nid": "cache_test_creation_writer_test_reading_2_0_file_raises_schema_major_mismatch", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L252"}, {"caller_nid": "cache_test_creation_writer_test_reading_2_0_file_raises_schema_major_mismatch", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L252"}, {"caller_nid": "cache_test_creation_writer_test_reading_2_0_file_raises_schema_major_mismatch", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L253"}, {"caller_nid": "cache_test_creation_writer_test_reading_2_0_file_raises_schema_major_mismatch", "callee": "read_creation_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L254"}, {"caller_nid": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L265"}, {"caller_nid": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L265"}, {"caller_nid": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L267"}, {"caller_nid": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L267"}, {"caller_nid": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L268"}, {"caller_nid": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", "callee": "read_creation_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L269"}, {"caller_nid": "cache_test_creation_writer_test_reading_1_0_file_applies_documented_defaults", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L305"}, {"caller_nid": "cache_test_creation_writer_test_reading_1_0_file_applies_documented_defaults", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L305"}, {"caller_nid": "cache_test_creation_writer_test_reading_1_0_file_applies_documented_defaults", "callee": "read_creation_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L306"}, {"caller_nid": "cache_test_creation_writer_test_reading_1_7_file_backfills_lims_project_subfields", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L338"}, {"caller_nid": "cache_test_creation_writer_test_reading_1_7_file_backfills_lims_project_subfields", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L338"}, {"caller_nid": "cache_test_creation_writer_test_reading_1_7_file_backfills_lims_project_subfields", "callee": "read_creation_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L339"}, {"caller_nid": "cache_test_creation_writer_test_writer_bumps_schema_version_on_mutation_of_old_minor", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L370"}, {"caller_nid": "cache_test_creation_writer_test_writer_bumps_schema_version_on_mutation_of_old_minor", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L370"}, {"caller_nid": "cache_test_creation_writer_test_writer_bumps_schema_version_on_mutation_of_old_minor", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L376"}, {"caller_nid": "cache_test_creation_writer_test_writer_bumps_schema_version_on_mutation_of_old_minor", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L377"}, {"caller_nid": "cache_test_creation_writer_test_writer_bumps_schema_version_on_mutation_of_old_minor", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L377"}, {"caller_nid": "cache_test_creation_writer_test_writing_always_emits_current_schema_version", "callee": "write_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L387"}, {"caller_nid": "cache_test_creation_writer_test_writing_always_emits_current_schema_version", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L388"}, {"caller_nid": "cache_test_creation_writer_test_writing_always_emits_current_schema_version", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L388"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_returns_empty_for_empty_input", "callee": "select_active_overrides", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L398"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_keeps_unrevoked_unexpired_entries", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L403"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_keeps_unrevoked_unexpired_entries", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L404"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_keeps_unrevoked_unexpired_entries", "callee": "select_active_overrides", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L413"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_keeps_unrevoked_unexpired_entries", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L414"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_revoked_entry", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L420"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_revoked_entry", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L421"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_revoked_entry", "callee": "tombstone_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L429"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_revoked_entry", "callee": "TombstoneEntryStruct", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L430"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_revoked_entry", "callee": "select_active_overrides", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L439"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", "callee": "isoformat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L444"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L444"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L444"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", "callee": "isoformat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L445"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L445"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L445"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L447"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L448"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L457"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L458"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", "callee": "select_active_overrides", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L468"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L477"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L478"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L487"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L488"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", "callee": "select_active_overrides", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L489"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", "callee": "select_active_overrides", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L490"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", "callee": "tombstone_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L496"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", "callee": "TombstoneEntryStruct", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L497"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L505"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L506"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", "callee": "select_active_overrides", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L515"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_treats_malformed_expires_at_as_expired", "callee": "select_active_overrides", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L530"}, {"caller_nid": "cache_test_creation_writer_test_round_trip_preserves_plugins_applied_with_isolation", "callee": "PluginApplied", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L544"}, {"caller_nid": "cache_test_creation_writer_test_round_trip_preserves_plugins_applied_with_isolation", "callee": "PluginIsolation", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L549"}, {"caller_nid": "cache_test_creation_writer_test_round_trip_preserves_plugins_applied_with_isolation", "callee": "write_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L553"}, {"caller_nid": "cache_test_creation_writer_test_round_trip_preserves_plugins_applied_with_isolation", "callee": "read_creation_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L554"}, {"caller_nid": "cache_test_creation_writer_test_round_trip_preserves_plugins_applied_with_isolation", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L555"}, {"caller_nid": "cache_test_creation_writer_test_reading_file_with_missing_required_field_raises_validation_error", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L569"}, {"caller_nid": "cache_test_creation_writer_test_reading_file_with_missing_required_field_raises_validation_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L570"}, {"caller_nid": "cache_test_creation_writer_test_reading_file_with_missing_required_field_raises_validation_error", "callee": "read_creation_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L571"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_skips_tombstone_with_null_revokes_target", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L595"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_skips_tombstone_with_null_revokes_target", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L596"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_skips_tombstone_with_null_revokes_target", "callee": "select_active_overrides", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L605"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", "callee": "strftime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L613"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L613"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L613"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L614"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L615"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", "callee": "select_active_overrides", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L624"}, {"caller_nid": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L625"}, {"caller_nid": "cache_test_creation_writer_test_reading_file_missing_schema_version_raises_schema_major_mismatch", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L634"}, {"caller_nid": "cache_test_creation_writer_test_reading_file_missing_schema_version_raises_schema_major_mismatch", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L635"}, {"caller_nid": "cache_test_creation_writer_test_reading_file_missing_schema_version_raises_schema_major_mismatch", "callee": "read_creation_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L636"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L645"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L645"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L656"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L656"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", "callee": "update_creation_atomic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L661"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L662"}, {"caller_nid": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py", "source_location": "L665"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/89c23ebf2066d3b89e028aed00590cfaba595663f5ef45049da2e955ff31b664.json b/graphify-out/cache/ast/89c23ebf2066d3b89e028aed00590cfaba595663f5ef45049da2e955ff31b664.json new file mode 100644 index 0000000..5cc3366 --- /dev/null +++ b/graphify-out/cache/ast/89c23ebf2066d3b89e028aed00590cfaba595663f5ef45049da2e955ff31b664.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/8b3e73fc50ad25edaf94a650da5c5652694a2dbaaedbdd74fb1ae44ff9ebc550.json b/graphify-out/cache/ast/8b3e73fc50ad25edaf94a650da5c5652694a2dbaaedbdd74fb1ae44ff9ebc550.json new file mode 100644 index 0000000..298ab44 --- /dev/null +++ b/graphify-out/cache/ast/8b3e73fc50ad25edaf94a650da5c5652694a2dbaaedbdd74fb1ae44ff9ebc550.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_plugins_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/__init__.py", "source_location": "L1"}, {"id": "plugins_init_rationale_1", "label": "Plugin system unit tests.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/__init__.py", "source_location": "L1"}], "edges": [{"source": "plugins_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_plugins_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/8bada28d4139a130ff21a48cd8f1be67ea7f52541ee57bbffd60f422a97cc9af.json b/graphify-out/cache/ast/8bada28d4139a130ff21a48cd8f1be67ea7f52541ee57bbffd60f422a97cc9af.json new file mode 100644 index 0000000..e44df6f --- /dev/null +++ b/graphify-out/cache/ast/8bada28d4139a130ff21a48cd8f1be67ea7f52541ee57bbffd60f422a97cc9af.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_app_py", "label": "app.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/app.py", "source_location": "L1"}, {"id": "constants_app_rationale_1", "label": "App-level identifiers used as path / keyring / branding fragments. Single sourc", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/app.py", "source_location": "L1"}], "edges": [{"source": "constants_app_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_app_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/app.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/8c1c7500bb5fc6317e7e920c59d4a15772266a6fb4e13186f69ad1f9e5d148ed.json b/graphify-out/cache/ast/8c1c7500bb5fc6317e7e920c59d4a15772266a6fb4e13186f69ad1f9e5d148ed.json new file mode 100644 index 0000000..7857e43 --- /dev/null +++ b/graphify-out/cache/ast/8c1c7500bb5fc6317e7e920c59d4a15772266a6fb4e13186f69ad1f9e5d148ed.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "label": "mount.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1"}, {"id": "ui_mount_spawn_background", "label": "_spawn_background()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L58"}, {"id": "ui_mount_mount_ui", "label": "mount_ui()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L66"}, {"id": "ui_mount_register_pages", "label": "_register_pages()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L89"}, {"id": "ui_mount_lims_credential_handlers", "label": "_lims_credential_handlers()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L430"}, {"id": "ui_mount_nas_credential_handlers", "label": "_nas_credential_handlers()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L486"}, {"id": "ui_mount_nas_test_connection", "label": "_nas_test_connection()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L543"}, {"id": "ui_mount_persist_config", "label": "_persist_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L593"}, {"id": "ui_mount_ensure_staging_root", "label": "_ensure_staging_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L625"}, {"id": "ui_mount_apply_live_config", "label": "_apply_live_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L651"}, {"id": "ui_mount_nas_credential_missing", "label": "_nas_credential_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L668"}, {"id": "ui_mount_is_setup_ready", "label": "_is_setup_ready()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L689"}, {"id": "ui_mount_apply_autostart", "label": "_apply_autostart()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L721"}, {"id": "ui_mount_build_main_state", "label": "_build_main_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L740"}, {"id": "ui_mount_panel_sessions", "label": "_panel_sessions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L772"}, {"id": "ui_mount_operation_counts", "label": "_operation_counts()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L789"}, {"id": "ui_mount_setup_next_action", "label": "_setup_next_action()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L806"}, {"id": "ui_mount_build_main_query", "label": "_build_main_query()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L829"}, {"id": "ui_mount_classify_node", "label": "_classify_node()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L850"}, {"id": "ui_mount_build_metadata_payload", "label": "_build_metadata_payload()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L890"}, {"id": "ui_mount_metadata_for_owned_equipment", "label": "_metadata_for_owned_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L921"}, {"id": "ui_mount_metadata_for_relay_equipment", "label": "_metadata_for_relay_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L936"}, {"id": "ui_mount_metadata_for_project", "label": "_metadata_for_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L950"}, {"id": "ui_mount_count_dir_children", "label": "_count_dir_children()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L984"}, {"id": "ui_mount_metadata_for_run", "label": "_metadata_for_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L999"}, {"id": "ui_mount_drive_folder_feed", "label": "_drive_folder_feed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1033"}, {"id": "ui_mount_fetch_folder_async", "label": "_fetch_folder_async()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1094"}, {"id": "ui_mount_run_staging_action", "label": "_run_staging_action()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1118"}, {"id": "ui_mount_bulk_clear_verified", "label": "_bulk_clear_verified()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1176"}, {"id": "ui_mount_file_context_action", "label": "_file_context_action()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1214"}, {"id": "ui_mount_toggle_keep_local", "label": "_toggle_keep_local()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1254"}, {"id": "ui_mount_open_in_os", "label": "_open_in_os()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1303"}, {"id": "ui_mount_build_operation_rows", "label": "_build_operation_rows()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1331"}, {"id": "ui_mount_open_operations_modal", "label": "_open_operations_modal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1343"}, {"id": "ui_mount_open_operation_details", "label": "_open_operation_details()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1367"}, {"id": "ui_mount_resume_operation", "label": "_resume_operation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1401"}, {"id": "ui_mount_open_input_required_dialog", "label": "_open_input_required_dialog()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1425"}, {"id": "ui_mount_cancel_operation", "label": "_cancel_operation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1471"}, {"id": "ui_mount_cancel_session", "label": "_cancel_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1480"}, {"id": "ui_mount_open_log_dialog", "label": "_open_log_dialog()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1521"}, {"id": "ui_mount_missing_setup_sections", "label": "_missing_setup_sections()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1569"}, {"id": "ui_mount_templates_dir", "label": "_templates_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1602"}, {"id": "ui_mount_template_names", "label": "_template_names()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1610"}, {"id": "ui_mount_template_questions_map", "label": "_template_questions_map()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1627"}, {"id": "ui_mount_lims_catalogue_projects", "label": "_lims_catalogue_projects()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1660"}, {"id": "ui_mount_lims_projects", "label": "_lims_projects()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1694"}, {"id": "ui_mount_equipment_ids", "label": "_equipment_ids()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1724"}, {"id": "ui_mount_await_session", "label": "_await_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1732"}, {"id": "ui_mount_consume_session_progress", "label": "_consume_session_progress()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1749"}, {"id": "ui_mount_close_dialog", "label": "_close_dialog()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1794"}, {"id": "ui_mount_submit_project", "label": "_submit_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1802"}, {"id": "ui_mount_submit_run", "label": "_submit_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1835"}, {"id": "ui_mount_run_creation", "label": "_run_creation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1868"}, {"id": "ui_mount_render_run_wizard", "label": "_render_run_wizard()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1905"}, {"id": "ui_mount_safe_audit", "label": "_safe_audit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1919"}, {"id": "ui_mount_build_staging_state", "label": "_build_staging_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1931"}, {"id": "ui_mount_show_toast", "label": "_show_toast()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1950"}, {"id": "ui_mount_render_unavailable", "label": "_render_unavailable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1963"}, {"id": "ui_mount_rationale_1", "label": "NiceGUI mount helper. Backend Spec \u00a74.3, \u00a715.3.2. ``mount_ui`` is the single en", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1"}, {"id": "ui_mount_rationale_59", "label": "Schedule ``coro`` and keep a strong reference until it finishes.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L59"}, {"id": "ui_mount_rationale_67", "label": "Register every wizard page on ``app`` and mount NiceGUI at ``/``. ``storage", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L67"}, {"id": "ui_mount_rationale_90", "label": "Define every ``@ui.page(...)`` handler. Called from :func:`mount_ui`.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L90"}, {"id": "ui_mount_rationale_433", "label": "Build the LIMS-password Save / Clear handlers for the settings dialog. Cred", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L433"}, {"id": "ui_mount_rationale_489", "label": "Build the NAS-password Save / Clear handlers for one equipment. Rclone-only", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L489"}, {"id": "ui_mount_rationale_544", "label": "Run the rclone equipment probe for ``equipment_id`` and adapt it. Resolves", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L544"}, {"id": "ui_mount_rationale_594", "label": "Write ``updated`` via ``deps.save_config`` and hot-reload components. Retur", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L594"}, {"id": "ui_mount_rationale_626", "label": "Create the staging directory when the operator saved a non-empty path. ``st", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L626"}, {"id": "ui_mount_rationale_652", "label": "Push ``updated`` into the running components (no tray relaunch). Wraps :fun", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L652"}, {"id": "ui_mount_rationale_669", "label": "True when a password-requiring nas-mode equipment lacks its keyring entry.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L669"}, {"id": "ui_mount_rationale_690", "label": "Return True when the \u00a74.9 setup state is ``READY``. Delegates to :func:`api", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L690"}, {"id": "ui_mount_rationale_722", "label": "Register / unregister platform autostart; return the real post-op state. Re", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L722"}, {"id": "ui_mount_rationale_773", "label": "Return the (session_id, session) pairs the Operations panel shows. The \u00a79.5", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L773"}, {"id": "ui_mount_rationale_790", "label": "Return ``(panel_count, input_required, active)`` operation counts. ``panel_", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L790"}, {"id": "ui_mount_rationale_807", "label": "Return the \u00a74.9.3 next-action string for the banner subline. Unlike :func:`", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L807"}, {"id": "ui_mount_rationale_830", "label": "Compose the ``?selected=...&right_pane=...`` query string for /main. Omits", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L830"}, {"id": "ui_mount_rationale_851", "label": "Map a selected node id to ``(kind, is_received)``. Mirrors the shape classi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L851"}, {"id": "ui_mount_rationale_895", "label": "Build the metadata-pane payload for the selected node, by kind. Returns ``{", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L895"}, {"id": "ui_mount_rationale_922", "label": "Project equipment-config fields into the owned-equipment payload.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L922"}, {"id": "ui_mount_rationale_937", "label": "Return the relay-equipment payload (label, source_host).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L937"}, {"id": "ui_mount_rationale_951", "label": "Derive a project payload from the on-disk project directory. ``node_id`` is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L951"}, {"id": "ui_mount_rationale_985", "label": "Count immediate child directories of ``parent`` whose names start with ``pre", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L985"}, {"id": "ui_mount_rationale_1000", "label": "Decode the run's creation.json into the metadata-pane payload. Returns ``{}", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1000"}, {"id": "ui_mount_rationale_1034", "label": "Mount / rebind the per-tab FolderFeed and return current entries. Uses ``ap", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1034"}, {"id": "ui_mount_rationale_1095", "label": "FolderFeed fetch hook. Skips when the tree just walked. Runs the synchronou", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1095"}, {"id": "ui_mount_rationale_1119", "label": "Dispatch a per-run context action to its backend surface. Mirrors :func:`ap", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1119"}, {"id": "ui_mount_rationale_1177", "label": "Bulk-clear every staged run whose sync job is verified. Wired from the file", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1177"}, {"id": "ui_mount_rationale_1222", "label": "Handle ``Open in OS`` / ``Copy path`` / ``Keep local`` file actions.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1222"}, {"id": "ui_mount_rationale_1261", "label": "Flip a file's ``keep_local`` flag via the orchestrator's writer. Operator-f", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1261"}, {"id": "ui_mount_rationale_1304", "label": "Launch the host OS's default opener for ``path``. Returns False on platform", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1304"}, {"id": "ui_mount_rationale_1332", "label": "Build the Operations-panel rows from the live session store (T3). Uses the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1332"}, {"id": "ui_mount_rationale_1344", "label": "Open the in-flight Operations panel (Frontend \u00a79.5). Builds a fresh snapsho", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1344"}, {"id": "ui_mount_rationale_1368", "label": "Show a lightweight details/\"log\" dialog for one in-flight operation. The \u00a79", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1368"}, {"id": "ui_mount_rationale_1402", "label": "Resume a suspended session by re-opening its \u00a79.1 input dialog (T5). Reads", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1402"}, {"id": "ui_mount_rationale_1434", "label": "Open the \u00a79.1 escalation dialog; Submit resumes, Cancel confirms (T5). Subm", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1434"}, {"id": "ui_mount_rationale_1472", "label": "Resolve the controller off ``deps`` and open the \u00a79.4 cancel dialog.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1472"}, {"id": "ui_mount_rationale_1481", "label": "Cancel an in-flight session via the \u00a79.4 Discard / Keep dialog (T4). The op", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1481"}, {"id": "ui_mount_rationale_1522", "label": "Open a NiceGUI dialog showing the run's sync-queue job state. The operator-", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1522"}, {"id": "ui_mount_rationale_1570", "label": "Return the settings sections the operator still needs to fill in. Mirrors a", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1570"}, {"id": "ui_mount_rationale_1603", "label": "Return the configured templates directory, or ``None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1603"}, {"id": "ui_mount_rationale_1611", "label": "List template directory names of ``template_type`` under templates_dir.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1611"}, {"id": "ui_mount_rationale_1628", "label": "Map each ``template_type`` template name to its parsed copier questions. Re", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1628"}, {"id": "ui_mount_rationale_1661", "label": "Read the offline-catalogue projects (disconnected-workstation source). Read", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1661"}, {"id": "ui_mount_rationale_1695", "label": "Return the LIMS projects backing the project wizard's picker. Tries the liv", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1695"}, {"id": "ui_mount_rationale_1725", "label": "Return the configured equipment IDs.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1725"}, {"id": "ui_mount_rationale_1733", "label": "Await a controller session's pipeline task and return the final handle. ``c", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1733"}, {"id": "ui_mount_rationale_1752", "label": "Fold the controller's WS frames into the wizard's live phase bar (T2) and su", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1752"}, {"id": "ui_mount_rationale_1795", "label": "Best-effort close of a NiceGUI dialog (no-op when ``None`` / test mode).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1795"}, {"id": "ui_mount_rationale_1803", "label": "Build a ProjectCreateRequest from the wizard state and run it.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1803"}, {"id": "ui_mount_rationale_1836", "label": "Build a RunCreateRequest from the wizard state and run it.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1836"}, {"id": "ui_mount_rationale_1877", "label": "Drive a create_* call to completion and toast the outcome. When ``wizard_st", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1877"}, {"id": "ui_mount_rationale_1920", "label": "Run the validator audit, swallowing failures to a WARN log.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1920"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "uuid", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "exlab_wizard_orchestrator_staging_clear", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "exlab_wizard_orchestrator_staging_query", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_spawn_background", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_mount_ui", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L66", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_register_pages", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L89", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_lims_credential_handlers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L430", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_nas_credential_handlers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L486", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_nas_test_connection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L543", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_persist_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L593", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_ensure_staging_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L625", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_apply_live_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L651", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_nas_credential_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L668", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_is_setup_ready", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L689", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_apply_autostart", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L721", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_build_main_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L740", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_panel_sessions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L772", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_operation_counts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L789", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_setup_next_action", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L806", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_build_main_query", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L829", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_classify_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L850", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_build_metadata_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L890", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_metadata_for_owned_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L921", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_metadata_for_relay_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L936", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_metadata_for_project", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L950", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_count_dir_children", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L984", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_metadata_for_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L999", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_drive_folder_feed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1033", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_fetch_folder_async", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1094", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_run_staging_action", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1118", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_bulk_clear_verified", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1176", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_file_context_action", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1214", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_toggle_keep_local", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1254", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_open_in_os", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1303", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_build_operation_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1331", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_open_operations_modal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1343", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_open_operation_details", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1367", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_resume_operation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1401", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_open_input_required_dialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1425", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_cancel_operation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1471", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_cancel_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1480", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_open_log_dialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1521", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_missing_setup_sections", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1569", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_templates_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1602", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_template_names", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1610", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_template_questions_map", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1627", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_lims_catalogue_projects", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1660", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_lims_projects", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1694", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_equipment_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1724", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_await_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1732", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_consume_session_progress", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1749", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_close_dialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1794", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_submit_project", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1802", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_submit_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1835", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_run_creation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1868", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_render_run_wizard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1905", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_safe_audit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1919", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_build_staging_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1931", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_show_toast", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1950", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "target": "ui_mount_render_unavailable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1963", "weight": 1.0}, {"source": "ui_mount_mount_ui", "target": "ui_mount_register_pages", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L80", "weight": 1.0}, {"source": "ui_mount_persist_config", "target": "ui_mount_show_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L607", "weight": 1.0}, {"source": "ui_mount_persist_config", "target": "ui_mount_ensure_staging_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L619", "weight": 1.0}, {"source": "ui_mount_persist_config", "target": "ui_mount_apply_live_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L621", "weight": 1.0}, {"source": "ui_mount_ensure_staging_root", "target": "ui_mount_show_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L648", "weight": 1.0}, {"source": "ui_mount_build_main_state", "target": "ui_mount_operation_counts", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L754", "weight": 1.0}, {"source": "ui_mount_build_main_state", "target": "ui_mount_is_setup_ready", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L756", "weight": 1.0}, {"source": "ui_mount_build_main_state", "target": "ui_mount_setup_next_action", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L757", "weight": 1.0}, {"source": "ui_mount_operation_counts", "target": "ui_mount_panel_sessions", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L800", "weight": 1.0}, {"source": "ui_mount_build_metadata_payload", "target": "ui_mount_metadata_for_owned_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L908", "weight": 1.0}, {"source": "ui_mount_build_metadata_payload", "target": "ui_mount_metadata_for_relay_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L910", "weight": 1.0}, {"source": "ui_mount_build_metadata_payload", "target": "ui_mount_metadata_for_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L912", "weight": 1.0}, {"source": "ui_mount_build_metadata_payload", "target": "ui_mount_metadata_for_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L914", "weight": 1.0}, {"source": "ui_mount_metadata_for_project", "target": "ui_mount_count_dir_children", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L966", "weight": 1.0}, {"source": "ui_mount_drive_folder_feed", "target": "ui_mount_fetch_folder_async", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1064", "weight": 1.0}, {"source": "ui_mount_drive_folder_feed", "target": "ui_mount_spawn_background", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1072", "weight": 1.0}, {"source": "ui_mount_run_staging_action", "target": "ui_mount_show_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1134", "weight": 1.0}, {"source": "ui_mount_run_staging_action", "target": "ui_mount_spawn_background", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1152", "weight": 1.0}, {"source": "ui_mount_run_staging_action", "target": "ui_mount_open_log_dialog", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1171", "weight": 1.0}, {"source": "ui_mount_bulk_clear_verified", "target": "ui_mount_show_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1187", "weight": 1.0}, {"source": "ui_mount_bulk_clear_verified", "target": "ui_mount_spawn_background", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1211", "weight": 1.0}, {"source": "ui_mount_file_context_action", "target": "ui_mount_show_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1231", "weight": 1.0}, {"source": "ui_mount_file_context_action", "target": "ui_mount_open_in_os", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1234", "weight": 1.0}, {"source": "ui_mount_file_context_action", "target": "ui_mount_toggle_keep_local", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1249", "weight": 1.0}, {"source": "ui_mount_toggle_keep_local", "target": "ui_mount_show_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1275", "weight": 1.0}, {"source": "ui_mount_toggle_keep_local", "target": "ui_mount_spawn_background", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1300", "weight": 1.0}, {"source": "ui_mount_build_operation_rows", "target": "ui_mount_panel_sessions", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1340", "weight": 1.0}, {"source": "ui_mount_open_operations_modal", "target": "ui_mount_show_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1353", "weight": 1.0}, {"source": "ui_mount_open_operations_modal", "target": "ui_mount_build_operation_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1355", "weight": 1.0}, {"source": "ui_mount_open_operations_modal", "target": "ui_mount_resume_operation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1358", "weight": 1.0}, {"source": "ui_mount_open_operations_modal", "target": "ui_mount_cancel_operation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1359", "weight": 1.0}, {"source": "ui_mount_open_operations_modal", "target": "ui_mount_open_operation_details", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1360", "weight": 1.0}, {"source": "ui_mount_open_operation_details", "target": "ui_mount_show_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1378", "weight": 1.0}, {"source": "ui_mount_resume_operation", "target": "ui_mount_show_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1413", "weight": 1.0}, {"source": "ui_mount_resume_operation", "target": "ui_mount_open_input_required_dialog", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1415", "weight": 1.0}, {"source": "ui_mount_cancel_operation", "target": "ui_mount_show_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1475", "weight": 1.0}, {"source": "ui_mount_cancel_operation", "target": "ui_mount_cancel_session", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1477", "weight": 1.0}, {"source": "ui_mount_open_log_dialog", "target": "ui_mount_spawn_background", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1566", "weight": 1.0}, {"source": "ui_mount_missing_setup_sections", "target": "ui_mount_nas_credential_missing", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1593", "weight": 1.0}, {"source": "ui_mount_template_names", "target": "ui_mount_templates_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1612", "weight": 1.0}, {"source": "ui_mount_template_questions_map", "target": "ui_mount_templates_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1636", "weight": 1.0}, {"source": "ui_mount_lims_projects", "target": "ui_mount_lims_catalogue_projects", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1721", "weight": 1.0}, {"source": "ui_mount_consume_session_progress", "target": "ui_mount_open_input_required_dialog", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1779", "weight": 1.0}, {"source": "ui_mount_consume_session_progress", "target": "ui_mount_close_dialog", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1788", "weight": 1.0}, {"source": "ui_mount_submit_project", "target": "ui_mount_show_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1806", "weight": 1.0}, {"source": "ui_mount_submit_project", "target": "ui_mount_templates_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1808", "weight": 1.0}, {"source": "ui_mount_submit_project", "target": "ui_mount_run_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1830", "weight": 1.0}, {"source": "ui_mount_submit_run", "target": "ui_mount_show_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1839", "weight": 1.0}, {"source": "ui_mount_submit_run", "target": "ui_mount_templates_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1841", "weight": 1.0}, {"source": "ui_mount_submit_run", "target": "ui_mount_run_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1863", "weight": 1.0}, {"source": "ui_mount_run_creation", "target": "ui_mount_consume_session_progress", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1888", "weight": 1.0}, {"source": "ui_mount_run_creation", "target": "ui_mount_await_session", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1889", "weight": 1.0}, {"source": "ui_mount_run_creation", "target": "ui_mount_show_toast", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1892", "weight": 1.0}, {"source": "ui_mount_render_run_wizard", "target": "ui_mount_template_names", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1911", "weight": 1.0}, {"source": "ui_mount_render_run_wizard", "target": "ui_mount_equipment_ids", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1912", "weight": 1.0}, {"source": "ui_mount_render_run_wizard", "target": "ui_mount_template_questions_map", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1913", "weight": 1.0}, {"source": "ui_mount_render_run_wizard", "target": "ui_mount_submit_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1914", "weight": 1.0}, {"source": "ui_mount_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_mount_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_mount_rationale_59", "target": "ui_mount_spawn_background", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L59", "weight": 1.0}, {"source": "ui_mount_rationale_67", "target": "ui_mount_mount_ui", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L67", "weight": 1.0}, {"source": "ui_mount_rationale_90", "target": "ui_mount_register_pages", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L90", "weight": 1.0}, {"source": "ui_mount_rationale_433", "target": "ui_mount_lims_credential_handlers", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L433", "weight": 1.0}, {"source": "ui_mount_rationale_489", "target": "ui_mount_nas_credential_handlers", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L489", "weight": 1.0}, {"source": "ui_mount_rationale_544", "target": "ui_mount_nas_test_connection", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L544", "weight": 1.0}, {"source": "ui_mount_rationale_594", "target": "ui_mount_persist_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L594", "weight": 1.0}, {"source": "ui_mount_rationale_626", "target": "ui_mount_ensure_staging_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L626", "weight": 1.0}, {"source": "ui_mount_rationale_652", "target": "ui_mount_apply_live_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L652", "weight": 1.0}, {"source": "ui_mount_rationale_669", "target": "ui_mount_nas_credential_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L669", "weight": 1.0}, {"source": "ui_mount_rationale_690", "target": "ui_mount_is_setup_ready", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L690", "weight": 1.0}, {"source": "ui_mount_rationale_722", "target": "ui_mount_apply_autostart", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L722", "weight": 1.0}, {"source": "ui_mount_rationale_773", "target": "ui_mount_panel_sessions", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L773", "weight": 1.0}, {"source": "ui_mount_rationale_790", "target": "ui_mount_operation_counts", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L790", "weight": 1.0}, {"source": "ui_mount_rationale_807", "target": "ui_mount_setup_next_action", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L807", "weight": 1.0}, {"source": "ui_mount_rationale_830", "target": "ui_mount_build_main_query", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L830", "weight": 1.0}, {"source": "ui_mount_rationale_851", "target": "ui_mount_classify_node", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L851", "weight": 1.0}, {"source": "ui_mount_rationale_895", "target": "ui_mount_build_metadata_payload", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L895", "weight": 1.0}, {"source": "ui_mount_rationale_922", "target": "ui_mount_metadata_for_owned_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L922", "weight": 1.0}, {"source": "ui_mount_rationale_937", "target": "ui_mount_metadata_for_relay_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L937", "weight": 1.0}, {"source": "ui_mount_rationale_951", "target": "ui_mount_metadata_for_project", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L951", "weight": 1.0}, {"source": "ui_mount_rationale_985", "target": "ui_mount_count_dir_children", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L985", "weight": 1.0}, {"source": "ui_mount_rationale_1000", "target": "ui_mount_metadata_for_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1000", "weight": 1.0}, {"source": "ui_mount_rationale_1034", "target": "ui_mount_drive_folder_feed", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1034", "weight": 1.0}, {"source": "ui_mount_rationale_1095", "target": "ui_mount_fetch_folder_async", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1095", "weight": 1.0}, {"source": "ui_mount_rationale_1119", "target": "ui_mount_run_staging_action", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1119", "weight": 1.0}, {"source": "ui_mount_rationale_1177", "target": "ui_mount_bulk_clear_verified", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1177", "weight": 1.0}, {"source": "ui_mount_rationale_1222", "target": "ui_mount_file_context_action", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1222", "weight": 1.0}, {"source": "ui_mount_rationale_1261", "target": "ui_mount_toggle_keep_local", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1261", "weight": 1.0}, {"source": "ui_mount_rationale_1304", "target": "ui_mount_open_in_os", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1304", "weight": 1.0}, {"source": "ui_mount_rationale_1332", "target": "ui_mount_build_operation_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1332", "weight": 1.0}, {"source": "ui_mount_rationale_1344", "target": "ui_mount_open_operations_modal", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1344", "weight": 1.0}, {"source": "ui_mount_rationale_1368", "target": "ui_mount_open_operation_details", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1368", "weight": 1.0}, {"source": "ui_mount_rationale_1402", "target": "ui_mount_resume_operation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1402", "weight": 1.0}, {"source": "ui_mount_rationale_1434", "target": "ui_mount_open_input_required_dialog", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1434", "weight": 1.0}, {"source": "ui_mount_rationale_1472", "target": "ui_mount_cancel_operation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1472", "weight": 1.0}, {"source": "ui_mount_rationale_1481", "target": "ui_mount_cancel_session", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1481", "weight": 1.0}, {"source": "ui_mount_rationale_1522", "target": "ui_mount_open_log_dialog", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1522", "weight": 1.0}, {"source": "ui_mount_rationale_1570", "target": "ui_mount_missing_setup_sections", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1570", "weight": 1.0}, {"source": "ui_mount_rationale_1603", "target": "ui_mount_templates_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1603", "weight": 1.0}, {"source": "ui_mount_rationale_1611", "target": "ui_mount_template_names", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1611", "weight": 1.0}, {"source": "ui_mount_rationale_1628", "target": "ui_mount_template_questions_map", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1628", "weight": 1.0}, {"source": "ui_mount_rationale_1661", "target": "ui_mount_lims_catalogue_projects", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1661", "weight": 1.0}, {"source": "ui_mount_rationale_1695", "target": "ui_mount_lims_projects", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1695", "weight": 1.0}, {"source": "ui_mount_rationale_1725", "target": "ui_mount_equipment_ids", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1725", "weight": 1.0}, {"source": "ui_mount_rationale_1733", "target": "ui_mount_await_session", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1733", "weight": 1.0}, {"source": "ui_mount_rationale_1752", "target": "ui_mount_consume_session_progress", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1752", "weight": 1.0}, {"source": "ui_mount_rationale_1795", "target": "ui_mount_close_dialog", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1795", "weight": 1.0}, {"source": "ui_mount_rationale_1803", "target": "ui_mount_submit_project", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1803", "weight": 1.0}, {"source": "ui_mount_rationale_1836", "target": "ui_mount_submit_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1836", "weight": 1.0}, {"source": "ui_mount_rationale_1877", "target": "ui_mount_run_creation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1877", "weight": 1.0}, {"source": "ui_mount_rationale_1920", "target": "ui_mount_safe_audit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1920", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_mount_spawn_background", "callee": "create_task", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L60"}, {"caller_nid": "ui_mount_spawn_background", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L61"}, {"caller_nid": "ui_mount_spawn_background", "callee": "add_done_callback", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L62"}, {"caller_nid": "ui_mount_mount_ui", "callee": "register_static_assets", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L79"}, {"caller_nid": "ui_mount_mount_ui", "callee": "run_with", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L81"}, {"caller_nid": "ui_mount_register_pages", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L120"}, {"caller_nid": "ui_mount_register_pages", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L128"}, {"caller_nid": "ui_mount_register_pages", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L143"}, {"caller_nid": "ui_mount_register_pages", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L212"}, {"caller_nid": "ui_mount_register_pages", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L224"}, {"caller_nid": "ui_mount_register_pages", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L229"}, {"caller_nid": "ui_mount_register_pages", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L234"}, {"caller_nid": "ui_mount_register_pages", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L287"}, {"caller_nid": "ui_mount_register_pages", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L321"}, {"caller_nid": "ui_mount_register_pages", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L402"}, {"caller_nid": "ui_mount_register_pages", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L411"}, {"caller_nid": "ui_mount_lims_credential_handlers", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L442"}, {"caller_nid": "ui_mount_nas_credential_handlers", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L500"}, {"caller_nid": "ui_mount_nas_credential_handlers", "callee": "keyring_nas_username", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L501"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L555"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L556"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L559"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "TestConnectionResult", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L561"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "probe", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L568"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "iscoroutine", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L569"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "isfuture", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L569"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "TestConnectionResult", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L572"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L573"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L573"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L575"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L575"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L576"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L576"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L577"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L578"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L583"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "TestConnectionResult", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L585"}, {"caller_nid": "ui_mount_nas_test_connection", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L589"}, {"caller_nid": "ui_mount_persist_config", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L605"}, {"caller_nid": "ui_mount_persist_config", "callee": "saver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L610"}, {"caller_nid": "ui_mount_persist_config", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L611"}, {"caller_nid": "ui_mount_persist_config", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L614"}, {"caller_nid": "ui_mount_persist_config", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L616"}, {"caller_nid": "ui_mount_ensure_staging_root", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L638"}, {"caller_nid": "ui_mount_ensure_staging_root", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L639"}, {"caller_nid": "ui_mount_ensure_staging_root", "callee": "ensure_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L645"}, {"caller_nid": "ui_mount_ensure_staging_root", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L645"}, {"caller_nid": "ui_mount_ensure_staging_root", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L647"}, {"caller_nid": "ui_mount_apply_live_config", "callee": "apply_live_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L662"}, {"caller_nid": "ui_mount_apply_live_config", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L664"}, {"caller_nid": "ui_mount_nas_credential_missing", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L681"}, {"caller_nid": "ui_mount_nas_credential_missing", "callee": "transport_requires_keyring_password", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L683"}, {"caller_nid": "ui_mount_nas_credential_missing", "callee": "nas_password_present", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L684"}, {"caller_nid": "ui_mount_nas_credential_missing", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L685"}, {"caller_nid": "ui_mount_is_setup_ready", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L710"}, {"caller_nid": "ui_mount_is_setup_ready", "callee": "compute_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L715"}, {"caller_nid": "ui_mount_is_setup_ready", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L717"}, {"caller_nid": "ui_mount_apply_autostart", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L730"}, {"caller_nid": "ui_mount_apply_autostart", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L734"}, {"caller_nid": "ui_mount_apply_autostart", "callee": "toggle", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L734"}, {"caller_nid": "ui_mount_apply_autostart", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L736"}, {"caller_nid": "ui_mount_build_main_state", "callee": "MainPageState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L755"}, {"caller_nid": "ui_mount_build_main_state", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L767"}, {"caller_nid": "ui_mount_build_main_state", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L767"}, {"caller_nid": "ui_mount_build_main_state", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L768"}, {"caller_nid": "ui_mount_build_main_state", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L768"}, {"caller_nid": "ui_mount_panel_sessions", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L780"}, {"caller_nid": "ui_mount_panel_sessions", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L781"}, {"caller_nid": "ui_mount_panel_sessions", "callee": "iter_sorted", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L786"}, {"caller_nid": "ui_mount_panel_sessions", "callee": "on_operations_panel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L786"}, {"caller_nid": "ui_mount_operation_counts", "callee": "sum", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L801"}, {"caller_nid": "ui_mount_operation_counts", "callee": "sum", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L802"}, {"caller_nid": "ui_mount_operation_counts", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L802"}, {"caller_nid": "ui_mount_operation_counts", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L803"}, {"caller_nid": "ui_mount_setup_next_action", "callee": "setup_state_next_action", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L822"}, {"caller_nid": "ui_mount_setup_next_action", "callee": "compute_setup_state", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L822"}, {"caller_nid": "ui_mount_setup_next_action", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L825"}, {"caller_nid": "ui_mount_build_main_query", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L844"}, {"caller_nid": "ui_mount_build_main_query", "callee": "quote", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L844"}, {"caller_nid": "ui_mount_build_main_query", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L846"}, {"caller_nid": "ui_mount_build_main_query", "callee": "quote", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L846"}, {"caller_nid": "ui_mount_build_main_query", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L847"}, {"caller_nid": "ui_mount_classify_node", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L866"}, {"caller_nid": "ui_mount_classify_node", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L867"}, {"caller_nid": "ui_mount_classify_node", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L869"}, {"caller_nid": "ui_mount_classify_node", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L872"}, {"caller_nid": "ui_mount_classify_node", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L874"}, {"caller_nid": "ui_mount_classify_node", "callee": "split", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L875"}, {"caller_nid": "ui_mount_build_metadata_payload", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L903"}, {"caller_nid": "ui_mount_build_metadata_payload", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L917"}, {"caller_nid": "ui_mount_metadata_for_owned_equipment", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L923"}, {"caller_nid": "ui_mount_metadata_for_owned_equipment", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L929"}, {"caller_nid": "ui_mount_metadata_for_owned_equipment", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L929"}, {"caller_nid": "ui_mount_metadata_for_relay_equipment", "callee": "build_received_equipment_nodes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L940"}, {"caller_nid": "ui_mount_metadata_for_project", "callee": "split", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L960"}, {"caller_nid": "ui_mount_metadata_for_project", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L961"}, {"caller_nid": "ui_mount_metadata_for_project", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L964"}, {"caller_nid": "ui_mount_metadata_for_project", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L964"}, {"caller_nid": "ui_mount_metadata_for_project", "callee": "splitlines", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L971"}, {"caller_nid": "ui_mount_metadata_for_project", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L971"}, {"caller_nid": "ui_mount_count_dir_children", "callee": "scandir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L989"}, {"caller_nid": "ui_mount_count_dir_children", "callee": "sum", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L990"}, {"caller_nid": "ui_mount_count_dir_children", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L993"}, {"caller_nid": "ui_mount_count_dir_children", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L993"}, {"caller_nid": "ui_mount_metadata_for_run", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1011"}, {"caller_nid": "ui_mount_metadata_for_run", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1012"}, {"caller_nid": "ui_mount_metadata_for_run", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1013"}, {"caller_nid": "ui_mount_metadata_for_run", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1014"}, {"caller_nid": "ui_mount_metadata_for_run", "callee": "read_msgspec_json", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1016"}, {"caller_nid": "ui_mount_metadata_for_run", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1018"}, {"caller_nid": "ui_mount_metadata_for_run", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1022"}, {"caller_nid": "ui_mount_metadata_for_run", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1029"}, {"caller_nid": "ui_mount_drive_folder_feed", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1056"}, {"caller_nid": "ui_mount_drive_folder_feed", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1057"}, {"caller_nid": "ui_mount_drive_folder_feed", "callee": "RefreshCoordinator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1059"}, {"caller_nid": "ui_mount_drive_folder_feed", "callee": "FolderFeed", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1063"}, {"caller_nid": "ui_mount_drive_folder_feed", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1072"}, {"caller_nid": "ui_mount_drive_folder_feed", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1078"}, {"caller_nid": "ui_mount_drive_folder_feed", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1079"}, {"caller_nid": "ui_mount_drive_folder_feed", "callee": "FileListEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1080"}, {"caller_nid": "ui_mount_drive_folder_feed", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1087"}, {"caller_nid": "ui_mount_drive_folder_feed", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1088"}, {"caller_nid": "ui_mount_fetch_folder_async", "callee": "should_skip_folder", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1103"}, {"caller_nid": "ui_mount_fetch_folder_async", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1107"}, {"caller_nid": "ui_mount_fetch_folder_async", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1109"}, {"caller_nid": "ui_mount_fetch_folder_async", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1111"}, {"caller_nid": "ui_mount_fetch_folder_async", "callee": "record_folder_refresh", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1114"}, {"caller_nid": "ui_mount_run_staging_action", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1132"}, {"caller_nid": "ui_mount_run_staging_action", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1136"}, {"caller_nid": "ui_mount_run_staging_action", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1138"}, {"caller_nid": "ui_mount_run_staging_action", "callee": "_do_enqueue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1152"}, {"caller_nid": "ui_mount_run_staging_action", "callee": "_do_clear", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1168"}, {"caller_nid": "ui_mount_bulk_clear_verified", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1185"}, {"caller_nid": "ui_mount_bulk_clear_verified", "callee": "_do_bulk", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1211"}, {"caller_nid": "ui_mount_file_context_action", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1229"}, {"caller_nid": "ui_mount_file_context_action", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1229"}, {"caller_nid": "ui_mount_file_context_action", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1235"}, {"caller_nid": "ui_mount_file_context_action", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1241"}, {"caller_nid": "ui_mount_file_context_action", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1243"}, {"caller_nid": "ui_mount_toggle_keep_local", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1273"}, {"caller_nid": "ui_mount_toggle_keep_local", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1277"}, {"caller_nid": "ui_mount_toggle_keep_local", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1277"}, {"caller_nid": "ui_mount_toggle_keep_local", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1277"}, {"caller_nid": "ui_mount_toggle_keep_local", "callee": "_find_run_root", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1278"}, {"caller_nid": "ui_mount_toggle_keep_local", "callee": "_run_relative_posix", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1282"}, {"caller_nid": "ui_mount_toggle_keep_local", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1286"}, {"caller_nid": "ui_mount_toggle_keep_local", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1286"}, {"caller_nid": "ui_mount_toggle_keep_local", "callee": "_do_toggle", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1300"}, {"caller_nid": "ui_mount_open_in_os", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1314"}, {"caller_nid": "ui_mount_open_in_os", "callee": "Popen", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1315"}, {"caller_nid": "ui_mount_open_in_os", "callee": "Popen", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1318"}, {"caller_nid": "ui_mount_open_in_os", "callee": "startfile", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1323"}, {"caller_nid": "ui_mount_open_in_os", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1326"}, {"caller_nid": "ui_mount_build_operation_rows", "callee": "from_session", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1340"}, {"caller_nid": "ui_mount_open_operations_modal", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1351"}, {"caller_nid": "ui_mount_open_operations_modal", "callee": "operations_modal", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1356"}, {"caller_nid": "ui_mount_open_operations_modal", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1362"}, {"caller_nid": "ui_mount_open_operations_modal", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1363"}, {"caller_nid": "ui_mount_open_operations_modal", "callee": "opener", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1364"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1374"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1375"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1376"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1380"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1380"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "dialog", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1381"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1384"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1384"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "card", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1384"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1386"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1386"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1387"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1387"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1388"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1390"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1390"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1390"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1393"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1395"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1395"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1395"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1395"}, {"caller_nid": "ui_mount_open_operation_details", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1398"}, {"caller_nid": "ui_mount_resume_operation", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1408"}, {"caller_nid": "ui_mount_resume_operation", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1409"}, {"caller_nid": "ui_mount_resume_operation", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1410"}, {"caller_nid": "ui_mount_resume_operation", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1411"}, {"caller_nid": "ui_mount_resume_operation", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1419"}, {"caller_nid": "ui_mount_resume_operation", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1420"}, {"caller_nid": "ui_mount_resume_operation", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1421"}, {"caller_nid": "ui_mount_open_input_required_dialog", "callee": "input_required_dialog", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1458"}, {"caller_nid": "ui_mount_open_input_required_dialog", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1465"}, {"caller_nid": "ui_mount_open_input_required_dialog", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1466"}, {"caller_nid": "ui_mount_open_input_required_dialog", "callee": "opener", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1467"}, {"caller_nid": "ui_mount_cancel_operation", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1473"}, {"caller_nid": "ui_mount_cancel_session", "callee": "dialog", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1488"}, {"caller_nid": "ui_mount_cancel_session", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1504"}, {"caller_nid": "ui_mount_cancel_session", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1504"}, {"caller_nid": "ui_mount_cancel_session", "callee": "card", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1504"}, {"caller_nid": "ui_mount_cancel_session", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1506"}, {"caller_nid": "ui_mount_cancel_session", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1506"}, {"caller_nid": "ui_mount_cancel_session", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1507"}, {"caller_nid": "ui_mount_cancel_session", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1507"}, {"caller_nid": "ui_mount_cancel_session", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1510"}, {"caller_nid": "ui_mount_cancel_session", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1510"}, {"caller_nid": "ui_mount_cancel_session", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1510"}, {"caller_nid": "ui_mount_cancel_session", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1511"}, {"caller_nid": "ui_mount_cancel_session", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1511"}, {"caller_nid": "ui_mount_cancel_session", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1511"}, {"caller_nid": "ui_mount_cancel_session", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1512"}, {"caller_nid": "ui_mount_cancel_session", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1512"}, {"caller_nid": "ui_mount_cancel_session", "callee": "_choose", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1512"}, {"caller_nid": "ui_mount_cancel_session", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1515"}, {"caller_nid": "ui_mount_cancel_session", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1515"}, {"caller_nid": "ui_mount_cancel_session", "callee": "_choose", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1515"}, {"caller_nid": "ui_mount_cancel_session", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1518"}, {"caller_nid": "ui_mount_open_log_dialog", "callee": "_do_open", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1566"}, {"caller_nid": "ui_mount_missing_setup_sections", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1580"}, {"caller_nid": "ui_mount_missing_setup_sections", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1588"}, {"caller_nid": "ui_mount_missing_setup_sections", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1594"}, {"caller_nid": "ui_mount_missing_setup_sections", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1596"}, {"caller_nid": "ui_mount_missing_setup_sections", "callee": "lims_password_present", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1597"}, {"caller_nid": "ui_mount_missing_setup_sections", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1598"}, {"caller_nid": "ui_mount_missing_setup_sections", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1599"}, {"caller_nid": "ui_mount_templates_dir", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1604"}, {"caller_nid": "ui_mount_templates_dir", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1607"}, {"caller_nid": "ui_mount_template_names", "callee": "list_templates", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1620"}, {"caller_nid": "ui_mount_template_names", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1623"}, {"caller_nid": "ui_mount_template_questions_map", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1644"}, {"caller_nid": "ui_mount_template_questions_map", "callee": "TemplateType", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1645"}, {"caller_nid": "ui_mount_template_questions_map", "callee": "list_templates", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1647"}, {"caller_nid": "ui_mount_template_questions_map", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1649"}, {"caller_nid": "ui_mount_template_questions_map", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1651"}, {"caller_nid": "ui_mount_template_questions_map", "callee": "template_questions", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1653"}, {"caller_nid": "ui_mount_template_questions_map", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1656"}, {"caller_nid": "ui_mount_lims_catalogue_projects", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1667"}, {"caller_nid": "ui_mount_lims_catalogue_projects", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1670"}, {"caller_nid": "ui_mount_lims_catalogue_projects", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1671"}, {"caller_nid": "ui_mount_lims_catalogue_projects", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1671"}, {"caller_nid": "ui_mount_lims_catalogue_projects", "callee": "read_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1676"}, {"caller_nid": "ui_mount_lims_catalogue_projects", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1676"}, {"caller_nid": "ui_mount_lims_catalogue_projects", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1690"}, {"caller_nid": "ui_mount_lims_projects", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1703"}, {"caller_nid": "ui_mount_lims_projects", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1704"}, {"caller_nid": "ui_mount_lims_projects", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1707"}, {"caller_nid": "ui_mount_lims_projects", "callee": "list_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1707"}, {"caller_nid": "ui_mount_lims_projects", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1720"}, {"caller_nid": "ui_mount_equipment_ids", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1726"}, {"caller_nid": "ui_mount_await_session", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1742"}, {"caller_nid": "ui_mount_await_session", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1744"}, {"caller_nid": "ui_mount_await_session", "callee": "status", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1746"}, {"caller_nid": "ui_mount_consume_session_progress", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1767"}, {"caller_nid": "ui_mount_consume_session_progress", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1768"}, {"caller_nid": "ui_mount_consume_session_progress", "callee": "subscribe", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1773"}, {"caller_nid": "ui_mount_consume_session_progress", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1774"}, {"caller_nid": "ui_mount_consume_session_progress", "callee": "apply_frame", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1775"}, {"caller_nid": "ui_mount_consume_session_progress", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1776"}, {"caller_nid": "ui_mount_consume_session_progress", "callee": "refresh", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1777"}, {"caller_nid": "ui_mount_consume_session_progress", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1783"}, {"caller_nid": "ui_mount_consume_session_progress", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1784"}, {"caller_nid": "ui_mount_consume_session_progress", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1785"}, {"caller_nid": "ui_mount_consume_session_progress", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1791"}, {"caller_nid": "ui_mount_close_dialog", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1796"}, {"caller_nid": "ui_mount_close_dialog", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1797"}, {"caller_nid": "ui_mount_close_dialog", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1798"}, {"caller_nid": "ui_mount_close_dialog", "callee": "closer", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1799"}, {"caller_nid": "ui_mount_submit_project", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1804"}, {"caller_nid": "ui_mount_submit_project", "callee": "ProjectCreateRequest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1816"}, {"caller_nid": "ui_mount_submit_project", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1820"}, {"caller_nid": "ui_mount_submit_project", "callee": "uuid4", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1820"}, {"caller_nid": "ui_mount_submit_project", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1823"}, {"caller_nid": "ui_mount_submit_project", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1825"}, {"caller_nid": "ui_mount_submit_project", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1826"}, {"caller_nid": "ui_mount_submit_project", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1827"}, {"caller_nid": "ui_mount_submit_project", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1828"}, {"caller_nid": "ui_mount_submit_run", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1837"}, {"caller_nid": "ui_mount_submit_run", "callee": "RunCreateRequest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1852"}, {"caller_nid": "ui_mount_submit_run", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1857"}, {"caller_nid": "ui_mount_submit_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1858"}, {"caller_nid": "ui_mount_submit_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1859"}, {"caller_nid": "ui_mount_submit_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1860"}, {"caller_nid": "ui_mount_run_creation", "callee": "create_fn", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1886"}, {"caller_nid": "ui_mount_run_creation", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1891"}, {"caller_nid": "ui_mount_run_creation", "callee": "to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1896"}, {"caller_nid": "ui_mount_run_creation", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1899"}, {"caller_nid": "ui_mount_run_creation", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1901"}, {"caller_nid": "ui_mount_run_creation", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1901"}, {"caller_nid": "ui_mount_render_run_wizard", "callee": "RunWizardState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1908"}, {"caller_nid": "ui_mount_render_run_wizard", "callee": "render_run_wizard", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1909"}, {"caller_nid": "ui_mount_render_run_wizard", "callee": "to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1915"}, {"caller_nid": "ui_mount_safe_audit", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1921"}, {"caller_nid": "ui_mount_safe_audit", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1925"}, {"caller_nid": "ui_mount_safe_audit", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1925"}, {"caller_nid": "ui_mount_safe_audit", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1927"}, {"caller_nid": "ui_mount_build_staging_state", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1934"}, {"caller_nid": "ui_mount_build_staging_state", "callee": "list_staged_runs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1940"}, {"caller_nid": "ui_mount_build_staging_state", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1942"}, {"caller_nid": "ui_mount_build_staging_state", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1945"}, {"caller_nid": "ui_mount_build_staging_state", "callee": "StagingDockState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1946"}, {"caller_nid": "ui_mount_build_staging_state", "callee": "StagingDockState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1947"}, {"caller_nid": "ui_mount_build_staging_state", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1947"}, {"caller_nid": "ui_mount_show_toast", "callee": "notify_success", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1956"}, {"caller_nid": "ui_mount_show_toast", "callee": "notify_error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1958"}, {"caller_nid": "ui_mount_show_toast", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1960"}, {"caller_nid": "ui_mount_render_unavailable", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1965"}, {"caller_nid": "ui_mount_render_unavailable", "callee": "card", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1965"}, {"caller_nid": "ui_mount_render_unavailable", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1966"}, {"caller_nid": "ui_mount_render_unavailable", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1966"}, {"caller_nid": "ui_mount_render_unavailable", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1967"}, {"caller_nid": "ui_mount_render_unavailable", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1967"}, {"caller_nid": "ui_mount_render_unavailable", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py", "source_location": "L1969"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/8c860e77f94035ad0c0d6d511077cdbf600a5910ce230d6efda890e8cf649f7e.json b/graphify-out/cache/ast/8c860e77f94035ad0c0d6d511077cdbf600a5910ce230d6efda890e8cf649f7e.json new file mode 100644 index 0000000..bfa28e5 --- /dev/null +++ b/graphify-out/cache/ast/8c860e77f94035ad0c0d6d511077cdbf600a5910ce230d6efda890e8cf649f7e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/8ccccff9c769f715123c25bde41699ba2d9624c52f8bdc0c2d05c2dd1177ac20.json b/graphify-out/cache/ast/8ccccff9c769f715123c25bde41699ba2d9624c52f8bdc0c2d05c2dd1177ac20.json new file mode 100644 index 0000000..a932835 --- /dev/null +++ b/graphify-out/cache/ast/8ccccff9c769f715123c25bde41699ba2d9624c52f8bdc0c2d05c2dd1177ac20.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "label": "health.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L1"}, {"id": "api_health_healthresponse", "label": "HealthResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L35"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_health_build_health_router", "label": "build_health_router()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L47"}, {"id": "api_health_component_rollup", "label": "_component_rollup()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L72"}, {"id": "api_health_validator_health", "label": "_validator_health()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L83"}, {"id": "api_health_nas_sync_health", "label": "_nas_sync_health()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L91"}, {"id": "api_health_lims_health", "label": "_lims_health()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L116"}, {"id": "api_health_plugin_host_health", "label": "_plugin_host_health()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L131"}, {"id": "api_health_session_store_health", "label": "_session_store_health()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L144"}, {"id": "api_health_top_level_status", "label": "_top_level_status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L161"}, {"id": "api_health_rationale_1", "label": "``GET /api/v1/health`` rollup. Backend Spec \u00a74.6.3. Returns a component-health", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L1"}, {"id": "api_health_rationale_36", "label": "``GET /health`` response body. Backend Spec \u00a74.6.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L36"}, {"id": "api_health_rationale_48", "label": "Construct the health router. Always available.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L48"}, {"id": "api_health_rationale_73", "label": "Build the \u00a74.6.3 components block from the live dependencies.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L73"}, {"id": "api_health_rationale_162", "label": "Aggregate per-component statuses into the \u00a74.6.3 top-level value. Top-level", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L162"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "exlab_wizard", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "exlab_wizard_api_setup", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "api_health_healthresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L35", "weight": 1.0}, {"source": "api_health_healthresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "api_health_build_health_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "api_health_component_rollup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "api_health_validator_health", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "api_health_nas_sync_health", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L91", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "api_health_lims_health", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L116", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "api_health_plugin_host_health", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L131", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "api_health_session_store_health", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L144", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "target": "api_health_top_level_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L161", "weight": 1.0}, {"source": "api_health_component_rollup", "target": "api_health_validator_health", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L75", "weight": 1.0}, {"source": "api_health_component_rollup", "target": "api_health_nas_sync_health", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L76", "weight": 1.0}, {"source": "api_health_component_rollup", "target": "api_health_lims_health", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L77", "weight": 1.0}, {"source": "api_health_component_rollup", "target": "api_health_plugin_host_health", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L78", "weight": 1.0}, {"source": "api_health_component_rollup", "target": "api_health_session_store_health", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L79", "weight": 1.0}, {"source": "api_health_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_health_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L1", "weight": 1.0}, {"source": "api_health_rationale_36", "target": "api_health_healthresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L36", "weight": 1.0}, {"source": "api_health_rationale_48", "target": "api_health_build_health_router", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L48", "weight": 1.0}, {"source": "api_health_rationale_73", "target": "api_health_component_rollup", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L73", "weight": 1.0}, {"source": "api_health_rationale_162", "target": "api_health_top_level_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L162", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_health_build_health_router", "callee": "APIRouter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L49"}, {"caller_nid": "api_health_build_health_router", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L51"}, {"caller_nid": "api_health_validator_health", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L84"}, {"caller_nid": "api_health_nas_sync_health", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L95"}, {"caller_nid": "api_health_nas_sync_health", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L96"}, {"caller_nid": "api_health_nas_sync_health", "callee": "snapshot", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L98"}, {"caller_nid": "api_health_nas_sync_health", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L100"}, {"caller_nid": "api_health_nas_sync_health", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L101"}, {"caller_nid": "api_health_nas_sync_health", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L102"}, {"caller_nid": "api_health_nas_sync_health", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L103"}, {"caller_nid": "api_health_nas_sync_health", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L105"}, {"caller_nid": "api_health_nas_sync_health", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L105"}, {"caller_nid": "api_health_nas_sync_health", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L106"}, {"caller_nid": "api_health_nas_sync_health", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L106"}, {"caller_nid": "api_health_lims_health", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L119"}, {"caller_nid": "api_health_lims_health", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L124"}, {"caller_nid": "api_health_lims_health", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L127"}, {"caller_nid": "api_health_plugin_host_health", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L135"}, {"caller_nid": "api_health_plugin_host_health", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L136"}, {"caller_nid": "api_health_plugin_host_health", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L138"}, {"caller_nid": "api_health_plugin_host_health", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L139"}, {"caller_nid": "api_health_session_store_health", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L148"}, {"caller_nid": "api_health_session_store_health", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L149"}, {"caller_nid": "api_health_session_store_health", "callee": "snapshot", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L151"}, {"caller_nid": "api_health_session_store_health", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L153"}, {"caller_nid": "api_health_session_store_health", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L154"}, {"caller_nid": "api_health_session_store_health", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L155"}, {"caller_nid": "api_health_session_store_health", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L156"}, {"caller_nid": "api_health_session_store_health", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L156"}, {"caller_nid": "api_health_session_store_health", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L157"}, {"caller_nid": "api_health_session_store_health", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L157"}, {"caller_nid": "api_health_top_level_status", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L168"}, {"caller_nid": "api_health_top_level_status", "callee": "values", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py", "source_location": "L168"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/8d0b64397454944271c26657eca5a513710af71af27a5d200af0867a3e302371.json b/graphify-out/cache/ast/8d0b64397454944271c26657eca5a513710af71af27a5d200af0867a3e302371.json new file mode 100644 index 0000000..14e678a --- /dev/null +++ b/graphify-out/cache/ast/8d0b64397454944271c26657eca5a513710af71af27a5d200af0867a3e302371.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_02_project_wizard_py", "label": "test_flow_02_project_wizard.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L1"}, {"id": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "label": "test_flow_02_project_wizard()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L14"}, {"id": "e2e_test_flow_02_project_wizard_rationale_1", "label": "E2E flow 02: Project wizard 7-step happy path. Frontend Spec \u00a76.3 (project wiza", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_02_project_wizard_py", "target": "tests_e2e_page_objects_wizard_project_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_02_project_wizard_py", "target": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L14", "weight": 1.0}, {"source": "e2e_test_flow_02_project_wizard_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_02_project_wizard_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "WizardProjectPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L15"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L16"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L17"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L19"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L20"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L25"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L25"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L26"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L27"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L28"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L40"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "step", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L40"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L42"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L42"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L47"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L47"}, {"caller_nid": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py", "source_location": "L50"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/8d1ea17c20576b0f0b475c5bde9890a8aa3a1789a6ccc4023d6c2048d41ef198.json b/graphify-out/cache/ast/8d1ea17c20576b0f0b475c5bde9890a8aa3a1789a6ccc4023d6c2048d41ef198.json new file mode 100644 index 0000000..6866d77 --- /dev/null +++ b/graphify-out/cache/ast/8d1ea17c20576b0f0b475c5bde9890a8aa3a1789a6ccc4023d6c2048d41ef198.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_lims_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/__init__.py", "source_location": "L1"}, {"id": "lims_init_rationale_1", "label": "Unit tests for ``exlab_wizard.lims``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/__init__.py", "source_location": "L1"}], "edges": [{"source": "lims_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_lims_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/8d3b7d221849354075e752d403a07ddcded8aa79ed2d13e14d396d9693f3711a.json b/graphify-out/cache/ast/8d3b7d221849354075e752d403a07ddcded8aa79ed2d13e14d396d9693f3711a.json new file mode 100644 index 0000000..4584c57 --- /dev/null +++ b/graphify-out/cache/ast/8d3b7d221849354075e752d403a07ddcded8aa79ed2d13e14d396d9693f3711a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_26_equipment_wizard_persist_py", "label": "test_flow_26_equipment_wizard_persist.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L1"}, {"id": "e2e_test_flow_26_equipment_wizard_persist_prod_server", "label": "prod_server()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L40"}, {"id": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "label": "test_equipment_wizard_confirm_persists_to_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L53"}, {"id": "e2e_test_flow_26_equipment_wizard_persist_rationale_1", "label": "E2E flow 26: Add-Equipment wizard confirm against the PRODUCTION app. ``test_fl", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L1"}, {"id": "e2e_test_flow_26_equipment_wizard_persist_rationale_41", "label": "Spawn the production wizard app under a fresh tmp HOME.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L41"}, {"id": "e2e_test_flow_26_equipment_wizard_persist_rationale_54", "label": "Drive the production wizard to Confirm and assert config.yaml gains the device.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L54"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_26_equipment_wizard_persist_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_26_equipment_wizard_persist_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_26_equipment_wizard_persist_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_26_equipment_wizard_persist_py", "target": "tests_e2e_prod_server", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_26_equipment_wizard_persist_py", "target": "tests_e2e_conftest", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_26_equipment_wizard_persist_py", "target": "tests_e2e_page_objects_wizard_equipment_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_26_equipment_wizard_persist_py", "target": "e2e_test_flow_26_equipment_wizard_persist_prod_server", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_26_equipment_wizard_persist_py", "target": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L53", "weight": 1.0}, {"source": "e2e_test_flow_26_equipment_wizard_persist_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_26_equipment_wizard_persist_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_test_flow_26_equipment_wizard_persist_rationale_41", "target": "e2e_test_flow_26_equipment_wizard_persist_prod_server", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L41", "weight": 1.0}, {"source": "e2e_test_flow_26_equipment_wizard_persist_rationale_54", "target": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L54", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_prod_server", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L43"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_prod_server", "callee": "ProdServer", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L44"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_prod_server", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L45"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_prod_server", "callee": "skip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L46"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_prod_server", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L50"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L55"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "new_context", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L57"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "new_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L58"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "WizardEquipmentPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L60"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L61"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L62"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L63"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L66"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L67"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L68"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L71"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L72"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L73"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L74"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L78"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L79"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L80"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L81"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L82"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L85"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L86"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L87"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L91"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L92"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L92"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L93"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L94"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L96"}, {"caller_nid": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py", "source_location": "L100"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/8de610342a32ae3f79cbe3083ec54da39b902ccd109863cd4b76f03e4ad1ed79.json b/graphify-out/cache/ast/8de610342a32ae3f79cbe3083ec54da39b902ccd109863cd4b76f03e4ad1ed79.json new file mode 100644 index 0000000..2c4de9c --- /dev/null +++ b/graphify-out/cache/ast/8de610342a32ae3f79cbe3083ec54da39b902ccd109863cd4b76f03e4ad1ed79.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "label": "settings_page.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L1"}, {"id": "page_objects_settings_page_settingspage", "label": "SettingsPage", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L11"}, {"id": "page_objects_settings_page_settingspage_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L14"}, {"id": "page_objects_settings_page_dialog", "label": "dialog()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L18"}, {"id": "page_objects_settings_page_incomplete_banner", "label": "incomplete_banner()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L23"}, {"id": "page_objects_settings_page_settingspage_nav", "label": ".nav()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L27"}, {"id": "page_objects_settings_page_settingspage_section", "label": ".section()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L31"}, {"id": "page_objects_settings_page_paths_templates", "label": "paths_templates()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L36"}, {"id": "page_objects_settings_page_paths_plugin", "label": "paths_plugin()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L41"}, {"id": "page_objects_settings_page_paths_local_root", "label": "paths_local_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L46"}, {"id": "page_objects_settings_page_lims_password_primary", "label": "lims_password_primary()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L51"}, {"id": "page_objects_settings_page_lims_password_secondary", "label": "lims_password_secondary()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L56"}, {"id": "page_objects_settings_page_lims_password_input", "label": "lims_password_input()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L61"}, {"id": "page_objects_settings_page_lims_password_save", "label": "lims_password_save()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L66"}, {"id": "page_objects_settings_page_lims_password_cancel", "label": "lims_password_cancel()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L71"}, {"id": "page_objects_settings_page_lims_password_clear_confirm", "label": "lims_password_clear_confirm()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L76"}, {"id": "page_objects_settings_page_lims_password_status", "label": "lims_password_status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L81"}, {"id": "page_objects_settings_page_equipment_id", "label": "equipment_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L86"}, {"id": "page_objects_settings_page_equipment_add", "label": "equipment_add()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L91"}, {"id": "page_objects_settings_page_save", "label": "save()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L96"}, {"id": "page_objects_settings_page_discard", "label": "discard()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L101"}, {"id": "page_objects_settings_page_saved_marker", "label": "saved_marker()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L106"}, {"id": "page_objects_settings_page_rationale_1", "label": "Page object for the Settings dialog. Frontend Spec \u00a76.7.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L1"}, {"id": "page_objects_settings_page_rationale_12", "label": "Locators for the settings dialog's nine-section layout.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L12"}, {"id": "page_objects_settings_page_rationale_19", "label": "The settings dialog card.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L19"}, {"id": "page_objects_settings_page_rationale_24", "label": "The setup-incomplete banner shown inside the dialog.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L24"}, {"id": "page_objects_settings_page_rationale_28", "label": "The sidebar nav row for a section.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L28"}, {"id": "page_objects_settings_page_rationale_32", "label": "The body container for a section.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L32"}, {"id": "page_objects_settings_page_rationale_37", "label": "Paths section: templates directory input.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L37"}, {"id": "page_objects_settings_page_rationale_42", "label": "Paths section: plugin directory input.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L42"}, {"id": "page_objects_settings_page_rationale_47", "label": "Paths section: local data root input.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L47"}, {"id": "page_objects_settings_page_rationale_52", "label": "LIMS section: the credential row's primary button ([Set] / [Replace]).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L52"}, {"id": "page_objects_settings_page_rationale_57", "label": "LIMS section: the credential row's secondary button ([Clear]).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L57"}, {"id": "page_objects_settings_page_rationale_62", "label": "LIMS section: the inline password input shown while editing.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L62"}, {"id": "page_objects_settings_page_rationale_67", "label": "LIMS section: the credential row's Save button (editing state).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L67"}, {"id": "page_objects_settings_page_rationale_72", "label": "LIMS section: the credential row's Cancel button (editing state).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L72"}, {"id": "page_objects_settings_page_rationale_77", "label": "LIMS section: the confirm button in the Clear-credential dialog.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L77"}, {"id": "page_objects_settings_page_rationale_82", "label": "LIMS section: the credential row's status line (resting states).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L82"}, {"id": "page_objects_settings_page_rationale_87", "label": "Equipment section: equipment-id input.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L87"}, {"id": "page_objects_settings_page_rationale_92", "label": "Equipment section: add-equipment button.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L92"}, {"id": "page_objects_settings_page_rationale_107", "label": "The marker shown after a successful save.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L107"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "playwright_sync_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_settingspage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L11", "weight": 1.0}, {"source": "page_objects_settings_page_settingspage", "target": "page_objects_settings_page_settingspage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_dialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_incomplete_banner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L23", "weight": 1.0}, {"source": "page_objects_settings_page_settingspage", "target": "page_objects_settings_page_settingspage_nav", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L27", "weight": 1.0}, {"source": "page_objects_settings_page_settingspage", "target": "page_objects_settings_page_settingspage_section", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_paths_templates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_paths_plugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_paths_local_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_lims_password_primary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_lims_password_secondary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_lims_password_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L61", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_lims_password_save", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L66", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_lims_password_cancel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L71", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_lims_password_clear_confirm", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_lims_password_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_equipment_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L86", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_equipment_add", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L91", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_save", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L96", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_discard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L101", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "target": "page_objects_settings_page_saved_marker", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L106", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_page_objects_settings_page_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L1", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_12", "target": "page_objects_settings_page_settingspage", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L12", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_19", "target": "page_objects_settings_page_settingspage_dialog", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L19", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_24", "target": "page_objects_settings_page_settingspage_incomplete_banner", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L24", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_28", "target": "page_objects_settings_page_settingspage_nav", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L28", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_32", "target": "page_objects_settings_page_settingspage_section", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L32", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_37", "target": "page_objects_settings_page_settingspage_paths_templates", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L37", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_42", "target": "page_objects_settings_page_settingspage_paths_plugin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L42", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_47", "target": "page_objects_settings_page_settingspage_paths_local_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L47", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_52", "target": "page_objects_settings_page_settingspage_lims_password_primary", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L52", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_57", "target": "page_objects_settings_page_settingspage_lims_password_secondary", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L57", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_62", "target": "page_objects_settings_page_settingspage_lims_password_input", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L62", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_67", "target": "page_objects_settings_page_settingspage_lims_password_save", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L67", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_72", "target": "page_objects_settings_page_settingspage_lims_password_cancel", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L72", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_77", "target": "page_objects_settings_page_settingspage_lims_password_clear_confirm", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L77", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_82", "target": "page_objects_settings_page_settingspage_lims_password_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L82", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_87", "target": "page_objects_settings_page_settingspage_equipment_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L87", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_92", "target": "page_objects_settings_page_settingspage_equipment_add", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L92", "weight": 1.0}, {"source": "page_objects_settings_page_rationale_107", "target": "page_objects_settings_page_settingspage_saved_marker", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L107", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_objects_settings_page_dialog", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L20"}, {"caller_nid": "page_objects_settings_page_incomplete_banner", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L25"}, {"caller_nid": "page_objects_settings_page_settingspage_nav", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L29"}, {"caller_nid": "page_objects_settings_page_settingspage_section", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L33"}, {"caller_nid": "page_objects_settings_page_paths_templates", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L38"}, {"caller_nid": "page_objects_settings_page_paths_plugin", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L43"}, {"caller_nid": "page_objects_settings_page_paths_local_root", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L48"}, {"caller_nid": "page_objects_settings_page_lims_password_primary", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L53"}, {"caller_nid": "page_objects_settings_page_lims_password_secondary", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L58"}, {"caller_nid": "page_objects_settings_page_lims_password_input", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L63"}, {"caller_nid": "page_objects_settings_page_lims_password_save", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L68"}, {"caller_nid": "page_objects_settings_page_lims_password_cancel", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L73"}, {"caller_nid": "page_objects_settings_page_lims_password_clear_confirm", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L78"}, {"caller_nid": "page_objects_settings_page_lims_password_status", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L83"}, {"caller_nid": "page_objects_settings_page_equipment_id", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L88"}, {"caller_nid": "page_objects_settings_page_equipment_add", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L93"}, {"caller_nid": "page_objects_settings_page_save", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L98"}, {"caller_nid": "page_objects_settings_page_discard", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L103"}, {"caller_nid": "page_objects_settings_page_saved_marker", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py", "source_location": "L108"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/8f4d71670e06e4b94eb4cc72ec0cad824ab88ca067ecdcd20530593b9faded0e.json b/graphify-out/cache/ast/8f4d71670e06e4b94eb4cc72ec0cad824ab88ca067ecdcd20530593b9faded0e.json new file mode 100644 index 0000000..e9afda7 --- /dev/null +++ b/graphify-out/cache/ast/8f4d71670e06e4b94eb4cc72ec0cad824ab88ca067ecdcd20530593b9faded0e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "label": "wizard_equipment.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L1"}, {"id": "pages_wizard_equipment_equipmentwizardstate", "label": "EquipmentWizardState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L49"}, {"id": "pages_wizard_equipment_can_advance", "label": "can_advance()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L84"}, {"id": "pages_wizard_equipment_assemble_equipment_config", "label": "assemble_equipment_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L119"}, {"id": "pages_wizard_equipment_render_wizard_equipment", "label": "render_wizard_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L149"}, {"id": "pages_wizard_equipment_maybe_confirm", "label": "_maybe_confirm()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L253"}, {"id": "pages_wizard_equipment_render_identity_step", "label": "_render_identity_step()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L268"}, {"id": "pages_wizard_equipment_render_paths_step", "label": "_render_paths_step()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L286"}, {"id": "pages_wizard_equipment_render_sync_mode_step", "label": "_render_sync_mode_step()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L304"}, {"id": "pages_wizard_equipment_render_review_step", "label": "_render_review_step()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L368"}, {"id": "pages_wizard_equipment_rationale_1", "label": "Add-Equipment wizard (GUI/Orchestrator Redesign \u00a76). Four-step wizard launched", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L1"}, {"id": "pages_wizard_equipment_rationale_50", "label": "Mutable state for the in-flight Add-Equipment wizard.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L50"}, {"id": "pages_wizard_equipment_rationale_85", "label": "Return True if the active step has the data it needs to advance. Pure funct", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L85"}, {"id": "pages_wizard_equipment_rationale_122", "label": "Build the final EquipmentConfig from the wizard's state. Raises a pydantic", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L122"}, {"id": "pages_wizard_equipment_rationale_155", "label": "Render the self-contained Add-Equipment wizard. Next / Back navigation is h", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L155"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "exlab_wizard_constants_patterns", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "exlab_wizard_ui_equipment_form", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "pages_wizard_equipment_equipmentwizardstate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "pages_wizard_equipment_can_advance", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L84", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "pages_wizard_equipment_assemble_equipment_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L119", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "pages_wizard_equipment_render_wizard_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L149", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "pages_wizard_equipment_maybe_confirm", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L253", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "pages_wizard_equipment_render_identity_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L268", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "pages_wizard_equipment_render_paths_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L286", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "pages_wizard_equipment_render_sync_mode_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L304", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "target": "pages_wizard_equipment_render_review_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L368", "weight": 1.0}, {"source": "pages_wizard_equipment_render_wizard_equipment", "target": "pages_wizard_equipment_equipmentwizardstate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L169", "weight": 1.0}, {"source": "pages_wizard_equipment_maybe_confirm", "target": "pages_wizard_equipment_assemble_equipment_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L260", "weight": 1.0}, {"source": "pages_wizard_equipment_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_equipment_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L1", "weight": 1.0}, {"source": "pages_wizard_equipment_rationale_50", "target": "pages_wizard_equipment_equipmentwizardstate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L50", "weight": 1.0}, {"source": "pages_wizard_equipment_rationale_85", "target": "pages_wizard_equipment_can_advance", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L85", "weight": 1.0}, {"source": "pages_wizard_equipment_rationale_122", "target": "pages_wizard_equipment_assemble_equipment_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L122", "weight": 1.0}, {"source": "pages_wizard_equipment_rationale_155", "target": "pages_wizard_equipment_render_wizard_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L155", "weight": 1.0}], "raw_calls": [{"caller_nid": "pages_wizard_equipment_can_advance", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L92"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "fullmatch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L94"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L95"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L98"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L98"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L98"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L102"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L103"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L104"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L105"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L107"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L108"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L109"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L110"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L113"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L113"}, {"caller_nid": "pages_wizard_equipment_can_advance", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L113"}, {"caller_nid": "pages_wizard_equipment_assemble_equipment_config", "callee": "build_equipment_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L127"}, {"caller_nid": "pages_wizard_equipment_render_wizard_equipment", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L182"}, {"caller_nid": "pages_wizard_equipment_render_wizard_equipment", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L182"}, {"caller_nid": "pages_wizard_equipment_render_wizard_equipment", "callee": "card", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L182"}, {"caller_nid": "pages_wizard_equipment_render_wizard_equipment", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L183"}, {"caller_nid": "pages_wizard_equipment_render_wizard_equipment", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L183"}, {"caller_nid": "pages_wizard_equipment_render_wizard_equipment", "callee": "_body", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L249"}, {"caller_nid": "pages_wizard_equipment_maybe_confirm", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L262"}, {"caller_nid": "pages_wizard_equipment_maybe_confirm", "callee": "on_confirm", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L264"}, {"caller_nid": "pages_wizard_equipment_render_identity_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L278"}, {"caller_nid": "pages_wizard_equipment_render_identity_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L278"}, {"caller_nid": "pages_wizard_equipment_render_identity_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L278"}, {"caller_nid": "pages_wizard_equipment_render_identity_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L278"}, {"caller_nid": "pages_wizard_equipment_render_identity_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L281"}, {"caller_nid": "pages_wizard_equipment_render_identity_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L281"}, {"caller_nid": "pages_wizard_equipment_render_identity_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L281"}, {"caller_nid": "pages_wizard_equipment_render_identity_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L281"}, {"caller_nid": "pages_wizard_equipment_render_paths_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L296"}, {"caller_nid": "pages_wizard_equipment_render_paths_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L296"}, {"caller_nid": "pages_wizard_equipment_render_paths_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L296"}, {"caller_nid": "pages_wizard_equipment_render_paths_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L296"}, {"caller_nid": "pages_wizard_equipment_render_paths_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L299"}, {"caller_nid": "pages_wizard_equipment_render_paths_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L299"}, {"caller_nid": "pages_wizard_equipment_render_paths_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L299"}, {"caller_nid": "pages_wizard_equipment_render_paths_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L299"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L313"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L313"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L314"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L314"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "radio", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L314"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "refresh_body", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L315"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L318"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L318"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "radio", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L318"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "refresh_body", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L321"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L324"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L324"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L324"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L324"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L327"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L327"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L327"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L327"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L330"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L330"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L330"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L330"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L333"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L333"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L333"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L333"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L336"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L336"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L336"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L336"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L340"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L340"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L340"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L340"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L343"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L343"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "number", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L343"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L343"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L346"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L346"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L346"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L346"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L349"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L349"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L349"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L349"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L353"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L353"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "radio", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L353"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "refresh_body", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L356"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L360"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L360"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L360"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L360"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L363"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L363"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L363"}, {"caller_nid": "pages_wizard_equipment_render_sync_mode_step", "callee": "sync_next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L363"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L378"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L378"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L379"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L379"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L380"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L381"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L382"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L383"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L384"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L386"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L388"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L389"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L390"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L392"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L392"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L392"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L399"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L399"}, {"caller_nid": "pages_wizard_equipment_render_review_step", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py", "source_location": "L399"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/9031954483cc7f8d0c659dc40259d750545128c56ef87268d83e2580906b3d0a.json b/graphify-out/cache/ast/9031954483cc7f8d0c659dc40259d750545128c56ef87268d83e2580906b3d0a.json new file mode 100644 index 0000000..5ab0e40 --- /dev/null +++ b/graphify-out/cache/ast/9031954483cc7f8d0c659dc40259d750545128c56ef87268d83e2580906b3d0a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_folder_feed_py", "label": "test_folder_feed.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L1"}, {"id": "ui_test_folder_feed_test_folder_feed_start_then_stop_calls_fetch_at_least_once", "label": "test_folder_feed_start_then_stop_calls_fetch_at_least_once()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L18"}, {"id": "ui_test_folder_feed_test_folder_feed_switching_paths_stops_previous", "label": "test_folder_feed_switching_paths_stops_previous()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L34"}, {"id": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", "label": "test_folder_feed_pause_skips_fetch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L53"}, {"id": "ui_test_folder_feed_test_refresh_coordinator_coalesces_within_window", "label": "test_refresh_coordinator_coalesces_within_window()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L73"}, {"id": "ui_test_folder_feed_rationale_1", "label": "Unit tests for the folder-feed + refresh-coordinator client modules. GUI/Orches", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_folder_feed_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_folder_feed_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_folder_feed_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_folder_feed_py", "target": "exlab_wizard_ui_client_folder_feed", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_folder_feed_py", "target": "exlab_wizard_ui_client_refresh_coordinator", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_folder_feed_py", "target": "ui_test_folder_feed_test_folder_feed_start_then_stop_calls_fetch_at_least_once", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_folder_feed_py", "target": "ui_test_folder_feed_test_folder_feed_switching_paths_stops_previous", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_folder_feed_py", "target": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_folder_feed_py", "target": "ui_test_folder_feed_test_refresh_coordinator_coalesces_within_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L73", "weight": 1.0}, {"source": "ui_test_folder_feed_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_folder_feed_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_folder_feed_test_folder_feed_start_then_stop_calls_fetch_at_least_once", "callee": "FolderFeed", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L25"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_start_then_stop_calls_fetch_at_least_once", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L26"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_start_then_stop_calls_fetch_at_least_once", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L27"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_start_then_stop_calls_fetch_at_least_once", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L28"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_start_then_stop_calls_fetch_at_least_once", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L29"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_start_then_stop_calls_fetch_at_least_once", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L30"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_switching_paths_stops_previous", "callee": "FolderFeed", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L41"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_switching_paths_stops_previous", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L42"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_switching_paths_stops_previous", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L43"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_switching_paths_stops_previous", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L44"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_switching_paths_stops_previous", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L45"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_switching_paths_stops_previous", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L46"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", "callee": "FolderFeed", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L60"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L61"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L62"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", "callee": "pause", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L63"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L64"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L65"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L67"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", "callee": "resume", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L68"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L69"}, {"caller_nid": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L70"}, {"caller_nid": "ui_test_folder_feed_test_refresh_coordinator_coalesces_within_window", "callee": "RefreshCoordinator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L74"}, {"caller_nid": "ui_test_folder_feed_test_refresh_coordinator_coalesces_within_window", "callee": "record_tree_refresh", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L75"}, {"caller_nid": "ui_test_folder_feed_test_refresh_coordinator_coalesces_within_window", "callee": "should_skip_folder", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L76"}, {"caller_nid": "ui_test_folder_feed_test_refresh_coordinator_coalesces_within_window", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L78"}, {"caller_nid": "ui_test_folder_feed_test_refresh_coordinator_coalesces_within_window", "callee": "should_skip_folder", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py", "source_location": "L79"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/9079cd39e43047e5abafab01ce2ad2d13a9fbcad3108d7f7ca0301a53b94716d.json b/graphify-out/cache/ast/9079cd39e43047e5abafab01ce2ad2d13a9fbcad3108d7f7ca0301a53b94716d.json new file mode 100644 index 0000000..2dfa279 --- /dev/null +++ b/graphify-out/cache/ast/9079cd39e43047e5abafab01ce2ad2d13a9fbcad3108d7f7ca0301a53b94716d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "label": "test_wizard_run_page.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L1"}, {"id": "ui_test_wizard_run_page_test_can_advance_template_step_requires_selection", "label": "test_can_advance_template_step_requires_selection()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L34"}, {"id": "ui_test_wizard_run_page_test_can_advance_variables_step_always_true", "label": "test_can_advance_variables_step_always_true()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L41"}, {"id": "ui_test_wizard_run_page_test_can_advance_preview_step_blocks_on_validator_findings", "label": "test_can_advance_preview_step_blocks_on_validator_findings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L46"}, {"id": "ui_test_wizard_run_page_test_can_advance_confirm_step_always_true", "label": "test_can_advance_confirm_step_always_true()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L53"}, {"id": "ui_test_wizard_run_page_test_can_advance_default_step_is_project_equipment", "label": "test_can_advance_default_step_is_project_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L58"}, {"id": "ui_test_wizard_run_page_test_can_advance_readme_blocks_on_partial_core_fields", "label": "test_can_advance_readme_blocks_on_partial_core_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L68"}, {"id": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", "label": "test_state_run_kind_is_bound_and_drives_helpers()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L81"}, {"id": "ui_test_wizard_run_page_test_preview_path_segments_experimental_uses_run_prefix", "label": "test_preview_path_segments_experimental_uses_run_prefix()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L98"}, {"id": "ui_test_wizard_run_page_test_preview_path_segments_test_uses_testrun_prefix_and_folder", "label": "test_preview_path_segments_test_uses_testrun_prefix_and_folder()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L109"}, {"id": "ui_test_wizard_run_page_test_render_run_wizard_experimental_with_choices_does_not_raise", "label": "test_render_run_wizard_experimental_with_choices_does_not_raise()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L126"}, {"id": "ui_test_wizard_run_page_test_render_run_wizard_test_with_choices_does_not_raise", "label": "test_render_run_wizard_test_with_choices_does_not_raise()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L136"}, {"id": "ui_test_wizard_run_page_test_render_run_wizard_with_empty_choices_does_not_raise", "label": "test_render_run_wizard_with_empty_choices_does_not_raise()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L146"}, {"id": "ui_test_wizard_run_page_test_wizard_run_step_titles_cover_every_step", "label": "test_wizard_run_step_titles_cover_every_step()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L155"}, {"id": "ui_test_wizard_run_page_rationale_1", "label": "Tests for the New Run Wizard helpers (gaps not covered by test_pages). ``test_p", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "exlab_wizard_api_app", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "exlab_wizard_ui_pages_wizard_run", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "ui_test_wizard_run_page_test_can_advance_template_step_requires_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "ui_test_wizard_run_page_test_can_advance_variables_step_always_true", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "ui_test_wizard_run_page_test_can_advance_preview_step_blocks_on_validator_findings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "ui_test_wizard_run_page_test_can_advance_confirm_step_always_true", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "ui_test_wizard_run_page_test_can_advance_default_step_is_project_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "ui_test_wizard_run_page_test_can_advance_readme_blocks_on_partial_core_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L68", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "ui_test_wizard_run_page_test_preview_path_segments_experimental_uses_run_prefix", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L98", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "ui_test_wizard_run_page_test_preview_path_segments_test_uses_testrun_prefix_and_folder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L109", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "ui_test_wizard_run_page_test_render_run_wizard_experimental_with_choices_does_not_raise", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L126", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "ui_test_wizard_run_page_test_render_run_wizard_test_with_choices_does_not_raise", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L136", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "ui_test_wizard_run_page_test_render_run_wizard_with_empty_choices_does_not_raise", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L146", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "target": "ui_test_wizard_run_page_test_wizard_run_step_titles_cover_every_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L155", "weight": 1.0}, {"source": "ui_test_wizard_run_page_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_run_page_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_wizard_run_page_test_can_advance_template_step_requires_selection", "callee": "RunWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L35"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_template_step_requires_selection", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L36"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_template_step_requires_selection", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L38"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_variables_step_always_true", "callee": "RunWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L42"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_variables_step_always_true", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L43"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_preview_step_blocks_on_validator_findings", "callee": "RunWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L47"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_preview_step_blocks_on_validator_findings", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L48"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_preview_step_blocks_on_validator_findings", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L50"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_confirm_step_always_true", "callee": "RunWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L54"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_confirm_step_always_true", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L55"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_default_step_is_project_equipment", "callee": "RunWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L59"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_default_step_is_project_equipment", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L61"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_default_step_is_project_equipment", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L63"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_default_step_is_project_equipment", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L65"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_readme_blocks_on_partial_core_fields", "callee": "RunWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L69"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_readme_blocks_on_partial_core_fields", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L71"}, {"caller_nid": "ui_test_wizard_run_page_test_can_advance_readme_blocks_on_partial_core_fields", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L73"}, {"caller_nid": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", "callee": "RunWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L82"}, {"caller_nid": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", "callee": "RunWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L83"}, {"caller_nid": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", "callee": "title_text", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L87"}, {"caller_nid": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", "callee": "title_text", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L87"}, {"caller_nid": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", "callee": "primary_button_color", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L88"}, {"caller_nid": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", "callee": "primary_button_color", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L89"}, {"caller_nid": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", "callee": "primary_button_label", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L90"}, {"caller_nid": "ui_test_wizard_run_page_test_preview_path_segments_experimental_uses_run_prefix", "callee": "RunWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L99"}, {"caller_nid": "ui_test_wizard_run_page_test_preview_path_segments_experimental_uses_run_prefix", "callee": "preview_path_segments", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L100"}, {"caller_nid": "ui_test_wizard_run_page_test_preview_path_segments_test_uses_testrun_prefix_and_folder", "callee": "RunWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L110"}, {"caller_nid": "ui_test_wizard_run_page_test_preview_path_segments_test_uses_testrun_prefix_and_folder", "callee": "preview_path_segments", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L115"}, {"caller_nid": "ui_test_wizard_run_page_test_render_run_wizard_experimental_with_choices_does_not_raise", "callee": "render_run_wizard", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L127"}, {"caller_nid": "ui_test_wizard_run_page_test_render_run_wizard_experimental_with_choices_does_not_raise", "callee": "RunWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L128"}, {"caller_nid": "ui_test_wizard_run_page_test_render_run_wizard_test_with_choices_does_not_raise", "callee": "render_run_wizard", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L137"}, {"caller_nid": "ui_test_wizard_run_page_test_render_run_wizard_test_with_choices_does_not_raise", "callee": "RunWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L138"}, {"caller_nid": "ui_test_wizard_run_page_test_render_run_wizard_with_empty_choices_does_not_raise", "callee": "render_run_wizard", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L147"}, {"caller_nid": "ui_test_wizard_run_page_test_render_run_wizard_with_empty_choices_does_not_raise", "callee": "RunWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L148"}, {"caller_nid": "ui_test_wizard_run_page_test_wizard_run_step_titles_cover_every_step", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L156"}, {"caller_nid": "ui_test_wizard_run_page_test_wizard_run_step_titles_cover_every_step", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py", "source_location": "L156"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/910c5650317e2d35833326f6441b6a88d74ede341919e9479a574a7f0c0d633d.json b/graphify-out/cache/ast/910c5650317e2d35833326f6441b6a88d74ede341919e9479a574a7f0c0d633d.json new file mode 100644 index 0000000..103d186 --- /dev/null +++ b/graphify-out/cache/ast/910c5650317e2d35833326f6441b6a88d74ede341919e9479a574a7f0c0d633d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_templates_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/templates/__init__.py", "source_location": "L1"}, {"id": "templates_init_rationale_1", "label": "Copier template fixtures for the test suite.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/templates/__init__.py", "source_location": "L1"}], "edges": [{"source": "templates_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_templates_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/templates/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/91da7f62299eaf04a75cb5bbfbee44abd82f5208996d06b66eb1d041ff8563f2.json b/graphify-out/cache/ast/91da7f62299eaf04a75cb5bbfbee44abd82f5208996d06b66eb1d041ff8563f2.json new file mode 100644 index 0000000..4c53ea3 --- /dev/null +++ b/graphify-out/cache/ast/91da7f62299eaf04a75cb5bbfbee44abd82f5208996d06b66eb1d041ff8563f2.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "label": "test_components.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L1"}, {"id": "ui_test_components_test_mode_badge_test_uses_warning_token", "label": "test_mode_badge_test_uses_warning_token()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L37"}, {"id": "ui_test_components_test_mode_badge_experimental_uses_navy", "label": "test_mode_badge_experimental_uses_navy()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L45"}, {"id": "ui_test_components_test_mode_badge_none_falls_back_to_navy_with_placeholder", "label": "test_mode_badge_none_falls_back_to_navy_with_placeholder()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L52"}, {"id": "ui_test_components_test_mode_badge_accepts_label_override", "label": "test_mode_badge_accepts_label_override()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L60"}, {"id": "ui_test_components_test_test_run_badge_uses_orange_aa_text", "label": "test_test_run_badge_uses_orange_aa_text()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L72"}, {"id": "ui_test_components_test_override_badge_active_uses_sky_aa_text", "label": "test_override_badge_active_uses_sky_aa_text()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L80"}, {"id": "ui_test_components_test_override_badge_inactive_uses_muted", "label": "test_override_badge_inactive_uses_muted()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L88"}, {"id": "ui_test_components_test_sync_status_pending_uses_muted", "label": "test_sync_status_pending_uses_muted()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L100"}, {"id": "ui_test_components_test_sync_status_synced_uses_success", "label": "test_sync_status_synced_uses_success()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L106"}, {"id": "ui_test_components_test_sync_status_failed_uses_danger", "label": "test_sync_status_failed_uses_danger()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L111"}, {"id": "ui_test_components_test_sync_status_blocked_uses_warning", "label": "test_sync_status_blocked_uses_warning()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L116"}, {"id": "ui_test_components_test_sync_status_override_uses_info", "label": "test_sync_status_override_uses_info()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L123"}, {"id": "ui_test_components_test_sync_status_cleaned_uses_success_with_cloud_icon", "label": "test_sync_status_cleaned_uses_success_with_cloud_icon()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L128"}, {"id": "ui_test_components_test_sync_status_acquiring_uses_muted", "label": "test_sync_status_acquiring_uses_muted()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L136"}, {"id": "ui_test_components_test_sync_status_syncing_uses_info", "label": "test_sync_status_syncing_uses_info()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L145"}, {"id": "ui_test_components_test_sync_status_on_nas_uses_muted_cloud", "label": "test_sync_status_on_nas_uses_muted_cloud()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L154"}, {"id": "ui_test_components_test_sync_status_retrying_with_counter", "label": "test_sync_status_retrying_with_counter()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L163"}, {"id": "ui_test_components_test_sync_status_unknown_raises", "label": "test_sync_status_unknown_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L171"}, {"id": "ui_test_components_test_session_progress_phase_order_is_canonical", "label": "test_session_progress_phase_order_is_canonical()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L183"}, {"id": "ui_test_components_test_apply_frame_advances_phase_and_marks_predecessors_done", "label": "test_apply_frame_advances_phase_and_marks_predecessors_done()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L199"}, {"id": "ui_test_components_test_apply_frame_progress_sets_plugin_sub_row", "label": "test_apply_frame_progress_sets_plugin_sub_row()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L207"}, {"id": "ui_test_components_test_apply_frame_done_completes_all_phases", "label": "test_apply_frame_done_completes_all_phases()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L217"}, {"id": "ui_test_components_test_apply_frame_ignores_unknown_kinds_and_phases", "label": "test_apply_frame_ignores_unknown_kinds_and_phases()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L224"}, {"id": "ui_test_components_test_session_progress_active_phase_marked", "label": "test_session_progress_active_phase_marked()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L231"}, {"id": "ui_test_components_test_session_progress_plugin_sub_row_present", "label": "test_session_progress_plugin_sub_row_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L244"}, {"id": "ui_test_components_test_credential_field_states_default_to_not_set", "label": "test_credential_field_states_default_to_not_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L266"}, {"id": "ui_test_components_test_credential_field_set_state_offers_replace_and_clear", "label": "test_credential_field_set_state_offers_replace_and_clear()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L273"}, {"id": "ui_test_components_test_credential_field_editing_offers_save_and_cancel", "label": "test_credential_field_editing_offers_save_and_cancel()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L280"}, {"id": "ui_test_components_test_begin_edit_from_not_set_enters_editing_remembering_not_set", "label": "test_begin_edit_from_not_set_enters_editing_remembering_not_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L291"}, {"id": "ui_test_components_test_begin_edit_from_set_remembers_set_as_resting", "label": "test_begin_edit_from_set_remembers_set_as_resting()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L301"}, {"id": "ui_test_components_test_cancel_edit_returns_to_remembered_resting_state", "label": "test_cancel_edit_returns_to_remembered_resting_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L311"}, {"id": "ui_test_components_test_cancel_edit_from_fresh_edit_returns_to_not_set", "label": "test_cancel_edit_from_fresh_edit_returns_to_not_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L318"}, {"id": "ui_test_components_test_commit_edit_with_value_transitions_to_set_and_signals_save", "label": "test_commit_edit_with_value_transitions_to_set_and_signals_save()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L325"}, {"id": "ui_test_components_test_commit_edit_with_empty_value_stays_editing_and_skips_save", "label": "test_commit_edit_with_empty_value_stays_editing_and_skips_save()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L333"}, {"id": "ui_test_components_test_clear_credential_returns_to_not_set", "label": "test_clear_credential_returns_to_not_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L342"}, {"id": "ui_test_components_test_connection_panel_hidden_when_no_result", "label": "test_connection_panel_hidden_when_no_result()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L354"}, {"id": "ui_test_components_test_connection_panel_visible_after_result", "label": "test_connection_panel_visible_after_result()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L359"}, {"id": "ui_test_components_test_connection_panel_failure_color_is_danger", "label": "test_connection_panel_failure_color_is_danger()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L371"}, {"id": "ui_test_components_test_connection_panel_stale_appends_disclaimer", "label": "test_connection_panel_stale_appends_disclaimer()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L381"}, {"id": "ui_test_components_test_filter_chips_initial_state_respects_default_on", "label": "test_filter_chips_initial_state_respects_default_on()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L393"}, {"id": "ui_test_components_test_filter_chips_toggle_flips_membership", "label": "test_filter_chips_toggle_flips_membership()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L403"}, {"id": "ui_test_components_test_filter_chips_list_active_preserves_definition_order", "label": "test_filter_chips_list_active_preserves_definition_order()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L412"}, {"id": "ui_test_components_test_status_bar_segment_normal_uses_muted", "label": "test_status_bar_segment_normal_uses_muted()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L426"}, {"id": "ui_test_components_test_status_bar_segment_warning_prefix_glyph", "label": "test_status_bar_segment_warning_prefix_glyph()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L432"}, {"id": "ui_test_components_test_status_bar_segment_danger_prefix_glyph", "label": "test_status_bar_segment_danger_prefix_glyph()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L440"}, {"id": "ui_test_components_test_banner_stack_shows_visible_and_overflow_split", "label": "test_banner_stack_shows_visible_and_overflow_split()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L453"}, {"id": "ui_test_components_test_operations_modal_columns_match_spec", "label": "test_operations_modal_columns_match_spec()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L489"}, {"id": "ui_test_components_test_operations_modal_sort_suspended_first_oldest_first", "label": "test_operations_modal_sort_suspended_first_oldest_first()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L502"}, {"id": "ui_test_components_test_operations_modal_state_glyph_known_states", "label": "test_operations_modal_state_glyph_known_states()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L535"}, {"id": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", "label": "test_operation_row_from_session_maps_state_buckets_and_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L541"}, {"id": "ui_test_components_test_collect_default_values_seeds_from_declared_defaults", "label": "test_collect_default_values_seeds_from_declared_defaults()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L593"}, {"id": "ui_test_components_test_input_required_dialog_builds_without_raising", "label": "test_input_required_dialog_builds_without_raising()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L607"}, {"id": "ui_test_components_test_bandwidth_window_validates_from_before_to", "label": "test_bandwidth_window_validates_from_before_to()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L629"}, {"id": "ui_test_components_test_bandwidth_window_passes_when_correct", "label": "test_bandwidth_window_passes_when_correct()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L636"}, {"id": "ui_test_components_test_bandwidth_overlap_detected_for_shared_day_and_time", "label": "test_bandwidth_overlap_detected_for_shared_day_and_time()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L643"}, {"id": "ui_test_components_test_bandwidth_no_overlap_for_disjoint_days", "label": "test_bandwidth_no_overlap_for_disjoint_days()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L649"}, {"id": "ui_test_components_test_validation_summary_hard_findings_use_warning", "label": "test_validation_summary_hard_findings_use_warning()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L660"}, {"id": "ui_test_components_test_validation_summary_override_takes_priority", "label": "test_validation_summary_override_takes_priority()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L667"}, {"id": "ui_test_components_test_validation_summary_first_two_excerpts_returned_in_payload", "label": "test_validation_summary_first_two_excerpts_returned_in_payload()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L679"}, {"id": "ui_test_components_test_validation_summary_override_line_includes_attribution", "label": "test_validation_summary_override_line_includes_attribution()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L693"}, {"id": "ui_test_components_test_tree_filter_archived_default_off_hides_archived", "label": "test_tree_filter_archived_default_off_hides_archived()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L714"}, {"id": "ui_test_components_test_tree_filter_archived_chip_on_shows_archived", "label": "test_tree_filter_archived_chip_on_shows_archived()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L725"}, {"id": "ui_test_components_test_tree_filter_deleted_always_shown", "label": "test_tree_filter_deleted_always_shown()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L734"}, {"id": "ui_test_components_test_tree_filter_test_runs_chip_off_hides_test_runs", "label": "test_tree_filter_test_runs_chip_off_hides_test_runs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L745"}, {"id": "ui_test_components_test_tree_build_nodes_yields_canonical_kinds", "label": "test_tree_build_nodes_yields_canonical_kinds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L753"}, {"id": "ui_test_components_test_tree_test_run_carries_test_badge", "label": "test_tree_test_run_carries_test_badge()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L766"}, {"id": "ui_test_components_test_tree_run_node_propagates_sync_status", "label": "test_tree_run_node_propagates_sync_status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L781"}, {"id": "ui_test_components_test_to_nicegui_nodes_cleared_run_uses_cloud_icon", "label": "test_to_nicegui_nodes_cleared_run_uses_cloud_icon()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L798"}, {"id": "ui_test_components_test_to_nicegui_nodes_local_run_uses_local_icon", "label": "test_to_nicegui_nodes_local_run_uses_local_icon()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L823"}, {"id": "ui_test_components_test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon", "label": "test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L849"}, {"id": "ui_test_components_test_equipment_node_relay_flag_emits_received_equipment_kind", "label": "test_equipment_node_relay_flag_emits_received_equipment_kind()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L871"}, {"id": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", "label": "test_to_nicegui_nodes_emits_testid_kind()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L885"}, {"id": "ui_test_components_test_slot_template_emits_testid_data_node_id_and_context_menus", "label": "test_slot_template_emits_testid_data_node_id_and_context_menus()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L909"}, {"id": "ui_test_components_test_factories_smoke_outside_nicegui", "label": "test_factories_smoke_outside_nicegui()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L949"}, {"id": "ui_test_components_test_no_stray_ui_notify_calls_in_ui_package", "label": "test_no_stray_ui_notify_calls_in_ui_package()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L982"}, {"id": "ui_test_components_rationale_1", "label": "Unit tests for the UI components. Each component exposes a pure-data ``*_props`", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L1"}, {"id": "ui_test_components_rationale_38", "label": "Test-mode badge maps to ``--color-warning`` (Frontend \u00a75.3).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L38"}, {"id": "ui_test_components_rationale_46", "label": "Experimental badge maps to ``--color-navy``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L46"}, {"id": "ui_test_components_rationale_53", "label": "A ``None`` run kind defaults to navy with a placeholder label.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L53"}, {"id": "ui_test_components_rationale_61", "label": "An explicit label overrides the default.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L61"}, {"id": "ui_test_components_rationale_73", "label": "The test-run pill uses the orange darkened-AA text variant.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L73"}, {"id": "ui_test_components_rationale_81", "label": "An active override pill uses the sky-blue AA text variant.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L81"}, {"id": "ui_test_components_rationale_89", "label": "An inactive override pill uses the muted gray.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L89"}, {"id": "ui_test_components_rationale_117", "label": "Blocked-by-validation maps to warning per Frontend \u00a72.1.4.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L117"}, {"id": "ui_test_components_rationale_129", "label": "Cleaned status (post-cleanup) reuses the success color with a cloud glyph.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L129"}, {"id": "ui_test_components_rationale_137", "label": "``acquiring`` (new file, still settling) uses the muted token.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L137"}, {"id": "ui_test_components_rationale_146", "label": "``syncing`` (settled, transferring) uses the info token.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L146"}, {"id": "ui_test_components_rationale_155", "label": "``on_nas`` (tombstone, local copy cleared) uses a muted cloud glyph.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L155"}, {"id": "ui_test_components_rationale_164", "label": "Retry counter renders as ``(N/M)`` (Frontend \u00a710.5.1).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L164"}, {"id": "ui_test_components_rationale_172", "label": "Unknown status values raise.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L172"}, {"id": "ui_test_components_rationale_184", "label": "The phase enum order matches Frontend \u00a710.1.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L184"}, {"id": "ui_test_components_rationale_232", "label": "The active phase has fraction 0.5 and ``is_active``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L232"}, {"id": "ui_test_components_rationale_245", "label": "When ``running_plugins`` carries N/M, a sub-row dict is emitted. We assert", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L245"}, {"id": "ui_test_components_rationale_292", "label": "Clicking *Set* opens the editor; *Cancel* must return to Not set.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L292"}, {"id": "ui_test_components_rationale_302", "label": "Clicking *Replace* opens the editor; *Cancel* must return to Set.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L302"}, {"id": "ui_test_components_rationale_334", "label": "An empty input has nothing to persist -- stay in the editor.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L334"}, {"id": "ui_test_components_rationale_454", "label": "Banners exceed the 2-cap; overflow is reported.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L454"}, {"id": "ui_test_components_rationale_503", "label": "Suspended rows sort first, oldest started_at first (\u00a79.5).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L503"}, {"id": "ui_test_components_rationale_715", "label": "Archived projects are hidden by default.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L715"}, {"id": "ui_test_components_rationale_735", "label": "Deleted-from-LIMS rows always render (Frontend \u00a73.5.3).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L735"}, {"id": "ui_test_components_rationale_782", "label": "``RunNode.sync_status`` flows through to the resulting ``TreeNode``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L782"}, {"id": "ui_test_components_rationale_799", "label": "A ``cleared`` run row carries the cloud-icon URL and its sync_status. Opera", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L799"}, {"id": "ui_test_components_rationale_824", "label": "Any non-``cleaned`` sync status (or unset) maps to the local-icon URL.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L824"}, {"id": "ui_test_components_rationale_850", "label": "Equipment and project rows render without the per-row sync icon.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L850"}, {"id": "ui_test_components_rationale_872", "label": "An ``EquipmentNode(relay=True)`` builds a ``received_equipment`` row.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L872"}, {"id": "ui_test_components_rationale_886", "label": "Each row carries a ``testid_kind`` matching the Playwright contract.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L886"}, {"id": "ui_test_components_rationale_910", "label": "The ``default-header`` template carries the per-row anchors the Playwright f", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L910"}, {"id": "ui_test_components_rationale_950", "label": "Each factory emits a dict (or NiceGUI element) without crashing. The factor", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L950"}, {"id": "ui_test_components_rationale_983", "label": "The pre-commit ``no-direct-ui-notify`` rule is mirrored in tests. Any call", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L983"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "exlab_wizard_ui_components", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_mode_badge_test_uses_warning_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_mode_badge_experimental_uses_navy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_mode_badge_none_falls_back_to_navy_with_placeholder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_mode_badge_accepts_label_override", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_test_run_badge_uses_orange_aa_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_override_badge_active_uses_sky_aa_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L80", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_override_badge_inactive_uses_muted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L88", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_sync_status_pending_uses_muted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L100", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_sync_status_synced_uses_success", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L106", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_sync_status_failed_uses_danger", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L111", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_sync_status_blocked_uses_warning", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L116", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_sync_status_override_uses_info", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L123", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_sync_status_cleaned_uses_success_with_cloud_icon", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L128", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_sync_status_acquiring_uses_muted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L136", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_sync_status_syncing_uses_info", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L145", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_sync_status_on_nas_uses_muted_cloud", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L154", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_sync_status_retrying_with_counter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L163", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_sync_status_unknown_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L171", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_session_progress_phase_order_is_canonical", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L183", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_apply_frame_advances_phase_and_marks_predecessors_done", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L199", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_apply_frame_progress_sets_plugin_sub_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L207", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_apply_frame_done_completes_all_phases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L217", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_apply_frame_ignores_unknown_kinds_and_phases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L224", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_session_progress_active_phase_marked", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L231", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_session_progress_plugin_sub_row_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L244", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_credential_field_states_default_to_not_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L266", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_credential_field_set_state_offers_replace_and_clear", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L273", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_credential_field_editing_offers_save_and_cancel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L280", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_begin_edit_from_not_set_enters_editing_remembering_not_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L291", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_begin_edit_from_set_remembers_set_as_resting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L301", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_cancel_edit_returns_to_remembered_resting_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L311", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_cancel_edit_from_fresh_edit_returns_to_not_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L318", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_commit_edit_with_value_transitions_to_set_and_signals_save", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L325", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_commit_edit_with_empty_value_stays_editing_and_skips_save", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L333", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_clear_credential_returns_to_not_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L342", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_connection_panel_hidden_when_no_result", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L354", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_connection_panel_visible_after_result", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L359", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_connection_panel_failure_color_is_danger", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L371", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_connection_panel_stale_appends_disclaimer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L381", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_filter_chips_initial_state_respects_default_on", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L393", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_filter_chips_toggle_flips_membership", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L403", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_filter_chips_list_active_preserves_definition_order", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L412", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_status_bar_segment_normal_uses_muted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L426", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_status_bar_segment_warning_prefix_glyph", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L432", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_status_bar_segment_danger_prefix_glyph", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L440", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_banner_stack_shows_visible_and_overflow_split", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L453", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_operations_modal_columns_match_spec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L489", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_operations_modal_sort_suspended_first_oldest_first", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L502", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_operations_modal_state_glyph_known_states", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L535", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L541", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_collect_default_values_seeds_from_declared_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L593", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_input_required_dialog_builds_without_raising", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L607", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_bandwidth_window_validates_from_before_to", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L629", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_bandwidth_window_passes_when_correct", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L636", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_bandwidth_overlap_detected_for_shared_day_and_time", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L643", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_bandwidth_no_overlap_for_disjoint_days", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L649", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_validation_summary_hard_findings_use_warning", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L660", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_validation_summary_override_takes_priority", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L667", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_validation_summary_first_two_excerpts_returned_in_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L679", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_validation_summary_override_line_includes_attribution", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L693", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_tree_filter_archived_default_off_hides_archived", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L714", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_tree_filter_archived_chip_on_shows_archived", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L725", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_tree_filter_deleted_always_shown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L734", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_tree_filter_test_runs_chip_off_hides_test_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L745", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_tree_build_nodes_yields_canonical_kinds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L753", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_tree_test_run_carries_test_badge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L766", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_tree_run_node_propagates_sync_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L781", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_to_nicegui_nodes_cleared_run_uses_cloud_icon", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L798", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_to_nicegui_nodes_local_run_uses_local_icon", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L823", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L849", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_equipment_node_relay_flag_emits_received_equipment_kind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L871", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L885", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_slot_template_emits_testid_data_node_id_and_context_menus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L909", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_factories_smoke_outside_nicegui", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L949", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "target": "ui_test_components_test_no_stray_ui_notify_calls_in_ui_package", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L982", "weight": 1.0}, {"source": "ui_test_components_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_components_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_components_rationale_38", "target": "ui_test_components_test_mode_badge_test_uses_warning_token", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L38", "weight": 1.0}, {"source": "ui_test_components_rationale_46", "target": "ui_test_components_test_mode_badge_experimental_uses_navy", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L46", "weight": 1.0}, {"source": "ui_test_components_rationale_53", "target": "ui_test_components_test_mode_badge_none_falls_back_to_navy_with_placeholder", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L53", "weight": 1.0}, {"source": "ui_test_components_rationale_61", "target": "ui_test_components_test_mode_badge_accepts_label_override", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L61", "weight": 1.0}, {"source": "ui_test_components_rationale_73", "target": "ui_test_components_test_test_run_badge_uses_orange_aa_text", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L73", "weight": 1.0}, {"source": "ui_test_components_rationale_81", "target": "ui_test_components_test_override_badge_active_uses_sky_aa_text", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L81", "weight": 1.0}, {"source": "ui_test_components_rationale_89", "target": "ui_test_components_test_override_badge_inactive_uses_muted", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L89", "weight": 1.0}, {"source": "ui_test_components_rationale_117", "target": "ui_test_components_test_sync_status_blocked_uses_warning", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L117", "weight": 1.0}, {"source": "ui_test_components_rationale_129", "target": "ui_test_components_test_sync_status_cleaned_uses_success_with_cloud_icon", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L129", "weight": 1.0}, {"source": "ui_test_components_rationale_137", "target": "ui_test_components_test_sync_status_acquiring_uses_muted", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L137", "weight": 1.0}, {"source": "ui_test_components_rationale_146", "target": "ui_test_components_test_sync_status_syncing_uses_info", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L146", "weight": 1.0}, {"source": "ui_test_components_rationale_155", "target": "ui_test_components_test_sync_status_on_nas_uses_muted_cloud", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L155", "weight": 1.0}, {"source": "ui_test_components_rationale_164", "target": "ui_test_components_test_sync_status_retrying_with_counter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L164", "weight": 1.0}, {"source": "ui_test_components_rationale_172", "target": "ui_test_components_test_sync_status_unknown_raises", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L172", "weight": 1.0}, {"source": "ui_test_components_rationale_184", "target": "ui_test_components_test_session_progress_phase_order_is_canonical", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L184", "weight": 1.0}, {"source": "ui_test_components_rationale_232", "target": "ui_test_components_test_session_progress_active_phase_marked", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L232", "weight": 1.0}, {"source": "ui_test_components_rationale_245", "target": "ui_test_components_test_session_progress_plugin_sub_row_present", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L245", "weight": 1.0}, {"source": "ui_test_components_rationale_292", "target": "ui_test_components_test_begin_edit_from_not_set_enters_editing_remembering_not_set", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L292", "weight": 1.0}, {"source": "ui_test_components_rationale_302", "target": "ui_test_components_test_begin_edit_from_set_remembers_set_as_resting", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L302", "weight": 1.0}, {"source": "ui_test_components_rationale_334", "target": "ui_test_components_test_commit_edit_with_empty_value_stays_editing_and_skips_save", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L334", "weight": 1.0}, {"source": "ui_test_components_rationale_454", "target": "ui_test_components_test_banner_stack_shows_visible_and_overflow_split", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L454", "weight": 1.0}, {"source": "ui_test_components_rationale_503", "target": "ui_test_components_test_operations_modal_sort_suspended_first_oldest_first", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L503", "weight": 1.0}, {"source": "ui_test_components_rationale_715", "target": "ui_test_components_test_tree_filter_archived_default_off_hides_archived", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L715", "weight": 1.0}, {"source": "ui_test_components_rationale_735", "target": "ui_test_components_test_tree_filter_deleted_always_shown", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L735", "weight": 1.0}, {"source": "ui_test_components_rationale_782", "target": "ui_test_components_test_tree_run_node_propagates_sync_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L782", "weight": 1.0}, {"source": "ui_test_components_rationale_799", "target": "ui_test_components_test_to_nicegui_nodes_cleared_run_uses_cloud_icon", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L799", "weight": 1.0}, {"source": "ui_test_components_rationale_824", "target": "ui_test_components_test_to_nicegui_nodes_local_run_uses_local_icon", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L824", "weight": 1.0}, {"source": "ui_test_components_rationale_850", "target": "ui_test_components_test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L850", "weight": 1.0}, {"source": "ui_test_components_rationale_872", "target": "ui_test_components_test_equipment_node_relay_flag_emits_received_equipment_kind", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L872", "weight": 1.0}, {"source": "ui_test_components_rationale_886", "target": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L886", "weight": 1.0}, {"source": "ui_test_components_rationale_910", "target": "ui_test_components_test_slot_template_emits_testid_data_node_id_and_context_menus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L910", "weight": 1.0}, {"source": "ui_test_components_rationale_950", "target": "ui_test_components_test_factories_smoke_outside_nicegui", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L950", "weight": 1.0}, {"source": "ui_test_components_rationale_983", "target": "ui_test_components_test_no_stray_ui_notify_calls_in_ui_package", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L983", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_components_test_mode_badge_test_uses_warning_token", "callee": "mode_badge_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L40"}, {"caller_nid": "ui_test_components_test_mode_badge_experimental_uses_navy", "callee": "mode_badge_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L48"}, {"caller_nid": "ui_test_components_test_mode_badge_none_falls_back_to_navy_with_placeholder", "callee": "mode_badge_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L55"}, {"caller_nid": "ui_test_components_test_mode_badge_accepts_label_override", "callee": "mode_badge_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L63"}, {"caller_nid": "ui_test_components_test_test_run_badge_uses_orange_aa_text", "callee": "test_run_badge_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L75"}, {"caller_nid": "ui_test_components_test_override_badge_active_uses_sky_aa_text", "callee": "override_badge_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L83"}, {"caller_nid": "ui_test_components_test_override_badge_inactive_uses_muted", "callee": "override_badge_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L91"}, {"caller_nid": "ui_test_components_test_override_badge_inactive_uses_muted", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L92"}, {"caller_nid": "ui_test_components_test_sync_status_pending_uses_muted", "callee": "sync_status_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L101"}, {"caller_nid": "ui_test_components_test_sync_status_synced_uses_success", "callee": "sync_status_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L107"}, {"caller_nid": "ui_test_components_test_sync_status_failed_uses_danger", "callee": "sync_status_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L112"}, {"caller_nid": "ui_test_components_test_sync_status_blocked_uses_warning", "callee": "sync_status_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L119"}, {"caller_nid": "ui_test_components_test_sync_status_override_uses_info", "callee": "sync_status_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L124"}, {"caller_nid": "ui_test_components_test_sync_status_cleaned_uses_success_with_cloud_icon", "callee": "sync_status_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L131"}, {"caller_nid": "ui_test_components_test_sync_status_acquiring_uses_muted", "callee": "sync_status_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L139"}, {"caller_nid": "ui_test_components_test_sync_status_syncing_uses_info", "callee": "sync_status_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L148"}, {"caller_nid": "ui_test_components_test_sync_status_on_nas_uses_muted_cloud", "callee": "sync_status_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L157"}, {"caller_nid": "ui_test_components_test_sync_status_retrying_with_counter", "callee": "sync_status_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L166"}, {"caller_nid": "ui_test_components_test_sync_status_unknown_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L174"}, {"caller_nid": "ui_test_components_test_sync_status_unknown_raises", "callee": "sync_status_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L175"}, {"caller_nid": "ui_test_components_test_session_progress_phase_order_is_canonical", "callee": "compute_phase_rows", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L186"}, {"caller_nid": "ui_test_components_test_apply_frame_advances_phase_and_marks_predecessors_done", "callee": "SessionProgressState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L200"}, {"caller_nid": "ui_test_components_test_apply_frame_advances_phase_and_marks_predecessors_done", "callee": "apply_frame", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L201"}, {"caller_nid": "ui_test_components_test_apply_frame_progress_sets_plugin_sub_row", "callee": "SessionProgressState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L208"}, {"caller_nid": "ui_test_components_test_apply_frame_progress_sets_plugin_sub_row", "callee": "apply_frame", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L209"}, {"caller_nid": "ui_test_components_test_apply_frame_done_completes_all_phases", "callee": "SessionProgressState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L218"}, {"caller_nid": "ui_test_components_test_apply_frame_done_completes_all_phases", "callee": "apply_frame", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L219"}, {"caller_nid": "ui_test_components_test_apply_frame_done_completes_all_phases", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L220"}, {"caller_nid": "ui_test_components_test_apply_frame_done_completes_all_phases", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L220"}, {"caller_nid": "ui_test_components_test_apply_frame_ignores_unknown_kinds_and_phases", "callee": "SessionProgressState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L225"}, {"caller_nid": "ui_test_components_test_apply_frame_ignores_unknown_kinds_and_phases", "callee": "apply_frame", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L226"}, {"caller_nid": "ui_test_components_test_apply_frame_ignores_unknown_kinds_and_phases", "callee": "apply_frame", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L227"}, {"caller_nid": "ui_test_components_test_session_progress_active_phase_marked", "callee": "compute_phase_rows", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L234"}, {"caller_nid": "ui_test_components_test_session_progress_plugin_sub_row_present", "callee": "compute_phase_rows", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L252"}, {"caller_nid": "ui_test_components_test_credential_field_states_default_to_not_set", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L267"}, {"caller_nid": "ui_test_components_test_credential_field_states_default_to_not_set", "callee": "credential_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L268"}, {"caller_nid": "ui_test_components_test_credential_field_set_state_offers_replace_and_clear", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L274"}, {"caller_nid": "ui_test_components_test_credential_field_set_state_offers_replace_and_clear", "callee": "credential_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L275"}, {"caller_nid": "ui_test_components_test_credential_field_editing_offers_save_and_cancel", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L281"}, {"caller_nid": "ui_test_components_test_credential_field_editing_offers_save_and_cancel", "callee": "credential_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L282"}, {"caller_nid": "ui_test_components_test_begin_edit_from_not_set_enters_editing_remembering_not_set", "callee": "begin_edit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L294"}, {"caller_nid": "ui_test_components_test_begin_edit_from_not_set_enters_editing_remembering_not_set", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L295"}, {"caller_nid": "ui_test_components_test_begin_edit_from_set_remembers_set_as_resting", "callee": "begin_edit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L304"}, {"caller_nid": "ui_test_components_test_begin_edit_from_set_remembers_set_as_resting", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L305"}, {"caller_nid": "ui_test_components_test_cancel_edit_returns_to_remembered_resting_state", "callee": "begin_edit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L312"}, {"caller_nid": "ui_test_components_test_cancel_edit_returns_to_remembered_resting_state", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L313"}, {"caller_nid": "ui_test_components_test_cancel_edit_returns_to_remembered_resting_state", "callee": "cancel_edit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L315"}, {"caller_nid": "ui_test_components_test_cancel_edit_from_fresh_edit_returns_to_not_set", "callee": "begin_edit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L319"}, {"caller_nid": "ui_test_components_test_cancel_edit_from_fresh_edit_returns_to_not_set", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L320"}, {"caller_nid": "ui_test_components_test_cancel_edit_from_fresh_edit_returns_to_not_set", "callee": "cancel_edit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L322"}, {"caller_nid": "ui_test_components_test_commit_edit_with_value_transitions_to_set_and_signals_save", "callee": "commit_edit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L326"}, {"caller_nid": "ui_test_components_test_commit_edit_with_value_transitions_to_set_and_signals_save", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L327"}, {"caller_nid": "ui_test_components_test_commit_edit_with_empty_value_stays_editing_and_skips_save", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L336"}, {"caller_nid": "ui_test_components_test_commit_edit_with_empty_value_stays_editing_and_skips_save", "callee": "commit_edit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L337"}, {"caller_nid": "ui_test_components_test_clear_credential_returns_to_not_set", "callee": "clear_credential", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L343"}, {"caller_nid": "ui_test_components_test_clear_credential_returns_to_not_set", "callee": "CredentialState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L344"}, {"caller_nid": "ui_test_components_test_connection_panel_hidden_when_no_result", "callee": "panel_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L355"}, {"caller_nid": "ui_test_components_test_connection_panel_visible_after_result", "callee": "TestConnectionResult", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L360"}, {"caller_nid": "ui_test_components_test_connection_panel_visible_after_result", "callee": "panel_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L366"}, {"caller_nid": "ui_test_components_test_connection_panel_failure_color_is_danger", "callee": "TestConnectionResult", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L372"}, {"caller_nid": "ui_test_components_test_connection_panel_failure_color_is_danger", "callee": "panel_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L378"}, {"caller_nid": "ui_test_components_test_connection_panel_stale_appends_disclaimer", "callee": "TestConnectionResult", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L382"}, {"caller_nid": "ui_test_components_test_connection_panel_stale_appends_disclaimer", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L385"}, {"caller_nid": "ui_test_components_test_connection_panel_stale_appends_disclaimer", "callee": "panel_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L385"}, {"caller_nid": "ui_test_components_test_filter_chips_initial_state_respects_default_on", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L395"}, {"caller_nid": "ui_test_components_test_filter_chips_initial_state_respects_default_on", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L396"}, {"caller_nid": "ui_test_components_test_filter_chips_initial_state_respects_default_on", "callee": "initial_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L398"}, {"caller_nid": "ui_test_components_test_filter_chips_initial_state_respects_default_on", "callee": "is_active", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L399"}, {"caller_nid": "ui_test_components_test_filter_chips_initial_state_respects_default_on", "callee": "is_active", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L400"}, {"caller_nid": "ui_test_components_test_filter_chips_toggle_flips_membership", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L404"}, {"caller_nid": "ui_test_components_test_filter_chips_toggle_flips_membership", "callee": "initial_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L405"}, {"caller_nid": "ui_test_components_test_filter_chips_toggle_flips_membership", "callee": "toggle", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L406"}, {"caller_nid": "ui_test_components_test_filter_chips_toggle_flips_membership", "callee": "is_active", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L407"}, {"caller_nid": "ui_test_components_test_filter_chips_toggle_flips_membership", "callee": "toggle", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L408"}, {"caller_nid": "ui_test_components_test_filter_chips_toggle_flips_membership", "callee": "is_active", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L409"}, {"caller_nid": "ui_test_components_test_filter_chips_list_active_preserves_definition_order", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L414"}, {"caller_nid": "ui_test_components_test_filter_chips_list_active_preserves_definition_order", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L415"}, {"caller_nid": "ui_test_components_test_filter_chips_list_active_preserves_definition_order", "callee": "initial_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L417"}, {"caller_nid": "ui_test_components_test_filter_chips_list_active_preserves_definition_order", "callee": "list_active", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L418"}, {"caller_nid": "ui_test_components_test_status_bar_segment_normal_uses_muted", "callee": "segment_spec", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L427"}, {"caller_nid": "ui_test_components_test_status_bar_segment_warning_prefix_glyph", "callee": "segment_spec", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L433"}, {"caller_nid": "ui_test_components_test_status_bar_segment_danger_prefix_glyph", "callee": "segment_spec", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L441"}, {"caller_nid": "ui_test_components_test_banner_stack_shows_visible_and_overflow_split", "callee": "reset_for_tests", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L459"}, {"caller_nid": "ui_test_components_test_banner_stack_shows_visible_and_overflow_split", "callee": "show_banner", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L460"}, {"caller_nid": "ui_test_components_test_banner_stack_shows_visible_and_overflow_split", "callee": "show_banner", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L466"}, {"caller_nid": "ui_test_components_test_banner_stack_shows_visible_and_overflow_split", "callee": "show_banner", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L472"}, {"caller_nid": "ui_test_components_test_banner_stack_shows_visible_and_overflow_split", "callee": "banner_stack_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L479"}, {"caller_nid": "ui_test_components_test_banner_stack_shows_visible_and_overflow_split", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L480"}, {"caller_nid": "ui_test_components_test_operations_modal_columns_match_spec", "callee": "operation_columns", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L490"}, {"caller_nid": "ui_test_components_test_operations_modal_sort_suspended_first_oldest_first", "callee": "OperationRow", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L506"}, {"caller_nid": "ui_test_components_test_operations_modal_sort_suspended_first_oldest_first", "callee": "OperationRow", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L514"}, {"caller_nid": "ui_test_components_test_operations_modal_sort_suspended_first_oldest_first", "callee": "OperationRow", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L522"}, {"caller_nid": "ui_test_components_test_operations_modal_sort_suspended_first_oldest_first", "callee": "sort_rows", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L531"}, {"caller_nid": "ui_test_components_test_operations_modal_state_glyph_known_states", "callee": "state_glyph", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L536"}, {"caller_nid": "ui_test_components_test_operations_modal_state_glyph_known_states", "callee": "state_glyph", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L537"}, {"caller_nid": "ui_test_components_test_operations_modal_state_glyph_known_states", "callee": "state_glyph", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L538"}, {"caller_nid": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L547"}, {"caller_nid": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L553"}, {"caller_nid": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L555"}, {"caller_nid": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", "callee": "from_session", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L559"}, {"caller_nid": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L564"}, {"caller_nid": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", "callee": "from_session", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L567"}, {"caller_nid": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L572"}, {"caller_nid": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", "callee": "from_session", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L575"}, {"caller_nid": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L579"}, {"caller_nid": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", "callee": "from_session", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L583"}, {"caller_nid": "ui_test_components_test_collect_default_values_seeds_from_declared_defaults", "callee": "collect_default_values", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L603"}, {"caller_nid": "ui_test_components_test_input_required_dialog_builds_without_raising", "callee": "input_required_dialog", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L610"}, {"caller_nid": "ui_test_components_test_bandwidth_window_validates_from_before_to", "callee": "ScheduleWindow", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L630"}, {"caller_nid": "ui_test_components_test_bandwidth_window_validates_from_before_to", "callee": "validate_window", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L633"}, {"caller_nid": "ui_test_components_test_bandwidth_window_passes_when_correct", "callee": "ScheduleWindow", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L637"}, {"caller_nid": "ui_test_components_test_bandwidth_window_passes_when_correct", "callee": "validate_window", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L640"}, {"caller_nid": "ui_test_components_test_bandwidth_overlap_detected_for_shared_day_and_time", "callee": "ScheduleWindow", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L644"}, {"caller_nid": "ui_test_components_test_bandwidth_overlap_detected_for_shared_day_and_time", "callee": "ScheduleWindow", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L645"}, {"caller_nid": "ui_test_components_test_bandwidth_overlap_detected_for_shared_day_and_time", "callee": "find_overlaps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L646"}, {"caller_nid": "ui_test_components_test_bandwidth_no_overlap_for_disjoint_days", "callee": "ScheduleWindow", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L650"}, {"caller_nid": "ui_test_components_test_bandwidth_no_overlap_for_disjoint_days", "callee": "ScheduleWindow", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L651"}, {"caller_nid": "ui_test_components_test_bandwidth_no_overlap_for_disjoint_days", "callee": "find_overlaps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L652"}, {"caller_nid": "ui_test_components_test_validation_summary_hard_findings_use_warning", "callee": "ValidationSummary", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L661"}, {"caller_nid": "ui_test_components_test_validation_summary_hard_findings_use_warning", "callee": "header_line", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L662"}, {"caller_nid": "ui_test_components_test_validation_summary_override_takes_priority", "callee": "ValidationSummary", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L668"}, {"caller_nid": "ui_test_components_test_validation_summary_override_takes_priority", "callee": "header_line", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L674"}, {"caller_nid": "ui_test_components_test_validation_summary_first_two_excerpts_returned_in_payload", "callee": "FindingExcerpt", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L681"}, {"caller_nid": "ui_test_components_test_validation_summary_first_two_excerpts_returned_in_payload", "callee": "FindingExcerpt", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L682"}, {"caller_nid": "ui_test_components_test_validation_summary_first_two_excerpts_returned_in_payload", "callee": "FindingExcerpt", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L683"}, {"caller_nid": "ui_test_components_test_validation_summary_first_two_excerpts_returned_in_payload", "callee": "ValidationSummary", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L685"}, {"caller_nid": "ui_test_components_test_validation_summary_first_two_excerpts_returned_in_payload", "callee": "overflow_line", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L686"}, {"caller_nid": "ui_test_components_test_validation_summary_first_two_excerpts_returned_in_payload", "callee": "header_line", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L689"}, {"caller_nid": "ui_test_components_test_validation_summary_override_line_includes_attribution", "callee": "ValidationSummary", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L694"}, {"caller_nid": "ui_test_components_test_validation_summary_override_line_includes_attribution", "callee": "override_line", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L703"}, {"caller_nid": "ui_test_components_test_tree_filter_archived_default_off_hides_archived", "callee": "ProjectNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L717"}, {"caller_nid": "ui_test_components_test_tree_filter_archived_default_off_hides_archived", "callee": "filter_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L722"}, {"caller_nid": "ui_test_components_test_tree_filter_archived_default_off_hides_archived", "callee": "TreeFilters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L722"}, {"caller_nid": "ui_test_components_test_tree_filter_archived_chip_on_shows_archived", "callee": "ProjectNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L726"}, {"caller_nid": "ui_test_components_test_tree_filter_archived_chip_on_shows_archived", "callee": "filter_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L731"}, {"caller_nid": "ui_test_components_test_tree_filter_archived_chip_on_shows_archived", "callee": "TreeFilters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L731"}, {"caller_nid": "ui_test_components_test_tree_filter_deleted_always_shown", "callee": "ProjectNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L737"}, {"caller_nid": "ui_test_components_test_tree_filter_deleted_always_shown", "callee": "filter_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L742"}, {"caller_nid": "ui_test_components_test_tree_filter_deleted_always_shown", "callee": "TreeFilters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L742"}, {"caller_nid": "ui_test_components_test_tree_filter_test_runs_chip_off_hides_test_runs", "callee": "RunNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L746"}, {"caller_nid": "ui_test_components_test_tree_filter_test_runs_chip_off_hides_test_runs", "callee": "filter_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L750"}, {"caller_nid": "ui_test_components_test_tree_filter_test_runs_chip_off_hides_test_runs", "callee": "TreeFilters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L750"}, {"caller_nid": "ui_test_components_test_tree_build_nodes_yields_canonical_kinds", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L754"}, {"caller_nid": "ui_test_components_test_tree_build_nodes_yields_canonical_kinds", "callee": "ProjectNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L755"}, {"caller_nid": "ui_test_components_test_tree_build_nodes_yields_canonical_kinds", "callee": "RunNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L756"}, {"caller_nid": "ui_test_components_test_tree_build_nodes_yields_canonical_kinds", "callee": "build_nodes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L757"}, {"caller_nid": "ui_test_components_test_tree_build_nodes_yields_canonical_kinds", "callee": "TreeFilters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L759"}, {"caller_nid": "ui_test_components_test_tree_test_run_carries_test_badge", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L767"}, {"caller_nid": "ui_test_components_test_tree_test_run_carries_test_badge", "callee": "ProjectNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L768"}, {"caller_nid": "ui_test_components_test_tree_test_run_carries_test_badge", "callee": "RunNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L769"}, {"caller_nid": "ui_test_components_test_tree_test_run_carries_test_badge", "callee": "build_nodes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L773"}, {"caller_nid": "ui_test_components_test_tree_test_run_carries_test_badge", "callee": "TreeFilters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L775"}, {"caller_nid": "ui_test_components_test_tree_run_node_propagates_sync_status", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L784"}, {"caller_nid": "ui_test_components_test_tree_run_node_propagates_sync_status", "callee": "ProjectNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L785"}, {"caller_nid": "ui_test_components_test_tree_run_node_propagates_sync_status", "callee": "RunNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L786"}, {"caller_nid": "ui_test_components_test_tree_run_node_propagates_sync_status", "callee": "build_nodes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L791"}, {"caller_nid": "ui_test_components_test_tree_run_node_propagates_sync_status", "callee": "TreeFilters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L793"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_cleared_run_uses_cloud_icon", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L805"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_cleared_run_uses_cloud_icon", "callee": "ProjectNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L806"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_cleared_run_uses_cloud_icon", "callee": "RunNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L807"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_cleared_run_uses_cloud_icon", "callee": "to_nicegui_nodes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L812"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_cleared_run_uses_cloud_icon", "callee": "build_nodes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L813"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_cleared_run_uses_cloud_icon", "callee": "TreeFilters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L815"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_local_run_uses_local_icon", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L826"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_local_run_uses_local_icon", "callee": "ProjectNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L827"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_local_run_uses_local_icon", "callee": "RunNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L828"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_local_run_uses_local_icon", "callee": "RunNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L833"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_local_run_uses_local_icon", "callee": "to_nicegui_nodes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L838"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_local_run_uses_local_icon", "callee": "build_nodes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L839"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_local_run_uses_local_icon", "callee": "TreeFilters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L841"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L852"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon", "callee": "ProjectNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L853"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon", "callee": "RunNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L854"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon", "callee": "to_nicegui_nodes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L855"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon", "callee": "build_nodes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L856"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon", "callee": "TreeFilters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L858"}, {"caller_nid": "ui_test_components_test_equipment_node_relay_flag_emits_received_equipment_kind", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L874"}, {"caller_nid": "ui_test_components_test_equipment_node_relay_flag_emits_received_equipment_kind", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L875"}, {"caller_nid": "ui_test_components_test_equipment_node_relay_flag_emits_received_equipment_kind", "callee": "build_nodes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L876"}, {"caller_nid": "ui_test_components_test_equipment_node_relay_flag_emits_received_equipment_kind", "callee": "TreeFilters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L878"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L888"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L889"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", "callee": "ProjectNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L890"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", "callee": "RunNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L891"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", "callee": "RunNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L892"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", "callee": "to_nicegui_nodes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L893"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", "callee": "build_nodes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L894"}, {"caller_nid": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", "callee": "TreeFilters", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L896"}, {"caller_nid": "ui_test_components_test_factories_smoke_outside_nicegui", "callee": "mode_badge", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L959"}, {"caller_nid": "ui_test_components_test_factories_smoke_outside_nicegui", "callee": "mode_badge", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L960"}, {"caller_nid": "ui_test_components_test_factories_smoke_outside_nicegui", "callee": "test_run_badge", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L961"}, {"caller_nid": "ui_test_components_test_factories_smoke_outside_nicegui", "callee": "override_badge", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L962"}, {"caller_nid": "ui_test_components_test_factories_smoke_outside_nicegui", "callee": "sync_status_icon", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L963"}, {"caller_nid": "ui_test_components_test_factories_smoke_outside_nicegui", "callee": "session_progress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L966"}, {"caller_nid": "ui_test_components_test_factories_smoke_outside_nicegui", "callee": "build_tree", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L967"}, {"caller_nid": "ui_test_components_test_factories_smoke_outside_nicegui", "callee": "status_bar_segment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L970"}, {"caller_nid": "ui_test_components_test_factories_smoke_outside_nicegui", "callee": "ValidationSummary", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L973"}, {"caller_nid": "ui_test_components_test_factories_smoke_outside_nicegui", "callee": "validation_summary", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L974"}, {"caller_nid": "ui_test_components_test_no_stray_ui_notify_calls_in_ui_package", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L991"}, {"caller_nid": "ui_test_components_test_no_stray_ui_notify_calls_in_ui_package", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L991"}, {"caller_nid": "ui_test_components_test_no_stray_ui_notify_calls_in_ui_package", "callee": "rglob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L993"}, {"caller_nid": "ui_test_components_test_no_stray_ui_notify_calls_in_ui_package", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L996"}, {"caller_nid": "ui_test_components_test_no_stray_ui_notify_calls_in_ui_package", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L998"}, {"caller_nid": "ui_test_components_test_no_stray_ui_notify_calls_in_ui_package", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L998"}, {"caller_nid": "ui_test_components_test_no_stray_ui_notify_calls_in_ui_package", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py", "source_location": "L999"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/92df0e26197170f726d6f7a04d261a92d0575c2033a9671e9040ee5632100f77.json b/graphify-out/cache/ast/92df0e26197170f726d6f7a04d261a92d0575c2033a9671e9040ee5632100f77.json new file mode 100644 index 0000000..641be7b --- /dev/null +++ b/graphify-out/cache/ast/92df0e26197170f726d6f7a04d261a92d0575c2033a9671e9040ee5632100f77.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "label": "test_flow_00_full_lifecycle.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L1"}, {"id": "e2e_test_flow_00_full_lifecycle_fill", "label": "_fill()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L50"}, {"id": "e2e_test_flow_00_full_lifecycle_select", "label": "_select()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L57"}, {"id": "e2e_test_flow_00_full_lifecycle_pick_radio", "label": "_pick_radio()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L86"}, {"id": "e2e_test_flow_00_full_lifecycle_step_button", "label": "_step_button()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L93"}, {"id": "e2e_test_flow_00_full_lifecycle_project_next", "label": "_project_next()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L111"}, {"id": "e2e_test_flow_00_full_lifecycle_run_next", "label": "_run_next()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L116"}, {"id": "e2e_test_flow_00_full_lifecycle_goto", "label": "_goto()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L121"}, {"id": "e2e_test_flow_00_full_lifecycle_prod_server", "label": "prod_server()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L146"}, {"id": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "label": "test_full_create_lifecycle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L175"}, {"id": "e2e_test_flow_00_full_lifecycle_rationale_1", "label": "E2E flow 00b: the full create-lifecycle against the PRODUCTION app. Boots the g", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L1"}, {"id": "e2e_test_flow_00_full_lifecycle_rationale_51", "label": "Fill a (visible) Quasar input identified by ``data-testid``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L51"}, {"id": "e2e_test_flow_00_full_lifecycle_rationale_65", "label": "Pick ``value`` from a NiceGUI/Quasar ``ui.select`` by ``data-testid``. Nice", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L65"}, {"id": "e2e_test_flow_00_full_lifecycle_rationale_87", "label": "Select a Quasar ``ui.radio`` option by its label within the group.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L87"}, {"id": "e2e_test_flow_00_full_lifecycle_rationale_100", "label": "Click a stepper-navigation button scoped to its step container. The Next /", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L100"}, {"id": "e2e_test_flow_00_full_lifecycle_rationale_112", "label": "Advance the project wizard from ``step_id`` via its Next button.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L112"}, {"id": "e2e_test_flow_00_full_lifecycle_rationale_117", "label": "Advance the run wizard from ``step_id`` via its Next button.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L117"}, {"id": "e2e_test_flow_00_full_lifecycle_rationale_122", "label": "Navigate to a NiceGUI page, tolerating a transient ERR_ABORTED. NiceGUI's c", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L122"}, {"id": "e2e_test_flow_00_full_lifecycle_rationale_147", "label": "Yield a started :class:`ProdServer` rooted at a fresh tmp HOME. The keyring", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L147"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "yaml", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "exlab_wizard_lims_catalogue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "exlab_wizard_lims_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "tests_e2e_prod_server", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "tests_e2e_conftest", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "e2e_test_flow_00_full_lifecycle_fill", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "e2e_test_flow_00_full_lifecycle_select", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "e2e_test_flow_00_full_lifecycle_pick_radio", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L86", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "e2e_test_flow_00_full_lifecycle_step_button", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "e2e_test_flow_00_full_lifecycle_project_next", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L111", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "e2e_test_flow_00_full_lifecycle_run_next", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L116", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "e2e_test_flow_00_full_lifecycle_goto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L121", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "e2e_test_flow_00_full_lifecycle_prod_server", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L146", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "target": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L175", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_project_next", "target": "e2e_test_flow_00_full_lifecycle_step_button", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L113", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_run_next", "target": "e2e_test_flow_00_full_lifecycle_step_button", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L118", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "target": "e2e_test_flow_00_full_lifecycle_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L214", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "target": "e2e_test_flow_00_full_lifecycle_fill", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L224", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "target": "e2e_test_flow_00_full_lifecycle_pick_radio", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L254", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "target": "e2e_test_flow_00_full_lifecycle_select", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L299", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "target": "e2e_test_flow_00_full_lifecycle_project_next", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L346", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "target": "e2e_test_flow_00_full_lifecycle_step_button", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L364", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "target": "e2e_test_flow_00_full_lifecycle_run_next", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L379", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_00_full_lifecycle_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_rationale_51", "target": "e2e_test_flow_00_full_lifecycle_fill", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L51", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_rationale_65", "target": "e2e_test_flow_00_full_lifecycle_select", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L65", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_rationale_87", "target": "e2e_test_flow_00_full_lifecycle_pick_radio", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L87", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_rationale_100", "target": "e2e_test_flow_00_full_lifecycle_step_button", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L100", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_rationale_112", "target": "e2e_test_flow_00_full_lifecycle_project_next", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L112", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_rationale_117", "target": "e2e_test_flow_00_full_lifecycle_run_next", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L117", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_rationale_122", "target": "e2e_test_flow_00_full_lifecycle_goto", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L122", "weight": 1.0}, {"source": "e2e_test_flow_00_full_lifecycle_rationale_147", "target": "e2e_test_flow_00_full_lifecycle_prod_server", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L147", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_00_full_lifecycle_fill", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L52"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_fill", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L53"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_fill", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L54"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_select", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L74"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_select", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L75"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_select", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L76"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_select", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L80"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_select", "callee": "get_by_role", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L81"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_select", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L82"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_select", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L83"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_pick_radio", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L88"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_pick_radio", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L89"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_pick_radio", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L90"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_pick_radio", "callee": "get_by_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L90"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_step_button", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L106"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_step_button", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L107"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_step_button", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L108"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_goto", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L129"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_goto", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L131"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_goto", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L132"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_goto", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L136"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_goto", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L137"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_prod_server", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L154"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_prod_server", "callee": "ProdServer", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L155"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_prod_server", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L162"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_prod_server", "callee": "skip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L163"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_prod_server", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L167"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L178"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L185"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "write_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L190"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "OfflineCatalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L192"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "LIMSProject", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L198"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "new_context", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L210"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "new_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L211"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L215"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L215"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L218"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L218"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L219"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L220"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L220"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L223"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L223"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L224"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L225"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L226"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L228"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L228"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L231"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L237"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L237"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L240"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L245"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L245"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L246"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L246"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L252"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L258"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L258"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for_function", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L260"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L268"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L268"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L269"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L269"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L271"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L272"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L276"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L285"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L285"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L287"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L287"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L288"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L288"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L289"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L290"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L291"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L292"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L292"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L293"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L297"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L297"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L301"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L301"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L302"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L304"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L307"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L307"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L308"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "compile", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L308"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L315"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L315"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L316"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L317"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L323"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L323"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L324"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L325"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "safe_load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L337"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L337"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L338"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L339"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "safe_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L339"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L343"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L343"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L365"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "compile", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L365"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L369"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L370"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L374"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L374"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L391"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "compile", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L391"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L393"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "glob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L393"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L395"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L399"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L399"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L414"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "compile", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L414"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L415"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "glob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L415"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L417"}, {"caller_nid": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py", "source_location": "L419"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/92f7166cdda8ab9a0d5ea9a4f6b02d7846beb4435e5d72edd22d602dee0e64ef.json b/graphify-out/cache/ast/92f7166cdda8ab9a0d5ea9a4f6b02d7846beb4435e5d72edd22d602dee0e64ef.json new file mode 100644 index 0000000..b2f86f5 --- /dev/null +++ b/graphify-out/cache/ast/92f7166cdda8ab9a0d5ea9a4f6b02d7846beb4435e5d72edd22d602dee0e64ef.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "label": "wizard_run.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L1"}, {"id": "pages_wizard_run_runwizardstate", "label": "RunWizardState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L55"}, {"id": "pages_wizard_run_title_text", "label": "title_text()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L75"}, {"id": "pages_wizard_run_primary_button_label", "label": "primary_button_label()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L83"}, {"id": "pages_wizard_run_primary_button_color", "label": "primary_button_color()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L89"}, {"id": "pages_wizard_run_preview_path_segments", "label": "preview_path_segments()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L95"}, {"id": "pages_wizard_run_can_advance", "label": "can_advance()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L122"}, {"id": "pages_wizard_run_render_run_wizard", "label": "render_run_wizard()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L142"}, {"id": "pages_wizard_run_render_run_step_fields", "label": "_render_run_step_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L294"}, {"id": "pages_wizard_run_step_helper_text", "label": "_step_helper_text()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L347"}, {"id": "pages_wizard_run_rationale_1", "label": "New Run Wizard (Frontend Spec \u00a75). Six-step wizard with mode bound at construct", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L1"}, {"id": "pages_wizard_run_rationale_56", "label": "Mutable state for the in-flight run wizard.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L56"}, {"id": "pages_wizard_run_rationale_76", "label": "Title-bar text per Frontend \u00a75.1.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L76"}, {"id": "pages_wizard_run_rationale_84", "label": "Primary button label on the Confirm & Create step (Frontend \u00a75.2).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L84"}, {"id": "pages_wizard_run_rationale_90", "label": "Primary button color hint per Frontend \u00a75.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L90"}, {"id": "pages_wizard_run_rationale_96", "label": "Compute the destination-path segments for the Preview step. Test runs put t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L96"}, {"id": "pages_wizard_run_rationale_123", "label": "Return ``True`` when the active step's preconditions hold.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L123"}, {"id": "pages_wizard_run_rationale_151", "label": "Render the six-step run wizard. ``templates`` lists run-scope template name", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L151"}, {"id": "pages_wizard_run_rationale_302", "label": "Render the bound input fields for one run-wizard step. The \"variables\" step", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L302"}, {"id": "pages_wizard_run_rationale_348", "label": "Helper text per step.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L348"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "inspect", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "exlab_wizard_ui_components", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "exlab_wizard_ui_pages_templates", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "pages_wizard_run_runwizardstate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L55", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "pages_wizard_run_title_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L75", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "pages_wizard_run_primary_button_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "pages_wizard_run_primary_button_color", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L89", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "pages_wizard_run_preview_path_segments", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L95", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "pages_wizard_run_can_advance", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L122", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "pages_wizard_run_render_run_wizard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L142", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "pages_wizard_run_render_run_step_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L294", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "target": "pages_wizard_run_step_helper_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L347", "weight": 1.0}, {"source": "pages_wizard_run_render_run_wizard", "target": "pages_wizard_run_title_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L165", "weight": 1.0}, {"source": "pages_wizard_run_render_run_wizard", "target": "pages_wizard_run_primary_button_label", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L169", "weight": 1.0}, {"source": "pages_wizard_run_render_run_wizard", "target": "pages_wizard_run_primary_button_color", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L170", "weight": 1.0}, {"source": "pages_wizard_run_render_run_wizard", "target": "pages_wizard_run_step_helper_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L224", "weight": 1.0}, {"source": "pages_wizard_run_render_run_wizard", "target": "pages_wizard_run_render_run_step_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L228", "weight": 1.0}, {"source": "pages_wizard_run_step_helper_text", "target": "pages_wizard_run_primary_button_label", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L366", "weight": 1.0}, {"source": "pages_wizard_run_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_run_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L1", "weight": 1.0}, {"source": "pages_wizard_run_rationale_56", "target": "pages_wizard_run_runwizardstate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L56", "weight": 1.0}, {"source": "pages_wizard_run_rationale_76", "target": "pages_wizard_run_title_text", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L76", "weight": 1.0}, {"source": "pages_wizard_run_rationale_84", "target": "pages_wizard_run_primary_button_label", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L84", "weight": 1.0}, {"source": "pages_wizard_run_rationale_90", "target": "pages_wizard_run_primary_button_color", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L90", "weight": 1.0}, {"source": "pages_wizard_run_rationale_96", "target": "pages_wizard_run_preview_path_segments", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L96", "weight": 1.0}, {"source": "pages_wizard_run_rationale_123", "target": "pages_wizard_run_can_advance", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L123", "weight": 1.0}, {"source": "pages_wizard_run_rationale_151", "target": "pages_wizard_run_render_run_wizard", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L151", "weight": 1.0}, {"source": "pages_wizard_run_rationale_302", "target": "pages_wizard_run_render_run_step_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L302", "weight": 1.0}, {"source": "pages_wizard_run_rationale_348", "target": "pages_wizard_run_step_helper_text", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L348", "weight": 1.0}], "raw_calls": [{"caller_nid": "pages_wizard_run_preview_path_segments", "callee": "run_dir_stem", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L108"}, {"caller_nid": "pages_wizard_run_preview_path_segments", "callee": "run_dir_stem", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L116"}, {"caller_nid": "pages_wizard_run_can_advance", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L134"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L161"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L162"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "mode_badge_props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L166"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L173"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L198"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L198"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "card", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L198"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L209"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L209"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L210"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L210"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L210"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "mode_badge", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L216"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L217"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "stepper", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L217"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L221"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "step", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L221"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L224"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L224"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "_variables_panel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L226"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "_progress_view", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L248"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "stepper_navigation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L252"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L257"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L257"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "previous", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L259"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L262"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L262"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "on_cancel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L264"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L288"}, {"caller_nid": "pages_wizard_run_render_run_wizard", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L288"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "on_value_change", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L310"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L310"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L310"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "setattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L314"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "on_value_change", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L316"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L316"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "select", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L316"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "setattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L321"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "on_value_change", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L329"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L329"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "select", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L329"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "on_value_change", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L340"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L340"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L340"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L340"}, {"caller_nid": "pages_wizard_run_render_run_step_fields", "callee": "__setitem__", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py", "source_location": "L343"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/94b2c3d01d5d0a700f18c82930c25d0b235c7bf1db575601d3dda5151c4a008c.json b/graphify-out/cache/ast/94b2c3d01d5d0a700f18c82930c25d0b235c7bf1db575601d3dda5151c4a008c.json new file mode 100644 index 0000000..3d2b55f --- /dev/null +++ b/graphify-out/cache/ast/94b2c3d01d5d0a700f18c82930c25d0b235c7bf1db575601d3dda5151c4a008c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "label": "loader.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L1"}, {"id": "config_loader_test_mode_enabled", "label": "_test_mode_enabled()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L33"}, {"id": "config_loader_apply_test_mode_prefix", "label": "apply_test_mode_prefix()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L43"}, {"id": "config_loader_yaml", "label": "_yaml()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L79"}, {"id": "config_loader_load_config", "label": "load_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L92"}, {"id": "config_loader_load_config_from_text", "label": "load_config_from_text()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L108"}, {"id": "config_loader_save_config", "label": "save_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L128"}, {"id": "config_loader_deep_merge", "label": "_deep_merge()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L157"}, {"id": "config_loader_dump_config", "label": "dump_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L171"}, {"id": "config_loader_rationale_1", "label": "config.yaml round-trip loader. Backend Spec \u00a79. Uses ruamel.yaml in round-trip", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L1"}, {"id": "config_loader_rationale_34", "label": "Return True when the env var :data:`TEST_MODE_ENV` is truthy. Centralized h", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L34"}, {"id": "config_loader_rationale_44", "label": "Return ``config`` with each equipment id prefixed by :data:`TEST_MODE_PREFIX`.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L44"}, {"id": "config_loader_rationale_80", "label": "Build a configured ruamel.yaml instance. typ='rt' is round-trip mode (prese", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L80"}, {"id": "config_loader_rationale_93", "label": "Load a config.yaml from disk and validate against the Pydantic model. Raise", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L93"}, {"id": "config_loader_rationale_109", "label": "Load a config from YAML text. Same semantics as load_config but for in-memory in", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L109"}, {"id": "config_loader_rationale_129", "label": "Atomically write `config` back to `path`. If `original_text` is supplied, r", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L129"}, {"id": "config_loader_rationale_158", "label": "In-place deep-merge source into target. Used by save_config to overlay new", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L158"}, {"id": "config_loader_rationale_172", "label": "Serialize config to a YAML string. No comment preservation; tests use this.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L172"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "io", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "ruamel_yaml", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "exlab_wizard_io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "config_loader_test_mode_enabled", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "config_loader_apply_test_mode_prefix", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "config_loader_yaml", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L79", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "config_loader_load_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L92", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "config_loader_load_config_from_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L108", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "config_loader_save_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L128", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "config_loader_deep_merge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L157", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "target": "config_loader_dump_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L171", "weight": 1.0}, {"source": "config_loader_load_config", "target": "config_loader_load_config_from_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L105", "weight": 1.0}, {"source": "config_loader_load_config_from_text", "target": "config_loader_yaml", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L111", "weight": 1.0}, {"source": "config_loader_load_config_from_text", "target": "config_loader_test_mode_enabled", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L123", "weight": 1.0}, {"source": "config_loader_load_config_from_text", "target": "config_loader_apply_test_mode_prefix", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L124", "weight": 1.0}, {"source": "config_loader_save_config", "target": "config_loader_yaml", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L138", "weight": 1.0}, {"source": "config_loader_save_config", "target": "config_loader_deep_merge", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L144", "weight": 1.0}, {"source": "config_loader_dump_config", "target": "config_loader_yaml", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L173", "weight": 1.0}, {"source": "config_loader_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_config_loader_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L1", "weight": 1.0}, {"source": "config_loader_rationale_34", "target": "config_loader_test_mode_enabled", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L34", "weight": 1.0}, {"source": "config_loader_rationale_44", "target": "config_loader_apply_test_mode_prefix", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L44", "weight": 1.0}, {"source": "config_loader_rationale_80", "target": "config_loader_yaml", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L80", "weight": 1.0}, {"source": "config_loader_rationale_93", "target": "config_loader_load_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L93", "weight": 1.0}, {"source": "config_loader_rationale_109", "target": "config_loader_load_config_from_text", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L109", "weight": 1.0}, {"source": "config_loader_rationale_129", "target": "config_loader_save_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L129", "weight": 1.0}, {"source": "config_loader_rationale_158", "target": "config_loader_deep_merge", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L158", "weight": 1.0}, {"source": "config_loader_rationale_172", "target": "config_loader_dump_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L172", "weight": 1.0}], "raw_calls": [{"caller_nid": "config_loader_test_mode_enabled", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L39"}, {"caller_nid": "config_loader_test_mode_enabled", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L40"}, {"caller_nid": "config_loader_test_mode_enabled", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L40"}, {"caller_nid": "config_loader_apply_test_mode_prefix", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L57"}, {"caller_nid": "config_loader_apply_test_mode_prefix", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L57"}, {"caller_nid": "config_loader_apply_test_mode_prefix", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L65"}, {"caller_nid": "config_loader_apply_test_mode_prefix", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L66"}, {"caller_nid": "config_loader_apply_test_mode_prefix", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L67"}, {"caller_nid": "config_loader_apply_test_mode_prefix", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L68"}, {"caller_nid": "config_loader_apply_test_mode_prefix", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L68"}, {"caller_nid": "config_loader_apply_test_mode_prefix", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L72"}, {"caller_nid": "config_loader_apply_test_mode_prefix", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L74"}, {"caller_nid": "config_loader_yaml", "callee": "YAML", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L85"}, {"caller_nid": "config_loader_yaml", "callee": "indent", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L87"}, {"caller_nid": "config_loader_load_config", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L100"}, {"caller_nid": "config_loader_load_config", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L102"}, {"caller_nid": "config_loader_load_config", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L104"}, {"caller_nid": "config_loader_load_config_from_text", "callee": "load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L111"}, {"caller_nid": "config_loader_load_config_from_text", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L113"}, {"caller_nid": "config_loader_load_config_from_text", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L114"}, {"caller_nid": "config_loader_load_config_from_text", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L115"}, {"caller_nid": "config_loader_load_config_from_text", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L117"}, {"caller_nid": "config_loader_load_config_from_text", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L119"}, {"caller_nid": "config_loader_save_config", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L139"}, {"caller_nid": "config_loader_save_config", "callee": "load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L143"}, {"caller_nid": "config_loader_save_config", "callee": "StringIO", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L149"}, {"caller_nid": "config_loader_save_config", "callee": "dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L150"}, {"caller_nid": "config_loader_save_config", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L151"}, {"caller_nid": "config_loader_save_config", "callee": "getvalue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L151"}, {"caller_nid": "config_loader_save_config", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L152"}, {"caller_nid": "config_loader_save_config", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L153"}, {"caller_nid": "config_loader_save_config", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L154"}, {"caller_nid": "config_loader_save_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L154"}, {"caller_nid": "config_loader_save_config", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L154"}, {"caller_nid": "config_loader_deep_merge", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L164"}, {"caller_nid": "config_loader_deep_merge", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L165"}, {"caller_nid": "config_loader_deep_merge", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L165"}, {"caller_nid": "config_loader_deep_merge", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L165"}, {"caller_nid": "config_loader_dump_config", "callee": "StringIO", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L174"}, {"caller_nid": "config_loader_dump_config", "callee": "dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L175"}, {"caller_nid": "config_loader_dump_config", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L175"}, {"caller_nid": "config_loader_dump_config", "callee": "getvalue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py", "source_location": "L176"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/95337603641a03dabda8a7093f0bb866fb16530f2310dc43a33e36c8875944c0.json b/graphify-out/cache/ast/95337603641a03dabda8a7093f0bb866fb16530f2310dc43a33e36c8875944c0.json new file mode 100644 index 0000000..3ffcc3e --- /dev/null +++ b/graphify-out/cache/ast/95337603641a03dabda8a7093f0bb866fb16530f2310dc43a33e36c8875944c0.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_ux_interactions_md", "label": "UX_INTERACTIONS.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L1"}, {"id": "docs_ux_interactions_ux_interaction_reference", "label": "UX Interaction Reference", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L1"}, {"id": "docs_ux_interactions_first_launch_setup", "label": "First-launch setup", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L14"}, {"id": "docs_ux_interactions_settings", "label": "Settings", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L23"}, {"id": "docs_ux_interactions_equipment", "label": "Equipment", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L37"}, {"id": "docs_ux_interactions_nas_credentials", "label": "NAS Credentials", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L55"}, {"id": "docs_ux_interactions_new_template", "label": "New template", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L63"}, {"id": "docs_ux_interactions_new_project", "label": "New project", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L74"}, {"id": "docs_ux_interactions_new_run_test_run", "label": "New run / test run", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L93"}, {"id": "docs_ux_interactions_add_equipment", "label": "Add equipment", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L109"}, {"id": "docs_ux_interactions_file_explorer", "label": "File explorer", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L121"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_ux_interactions_md", "target": "docs_ux_interactions_ux_interaction_reference", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L1", "weight": 1.0}, {"source": "docs_ux_interactions_ux_interaction_reference", "target": "docs_ux_interactions_first_launch_setup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L14", "weight": 1.0}, {"source": "docs_ux_interactions_ux_interaction_reference", "target": "docs_ux_interactions_settings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L23", "weight": 1.0}, {"source": "docs_ux_interactions_ux_interaction_reference", "target": "docs_ux_interactions_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L37", "weight": 1.0}, {"source": "docs_ux_interactions_ux_interaction_reference", "target": "docs_ux_interactions_nas_credentials", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L55", "weight": 1.0}, {"source": "docs_ux_interactions_ux_interaction_reference", "target": "docs_ux_interactions_new_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L63", "weight": 1.0}, {"source": "docs_ux_interactions_ux_interaction_reference", "target": "docs_ux_interactions_new_project", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L74", "weight": 1.0}, {"source": "docs_ux_interactions_ux_interaction_reference", "target": "docs_ux_interactions_new_run_test_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L93", "weight": 1.0}, {"source": "docs_ux_interactions_ux_interaction_reference", "target": "docs_ux_interactions_add_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L109", "weight": 1.0}, {"source": "docs_ux_interactions_ux_interaction_reference", "target": "docs_ux_interactions_file_explorer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md", "source_location": "L121", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/96d8e8924f1730153b1bd19ab67cfc4b7a76494806ba25478589f11f8299546b.json b/graphify-out/cache/ast/96d8e8924f1730153b1bd19ab67cfc4b7a76494806ba25478589f11f8299546b.json new file mode 100644 index 0000000..bef937e --- /dev/null +++ b/graphify-out/cache/ast/96d8e8924f1730153b1bd19ab67cfc4b7a76494806ba25478589f11f8299546b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_superpowers_specs_2026_05_14_gui_orchestrator_redesign_design_md", "label": "2026-05-14-gui-orchestrator-redesign-design.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L1"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "label": "ExLab-Wizard GUI & System Redesign \u2014 Design Spec", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L1"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_1_summary", "label": "1. Summary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L11"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_2_goals_non_goals", "label": "2. Goals & non-goals", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L27"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_goals", "label": "Goals", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L29"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_non_goals_explicitly_out_of_scope_for_this_redesign", "label": "Non-goals (explicitly out of scope for this redesign)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L40"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_3_system_model_changes", "label": "3. System model changes", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L50"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_3_1_always_orchestrator", "label": "3.1 Always-orchestrator", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L52"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_3_2_per_equipment_sync_role", "label": "3.2 Per-equipment sync role", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L67"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_3_3_owned_vs_received_equipment", "label": "3.3 Owned vs. received equipment", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L81"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_3_4_runs_subdirectory", "label": "3.4 `Runs/` subdirectory", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L108"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_codeblock_1", "label": "code:block1 (/)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L113"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", "label": "4. Main window redesign", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L141"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_1_layout", "label": "4.1 Layout", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L143"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_codeblock_2", "label": "code:block2 (\u250c\u2500 Header toolbar: New Project \u00b7 New Run \u00b7 New Test Run \u00b7 Ad)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L147"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_2_left_tree", "label": "4.2 Left \u2014 tree", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L162"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_3_centre_live_file_list", "label": "4.3 Centre \u2014 live file list", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L174"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_4_right_metadata_problems_pane_collapsible", "label": "4.4 Right \u2014 Metadata / Problems pane (collapsible)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L189"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_5_travelling_problem_badge", "label": "4.5 Travelling problem badge", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L211"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_6_footer_status_bar_relocated_staging_actions", "label": "4.6 Footer status bar & relocated staging actions", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L222"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_7_header_toolbar_breadcrumb", "label": "4.7 Header toolbar & breadcrumb", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L239"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_5_live_file_feed_approach_1_poll_only", "label": "5. Live file feed (Approach 1 \u2014 poll-only)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L248"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_6_add_equipment_wizard", "label": "6. Add-Equipment wizard", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L276"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_7_interaction_decisions", "label": "7. Interaction decisions", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L299"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_8_configuration_schema_changes", "label": "8. Configuration schema changes", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L313"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_9_code_impact_map", "label": "9. Code impact map", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L327"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_9_1_gui_wiring", "label": "9.1 GUI wiring", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L349"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_10_error_handling", "label": "10. Error handling", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L401"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_11_testing_strategy", "label": "11. Testing strategy", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L430"}, {"id": "specs_2026_05_14_gui_orchestrator_redesign_design_12_future_v1_x", "label": "12. Future (v1.x)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L477"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_superpowers_specs_2026_05_14_gui_orchestrator_redesign_design_md", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L1", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_1_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L11", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_2_goals_non_goals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L27", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_2_goals_non_goals", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_goals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L29", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_2_goals_non_goals", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_non_goals_explicitly_out_of_scope_for_this_redesign", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L40", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_3_system_model_changes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L50", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_3_system_model_changes", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_3_1_always_orchestrator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L52", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_3_system_model_changes", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_3_2_per_equipment_sync_role", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L67", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_3_system_model_changes", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_3_3_owned_vs_received_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L81", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_3_system_model_changes", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_3_4_runs_subdirectory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L108", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_3_4_runs_subdirectory", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L113", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L141", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_1_layout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L143", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_1_layout", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L147", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_2_left_tree", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L162", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_3_centre_live_file_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L174", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_4_right_metadata_problems_pane_collapsible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L189", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_5_travelling_problem_badge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L211", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_6_footer_status_bar_relocated_staging_actions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L222", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_7_header_toolbar_breadcrumb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L239", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_5_live_file_feed_approach_1_poll_only", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L248", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_6_add_equipment_wizard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L276", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_7_interaction_decisions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L299", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_8_configuration_schema_changes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L313", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_9_code_impact_map", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L327", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_9_code_impact_map", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_9_1_gui_wiring", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L349", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_10_error_handling", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L401", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_11_testing_strategy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L430", "weight": 1.0}, {"source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", "target": "specs_2026_05_14_gui_orchestrator_redesign_design_12_future_v1_x", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", "source_location": "L477", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/9701308c150b956a0e7c8d476b128494ca14a20a46567f85b4bb08454f8c2570.json b/graphify-out/cache/ast/9701308c150b956a0e7c8d476b128494ca14a20a46567f85b4bb08454f8c2570.json new file mode 100644 index 0000000..345625c --- /dev/null +++ b/graphify-out/cache/ast/9701308c150b956a0e7c8d476b128494ca14a20a46567f85b4bb08454f8c2570.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "label": "server_runner.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L1"}, {"id": "tray_server_runner_pick_free_port", "label": "pick_free_port()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L41"}, {"id": "tray_server_runner_serverrunner", "label": "ServerRunner", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L55"}, {"id": "tray_server_runner_serverrunner_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L61"}, {"id": "tray_server_runner_serverrunner_start", "label": ".start()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L75"}, {"id": "tray_server_runner_serverrunner_stop", "label": ".stop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L103"}, {"id": "tray_server_runner_port", "label": "port()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L124"}, {"id": "tray_server_runner_is_running", "label": "is_running()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L135"}, {"id": "tray_server_runner_state_file", "label": "state_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L142"}, {"id": "tray_server_runner_serverrunner_build_uvicorn", "label": "._build_uvicorn()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L150"}, {"id": "tray_server_runner_serverrunner_write_state_file", "label": "._write_state_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L170"}, {"id": "tray_server_runner_serverrunner_delete_state_file", "label": "._delete_state_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L183"}, {"id": "tray_server_runner_rationale_1", "label": "Programmatic uvicorn launcher with atomic ``server.json`` writes. Backend Spec \u00a7", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L1"}, {"id": "tray_server_runner_rationale_42", "label": "Return a free localhost port from the OS. Binds a SOCK_STREAM socket to ``(", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L42"}, {"id": "tray_server_runner_rationale_56", "label": "Starts uvicorn on a free localhost port and tracks its state file. Backend", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L56"}, {"id": "tray_server_runner_rationale_76", "label": "Pick a port, launch uvicorn in a worker thread, write server.json. Retu", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L76"}, {"id": "tray_server_runner_rationale_104", "label": "Signal uvicorn to exit, join the worker thread, delete server.json. Ide", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L104"}, {"id": "tray_server_runner_rationale_125", "label": "Return the port the server is bound to. Raises ``RuntimeError`` when ca", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L125"}, {"id": "tray_server_runner_rationale_136", "label": "Return ``True`` while the worker thread is alive.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L136"}, {"id": "tray_server_runner_rationale_143", "label": "Return the absolute path of the ``server.json`` state file.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L143"}, {"id": "tray_server_runner_rationale_151", "label": "Return ``(uvicorn.Config, uvicorn.Server)`` for the given port. Split o", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L151"}, {"id": "tray_server_runner_rationale_171", "label": "Atomically write ``server.json``. Backend Spec \u00a74.4.5 idiom.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L171"}, {"id": "tray_server_runner_rationale_184", "label": "Best-effort delete; missing file is fine.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L184"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "socket", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "threading", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "exlab_wizard_io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "tray_server_runner_pick_free_port", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "tray_server_runner_serverrunner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L55", "weight": 1.0}, {"source": "tray_server_runner_serverrunner", "target": "tray_server_runner_serverrunner_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L61", "weight": 1.0}, {"source": "tray_server_runner_serverrunner", "target": "tray_server_runner_serverrunner_start", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L75", "weight": 1.0}, {"source": "tray_server_runner_serverrunner", "target": "tray_server_runner_serverrunner_stop", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L103", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "tray_server_runner_port", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L124", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "tray_server_runner_is_running", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "target": "tray_server_runner_state_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L142", "weight": 1.0}, {"source": "tray_server_runner_serverrunner", "target": "tray_server_runner_serverrunner_build_uvicorn", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L150", "weight": 1.0}, {"source": "tray_server_runner_serverrunner", "target": "tray_server_runner_serverrunner_write_state_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L170", "weight": 1.0}, {"source": "tray_server_runner_serverrunner", "target": "tray_server_runner_serverrunner_delete_state_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L183", "weight": 1.0}, {"source": "tray_server_runner_serverrunner_start", "target": "tray_server_runner_pick_free_port", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L86", "weight": 1.0}, {"source": "tray_server_runner_serverrunner_start", "target": "tray_server_runner_serverrunner_build_uvicorn", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L87", "weight": 1.0}, {"source": "tray_server_runner_serverrunner_start", "target": "tray_server_runner_serverrunner_write_state_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L99", "weight": 1.0}, {"source": "tray_server_runner_serverrunner_stop", "target": "tray_server_runner_serverrunner_delete_state_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L117", "weight": 1.0}, {"source": "tray_server_runner_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_server_runner_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_server_runner_rationale_42", "target": "tray_server_runner_pick_free_port", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L42", "weight": 1.0}, {"source": "tray_server_runner_rationale_56", "target": "tray_server_runner_serverrunner", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L56", "weight": 1.0}, {"source": "tray_server_runner_rationale_76", "target": "tray_server_runner_serverrunner_start", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L76", "weight": 1.0}, {"source": "tray_server_runner_rationale_104", "target": "tray_server_runner_serverrunner_stop", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L104", "weight": 1.0}, {"source": "tray_server_runner_rationale_125", "target": "tray_server_runner_serverrunner_port", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L125", "weight": 1.0}, {"source": "tray_server_runner_rationale_136", "target": "tray_server_runner_serverrunner_is_running", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L136", "weight": 1.0}, {"source": "tray_server_runner_rationale_143", "target": "tray_server_runner_serverrunner_state_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L143", "weight": 1.0}, {"source": "tray_server_runner_rationale_151", "target": "tray_server_runner_serverrunner_build_uvicorn", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L151", "weight": 1.0}, {"source": "tray_server_runner_rationale_171", "target": "tray_server_runner_serverrunner_write_state_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L171", "weight": 1.0}, {"source": "tray_server_runner_rationale_184", "target": "tray_server_runner_serverrunner_delete_state_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L184", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_server_runner_pick_free_port", "callee": "socket", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L50"}, {"caller_nid": "tray_server_runner_pick_free_port", "callee": "bind", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L51"}, {"caller_nid": "tray_server_runner_pick_free_port", "callee": "getsockname", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L52"}, {"caller_nid": "tray_server_runner_serverrunner_init", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L63"}, {"caller_nid": "tray_server_runner_serverrunner_start", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L84"}, {"caller_nid": "tray_server_runner_serverrunner_start", "callee": "Thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L89"}, {"caller_nid": "tray_server_runner_serverrunner_start", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L100"}, {"caller_nid": "tray_server_runner_serverrunner_stop", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L113"}, {"caller_nid": "tray_server_runner_serverrunner_stop", "callee": "is_alive", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L115"}, {"caller_nid": "tray_server_runner_serverrunner_stop", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L116"}, {"caller_nid": "tray_server_runner_serverrunner_stop", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L121"}, {"caller_nid": "tray_server_runner_port", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L131"}, {"caller_nid": "tray_server_runner_is_running", "callee": "is_alive", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L139"}, {"caller_nid": "tray_server_runner_serverrunner_build_uvicorn", "callee": "Config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L160"}, {"caller_nid": "tray_server_runner_serverrunner_build_uvicorn", "callee": "Server", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L167"}, {"caller_nid": "tray_server_runner_serverrunner_write_state_file", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L174"}, {"caller_nid": "tray_server_runner_serverrunner_write_state_file", "callee": "getpid", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L177"}, {"caller_nid": "tray_server_runner_serverrunner_write_state_file", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L178"}, {"caller_nid": "tray_server_runner_serverrunner_write_state_file", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L180"}, {"caller_nid": "tray_server_runner_serverrunner_write_state_file", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L180"}, {"caller_nid": "tray_server_runner_serverrunner_write_state_file", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L181"}, {"caller_nid": "tray_server_runner_serverrunner_delete_state_file", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L185"}, {"caller_nid": "tray_server_runner_serverrunner_delete_state_file", "callee": "unlink", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py", "source_location": "L186"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/97d148cecae4e2d560a6fa5287d0374c4caab00173faca0c8f2651aee870ccfb.json b/graphify-out/cache/ast/97d148cecae4e2d560a6fa5287d0374c4caab00173faca0c8f2651aee870ccfb.json new file mode 100644 index 0000000..8446087 --- /dev/null +++ b/graphify-out/cache/ast/97d148cecae4e2d560a6fa5287d0374c4caab00173faca0c8f2651aee870ccfb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_breadcrumb_py", "label": "breadcrumb.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L1"}, {"id": "components_breadcrumb_breadcrumbsegment", "label": "BreadcrumbSegment", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L15"}, {"id": "components_breadcrumb_segments_from_node_id", "label": "segments_from_node_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L23"}, {"id": "components_breadcrumb_render_breadcrumb", "label": "render_breadcrumb()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L40"}, {"id": "components_breadcrumb_rationale_1", "label": "Breadcrumb bar for the rebuilt main window. GUI/Orchestrator Redesign \u00a74.1 / \u00a74", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L1"}, {"id": "components_breadcrumb_rationale_16", "label": "One clickable segment in the breadcrumb bar.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L16"}, {"id": "components_breadcrumb_rationale_24", "label": "Decompose a tree-node id into clickable segments. Tree ids are slash-joined", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L24"}, {"id": "components_breadcrumb_rationale_45", "label": "Render the breadcrumb row. Pure render function. Each segment is a clickabl", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L45"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_breadcrumb_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_breadcrumb_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_breadcrumb_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_breadcrumb_py", "target": "components_breadcrumb_breadcrumbsegment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_breadcrumb_py", "target": "components_breadcrumb_segments_from_node_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_breadcrumb_py", "target": "components_breadcrumb_render_breadcrumb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L40", "weight": 1.0}, {"source": "components_breadcrumb_segments_from_node_id", "target": "components_breadcrumb_breadcrumbsegment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L35", "weight": 1.0}, {"source": "components_breadcrumb_render_breadcrumb", "target": "components_breadcrumb_segments_from_node_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L51", "weight": 1.0}, {"source": "components_breadcrumb_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_breadcrumb_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L1", "weight": 1.0}, {"source": "components_breadcrumb_rationale_16", "target": "components_breadcrumb_breadcrumbsegment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L16", "weight": 1.0}, {"source": "components_breadcrumb_rationale_24", "target": "components_breadcrumb_segments_from_node_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L24", "weight": 1.0}, {"source": "components_breadcrumb_rationale_45", "target": "components_breadcrumb_render_breadcrumb", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L45", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_breadcrumb_segments_from_node_id", "callee": "split", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L33"}, {"caller_nid": "components_breadcrumb_segments_from_node_id", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L35"}, {"caller_nid": "components_breadcrumb_segments_from_node_id", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L36"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L58"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L58"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L58"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L58"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L69"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L69"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L71"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L73"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L73"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L75"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L75"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L75"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L80"}, {"caller_nid": "components_breadcrumb_render_breadcrumb", "callee": "on_navigate", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py", "source_location": "L80"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/98ba09f990d9f2d8b655c9f88a9307e3a72f29bdf4e738cc2a4e7d1d4da9c952.json b/graphify-out/cache/ast/98ba09f990d9f2d8b655c9f88a9307e3a72f29bdf4e738cc2a4e7d1d4da9c952.json new file mode 100644 index 0000000..8295ede --- /dev/null +++ b/graphify-out/cache/ast/98ba09f990d9f2d8b655c9f88a9307e3a72f29bdf4e738cc2a4e7d1d4da9c952.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_scripts_build_local_ps1", "label": "build_local.ps1", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/scripts/build_local.ps1", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/997952fea1565d477f3569f5467e99ed21f7d756354140eb300f9b5eb2f55dc4.json b/graphify-out/cache/ast/997952fea1565d477f3569f5467e99ed21f7d756354140eb300f9b5eb2f55dc4.json new file mode 100644 index 0000000..80cc770 --- /dev/null +++ b/graphify-out/cache/ast/997952fea1565d477f3569f5467e99ed21f7d756354140eb300f9b5eb2f55dc4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_user_guide_04_create_run_md", "label": "04_create_run.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md", "source_location": "L1"}, {"id": "user_guide_04_create_run_3_2_create_a_new_experimental_run", "label": "3.2 Create a New Experimental Run", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md", "source_location": "L1"}, {"id": "user_guide_04_create_run_capability_summary", "label": "Capability summary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md", "source_location": "L3"}, {"id": "user_guide_04_create_run_walkthrough", "label": "Walkthrough", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md", "source_location": "L14"}, {"id": "user_guide_04_create_run_screenshots", "label": "Screenshots", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md", "source_location": "L25"}, {"id": "user_guide_04_create_run_codeblock_1", "label": "code:{image} (:alt: New experimental run wizard, initial render)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md", "source_location": "L27"}, {"id": "user_guide_04_create_run_related_material", "label": "Related material", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md", "source_location": "L32"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_user_guide_04_create_run_md", "target": "user_guide_04_create_run_3_2_create_a_new_experimental_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md", "source_location": "L1", "weight": 1.0}, {"source": "user_guide_04_create_run_3_2_create_a_new_experimental_run", "target": "user_guide_04_create_run_capability_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md", "source_location": "L3", "weight": 1.0}, {"source": "user_guide_04_create_run_3_2_create_a_new_experimental_run", "target": "user_guide_04_create_run_walkthrough", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md", "source_location": "L14", "weight": 1.0}, {"source": "user_guide_04_create_run_3_2_create_a_new_experimental_run", "target": "user_guide_04_create_run_screenshots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md", "source_location": "L25", "weight": 1.0}, {"source": "user_guide_04_create_run_screenshots", "target": "user_guide_04_create_run_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md", "source_location": "L27", "weight": 1.0}, {"source": "user_guide_04_create_run_3_2_create_a_new_experimental_run", "target": "user_guide_04_create_run_related_material", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md", "source_location": "L32", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/99ec2f2300df4063ba52d598680dfd9640033847b227d4e0444f7a61f5a814ff.json b/graphify-out/cache/ast/99ec2f2300df4063ba52d598680dfd9640033847b227d4e0444f7a61f5a814ff.json new file mode 100644 index 0000000..b18ecd2 --- /dev/null +++ b/graphify-out/cache/ast/99ec2f2300df4063ba52d598680dfd9640033847b227d4e0444f7a61f5a814ff.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_readme_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/__init__.py", "source_location": "L1"}, {"id": "readme_init_rationale_1", "label": "Unit tests for ``exlab_wizard.readme``. Backend Spec \u00a710.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/__init__.py", "source_location": "L1"}], "edges": [{"source": "readme_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_readme_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/readme/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/9a7f6668f6173d6b63ed81474f56102ce919b80de7877ac9435bda8de5c8a2ad.json b/graphify-out/cache/ast/9a7f6668f6173d6b63ed81474f56102ce919b80de7877ac9435bda8de5c8a2ad.json new file mode 100644 index 0000000..fd1657f --- /dev/null +++ b/graphify-out/cache/ast/9a7f6668f6173d6b63ed81474f56102ce919b80de7877ac9435bda8de5c8a2ad.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_sync_helpers_py", "label": "_helpers.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L1"}, {"id": "sync_helpers_read_files_from", "label": "_read_files_from()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L29"}, {"id": "sync_helpers_local_check_factory", "label": "local_check_factory()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L40"}, {"id": "sync_helpers_corrupt_one_check_factory", "label": "corrupt_one_check_factory()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L59"}, {"id": "sync_helpers_rationale_1", "label": "Shared helpers for ``tests/unit/sync/`` test modules. Kept under a leading-unde", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L1"}, {"id": "sync_helpers_rationale_30", "label": "Read run-relative paths from a ``--files-from`` tempfile.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L30"}, {"id": "sync_helpers_rationale_41", "label": "Check factory whose closure declares every file equal. Returns a closure co", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L41"}, {"id": "sync_helpers_rationale_62", "label": "Check factory whose closure flags ``corrupt_rel`` as ``differ``. Every othe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L62"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_sync_helpers_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_helpers_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_helpers_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_helpers_py", "target": "exlab_wizard_sync_transports_rclone", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_helpers_py", "target": "sync_helpers_read_files_from", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_helpers_py", "target": "sync_helpers_local_check_factory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_helpers_py", "target": "sync_helpers_corrupt_one_check_factory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L59", "weight": 1.0}, {"source": "sync_helpers_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_sync_helpers_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L1", "weight": 1.0}, {"source": "sync_helpers_rationale_30", "target": "sync_helpers_read_files_from", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L30", "weight": 1.0}, {"source": "sync_helpers_rationale_41", "target": "sync_helpers_local_check_factory", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L41", "weight": 1.0}, {"source": "sync_helpers_rationale_62", "target": "sync_helpers_corrupt_one_check_factory", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L62", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_helpers_read_files_from", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L34"}, {"caller_nid": "sync_helpers_read_files_from", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L37"}, {"caller_nid": "sync_helpers_read_files_from", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L37"}, {"caller_nid": "sync_helpers_read_files_from", "callee": "splitlines", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L37"}, {"caller_nid": "sync_helpers_read_files_from", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py", "source_location": "L37"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/9ae08615e6633b4202710e37d8f130036b7426834043ae595e5aff38806623c7.json b/graphify-out/cache/ast/9ae08615e6633b4202710e37d8f130036b7426834043ae595e5aff38806623c7.json new file mode 100644 index 0000000..be70e3f --- /dev/null +++ b/graphify-out/cache/ast/9ae08615e6633b4202710e37d8f130036b7426834043ae595e5aff38806623c7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_05_template_format_md", "label": "05_Template_Format.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L1"}, {"id": "design_spec_sections_05_template_format_5_template_format", "label": "5. Template Format", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L1"}, {"id": "design_spec_sections_05_template_format_5_0_template_locations_global_and_per_equipment", "label": "5.0 Template Locations (Global and Per-Equipment)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L9"}, {"id": "design_spec_sections_05_template_format_5_1_template_structure", "label": "5.1 Template Structure", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L32"}, {"id": "design_spec_sections_05_template_format_codeblock_1", "label": "code:block1 (my_template/)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L36"}, {"id": "design_spec_sections_05_template_format_5_2_copier_manifest_copier_yml", "label": "5.2 Copier Manifest (`copier.yml`)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L48"}, {"id": "design_spec_sections_05_template_format_codeblock_2", "label": "code:yaml (# --- Copier settings ---)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L52"}, {"id": "design_spec_sections_05_template_format_5_3_copier_python_api_integration", "label": "5.3 Copier Python API Integration", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L100"}, {"id": "design_spec_sections_05_template_format_codeblock_3", "label": "code:python (# Illustrative -- not implementation code)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L104"}, {"id": "design_spec_sections_05_template_format_5_4_copier_answers_file_exlab_answers_yml", "label": "5.4 Copier Answers File (`.exlab-answers.yml`)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L125"}, {"id": "design_spec_sections_05_template_format_5_5_plugin_pass_post_render_controller_driven", "label": "5.5 Plugin Pass (Post-Render, Controller-Driven)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L136"}, {"id": "design_spec_sections_05_template_format_5_6_jinja2_templating_in_file_contents", "label": "5.6 Jinja2 Templating in File Contents", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L155"}, {"id": "design_spec_sections_05_template_format_5_7_template_versioning", "label": "5.7 Template Versioning", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L165"}, {"id": "design_spec_sections_05_template_format_5_8_lint_cli_exlab_wizard_templates_lint", "label": "5.8 Lint CLI: `exlab-wizard templates lint`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L175"}, {"id": "design_spec_sections_05_template_format_codeblock_4", "label": "code:block4 (exlab-wizard templates lint )", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L181"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_05_template_format_md", "target": "design_spec_sections_05_template_format_5_template_format", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L1", "weight": 1.0}, {"source": "design_spec_sections_05_template_format_5_template_format", "target": "design_spec_sections_05_template_format_5_0_template_locations_global_and_per_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L9", "weight": 1.0}, {"source": "design_spec_sections_05_template_format_5_template_format", "target": "design_spec_sections_05_template_format_5_1_template_structure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L32", "weight": 1.0}, {"source": "design_spec_sections_05_template_format_5_1_template_structure", "target": "design_spec_sections_05_template_format_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L36", "weight": 1.0}, {"source": "design_spec_sections_05_template_format_5_template_format", "target": "design_spec_sections_05_template_format_5_2_copier_manifest_copier_yml", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L48", "weight": 1.0}, {"source": "design_spec_sections_05_template_format_5_2_copier_manifest_copier_yml", "target": "design_spec_sections_05_template_format_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L52", "weight": 1.0}, {"source": "design_spec_sections_05_template_format_5_template_format", "target": "design_spec_sections_05_template_format_5_3_copier_python_api_integration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L100", "weight": 1.0}, {"source": "design_spec_sections_05_template_format_5_3_copier_python_api_integration", "target": "design_spec_sections_05_template_format_codeblock_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L104", "weight": 1.0}, {"source": "design_spec_sections_05_template_format_5_template_format", "target": "design_spec_sections_05_template_format_5_4_copier_answers_file_exlab_answers_yml", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L125", "weight": 1.0}, {"source": "design_spec_sections_05_template_format_5_template_format", "target": "design_spec_sections_05_template_format_5_5_plugin_pass_post_render_controller_driven", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L136", "weight": 1.0}, {"source": "design_spec_sections_05_template_format_5_template_format", "target": "design_spec_sections_05_template_format_5_6_jinja2_templating_in_file_contents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L155", "weight": 1.0}, {"source": "design_spec_sections_05_template_format_5_template_format", "target": "design_spec_sections_05_template_format_5_7_template_versioning", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L165", "weight": 1.0}, {"source": "design_spec_sections_05_template_format_5_template_format", "target": "design_spec_sections_05_template_format_5_8_lint_cli_exlab_wizard_templates_lint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L175", "weight": 1.0}, {"source": "design_spec_sections_05_template_format_5_8_lint_cli_exlab_wizard_templates_lint", "target": "design_spec_sections_05_template_format_codeblock_4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md", "source_location": "L181", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/9b6c35c8fe4ce9a52a5e9cd3a8edf46190fab1c365809ae0fd3a132f57b02643.json b/graphify-out/cache/ast/9b6c35c8fe4ce9a52a5e9cd3a8edf46190fab1c365809ae0fd3a132f57b02643.json new file mode 100644 index 0000000..9bc5a9e --- /dev/null +++ b/graphify-out/cache/ast/9b6c35c8fe4ce9a52a5e9cd3a8edf46190fab1c365809ae0fd3a132f57b02643.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "label": "test_quiescence_poller.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L1"}, {"id": "orchestrator_test_quiescence_poller_stubnassync", "label": "_StubNasSync", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L41"}, {"id": "orchestrator_test_quiescence_poller_stubnassync_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L44"}, {"id": "orchestrator_test_quiescence_poller_stubnassync_enqueue", "label": ".enqueue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L47"}, {"id": "orchestrator_test_quiescence_poller_enqueued_paths", "label": "enqueued_paths()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L51"}, {"id": "orchestrator_test_quiescence_poller_transport", "label": "_transport()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L60"}, {"id": "orchestrator_test_quiescence_poller_make_config", "label": "_make_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L70"}, {"id": "orchestrator_test_quiescence_poller_make_run", "label": "_make_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L101"}, {"id": "orchestrator_test_quiescence_poller_poller", "label": "_poller()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L110"}, {"id": "orchestrator_test_quiescence_poller_signature", "label": "_signature()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L118"}, {"id": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", "label": "test_file_becomes_quiet_only_after_settle_window()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L128"}, {"id": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", "label": "test_modified_file_resets_the_settle_window()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L150"}, {"id": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", "label": "test_ignore_glob_files_do_not_make_a_run_eligible()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L176"}, {"id": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", "label": "test_quiet_real_file_enqueues_despite_ignored_sibling()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L192"}, {"id": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", "label": "test_discovers_both_staging_and_nas_mode_runs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L212"}, {"id": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "label": "test_co_rooted_stage_mode_equipment_run_is_not_enqueued()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L234"}, {"id": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", "label": "test_file_matching_synced_signature_is_not_re_enqueued()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L285"}, {"id": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", "label": "test_file_modified_after_recorded_sync_becomes_eligible()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L309"}, {"id": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "label": "test_only_changed_file_in_a_run_is_enqueued()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L332"}, {"id": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", "label": "test_start_then_stop_is_idempotent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L363"}, {"id": "orchestrator_test_quiescence_poller_test_apply_config_swaps_config_reference", "label": "test_apply_config_swaps_config_reference()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L378"}, {"id": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", "label": "test_apply_config_quiescence_change_is_live()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L386"}, {"id": "orchestrator_test_quiescence_poller_rationale_1", "label": "Unit tests for ``exlab_wizard.orchestrator.quiescence_poller``. The :class:`Qui", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L1"}, {"id": "orchestrator_test_quiescence_poller_rationale_42", "label": "In-memory NAS-sync stub recording per-file enqueue calls.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L42"}, {"id": "orchestrator_test_quiescence_poller_rationale_76", "label": "Build a Config with an optional staging root and a nas-mode equipment.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L76"}, {"id": "orchestrator_test_quiescence_poller_rationale_102", "label": "Create a run-leaf directory mirroring the \u00a713.2 staging layout.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L102"}, {"id": "orchestrator_test_quiescence_poller_rationale_129", "label": "A file is enqueued only after its signature settles for the window.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L129"}, {"id": "orchestrator_test_quiescence_poller_rationale_151", "label": "A signature change resets ``first_seen``; the window restarts.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L151"}, {"id": "orchestrator_test_quiescence_poller_rationale_177", "label": "A run holding only ignore-glob files never enqueues.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L177"}, {"id": "orchestrator_test_quiescence_poller_rationale_193", "label": "A quiet non-ignored file enqueues even when ignored files coexist.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L193"}, {"id": "orchestrator_test_quiescence_poller_rationale_213", "label": "A sweep finds runs under staging_root AND under nas-mode local_root.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L213"}, {"id": "orchestrator_test_quiescence_poller_rationale_235", "label": "A ``stage``-mode equipment sharing one ``local_root`` with a ``nas``-mode eq", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L235"}, {"id": "orchestrator_test_quiescence_poller_rationale_286", "label": "A quiet file already synced at its current signature is skipped.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L286"}, {"id": "orchestrator_test_quiescence_poller_rationale_310", "label": "A file modified after its recorded sync re-enters the eligible set.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L310"}, {"id": "orchestrator_test_quiescence_poller_rationale_333", "label": "A run with a mix of synced + modified files enqueues only the dirty one.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L333"}, {"id": "orchestrator_test_quiescence_poller_rationale_364", "label": "start()/stop() can be called repeatedly without error.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L364"}, {"id": "orchestrator_test_quiescence_poller_rationale_387", "label": "A live quiescence-window change takes effect on the next sweep. poll_once r", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L387"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "exlab_wizard_cache_sync_state_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "exlab_wizard_orchestrator_quiescence_poller", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L41", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_stubnassync", "target": "orchestrator_test_quiescence_poller_stubnassync_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L44", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_stubnassync", "target": "orchestrator_test_quiescence_poller_stubnassync_enqueue", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_enqueued_paths", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_transport", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_make_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L70", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_make_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L101", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_poller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L110", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_signature", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L118", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L128", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L150", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L176", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L192", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L212", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L234", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L285", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L309", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L332", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L363", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_test_apply_config_swaps_config_reference", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L378", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "target": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L386", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_make_config", "target": "orchestrator_test_quiescence_poller_transport", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L86", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", "target": "orchestrator_test_quiescence_poller_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L130", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L131", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", "target": "orchestrator_test_quiescence_poller_poller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L132", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", "target": "orchestrator_test_quiescence_poller_make_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L133", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", "target": "orchestrator_test_quiescence_poller_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L152", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L153", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", "target": "orchestrator_test_quiescence_poller_poller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L154", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", "target": "orchestrator_test_quiescence_poller_make_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L155", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", "target": "orchestrator_test_quiescence_poller_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L178", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L179", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", "target": "orchestrator_test_quiescence_poller_poller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L180", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", "target": "orchestrator_test_quiescence_poller_make_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L181", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", "target": "orchestrator_test_quiescence_poller_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L194", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L195", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", "target": "orchestrator_test_quiescence_poller_poller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L196", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", "target": "orchestrator_test_quiescence_poller_make_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L197", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", "target": "orchestrator_test_quiescence_poller_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L218", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L223", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", "target": "orchestrator_test_quiescence_poller_poller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L224", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", "target": "orchestrator_test_quiescence_poller_make_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L225", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "target": "orchestrator_test_quiescence_poller_transport", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L249", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L267", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "target": "orchestrator_test_quiescence_poller_poller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L268", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "target": "orchestrator_test_quiescence_poller_make_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L269", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", "target": "orchestrator_test_quiescence_poller_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L287", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L288", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", "target": "orchestrator_test_quiescence_poller_make_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L291", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", "target": "orchestrator_test_quiescence_poller_signature", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L298", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", "target": "orchestrator_test_quiescence_poller_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L311", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L312", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", "target": "orchestrator_test_quiescence_poller_make_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L315", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "target": "orchestrator_test_quiescence_poller_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L334", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L335", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "target": "orchestrator_test_quiescence_poller_make_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L338", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "target": "orchestrator_test_quiescence_poller_signature", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L346", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", "target": "orchestrator_test_quiescence_poller_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L365", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", "target": "orchestrator_test_quiescence_poller_poller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L366", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L366", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_apply_config_swaps_config_reference", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L379", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_apply_config_swaps_config_reference", "target": "orchestrator_test_quiescence_poller_poller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L380", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_apply_config_swaps_config_reference", "target": "orchestrator_test_quiescence_poller_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L380", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L393", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", "target": "orchestrator_test_quiescence_poller_poller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L394", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", "target": "orchestrator_test_quiescence_poller_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L394", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", "target": "orchestrator_test_quiescence_poller_make_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L395", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_orchestrator_test_quiescence_poller_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L1", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_42", "target": "orchestrator_test_quiescence_poller_stubnassync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L42", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_76", "target": "orchestrator_test_quiescence_poller_make_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L76", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_102", "target": "orchestrator_test_quiescence_poller_make_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L102", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_129", "target": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L129", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_151", "target": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L151", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_177", "target": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L177", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_193", "target": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L193", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_213", "target": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L213", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_235", "target": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L235", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_286", "target": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L286", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_310", "target": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L310", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_333", "target": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L333", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_364", "target": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L364", "weight": 1.0}, {"source": "orchestrator_test_quiescence_poller_rationale_387", "target": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L387", "weight": 1.0}], "raw_calls": [{"caller_nid": "orchestrator_test_quiescence_poller_stubnassync_enqueue", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L48"}, {"caller_nid": "orchestrator_test_quiescence_poller_stubnassync_enqueue", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L48"}, {"caller_nid": "orchestrator_test_quiescence_poller_transport", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L61"}, {"caller_nid": "orchestrator_test_quiescence_poller_transport", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L66"}, {"caller_nid": "orchestrator_test_quiescence_poller_make_config", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L79"}, {"caller_nid": "orchestrator_test_quiescence_poller_make_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L80"}, {"caller_nid": "orchestrator_test_quiescence_poller_make_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L83"}, {"caller_nid": "orchestrator_test_quiescence_poller_make_config", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L89"}, {"caller_nid": "orchestrator_test_quiescence_poller_make_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L90"}, {"caller_nid": "orchestrator_test_quiescence_poller_make_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L91"}, {"caller_nid": "orchestrator_test_quiescence_poller_make_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L91"}, {"caller_nid": "orchestrator_test_quiescence_poller_make_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L93"}, {"caller_nid": "orchestrator_test_quiescence_poller_make_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L95"}, {"caller_nid": "orchestrator_test_quiescence_poller_make_config", "callee": "SyncConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L97"}, {"caller_nid": "orchestrator_test_quiescence_poller_make_run", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L104"}, {"caller_nid": "orchestrator_test_quiescence_poller_make_run", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L106"}, {"caller_nid": "orchestrator_test_quiescence_poller_poller", "callee": "QuiescenceSyncPoller", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L111"}, {"caller_nid": "orchestrator_test_quiescence_poller_poller", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L114"}, {"caller_nid": "orchestrator_test_quiescence_poller_signature", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L119"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L136"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L141"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L145"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L158"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L160"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L161"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L164"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L167"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L183"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L184"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L186"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L187"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L198"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L200"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L201"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L216"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L217"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L228"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L229"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L230"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L231"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L239"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L240"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L241"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L241"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L243"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L246"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L251"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L254"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "callee": "OrchestratorStagingTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L257"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L264"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "callee": "SyncConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L265"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L272"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L273"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L289"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", "callee": "QuiescenceSyncPoller", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L290"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L295"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L302"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L303"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L313"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", "callee": "QuiescenceSyncPoller", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L314"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L318"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L325"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L326"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L336"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "callee": "QuiescenceSyncPoller", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L337"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L341"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L342"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L345"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L348"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L352"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L353"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L367"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L368"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L369"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L370"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_apply_config_swaps_config_reference", "callee": "apply_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L382"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L398"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L399"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", "callee": "apply_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L402"}, {"caller_nid": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py", "source_location": "L403"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/9c55b162a48e1c9e574e7e6feb7e4c434da98c5703f7b5971bb4593ad57d6e74.json b/graphify-out/cache/ast/9c55b162a48e1c9e574e7e6feb7e4c434da98c5703f7b5971bb4593ad57d6e74.json new file mode 100644 index 0000000..f7743b4 --- /dev/null +++ b/graphify-out/cache/ast/9c55b162a48e1c9e574e7e6feb7e4c434da98c5703f7b5971bb4593ad57d6e74.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/__init__.py", "source_location": "L1"}, {"id": "controller_init_rationale_1", "label": "Controller package. Backend Spec \u00a74.4.1, \u00a74.7, \u00a74.7.1, \u00a74.8. Re-exports the pub", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_init_py", "target": "exlab_wizard_controller_creation", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/__init__.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_init_py", "target": "exlab_wizard_controller_session_store", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/__init__.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_init_py", "target": "exlab_wizard_controller_state_machine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/__init__.py", "source_location": "L27", "weight": 1.0}, {"source": "controller_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/9cb22e43c83bc9bf45410977a595ea27bfdb0856ef3af86d5e2c8bc80dd34097.json b/graphify-out/cache/ast/9cb22e43c83bc9bf45410977a595ea27bfdb0856ef3af86d5e2c8bc80dd34097.json new file mode 100644 index 0000000..d88b899 --- /dev/null +++ b/graphify-out/cache/ast/9cb22e43c83bc9bf45410977a595ea27bfdb0856ef3af86d5e2c8bc80dd34097.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_run_py", "label": "_run.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L1"}, {"id": "transports_run_run_subprocess", "label": "run_subprocess()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L29"}, {"id": "transports_run_rationale_1", "label": "Shared asyncio subprocess helper for transport drivers. Backend Spec \u00a77.1.3. Th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L1"}, {"id": "transports_run_rationale_36", "label": "Launch ``cmd`` and return ``(returncode, stdout, stderr)`` as text. ``env``", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L36"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_run_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_run_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_run_py", "target": "shlex", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_run_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_run_py", "target": "transports_run_run_subprocess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L29", "weight": 1.0}, {"source": "transports_run_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_run_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L1", "weight": 1.0}, {"source": "transports_run_rationale_36", "target": "transports_run_run_subprocess", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L36", "weight": 1.0}], "raw_calls": [{"caller_nid": "transports_run_run_subprocess", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L57"}, {"caller_nid": "transports_run_run_subprocess", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L60"}, {"caller_nid": "transports_run_run_subprocess", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L61"}, {"caller_nid": "transports_run_run_subprocess", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L62"}, {"caller_nid": "transports_run_run_subprocess", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L62"}, {"caller_nid": "transports_run_run_subprocess", "callee": "create_subprocess_exec", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L65"}, {"caller_nid": "transports_run_run_subprocess", "callee": "communicate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L72"}, {"caller_nid": "transports_run_run_subprocess", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L73"}, {"caller_nid": "transports_run_run_subprocess", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py", "source_location": "L74"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/9d8149d9cca840811bc726bff4056c75679163fdeaf48e91152b14b28c9f8885.json b/graphify-out/cache/ast/9d8149d9cca840811bc726bff4056c75679163fdeaf48e91152b14b28c9f8885.json new file mode 100644 index 0000000..6068d8a --- /dev/null +++ b/graphify-out/cache/ast/9d8149d9cca840811bc726bff4056c75679163fdeaf48e91152b14b28c9f8885.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_findings_py", "label": "findings.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L1"}, {"id": "validator_findings_finding", "label": "Finding", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L41"}, {"id": "validator_findings_finding_to_dict", "label": ".to_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L90"}, {"id": "validator_findings_from_dict", "label": "from_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L101"}, {"id": "validator_findings_rationale_1", "label": "Validator finding dataclass and serialization helpers. Backend Spec \u00a711.8 (find", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L1"}, {"id": "validator_findings_rationale_42", "label": "One validator finding. Backend Spec \u00a78.1, \u00a711.8. Frozen so findings can be", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L42"}, {"id": "validator_findings_rationale_91", "label": "Return the \u00a711.8 JSON shape for this finding. The dictionary is suitabl", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L91"}, {"id": "validator_findings_rationale_102", "label": "Reconstruct a :class:`Finding` from its \u00a711.8 JSON shape. The inverse o", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L102"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_findings_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_findings_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_findings_py", "target": "validator_findings_finding", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L41", "weight": 1.0}, {"source": "validator_findings_finding", "target": "validator_findings_finding_to_dict", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L90", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_findings_py", "target": "validator_findings_from_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L101", "weight": 1.0}, {"source": "validator_findings_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_findings_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L1", "weight": 1.0}, {"source": "validator_findings_rationale_42", "target": "validator_findings_finding", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L42", "weight": 1.0}, {"source": "validator_findings_rationale_91", "target": "validator_findings_finding_to_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L91", "weight": 1.0}, {"source": "validator_findings_rationale_102", "target": "validator_findings_finding_from_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L102", "weight": 1.0}], "raw_calls": [{"caller_nid": "validator_findings_finding_to_dict", "callee": "asdict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L98"}, {"caller_nid": "validator_findings_from_dict", "callee": "cls", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L109"}, {"caller_nid": "validator_findings_from_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L115"}, {"caller_nid": "validator_findings_from_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L116"}, {"caller_nid": "validator_findings_from_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L117"}, {"caller_nid": "validator_findings_from_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py", "source_location": "L121"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/9db553ba9c8d0afcf5528ef44b92afd37996c3fb8c45292884631229b53881a1.json b/graphify-out/cache/ast/9db553ba9c8d0afcf5528ef44b92afd37996c3fb8c45292884631229b53881a1.json new file mode 100644 index 0000000..be1ac0d --- /dev/null +++ b/graphify-out/cache/ast/9db553ba9c8d0afcf5528ef44b92afd37996c3fb8c45292884631229b53881a1.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_schema_versions_py", "label": "schema_versions.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/schema_versions.py", "source_location": "L1"}, {"id": "constants_schema_versions_rationale_1", "label": "Schema version pins for every JSON/YAML artifact the wizard reads or writes. Ev", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/schema_versions.py", "source_location": "L1"}], "edges": [{"source": "constants_schema_versions_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_schema_versions_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/schema_versions.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/9e73400ffc0807f7564513028b4b8f1d800142bbe664e9a51b08f67a5fe945c7.json b/graphify-out/cache/ast/9e73400ffc0807f7564513028b4b8f1d800142bbe664e9a51b08f67a5fe945c7.json new file mode 100644 index 0000000..9f72348 --- /dev/null +++ b/graphify-out/cache/ast/9e73400ffc0807f7564513028b4b8f1d800142bbe664e9a51b08f67a5fe945c7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/__init__.py", "source_location": "L1"}, {"id": "cache_init_lock_path_for", "label": "lock_path_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/__init__.py", "source_location": "L14"}, {"id": "cache_init_rationale_1", "label": "Cache package. Backend Spec \u00a711.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/__init__.py", "source_location": "L1"}, {"id": "cache_init_rationale_15", "label": "Return the advisory file-lock path string for ``path``. Centralizes the ``s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/__init__.py", "source_location": "L15"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_init_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/__init__.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_init_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/__init__.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_init_py", "target": "cache_init_lock_path_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/__init__.py", "source_location": "L14", "weight": 1.0}, {"source": "cache_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/__init__.py", "source_location": "L1", "weight": 1.0}, {"source": "cache_init_rationale_15", "target": "cache_init_lock_path_for", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/__init__.py", "source_location": "L15", "weight": 1.0}], "raw_calls": [{"caller_nid": "cache_init_lock_path_for", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/__init__.py", "source_location": "L20"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/9f6514688e8427be97dc6a3390bc823fd9b69976573260f05194670b4afa0358.json b/graphify-out/cache/ast/9f6514688e8427be97dc6a3390bc823fd9b69976573260f05194670b4afa0358.json new file mode 100644 index 0000000..b24e6fa --- /dev/null +++ b/graphify-out/cache/ast/9f6514688e8427be97dc6a3390bc823fd9b69976573260f05194670b4afa0358.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_travelling_badge_py", "label": "test_travelling_badge.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L1"}, {"id": "ui_test_travelling_badge_hard", "label": "_hard()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L17"}, {"id": "ui_test_travelling_badge_soft", "label": "_soft()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L21"}, {"id": "ui_test_travelling_badge_test_badge_on_root_when_all_collapsed", "label": "test_badge_on_root_when_all_collapsed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L25"}, {"id": "ui_test_travelling_badge_test_badge_travels_inward_as_nodes_expand", "label": "test_badge_travels_inward_as_nodes_expand()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L34"}, {"id": "ui_test_travelling_badge_test_badge_lands_on_leaf_when_fully_expanded", "label": "test_badge_lands_on_leaf_when_fully_expanded()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L41"}, {"id": "ui_test_travelling_badge_test_red_beats_amber_when_aggregated_on_same_node", "label": "test_red_beats_amber_when_aggregated_on_same_node()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L52"}, {"id": "ui_test_travelling_badge_test_amber_only_when_no_hard_findings", "label": "test_amber_only_when_no_hard_findings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L62"}, {"id": "ui_test_travelling_badge_test_two_equipment_get_independent_badges", "label": "test_two_equipment_get_independent_badges()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L68"}, {"id": "ui_test_travelling_badge_rationale_1", "label": "Unit tests for the travelling problem-badge pure function. GUI/Orchestrator Red", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L1"}, {"id": "ui_test_travelling_badge_rationale_26", "label": "All collapsed: the badge lives on the shallowest collapsed ancestor \u2014 the ro", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L26"}, {"id": "ui_test_travelling_badge_rationale_35", "label": "Expanding the equipment node moves the badge to the project.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L35"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_travelling_badge_py", "target": "exlab_wizard_ui_components_travelling_badge", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_travelling_badge_py", "target": "ui_test_travelling_badge_hard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_travelling_badge_py", "target": "ui_test_travelling_badge_soft", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_travelling_badge_py", "target": "ui_test_travelling_badge_test_badge_on_root_when_all_collapsed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_travelling_badge_py", "target": "ui_test_travelling_badge_test_badge_travels_inward_as_nodes_expand", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_travelling_badge_py", "target": "ui_test_travelling_badge_test_badge_lands_on_leaf_when_fully_expanded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_travelling_badge_py", "target": "ui_test_travelling_badge_test_red_beats_amber_when_aggregated_on_same_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_travelling_badge_py", "target": "ui_test_travelling_badge_test_amber_only_when_no_hard_findings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_travelling_badge_py", "target": "ui_test_travelling_badge_test_two_equipment_get_independent_badges", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L68", "weight": 1.0}, {"source": "ui_test_travelling_badge_test_badge_on_root_when_all_collapsed", "target": "ui_test_travelling_badge_hard", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L28", "weight": 1.0}, {"source": "ui_test_travelling_badge_test_badge_travels_inward_as_nodes_expand", "target": "ui_test_travelling_badge_hard", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L36", "weight": 1.0}, {"source": "ui_test_travelling_badge_test_badge_lands_on_leaf_when_fully_expanded", "target": "ui_test_travelling_badge_hard", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L42", "weight": 1.0}, {"source": "ui_test_travelling_badge_test_red_beats_amber_when_aggregated_on_same_node", "target": "ui_test_travelling_badge_hard", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L54", "weight": 1.0}, {"source": "ui_test_travelling_badge_test_red_beats_amber_when_aggregated_on_same_node", "target": "ui_test_travelling_badge_soft", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L55", "weight": 1.0}, {"source": "ui_test_travelling_badge_test_amber_only_when_no_hard_findings", "target": "ui_test_travelling_badge_soft", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L63", "weight": 1.0}, {"source": "ui_test_travelling_badge_test_two_equipment_get_independent_badges", "target": "ui_test_travelling_badge_hard", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L70", "weight": 1.0}, {"source": "ui_test_travelling_badge_test_two_equipment_get_independent_badges", "target": "ui_test_travelling_badge_soft", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L71", "weight": 1.0}, {"source": "ui_test_travelling_badge_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_travelling_badge_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_travelling_badge_rationale_26", "target": "ui_test_travelling_badge_test_badge_on_root_when_all_collapsed", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L26", "weight": 1.0}, {"source": "ui_test_travelling_badge_rationale_35", "target": "ui_test_travelling_badge_test_badge_travels_inward_as_nodes_expand", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L35", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_travelling_badge_hard", "callee": "FindingLocation", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L18"}, {"caller_nid": "ui_test_travelling_badge_soft", "callee": "FindingLocation", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L22"}, {"caller_nid": "ui_test_travelling_badge_test_badge_on_root_when_all_collapsed", "callee": "travelling_badges", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L30"}, {"caller_nid": "ui_test_travelling_badge_test_badge_on_root_when_all_collapsed", "callee": "BadgeProps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L31"}, {"caller_nid": "ui_test_travelling_badge_test_badge_travels_inward_as_nodes_expand", "callee": "travelling_badges", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L37"}, {"caller_nid": "ui_test_travelling_badge_test_badge_travels_inward_as_nodes_expand", "callee": "BadgeProps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L38"}, {"caller_nid": "ui_test_travelling_badge_test_badge_lands_on_leaf_when_fully_expanded", "callee": "travelling_badges", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L48"}, {"caller_nid": "ui_test_travelling_badge_test_badge_lands_on_leaf_when_fully_expanded", "callee": "BadgeProps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L49"}, {"caller_nid": "ui_test_travelling_badge_test_red_beats_amber_when_aggregated_on_same_node", "callee": "travelling_badges", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L57"}, {"caller_nid": "ui_test_travelling_badge_test_red_beats_amber_when_aggregated_on_same_node", "callee": "BadgeProps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L59"}, {"caller_nid": "ui_test_travelling_badge_test_amber_only_when_no_hard_findings", "callee": "travelling_badges", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L64"}, {"caller_nid": "ui_test_travelling_badge_test_amber_only_when_no_hard_findings", "callee": "BadgeProps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L65"}, {"caller_nid": "ui_test_travelling_badge_test_two_equipment_get_independent_badges", "callee": "travelling_badges", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L73"}, {"caller_nid": "ui_test_travelling_badge_test_two_equipment_get_independent_badges", "callee": "BadgeProps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L75"}, {"caller_nid": "ui_test_travelling_badge_test_two_equipment_get_independent_badges", "callee": "BadgeProps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py", "source_location": "L76"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/a05d929eec7fe323b5363d8320cd79965b410bc0de8566bf86e29aec9d532181.json b/graphify-out/cache/ast/a05d929eec7fe323b5363d8320cd79965b410bc0de8566bf86e29aec9d532181.json new file mode 100644 index 0000000..b8f7d69 --- /dev/null +++ b/graphify-out/cache/ast/a05d929eec7fe323b5363d8320cd79965b410bc0de8566bf86e29aec9d532181.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_plugin_guide_index_md", "label": "index.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md", "source_location": "L1"}, {"id": "plugin_guide_index_plugin_author_guide", "label": "Plugin Author Guide", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md", "source_location": "L1"}, {"id": "plugin_guide_index_what_plugins_do", "label": "What plugins do", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md", "source_location": "L9"}, {"id": "plugin_guide_index_where_plugins_fit_in_the_pipeline", "label": "Where plugins fit in the pipeline", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md", "source_location": "L21"}, {"id": "plugin_guide_index_codeblock_1", "label": "code:block1 (Creation Controller)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md", "source_location": "L27"}, {"id": "plugin_guide_index_codeblock_2", "label": "code:{toctree} (:maxdepth: 1)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md", "source_location": "L43"}, {"id": "plugin_guide_index_where_to_look_in_the_codebase", "label": "Where to look in the codebase", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md", "source_location": "L52"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_plugin_guide_index_md", "target": "plugin_guide_index_plugin_author_guide", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md", "source_location": "L1", "weight": 1.0}, {"source": "plugin_guide_index_plugin_author_guide", "target": "plugin_guide_index_what_plugins_do", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md", "source_location": "L9", "weight": 1.0}, {"source": "plugin_guide_index_plugin_author_guide", "target": "plugin_guide_index_where_plugins_fit_in_the_pipeline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md", "source_location": "L21", "weight": 1.0}, {"source": "plugin_guide_index_where_plugins_fit_in_the_pipeline", "target": "plugin_guide_index_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md", "source_location": "L27", "weight": 1.0}, {"source": "plugin_guide_index_where_plugins_fit_in_the_pipeline", "target": "plugin_guide_index_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md", "source_location": "L43", "weight": 1.0}, {"source": "plugin_guide_index_plugin_author_guide", "target": "plugin_guide_index_where_to_look_in_the_codebase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md", "source_location": "L52", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/a06f0bc060f9a182c3f42a0fa9a4e58432e62bae6876e7c69a89d48823891bd8.json b/graphify-out/cache/ast/a06f0bc060f9a182c3f42a0fa9a4e58432e62bae6876e7c69a89d48823891bd8.json new file mode 100644 index 0000000..5502785 --- /dev/null +++ b/graphify-out/cache/ast/a06f0bc060f9a182c3f42a0fa9a4e58432e62bae6876e7c69a89d48823891bd8.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_filter_chips_py", "label": "filter_chips.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L1"}, {"id": "components_filter_chips_chipdefinition", "label": "ChipDefinition", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L23"}, {"id": "components_filter_chips_chipstate", "label": "ChipState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L32"}, {"id": "components_filter_chips_initial_state", "label": "initial_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L38"}, {"id": "components_filter_chips_toggle", "label": "toggle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L44"}, {"id": "components_filter_chips_is_active", "label": "is_active()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L51"}, {"id": "components_filter_chips_list_active", "label": "list_active()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L57"}, {"id": "components_filter_chips_filter_chips", "label": "filter_chips()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L63"}, {"id": "components_filter_chips_rationale_1", "label": "Filter-chip strip component (Frontend Spec \u00a73.5.4, \u00a711.1). A row of toggleable", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L1"}, {"id": "components_filter_chips_rationale_24", "label": "One chip in a chip group.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L24"}, {"id": "components_filter_chips_rationale_33", "label": "Mutable state for a chip group.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L33"}, {"id": "components_filter_chips_rationale_39", "label": "Build a :class:`ChipState` from each chip's ``default_on``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L39"}, {"id": "components_filter_chips_rationale_45", "label": "Flip the state of ``chip_id`` and return the new :class:`ChipState`.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L45"}, {"id": "components_filter_chips_rationale_52", "label": "Return ``True`` when ``chip_id`` is currently toggled on.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L52"}, {"id": "components_filter_chips_rationale_58", "label": "Return the ids of currently-active chips, preserving definition order.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L58"}, {"id": "components_filter_chips_rationale_69", "label": "Build the chip strip. Returns the NiceGUI row, or the immutable props dict", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L69"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_filter_chips_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_filter_chips_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_filter_chips_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_filter_chips_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_filter_chips_py", "target": "components_filter_chips_chipdefinition", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_filter_chips_py", "target": "components_filter_chips_chipstate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_filter_chips_py", "target": "components_filter_chips_initial_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_filter_chips_py", "target": "components_filter_chips_toggle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_filter_chips_py", "target": "components_filter_chips_is_active", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_filter_chips_py", "target": "components_filter_chips_list_active", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_filter_chips_py", "target": "components_filter_chips_filter_chips", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L63", "weight": 1.0}, {"source": "components_filter_chips_initial_state", "target": "components_filter_chips_chipstate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L41", "weight": 1.0}, {"source": "components_filter_chips_toggle", "target": "components_filter_chips_chipstate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L48", "weight": 1.0}, {"source": "components_filter_chips_filter_chips", "target": "components_filter_chips_initial_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L74", "weight": 1.0}, {"source": "components_filter_chips_filter_chips", "target": "components_filter_chips_is_active", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L102", "weight": 1.0}, {"source": "components_filter_chips_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_filter_chips_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L1", "weight": 1.0}, {"source": "components_filter_chips_rationale_24", "target": "components_filter_chips_chipdefinition", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L24", "weight": 1.0}, {"source": "components_filter_chips_rationale_33", "target": "components_filter_chips_chipstate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L33", "weight": 1.0}, {"source": "components_filter_chips_rationale_39", "target": "components_filter_chips_initial_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L39", "weight": 1.0}, {"source": "components_filter_chips_rationale_45", "target": "components_filter_chips_toggle", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L45", "weight": 1.0}, {"source": "components_filter_chips_rationale_52", "target": "components_filter_chips_is_active", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L52", "weight": 1.0}, {"source": "components_filter_chips_rationale_58", "target": "components_filter_chips_list_active", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L58", "weight": 1.0}, {"source": "components_filter_chips_rationale_69", "target": "components_filter_chips_filter_chips", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L69", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_filter_chips_filter_chips", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L77"}, {"caller_nid": "components_filter_chips_filter_chips", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L85"}, {"caller_nid": "components_filter_chips_filter_chips", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L85"}, {"caller_nid": "components_filter_chips_filter_chips", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L85"}, {"caller_nid": "components_filter_chips_filter_chips", "callee": "chip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L98"}, {"caller_nid": "components_filter_chips_filter_chips", "callee": "_make_handler", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L100"}, {"caller_nid": "components_filter_chips_filter_chips", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L103"}, {"caller_nid": "components_filter_chips_filter_chips", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py", "source_location": "L105"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/a0d66cf9328b7d5d9fa0626a86bea5d8de3f3f7f4003ccc06eb66a755bfba1e0.json b/graphify-out/cache/ast/a0d66cf9328b7d5d9fa0626a86bea5d8de3f3f7f4003ccc06eb66a755bfba1e0.json new file mode 100644 index 0000000..ef27bf7 --- /dev/null +++ b/graphify-out/cache/ast/a0d66cf9328b7d5d9fa0626a86bea5d8de3f3f7f4003ccc06eb66a755bfba1e0.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "label": "rclone.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L1"}, {"id": "transports_rclone_classify_failure", "label": "_classify_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L69"}, {"id": "transports_rclone_checkresult", "label": "CheckResult", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L93"}, {"id": "transports_rclone_aboutresult", "label": "AboutResult", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L116"}, {"id": "transports_rclone_build_rclone_env", "label": "build_rclone_env()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L135"}, {"id": "transports_rclone_pass_env_keys_for", "label": "pass_env_keys_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L173"}, {"id": "transports_rclone_obscure", "label": "obscure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L188"}, {"id": "transports_rclone_rclonedriver", "label": "RcloneDriver", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L220"}, {"id": "transports_rclone_rclonedriver_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L223"}, {"id": "transports_rclone_rclonedriver_push", "label": ".push()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L226"}, {"id": "transports_rclone_rclonedriver_check", "label": ".check()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L277"}, {"id": "transports_rclone_rclonedriver_about", "label": ".about()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L358"}, {"id": "transports_rclone_parse_combined", "label": "_parse_combined()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L400"}, {"id": "transports_rclone_rationale_1", "label": "rclone transport driver. Backend Spec \u00a77.1.3. Single transport binary for the N", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L1"}, {"id": "transports_rclone_rationale_70", "label": "Map a (returncode, stderr) into a :class:`TransportErrorKind`. Auth failure", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L70"}, {"id": "transports_rclone_rationale_94", "label": "Parsed result of a ``rclone check --combined`` run. The combined-output for", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L94"}, {"id": "transports_rclone_rationale_117", "label": "Outcome of ``rclone about --json``. Surfaces as the equipment-prob", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L117"}, {"id": "transports_rclone_rationale_141", "label": "Build the ``RCLONE_CONFIG__*`` env dict for an inline backend. The", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L141"}, {"id": "transports_rclone_rationale_174", "label": "Return the env-key tuple that must be redacted from subprocess logs. The on", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L174"}, {"id": "transports_rclone_rationale_189", "label": "Return the rclone-obscured form of ``password``. rclone refuses raw passwor", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L189"}, {"id": "transports_rclone_rationale_221", "label": "rclone transport driver. Backend Spec \u00a77.1.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L221"}, {"id": "transports_rclone_rationale_236", "label": "Run ``rclone copy --checksum`` from ``local`` to ``remote``. ``remote``", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L236"}, {"id": "transports_rclone_rationale_286", "label": "Run ``rclone check --download --files-from --combined`` over ``files_from``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L286"}, {"id": "transports_rclone_rationale_365", "label": "Run ``rclone about --json`` -- the equipment probe. Used by th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L365"}, {"id": "transports_rclone_rationale_401", "label": "Parse ``rclone check --combined`` output into a :class:`CheckResult`. Each", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L401"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "shlex", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "exlab_wizard_sync_transports", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "exlab_wizard_sync_transports_run", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "transports_rclone_classify_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "transports_rclone_checkresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "transports_rclone_aboutresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L116", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "transports_rclone_build_rclone_env", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "transports_rclone_pass_env_keys_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L173", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "transports_rclone_obscure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L188", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "transports_rclone_rclonedriver", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L220", "weight": 1.0}, {"source": "transports_rclone_rclonedriver", "target": "transports_rclone_rclonedriver_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L223", "weight": 1.0}, {"source": "transports_rclone_rclonedriver", "target": "transports_rclone_rclonedriver_push", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L226", "weight": 1.0}, {"source": "transports_rclone_rclonedriver", "target": "transports_rclone_rclonedriver_check", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L277", "weight": 1.0}, {"source": "transports_rclone_rclonedriver", "target": "transports_rclone_rclonedriver_about", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L358", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "target": "transports_rclone_parse_combined", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L400", "weight": 1.0}, {"source": "transports_rclone_rclonedriver_push", "target": "transports_rclone_classify_failure", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L267", "weight": 1.0}, {"source": "transports_rclone_rclonedriver_check", "target": "transports_rclone_classify_failure", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L344", "weight": 1.0}, {"source": "transports_rclone_rclonedriver_check", "target": "transports_rclone_parse_combined", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L354", "weight": 1.0}, {"source": "transports_rclone_rclonedriver_about", "target": "transports_rclone_aboutresult", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L381", "weight": 1.0}, {"source": "transports_rclone_rclonedriver_about", "target": "transports_rclone_classify_failure", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L384", "weight": 1.0}, {"source": "transports_rclone_parse_combined", "target": "transports_rclone_checkresult", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L432", "weight": 1.0}, {"source": "transports_rclone_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_transports_rclone_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L1", "weight": 1.0}, {"source": "transports_rclone_rationale_70", "target": "transports_rclone_classify_failure", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L70", "weight": 1.0}, {"source": "transports_rclone_rationale_94", "target": "transports_rclone_checkresult", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L94", "weight": 1.0}, {"source": "transports_rclone_rationale_117", "target": "transports_rclone_aboutresult", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L117", "weight": 1.0}, {"source": "transports_rclone_rationale_141", "target": "transports_rclone_build_rclone_env", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L141", "weight": 1.0}, {"source": "transports_rclone_rationale_174", "target": "transports_rclone_pass_env_keys_for", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L174", "weight": 1.0}, {"source": "transports_rclone_rationale_189", "target": "transports_rclone_obscure", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L189", "weight": 1.0}, {"source": "transports_rclone_rationale_221", "target": "transports_rclone_rclonedriver", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L221", "weight": 1.0}, {"source": "transports_rclone_rationale_236", "target": "transports_rclone_rclonedriver_push", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L236", "weight": 1.0}, {"source": "transports_rclone_rationale_286", "target": "transports_rclone_rclonedriver_check", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L286", "weight": 1.0}, {"source": "transports_rclone_rationale_365", "target": "transports_rclone_rclonedriver_about", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L365", "weight": 1.0}, {"source": "transports_rclone_rationale_401", "target": "transports_rclone_parse_combined", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L401", "weight": 1.0}], "raw_calls": [{"caller_nid": "transports_rclone_classify_failure", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L77"}, {"caller_nid": "transports_rclone_classify_failure", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L78"}, {"caller_nid": "transports_rclone_build_rclone_env", "callee": "upper", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L152"}, {"caller_nid": "transports_rclone_build_rclone_env", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L154"}, {"caller_nid": "transports_rclone_build_rclone_env", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L157"}, {"caller_nid": "transports_rclone_build_rclone_env", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L161"}, {"caller_nid": "transports_rclone_build_rclone_env", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L169"}, {"caller_nid": "transports_rclone_build_rclone_env", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L170"}, {"caller_nid": "transports_rclone_pass_env_keys_for", "callee": "upper", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L180"}, {"caller_nid": "transports_rclone_obscure", "callee": "run_subprocess", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L203"}, {"caller_nid": "transports_rclone_obscure", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L203"}, {"caller_nid": "transports_rclone_obscure", "callee": "TransportError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L206"}, {"caller_nid": "transports_rclone_obscure", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L209"}, {"caller_nid": "transports_rclone_obscure", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L210"}, {"caller_nid": "transports_rclone_obscure", "callee": "TransportError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L211"}, {"caller_nid": "transports_rclone_obscure", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L212"}, {"caller_nid": "transports_rclone_rclonedriver_push", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L252"}, {"caller_nid": "transports_rclone_rclonedriver_push", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L254"}, {"caller_nid": "transports_rclone_rclonedriver_push", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L254"}, {"caller_nid": "transports_rclone_rclonedriver_push", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L255"}, {"caller_nid": "transports_rclone_rclonedriver_push", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L255"}, {"caller_nid": "transports_rclone_rclonedriver_push", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L256"}, {"caller_nid": "transports_rclone_rclonedriver_push", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L256"}, {"caller_nid": "transports_rclone_rclonedriver_push", "callee": "run_subprocess", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L259"}, {"caller_nid": "transports_rclone_rclonedriver_push", "callee": "TransportError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L262"}, {"caller_nid": "transports_rclone_rclonedriver_push", "callee": "TransportResult", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L265"}, {"caller_nid": "transports_rclone_rclonedriver_push", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L268"}, {"caller_nid": "transports_rclone_rclonedriver_push", "callee": "TransportResult", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L269"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "NamedTemporaryFile", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L302"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L309"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L310"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L317"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L319"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L320"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L323"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L323"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "run_subprocess", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L327"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "TransportError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L330"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L339"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L350"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L351"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "TransportError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L352"}, {"caller_nid": "transports_rclone_rclonedriver_check", "callee": "unlink", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L356"}, {"caller_nid": "transports_rclone_rclonedriver_about", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L376"}, {"caller_nid": "transports_rclone_rclonedriver_about", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L376"}, {"caller_nid": "transports_rclone_rclonedriver_about", "callee": "run_subprocess", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L379"}, {"caller_nid": "transports_rclone_rclonedriver_about", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L385"}, {"caller_nid": "transports_rclone_rclonedriver_about", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L388"}, {"caller_nid": "transports_rclone_rclonedriver_about", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L388"}, {"caller_nid": "transports_rclone_rclonedriver_about", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L391"}, {"caller_nid": "transports_rclone_rclonedriver_about", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L391"}, {"caller_nid": "transports_rclone_rclonedriver_about", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L391"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "splitlines", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L413"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L414"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L415"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L421"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L423"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L425"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L427"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L429"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L431"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L433"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L434"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L435"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L436"}, {"caller_nid": "transports_rclone_parse_combined", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py", "source_location": "L437"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/a0d679701d6b9681455a0423756e43793b0035ed53ccd0080a1525ae7d23035c.json b/graphify-out/cache/ast/a0d679701d6b9681455a0423756e43793b0035ed53ccd0080a1525ae7d23035c.json new file mode 100644 index 0000000..2f7fd99 --- /dev/null +++ b/graphify-out/cache/ast/a0d679701d6b9681455a0423756e43793b0035ed53ccd0080a1525ae7d23035c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "label": "test_settings_nas_credentials.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L1"}, {"id": "ui_test_settings_nas_credentials_nas_equipment", "label": "_nas_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L25"}, {"id": "ui_test_settings_nas_credentials_stage_equipment", "label": "_stage_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L41"}, {"id": "ui_test_settings_nas_credentials_config_with", "label": "_config_with()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L56"}, {"id": "ui_test_settings_nas_credentials_testids", "label": "_testids()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L64"}, {"id": "ui_test_settings_nas_credentials_test_sections_omit_nas_credentials_without_password_equipment", "label": "test_sections_omit_nas_credentials_without_password_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L77"}, {"id": "ui_test_settings_nas_credentials_test_sections_insert_nas_credentials_after_equipment", "label": "test_sections_insert_nas_credentials_after_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L85"}, {"id": "ui_test_settings_nas_credentials_test_section_renders_one_row_per_password_equipment", "label": "test_section_renders_one_row_per_password_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L99"}, {"id": "ui_test_settings_nas_credentials_test_section_nav_entry_present_when_password_equipment_exists", "label": "test_section_nav_entry_present_when_password_equipment_exists()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L118"}, {"id": "ui_test_settings_nas_credentials_test_section_nav_entry_absent_for_stage_only_config", "label": "test_section_nav_entry_absent_for_stage_only_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L130"}, {"id": "ui_test_settings_nas_credentials_test_present_password_opens_set_state_with_clear_action", "label": "test_present_password_opens_set_state_with_clear_action()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L141"}, {"id": "ui_test_settings_nas_credentials_test_handlers_factory_called_per_equipment_id", "label": "test_handlers_factory_called_per_equipment_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L155"}, {"id": "ui_test_settings_nas_credentials_rationale_1", "label": "Tests for the Settings NAS-credentials section (rclone-only migration). The sec", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "exlab_wizard_api_app", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "ui_test_settings_nas_credentials_nas_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "ui_test_settings_nas_credentials_stage_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "ui_test_settings_nas_credentials_config_with", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "ui_test_settings_nas_credentials_testids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L64", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "ui_test_settings_nas_credentials_test_sections_omit_nas_credentials_without_password_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L77", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "ui_test_settings_nas_credentials_test_sections_insert_nas_credentials_after_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L85", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "ui_test_settings_nas_credentials_test_section_renders_one_row_per_password_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L99", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "ui_test_settings_nas_credentials_test_section_nav_entry_present_when_password_equipment_exists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L118", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "ui_test_settings_nas_credentials_test_section_nav_entry_absent_for_stage_only_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L130", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "ui_test_settings_nas_credentials_test_present_password_opens_set_state_with_clear_action", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L141", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "target": "ui_test_settings_nas_credentials_test_handlers_factory_called_per_equipment_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L155", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_sections_omit_nas_credentials_without_password_equipment", "target": "ui_test_settings_nas_credentials_config_with", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L78", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_sections_omit_nas_credentials_without_password_equipment", "target": "ui_test_settings_nas_credentials_stage_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L78", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_sections_insert_nas_credentials_after_equipment", "target": "ui_test_settings_nas_credentials_config_with", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L86", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_sections_insert_nas_credentials_after_equipment", "target": "ui_test_settings_nas_credentials_nas_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L86", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_section_renders_one_row_per_password_equipment", "target": "ui_test_settings_nas_credentials_config_with", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L100", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_section_renders_one_row_per_password_equipment", "target": "ui_test_settings_nas_credentials_nas_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L100", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_section_renders_one_row_per_password_equipment", "target": "ui_test_settings_nas_credentials_testids", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L109", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_section_nav_entry_present_when_password_equipment_exists", "target": "ui_test_settings_nas_credentials_config_with", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L119", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_section_nav_entry_present_when_password_equipment_exists", "target": "ui_test_settings_nas_credentials_nas_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L119", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_section_nav_entry_present_when_password_equipment_exists", "target": "ui_test_settings_nas_credentials_testids", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L126", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_section_nav_entry_absent_for_stage_only_config", "target": "ui_test_settings_nas_credentials_config_with", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L131", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_section_nav_entry_absent_for_stage_only_config", "target": "ui_test_settings_nas_credentials_stage_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L131", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_section_nav_entry_absent_for_stage_only_config", "target": "ui_test_settings_nas_credentials_testids", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L137", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_present_password_opens_set_state_with_clear_action", "target": "ui_test_settings_nas_credentials_config_with", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L142", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_present_password_opens_set_state_with_clear_action", "target": "ui_test_settings_nas_credentials_nas_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L142", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_present_password_opens_set_state_with_clear_action", "target": "ui_test_settings_nas_credentials_testids", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L150", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_handlers_factory_called_per_equipment_id", "target": "ui_test_settings_nas_credentials_config_with", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L156", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_test_handlers_factory_called_per_equipment_id", "target": "ui_test_settings_nas_credentials_nas_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L156", "weight": 1.0}, {"source": "ui_test_settings_nas_credentials_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_settings_nas_credentials_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_settings_nas_credentials_nas_equipment", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L26"}, {"caller_nid": "ui_test_settings_nas_credentials_nas_equipment", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L32"}, {"caller_nid": "ui_test_settings_nas_credentials_stage_equipment", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L42"}, {"caller_nid": "ui_test_settings_nas_credentials_stage_equipment", "callee": "OrchestratorStagingTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L48"}, {"caller_nid": "ui_test_settings_nas_credentials_config_with", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L57"}, {"caller_nid": "ui_test_settings_nas_credentials_config_with", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L58"}, {"caller_nid": "ui_test_settings_nas_credentials_config_with", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L59"}, {"caller_nid": "ui_test_settings_nas_credentials_config_with", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L60"}, {"caller_nid": "ui_test_settings_nas_credentials_testids", "callee": "descendants", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L67"}, {"caller_nid": "ui_test_settings_nas_credentials_testids", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L68"}, {"caller_nid": "ui_test_settings_nas_credentials_test_sections_omit_nas_credentials_without_password_equipment", "callee": "settings_sections_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L79"}, {"caller_nid": "ui_test_settings_nas_credentials_test_sections_omit_nas_credentials_without_password_equipment", "callee": "settings_sections_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L81"}, {"caller_nid": "ui_test_settings_nas_credentials_test_sections_omit_nas_credentials_without_password_equipment", "callee": "settings_sections_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L82"}, {"caller_nid": "ui_test_settings_nas_credentials_test_sections_insert_nas_credentials_after_equipment", "callee": "settings_sections_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L87"}, {"caller_nid": "ui_test_settings_nas_credentials_test_sections_insert_nas_credentials_after_equipment", "callee": "index", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L90"}, {"caller_nid": "ui_test_settings_nas_credentials_test_section_renders_one_row_per_password_equipment", "callee": "render_settings_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L101"}, {"caller_nid": "ui_test_settings_nas_credentials_test_section_renders_one_row_per_password_equipment", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L103"}, {"caller_nid": "ui_test_settings_nas_credentials_test_section_nav_entry_present_when_password_equipment_exists", "callee": "render_settings_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L120"}, {"caller_nid": "ui_test_settings_nas_credentials_test_section_nav_entry_present_when_password_equipment_exists", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L122"}, {"caller_nid": "ui_test_settings_nas_credentials_test_section_nav_entry_absent_for_stage_only_config", "callee": "render_settings_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L132"}, {"caller_nid": "ui_test_settings_nas_credentials_test_section_nav_entry_absent_for_stage_only_config", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L134"}, {"caller_nid": "ui_test_settings_nas_credentials_test_present_password_opens_set_state_with_clear_action", "callee": "render_settings_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L143"}, {"caller_nid": "ui_test_settings_nas_credentials_test_present_password_opens_set_state_with_clear_action", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L145"}, {"caller_nid": "ui_test_settings_nas_credentials_test_handlers_factory_called_per_equipment_id", "callee": "render_settings_page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L163"}, {"caller_nid": "ui_test_settings_nas_credentials_test_handlers_factory_called_per_equipment_id", "callee": "SettingsState", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L165"}, {"caller_nid": "ui_test_settings_nas_credentials_test_handlers_factory_called_per_equipment_id", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py", "source_location": "L171"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/a118dfd2d0c11d9ba17cca7fb7021ba0a12df307cd3d0805a97dc63e4171ee85.json b/graphify-out/cache/ast/a118dfd2d0c11d9ba17cca7fb7021ba0a12df307cd3d0805a97dc63e4171ee85.json new file mode 100644 index 0000000..e15e286 --- /dev/null +++ b/graphify-out/cache/ast/a118dfd2d0c11d9ba17cca7fb7021ba0a12df307cd3d0805a97dc63e4171ee85.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "label": "test_pre_sync_gate.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L1"}, {"id": "sync_test_pre_sync_gate_build_creation", "label": "_build_creation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L28"}, {"id": "sync_test_pre_sync_gate_validator", "label": "validator()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L58"}, {"id": "sync_test_pre_sync_gate_test_clean_run_is_eligible", "label": "test_clean_run_is_eligible()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L62"}, {"id": "sync_test_pre_sync_gate_test_hard_finding_blocks", "label": "test_hard_finding_blocks()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L78"}, {"id": "sync_test_pre_sync_gate_test_active_override_unblocks", "label": "test_active_override_unblocks()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L94"}, {"id": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", "label": "test_revoked_override_does_not_unblock()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L130"}, {"id": "sync_test_pre_sync_gate_test_soft_finding_does_not_block", "label": "test_soft_finding_does_not_block()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L165"}, {"id": "sync_test_pre_sync_gate_rationale_1", "label": "Tests for ``exlab_wizard.sync.pre_sync_gate``. Backend Spec \u00a77.3. The Pre-Sync", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L1"}, {"id": "sync_test_pre_sync_gate_rationale_63", "label": "A creation with no validator findings is eligible for sync.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L63"}, {"id": "sync_test_pre_sync_gate_rationale_79", "label": "An unresolved-placeholder token in the path triggers a block.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L79"}, {"id": "sync_test_pre_sync_gate_rationale_95", "label": "An active override matching the finding's rule unblocks sync.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L95"}, {"id": "sync_test_pre_sync_gate_rationale_131", "label": "An override that has been revoked does NOT unblock sync.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L131"}, {"id": "sync_test_pre_sync_gate_rationale_166", "label": "A soft-tier finding (missing-required-field) does NOT block sync. The valid", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L166"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "target": "exlab_wizard_sync_pre_sync_gate", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "target": "exlab_wizard_validator_engine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "target": "sync_test_pre_sync_gate_build_creation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "target": "sync_test_pre_sync_gate_validator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "target": "sync_test_pre_sync_gate_test_clean_run_is_eligible", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "target": "sync_test_pre_sync_gate_test_hard_finding_blocks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L78", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "target": "sync_test_pre_sync_gate_test_active_override_unblocks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L94", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "target": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L130", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "target": "sync_test_pre_sync_gate_test_soft_finding_does_not_block", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L165", "weight": 1.0}, {"source": "sync_test_pre_sync_gate_test_clean_run_is_eligible", "target": "sync_test_pre_sync_gate_build_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L68", "weight": 1.0}, {"source": "sync_test_pre_sync_gate_test_hard_finding_blocks", "target": "sync_test_pre_sync_gate_build_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L84", "weight": 1.0}, {"source": "sync_test_pre_sync_gate_test_active_override_unblocks", "target": "sync_test_pre_sync_gate_build_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L120", "weight": 1.0}, {"source": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", "target": "sync_test_pre_sync_gate_build_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L155", "weight": 1.0}, {"source": "sync_test_pre_sync_gate_test_soft_finding_does_not_block", "target": "sync_test_pre_sync_gate_build_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L177", "weight": 1.0}, {"source": "sync_test_pre_sync_gate_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_sync_test_pre_sync_gate_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L1", "weight": 1.0}, {"source": "sync_test_pre_sync_gate_rationale_63", "target": "sync_test_pre_sync_gate_test_clean_run_is_eligible", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L63", "weight": 1.0}, {"source": "sync_test_pre_sync_gate_rationale_79", "target": "sync_test_pre_sync_gate_test_hard_finding_blocks", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L79", "weight": 1.0}, {"source": "sync_test_pre_sync_gate_rationale_95", "target": "sync_test_pre_sync_gate_test_active_override_unblocks", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L95", "weight": 1.0}, {"source": "sync_test_pre_sync_gate_rationale_131", "target": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L131", "weight": 1.0}, {"source": "sync_test_pre_sync_gate_rationale_166", "target": "sync_test_pre_sync_gate_test_soft_finding_does_not_block", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L166", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_test_pre_sync_gate_build_creation", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L34"}, {"caller_nid": "sync_test_pre_sync_gate_build_creation", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L40"}, {"caller_nid": "sync_test_pre_sync_gate_build_creation", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L45"}, {"caller_nid": "sync_test_pre_sync_gate_build_creation", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L52"}, {"caller_nid": "sync_test_pre_sync_gate_test_clean_run_is_eligible", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L65"}, {"caller_nid": "sync_test_pre_sync_gate_test_clean_run_is_eligible", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L66"}, {"caller_nid": "sync_test_pre_sync_gate_test_clean_run_is_eligible", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L68"}, {"caller_nid": "sync_test_pre_sync_gate_test_clean_run_is_eligible", "callee": "is_eligible", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L69"}, {"caller_nid": "sync_test_pre_sync_gate_test_hard_finding_blocks", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L81"}, {"caller_nid": "sync_test_pre_sync_gate_test_hard_finding_blocks", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L82"}, {"caller_nid": "sync_test_pre_sync_gate_test_hard_finding_blocks", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L84"}, {"caller_nid": "sync_test_pre_sync_gate_test_hard_finding_blocks", "callee": "is_eligible", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L85"}, {"caller_nid": "sync_test_pre_sync_gate_test_hard_finding_blocks", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L91"}, {"caller_nid": "sync_test_pre_sync_gate_test_active_override_unblocks", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L97"}, {"caller_nid": "sync_test_pre_sync_gate_test_active_override_unblocks", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L98"}, {"caller_nid": "sync_test_pre_sync_gate_test_active_override_unblocks", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L101"}, {"caller_nid": "sync_test_pre_sync_gate_test_active_override_unblocks", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L102"}, {"caller_nid": "sync_test_pre_sync_gate_test_active_override_unblocks", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L110"}, {"caller_nid": "sync_test_pre_sync_gate_test_active_override_unblocks", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L111"}, {"caller_nid": "sync_test_pre_sync_gate_test_active_override_unblocks", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L120"}, {"caller_nid": "sync_test_pre_sync_gate_test_active_override_unblocks", "callee": "is_eligible", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L121"}, {"caller_nid": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L133"}, {"caller_nid": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L134"}, {"caller_nid": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L137"}, {"caller_nid": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L138"}, {"caller_nid": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L155"}, {"caller_nid": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", "callee": "is_eligible", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L156"}, {"caller_nid": "sync_test_pre_sync_gate_test_soft_finding_does_not_block", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L175"}, {"caller_nid": "sync_test_pre_sync_gate_test_soft_finding_does_not_block", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L177"}, {"caller_nid": "sync_test_pre_sync_gate_test_soft_finding_does_not_block", "callee": "is_eligible", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py", "source_location": "L178"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/a1de9354fa7c06ffb565def4bc13f4008d0f3a9ddaf1766e0a41f46fbde05573.json b/graphify-out/cache/ast/a1de9354fa7c06ffb565def4bc13f4008d0f3a9ddaf1766e0a41f46fbde05573.json new file mode 100644 index 0000000..b40859a --- /dev/null +++ b/graphify-out/cache/ast/a1de9354fa7c06ffb565def4bc13f4008d0f3a9ddaf1766e0a41f46fbde05573.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_input_required_dialog_py", "label": "input_required_dialog.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L1"}, {"id": "components_input_required_dialog_field_id", "label": "_field_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L23"}, {"id": "components_input_required_dialog_collect_default_values", "label": "collect_default_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L29"}, {"id": "components_input_required_dialog_input_required_dialog", "label": "input_required_dialog()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L50"}, {"id": "components_input_required_dialog_rationale_1", "label": "Plugin ``INPUT_REQUIRED`` escalation dialog (Frontend Spec \u00a79.1). When a plugin", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L1"}, {"id": "components_input_required_dialog_rationale_24", "label": "Return the field's identifier (``id``, falling back to ``key``).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L24"}, {"id": "components_input_required_dialog_rationale_30", "label": "Seed an answers dict from each field's declared default. Booleans default t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L30"}, {"id": "components_input_required_dialog_rationale_58", "label": "Build the \u00a79.1 \"Additional input required\" dialog. Renders one widget per f", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L58"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_input_required_dialog_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_input_required_dialog_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_input_required_dialog_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_input_required_dialog_py", "target": "components_input_required_dialog_field_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_input_required_dialog_py", "target": "components_input_required_dialog_collect_default_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_input_required_dialog_py", "target": "components_input_required_dialog_input_required_dialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L50", "weight": 1.0}, {"source": "components_input_required_dialog_collect_default_values", "target": "components_input_required_dialog_field_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L38", "weight": 1.0}, {"source": "components_input_required_dialog_input_required_dialog", "target": "components_input_required_dialog_collect_default_values", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L66", "weight": 1.0}, {"source": "components_input_required_dialog_input_required_dialog", "target": "components_input_required_dialog_field_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L102", "weight": 1.0}, {"source": "components_input_required_dialog_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_input_required_dialog_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L1", "weight": 1.0}, {"source": "components_input_required_dialog_rationale_24", "target": "components_input_required_dialog_field_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L24", "weight": 1.0}, {"source": "components_input_required_dialog_rationale_30", "target": "components_input_required_dialog_collect_default_values", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L30", "weight": 1.0}, {"source": "components_input_required_dialog_rationale_58", "target": "components_input_required_dialog_input_required_dialog", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L58", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_input_required_dialog_field_id", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L25"}, {"caller_nid": "components_input_required_dialog_field_id", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L25"}, {"caller_nid": "components_input_required_dialog_field_id", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L26"}, {"caller_nid": "components_input_required_dialog_collect_default_values", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L41"}, {"caller_nid": "components_input_required_dialog_collect_default_values", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L41"}, {"caller_nid": "components_input_required_dialog_collect_default_values", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L42"}, {"caller_nid": "components_input_required_dialog_collect_default_values", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L44"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L76"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "dialog", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L76"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L88"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L88"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "card", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L88"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L90"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L90"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L94"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L94"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L94"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L100"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L100"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L105"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L105"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L106"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L106"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L108"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "checkbox", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L108"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L110"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L110"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L111"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L111"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "select", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L111"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L115"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L115"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "textarea", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L115"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L117"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L117"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L117"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L118"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L118"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L118"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L119"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L119"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "_cancel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L119"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L122"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L122"}, {"caller_nid": "components_input_required_dialog_input_required_dialog", "callee": "_submit", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py", "source_location": "L122"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/a33387e54c60ab53c19beed3720c7f130e4022fe9e21680ddabaddafadd695f8.json b/graphify-out/cache/ast/a33387e54c60ab53c19beed3720c7f130e4022fe9e21680ddabaddafadd695f8.json new file mode 100644 index 0000000..c849d51 --- /dev/null +++ b/graphify-out/cache/ast/a33387e54c60ab53c19beed3720c7f130e4022fe9e21680ddabaddafadd695f8.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_utils_state_py", "label": "state.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/state.py", "source_location": "L1"}, {"id": "utils_state_assert_forward_transition", "label": "assert_forward_transition()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/state.py", "source_location": "L14"}, {"id": "utils_state_rationale_1", "label": "Generic forward-transition guard for closed-set state machines. Used by both th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/state.py", "source_location": "L1"}, {"id": "utils_state_rationale_19", "label": "Raise ``ValueError`` when ``current -> new_state`` is not in ``table``. ``t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/state.py", "source_location": "L19"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_utils_state_py", "target": "utils_state_assert_forward_transition", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/state.py", "source_location": "L14", "weight": 1.0}, {"source": "utils_state_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_utils_state_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/state.py", "source_location": "L1", "weight": 1.0}, {"source": "utils_state_rationale_19", "target": "utils_state_assert_forward_transition", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/state.py", "source_location": "L19", "weight": 1.0}], "raw_calls": [{"caller_nid": "utils_state_assert_forward_transition", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/state.py", "source_location": "L27"}, {"caller_nid": "utils_state_assert_forward_transition", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/state.py", "source_location": "L29"}, {"caller_nid": "utils_state_assert_forward_transition", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/state.py", "source_location": "L31"}, {"caller_nid": "utils_state_assert_forward_transition", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/state.py", "source_location": "L31"}, {"caller_nid": "utils_state_assert_forward_transition", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/state.py", "source_location": "L32"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/a3ce57d096782792935b92bb82c746a898b53b8fddbf25d4978125b55e803ae1.json b/graphify-out/cache/ast/a3ce57d096782792935b92bb82c746a898b53b8fddbf25d4978125b55e803ae1.json new file mode 100644 index 0000000..d383cd9 --- /dev/null +++ b/graphify-out/cache/ast/a3ce57d096782792935b92bb82c746a898b53b8fddbf25d4978125b55e803ae1.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "label": "test_limits.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L1"}, {"id": "constants_test_limits_test_plugin_timeout_max_seconds", "label": "test_plugin_timeout_max_seconds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L12"}, {"id": "constants_test_limits_test_plugin_memory_max_mb", "label": "test_plugin_memory_max_mb()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L17"}, {"id": "constants_test_limits_test_plugin_validation_cpu_seconds", "label": "test_plugin_validation_cpu_seconds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L22"}, {"id": "constants_test_limits_test_plugin_validation_memory_mb", "label": "test_plugin_validation_memory_mb()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L27"}, {"id": "constants_test_limits_test_plugin_validation_wall_seconds", "label": "test_plugin_validation_wall_seconds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L32"}, {"id": "constants_test_limits_test_plugin_rlimit_nofile", "label": "test_plugin_rlimit_nofile()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L37"}, {"id": "constants_test_limits_test_plugin_ipc_frame_cap_bytes_is_one_mib", "label": "test_plugin_ipc_frame_cap_bytes_is_one_mib()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L42"}, {"id": "constants_test_limits_test_plugin_api_version", "label": "test_plugin_api_version()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L48"}, {"id": "constants_test_limits_test_plugin_supported_api_versions", "label": "test_plugin_supported_api_versions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L54"}, {"id": "constants_test_limits_test_plugin_forbidden_path_prefixes", "label": "test_plugin_forbidden_path_prefixes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L62"}, {"id": "constants_test_limits_test_label_max_length", "label": "test_label_max_length()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L72"}, {"id": "constants_test_limits_test_objective_max_length", "label": "test_objective_max_length()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L77"}, {"id": "constants_test_limits_test_validator_binary_detect_bytes", "label": "test_validator_binary_detect_bytes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L82"}, {"id": "constants_test_limits_test_log_line_max_bytes", "label": "test_log_line_max_bytes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L87"}, {"id": "constants_test_limits_test_session_gc_after_seconds", "label": "test_session_gc_after_seconds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L92"}, {"id": "constants_test_limits_test_audit_refresh_seconds", "label": "test_audit_refresh_seconds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L97"}, {"id": "constants_test_limits_test_quit_drain_timeout_seconds", "label": "test_quit_drain_timeout_seconds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L102"}, {"id": "constants_test_limits_test_sigterm_drain_timeout_seconds", "label": "test_sigterm_drain_timeout_seconds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L107"}, {"id": "constants_test_limits_test_tray_status_refresh_seconds", "label": "test_tray_status_refresh_seconds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L112"}, {"id": "constants_test_limits_test_worker_timeout_grace_seconds", "label": "test_worker_timeout_grace_seconds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L117"}, {"id": "constants_test_limits_test_window_default_size", "label": "test_window_default_size()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L122"}, {"id": "constants_test_limits_test_notification_coalesce_seconds", "label": "test_notification_coalesce_seconds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L128"}, {"id": "constants_test_limits_test_disk_space_preflight_mib", "label": "test_disk_space_preflight_mib()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L133"}, {"id": "constants_test_limits_test_limits_re_exported_from_package", "label": "test_limits_re_exported_from_package()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L138"}, {"id": "constants_test_limits_rationale_1", "label": "Verify the numeric limits and policy ceilings. Each value here is hard-coded pe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_plugin_timeout_max_seconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_plugin_memory_max_mb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_plugin_validation_cpu_seconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_plugin_validation_memory_mb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_plugin_validation_wall_seconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_plugin_rlimit_nofile", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_plugin_ipc_frame_cap_bytes_is_one_mib", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_plugin_api_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_plugin_supported_api_versions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L54", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_plugin_forbidden_path_prefixes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_label_max_length", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_objective_max_length", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L77", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_validator_binary_detect_bytes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L82", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_log_line_max_bytes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L87", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_session_gc_after_seconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L92", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_audit_refresh_seconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L97", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_quit_drain_timeout_seconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L102", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_sigterm_drain_timeout_seconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L107", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_tray_status_refresh_seconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L112", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_worker_timeout_grace_seconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L117", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_window_default_size", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L122", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_notification_coalesce_seconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L128", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_disk_space_preflight_mib", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L133", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "target": "constants_test_limits_test_limits_re_exported_from_package", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L138", "weight": 1.0}, {"source": "constants_test_limits_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_constants_test_limits_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "constants_test_limits_test_plugin_api_version", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L51"}, {"caller_nid": "constants_test_limits_test_plugin_supported_api_versions", "callee": "frozenset", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L56"}, {"caller_nid": "constants_test_limits_test_plugin_supported_api_versions", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L57"}, {"caller_nid": "constants_test_limits_test_plugin_forbidden_path_prefixes", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L69"}, {"caller_nid": "constants_test_limits_test_limits_re_exported_from_package", "callee": "frozenset", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py", "source_location": "L151"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/a3dcbb34ce16fc4395ec1e31d985f1568f15b1e91b535b8264ca65b9f943aced.json b/graphify-out/cache/ast/a3dcbb34ce16fc4395ec1e31d985f1568f15b1e91b535b8264ca65b9f943aced.json new file mode 100644 index 0000000..c4613e8 --- /dev/null +++ b/graphify-out/cache/ast/a3dcbb34ce16fc4395ec1e31d985f1568f15b1e91b535b8264ca65b9f943aced.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_ux_documentation_py", "label": "test_ux_documentation.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L1"}, {"id": "e2e_test_ux_documentation_render_doc", "label": "_render_doc()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L45"}, {"id": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", "label": "test_ux_interactions_doc_is_current()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L66"}, {"id": "e2e_test_ux_documentation_test_ux_catalog_is_non_trivial", "label": "test_ux_catalog_is_non_trivial()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L86"}, {"id": "e2e_test_ux_documentation_references", "label": "_references()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L97"}, {"id": "e2e_test_ux_documentation_test_ux_interaction_testids_exist_in_source", "label": "test_ux_interaction_testids_exist_in_source()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L116"}, {"id": "e2e_test_ux_documentation_test_ux_interactions_are_e2e_covered", "label": "test_ux_interactions_are_e2e_covered()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L127"}, {"id": "e2e_test_ux_documentation_rationale_1", "label": "Automated UX-interaction documentation + coverage checks. Drives :mod:`tests.e2", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L1"}, {"id": "e2e_test_ux_documentation_rationale_46", "label": "Render the catalog into the ``UX_INTERACTIONS.md`` markdown body.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L46"}, {"id": "e2e_test_ux_documentation_rationale_67", "label": "``docs/UX_INTERACTIONS.md`` is regenerated from the catalog. Regenerates th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L67"}, {"id": "e2e_test_ux_documentation_rationale_87", "label": "Guard against an empty catalog silently passing the other checks.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L87"}, {"id": "e2e_test_ux_documentation_rationale_98", "label": "Return ``True`` when ``haystack`` references ``testid``. Tolerates testids", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L98"}, {"id": "e2e_test_ux_documentation_rationale_117", "label": "Every cataloged ``data-testid`` is present in the UI source.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L117"}, {"id": "e2e_test_ux_documentation_rationale_128", "label": "Every cataloged ``data-testid`` is driven by an e2e test. Scans the whole `", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L128"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_ux_documentation_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_ux_documentation_py", "target": "tests_e2e_ux_catalog", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_ux_documentation_py", "target": "e2e_test_ux_documentation_render_doc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_ux_documentation_py", "target": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L66", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_ux_documentation_py", "target": "e2e_test_ux_documentation_test_ux_catalog_is_non_trivial", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L86", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_ux_documentation_py", "target": "e2e_test_ux_documentation_references", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L97", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_ux_documentation_py", "target": "e2e_test_ux_documentation_test_ux_interaction_testids_exist_in_source", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L116", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_ux_documentation_py", "target": "e2e_test_ux_documentation_test_ux_interactions_are_e2e_covered", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L127", "weight": 1.0}, {"source": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", "target": "e2e_test_ux_documentation_render_doc", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L74", "weight": 1.0}, {"source": "e2e_test_ux_documentation_test_ux_interaction_testids_exist_in_source", "target": "e2e_test_ux_documentation_references", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L122", "weight": 1.0}, {"source": "e2e_test_ux_documentation_test_ux_interactions_are_e2e_covered", "target": "e2e_test_ux_documentation_references", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L140", "weight": 1.0}, {"source": "e2e_test_ux_documentation_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_ux_documentation_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_test_ux_documentation_rationale_46", "target": "e2e_test_ux_documentation_render_doc", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L46", "weight": 1.0}, {"source": "e2e_test_ux_documentation_rationale_67", "target": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L67", "weight": 1.0}, {"source": "e2e_test_ux_documentation_rationale_87", "target": "e2e_test_ux_documentation_test_ux_catalog_is_non_trivial", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L87", "weight": 1.0}, {"source": "e2e_test_ux_documentation_rationale_98", "target": "e2e_test_ux_documentation_references", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L98", "weight": 1.0}, {"source": "e2e_test_ux_documentation_rationale_117", "target": "e2e_test_ux_documentation_test_ux_interaction_testids_exist_in_source", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L117", "weight": 1.0}, {"source": "e2e_test_ux_documentation_rationale_128", "target": "e2e_test_ux_documentation_test_ux_interactions_are_e2e_covered", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L128", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_ux_documentation_render_doc", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L51"}, {"caller_nid": "e2e_test_ux_documentation_render_doc", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L53"}, {"caller_nid": "e2e_test_ux_documentation_render_doc", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L54"}, {"caller_nid": "e2e_test_ux_documentation_render_doc", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L55"}, {"caller_nid": "e2e_test_ux_documentation_render_doc", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L59"}, {"caller_nid": "e2e_test_ux_documentation_render_doc", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L63"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L75"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L75"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L77"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L78"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", "callee": "relative_to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L80"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L83"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_catalog_is_non_trivial", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L88"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_catalog_is_non_trivial", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L90"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_catalog_is_non_trivial", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L94"}, {"caller_nid": "e2e_test_ux_documentation_references", "callee": "rsplit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L110"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interaction_testids_exist_in_source", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L118"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interaction_testids_exist_in_source", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L119"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interaction_testids_exist_in_source", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L119"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interaction_testids_exist_in_source", "callee": "rglob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L119"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interaction_testids_exist_in_source", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L121"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interactions_are_e2e_covered", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L134"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interactions_are_e2e_covered", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L135"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interactions_are_e2e_covered", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L136"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interactions_are_e2e_covered", "callee": "rglob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L136"}, {"caller_nid": "e2e_test_ux_documentation_test_ux_interactions_are_e2e_covered", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py", "source_location": "L139"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/a3f99a44f18af8698afa6fdd29e4c8703138299ce8c8dfd83d91319715f78381.json b/graphify-out/cache/ast/a3f99a44f18af8698afa6fdd29e4c8703138299ce8c8dfd83d91319715f78381.json new file mode 100644 index 0000000..71d8b63 --- /dev/null +++ b/graphify-out/cache/ast/a3f99a44f18af8698afa6fdd29e4c8703138299ce8c8dfd83d91319715f78381.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "label": "main.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L1"}, {"id": "window_main_serverhandshake", "label": "ServerHandshake", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L38"}, {"id": "window_main_serverhandshake_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L43"}, {"id": "window_main_read_server_handshake", "label": "read_server_handshake()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L49"}, {"id": "window_main_is_pid_alive", "label": "is_pid_alive()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L74"}, {"id": "window_main_posix_is_pid_alive", "label": "_posix_is_pid_alive()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L92"}, {"id": "window_main_win_is_pid_alive", "label": "_win_is_pid_alive()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L110"}, {"id": "window_main_main", "label": "main()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L133"}, {"id": "window_main_default_handoff", "label": "_default_handoff()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L173"}, {"id": "window_main_rationale_1", "label": "``exlab-wizard-window`` console_scripts entry point. Backend Spec \u00a715.3.2. Read", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L1"}, {"id": "window_main_rationale_39", "label": "Resolved ``server.json`` contents: ``port`` / ``pid`` / ``started_at``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L39"}, {"id": "window_main_rationale_50", "label": "Read and validate ``/server.json``. Returns the handshake on suc", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L50"}, {"id": "window_main_rationale_75", "label": "Cross-platform \"is this PID a live process?\" check. Implementation: POSIX `", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L75"}, {"id": "window_main_rationale_140", "label": "Entry point. Backend Spec \u00a715.3.2. ``argv`` is ignored at this phase (the s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L140"}, {"id": "window_main_rationale_174", "label": "Hand off control to :mod:`pywebview_app`.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L174"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "target": "window_main_serverhandshake", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L38", "weight": 1.0}, {"source": "window_main_serverhandshake", "target": "window_main_serverhandshake_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "target": "window_main_read_server_handshake", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "target": "window_main_is_pid_alive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L74", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "target": "window_main_posix_is_pid_alive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L92", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "target": "window_main_win_is_pid_alive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L110", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "target": "window_main_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L133", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "target": "window_main_default_handoff", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L173", "weight": 1.0}, {"source": "window_main_read_server_handshake", "target": "window_main_serverhandshake", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L65", "weight": 1.0}, {"source": "window_main_is_pid_alive", "target": "window_main_win_is_pid_alive", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L88", "weight": 1.0}, {"source": "window_main_is_pid_alive", "target": "window_main_posix_is_pid_alive", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L89", "weight": 1.0}, {"source": "window_main_main", "target": "window_main_read_server_handshake", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L154", "weight": 1.0}, {"source": "window_main_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_window_main_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L1", "weight": 1.0}, {"source": "window_main_rationale_39", "target": "window_main_serverhandshake", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L39", "weight": 1.0}, {"source": "window_main_rationale_50", "target": "window_main_read_server_handshake", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L50", "weight": 1.0}, {"source": "window_main_rationale_75", "target": "window_main_is_pid_alive", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L75", "weight": 1.0}, {"source": "window_main_rationale_140", "target": "window_main_main", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L140", "weight": 1.0}, {"source": "window_main_rationale_174", "target": "window_main_default_handoff", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L174", "weight": 1.0}], "raw_calls": [{"caller_nid": "window_main_serverhandshake_init", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L44"}, {"caller_nid": "window_main_serverhandshake_init", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L45"}, {"caller_nid": "window_main_serverhandshake_init", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L46"}, {"caller_nid": "window_main_read_server_handshake", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L57"}, {"caller_nid": "window_main_read_server_handshake", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L58"}, {"caller_nid": "window_main_read_server_handshake", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L61"}, {"caller_nid": "window_main_read_server_handshake", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L61"}, {"caller_nid": "window_main_read_server_handshake", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L66"}, {"caller_nid": "window_main_read_server_handshake", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L67"}, {"caller_nid": "window_main_read_server_handshake", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L68"}, {"caller_nid": "window_main_read_server_handshake", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L68"}, {"caller_nid": "window_main_posix_is_pid_alive", "callee": "kill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L96"}, {"caller_nid": "window_main_win_is_pid_alive", "callee": "OpenProcess", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L117"}, {"caller_nid": "window_main_win_is_pid_alive", "callee": "c_ulong", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L121"}, {"caller_nid": "window_main_win_is_pid_alive", "callee": "GetExitCodeProcess", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L122"}, {"caller_nid": "window_main_win_is_pid_alive", "callee": "byref", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L122"}, {"caller_nid": "window_main_win_is_pid_alive", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L123"}, {"caller_nid": "window_main_win_is_pid_alive", "callee": "CloseHandle", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L125"}, {"caller_nid": "window_main_main", "callee": "ensure_state_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L153"}, {"caller_nid": "window_main_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L156"}, {"caller_nid": "window_main_main", "callee": "alive_check", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L162"}, {"caller_nid": "window_main_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L163"}, {"caller_nid": "window_main_main", "callee": "handler", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L170"}, {"caller_nid": "window_main_default_handoff", "callee": "run_window", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py", "source_location": "L177"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/a40e4db31ea6d70810356c1fb33415b47fe23d048e9222dc044e063e08c02d66.json b/graphify-out/cache/ast/a40e4db31ea6d70810356c1fb33415b47fe23d048e9222dc044e063e08c02d66.json new file mode 100644 index 0000000..27baebb --- /dev/null +++ b/graphify-out/cache/ast/a40e4db31ea6d70810356c1fb33415b47fe23d048e9222dc044e063e08c02d66.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/__init__.py", "source_location": "L1"}, {"id": "plugins_init_rationale_1", "label": "Plugins package. Backend Spec \u00a76. Re-exports the public plugin contract surface", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_init_py", "target": "exlab_wizard_plugins_base", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/__init__.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_init_py", "target": "exlab_wizard_plugins_logger", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/__init__.py", "source_location": "L18", "weight": 1.0}, {"source": "plugins_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/a5109e3486d984bf05821eb1e720e35a3980bf28b801d10b8a3b233aa80f24ce.json b/graphify-out/cache/ast/a5109e3486d984bf05821eb1e720e35a3980bf28b801d10b8a3b233aa80f24ce.json new file mode 100644 index 0000000..be84c4d --- /dev/null +++ b/graphify-out/cache/ast/a5109e3486d984bf05821eb1e720e35a3980bf28b801d10b8a3b233aa80f24ce.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_welcome_py", "label": "welcome.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L1"}, {"id": "pages_welcome_welcomecardspec", "label": "WelcomeCardSpec", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L40"}, {"id": "pages_welcome_welcome_card_spec", "label": "welcome_card_spec()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L53"}, {"id": "pages_welcome_render_welcome_page", "label": "render_welcome_page()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L68"}, {"id": "pages_welcome_rationale_1", "label": "Welcome card page (Frontend Spec \u00a73.1.3). Modal card shown exactly once on the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L1"}, {"id": "pages_welcome_rationale_41", "label": "Render spec captured for unit-test assertions.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L41"}, {"id": "pages_welcome_rationale_54", "label": "Return the immutable spec used to render the welcome card.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L54"}, {"id": "pages_welcome_rationale_73", "label": "Render the welcome card. ``on_get_started`` and ``on_skip`` are invoked wit", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L73"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_welcome_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_welcome_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_welcome_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_welcome_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_welcome_py", "target": "pages_welcome_welcomecardspec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_welcome_py", "target": "pages_welcome_welcome_card_spec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_welcome_py", "target": "pages_welcome_render_welcome_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L68", "weight": 1.0}, {"source": "pages_welcome_welcome_card_spec", "target": "pages_welcome_welcomecardspec", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L56", "weight": 1.0}, {"source": "pages_welcome_render_welcome_page", "target": "pages_welcome_welcome_card_spec", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L80", "weight": 1.0}, {"source": "pages_welcome_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_welcome_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L1", "weight": 1.0}, {"source": "pages_welcome_rationale_41", "target": "pages_welcome_welcomecardspec", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L41", "weight": 1.0}, {"source": "pages_welcome_rationale_54", "target": "pages_welcome_welcome_card_spec", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L54", "weight": 1.0}, {"source": "pages_welcome_rationale_73", "target": "pages_welcome_render_welcome_page", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L73", "weight": 1.0}], "raw_calls": [{"caller_nid": "pages_welcome_render_welcome_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L89"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L89"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "card", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L89"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L100"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L100"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L100"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L107"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L107"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L112"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L112"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L119"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "checkbox", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L119"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L124"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L124"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L128"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L128"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L128"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L129"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L129"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "on_skip", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L131"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L133"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L133"}, {"caller_nid": "pages_welcome_render_welcome_page", "callee": "on_get_started", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py", "source_location": "L135"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/a5d653e6455d2ed0a6a6470eafaf2da4b4ed2d9c46c6c137fc2d4767de21e97f.json b/graphify-out/cache/ast/a5d653e6455d2ed0a6a6470eafaf2da4b4ed2d9c46c6c137fc2d4767de21e97f.json new file mode 100644 index 0000000..cab383c --- /dev/null +++ b/graphify-out/cache/ast/a5d653e6455d2ed0a6a6470eafaf2da4b4ed2d9c46c6c137fc2d4767de21e97f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "label": "test_equipment.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L1"}, {"id": "cache_test_equipment_make_equipment_payload", "label": "_make_equipment_payload()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L35"}, {"id": "cache_test_equipment_make_test_runs_payload", "label": "_make_test_runs_payload()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L62"}, {"id": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", "label": "test_write_equipment_produces_valid_v1_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L83"}, {"id": "cache_test_equipment_test_write_equipment_creates_parent_cache_dir", "label": "test_write_equipment_creates_parent_cache_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L104"}, {"id": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", "label": "test_write_equipment_preserves_first_seen_at_on_rewrite()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L114"}, {"id": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", "label": "test_write_equipment_updates_last_modified_at_on_rewrite()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L131"}, {"id": "cache_test_equipment_test_read_equipment_round_trips", "label": "test_read_equipment_round_trips()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L146"}, {"id": "cache_test_equipment_test_read_equipment_raises_when_file_missing", "label": "test_read_equipment_raises_when_file_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L163"}, {"id": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", "label": "test_write_equipment_corrupt_existing_file_recovers()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L171"}, {"id": "cache_test_equipment_test_write_test_runs_marker_creates_v1_file", "label": "test_write_test_runs_marker_creates_v1_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L193"}, {"id": "cache_test_equipment_test_write_test_runs_marker_creates_parent_dir", "label": "test_write_test_runs_marker_creates_parent_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L206"}, {"id": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", "label": "test_write_test_runs_marker_is_idempotent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L215"}, {"id": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", "label": "test_write_test_runs_marker_concurrent_first_writes_safe()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L239"}, {"id": "cache_test_equipment_test_read_test_runs_marker_round_trips", "label": "test_read_test_runs_marker_round_trips()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L266"}, {"id": "cache_test_equipment_test_require_schema_major_raises_on_none_version", "label": "test_require_schema_major_raises_on_none_version()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L282"}, {"id": "cache_test_equipment_test_require_schema_major_raises_on_empty_version", "label": "test_require_schema_major_raises_on_empty_version()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L291"}, {"id": "cache_test_equipment_test_require_schema_major_raises_on_garbage_version", "label": "test_require_schema_major_raises_on_garbage_version()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L300"}, {"id": "cache_test_equipment_test_require_schema_major_passes_on_same_major", "label": "test_require_schema_major_passes_on_same_major()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L309"}, {"id": "cache_test_equipment_test_read_equipment_skips_check_for_malformed_json", "label": "test_read_equipment_skips_check_for_malformed_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L319"}, {"id": "cache_test_equipment_test_read_equipment_skips_check_when_schema_version_missing", "label": "test_read_equipment_skips_check_when_schema_version_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L332"}, {"id": "cache_test_equipment_rationale_1", "label": "Unit tests for ``exlab_wizard.cache.equipment``. The schemas come from ``exlab_", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L1"}, {"id": "cache_test_equipment_rationale_44", "label": "Build a :class:`EquipmentJson` payload for tests. Timestamps are stamped by", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L44"}, {"id": "cache_test_equipment_rationale_84", "label": "First write produces a parseable v1.0 file with both timestamps stamped.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L84"}, {"id": "cache_test_equipment_rationale_105", "label": "Parent ``.exlab-wizard`` is auto-created if missing.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L105"}, {"id": "cache_test_equipment_rationale_115", "label": "Re-writing an existing file keeps the original ``first_seen_at``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L115"}, {"id": "cache_test_equipment_rationale_132", "label": "``last_modified_at`` advances on every write; ``first_seen_at`` is frozen.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L132"}, {"id": "cache_test_equipment_rationale_147", "label": "A round-trip write \u2192 read returns an equivalent payload.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L147"}, {"id": "cache_test_equipment_rationale_172", "label": "A corrupt existing file is rewritten cleanly; first_seen_at is fresh. The \u00a7", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L172"}, {"id": "cache_test_equipment_rationale_216", "label": "Second write is a no-op even when the input payload differs. Per \u00a711.4.2: s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L216"}, {"id": "cache_test_equipment_rationale_240", "label": "Concurrent first-time writes do not corrupt the file. Two coroutines race t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L240"}, {"id": "cache_test_equipment_rationale_267", "label": "Round-trip: write -> read returns an equivalent payload.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L267"}, {"id": "cache_test_equipment_rationale_283", "label": "An absent or ``None`` ``schema_version`` is a major-mismatch case.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L283"}, {"id": "cache_test_equipment_rationale_292", "label": "Empty string is treated like ``None`` (no parseable major).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L292"}, {"id": "cache_test_equipment_rationale_301", "label": "A non-``MAJOR.MINOR`` string is treated as a major-mismatch case.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L301"}, {"id": "cache_test_equipment_rationale_310", "label": "Same major (different minor) is allowed.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L310"}, {"id": "cache_test_equipment_rationale_320", "label": "The ``_check_schema_major_from_bytes`` helper silently ignores malformed JSO", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L320"}, {"id": "cache_test_equipment_rationale_335", "label": "A file with no ``schema_version`` falls through to the typed decoder (which", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L335"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "exlab_wizard_cache_equipment", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_make_equipment_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_make_test_runs_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_write_equipment_creates_parent_cache_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L104", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L114", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L131", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_read_equipment_round_trips", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L146", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_read_equipment_raises_when_file_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L163", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L171", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_write_test_runs_marker_creates_v1_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L193", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_write_test_runs_marker_creates_parent_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L206", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L215", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L239", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_read_test_runs_marker_round_trips", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L266", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_require_schema_major_raises_on_none_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L282", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_require_schema_major_raises_on_empty_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L291", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_require_schema_major_raises_on_garbage_version", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L300", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_require_schema_major_passes_on_same_major", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L309", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_read_equipment_skips_check_for_malformed_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L319", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "target": "cache_test_equipment_test_read_equipment_skips_check_when_schema_version_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L332", "weight": 1.0}, {"source": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", "target": "cache_test_equipment_make_equipment_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L87", "weight": 1.0}, {"source": "cache_test_equipment_test_write_equipment_creates_parent_cache_dir", "target": "cache_test_equipment_make_equipment_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L109", "weight": 1.0}, {"source": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", "target": "cache_test_equipment_make_equipment_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L118", "weight": 1.0}, {"source": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", "target": "cache_test_equipment_make_equipment_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L135", "weight": 1.0}, {"source": "cache_test_equipment_test_read_equipment_round_trips", "target": "cache_test_equipment_make_equipment_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L150", "weight": 1.0}, {"source": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", "target": "cache_test_equipment_make_equipment_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L181", "weight": 1.0}, {"source": "cache_test_equipment_test_write_test_runs_marker_creates_v1_file", "target": "cache_test_equipment_make_test_runs_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L196", "weight": 1.0}, {"source": "cache_test_equipment_test_write_test_runs_marker_creates_parent_dir", "target": "cache_test_equipment_make_test_runs_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L210", "weight": 1.0}, {"source": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", "target": "cache_test_equipment_make_test_runs_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L224", "weight": 1.0}, {"source": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", "target": "cache_test_equipment_make_test_runs_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L249", "weight": 1.0}, {"source": "cache_test_equipment_test_read_test_runs_marker_round_trips", "target": "cache_test_equipment_make_test_runs_payload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L270", "weight": 1.0}, {"source": "cache_test_equipment_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_cache_test_equipment_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L1", "weight": 1.0}, {"source": "cache_test_equipment_rationale_44", "target": "cache_test_equipment_make_equipment_payload", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L44", "weight": 1.0}, {"source": "cache_test_equipment_rationale_84", "target": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L84", "weight": 1.0}, {"source": "cache_test_equipment_rationale_105", "target": "cache_test_equipment_test_write_equipment_creates_parent_cache_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L105", "weight": 1.0}, {"source": "cache_test_equipment_rationale_115", "target": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L115", "weight": 1.0}, {"source": "cache_test_equipment_rationale_132", "target": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L132", "weight": 1.0}, {"source": "cache_test_equipment_rationale_147", "target": "cache_test_equipment_test_read_equipment_round_trips", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L147", "weight": 1.0}, {"source": "cache_test_equipment_rationale_172", "target": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L172", "weight": 1.0}, {"source": "cache_test_equipment_rationale_216", "target": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L216", "weight": 1.0}, {"source": "cache_test_equipment_rationale_240", "target": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L240", "weight": 1.0}, {"source": "cache_test_equipment_rationale_267", "target": "cache_test_equipment_test_read_test_runs_marker_round_trips", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L267", "weight": 1.0}, {"source": "cache_test_equipment_rationale_283", "target": "cache_test_equipment_test_require_schema_major_raises_on_none_version", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L283", "weight": 1.0}, {"source": "cache_test_equipment_rationale_292", "target": "cache_test_equipment_test_require_schema_major_raises_on_empty_version", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L292", "weight": 1.0}, {"source": "cache_test_equipment_rationale_301", "target": "cache_test_equipment_test_require_schema_major_raises_on_garbage_version", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L301", "weight": 1.0}, {"source": "cache_test_equipment_rationale_310", "target": "cache_test_equipment_test_require_schema_major_passes_on_same_major", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L310", "weight": 1.0}, {"source": "cache_test_equipment_rationale_320", "target": "cache_test_equipment_test_read_equipment_skips_check_for_malformed_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L320", "weight": 1.0}, {"source": "cache_test_equipment_rationale_335", "target": "cache_test_equipment_test_read_equipment_skips_check_when_schema_version_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L335", "weight": 1.0}], "raw_calls": [{"caller_nid": "cache_test_equipment_make_equipment_payload", "callee": "EquipmentJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L51"}, {"caller_nid": "cache_test_equipment_make_test_runs_payload", "callee": "TRMarkerJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L68"}, {"caller_nid": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L85"}, {"caller_nid": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", "callee": "write_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L87"}, {"caller_nid": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L88"}, {"caller_nid": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L88"}, {"caller_nid": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", "callee": "endswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L96"}, {"caller_nid": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", "callee": "endswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L97"}, {"caller_nid": "cache_test_equipment_test_write_equipment_creates_parent_cache_dir", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L106"}, {"caller_nid": "cache_test_equipment_test_write_equipment_creates_parent_cache_dir", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L108"}, {"caller_nid": "cache_test_equipment_test_write_equipment_creates_parent_cache_dir", "callee": "write_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L109"}, {"caller_nid": "cache_test_equipment_test_write_equipment_creates_parent_cache_dir", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L110"}, {"caller_nid": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L116"}, {"caller_nid": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", "callee": "write_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L118"}, {"caller_nid": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L119"}, {"caller_nid": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L119"}, {"caller_nid": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L122"}, {"caller_nid": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", "callee": "write_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L123"}, {"caller_nid": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L124"}, {"caller_nid": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L124"}, {"caller_nid": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L133"}, {"caller_nid": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", "callee": "write_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L135"}, {"caller_nid": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L136"}, {"caller_nid": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L136"}, {"caller_nid": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L137"}, {"caller_nid": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", "callee": "write_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L138"}, {"caller_nid": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L139"}, {"caller_nid": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L139"}, {"caller_nid": "cache_test_equipment_test_read_equipment_round_trips", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L148"}, {"caller_nid": "cache_test_equipment_test_read_equipment_round_trips", "callee": "write_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L150"}, {"caller_nid": "cache_test_equipment_test_read_equipment_round_trips", "callee": "read_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L151"}, {"caller_nid": "cache_test_equipment_test_read_equipment_round_trips", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L152"}, {"caller_nid": "cache_test_equipment_test_read_equipment_round_trips", "callee": "endswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L158"}, {"caller_nid": "cache_test_equipment_test_read_equipment_round_trips", "callee": "endswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L159"}, {"caller_nid": "cache_test_equipment_test_read_equipment_raises_when_file_missing", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L164"}, {"caller_nid": "cache_test_equipment_test_read_equipment_raises_when_file_missing", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L166"}, {"caller_nid": "cache_test_equipment_test_read_equipment_raises_when_file_missing", "callee": "read_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L167"}, {"caller_nid": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L178"}, {"caller_nid": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L180"}, {"caller_nid": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", "callee": "write_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L181"}, {"caller_nid": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L182"}, {"caller_nid": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L182"}, {"caller_nid": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", "callee": "endswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L184"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_creates_v1_file", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L194"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_creates_v1_file", "callee": "write_test_runs_marker", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L196"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_creates_v1_file", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L197"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_creates_v1_file", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L197"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_creates_parent_dir", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L207"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_creates_parent_dir", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L209"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_creates_parent_dir", "callee": "write_test_runs_marker", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L210"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_creates_parent_dir", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L211"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L222"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", "callee": "write_test_runs_marker", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L226"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L227"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", "callee": "write_test_runs_marker", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L228"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L229"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L233"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L246"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L250"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", "callee": "gather", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L252"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", "callee": "write_test_runs_marker", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L252"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L253"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L254"}, {"caller_nid": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L254"}, {"caller_nid": "cache_test_equipment_test_read_test_runs_marker_round_trips", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L268"}, {"caller_nid": "cache_test_equipment_test_read_test_runs_marker_round_trips", "callee": "write_test_runs_marker", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L270"}, {"caller_nid": "cache_test_equipment_test_read_test_runs_marker_round_trips", "callee": "read_test_runs_marker", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L271"}, {"caller_nid": "cache_test_equipment_test_require_schema_major_raises_on_none_version", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L287"}, {"caller_nid": "cache_test_equipment_test_require_schema_major_raises_on_none_version", "callee": "require_schema_major", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L288"}, {"caller_nid": "cache_test_equipment_test_require_schema_major_raises_on_empty_version", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L296"}, {"caller_nid": "cache_test_equipment_test_require_schema_major_raises_on_empty_version", "callee": "require_schema_major", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L297"}, {"caller_nid": "cache_test_equipment_test_require_schema_major_raises_on_garbage_version", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L305"}, {"caller_nid": "cache_test_equipment_test_require_schema_major_raises_on_garbage_version", "callee": "require_schema_major", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L306"}, {"caller_nid": "cache_test_equipment_test_require_schema_major_passes_on_same_major", "callee": "require_schema_major", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L314"}, {"caller_nid": "cache_test_equipment_test_require_schema_major_passes_on_same_major", "callee": "require_schema_major", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L315"}, {"caller_nid": "cache_test_equipment_test_read_equipment_skips_check_for_malformed_json", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L322"}, {"caller_nid": "cache_test_equipment_test_read_equipment_skips_check_for_malformed_json", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L324"}, {"caller_nid": "cache_test_equipment_test_read_equipment_skips_check_for_malformed_json", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L327"}, {"caller_nid": "cache_test_equipment_test_read_equipment_skips_check_for_malformed_json", "callee": "read_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L328"}, {"caller_nid": "cache_test_equipment_test_read_equipment_skips_check_when_schema_version_missing", "callee": "EquipmentCacheWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L337"}, {"caller_nid": "cache_test_equipment_test_read_equipment_skips_check_when_schema_version_missing", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L340"}, {"caller_nid": "cache_test_equipment_test_read_equipment_skips_check_when_schema_version_missing", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L343"}, {"caller_nid": "cache_test_equipment_test_read_equipment_skips_check_when_schema_version_missing", "callee": "read_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py", "source_location": "L344"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/a5ff97af7a71e6a5a1a8c78c22e57b6268ede98ddb0f80feaeba41e8aeb31930.json b/graphify-out/cache/ast/a5ff97af7a71e6a5a1a8c78c22e57b6268ede98ddb0f80feaeba41e8aeb31930.json new file mode 100644 index 0000000..146b134 --- /dev/null +++ b/graphify-out/cache/ast/a5ff97af7a71e6a5a1a8c78c22e57b6268ede98ddb0f80feaeba41e8aeb31930.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_patterns_py", "label": "patterns.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/patterns.py", "source_location": "L1"}, {"id": "constants_patterns_rationale_1", "label": "Regex patterns and filename-rule literals used by validators. Each regex is pro", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/patterns.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_patterns_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/patterns.py", "source_location": "L12", "weight": 1.0}, {"source": "constants_patterns_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_patterns_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/patterns.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/a61cef421981e7e6b926805fae30f66cf94d4d34ebcad103ceb968f4055a51f4.json b/graphify-out/cache/ast/a61cef421981e7e6b926805fae30f66cf94d4d34ebcad103ceb968f4055a51f4.json new file mode 100644 index 0000000..ac6d2ca --- /dev/null +++ b/graphify-out/cache/ast/a61cef421981e7e6b926805fae30f66cf94d4d34ebcad103ceb968f4055a51f4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "label": "test_wizard_equipment.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L1"}, {"id": "ui_test_wizard_equipment_test_wizard_has_four_steps_without_signal_step", "label": "test_wizard_has_four_steps_without_signal_step()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L17"}, {"id": "ui_test_wizard_equipment_state_filled_for", "label": "_state_filled_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L24"}, {"id": "ui_test_wizard_equipment_test_can_advance_identity_requires_id_and_label", "label": "test_can_advance_identity_requires_id_and_label()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L39"}, {"id": "ui_test_wizard_equipment_test_can_advance_identity_rejects_invalid_id", "label": "test_can_advance_identity_rejects_invalid_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L48"}, {"id": "ui_test_wizard_equipment_test_can_advance_paths_requires_both_roots", "label": "test_can_advance_paths_requires_both_roots()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L55"}, {"id": "ui_test_wizard_equipment_test_can_advance_sync_mode_nas_requires_rclone_fields", "label": "test_can_advance_sync_mode_nas_requires_rclone_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L62"}, {"id": "ui_test_wizard_equipment_test_can_advance_sync_mode_stage_requires_staging_fields", "label": "test_can_advance_sync_mode_stage_requires_staging_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L69"}, {"id": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_nas", "label": "test_assemble_round_trips_to_valid_equipment_config_nas()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L78"}, {"id": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_stage", "label": "test_assemble_round_trips_to_valid_equipment_config_stage()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L86"}, {"id": "ui_test_wizard_equipment_test_assemble_rejects_invalid_input", "label": "test_assemble_rejects_invalid_input()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L97"}, {"id": "ui_test_wizard_equipment_rationale_1", "label": "Unit tests for the Add-Equipment wizard. Redesign \u00a76.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L1"}, {"id": "ui_test_wizard_equipment_rationale_18", "label": "The completeness-signal step is removed by the quiescence redesign.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L18"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "target": "exlab_wizard_ui_pages_wizard_equipment", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "target": "ui_test_wizard_equipment_test_wizard_has_four_steps_without_signal_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "target": "ui_test_wizard_equipment_state_filled_for", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "target": "ui_test_wizard_equipment_test_can_advance_identity_requires_id_and_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "target": "ui_test_wizard_equipment_test_can_advance_identity_rejects_invalid_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "target": "ui_test_wizard_equipment_test_can_advance_paths_requires_both_roots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L55", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "target": "ui_test_wizard_equipment_test_can_advance_sync_mode_nas_requires_rclone_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "target": "ui_test_wizard_equipment_test_can_advance_sync_mode_stage_requires_staging_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "target": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_nas", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L78", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "target": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_stage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L86", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "target": "ui_test_wizard_equipment_test_assemble_rejects_invalid_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L97", "weight": 1.0}, {"source": "ui_test_wizard_equipment_test_can_advance_paths_requires_both_roots", "target": "ui_test_wizard_equipment_state_filled_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L56", "weight": 1.0}, {"source": "ui_test_wizard_equipment_test_can_advance_sync_mode_nas_requires_rclone_fields", "target": "ui_test_wizard_equipment_state_filled_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L63", "weight": 1.0}, {"source": "ui_test_wizard_equipment_test_can_advance_sync_mode_stage_requires_staging_fields", "target": "ui_test_wizard_equipment_state_filled_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L70", "weight": 1.0}, {"source": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_nas", "target": "ui_test_wizard_equipment_state_filled_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L79", "weight": 1.0}, {"source": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_stage", "target": "ui_test_wizard_equipment_state_filled_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L87", "weight": 1.0}, {"source": "ui_test_wizard_equipment_test_assemble_rejects_invalid_input", "target": "ui_test_wizard_equipment_state_filled_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L98", "weight": 1.0}, {"source": "ui_test_wizard_equipment_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_wizard_equipment_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_wizard_equipment_rationale_18", "target": "ui_test_wizard_equipment_test_wizard_has_four_steps_without_signal_step", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L18", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_wizard_equipment_test_wizard_has_four_steps_without_signal_step", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L20"}, {"caller_nid": "ui_test_wizard_equipment_test_wizard_has_four_steps_without_signal_step", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L20"}, {"caller_nid": "ui_test_wizard_equipment_state_filled_for", "callee": "EquipmentWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L25"}, {"caller_nid": "ui_test_wizard_equipment_test_can_advance_identity_requires_id_and_label", "callee": "EquipmentWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L40"}, {"caller_nid": "ui_test_wizard_equipment_test_can_advance_identity_requires_id_and_label", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L41"}, {"caller_nid": "ui_test_wizard_equipment_test_can_advance_identity_requires_id_and_label", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L43"}, {"caller_nid": "ui_test_wizard_equipment_test_can_advance_identity_requires_id_and_label", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L45"}, {"caller_nid": "ui_test_wizard_equipment_test_can_advance_identity_rejects_invalid_id", "callee": "EquipmentWizardState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L49"}, {"caller_nid": "ui_test_wizard_equipment_test_can_advance_identity_rejects_invalid_id", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L52"}, {"caller_nid": "ui_test_wizard_equipment_test_can_advance_paths_requires_both_roots", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L57"}, {"caller_nid": "ui_test_wizard_equipment_test_can_advance_paths_requires_both_roots", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L59"}, {"caller_nid": "ui_test_wizard_equipment_test_can_advance_sync_mode_nas_requires_rclone_fields", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L64"}, {"caller_nid": "ui_test_wizard_equipment_test_can_advance_sync_mode_nas_requires_rclone_fields", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L66"}, {"caller_nid": "ui_test_wizard_equipment_test_can_advance_sync_mode_stage_requires_staging_fields", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L72"}, {"caller_nid": "ui_test_wizard_equipment_test_can_advance_sync_mode_stage_requires_staging_fields", "callee": "can_advance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L75"}, {"caller_nid": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_nas", "callee": "assemble_equipment_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L80"}, {"caller_nid": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_stage", "callee": "assemble_equipment_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L91"}, {"caller_nid": "ui_test_wizard_equipment_test_assemble_rejects_invalid_input", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L100"}, {"caller_nid": "ui_test_wizard_equipment_test_assemble_rejects_invalid_input", "callee": "assemble_equipment_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py", "source_location": "L101"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/a815d55d3438d1bc959a6b0f58553b0b56a8fce3d00eeeb7a48cb6ae63afe9f6.json b/graphify-out/cache/ast/a815d55d3438d1bc959a6b0f58553b0b56a8fce3d00eeeb7a48cb6ae63afe9f6.json new file mode 100644 index 0000000..0b13777 --- /dev/null +++ b/graphify-out/cache/ast/a815d55d3438d1bc959a6b0f58553b0b56a8fce3d00eeeb7a48cb6ae63afe9f6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "label": "errors.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L1"}, {"id": "api_errors_extract_or_create_trace_id", "label": "extract_or_create_trace_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L96"}, {"id": "api_errors_build_error_envelope", "label": "build_error_envelope()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L110"}, {"id": "api_errors_error_response", "label": "error_response()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L140"}, {"id": "api_errors_exlab_validation_handler", "label": "_exlab_validation_handler()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L175"}, {"id": "api_errors_pydantic_validation_handler", "label": "_pydantic_validation_handler()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L197"}, {"id": "api_errors_pydantic_error_to_dict", "label": "_pydantic_error_to_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L228"}, {"id": "api_errors_config_error_handler", "label": "_config_error_handler()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L237"}, {"id": "api_errors_keyring_unavailable_handler", "label": "_keyring_unavailable_handler()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L246"}, {"id": "api_errors_schema_major_mismatch_handler", "label": "_schema_major_mismatch_handler()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L255"}, {"id": "api_errors_setup_incomplete_handler", "label": "_setup_incomplete_handler()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L265"}, {"id": "api_errors_template_load_error_handler", "label": "_template_load_error_handler()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L289"}, {"id": "api_errors_http_exception_handler", "label": "_http_exception_handler()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L303"}, {"id": "api_errors_status_to_code", "label": "_status_to_code()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L336"}, {"id": "api_errors_generic_handler", "label": "_generic_handler()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L349"}, {"id": "api_errors_register_exception_handlers", "label": "register_exception_handlers()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L368"}, {"id": "api_errors_register", "label": "_register()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L395"}, {"id": "api_errors_rationale_1", "label": "Error envelope helpers + FastAPI exception handlers. Backend Spec \u00a74.6.3. Every", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L1"}, {"id": "api_errors_rationale_97", "label": "Return the request's ``X-Trace-Id`` header, else a fresh hex id. Server-gen", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L97"}, {"id": "api_errors_rationale_118", "label": "Build the \u00a74.6.3 envelope dict. ``code`` is validated against :data:`ERROR_", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L118"}, {"id": "api_errors_rationale_150", "label": "Build a FastAPI JSONResponse carrying the \u00a74.6.3 envelope. ``extra`` is mer", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L150"}, {"id": "api_errors_rationale_176", "label": "Translate :class:`exlab_wizard.errors.ValidationError` to envelope. The con", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L176"}, {"id": "api_errors_rationale_200", "label": "Translate Pydantic validation errors to the \u00a74.6.3 envelope. FastAPI raises", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L200"}, {"id": "api_errors_rationale_229", "label": "Strip Pydantic error dicts of unhashable / large fields.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L229"}, {"id": "api_errors_rationale_266", "label": "Translate :class:`SetupIncompleteError` to the \u00a74.9.2 envelope. The control", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L266"}, {"id": "api_errors_rationale_304", "label": "Translate an :class:`HTTPException` into the \u00a74.6.3 envelope. Routers raise", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L304"}, {"id": "api_errors_rationale_337", "label": "Best-effort default code for a bare ``HTTPException``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L337"}, {"id": "api_errors_rationale_350", "label": "Catch-all 500 handler. Backend Spec \u00a74.6.3 last paragraph. The exception's", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L350"}, {"id": "api_errors_rationale_369", "label": "Attach the \u00a74.6.3 envelope handlers to a FastAPI app. Registered in priorit", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L369"}, {"id": "api_errors_rationale_400", "label": "Wrap ``app.add_exception_handler`` so the handler is accepted as ``Any``. S", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L400"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "secrets", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "fastapi_exceptions", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "fastapi_responses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_extract_or_create_trace_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L96", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_build_error_envelope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L110", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_error_response", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L140", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_exlab_validation_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L175", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_pydantic_validation_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L197", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_pydantic_error_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L228", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_config_error_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L237", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_keyring_unavailable_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L246", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_schema_major_mismatch_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L255", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_setup_incomplete_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L265", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_template_load_error_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L289", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_http_exception_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L303", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_status_to_code", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L336", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_generic_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L349", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_register_exception_handlers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L368", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "target": "api_errors_register", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L395", "weight": 1.0}, {"source": "api_errors_error_response", "target": "api_errors_extract_or_create_trace_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L156", "weight": 1.0}, {"source": "api_errors_error_response", "target": "api_errors_build_error_envelope", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L157", "weight": 1.0}, {"source": "api_errors_exlab_validation_handler", "target": "api_errors_error_response", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L187", "weight": 1.0}, {"source": "api_errors_pydantic_validation_handler", "target": "api_errors_error_response", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L218", "weight": 1.0}, {"source": "api_errors_pydantic_validation_handler", "target": "api_errors_pydantic_error_to_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L224", "weight": 1.0}, {"source": "api_errors_config_error_handler", "target": "api_errors_error_response", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L238", "weight": 1.0}, {"source": "api_errors_keyring_unavailable_handler", "target": "api_errors_error_response", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L247", "weight": 1.0}, {"source": "api_errors_schema_major_mismatch_handler", "target": "api_errors_error_response", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L256", "weight": 1.0}, {"source": "api_errors_setup_incomplete_handler", "target": "api_errors_error_response", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L280", "weight": 1.0}, {"source": "api_errors_template_load_error_handler", "target": "api_errors_error_response", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L295", "weight": 1.0}, {"source": "api_errors_http_exception_handler", "target": "api_errors_error_response", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L319", "weight": 1.0}, {"source": "api_errors_http_exception_handler", "target": "api_errors_status_to_code", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L330", "weight": 1.0}, {"source": "api_errors_generic_handler", "target": "api_errors_extract_or_create_trace_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L357", "weight": 1.0}, {"source": "api_errors_generic_handler", "target": "api_errors_error_response", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L359", "weight": 1.0}, {"source": "api_errors_register_exception_handlers", "target": "api_errors_register", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L383", "weight": 1.0}, {"source": "api_errors_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_errors_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L1", "weight": 1.0}, {"source": "api_errors_rationale_97", "target": "api_errors_extract_or_create_trace_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L97", "weight": 1.0}, {"source": "api_errors_rationale_118", "target": "api_errors_build_error_envelope", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L118", "weight": 1.0}, {"source": "api_errors_rationale_150", "target": "api_errors_error_response", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L150", "weight": 1.0}, {"source": "api_errors_rationale_176", "target": "api_errors_exlab_validation_handler", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L176", "weight": 1.0}, {"source": "api_errors_rationale_200", "target": "api_errors_pydantic_validation_handler", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L200", "weight": 1.0}, {"source": "api_errors_rationale_229", "target": "api_errors_pydantic_error_to_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L229", "weight": 1.0}, {"source": "api_errors_rationale_266", "target": "api_errors_setup_incomplete_handler", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L266", "weight": 1.0}, {"source": "api_errors_rationale_304", "target": "api_errors_http_exception_handler", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L304", "weight": 1.0}, {"source": "api_errors_rationale_337", "target": "api_errors_status_to_code", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L337", "weight": 1.0}, {"source": "api_errors_rationale_350", "target": "api_errors_generic_handler", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L350", "weight": 1.0}, {"source": "api_errors_rationale_369", "target": "api_errors_register_exception_handlers", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L369", "weight": 1.0}, {"source": "api_errors_rationale_400", "target": "api_errors_register", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L400", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_errors_extract_or_create_trace_id", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L104"}, {"caller_nid": "api_errors_extract_or_create_trace_id", "callee": "token_hex", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L107"}, {"caller_nid": "api_errors_build_error_envelope", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L125"}, {"caller_nid": "api_errors_build_error_envelope", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L134"}, {"caller_nid": "api_errors_error_response", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L165"}, {"caller_nid": "api_errors_error_response", "callee": "JSONResponse", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L167"}, {"caller_nid": "api_errors_exlab_validation_handler", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L184"}, {"caller_nid": "api_errors_exlab_validation_handler", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L185"}, {"caller_nid": "api_errors_exlab_validation_handler", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L186"}, {"caller_nid": "api_errors_exlab_validation_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L189"}, {"caller_nid": "api_errors_exlab_validation_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L190"}, {"caller_nid": "api_errors_exlab_validation_handler", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L190"}, {"caller_nid": "api_errors_exlab_validation_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L190"}, {"caller_nid": "api_errors_exlab_validation_handler", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L192"}, {"caller_nid": "api_errors_exlab_validation_handler", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L193"}, {"caller_nid": "api_errors_pydantic_validation_handler", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L206"}, {"caller_nid": "api_errors_pydantic_validation_handler", "callee": "errors", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L206"}, {"caller_nid": "api_errors_pydantic_validation_handler", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L208"}, {"caller_nid": "api_errors_pydantic_validation_handler", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L212"}, {"caller_nid": "api_errors_pydantic_validation_handler", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L214"}, {"caller_nid": "api_errors_pydantic_validation_handler", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L215"}, {"caller_nid": "api_errors_pydantic_validation_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L215"}, {"caller_nid": "api_errors_pydantic_validation_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L221"}, {"caller_nid": "api_errors_pydantic_validation_handler", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L221"}, {"caller_nid": "api_errors_pydantic_error_to_dict", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L231"}, {"caller_nid": "api_errors_pydantic_error_to_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L231"}, {"caller_nid": "api_errors_pydantic_error_to_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L232"}, {"caller_nid": "api_errors_pydantic_error_to_dict", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L233"}, {"caller_nid": "api_errors_config_error_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L241"}, {"caller_nid": "api_errors_keyring_unavailable_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L250"}, {"caller_nid": "api_errors_schema_major_mismatch_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L259"}, {"caller_nid": "api_errors_setup_incomplete_handler", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L274"}, {"caller_nid": "api_errors_setup_incomplete_handler", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L279"}, {"caller_nid": "api_errors_setup_incomplete_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L283"}, {"caller_nid": "api_errors_template_load_error_handler", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L292"}, {"caller_nid": "api_errors_template_load_error_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L298"}, {"caller_nid": "api_errors_http_exception_handler", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L311"}, {"caller_nid": "api_errors_http_exception_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L312"}, {"caller_nid": "api_errors_http_exception_handler", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L312"}, {"caller_nid": "api_errors_http_exception_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L313"}, {"caller_nid": "api_errors_http_exception_handler", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L313"}, {"caller_nid": "api_errors_http_exception_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L313"}, {"caller_nid": "api_errors_http_exception_handler", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L314"}, {"caller_nid": "api_errors_http_exception_handler", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L315"}, {"caller_nid": "api_errors_http_exception_handler", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L317"}, {"caller_nid": "api_errors_http_exception_handler", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L331"}, {"caller_nid": "api_errors_generic_handler", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L358"}, {"caller_nid": "api_errors_register", "callee": "add_exception_handler", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py", "source_location": "L408"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/aa0d41659d5eeb92a3bac34d443ef0eaa42d4504ffe0229770901b7e402f887f.json b/graphify-out/cache/ast/aa0d41659d5eeb92a3bac34d443ef0eaa42d4504ffe0229770901b7e402f887f.json new file mode 100644 index 0000000..9998c67 --- /dev/null +++ b/graphify-out/cache/ast/aa0d41659d5eeb92a3bac34d443ef0eaa42d4504ffe0229770901b7e402f887f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "label": "test_mount.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1"}, {"id": "ui_test_mount_deps", "label": "_deps()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L29"}, {"id": "ui_test_mount_config", "label": "_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L43"}, {"id": "ui_test_mount_fluent", "label": "_Fluent", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L79"}, {"id": "ui_test_mount_fluent_props", "label": ".props()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L82"}, {"id": "ui_test_mount_fluent_style", "label": ".style()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L85"}, {"id": "ui_test_mount_fluent_classes", "label": ".classes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L88"}, {"id": "ui_test_mount_fluent_enter", "label": ".__enter__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L91"}, {"id": "ui_test_mount_fluent_exit", "label": ".__exit__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L94"}, {"id": "ui_test_mount_fakeui", "label": "_FakeUI", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L98"}, {"id": "ui_test_mount_fakeui_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L101"}, {"id": "ui_test_mount_fakeui_card", "label": ".card()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L107"}, {"id": "ui_test_mount_fakeui_label", "label": ".label()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L111"}, {"id": "ui_test_mount_boomui", "label": "_BoomUI", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L116"}, {"id": "ui_test_mount_boomui_card", "label": ".card()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L119"}, {"id": "ui_test_mount_boomui_label", "label": ".label()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L123"}, {"id": "ui_test_mount_fakecontroller", "label": "_FakeController", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L128"}, {"id": "ui_test_mount_fakecontroller_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L131"}, {"id": "ui_test_mount_fakecontroller_status", "label": ".status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L147"}, {"id": "ui_test_mount_fakecontroller_create_project", "label": ".create_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L150"}, {"id": "ui_test_mount_fakecontroller_create_run", "label": ".create_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L157"}, {"id": "ui_test_mount_test_is_setup_ready_false_when_deps_none", "label": "test_is_setup_ready_false_when_deps_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L175"}, {"id": "ui_test_mount_test_is_setup_ready_false_when_config_missing", "label": "test_is_setup_ready_false_when_config_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L179"}, {"id": "ui_test_mount_test_is_setup_ready_false_when_keyring_missing", "label": "test_is_setup_ready_false_when_keyring_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L183"}, {"id": "ui_test_mount_test_is_setup_ready_false_when_lims_unreachable", "label": "test_is_setup_ready_false_when_lims_unreachable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L194"}, {"id": "ui_test_mount_test_is_setup_ready_true_when_all_satisfied", "label": "test_is_setup_ready_true_when_all_satisfied()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L204"}, {"id": "ui_test_mount_test_is_setup_ready_false_when_nas_credential_missing", "label": "test_is_setup_ready_false_when_nas_credential_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L214"}, {"id": "ui_test_mount_test_is_setup_ready_true_with_offline_catalogue_lims", "label": "test_is_setup_ready_true_with_offline_catalogue_lims()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L225"}, {"id": "ui_test_mount_test_build_main_state_marks_incomplete_without_config", "label": "test_build_main_state_marks_incomplete_without_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L246"}, {"id": "ui_test_mount_test_build_main_state_sources_problems_counts_from_audit", "label": "test_build_main_state_sources_problems_counts_from_audit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L255"}, {"id": "ui_test_mount_test_build_main_state_always_on_orchestrator", "label": "test_build_main_state_always_on_orchestrator()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L263"}, {"id": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "label": "test_operation_counts_distinguishes_panel_active_and_input_required()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L281"}, {"id": "ui_test_mount_test_operation_counts_zero_without_controller", "label": "test_operation_counts_zero_without_controller()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L302"}, {"id": "ui_test_mount_test_missing_sections_when_deps_none", "label": "test_missing_sections_when_deps_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L311"}, {"id": "ui_test_mount_test_missing_sections_when_config_none", "label": "test_missing_sections_when_config_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L315"}, {"id": "ui_test_mount_test_missing_sections_with_paths_unset", "label": "test_missing_sections_with_paths_unset()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L322"}, {"id": "ui_test_mount_test_missing_sections_with_keyring_absent_reports_lims", "label": "test_missing_sections_with_keyring_absent_reports_lims()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L331"}, {"id": "ui_test_mount_test_missing_sections_empty_when_fully_configured", "label": "test_missing_sections_empty_when_fully_configured()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L336"}, {"id": "ui_test_mount_nas_config", "label": "_nas_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L341"}, {"id": "ui_test_mount_test_missing_sections_includes_nas_credentials_when_password_absent", "label": "test_missing_sections_includes_nas_credentials_when_password_absent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L385"}, {"id": "ui_test_mount_test_missing_sections_excludes_nas_credentials_when_password_present", "label": "test_missing_sections_excludes_nas_credentials_when_password_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L394"}, {"id": "ui_test_mount_raisingvalidator", "label": "_RaisingValidator", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L408"}, {"id": "ui_test_mount_raisingvalidator_audit", "label": ".audit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L409"}, {"id": "ui_test_mount_okvalidator", "label": "_OkValidator", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L414"}, {"id": "ui_test_mount_okvalidator_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L415"}, {"id": "ui_test_mount_okvalidator_audit", "label": ".audit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L418"}, {"id": "ui_test_mount_test_safe_audit_returns_empty_list_when_validator_missing", "label": "test_safe_audit_returns_empty_list_when_validator_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L422"}, {"id": "ui_test_mount_test_safe_audit_swallows_validator_exception", "label": "test_safe_audit_swallows_validator_exception()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L426"}, {"id": "ui_test_mount_test_safe_audit_forwards_validator_output", "label": "test_safe_audit_forwards_validator_output()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L434"}, {"id": "ui_test_mount_test_staging_state_when_staging_root_missing", "label": "test_staging_state_when_staging_root_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L445"}, {"id": "ui_test_mount_test_staging_state_none_when_no_config", "label": "test_staging_state_none_when_no_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L460"}, {"id": "ui_test_mount_test_staging_state_returns_empty_rows_on_query_failure", "label": "test_staging_state_returns_empty_rows_on_query_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L464"}, {"id": "ui_test_mount_navspy", "label": "_NavSpy", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L492"}, {"id": "ui_test_mount_navspy_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L495"}, {"id": "ui_test_mount_test_persist_config_writes_and_applies_live", "label": "test_persist_config_writes_and_applies_live()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L500"}, {"id": "ui_test_mount_test_persist_config_returns_false_when_no_saver", "label": "test_persist_config_returns_false_when_no_saver()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L523"}, {"id": "ui_test_mount_test_persist_config_returns_false_when_saver_raises", "label": "test_persist_config_returns_false_when_saver_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L535"}, {"id": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", "label": "test_persist_config_warns_when_saver_returns_awaitable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L552"}, {"id": "ui_test_mount_test_persist_config_creates_staging_root_when_set", "label": "test_persist_config_creates_staging_root_when_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L575"}, {"id": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", "label": "test_persist_config_does_not_create_staging_root_when_blank()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L590"}, {"id": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", "label": "test_persist_config_staging_dir_failure_is_non_fatal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L604"}, {"id": "ui_test_mount_test_apply_live_config_falls_back_to_setting_config", "label": "test_apply_live_config_falls_back_to_setting_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L630"}, {"id": "ui_test_mount_test_render_unavailable_renders_headline_and_subline", "label": "test_render_unavailable_renders_headline_and_subline()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L656"}, {"id": "ui_test_mount_test_render_unavailable_swallows_failure", "label": "test_render_unavailable_swallows_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L663"}, {"id": "ui_test_mount_test_show_toast_positive_and_negative_never_raise", "label": "test_show_toast_positive_and_negative_never_raise()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L674"}, {"id": "ui_test_mount_test_show_toast_swallows_notification_failure", "label": "test_show_toast_swallows_notification_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L681"}, {"id": "ui_test_mount_recordingkeyringstore", "label": "_RecordingKeyringStore", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L700"}, {"id": "ui_test_mount_recordingkeyringstore_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L703"}, {"id": "ui_test_mount_recordingkeyringstore_set_password", "label": ".set_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L708"}, {"id": "ui_test_mount_recordingkeyringstore_delete_password", "label": ".delete_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L714"}, {"id": "ui_test_mount_test_lims_credential_handlers_save_writes_under_lims_username", "label": "test_lims_credential_handlers_save_writes_under_lims_username()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L721"}, {"id": "ui_test_mount_test_lims_credential_handlers_clear_deletes_under_lims_username", "label": "test_lims_credential_handlers_clear_deletes_under_lims_username()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L730"}, {"id": "ui_test_mount_test_lims_credential_handlers_tolerate_missing_keyring_store", "label": "test_lims_credential_handlers_tolerate_missing_keyring_store()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L739"}, {"id": "ui_test_mount_test_lims_credential_handlers_swallow_backend_errors", "label": "test_lims_credential_handlers_swallow_backend_errors()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L748"}, {"id": "ui_test_mount_test_nas_credential_handlers_save_writes_under_nas_username", "label": "test_nas_credential_handlers_save_writes_under_nas_username()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L763"}, {"id": "ui_test_mount_test_nas_credential_handlers_clear_deletes_and_discards", "label": "test_nas_credential_handlers_clear_deletes_and_discards()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L779"}, {"id": "ui_test_mount_test_nas_credential_handlers_isolate_per_equipment_id", "label": "test_nas_credential_handlers_isolate_per_equipment_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L793"}, {"id": "ui_test_mount_test_nas_credential_handlers_tolerate_missing_keyring_store", "label": "test_nas_credential_handlers_tolerate_missing_keyring_store()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L806"}, {"id": "ui_test_mount_test_apply_autostart_noop_when_deps_none", "label": "test_apply_autostart_noop_when_deps_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L819"}, {"id": "ui_test_mount_test_apply_autostart_noop_when_toggle_missing", "label": "test_apply_autostart_noop_when_toggle_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L823"}, {"id": "ui_test_mount_test_apply_autostart_invokes_toggle", "label": "test_apply_autostart_invokes_toggle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L827"}, {"id": "ui_test_mount_test_apply_autostart_returns_real_registration_state", "label": "test_apply_autostart_returns_real_registration_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L834"}, {"id": "ui_test_mount_test_apply_autostart_swallows_toggle_failure", "label": "test_apply_autostart_swallows_toggle_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L843"}, {"id": "ui_test_mount_test_templates_dir_none_when_deps_none", "label": "test_templates_dir_none_when_deps_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L860"}, {"id": "ui_test_mount_test_templates_dir_none_when_config_none", "label": "test_templates_dir_none_when_config_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L864"}, {"id": "ui_test_mount_test_templates_dir_none_when_unset", "label": "test_templates_dir_none_when_unset()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L868"}, {"id": "ui_test_mount_test_templates_dir_returns_path", "label": "test_templates_dir_returns_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L872"}, {"id": "ui_test_mount_test_equipment_ids_empty_without_config", "label": "test_equipment_ids_empty_without_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L877"}, {"id": "ui_test_mount_test_equipment_ids_lists_configured_ids", "label": "test_equipment_ids_lists_configured_ids()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L881"}, {"id": "ui_test_mount_test_template_names_empty_without_templates_dir", "label": "test_template_names_empty_without_templates_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L893"}, {"id": "ui_test_mount_test_template_names_lists_summary_names", "label": "test_template_names_lists_summary_names()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L897"}, {"id": "ui_test_mount_test_template_names_swallows_scan_failure", "label": "test_template_names_swallows_scan_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L909"}, {"id": "ui_test_mount_test_lims_projects_empty_without_config", "label": "test_lims_projects_empty_without_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L929"}, {"id": "ui_test_mount_test_lims_projects_empty_without_catalogue_path", "label": "test_lims_projects_empty_without_catalogue_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L933"}, {"id": "ui_test_mount_test_lims_projects_empty_when_catalogue_missing", "label": "test_lims_projects_empty_when_catalogue_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L937"}, {"id": "ui_test_mount_test_lims_projects_reads_offline_catalogue", "label": "test_lims_projects_reads_offline_catalogue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L942"}, {"id": "ui_test_mount_test_lims_projects_swallows_read_failure", "label": "test_lims_projects_swallows_read_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L963"}, {"id": "ui_test_mount_fakelimsclient", "label": "_FakeLimsClient", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L980"}, {"id": "ui_test_mount_fakelimsclient_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L983"}, {"id": "ui_test_mount_fakelimsclient_list_projects", "label": ".list_projects()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L988"}, {"id": "ui_test_mount_test_lims_projects_uses_live_lims", "label": "test_lims_projects_uses_live_lims()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L996"}, {"id": "ui_test_mount_test_lims_projects_skips_live_lims_when_unreachable", "label": "test_lims_projects_skips_live_lims_when_unreachable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1010"}, {"id": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", "label": "test_lims_projects_falls_back_to_catalogue_on_live_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1017"}, {"id": "ui_test_mount_test_template_questions_map_empty_without_templates_dir", "label": "test_template_questions_map_empty_without_templates_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1052"}, {"id": "ui_test_mount_test_template_questions_map_resolves_questions", "label": "test_template_questions_map_resolves_questions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1056"}, {"id": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", "label": "test_template_questions_map_skips_unresolvable_template()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1077"}, {"id": "ui_test_mount_test_await_session_awaits_pending_task", "label": "test_await_session_awaits_pending_task()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1102"}, {"id": "ui_test_mount_test_await_session_without_pending_task", "label": "test_await_session_without_pending_task()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1115"}, {"id": "ui_test_mount_test_run_creation_navigates_home_on_done", "label": "test_run_creation_navigates_home_on_done()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1127"}, {"id": "ui_test_mount_test_run_creation_reports_failure_state", "label": "test_run_creation_reports_failure_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1134"}, {"id": "ui_test_mount_test_run_creation_swallows_create_exception", "label": "test_run_creation_swallows_create_exception()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1142"}, {"id": "ui_test_mount_test_submit_project_toasts_when_controller_missing", "label": "test_submit_project_toasts_when_controller_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1160"}, {"id": "ui_test_mount_test_submit_project_toasts_without_template", "label": "test_submit_project_toasts_without_template()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1166"}, {"id": "ui_test_mount_test_submit_project_builds_request_and_runs", "label": "test_submit_project_builds_request_and_runs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1174"}, {"id": "ui_test_mount_test_submit_run_toasts_when_controller_missing", "label": "test_submit_run_toasts_when_controller_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1195"}, {"id": "ui_test_mount_test_submit_run_builds_request_and_runs", "label": "test_submit_run_builds_request_and_runs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1201"}, {"id": "ui_test_mount_test_build_main_query_omits_empty_params", "label": "test_build_main_query_omits_empty_params()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1226"}, {"id": "ui_test_mount_test_build_main_query_url_encodes_special_chars", "label": "test_build_main_query_url_encodes_special_chars()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1234"}, {"id": "ui_test_mount_test_classify_node_returns_none_for_empty_selection", "label": "test_classify_node_returns_none_for_empty_selection()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1246"}, {"id": "ui_test_mount_test_classify_node_discriminates_kinds", "label": "test_classify_node_discriminates_kinds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1251"}, {"id": "ui_test_mount_test_classify_node_rejects_unknown_root", "label": "test_classify_node_rejects_unknown_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1272"}, {"id": "ui_test_mount_test_build_metadata_payload_returns_empty_when_node_missing", "label": "test_build_metadata_payload_returns_empty_when_node_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1288"}, {"id": "ui_test_mount_test_build_metadata_payload_owned_equipment_reads_config", "label": "test_build_metadata_payload_owned_equipment_reads_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1294"}, {"id": "ui_test_mount_test_build_metadata_payload_unknown_equipment_id_returns_empty", "label": "test_build_metadata_payload_unknown_equipment_id_returns_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1312"}, {"id": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", "label": "test_build_metadata_payload_project_scans_run_counts()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1319"}, {"id": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "label": "test_build_metadata_payload_run_parses_creation_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1338"}, {"id": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", "label": "test_build_metadata_payload_run_missing_creation_returns_path_only()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1383"}, {"id": "ui_test_mount_test_build_main_state_threads_selection_into_state", "label": "test_build_main_state_threads_selection_into_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1392"}, {"id": "ui_test_mount_test_open_in_os_returns_false_on_unhandled_platform", "label": "test_open_in_os_returns_false_on_unhandled_platform()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1408"}, {"id": "ui_test_mount_test_open_in_os_linux_invokes_xdg_open", "label": "test_open_in_os_linux_invokes_xdg_open()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1416"}, {"id": "ui_test_mount_test_open_in_os_darwin_invokes_open", "label": "test_open_in_os_darwin_invokes_open()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1430"}, {"id": "ui_test_mount_test_open_in_os_returns_false_when_popen_raises", "label": "test_open_in_os_returns_false_when_popen_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1439"}, {"id": "ui_test_mount_clipboardspy", "label": "_ClipboardSpy", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1455"}, {"id": "ui_test_mount_clipboardspy_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1456"}, {"id": "ui_test_mount_clipboardspy_write", "label": ".write()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1459"}, {"id": "ui_test_mount_uispy", "label": "_UiSpy", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1463"}, {"id": "ui_test_mount_uispy_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1466"}, {"id": "ui_test_mount_uispy_getattr", "label": ".__getattr__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1479"}, {"id": "ui_test_mount_test_file_context_action_open_in_os_dispatches_to_helper", "label": "test_file_context_action_open_in_os_dispatches_to_helper()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1486"}, {"id": "ui_test_mount_test_file_context_action_open_in_os_failure_toasts_negative", "label": "test_file_context_action_open_in_os_failure_toasts_negative()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1498"}, {"id": "ui_test_mount_test_file_context_action_copy_path_writes_clipboard", "label": "test_file_context_action_copy_path_writes_clipboard()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1509"}, {"id": "ui_test_mount_test_file_context_action_unknown_action_no_raise", "label": "test_file_context_action_unknown_action_no_raise()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1517"}, {"id": "ui_test_mount_test_file_context_action_empty_path_toasts_negative", "label": "test_file_context_action_empty_path_toasts_negative()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1524"}, {"id": "ui_test_mount_stubnassync", "label": "_StubNasSync", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1535"}, {"id": "ui_test_mount_stubnassync_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1536"}, {"id": "ui_test_mount_stubnassync_enqueue", "label": ".enqueue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1539"}, {"id": "ui_test_mount_drain_background", "label": "_drain_background()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1544"}, {"id": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", "label": "test_run_staging_action_force_sync_invokes_nas_sync_enqueue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1559"}, {"id": "ui_test_mount_test_run_staging_action_force_sync_missing_nas_sync_toasts", "label": "test_run_staging_action_force_sync_missing_nas_sync_toasts()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1572"}, {"id": "ui_test_mount_test_run_staging_action_no_config_toasts_negative", "label": "test_run_staging_action_no_config_toasts_negative()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1579"}, {"id": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", "label": "test_run_staging_action_view_log_invokes_log_dialog()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1586"}, {"id": "ui_test_mount_test_run_staging_action_unknown_action_no_raise", "label": "test_run_staging_action_unknown_action_no_raise()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1598"}, {"id": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", "label": "test_run_staging_action_clear_verified_invokes_clear()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1605"}, {"id": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "label": "test_bulk_clear_verified_clears_verified_rows()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1630"}, {"id": "ui_test_mount_test_bulk_clear_verified_no_config_toasts_and_returns", "label": "test_bulk_clear_verified_no_config_toasts_and_returns()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1659"}, {"id": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", "label": "test_bulk_clear_verified_logs_helper_exception()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1666"}, {"id": "ui_test_mount_stubtabstorage", "label": "_StubTabStorage", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1688"}, {"id": "dict", "label": "dict", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "ui_test_mount_stubapp", "label": "_StubApp", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1692"}, {"id": "ui_test_mount_stubapp_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1695"}, {"id": "ui_test_mount_test_drive_folder_feed_returns_empty_when_no_selection", "label": "test_drive_folder_feed_returns_empty_when_no_selection()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1703"}, {"id": "ui_test_mount_test_drive_folder_feed_creates_feed_on_first_render", "label": "test_drive_folder_feed_creates_feed_on_first_render()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1711"}, {"id": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", "label": "test_drive_folder_feed_converts_cached_payload_to_entries()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1724"}, {"id": "ui_test_mount_test_fetch_folder_async_skips_when_coord_says_skip", "label": "test_fetch_folder_async_skips_when_coord_says_skip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1766"}, {"id": "ui_test_mount_test_fetch_folder_async_records_refresh_on_success", "label": "test_fetch_folder_async_records_refresh_on_success()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1783"}, {"id": "ui_test_mount_test_fetch_folder_async_swallows_helper_exceptions", "label": "test_fetch_folder_async_swallows_helper_exceptions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1802"}, {"id": "ui_test_mount_test_open_log_dialog_no_queue_job_renders_dialog", "label": "test_open_log_dialog_no_queue_job_renders_dialog()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1820"}, {"id": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", "label": "test_open_log_dialog_with_queue_job_renders_dialog()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1829"}, {"id": "ui_test_mount_test_build_metadata_payload_returns_empty_on_builder_exception", "label": "test_build_metadata_payload_returns_empty_on_builder_exception()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1855"}, {"id": "ui_test_mount_test_metadata_for_relay_equipment_emits_id_label_source_host", "label": "test_metadata_for_relay_equipment_emits_id_label_source_host()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1868"}, {"id": "ui_test_mount_test_metadata_for_relay_equipment_unknown_id_falls_back", "label": "test_metadata_for_relay_equipment_unknown_id_falls_back()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1886"}, {"id": "ui_test_mount_test_metadata_for_project_returns_empty_for_single_segment_id", "label": "test_metadata_for_project_returns_empty_for_single_segment_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1893"}, {"id": "ui_test_mount_test_count_dir_children_returns_zero_for_missing_dir", "label": "test_count_dir_children_returns_zero_for_missing_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1899"}, {"id": "ui_test_mount_test_count_dir_children_filters_by_prefix", "label": "test_count_dir_children_filters_by_prefix()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1904"}, {"id": "ui_test_mount_test_metadata_for_run_returns_partial_on_decode_failure", "label": "test_metadata_for_run_returns_partial_on_decode_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1913"}, {"id": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", "label": "test_run_staging_action_force_sync_exception_path_no_raise()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1924"}, {"id": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", "label": "test_run_staging_action_clear_verified_exception_path_no_raise()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1940"}, {"id": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", "label": "test_run_staging_action_clear_verified_zero_files_branch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1956"}, {"id": "ui_test_mount_test_file_context_action_clipboard_failure_toasts", "label": "test_file_context_action_clipboard_failure_toasts()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1969"}, {"id": "ui_test_mount_rationale_1", "label": "Tests for ``exlab_wizard.ui.mount`` helpers. The ``@ui.page(...)`` decorators i", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1"}, {"id": "ui_test_mount_rationale_30", "label": "Build a minimal duck-typed AppDependencies stand-in.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L30"}, {"id": "ui_test_mount_rationale_80", "label": "Chainable no-op stand-in for a NiceGUI element.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L80"}, {"id": "ui_test_mount_rationale_99", "label": "Records cards / labels and exposes a ``navigate.to`` spy.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L99"}, {"id": "ui_test_mount_rationale_117", "label": "A ``ui`` whose element factories raise -- exercises render except paths.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L117"}, {"id": "ui_test_mount_rationale_129", "label": "Duck-typed CreationController for the create-flow helpers.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L129"}, {"id": "ui_test_mount_rationale_184", "label": "Live-LIMS branch with the keyring password absent -> not ready.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L184"}, {"id": "ui_test_mount_rationale_215", "label": "A registered nas-mode equipment without its keyring password blocks ready.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L215"}, {"id": "ui_test_mount_rationale_226", "label": "Regression: LIMS satisfied via the offline catalogue (no keyring password) m", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L226"}, {"id": "ui_test_mount_rationale_264", "label": "Redesign \u00a73.1: the orchestrator pipeline is unconditional.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L264"}, {"id": "ui_test_mount_rationale_342", "label": "Real Config with one password-requiring nas-mode equipment. ``offline_catal", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L342"}, {"id": "ui_test_mount_rationale_446", "label": "Redesign \u00a73.1: orchestrator pipeline is always on, but a missing staging_roo", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L446"}, {"id": "ui_test_mount_rationale_493", "label": "Minimal stand-in for the NiceGUI ``ui`` object's navigate surface.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L493"}, {"id": "ui_test_mount_rationale_501", "label": "A successful save persists, then hot-reloads the live components. The old b", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L501"}, {"id": "ui_test_mount_rationale_578", "label": "Opt-in: a saved non-empty staging_root is created on save.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L578"}, {"id": "ui_test_mount_rationale_593", "label": "Blank staging_root creates nothing -- the device is not a staging PC.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L593"}, {"id": "ui_test_mount_rationale_607", "label": "An ensure_dir failure warns but keeps the persisted config.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L607"}, {"id": "ui_test_mount_rationale_634", "label": "If the coordinator raises wholesale, the live config is still kept.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L634"}, {"id": "ui_test_mount_rationale_701", "label": "Keyring-store stand-in that records the calls the handlers make.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L701"}, {"id": "ui_test_mount_rationale_740", "label": "A best-effort keyring build can fail; the handlers must not crash.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L740"}, {"id": "ui_test_mount_rationale_749", "label": "A raising keyring backend surfaces a toast, not an unhandled crash.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L749"}, {"id": "ui_test_mount_rationale_981", "label": "Async ``list_projects`` stub for the live-LIMS picker path.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L981"}, {"id": "ui_test_mount_rationale_1227", "label": "Both empty -> empty string. One present -> single param.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1227"}, {"id": "ui_test_mount_rationale_1235", "label": "Project names with spaces / special chars survive the round trip.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1235"}, {"id": "ui_test_mount_rationale_1252", "label": "Equipment / project / run / received_equipment all classify correctly.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1252"}, {"id": "ui_test_mount_rationale_1273", "label": "A node id whose root is not in the hierarchy returns ``(None, False)``. Gua", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1273"}, {"id": "ui_test_mount_rationale_1295", "label": "An equipment node payload pulls fields from config.equipment[id].", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1295"}, {"id": "ui_test_mount_rationale_1313", "label": "Asking for a node that isn't in config.equipment returns ``{}``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1313"}, {"id": "ui_test_mount_rationale_1320", "label": "The project payload counts Run_* and TestRun_* directories.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1320"}, {"id": "ui_test_mount_rationale_1339", "label": "The run payload decodes creation.json into the metadata fields.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1339"}, {"id": "ui_test_mount_rationale_1384", "label": "A run dir without a creation.json yields {path, name}, not crash.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1384"}, {"id": "ui_test_mount_rationale_1393", "label": "The selected-node fields end up on MainPageState for the renderer.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1393"}, {"id": "ui_test_mount_rationale_1411", "label": "An unknown sys.platform falls through to False so the toast can warn.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1411"}, {"id": "ui_test_mount_rationale_1417", "label": "Linux dispatches to xdg-open via subprocess.Popen.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1417"}, {"id": "ui_test_mount_rationale_1431", "label": "macOS dispatches to the ``open`` command.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1431"}, {"id": "ui_test_mount_rationale_1440", "label": "A subprocess failure is caught and surfaces False so the caller can toast.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1440"}, {"id": "ui_test_mount_rationale_1464", "label": "Minimal NiceGUI surface stand-in: clipboard + navigate.to + notify.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1464"}, {"id": "ui_test_mount_rationale_1489", "label": "``open_in_os`` action calls the platform opener and reports success.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1489"}, {"id": "ui_test_mount_rationale_1501", "label": "When the opener returns False the action surfaces a negative toast.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1501"}, {"id": "ui_test_mount_rationale_1510", "label": "``copy_path`` writes the entry path to the NiceGUI clipboard.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1510"}, {"id": "ui_test_mount_rationale_1518", "label": "An unknown action verb is logged + toasted without raising.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1518"}, {"id": "ui_test_mount_rationale_1525", "label": "An entry with no path triggers the early-return toast.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1525"}, {"id": "ui_test_mount_rationale_1545", "label": "Run any pending mount background tasks to completion.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1545"}, {"id": "ui_test_mount_rationale_1560", "label": "Force-sync routes to ``deps.nas_sync.enqueue`` with the run path.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1560"}, {"id": "ui_test_mount_rationale_1573", "label": "Force-sync without a wired NAS sync surfaces a negative toast (no raise).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1573"}, {"id": "ui_test_mount_rationale_1580", "label": "The early-exit when config is missing keeps the action a no-op.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1580"}, {"id": "ui_test_mount_rationale_1589", "label": "``view_log`` dispatches to the dialog opener helper.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1589"}, {"id": "ui_test_mount_rationale_1599", "label": "An unknown action verb is reported but doesn't raise.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1599"}, {"id": "ui_test_mount_rationale_1608", "label": "``clear_verified`` deletes the run directory via the local helper.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1608"}, {"id": "ui_test_mount_rationale_1633", "label": "The bulk action clears every ``synced`` row and toasts the count.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1633"}, {"id": "ui_test_mount_rationale_1660", "label": "The early-exit when config is missing produces a toast, no task.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1660"}, {"id": "ui_test_mount_rationale_1669", "label": "An exception from the clear sweep is caught + toasted.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1669"}, {"id": "ui_test_mount_rationale_1693", "label": "Lightweight ``app`` stand-in carrying ``storage.tab``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1693"}, {"id": "ui_test_mount_rationale_1704", "label": "Without a selected node the feed isn't started and returns ``[]``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1704"}, {"id": "ui_test_mount_rationale_1714", "label": "The first call mounts a FolderFeed + RefreshCoordinator on tab storage.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1714"}, {"id": "ui_test_mount_rationale_1727", "label": "When the feed's last_payload is set, entries are projected into FileListEntr", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1727"}, {"id": "ui_test_mount_rationale_1769", "label": "The fetch is a no-op when RefreshCoordinator just walked the tree.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1769"}, {"id": "ui_test_mount_rationale_1786", "label": "A successful scan records the refresh on the coordinator.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1786"}, {"id": "ui_test_mount_rationale_1805", "label": "A scan failure returns ``None`` so the feed keeps polling.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1805"}, {"id": "ui_test_mount_rationale_1821", "label": "A run with no sync-queue job still renders a dialog without raising.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1821"}, {"id": "ui_test_mount_rationale_1830", "label": "A run with a sync-queue job renders its state without raising.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1830"}, {"id": "ui_test_mount_rationale_1858", "label": "Any exception raised by a per-kind builder is logged + swallowed.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1858"}, {"id": "ui_test_mount_rationale_1871", "label": "The relay payload pulls id+label from build_received_equipment_nodes.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1871"}, {"id": "ui_test_mount_rationale_1887", "label": "An unknown relay id still produces a payload (best-effort label).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1887"}, {"id": "ui_test_mount_rationale_1894", "label": "A node id without an equipment/project split returns ``{}``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1894"}, {"id": "ui_test_mount_rationale_1900", "label": "A missing parent dir returns 0 (no FS pre-check needed).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1900"}, {"id": "ui_test_mount_rationale_1905", "label": "Only directory children whose names start with the prefix are counted.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1905"}, {"id": "ui_test_mount_rationale_1914", "label": "A corrupt creation.json yields {path, name}, never crashes.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1914"}, {"id": "ui_test_mount_rationale_1927", "label": "When nas_sync.enqueue raises, the background task swallows + toasts.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1927"}, {"id": "ui_test_mount_rationale_1943", "label": "When the clear helper raises, the background task swallows + toasts.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1943"}, {"id": "ui_test_mount_rationale_1959", "label": "The 0-file path reports ``already cleared`` rather than ``cleared N``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1959"}, {"id": "ui_test_mount_rationale_1972", "label": "A clipboard write failure is caught and reported as a negative toast.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1972"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "types", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "exlab_wizard_api_app", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "exlab_wizard_controller", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "exlab_wizard_ui", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_deps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_fluent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L79", "weight": 1.0}, {"source": "ui_test_mount_fluent", "target": "ui_test_mount_fluent_props", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L82", "weight": 1.0}, {"source": "ui_test_mount_fluent", "target": "ui_test_mount_fluent_style", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L85", "weight": 1.0}, {"source": "ui_test_mount_fluent", "target": "ui_test_mount_fluent_classes", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L88", "weight": 1.0}, {"source": "ui_test_mount_fluent", "target": "ui_test_mount_fluent_enter", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L91", "weight": 1.0}, {"source": "ui_test_mount_fluent", "target": "ui_test_mount_fluent_exit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L94", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_fakeui", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L98", "weight": 1.0}, {"source": "ui_test_mount_fakeui", "target": "ui_test_mount_fakeui_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L101", "weight": 1.0}, {"source": "ui_test_mount_fakeui", "target": "ui_test_mount_fakeui_card", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L107", "weight": 1.0}, {"source": "ui_test_mount_fakeui", "target": "ui_test_mount_fakeui_label", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L111", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_boomui", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L116", "weight": 1.0}, {"source": "ui_test_mount_boomui", "target": "ui_test_mount_boomui_card", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L119", "weight": 1.0}, {"source": "ui_test_mount_boomui", "target": "ui_test_mount_boomui_label", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L123", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_fakecontroller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L128", "weight": 1.0}, {"source": "ui_test_mount_fakecontroller", "target": "ui_test_mount_fakecontroller_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L131", "weight": 1.0}, {"source": "ui_test_mount_fakecontroller", "target": "ui_test_mount_fakecontroller_status", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L147", "weight": 1.0}, {"source": "ui_test_mount_fakecontroller", "target": "ui_test_mount_fakecontroller_create_project", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L150", "weight": 1.0}, {"source": "ui_test_mount_fakecontroller", "target": "ui_test_mount_fakecontroller_create_run", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L157", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_is_setup_ready_false_when_deps_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L175", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_is_setup_ready_false_when_config_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L179", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_is_setup_ready_false_when_keyring_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L183", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_is_setup_ready_false_when_lims_unreachable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L194", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_is_setup_ready_true_when_all_satisfied", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L204", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_is_setup_ready_false_when_nas_credential_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L214", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_is_setup_ready_true_with_offline_catalogue_lims", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L225", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_build_main_state_marks_incomplete_without_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L246", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_build_main_state_sources_problems_counts_from_audit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L255", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_build_main_state_always_on_orchestrator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L263", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L281", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_operation_counts_zero_without_controller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L302", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_missing_sections_when_deps_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L311", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_missing_sections_when_config_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L315", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_missing_sections_with_paths_unset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L322", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_missing_sections_with_keyring_absent_reports_lims", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L331", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_missing_sections_empty_when_fully_configured", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L336", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_nas_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L341", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_missing_sections_includes_nas_credentials_when_password_absent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L385", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_missing_sections_excludes_nas_credentials_when_password_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L394", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_raisingvalidator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L408", "weight": 1.0}, {"source": "ui_test_mount_raisingvalidator", "target": "ui_test_mount_raisingvalidator_audit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L409", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_okvalidator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L414", "weight": 1.0}, {"source": "ui_test_mount_okvalidator", "target": "ui_test_mount_okvalidator_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L415", "weight": 1.0}, {"source": "ui_test_mount_okvalidator", "target": "ui_test_mount_okvalidator_audit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L418", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_safe_audit_returns_empty_list_when_validator_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L422", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_safe_audit_swallows_validator_exception", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L426", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_safe_audit_forwards_validator_output", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L434", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_staging_state_when_staging_root_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L445", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_staging_state_none_when_no_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L460", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_staging_state_returns_empty_rows_on_query_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L464", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_navspy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L492", "weight": 1.0}, {"source": "ui_test_mount_navspy", "target": "ui_test_mount_navspy_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L495", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_persist_config_writes_and_applies_live", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L500", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_persist_config_returns_false_when_no_saver", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L523", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_persist_config_returns_false_when_saver_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L535", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L552", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_persist_config_creates_staging_root_when_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L575", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L590", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L604", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_apply_live_config_falls_back_to_setting_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L630", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_render_unavailable_renders_headline_and_subline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L656", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_render_unavailable_swallows_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L663", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_show_toast_positive_and_negative_never_raise", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L674", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_show_toast_swallows_notification_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L681", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_recordingkeyringstore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L700", "weight": 1.0}, {"source": "ui_test_mount_recordingkeyringstore", "target": "ui_test_mount_recordingkeyringstore_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L703", "weight": 1.0}, {"source": "ui_test_mount_recordingkeyringstore", "target": "ui_test_mount_recordingkeyringstore_set_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L708", "weight": 1.0}, {"source": "ui_test_mount_recordingkeyringstore", "target": "ui_test_mount_recordingkeyringstore_delete_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L714", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_lims_credential_handlers_save_writes_under_lims_username", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L721", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_lims_credential_handlers_clear_deletes_under_lims_username", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L730", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_lims_credential_handlers_tolerate_missing_keyring_store", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L739", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_lims_credential_handlers_swallow_backend_errors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L748", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_nas_credential_handlers_save_writes_under_nas_username", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L763", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_nas_credential_handlers_clear_deletes_and_discards", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L779", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_nas_credential_handlers_isolate_per_equipment_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L793", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_nas_credential_handlers_tolerate_missing_keyring_store", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L806", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_apply_autostart_noop_when_deps_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L819", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_apply_autostart_noop_when_toggle_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L823", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_apply_autostart_invokes_toggle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L827", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_apply_autostart_returns_real_registration_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L834", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_apply_autostart_swallows_toggle_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L843", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_templates_dir_none_when_deps_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L860", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_templates_dir_none_when_config_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L864", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_templates_dir_none_when_unset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L868", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_templates_dir_returns_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L872", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_equipment_ids_empty_without_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L877", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_equipment_ids_lists_configured_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L881", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_template_names_empty_without_templates_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L893", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_template_names_lists_summary_names", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L897", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_template_names_swallows_scan_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L909", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_lims_projects_empty_without_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L929", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_lims_projects_empty_without_catalogue_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L933", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_lims_projects_empty_when_catalogue_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L937", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_lims_projects_reads_offline_catalogue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L942", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_lims_projects_swallows_read_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L963", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_fakelimsclient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L980", "weight": 1.0}, {"source": "ui_test_mount_fakelimsclient", "target": "ui_test_mount_fakelimsclient_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L983", "weight": 1.0}, {"source": "ui_test_mount_fakelimsclient", "target": "ui_test_mount_fakelimsclient_list_projects", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L988", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_lims_projects_uses_live_lims", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L996", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_lims_projects_skips_live_lims_when_unreachable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1010", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1017", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_template_questions_map_empty_without_templates_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1052", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_template_questions_map_resolves_questions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1056", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1077", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_await_session_awaits_pending_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1102", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_await_session_without_pending_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1115", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_run_creation_navigates_home_on_done", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1127", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_run_creation_reports_failure_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1134", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_run_creation_swallows_create_exception", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1142", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_submit_project_toasts_when_controller_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1160", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_submit_project_toasts_without_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1166", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_submit_project_builds_request_and_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1174", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_submit_run_toasts_when_controller_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1195", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_submit_run_builds_request_and_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1201", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_build_main_query_omits_empty_params", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1226", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_build_main_query_url_encodes_special_chars", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1234", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_classify_node_returns_none_for_empty_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1246", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_classify_node_discriminates_kinds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1251", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_classify_node_rejects_unknown_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1272", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_build_metadata_payload_returns_empty_when_node_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1288", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_build_metadata_payload_owned_equipment_reads_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1294", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_build_metadata_payload_unknown_equipment_id_returns_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1312", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1319", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1338", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1383", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_build_main_state_threads_selection_into_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1392", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_open_in_os_returns_false_on_unhandled_platform", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1408", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_open_in_os_linux_invokes_xdg_open", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1416", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_open_in_os_darwin_invokes_open", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1430", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_open_in_os_returns_false_when_popen_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1439", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_clipboardspy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1455", "weight": 1.0}, {"source": "ui_test_mount_clipboardspy", "target": "ui_test_mount_clipboardspy_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1456", "weight": 1.0}, {"source": "ui_test_mount_clipboardspy", "target": "ui_test_mount_clipboardspy_write", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1459", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_uispy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1463", "weight": 1.0}, {"source": "ui_test_mount_uispy", "target": "ui_test_mount_uispy_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1466", "weight": 1.0}, {"source": "ui_test_mount_uispy", "target": "ui_test_mount_uispy_getattr", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1479", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_file_context_action_open_in_os_dispatches_to_helper", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1486", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_file_context_action_open_in_os_failure_toasts_negative", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1498", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_file_context_action_copy_path_writes_clipboard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1509", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_file_context_action_unknown_action_no_raise", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1517", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_file_context_action_empty_path_toasts_negative", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1524", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_stubnassync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1535", "weight": 1.0}, {"source": "ui_test_mount_stubnassync", "target": "ui_test_mount_stubnassync_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1536", "weight": 1.0}, {"source": "ui_test_mount_stubnassync", "target": "ui_test_mount_stubnassync_enqueue", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1539", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_drain_background", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1544", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1559", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_run_staging_action_force_sync_missing_nas_sync_toasts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1572", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_run_staging_action_no_config_toasts_negative", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1579", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1586", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_run_staging_action_unknown_action_no_raise", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1598", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1605", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1630", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_bulk_clear_verified_no_config_toasts_and_returns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1659", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1666", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_stubtabstorage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1688", "weight": 1.0}, {"source": "ui_test_mount_stubtabstorage", "target": "dict", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1688", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_stubapp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1692", "weight": 1.0}, {"source": "ui_test_mount_stubapp", "target": "ui_test_mount_stubapp_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1695", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_drive_folder_feed_returns_empty_when_no_selection", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1703", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_drive_folder_feed_creates_feed_on_first_render", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1711", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1724", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_fetch_folder_async_skips_when_coord_says_skip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1766", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_fetch_folder_async_records_refresh_on_success", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1783", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_fetch_folder_async_swallows_helper_exceptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1802", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_open_log_dialog_no_queue_job_renders_dialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1820", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1829", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_build_metadata_payload_returns_empty_on_builder_exception", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1855", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_metadata_for_relay_equipment_emits_id_label_source_host", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1868", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_metadata_for_relay_equipment_unknown_id_falls_back", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1886", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_metadata_for_project_returns_empty_for_single_segment_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1893", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_count_dir_children_returns_zero_for_missing_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1899", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_count_dir_children_filters_by_prefix", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1904", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_metadata_for_run_returns_partial_on_decode_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1913", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1924", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1940", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1956", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "target": "ui_test_mount_test_file_context_action_clipboard_failure_toasts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1969", "weight": 1.0}, {"source": "ui_test_mount_fakeui_card", "target": "ui_test_mount_fluent", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L109", "weight": 1.0}, {"source": "ui_test_mount_fakeui_label", "target": "ui_test_mount_fluent", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L113", "weight": 1.0}, {"source": "ui_test_mount_fakecontroller_create_run", "target": "ui_test_mount_fakecontroller_create_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L158", "weight": 1.0}, {"source": "ui_test_mount_test_is_setup_ready_false_when_config_missing", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L180", "weight": 1.0}, {"source": "ui_test_mount_test_is_setup_ready_false_when_keyring_missing", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L185", "weight": 1.0}, {"source": "ui_test_mount_test_is_setup_ready_false_when_keyring_missing", "target": "ui_test_mount_nas_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L186", "weight": 1.0}, {"source": "ui_test_mount_test_is_setup_ready_false_when_lims_unreachable", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L195", "weight": 1.0}, {"source": "ui_test_mount_test_is_setup_ready_false_when_lims_unreachable", "target": "ui_test_mount_nas_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L196", "weight": 1.0}, {"source": "ui_test_mount_test_is_setup_ready_true_when_all_satisfied", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L205", "weight": 1.0}, {"source": "ui_test_mount_test_is_setup_ready_true_when_all_satisfied", "target": "ui_test_mount_nas_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L206", "weight": 1.0}, {"source": "ui_test_mount_test_is_setup_ready_false_when_nas_credential_missing", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L216", "weight": 1.0}, {"source": "ui_test_mount_test_is_setup_ready_false_when_nas_credential_missing", "target": "ui_test_mount_nas_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L217", "weight": 1.0}, {"source": "ui_test_mount_test_is_setup_ready_true_with_offline_catalogue_lims", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L232", "weight": 1.0}, {"source": "ui_test_mount_test_is_setup_ready_true_with_offline_catalogue_lims", "target": "ui_test_mount_nas_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L233", "weight": 1.0}, {"source": "ui_test_mount_test_build_main_state_marks_incomplete_without_config", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L247", "weight": 1.0}, {"source": "ui_test_mount_test_build_main_state_sources_problems_counts_from_audit", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L258", "weight": 1.0}, {"source": "ui_test_mount_test_build_main_state_always_on_orchestrator", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L265", "weight": 1.0}, {"source": "ui_test_mount_test_build_main_state_always_on_orchestrator", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L266", "weight": 1.0}, {"source": "ui_test_mount_test_missing_sections_when_config_none", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L319", "weight": 1.0}, {"source": "ui_test_mount_test_missing_sections_with_paths_unset", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L323", "weight": 1.0}, {"source": "ui_test_mount_test_missing_sections_with_paths_unset", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L324", "weight": 1.0}, {"source": "ui_test_mount_test_missing_sections_with_keyring_absent_reports_lims", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L332", "weight": 1.0}, {"source": "ui_test_mount_test_missing_sections_with_keyring_absent_reports_lims", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L332", "weight": 1.0}, {"source": "ui_test_mount_test_missing_sections_empty_when_fully_configured", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L337", "weight": 1.0}, {"source": "ui_test_mount_test_missing_sections_empty_when_fully_configured", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L337", "weight": 1.0}, {"source": "ui_test_mount_test_missing_sections_includes_nas_credentials_when_password_absent", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L386", "weight": 1.0}, {"source": "ui_test_mount_test_missing_sections_includes_nas_credentials_when_password_absent", "target": "ui_test_mount_nas_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L387", "weight": 1.0}, {"source": "ui_test_mount_test_missing_sections_excludes_nas_credentials_when_password_present", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L395", "weight": 1.0}, {"source": "ui_test_mount_test_missing_sections_excludes_nas_credentials_when_password_present", "target": "ui_test_mount_nas_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L396", "weight": 1.0}, {"source": "ui_test_mount_test_safe_audit_returns_empty_list_when_validator_missing", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L423", "weight": 1.0}, {"source": "ui_test_mount_test_safe_audit_swallows_validator_exception", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L427", "weight": 1.0}, {"source": "ui_test_mount_test_safe_audit_swallows_validator_exception", "target": "ui_test_mount_raisingvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L427", "weight": 1.0}, {"source": "ui_test_mount_test_safe_audit_forwards_validator_output", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L436", "weight": 1.0}, {"source": "ui_test_mount_test_safe_audit_forwards_validator_output", "target": "ui_test_mount_okvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L436", "weight": 1.0}, {"source": "ui_test_mount_test_staging_state_when_staging_root_missing", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L448", "weight": 1.0}, {"source": "ui_test_mount_test_staging_state_when_staging_root_missing", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L449", "weight": 1.0}, {"source": "ui_test_mount_test_staging_state_none_when_no_config", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L461", "weight": 1.0}, {"source": "ui_test_mount_test_staging_state_returns_empty_rows_on_query_failure", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L467", "weight": 1.0}, {"source": "ui_test_mount_test_staging_state_returns_empty_rows_on_query_failure", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L468", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_writes_and_applies_live", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L507", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_writes_and_applies_live", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L511", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_returns_false_when_no_saver", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L524", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_returns_false_when_no_saver", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L527", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_returns_false_when_saver_raises", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L536", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_returns_false_when_saver_raises", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L544", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L556", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L564", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_creates_staging_root_when_set", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L581", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_creates_staging_root_when_set", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L582", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_creates_staging_root_when_set", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L584", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L595", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L596", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L598", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L620", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L621", "weight": 1.0}, {"source": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L623", "weight": 1.0}, {"source": "ui_test_mount_test_apply_live_config_falls_back_to_setting_config", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L641", "weight": 1.0}, {"source": "ui_test_mount_test_render_unavailable_renders_headline_and_subline", "target": "ui_test_mount_fakeui", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L657", "weight": 1.0}, {"source": "ui_test_mount_test_render_unavailable_swallows_failure", "target": "ui_test_mount_boomui", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L665", "weight": 1.0}, {"source": "ui_test_mount_test_lims_credential_handlers_save_writes_under_lims_username", "target": "ui_test_mount_recordingkeyringstore", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L722", "weight": 1.0}, {"source": "ui_test_mount_test_lims_credential_handlers_save_writes_under_lims_username", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L723", "weight": 1.0}, {"source": "ui_test_mount_test_lims_credential_handlers_clear_deletes_under_lims_username", "target": "ui_test_mount_recordingkeyringstore", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L731", "weight": 1.0}, {"source": "ui_test_mount_test_lims_credential_handlers_clear_deletes_under_lims_username", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L732", "weight": 1.0}, {"source": "ui_test_mount_test_lims_credential_handlers_tolerate_missing_keyring_store", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L742", "weight": 1.0}, {"source": "ui_test_mount_test_lims_credential_handlers_swallow_backend_errors", "target": "ui_test_mount_recordingkeyringstore", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L751", "weight": 1.0}, {"source": "ui_test_mount_test_lims_credential_handlers_swallow_backend_errors", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L752", "weight": 1.0}, {"source": "ui_test_mount_test_nas_credential_handlers_save_writes_under_nas_username", "target": "ui_test_mount_recordingkeyringstore", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L766", "weight": 1.0}, {"source": "ui_test_mount_test_nas_credential_handlers_save_writes_under_nas_username", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L768", "weight": 1.0}, {"source": "ui_test_mount_test_nas_credential_handlers_clear_deletes_and_discards", "target": "ui_test_mount_recordingkeyringstore", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L782", "weight": 1.0}, {"source": "ui_test_mount_test_nas_credential_handlers_clear_deletes_and_discards", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L784", "weight": 1.0}, {"source": "ui_test_mount_test_nas_credential_handlers_isolate_per_equipment_id", "target": "ui_test_mount_recordingkeyringstore", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L794", "weight": 1.0}, {"source": "ui_test_mount_test_nas_credential_handlers_isolate_per_equipment_id", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L796", "weight": 1.0}, {"source": "ui_test_mount_test_nas_credential_handlers_tolerate_missing_keyring_store", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L808", "weight": 1.0}, {"source": "ui_test_mount_test_apply_autostart_noop_when_toggle_missing", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L824", "weight": 1.0}, {"source": "ui_test_mount_test_apply_autostart_invokes_toggle", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L829", "weight": 1.0}, {"source": "ui_test_mount_test_apply_autostart_returns_real_registration_state", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L837", "weight": 1.0}, {"source": "ui_test_mount_test_apply_autostart_swallows_toggle_failure", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L851", "weight": 1.0}, {"source": "ui_test_mount_test_templates_dir_none_when_config_none", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L865", "weight": 1.0}, {"source": "ui_test_mount_test_templates_dir_none_when_unset", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L869", "weight": 1.0}, {"source": "ui_test_mount_test_templates_dir_none_when_unset", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L869", "weight": 1.0}, {"source": "ui_test_mount_test_templates_dir_returns_path", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L873", "weight": 1.0}, {"source": "ui_test_mount_test_templates_dir_returns_path", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L873", "weight": 1.0}, {"source": "ui_test_mount_test_equipment_ids_empty_without_config", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L878", "weight": 1.0}, {"source": "ui_test_mount_test_equipment_ids_lists_configured_ids", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L882", "weight": 1.0}, {"source": "ui_test_mount_test_equipment_ids_lists_configured_ids", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L883", "weight": 1.0}, {"source": "ui_test_mount_test_template_names_empty_without_templates_dir", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L894", "weight": 1.0}, {"source": "ui_test_mount_test_template_names_lists_summary_names", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L905", "weight": 1.0}, {"source": "ui_test_mount_test_template_names_lists_summary_names", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L905", "weight": 1.0}, {"source": "ui_test_mount_test_template_names_swallows_scan_failure", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L920", "weight": 1.0}, {"source": "ui_test_mount_test_template_names_swallows_scan_failure", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L920", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_empty_without_config", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L930", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_empty_without_catalogue_path", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L934", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_empty_without_catalogue_path", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L934", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_empty_when_catalogue_missing", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L938", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_empty_when_catalogue_missing", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L938", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_reads_offline_catalogue", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L952", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_reads_offline_catalogue", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L952", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_swallows_read_failure", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L974", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_swallows_read_failure", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L974", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_uses_live_lims", "target": "ui_test_mount_fakelimsclient", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L997", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_uses_live_lims", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L998", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_uses_live_lims", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L998", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_skips_live_lims_when_unreachable", "target": "ui_test_mount_fakelimsclient", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1011", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_skips_live_lims_when_unreachable", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1012", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_skips_live_lims_when_unreachable", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1012", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", "target": "ui_test_mount_fakelimsclient", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1027", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1028", "weight": 1.0}, {"source": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1029", "weight": 1.0}, {"source": "ui_test_mount_test_template_questions_map_empty_without_templates_dir", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1053", "weight": 1.0}, {"source": "ui_test_mount_test_template_questions_map_resolves_questions", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1073", "weight": 1.0}, {"source": "ui_test_mount_test_template_questions_map_resolves_questions", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1073", "weight": 1.0}, {"source": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1093", "weight": 1.0}, {"source": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1093", "weight": 1.0}, {"source": "ui_test_mount_test_await_session_awaits_pending_task", "target": "ui_test_mount_fakecontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1108", "weight": 1.0}, {"source": "ui_test_mount_test_await_session_without_pending_task", "target": "ui_test_mount_fakecontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1116", "weight": 1.0}, {"source": "ui_test_mount_test_run_creation_navigates_home_on_done", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1128", "weight": 1.0}, {"source": "ui_test_mount_test_run_creation_navigates_home_on_done", "target": "ui_test_mount_fakecontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1129", "weight": 1.0}, {"source": "ui_test_mount_test_run_creation_reports_failure_state", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1135", "weight": 1.0}, {"source": "ui_test_mount_test_run_creation_reports_failure_state", "target": "ui_test_mount_fakecontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1137", "weight": 1.0}, {"source": "ui_test_mount_test_run_creation_swallows_create_exception", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1145", "weight": 1.0}, {"source": "ui_test_mount_test_run_creation_swallows_create_exception", "target": "ui_test_mount_fakecontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1146", "weight": 1.0}, {"source": "ui_test_mount_test_submit_project_toasts_when_controller_missing", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1161", "weight": 1.0}, {"source": "ui_test_mount_test_submit_project_toasts_when_controller_missing", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1162", "weight": 1.0}, {"source": "ui_test_mount_test_submit_project_toasts_without_template", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1167", "weight": 1.0}, {"source": "ui_test_mount_test_submit_project_toasts_without_template", "target": "ui_test_mount_fakecontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1168", "weight": 1.0}, {"source": "ui_test_mount_test_submit_project_toasts_without_template", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1169", "weight": 1.0}, {"source": "ui_test_mount_test_submit_project_toasts_without_template", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1169", "weight": 1.0}, {"source": "ui_test_mount_test_submit_project_builds_request_and_runs", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1175", "weight": 1.0}, {"source": "ui_test_mount_test_submit_project_builds_request_and_runs", "target": "ui_test_mount_fakecontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1176", "weight": 1.0}, {"source": "ui_test_mount_test_submit_project_builds_request_and_runs", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1177", "weight": 1.0}, {"source": "ui_test_mount_test_submit_project_builds_request_and_runs", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1177", "weight": 1.0}, {"source": "ui_test_mount_test_submit_run_toasts_when_controller_missing", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1196", "weight": 1.0}, {"source": "ui_test_mount_test_submit_run_toasts_when_controller_missing", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1197", "weight": 1.0}, {"source": "ui_test_mount_test_submit_run_builds_request_and_runs", "target": "ui_test_mount_navspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1202", "weight": 1.0}, {"source": "ui_test_mount_test_submit_run_builds_request_and_runs", "target": "ui_test_mount_fakecontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1203", "weight": 1.0}, {"source": "ui_test_mount_test_submit_run_builds_request_and_runs", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1204", "weight": 1.0}, {"source": "ui_test_mount_test_submit_run_builds_request_and_runs", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1204", "weight": 1.0}, {"source": "ui_test_mount_test_build_metadata_payload_returns_empty_when_node_missing", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1290", "weight": 1.0}, {"source": "ui_test_mount_test_build_metadata_payload_owned_equipment_reads_config", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1303", "weight": 1.0}, {"source": "ui_test_mount_test_build_metadata_payload_owned_equipment_reads_config", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1304", "weight": 1.0}, {"source": "ui_test_mount_test_build_metadata_payload_unknown_equipment_id_returns_empty", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1314", "weight": 1.0}, {"source": "ui_test_mount_test_build_metadata_payload_unknown_equipment_id_returns_empty", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1315", "weight": 1.0}, {"source": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1331", "weight": 1.0}, {"source": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1332", "weight": 1.0}, {"source": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1372", "weight": 1.0}, {"source": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1373", "weight": 1.0}, {"source": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1387", "weight": 1.0}, {"source": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1388", "weight": 1.0}, {"source": "ui_test_mount_test_build_main_state_threads_selection_into_state", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1395", "weight": 1.0}, {"source": "ui_test_mount_uispy_init", "target": "ui_test_mount_clipboardspy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1468", "weight": 1.0}, {"source": "ui_test_mount_test_file_context_action_open_in_os_dispatches_to_helper", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1492", "weight": 1.0}, {"source": "ui_test_mount_test_file_context_action_open_in_os_failure_toasts_negative", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1503", "weight": 1.0}, {"source": "ui_test_mount_test_file_context_action_copy_path_writes_clipboard", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1511", "weight": 1.0}, {"source": "ui_test_mount_test_file_context_action_unknown_action_no_raise", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1519", "weight": 1.0}, {"source": "ui_test_mount_test_file_context_action_empty_path_toasts_negative", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1526", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", "target": "ui_test_mount_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1561", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1562", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1562", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1563", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_force_sync_missing_nas_sync_toasts", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1574", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_force_sync_missing_nas_sync_toasts", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1574", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_force_sync_missing_nas_sync_toasts", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1575", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_no_config_toasts_negative", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1581", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_no_config_toasts_negative", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1582", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1592", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1592", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1593", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_unknown_action_no_raise", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1600", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_unknown_action_no_raise", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1600", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_unknown_action_no_raise", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1601", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1616", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1616", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1617", "weight": 1.0}, {"source": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1649", "weight": 1.0}, {"source": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1649", "weight": 1.0}, {"source": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1650", "weight": 1.0}, {"source": "ui_test_mount_test_bulk_clear_verified_no_config_toasts_and_returns", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1661", "weight": 1.0}, {"source": "ui_test_mount_test_bulk_clear_verified_no_config_toasts_and_returns", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1662", "weight": 1.0}, {"source": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1675", "weight": 1.0}, {"source": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1675", "weight": 1.0}, {"source": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1676", "weight": 1.0}, {"source": "ui_test_mount_test_drive_folder_feed_returns_empty_when_no_selection", "target": "ui_test_mount_stubapp", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1705", "weight": 1.0}, {"source": "ui_test_mount_test_drive_folder_feed_returns_empty_when_no_selection", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1706", "weight": 1.0}, {"source": "ui_test_mount_test_drive_folder_feed_creates_feed_on_first_render", "target": "ui_test_mount_stubapp", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1717", "weight": 1.0}, {"source": "ui_test_mount_test_drive_folder_feed_creates_feed_on_first_render", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1718", "weight": 1.0}, {"source": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", "target": "ui_test_mount_stubapp", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1733", "weight": 1.0}, {"source": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1755", "weight": 1.0}, {"source": "ui_test_mount_test_fetch_folder_async_skips_when_coord_says_skip", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1778", "weight": 1.0}, {"source": "ui_test_mount_test_fetch_folder_async_records_refresh_on_success", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1797", "weight": 1.0}, {"source": "ui_test_mount_test_fetch_folder_async_swallows_helper_exceptions", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1811", "weight": 1.0}, {"source": "ui_test_mount_test_open_log_dialog_no_queue_job_renders_dialog", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1822", "weight": 1.0}, {"source": "ui_test_mount_test_open_log_dialog_no_queue_job_renders_dialog", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1823", "weight": 1.0}, {"source": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1843", "weight": 1.0}, {"source": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1844", "weight": 1.0}, {"source": "ui_test_mount_test_build_metadata_payload_returns_empty_on_builder_exception", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1864", "weight": 1.0}, {"source": "ui_test_mount_test_build_metadata_payload_returns_empty_on_builder_exception", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1864", "weight": 1.0}, {"source": "ui_test_mount_test_metadata_for_relay_equipment_emits_id_label_source_host", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1878", "weight": 1.0}, {"source": "ui_test_mount_test_metadata_for_relay_equipment_unknown_id_falls_back", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1888", "weight": 1.0}, {"source": "ui_test_mount_test_metadata_for_project_returns_empty_for_single_segment_id", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1895", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1933", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1933", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1934", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1949", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1949", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1950", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", "target": "ui_test_mount_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1962", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", "target": "ui_test_mount_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1962", "weight": 1.0}, {"source": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1963", "weight": 1.0}, {"source": "ui_test_mount_test_file_context_action_clipboard_failure_toasts", "target": "ui_test_mount_uispy", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1978", "weight": 1.0}, {"source": "ui_test_mount_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_mount_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_mount_rationale_30", "target": "ui_test_mount_deps", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L30", "weight": 1.0}, {"source": "ui_test_mount_rationale_80", "target": "ui_test_mount_fluent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L80", "weight": 1.0}, {"source": "ui_test_mount_rationale_99", "target": "ui_test_mount_fakeui", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L99", "weight": 1.0}, {"source": "ui_test_mount_rationale_117", "target": "ui_test_mount_boomui", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L117", "weight": 1.0}, {"source": "ui_test_mount_rationale_129", "target": "ui_test_mount_fakecontroller", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L129", "weight": 1.0}, {"source": "ui_test_mount_rationale_184", "target": "ui_test_mount_test_is_setup_ready_false_when_keyring_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L184", "weight": 1.0}, {"source": "ui_test_mount_rationale_215", "target": "ui_test_mount_test_is_setup_ready_false_when_nas_credential_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L215", "weight": 1.0}, {"source": "ui_test_mount_rationale_226", "target": "ui_test_mount_test_is_setup_ready_true_with_offline_catalogue_lims", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L226", "weight": 1.0}, {"source": "ui_test_mount_rationale_264", "target": "ui_test_mount_test_build_main_state_always_on_orchestrator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L264", "weight": 1.0}, {"source": "ui_test_mount_rationale_342", "target": "ui_test_mount_nas_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L342", "weight": 1.0}, {"source": "ui_test_mount_rationale_446", "target": "ui_test_mount_test_staging_state_when_staging_root_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L446", "weight": 1.0}, {"source": "ui_test_mount_rationale_493", "target": "ui_test_mount_navspy", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L493", "weight": 1.0}, {"source": "ui_test_mount_rationale_501", "target": "ui_test_mount_test_persist_config_writes_and_applies_live", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L501", "weight": 1.0}, {"source": "ui_test_mount_rationale_578", "target": "ui_test_mount_test_persist_config_creates_staging_root_when_set", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L578", "weight": 1.0}, {"source": "ui_test_mount_rationale_593", "target": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L593", "weight": 1.0}, {"source": "ui_test_mount_rationale_607", "target": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L607", "weight": 1.0}, {"source": "ui_test_mount_rationale_634", "target": "ui_test_mount_test_apply_live_config_falls_back_to_setting_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L634", "weight": 1.0}, {"source": "ui_test_mount_rationale_701", "target": "ui_test_mount_recordingkeyringstore", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L701", "weight": 1.0}, {"source": "ui_test_mount_rationale_740", "target": "ui_test_mount_test_lims_credential_handlers_tolerate_missing_keyring_store", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L740", "weight": 1.0}, {"source": "ui_test_mount_rationale_749", "target": "ui_test_mount_test_lims_credential_handlers_swallow_backend_errors", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L749", "weight": 1.0}, {"source": "ui_test_mount_rationale_981", "target": "ui_test_mount_fakelimsclient", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L981", "weight": 1.0}, {"source": "ui_test_mount_rationale_1227", "target": "ui_test_mount_test_build_main_query_omits_empty_params", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1227", "weight": 1.0}, {"source": "ui_test_mount_rationale_1235", "target": "ui_test_mount_test_build_main_query_url_encodes_special_chars", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1235", "weight": 1.0}, {"source": "ui_test_mount_rationale_1252", "target": "ui_test_mount_test_classify_node_discriminates_kinds", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1252", "weight": 1.0}, {"source": "ui_test_mount_rationale_1273", "target": "ui_test_mount_test_classify_node_rejects_unknown_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1273", "weight": 1.0}, {"source": "ui_test_mount_rationale_1295", "target": "ui_test_mount_test_build_metadata_payload_owned_equipment_reads_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1295", "weight": 1.0}, {"source": "ui_test_mount_rationale_1313", "target": "ui_test_mount_test_build_metadata_payload_unknown_equipment_id_returns_empty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1313", "weight": 1.0}, {"source": "ui_test_mount_rationale_1320", "target": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1320", "weight": 1.0}, {"source": "ui_test_mount_rationale_1339", "target": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1339", "weight": 1.0}, {"source": "ui_test_mount_rationale_1384", "target": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1384", "weight": 1.0}, {"source": "ui_test_mount_rationale_1393", "target": "ui_test_mount_test_build_main_state_threads_selection_into_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1393", "weight": 1.0}, {"source": "ui_test_mount_rationale_1411", "target": "ui_test_mount_test_open_in_os_returns_false_on_unhandled_platform", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1411", "weight": 1.0}, {"source": "ui_test_mount_rationale_1417", "target": "ui_test_mount_test_open_in_os_linux_invokes_xdg_open", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1417", "weight": 1.0}, {"source": "ui_test_mount_rationale_1431", "target": "ui_test_mount_test_open_in_os_darwin_invokes_open", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1431", "weight": 1.0}, {"source": "ui_test_mount_rationale_1440", "target": "ui_test_mount_test_open_in_os_returns_false_when_popen_raises", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1440", "weight": 1.0}, {"source": "ui_test_mount_rationale_1464", "target": "ui_test_mount_uispy", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1464", "weight": 1.0}, {"source": "ui_test_mount_rationale_1489", "target": "ui_test_mount_test_file_context_action_open_in_os_dispatches_to_helper", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1489", "weight": 1.0}, {"source": "ui_test_mount_rationale_1501", "target": "ui_test_mount_test_file_context_action_open_in_os_failure_toasts_negative", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1501", "weight": 1.0}, {"source": "ui_test_mount_rationale_1510", "target": "ui_test_mount_test_file_context_action_copy_path_writes_clipboard", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1510", "weight": 1.0}, {"source": "ui_test_mount_rationale_1518", "target": "ui_test_mount_test_file_context_action_unknown_action_no_raise", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1518", "weight": 1.0}, {"source": "ui_test_mount_rationale_1525", "target": "ui_test_mount_test_file_context_action_empty_path_toasts_negative", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1525", "weight": 1.0}, {"source": "ui_test_mount_rationale_1545", "target": "ui_test_mount_drain_background", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1545", "weight": 1.0}, {"source": "ui_test_mount_rationale_1560", "target": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1560", "weight": 1.0}, {"source": "ui_test_mount_rationale_1573", "target": "ui_test_mount_test_run_staging_action_force_sync_missing_nas_sync_toasts", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1573", "weight": 1.0}, {"source": "ui_test_mount_rationale_1580", "target": "ui_test_mount_test_run_staging_action_no_config_toasts_negative", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1580", "weight": 1.0}, {"source": "ui_test_mount_rationale_1589", "target": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1589", "weight": 1.0}, {"source": "ui_test_mount_rationale_1599", "target": "ui_test_mount_test_run_staging_action_unknown_action_no_raise", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1599", "weight": 1.0}, {"source": "ui_test_mount_rationale_1608", "target": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1608", "weight": 1.0}, {"source": "ui_test_mount_rationale_1633", "target": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1633", "weight": 1.0}, {"source": "ui_test_mount_rationale_1660", "target": "ui_test_mount_test_bulk_clear_verified_no_config_toasts_and_returns", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1660", "weight": 1.0}, {"source": "ui_test_mount_rationale_1669", "target": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1669", "weight": 1.0}, {"source": "ui_test_mount_rationale_1693", "target": "ui_test_mount_stubapp", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1693", "weight": 1.0}, {"source": "ui_test_mount_rationale_1704", "target": "ui_test_mount_test_drive_folder_feed_returns_empty_when_no_selection", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1704", "weight": 1.0}, {"source": "ui_test_mount_rationale_1714", "target": "ui_test_mount_test_drive_folder_feed_creates_feed_on_first_render", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1714", "weight": 1.0}, {"source": "ui_test_mount_rationale_1727", "target": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1727", "weight": 1.0}, {"source": "ui_test_mount_rationale_1769", "target": "ui_test_mount_test_fetch_folder_async_skips_when_coord_says_skip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1769", "weight": 1.0}, {"source": "ui_test_mount_rationale_1786", "target": "ui_test_mount_test_fetch_folder_async_records_refresh_on_success", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1786", "weight": 1.0}, {"source": "ui_test_mount_rationale_1805", "target": "ui_test_mount_test_fetch_folder_async_swallows_helper_exceptions", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1805", "weight": 1.0}, {"source": "ui_test_mount_rationale_1821", "target": "ui_test_mount_test_open_log_dialog_no_queue_job_renders_dialog", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1821", "weight": 1.0}, {"source": "ui_test_mount_rationale_1830", "target": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1830", "weight": 1.0}, {"source": "ui_test_mount_rationale_1858", "target": "ui_test_mount_test_build_metadata_payload_returns_empty_on_builder_exception", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1858", "weight": 1.0}, {"source": "ui_test_mount_rationale_1871", "target": "ui_test_mount_test_metadata_for_relay_equipment_emits_id_label_source_host", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1871", "weight": 1.0}, {"source": "ui_test_mount_rationale_1887", "target": "ui_test_mount_test_metadata_for_relay_equipment_unknown_id_falls_back", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1887", "weight": 1.0}, {"source": "ui_test_mount_rationale_1894", "target": "ui_test_mount_test_metadata_for_project_returns_empty_for_single_segment_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1894", "weight": 1.0}, {"source": "ui_test_mount_rationale_1900", "target": "ui_test_mount_test_count_dir_children_returns_zero_for_missing_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1900", "weight": 1.0}, {"source": "ui_test_mount_rationale_1905", "target": "ui_test_mount_test_count_dir_children_filters_by_prefix", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1905", "weight": 1.0}, {"source": "ui_test_mount_rationale_1914", "target": "ui_test_mount_test_metadata_for_run_returns_partial_on_decode_failure", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1914", "weight": 1.0}, {"source": "ui_test_mount_rationale_1927", "target": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1927", "weight": 1.0}, {"source": "ui_test_mount_rationale_1943", "target": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1943", "weight": 1.0}, {"source": "ui_test_mount_rationale_1959", "target": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1959", "weight": 1.0}, {"source": "ui_test_mount_rationale_1972", "target": "ui_test_mount_test_file_context_action_clipboard_failure_toasts", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1972", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_mount_deps", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L39"}, {"caller_nid": "ui_test_mount_deps", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L40"}, {"caller_nid": "ui_test_mount_config", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L55"}, {"caller_nid": "ui_test_mount_config", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L56"}, {"caller_nid": "ui_test_mount_config", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L61"}, {"caller_nid": "ui_test_mount_config", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L66"}, {"caller_nid": "ui_test_mount_config", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L70"}, {"caller_nid": "ui_test_mount_fakeui_init", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L105"}, {"caller_nid": "ui_test_mount_fakeui_label", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L112"}, {"caller_nid": "ui_test_mount_boomui_card", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L121"}, {"caller_nid": "ui_test_mount_boomui_label", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L125"}, {"caller_nid": "ui_test_mount_fakecontroller_init", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L144"}, {"caller_nid": "ui_test_mount_fakecontroller_status", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L148"}, {"caller_nid": "ui_test_mount_fakecontroller_create_project", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L151"}, {"caller_nid": "ui_test_mount_fakecontroller_create_project", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L154"}, {"caller_nid": "ui_test_mount_fakecontroller_create_project", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L155"}, {"caller_nid": "ui_test_mount_test_is_setup_ready_false_when_deps_none", "callee": "_is_setup_ready", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L176"}, {"caller_nid": "ui_test_mount_test_is_setup_ready_false_when_config_missing", "callee": "_is_setup_ready", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L180"}, {"caller_nid": "ui_test_mount_test_is_setup_ready_false_when_keyring_missing", "callee": "_is_setup_ready", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L191"}, {"caller_nid": "ui_test_mount_test_is_setup_ready_false_when_lims_unreachable", "callee": "_is_setup_ready", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L201"}, {"caller_nid": "ui_test_mount_test_is_setup_ready_true_when_all_satisfied", "callee": "_is_setup_ready", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L211"}, {"caller_nid": "ui_test_mount_test_is_setup_ready_false_when_nas_credential_missing", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L220"}, {"caller_nid": "ui_test_mount_test_is_setup_ready_false_when_nas_credential_missing", "callee": "_is_setup_ready", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L222"}, {"caller_nid": "ui_test_mount_test_is_setup_ready_true_with_offline_catalogue_lims", "callee": "_is_setup_ready", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L238"}, {"caller_nid": "ui_test_mount_test_build_main_state_marks_incomplete_without_config", "callee": "_build_main_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L247"}, {"caller_nid": "ui_test_mount_test_build_main_state_sources_problems_counts_from_audit", "callee": "_build_main_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L258"}, {"caller_nid": "ui_test_mount_test_build_main_state_always_on_orchestrator", "callee": "_build_main_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L272"}, {"caller_nid": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L284"}, {"caller_nid": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L285"}, {"caller_nid": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L286"}, {"caller_nid": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L287"}, {"caller_nid": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L288"}, {"caller_nid": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L289"}, {"caller_nid": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L290"}, {"caller_nid": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L291"}, {"caller_nid": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L292"}, {"caller_nid": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L294"}, {"caller_nid": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L294"}, {"caller_nid": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", "callee": "_operation_counts", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L295"}, {"caller_nid": "ui_test_mount_test_operation_counts_zero_without_controller", "callee": "_operation_counts", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L303"}, {"caller_nid": "ui_test_mount_test_operation_counts_zero_without_controller", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L303"}, {"caller_nid": "ui_test_mount_test_missing_sections_when_deps_none", "callee": "_missing_setup_sections", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L312"}, {"caller_nid": "ui_test_mount_test_missing_sections_when_config_none", "callee": "_missing_setup_sections", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L319"}, {"caller_nid": "ui_test_mount_test_missing_sections_with_paths_unset", "callee": "_missing_setup_sections", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L327"}, {"caller_nid": "ui_test_mount_test_missing_sections_with_keyring_absent_reports_lims", "callee": "_missing_setup_sections", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L333"}, {"caller_nid": "ui_test_mount_test_missing_sections_empty_when_fully_configured", "callee": "_missing_setup_sections", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L338"}, {"caller_nid": "ui_test_mount_nas_config", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L360"}, {"caller_nid": "ui_test_mount_nas_config", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L362"}, {"caller_nid": "ui_test_mount_nas_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L364"}, {"caller_nid": "ui_test_mount_nas_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L365"}, {"caller_nid": "ui_test_mount_nas_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L368"}, {"caller_nid": "ui_test_mount_nas_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L373"}, {"caller_nid": "ui_test_mount_nas_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L381"}, {"caller_nid": "ui_test_mount_test_missing_sections_includes_nas_credentials_when_password_absent", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L389"}, {"caller_nid": "ui_test_mount_test_missing_sections_includes_nas_credentials_when_password_absent", "callee": "_missing_setup_sections", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L391"}, {"caller_nid": "ui_test_mount_test_missing_sections_excludes_nas_credentials_when_password_present", "callee": "_missing_setup_sections", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L400"}, {"caller_nid": "ui_test_mount_raisingvalidator_audit", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L411"}, {"caller_nid": "ui_test_mount_test_safe_audit_returns_empty_list_when_validator_missing", "callee": "_safe_audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L423"}, {"caller_nid": "ui_test_mount_test_safe_audit_swallows_validator_exception", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L428"}, {"caller_nid": "ui_test_mount_test_safe_audit_swallows_validator_exception", "callee": "_safe_audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L429"}, {"caller_nid": "ui_test_mount_test_safe_audit_swallows_validator_exception", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L431"}, {"caller_nid": "ui_test_mount_test_safe_audit_forwards_validator_output", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L435"}, {"caller_nid": "ui_test_mount_test_safe_audit_forwards_validator_output", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L435"}, {"caller_nid": "ui_test_mount_test_safe_audit_forwards_validator_output", "callee": "_safe_audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L437"}, {"caller_nid": "ui_test_mount_test_staging_state_when_staging_root_missing", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L451"}, {"caller_nid": "ui_test_mount_test_staging_state_when_staging_root_missing", "callee": "_build_staging_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L454"}, {"caller_nid": "ui_test_mount_test_staging_state_none_when_no_config", "callee": "_build_staging_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L461"}, {"caller_nid": "ui_test_mount_test_staging_state_returns_empty_rows_on_query_failure", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L478"}, {"caller_nid": "ui_test_mount_test_staging_state_returns_empty_rows_on_query_failure", "callee": "_build_staging_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L482"}, {"caller_nid": "ui_test_mount_navspy_init", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L497"}, {"caller_nid": "ui_test_mount_test_persist_config_writes_and_applies_live", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L510"}, {"caller_nid": "ui_test_mount_test_persist_config_writes_and_applies_live", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L510"}, {"caller_nid": "ui_test_mount_test_persist_config_writes_and_applies_live", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L512"}, {"caller_nid": "ui_test_mount_test_persist_config_writes_and_applies_live", "callee": "_persist_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L514"}, {"caller_nid": "ui_test_mount_test_persist_config_writes_and_applies_live", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L520"}, {"caller_nid": "ui_test_mount_test_persist_config_returns_false_when_no_saver", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L526"}, {"caller_nid": "ui_test_mount_test_persist_config_returns_false_when_no_saver", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L526"}, {"caller_nid": "ui_test_mount_test_persist_config_returns_false_when_no_saver", "callee": "_persist_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L529"}, {"caller_nid": "ui_test_mount_test_persist_config_returns_false_when_no_saver", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L529"}, {"caller_nid": "ui_test_mount_test_persist_config_returns_false_when_saver_raises", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L538"}, {"caller_nid": "ui_test_mount_test_persist_config_returns_false_when_saver_raises", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L538"}, {"caller_nid": "ui_test_mount_test_persist_config_returns_false_when_saver_raises", "callee": "_persist_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L546"}, {"caller_nid": "ui_test_mount_test_persist_config_returns_false_when_saver_raises", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L546"}, {"caller_nid": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L558"}, {"caller_nid": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L558"}, {"caller_nid": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", "callee": "_Awaitable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L564"}, {"caller_nid": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L565"}, {"caller_nid": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L567"}, {"caller_nid": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", "callee": "_persist_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L568"}, {"caller_nid": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L572"}, {"caller_nid": "ui_test_mount_test_persist_config_creates_staging_root_when_set", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L579"}, {"caller_nid": "ui_test_mount_test_persist_config_creates_staging_root_when_set", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L581"}, {"caller_nid": "ui_test_mount_test_persist_config_creates_staging_root_when_set", "callee": "_persist_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L584"}, {"caller_nid": "ui_test_mount_test_persist_config_creates_staging_root_when_set", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L587"}, {"caller_nid": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L594"}, {"caller_nid": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", "callee": "_persist_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L598"}, {"caller_nid": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L601"}, {"caller_nid": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", "callee": "iterdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L601"}, {"caller_nid": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L608"}, {"caller_nid": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L610"}, {"caller_nid": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L611"}, {"caller_nid": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L618"}, {"caller_nid": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L620"}, {"caller_nid": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", "callee": "_persist_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L623"}, {"caller_nid": "ui_test_mount_test_apply_live_config_falls_back_to_setting_config", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L640"}, {"caller_nid": "ui_test_mount_test_apply_live_config_falls_back_to_setting_config", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L642"}, {"caller_nid": "ui_test_mount_test_apply_live_config_falls_back_to_setting_config", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L644"}, {"caller_nid": "ui_test_mount_test_apply_live_config_falls_back_to_setting_config", "callee": "_apply_live_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L645"}, {"caller_nid": "ui_test_mount_test_apply_live_config_falls_back_to_setting_config", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L648"}, {"caller_nid": "ui_test_mount_test_render_unavailable_renders_headline_and_subline", "callee": "_render_unavailable", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L658"}, {"caller_nid": "ui_test_mount_test_render_unavailable_swallows_failure", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L664"}, {"caller_nid": "ui_test_mount_test_render_unavailable_swallows_failure", "callee": "_render_unavailable", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L665"}, {"caller_nid": "ui_test_mount_test_render_unavailable_swallows_failure", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L666"}, {"caller_nid": "ui_test_mount_test_show_toast_positive_and_negative_never_raise", "callee": "_show_toast", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L677"}, {"caller_nid": "ui_test_mount_test_show_toast_positive_and_negative_never_raise", "callee": "_show_toast", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L678"}, {"caller_nid": "ui_test_mount_test_show_toast_swallows_notification_failure", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L690"}, {"caller_nid": "ui_test_mount_test_show_toast_swallows_notification_failure", "callee": "_show_toast", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L692"}, {"caller_nid": "ui_test_mount_recordingkeyringstore_set_password", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L711"}, {"caller_nid": "ui_test_mount_recordingkeyringstore_set_password", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L712"}, {"caller_nid": "ui_test_mount_recordingkeyringstore_delete_password", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L717"}, {"caller_nid": "ui_test_mount_recordingkeyringstore_delete_password", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L718"}, {"caller_nid": "ui_test_mount_test_lims_credential_handlers_save_writes_under_lims_username", "callee": "_lims_credential_handlers", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L723"}, {"caller_nid": "ui_test_mount_test_lims_credential_handlers_save_writes_under_lims_username", "callee": "on_save", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L725"}, {"caller_nid": "ui_test_mount_test_lims_credential_handlers_clear_deletes_under_lims_username", "callee": "_lims_credential_handlers", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L732"}, {"caller_nid": "ui_test_mount_test_lims_credential_handlers_clear_deletes_under_lims_username", "callee": "on_clear", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L734"}, {"caller_nid": "ui_test_mount_test_lims_credential_handlers_tolerate_missing_keyring_store", "callee": "_lims_credential_handlers", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L742"}, {"caller_nid": "ui_test_mount_test_lims_credential_handlers_tolerate_missing_keyring_store", "callee": "on_save", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L744"}, {"caller_nid": "ui_test_mount_test_lims_credential_handlers_tolerate_missing_keyring_store", "callee": "on_clear", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L745"}, {"caller_nid": "ui_test_mount_test_lims_credential_handlers_swallow_backend_errors", "callee": "_lims_credential_handlers", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L752"}, {"caller_nid": "ui_test_mount_test_lims_credential_handlers_swallow_backend_errors", "callee": "on_save", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L754"}, {"caller_nid": "ui_test_mount_test_lims_credential_handlers_swallow_backend_errors", "callee": "on_clear", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L755"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_save_writes_under_nas_username", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L767"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_save_writes_under_nas_username", "callee": "_nas_credential_handlers", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L769"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_save_writes_under_nas_username", "callee": "on_save", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L771"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_save_writes_under_nas_username", "callee": "keyring_nas_username", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L773"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_clear_deletes_and_discards", "callee": "_nas_credential_handlers", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L785"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_clear_deletes_and_discards", "callee": "on_clear", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L787"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_clear_deletes_and_discards", "callee": "keyring_nas_username", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L789"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_clear_deletes_and_discards", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L790"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_isolate_per_equipment_id", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L795"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_isolate_per_equipment_id", "callee": "_nas_credential_handlers", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L798"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_isolate_per_equipment_id", "callee": "_nas_credential_handlers", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L799"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_isolate_per_equipment_id", "callee": "save_one", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L800"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_isolate_per_equipment_id", "callee": "save_two", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L801"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_tolerate_missing_keyring_store", "callee": "_nas_credential_handlers", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L807"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_tolerate_missing_keyring_store", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L808"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_tolerate_missing_keyring_store", "callee": "on_save", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L810"}, {"caller_nid": "ui_test_mount_test_nas_credential_handlers_tolerate_missing_keyring_store", "callee": "on_clear", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L811"}, {"caller_nid": "ui_test_mount_test_apply_autostart_noop_when_deps_none", "callee": "_apply_autostart", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L820"}, {"caller_nid": "ui_test_mount_test_apply_autostart_noop_when_toggle_missing", "callee": "_apply_autostart", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L824"}, {"caller_nid": "ui_test_mount_test_apply_autostart_invokes_toggle", "callee": "_apply_autostart", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L830"}, {"caller_nid": "ui_test_mount_test_apply_autostart_returns_real_registration_state", "callee": "_apply_autostart", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L837"}, {"caller_nid": "ui_test_mount_test_apply_autostart_returns_real_registration_state", "callee": "_apply_autostart", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L838"}, {"caller_nid": "ui_test_mount_test_apply_autostart_returns_real_registration_state", "callee": "_apply_autostart", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L839"}, {"caller_nid": "ui_test_mount_test_apply_autostart_returns_real_registration_state", "callee": "_apply_autostart", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L840"}, {"caller_nid": "ui_test_mount_test_apply_autostart_swallows_toggle_failure", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L850"}, {"caller_nid": "ui_test_mount_test_apply_autostart_swallows_toggle_failure", "callee": "_apply_autostart", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L851"}, {"caller_nid": "ui_test_mount_test_apply_autostart_swallows_toggle_failure", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L852"}, {"caller_nid": "ui_test_mount_test_templates_dir_none_when_deps_none", "callee": "_templates_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L861"}, {"caller_nid": "ui_test_mount_test_templates_dir_none_when_config_none", "callee": "_templates_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L865"}, {"caller_nid": "ui_test_mount_test_templates_dir_none_when_unset", "callee": "_templates_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L869"}, {"caller_nid": "ui_test_mount_test_templates_dir_returns_path", "callee": "_templates_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L874"}, {"caller_nid": "ui_test_mount_test_templates_dir_returns_path", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L874"}, {"caller_nid": "ui_test_mount_test_equipment_ids_empty_without_config", "callee": "_equipment_ids", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L878"}, {"caller_nid": "ui_test_mount_test_equipment_ids_lists_configured_ids", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L883"}, {"caller_nid": "ui_test_mount_test_equipment_ids_lists_configured_ids", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L883"}, {"caller_nid": "ui_test_mount_test_equipment_ids_lists_configured_ids", "callee": "_equipment_ids", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L885"}, {"caller_nid": "ui_test_mount_test_template_names_empty_without_templates_dir", "callee": "_template_names", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L894"}, {"caller_nid": "ui_test_mount_test_template_names_lists_summary_names", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L901"}, {"caller_nid": "ui_test_mount_test_template_names_lists_summary_names", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L901"}, {"caller_nid": "ui_test_mount_test_template_names_lists_summary_names", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L902"}, {"caller_nid": "ui_test_mount_test_template_names_lists_summary_names", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L902"}, {"caller_nid": "ui_test_mount_test_template_names_lists_summary_names", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L904"}, {"caller_nid": "ui_test_mount_test_template_names_lists_summary_names", "callee": "_template_names", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L906"}, {"caller_nid": "ui_test_mount_test_template_names_swallows_scan_failure", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L918"}, {"caller_nid": "ui_test_mount_test_template_names_swallows_scan_failure", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L919"}, {"caller_nid": "ui_test_mount_test_template_names_swallows_scan_failure", "callee": "_template_names", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L920"}, {"caller_nid": "ui_test_mount_test_template_names_swallows_scan_failure", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L921"}, {"caller_nid": "ui_test_mount_test_lims_projects_empty_without_config", "callee": "_lims_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L930"}, {"caller_nid": "ui_test_mount_test_lims_projects_empty_without_catalogue_path", "callee": "_lims_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L934"}, {"caller_nid": "ui_test_mount_test_lims_projects_empty_when_catalogue_missing", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L938"}, {"caller_nid": "ui_test_mount_test_lims_projects_empty_when_catalogue_missing", "callee": "_lims_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L939"}, {"caller_nid": "ui_test_mount_test_lims_projects_reads_offline_catalogue", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L946"}, {"caller_nid": "ui_test_mount_test_lims_projects_reads_offline_catalogue", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L947"}, {"caller_nid": "ui_test_mount_test_lims_projects_reads_offline_catalogue", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L948"}, {"caller_nid": "ui_test_mount_test_lims_projects_reads_offline_catalogue", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L950"}, {"caller_nid": "ui_test_mount_test_lims_projects_reads_offline_catalogue", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L952"}, {"caller_nid": "ui_test_mount_test_lims_projects_reads_offline_catalogue", "callee": "_lims_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L953"}, {"caller_nid": "ui_test_mount_test_lims_projects_swallows_read_failure", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L967"}, {"caller_nid": "ui_test_mount_test_lims_projects_swallows_read_failure", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L973"}, {"caller_nid": "ui_test_mount_test_lims_projects_swallows_read_failure", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L974"}, {"caller_nid": "ui_test_mount_test_lims_projects_swallows_read_failure", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L975"}, {"caller_nid": "ui_test_mount_test_lims_projects_swallows_read_failure", "callee": "_lims_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L976"}, {"caller_nid": "ui_test_mount_test_lims_projects_swallows_read_failure", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L977"}, {"caller_nid": "ui_test_mount_fakelimsclient_list_projects", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L992"}, {"caller_nid": "ui_test_mount_test_lims_projects_uses_live_lims", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L997"}, {"caller_nid": "ui_test_mount_test_lims_projects_uses_live_lims", "callee": "_lims_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L999"}, {"caller_nid": "ui_test_mount_test_lims_projects_skips_live_lims_when_unreachable", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1011"}, {"caller_nid": "ui_test_mount_test_lims_projects_skips_live_lims_when_unreachable", "callee": "_lims_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1013"}, {"caller_nid": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1021"}, {"caller_nid": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1022"}, {"caller_nid": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1023"}, {"caller_nid": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1025"}, {"caller_nid": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1029"}, {"caller_nid": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1033"}, {"caller_nid": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", "callee": "_lims_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1034"}, {"caller_nid": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1044"}, {"caller_nid": "ui_test_mount_test_template_questions_map_empty_without_templates_dir", "callee": "_template_questions_map", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1053"}, {"caller_nid": "ui_test_mount_test_template_questions_map_resolves_questions", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1062"}, {"caller_nid": "ui_test_mount_test_template_questions_map_resolves_questions", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1062"}, {"caller_nid": "ui_test_mount_test_template_questions_map_resolves_questions", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1063"}, {"caller_nid": "ui_test_mount_test_template_questions_map_resolves_questions", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1069"}, {"caller_nid": "ui_test_mount_test_template_questions_map_resolves_questions", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1070"}, {"caller_nid": "ui_test_mount_test_template_questions_map_resolves_questions", "callee": "_template_questions_map", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1074"}, {"caller_nid": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1083"}, {"caller_nid": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1083"}, {"caller_nid": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1084"}, {"caller_nid": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1091"}, {"caller_nid": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1092"}, {"caller_nid": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", "callee": "_template_questions_map", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1093"}, {"caller_nid": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1094"}, {"caller_nid": "ui_test_mount_test_await_session_awaits_pending_task", "callee": "_background", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1108"}, {"caller_nid": "ui_test_mount_test_await_session_awaits_pending_task", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1109"}, {"caller_nid": "ui_test_mount_test_await_session_awaits_pending_task", "callee": "_await_session", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1110"}, {"caller_nid": "ui_test_mount_test_await_session_without_pending_task", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1117"}, {"caller_nid": "ui_test_mount_test_await_session_without_pending_task", "callee": "_await_session", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1118"}, {"caller_nid": "ui_test_mount_test_run_creation_navigates_home_on_done", "callee": "_run_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1130"}, {"caller_nid": "ui_test_mount_test_run_creation_navigates_home_on_done", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1130"}, {"caller_nid": "ui_test_mount_test_run_creation_reports_failure_state", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1136"}, {"caller_nid": "ui_test_mount_test_run_creation_reports_failure_state", "callee": "_run_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1138"}, {"caller_nid": "ui_test_mount_test_run_creation_reports_failure_state", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1138"}, {"caller_nid": "ui_test_mount_test_run_creation_swallows_create_exception", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1147"}, {"caller_nid": "ui_test_mount_test_run_creation_swallows_create_exception", "callee": "_run_creation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1148"}, {"caller_nid": "ui_test_mount_test_run_creation_swallows_create_exception", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1149"}, {"caller_nid": "ui_test_mount_test_run_creation_swallows_create_exception", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1152"}, {"caller_nid": "ui_test_mount_test_submit_project_toasts_when_controller_missing", "callee": "_submit_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1162"}, {"caller_nid": "ui_test_mount_test_submit_project_toasts_when_controller_missing", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1162"}, {"caller_nid": "ui_test_mount_test_submit_project_toasts_without_template", "callee": "_submit_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1170"}, {"caller_nid": "ui_test_mount_test_submit_project_toasts_without_template", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1170"}, {"caller_nid": "ui_test_mount_test_submit_project_builds_request_and_runs", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1177"}, {"caller_nid": "ui_test_mount_test_submit_project_builds_request_and_runs", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1178"}, {"caller_nid": "ui_test_mount_test_submit_project_builds_request_and_runs", "callee": "_submit_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1186"}, {"caller_nid": "ui_test_mount_test_submit_project_builds_request_and_runs", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1187"}, {"caller_nid": "ui_test_mount_test_submit_run_toasts_when_controller_missing", "callee": "_submit_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1197"}, {"caller_nid": "ui_test_mount_test_submit_run_toasts_when_controller_missing", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1197"}, {"caller_nid": "ui_test_mount_test_submit_run_builds_request_and_runs", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1204"}, {"caller_nid": "ui_test_mount_test_submit_run_builds_request_and_runs", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1205"}, {"caller_nid": "ui_test_mount_test_submit_run_builds_request_and_runs", "callee": "_submit_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1212"}, {"caller_nid": "ui_test_mount_test_submit_run_builds_request_and_runs", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1213"}, {"caller_nid": "ui_test_mount_test_build_main_query_omits_empty_params", "callee": "_build_main_query", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1228"}, {"caller_nid": "ui_test_mount_test_build_main_query_omits_empty_params", "callee": "_build_main_query", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1229"}, {"caller_nid": "ui_test_mount_test_build_main_query_omits_empty_params", "callee": "_build_main_query", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1230"}, {"caller_nid": "ui_test_mount_test_build_main_query_omits_empty_params", "callee": "_build_main_query", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1231"}, {"caller_nid": "ui_test_mount_test_build_main_query_url_encodes_special_chars", "callee": "_build_main_query", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1238"}, {"caller_nid": "ui_test_mount_test_build_main_query_url_encodes_special_chars", "callee": "_build_main_query", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1242"}, {"caller_nid": "ui_test_mount_test_build_main_query_url_encodes_special_chars", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1242"}, {"caller_nid": "ui_test_mount_test_build_main_query_url_encodes_special_chars", "callee": "_build_main_query", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1243"}, {"caller_nid": "ui_test_mount_test_build_main_query_url_encodes_special_chars", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1243"}, {"caller_nid": "ui_test_mount_test_classify_node_returns_none_for_empty_selection", "callee": "_classify_node", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1247"}, {"caller_nid": "ui_test_mount_test_classify_node_returns_none_for_empty_selection", "callee": "_classify_node", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1248"}, {"caller_nid": "ui_test_mount_test_classify_node_discriminates_kinds", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1256"}, {"caller_nid": "ui_test_mount_test_classify_node_discriminates_kinds", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1257"}, {"caller_nid": "ui_test_mount_test_classify_node_discriminates_kinds", "callee": "_classify_node", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1259"}, {"caller_nid": "ui_test_mount_test_classify_node_discriminates_kinds", "callee": "_classify_node", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1260"}, {"caller_nid": "ui_test_mount_test_classify_node_discriminates_kinds", "callee": "_classify_node", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1261"}, {"caller_nid": "ui_test_mount_test_classify_node_discriminates_kinds", "callee": "_classify_node", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1262"}, {"caller_nid": "ui_test_mount_test_classify_node_discriminates_kinds", "callee": "_classify_node", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1263"}, {"caller_nid": "ui_test_mount_test_classify_node_discriminates_kinds", "callee": "_classify_node", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1269"}, {"caller_nid": "ui_test_mount_test_classify_node_rejects_unknown_root", "callee": "EquipmentNode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1281"}, {"caller_nid": "ui_test_mount_test_classify_node_rejects_unknown_root", "callee": "_classify_node", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1282"}, {"caller_nid": "ui_test_mount_test_classify_node_rejects_unknown_root", "callee": "_classify_node", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1283"}, {"caller_nid": "ui_test_mount_test_classify_node_rejects_unknown_root", "callee": "_classify_node", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1285"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_returns_empty_when_node_missing", "callee": "_build_metadata_payload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1289"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_returns_empty_when_node_missing", "callee": "_build_metadata_payload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1290"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_returns_empty_when_node_missing", "callee": "_build_metadata_payload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1291"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_owned_equipment_reads_config", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1296"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_owned_equipment_reads_config", "callee": "_build_metadata_payload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1304"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_unknown_equipment_id_returns_empty", "callee": "_build_metadata_payload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1315"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1326"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1327"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1328"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1329"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1330"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1331"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", "callee": "_build_metadata_payload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1332"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1354"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1355"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "strftime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1357"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1357"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1361"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1364"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1368"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1368"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1371"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1371"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1372"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "_build_metadata_payload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1373"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1373"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1380"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1386"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1387"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", "callee": "_build_metadata_payload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1388"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1388"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1389"}, {"caller_nid": "ui_test_mount_test_build_main_state_threads_selection_into_state", "callee": "_build_main_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1394"}, {"caller_nid": "ui_test_mount_test_open_in_os_returns_false_on_unhandled_platform", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1412"}, {"caller_nid": "ui_test_mount_test_open_in_os_returns_false_on_unhandled_platform", "callee": "_open_in_os", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1413"}, {"caller_nid": "ui_test_mount_test_open_in_os_linux_invokes_xdg_open", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1418"}, {"caller_nid": "ui_test_mount_test_open_in_os_linux_invokes_xdg_open", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1425"}, {"caller_nid": "ui_test_mount_test_open_in_os_linux_invokes_xdg_open", "callee": "_open_in_os", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1426"}, {"caller_nid": "ui_test_mount_test_open_in_os_darwin_invokes_open", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1432"}, {"caller_nid": "ui_test_mount_test_open_in_os_darwin_invokes_open", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1434"}, {"caller_nid": "ui_test_mount_test_open_in_os_darwin_invokes_open", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1434"}, {"caller_nid": "ui_test_mount_test_open_in_os_darwin_invokes_open", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1434"}, {"caller_nid": "ui_test_mount_test_open_in_os_darwin_invokes_open", "callee": "_open_in_os", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1435"}, {"caller_nid": "ui_test_mount_test_open_in_os_returns_false_when_popen_raises", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1441"}, {"caller_nid": "ui_test_mount_test_open_in_os_returns_false_when_popen_raises", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1446"}, {"caller_nid": "ui_test_mount_test_open_in_os_returns_false_when_popen_raises", "callee": "_open_in_os", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1447"}, {"caller_nid": "ui_test_mount_clipboardspy_write", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1460"}, {"caller_nid": "ui_test_mount_uispy_init", "callee": "_Nav", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1477"}, {"caller_nid": "ui_test_mount_uispy_getattr", "callee": "AttributeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1483"}, {"caller_nid": "ui_test_mount_test_file_context_action_open_in_os_dispatches_to_helper", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1491"}, {"caller_nid": "ui_test_mount_test_file_context_action_open_in_os_dispatches_to_helper", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1491"}, {"caller_nid": "ui_test_mount_test_file_context_action_open_in_os_dispatches_to_helper", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1493"}, {"caller_nid": "ui_test_mount_test_file_context_action_open_in_os_dispatches_to_helper", "callee": "_file_context_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1494"}, {"caller_nid": "ui_test_mount_test_file_context_action_open_in_os_failure_toasts_negative", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1502"}, {"caller_nid": "ui_test_mount_test_file_context_action_open_in_os_failure_toasts_negative", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1504"}, {"caller_nid": "ui_test_mount_test_file_context_action_open_in_os_failure_toasts_negative", "callee": "_file_context_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1505"}, {"caller_nid": "ui_test_mount_test_file_context_action_copy_path_writes_clipboard", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1512"}, {"caller_nid": "ui_test_mount_test_file_context_action_copy_path_writes_clipboard", "callee": "_file_context_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1513"}, {"caller_nid": "ui_test_mount_test_file_context_action_unknown_action_no_raise", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1520"}, {"caller_nid": "ui_test_mount_test_file_context_action_unknown_action_no_raise", "callee": "_file_context_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1521"}, {"caller_nid": "ui_test_mount_test_file_context_action_empty_path_toasts_negative", "callee": "_file_context_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1527"}, {"caller_nid": "ui_test_mount_test_file_context_action_empty_path_toasts_negative", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1527"}, {"caller_nid": "ui_test_mount_stubnassync_enqueue", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1540"}, {"caller_nid": "ui_test_mount_stubnassync_enqueue", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1541"}, {"caller_nid": "ui_test_mount_drain_background", "callee": "new_event_loop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1548"}, {"caller_nid": "ui_test_mount_drain_background", "callee": "run_until_complete", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1550"}, {"caller_nid": "ui_test_mount_drain_background", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1550"}, {"caller_nid": "ui_test_mount_drain_background", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1552"}, {"caller_nid": "ui_test_mount_drain_background", "callee": "run_until_complete", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1554"}, {"caller_nid": "ui_test_mount_drain_background", "callee": "gather", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1554"}, {"caller_nid": "ui_test_mount_drain_background", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1556"}, {"caller_nid": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", "callee": "_run_staging_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1564"}, {"caller_nid": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1566"}, {"caller_nid": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1569"}, {"caller_nid": "ui_test_mount_test_run_staging_action_force_sync_missing_nas_sync_toasts", "callee": "_run_staging_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1576"}, {"caller_nid": "ui_test_mount_test_run_staging_action_no_config_toasts_negative", "callee": "_run_staging_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1583"}, {"caller_nid": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1591"}, {"caller_nid": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1591"}, {"caller_nid": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", "callee": "_run_staging_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1594"}, {"caller_nid": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1595"}, {"caller_nid": "ui_test_mount_test_run_staging_action_unknown_action_no_raise", "callee": "_run_staging_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1602"}, {"caller_nid": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1615"}, {"caller_nid": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", "callee": "_run_staging_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1618"}, {"caller_nid": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1619"}, {"caller_nid": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1622"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1639"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "callee": "_summary", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1643"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "callee": "_summary", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1644"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "callee": "_summary", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1645"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1648"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1648"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "callee": "_bulk_clear_verified", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1651"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1652"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1656"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1656"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_no_config_toasts_and_returns", "callee": "_bulk_clear_verified", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1663"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1674"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", "callee": "_bulk_clear_verified", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1677"}, {"caller_nid": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1678"}, {"caller_nid": "ui_test_mount_stubapp_init", "callee": "_Storage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1700"}, {"caller_nid": "ui_test_mount_test_drive_folder_feed_returns_empty_when_no_selection", "callee": "_drive_folder_feed", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1706"}, {"caller_nid": "ui_test_mount_test_drive_folder_feed_creates_feed_on_first_render", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1716"}, {"caller_nid": "ui_test_mount_test_drive_folder_feed_creates_feed_on_first_render", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1716"}, {"caller_nid": "ui_test_mount_test_drive_folder_feed_creates_feed_on_first_render", "callee": "_drive_folder_feed", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1718"}, {"caller_nid": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1732"}, {"caller_nid": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1732"}, {"caller_nid": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", "callee": "FolderResponse", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1735"}, {"caller_nid": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", "callee": "FolderEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1738"}, {"caller_nid": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", "callee": "FolderFeed", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1748"}, {"caller_nid": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1752"}, {"caller_nid": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", "callee": "_drive_folder_feed", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1755"}, {"caller_nid": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1756"}, {"caller_nid": "ui_test_mount_test_fetch_folder_async_skips_when_coord_says_skip", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1776"}, {"caller_nid": "ui_test_mount_test_fetch_folder_async_skips_when_coord_says_skip", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1777"}, {"caller_nid": "ui_test_mount_test_fetch_folder_async_skips_when_coord_says_skip", "callee": "_fetch_folder_async", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1778"}, {"caller_nid": "ui_test_mount_test_fetch_folder_async_records_refresh_on_success", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1792"}, {"caller_nid": "ui_test_mount_test_fetch_folder_async_records_refresh_on_success", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1793"}, {"caller_nid": "ui_test_mount_test_fetch_folder_async_records_refresh_on_success", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1795"}, {"caller_nid": "ui_test_mount_test_fetch_folder_async_records_refresh_on_success", "callee": "_fetch_folder_async", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1797"}, {"caller_nid": "ui_test_mount_test_fetch_folder_async_swallows_helper_exceptions", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1810"}, {"caller_nid": "ui_test_mount_test_fetch_folder_async_swallows_helper_exceptions", "callee": "_fetch_folder_async", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1811"}, {"caller_nid": "ui_test_mount_test_open_log_dialog_no_queue_job_renders_dialog", "callee": "_open_log_dialog", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1824"}, {"caller_nid": "ui_test_mount_test_open_log_dialog_no_queue_job_renders_dialog", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1825"}, {"caller_nid": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1833"}, {"caller_nid": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", "callee": "_Queue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1844"}, {"caller_nid": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", "callee": "_open_log_dialog", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1845"}, {"caller_nid": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1846"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_returns_empty_on_builder_exception", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1863"}, {"caller_nid": "ui_test_mount_test_build_metadata_payload_returns_empty_on_builder_exception", "callee": "_build_metadata_payload", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1864"}, {"caller_nid": "ui_test_mount_test_metadata_for_relay_equipment_emits_id_label_source_host", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1872"}, {"caller_nid": "ui_test_mount_test_metadata_for_relay_equipment_emits_id_label_source_host", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1875"}, {"caller_nid": "ui_test_mount_test_metadata_for_relay_equipment_emits_id_label_source_host", "callee": "_metadata_for_relay_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1878"}, {"caller_nid": "ui_test_mount_test_metadata_for_relay_equipment_unknown_id_falls_back", "callee": "_metadata_for_relay_equipment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1888"}, {"caller_nid": "ui_test_mount_test_metadata_for_project_returns_empty_for_single_segment_id", "callee": "_metadata_for_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1895"}, {"caller_nid": "ui_test_mount_test_count_dir_children_returns_zero_for_missing_dir", "callee": "_count_dir_children", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1901"}, {"caller_nid": "ui_test_mount_test_count_dir_children_filters_by_prefix", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1906"}, {"caller_nid": "ui_test_mount_test_count_dir_children_filters_by_prefix", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1907"}, {"caller_nid": "ui_test_mount_test_count_dir_children_filters_by_prefix", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1908"}, {"caller_nid": "ui_test_mount_test_count_dir_children_filters_by_prefix", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1909"}, {"caller_nid": "ui_test_mount_test_count_dir_children_filters_by_prefix", "callee": "_count_dir_children", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1910"}, {"caller_nid": "ui_test_mount_test_metadata_for_run_returns_partial_on_decode_failure", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1918"}, {"caller_nid": "ui_test_mount_test_metadata_for_run_returns_partial_on_decode_failure", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1919"}, {"caller_nid": "ui_test_mount_test_metadata_for_run_returns_partial_on_decode_failure", "callee": "_metadata_for_run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1920"}, {"caller_nid": "ui_test_mount_test_metadata_for_run_returns_partial_on_decode_failure", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1920"}, {"caller_nid": "ui_test_mount_test_metadata_for_run_returns_partial_on_decode_failure", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1921"}, {"caller_nid": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", "callee": "_Bad", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1933"}, {"caller_nid": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", "callee": "_run_staging_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1935"}, {"caller_nid": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1936"}, {"caller_nid": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1948"}, {"caller_nid": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", "callee": "_run_staging_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1951"}, {"caller_nid": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1952"}, {"caller_nid": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1961"}, {"caller_nid": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", "callee": "_run_staging_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1964"}, {"caller_nid": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1965"}, {"caller_nid": "ui_test_mount_test_file_context_action_clipboard_failure_toasts", "callee": "_BadClipboard", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1979"}, {"caller_nid": "ui_test_mount_test_file_context_action_clipboard_failure_toasts", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1980"}, {"caller_nid": "ui_test_mount_test_file_context_action_clipboard_failure_toasts", "callee": "_file_context_action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py", "source_location": "L1981"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/aa3d6cd5a35952e567c97ff3cc510499c69e58f9de54dacd0307ff145af6f5c4.json b/graphify-out/cache/ast/aa3d6cd5a35952e567c97ff3cc510499c69e58f9de54dacd0307ff145af6f5c4.json new file mode 100644 index 0000000..e3f2e41 --- /dev/null +++ b/graphify-out/cache/ast/aa3d6cd5a35952e567c97ff3cc510499c69e58f9de54dacd0307ff145af6f5c4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_10_schema_mismatch_py", "label": "test_flow_10_schema_mismatch.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L1"}, {"id": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", "label": "test_flow_10_schema_mismatch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L17"}, {"id": "e2e_test_flow_10_schema_mismatch_rationale_1", "label": "E2E flow 10: Schema-mismatch / migration prompt. Frontend Spec \u00a76.9 (schema-mis", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_10_schema_mismatch_py", "target": "tests_e2e_page_objects_problems_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_10_schema_mismatch_py", "target": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L17", "weight": 1.0}, {"source": "e2e_test_flow_10_schema_mismatch_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_10_schema_mismatch_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", "callee": "ProblemsPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L18"}, {"caller_nid": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L19"}, {"caller_nid": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L20"}, {"caller_nid": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L22"}, {"caller_nid": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L23"}, {"caller_nid": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L23"}, {"caller_nid": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", "callee": "inner_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L24"}, {"caller_nid": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L24"}, {"caller_nid": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", "callee": "inner_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L27"}, {"caller_nid": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", "callee": "row_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py", "source_location": "L27"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/aba760dffddbe95cb3b1a6fa033b49ca02f337543b89dec20f4c1cf8a9a4a156.json b/graphify-out/cache/ast/aba760dffddbe95cb3b1a6fa033b49ca02f337543b89dec20f4c1cf8a9a4a156.json new file mode 100644 index 0000000..abb67f6 --- /dev/null +++ b/graphify-out/cache/ast/aba760dffddbe95cb3b1a6fa033b49ca02f337543b89dec20f4c1cf8a9a4a156.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "label": "manager.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L1"}, {"id": "logging_manager_get_logger", "label": "get_logger()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L70"}, {"id": "logging_manager_configure_logging", "label": "configure_logging()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L88"}, {"id": "logging_manager_shutdown_logging", "label": "_shutdown_logging()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L155"}, {"id": "logging_manager_teardown_locked", "label": "_teardown_locked()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L170"}, {"id": "logging_manager_resolve_threshold", "label": "_resolve_threshold()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L189"}, {"id": "logging_manager_resolve_rotation", "label": "_resolve_rotation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L204"}, {"id": "logging_manager_resolve_local_root", "label": "_resolve_local_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L214"}, {"id": "logging_manager_build_real_handlers", "label": "_build_real_handlers()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L225"}, {"id": "logging_manager_rationale_1", "label": "Canonical logger factory + configuration. Backend Spec \u00a716.2.1, \u00a716.2.2, \u00a716.2.5", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L1"}, {"id": "logging_manager_rationale_71", "label": "Return a logger for ``name``. The ONLY place in the codebase that may call", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L71"}, {"id": "logging_manager_rationale_89", "label": "Install the \u00a716.2.5 queue-based handler chain. Idempotent: calling this a s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L89"}, {"id": "logging_manager_rationale_156", "label": "Drain the queue, stop the listener thread, and detach the queue handler. Ca", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L156"}, {"id": "logging_manager_rationale_171", "label": "Tear down the active listener. Must be called with ``_state_lock`` held.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L171"}, {"id": "logging_manager_rationale_190", "label": "Return the numeric level threshold for the root logger. ``LoggingConfig`` a", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L190"}, {"id": "logging_manager_rationale_205", "label": "Return ``(central_log_max_mb, central_log_keep)`` from ``config`` or defaults.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L205"}, {"id": "logging_manager_rationale_215", "label": "Return the configured ``local_root`` for the equipment-scoped handler. Phas", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L215"}, {"id": "logging_manager_rationale_232", "label": "Build the listener's downstream handler chain. Order is fixed: equipment-sc", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L232"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "logging_handlers", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "queue", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "threading", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "exlab_wizard_logging_format", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "exlab_wizard_logging_handlers", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "logging_manager_get_logger", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L70", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "logging_manager_configure_logging", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L88", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "logging_manager_shutdown_logging", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L155", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "logging_manager_teardown_locked", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L170", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "logging_manager_resolve_threshold", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L189", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "logging_manager_resolve_rotation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L204", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "logging_manager_resolve_local_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L214", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "target": "logging_manager_build_real_handlers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L225", "weight": 1.0}, {"source": "logging_manager_configure_logging", "target": "logging_manager_teardown_locked", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L116", "weight": 1.0}, {"source": "logging_manager_configure_logging", "target": "logging_manager_resolve_threshold", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L118", "weight": 1.0}, {"source": "logging_manager_configure_logging", "target": "logging_manager_resolve_rotation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L119", "weight": 1.0}, {"source": "logging_manager_configure_logging", "target": "logging_manager_build_real_handlers", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L125", "weight": 1.0}, {"source": "logging_manager_configure_logging", "target": "logging_manager_resolve_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L126", "weight": 1.0}, {"source": "logging_manager_shutdown_logging", "target": "logging_manager_teardown_locked", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L162", "weight": 1.0}, {"source": "logging_manager_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_manager_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L1", "weight": 1.0}, {"source": "logging_manager_rationale_71", "target": "logging_manager_get_logger", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L71", "weight": 1.0}, {"source": "logging_manager_rationale_89", "target": "logging_manager_configure_logging", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L89", "weight": 1.0}, {"source": "logging_manager_rationale_156", "target": "logging_manager_shutdown_logging", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L156", "weight": 1.0}, {"source": "logging_manager_rationale_171", "target": "logging_manager_teardown_locked", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L171", "weight": 1.0}, {"source": "logging_manager_rationale_190", "target": "logging_manager_resolve_threshold", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L190", "weight": 1.0}, {"source": "logging_manager_rationale_205", "target": "logging_manager_resolve_rotation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L205", "weight": 1.0}, {"source": "logging_manager_rationale_215", "target": "logging_manager_resolve_local_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L215", "weight": 1.0}, {"source": "logging_manager_rationale_232", "target": "logging_manager_build_real_handlers", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L232", "weight": 1.0}], "raw_calls": [{"caller_nid": "logging_manager_get_logger", "callee": "getLogger", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L85"}, {"caller_nid": "logging_manager_configure_logging", "callee": "Queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L121"}, {"caller_nid": "logging_manager_configure_logging", "callee": "QueueHandler", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L122"}, {"caller_nid": "logging_manager_configure_logging", "callee": "StructuredTagFormatter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L124"}, {"caller_nid": "logging_manager_configure_logging", "callee": "QueueListener", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L132"}, {"caller_nid": "logging_manager_configure_logging", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L137"}, {"caller_nid": "logging_manager_configure_logging", "callee": "getLogger", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L139"}, {"caller_nid": "logging_manager_configure_logging", "callee": "setLevel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L140"}, {"caller_nid": "logging_manager_configure_logging", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L143"}, {"caller_nid": "logging_manager_configure_logging", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L144"}, {"caller_nid": "logging_manager_configure_logging", "callee": "removeHandler", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L145"}, {"caller_nid": "logging_manager_configure_logging", "callee": "addHandler", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L146"}, {"caller_nid": "logging_manager_teardown_locked", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L177"}, {"caller_nid": "logging_manager_teardown_locked", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L179"}, {"caller_nid": "logging_manager_teardown_locked", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L180"}, {"caller_nid": "logging_manager_teardown_locked", "callee": "getLogger", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L183"}, {"caller_nid": "logging_manager_teardown_locked", "callee": "removeHandler", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L184"}, {"caller_nid": "logging_manager_resolve_threshold", "callee": "getLevelName", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L200"}, {"caller_nid": "logging_manager_resolve_threshold", "callee": "upper", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L200"}, {"caller_nid": "logging_manager_resolve_threshold", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L201"}, {"caller_nid": "logging_manager_build_real_handlers", "callee": "EquipmentScopedFileHandler", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L240"}, {"caller_nid": "logging_manager_build_real_handlers", "callee": "setFormatter", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L241"}, {"caller_nid": "logging_manager_build_real_handlers", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L242"}, {"caller_nid": "logging_manager_build_real_handlers", "callee": "os_central_log_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L244"}, {"caller_nid": "logging_manager_build_real_handlers", "callee": "ensure_central_log_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L245"}, {"caller_nid": "logging_manager_build_real_handlers", "callee": "RotatingFileHandler", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L246"}, {"caller_nid": "logging_manager_build_real_handlers", "callee": "setFormatter", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L252"}, {"caller_nid": "logging_manager_build_real_handlers", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L253"}, {"caller_nid": "logging_manager_build_real_handlers", "callee": "StreamHandler", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L255"}, {"caller_nid": "logging_manager_build_real_handlers", "callee": "setLevel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L256"}, {"caller_nid": "logging_manager_build_real_handlers", "callee": "setFormatter", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L257"}, {"caller_nid": "logging_manager_build_real_handlers", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py", "source_location": "L258"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/ac2a950c7b0dcc0e39a5cabab48403944f0b643b26e47d0a96bfdedaa0db4b3c.json b/graphify-out/cache/ast/ac2a950c7b0dcc0e39a5cabab48403944f0b643b26e47d0a96bfdedaa0db4b3c.json new file mode 100644 index 0000000..9e349d4 --- /dev/null +++ b/graphify-out/cache/ast/ac2a950c7b0dcc0e39a5cabab48403944f0b643b26e47d0a96bfdedaa0db4b3c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_verifier_py", "label": "verifier.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L1"}, {"id": "sync_verifier_verifyresult", "label": "VerifyResult", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L42"}, {"id": "sync_verifier_from_check_result", "label": "from_check_result()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L72"}, {"id": "sync_verifier_verifier", "label": "Verifier", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L93"}, {"id": "sync_verifier_verifier_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L102"}, {"id": "sync_verifier_verifier_verify", "label": ".verify()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L109"}, {"id": "sync_verifier_rationale_1", "label": "SHA-256 verifier wrapper around ``rclone check --download``. Rclone-only NAS sy", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L1"}, {"id": "sync_verifier_rationale_43", "label": "Outcome of one ``rclone check --download`` pass against a remote. ``ok`` is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L43"}, {"id": "sync_verifier_rationale_73", "label": "Translate a successful ``rclone check`` into a :class:`VerifyResult`. `", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L73"}, {"id": "sync_verifier_rationale_94", "label": "Verifier: ``rclone check`` wrapper, no Python SHA pipeline. Constructed wit", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L94"}, {"id": "sync_verifier_rationale_118", "label": "Run ``rclone check --download`` over ``files_from`` and translate. Rais", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L118"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_verifier_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_verifier_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_verifier_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_verifier_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_verifier_py", "target": "exlab_wizard_sync_transports", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_verifier_py", "target": "exlab_wizard_sync_transports_rclone", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_verifier_py", "target": "sync_verifier_verifyresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_verifier_py", "target": "sync_verifier_from_check_result", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_verifier_py", "target": "sync_verifier_verifier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L93", "weight": 1.0}, {"source": "sync_verifier_verifier", "target": "sync_verifier_verifier_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L102", "weight": 1.0}, {"source": "sync_verifier_verifier", "target": "sync_verifier_verifier_verify", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L109", "weight": 1.0}, {"source": "sync_verifier_verifier_verify", "target": "sync_verifier_verifyresult", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L135", "weight": 1.0}, {"source": "sync_verifier_verifier_verify", "target": "sync_verifier_from_check_result", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L140", "weight": 1.0}, {"source": "sync_verifier_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_verifier_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L1", "weight": 1.0}, {"source": "sync_verifier_rationale_43", "target": "sync_verifier_verifyresult", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L43", "weight": 1.0}, {"source": "sync_verifier_rationale_73", "target": "sync_verifier_verifyresult_from_check_result", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L73", "weight": 1.0}, {"source": "sync_verifier_rationale_94", "target": "sync_verifier_verifier", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L94", "weight": 1.0}, {"source": "sync_verifier_rationale_118", "target": "sync_verifier_verifier_verify", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L118", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_verifier_from_check_result", "callee": "cls", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L83"}, {"caller_nid": "sync_verifier_verifier_init", "callee": "_Driver", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L106"}, {"caller_nid": "sync_verifier_verifier_verify", "callee": "check", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L126"}, {"caller_nid": "sync_verifier_verifier_verify", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py", "source_location": "L134"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/acf0944bab5768740b8214277661cd10e30be7f9b93b79f28bd0ba81e348f9d5.json b/graphify-out/cache/ast/acf0944bab5768740b8214277661cd10e30be7f9b93b79f28bd0ba81e348f9d5.json new file mode 100644 index 0000000..b8ea093 --- /dev/null +++ b/graphify-out/cache/ast/acf0944bab5768740b8214277661cd10e30be7f9b93b79f28bd0ba81e348f9d5.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_24_context_menus_py", "label": "test_flow_24_context_menus.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L1"}, {"id": "e2e_test_flow_24_context_menus_goto", "label": "_goto()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L21"}, {"id": "e2e_test_flow_24_context_menus_open_context", "label": "_open_context()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L34"}, {"id": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", "label": "test_flow_24_owned_equipment_context_menu_items_render()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L39"}, {"id": "e2e_test_flow_24_context_menus_test_flow_24_edit_equipment_deep_links_into_settings", "label": "test_flow_24_edit_equipment_deep_links_into_settings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L52"}, {"id": "e2e_test_flow_24_context_menus_test_flow_24_remove_equipment_deep_links_into_settings", "label": "test_flow_24_remove_equipment_deep_links_into_settings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L63"}, {"id": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", "label": "test_flow_24_received_equipment_has_no_context_menu()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L72"}, {"id": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", "label": "test_flow_24_run_context_menu_items_render()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L85"}, {"id": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "label": "test_flow_24_file_list_row_context_menu()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L97"}, {"id": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "label": "test_flow_24_tombstone_row_has_no_open_in_os()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L112"}, {"id": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "label": "test_flow_24_keep_local_badge_and_toggle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L132"}, {"id": "e2e_test_flow_24_context_menus_rationale_1", "label": "E2E flow 24: right-click context menus (Redesign \u00a74.6 / decision 4A / \u00a79.1). Th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L1"}, {"id": "e2e_test_flow_24_context_menus_rationale_35", "label": "Open a NiceGUI ``ui.context_menu`` by right-clicking its anchor.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L35"}, {"id": "e2e_test_flow_24_context_menus_rationale_73", "label": "Decision 3: received-equipment nodes don't expose edit / remove.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L73"}, {"id": "e2e_test_flow_24_context_menus_rationale_98", "label": "Right-clicking a file-list row surfaces Open in OS / Copy path / Keep local.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L98"}, {"id": "e2e_test_flow_24_context_menus_rationale_113", "label": "An \"On NAS\" tombstone row has no local copy, so no Open-in-OS action. Opera", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L113"}, {"id": "e2e_test_flow_24_context_menus_rationale_133", "label": "A keep-local file shows the \"kept local\" badge; the toggle action fires. Op", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L133"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_24_context_menus_py", "target": "e2e_test_flow_24_context_menus_goto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_24_context_menus_py", "target": "e2e_test_flow_24_context_menus_open_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_24_context_menus_py", "target": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_24_context_menus_py", "target": "e2e_test_flow_24_context_menus_test_flow_24_edit_equipment_deep_links_into_settings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_24_context_menus_py", "target": "e2e_test_flow_24_context_menus_test_flow_24_remove_equipment_deep_links_into_settings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_24_context_menus_py", "target": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_24_context_menus_py", "target": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L85", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_24_context_menus_py", "target": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L97", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_24_context_menus_py", "target": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L112", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_24_context_menus_py", "target": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L132", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", "target": "e2e_test_flow_24_context_menus_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L40", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", "target": "e2e_test_flow_24_context_menus_open_context", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L43", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_edit_equipment_deep_links_into_settings", "target": "e2e_test_flow_24_context_menus_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L53", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_edit_equipment_deep_links_into_settings", "target": "e2e_test_flow_24_context_menus_open_context", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L56", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_remove_equipment_deep_links_into_settings", "target": "e2e_test_flow_24_context_menus_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L64", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_remove_equipment_deep_links_into_settings", "target": "e2e_test_flow_24_context_menus_open_context", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L66", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", "target": "e2e_test_flow_24_context_menus_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L74", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", "target": "e2e_test_flow_24_context_menus_open_context", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L77", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", "target": "e2e_test_flow_24_context_menus_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L86", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", "target": "e2e_test_flow_24_context_menus_open_context", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L89", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "target": "e2e_test_flow_24_context_menus_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L99", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "target": "e2e_test_flow_24_context_menus_open_context", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L106", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "target": "e2e_test_flow_24_context_menus_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L119", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "target": "e2e_test_flow_24_context_menus_open_context", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L124", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "target": "e2e_test_flow_24_context_menus_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L141", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "target": "e2e_test_flow_24_context_menus_open_context", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L150", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_24_context_menus_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_rationale_35", "target": "e2e_test_flow_24_context_menus_open_context", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L35", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_rationale_73", "target": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L73", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_rationale_98", "target": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L98", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_rationale_113", "target": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L113", "weight": 1.0}, {"source": "e2e_test_flow_24_context_menus_rationale_133", "target": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L133", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_24_context_menus_goto", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L23"}, {"caller_nid": "e2e_test_flow_24_context_menus_goto", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L25"}, {"caller_nid": "e2e_test_flow_24_context_menus_goto", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L26"}, {"caller_nid": "e2e_test_flow_24_context_menus_goto", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L30"}, {"caller_nid": "e2e_test_flow_24_context_menus_goto", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L31"}, {"caller_nid": "e2e_test_flow_24_context_menus_open_context", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L36"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L41"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L42"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L44"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L44"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L47"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L47"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_edit_equipment_deep_links_into_settings", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L54"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_edit_equipment_deep_links_into_settings", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L55"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_edit_equipment_deep_links_into_settings", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L57"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_edit_equipment_deep_links_into_settings", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L57"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_edit_equipment_deep_links_into_settings", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L58"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_remove_equipment_deep_links_into_settings", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L65"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_remove_equipment_deep_links_into_settings", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L67"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_remove_equipment_deep_links_into_settings", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L67"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_remove_equipment_deep_links_into_settings", "callee": "wait_for_url", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L68"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L75"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L76"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L80"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L80"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", "callee": "is_visible", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L81"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L81"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L87"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L88"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L90"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L90"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L91"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L91"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L94"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L94"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L101"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L101"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L102"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L104"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L105"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L107"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L107"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L108"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L108"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L109"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L109"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L120"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L120"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L121"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L122"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L123"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L125"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L125"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L126"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L126"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L128"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L129"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L129"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L142"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L142"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L143"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L145"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L146"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L147"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L148"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L149"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L151"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L152"}, {"caller_nid": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py", "source_location": "L153"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/ae0b422f23c5468dcdec55282377f8fe6867494a59a63792ff36f27f64070e4b.json b/graphify-out/cache/ast/ae0b422f23c5468dcdec55282377f8fe6867494a59a63792ff36f27f64070e4b.json new file mode 100644 index 0000000..6a525e4 --- /dev/null +++ b/graphify-out/cache/ast/ae0b422f23c5468dcdec55282377f8fe6867494a59a63792ff36f27f64070e4b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_crash_plugin_plugin_py", "label": "plugin.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L1"}, {"id": "crash_plugin_plugin_crashplugin", "label": "CrashPlugin", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L18"}, {"id": "plugin", "label": "Plugin", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "crash_plugin_plugin_crashplugin_can_handle", "label": ".can_handle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L26"}, {"id": "crash_plugin_plugin_crashplugin_transform", "label": ".transform()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L29"}, {"id": "crash_plugin_plugin_rationale_1", "label": "crash_plugin -- exercises subprocess crash containment. The plugin's ``transfor", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L1"}, {"id": "crash_plugin_plugin_rationale_19", "label": "Hard-exit the worker process before any file write.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L19"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_crash_plugin_plugin_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_crash_plugin_plugin_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_crash_plugin_plugin_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_crash_plugin_plugin_py", "target": "exlab_wizard_plugins", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_crash_plugin_plugin_py", "target": "crash_plugin_plugin_crashplugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L18", "weight": 1.0}, {"source": "crash_plugin_plugin_crashplugin", "target": "plugin", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L18", "weight": 1.0}, {"source": "crash_plugin_plugin_crashplugin", "target": "crash_plugin_plugin_crashplugin_can_handle", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L26", "weight": 1.0}, {"source": "crash_plugin_plugin_crashplugin", "target": "crash_plugin_plugin_crashplugin_transform", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L29", "weight": 1.0}, {"source": "crash_plugin_plugin_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_crash_plugin_plugin_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L1", "weight": 1.0}, {"source": "crash_plugin_plugin_rationale_19", "target": "crash_plugin_plugin_crashplugin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L19", "weight": 1.0}], "raw_calls": [{"caller_nid": "crash_plugin_plugin_crashplugin_transform", "callee": "_exit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py", "source_location": "L34"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/aef50e7570a99c2a7dfd6594b6d83b5c13d7327d59f5767f183323bca6f87181.json b/graphify-out/cache/ast/aef50e7570a99c2a7dfd6594b6d83b5c13d7327d59f5767f183323bca6f87181.json new file mode 100644 index 0000000..f30b594 --- /dev/null +++ b/graphify-out/cache/ast/aef50e7570a99c2a7dfd6594b6d83b5c13d7327d59f5767f183323bca6f87181.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_14_notifications_py", "label": "test_flow_14_notifications.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_14_notifications.py", "source_location": "L1"}, {"id": "e2e_test_flow_14_notifications_test_flow_14_notifications", "label": "test_flow_14_notifications()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_14_notifications.py", "source_location": "L26"}, {"id": "e2e_test_flow_14_notifications_rationale_1", "label": "E2E flow 14: Tray notifications + in-app toasts. Frontend Spec \u00a76.13 (notificat", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_14_notifications.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_14_notifications_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_14_notifications.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_14_notifications_py", "target": "e2e_test_flow_14_notifications_test_flow_14_notifications", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_14_notifications.py", "source_location": "L26", "weight": 1.0}, {"source": "e2e_test_flow_14_notifications_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_14_notifications_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_14_notifications.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_14_notifications_test_flow_14_notifications", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_14_notifications.py", "source_location": "L27"}, {"caller_nid": "e2e_test_flow_14_notifications_test_flow_14_notifications", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_14_notifications.py", "source_location": "L28"}, {"caller_nid": "e2e_test_flow_14_notifications_test_flow_14_notifications", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_14_notifications.py", "source_location": "L29"}, {"caller_nid": "e2e_test_flow_14_notifications_test_flow_14_notifications", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_14_notifications.py", "source_location": "L29"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/aefdf2511cfcf156c020094d9b324b0dd1f1a90c5baa24e39adf4c614ec374d3.json b/graphify-out/cache/ast/aefdf2511cfcf156c020094d9b324b0dd1f1a90c5baa24e39adf4c614ec374d3.json new file mode 100644 index 0000000..6ed239d --- /dev/null +++ b/graphify-out/cache/ast/aefdf2511cfcf156c020094d9b324b0dd1f1a90c5baa24e39adf4c614ec374d3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_mock_lims_py", "label": "mock_lims.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L1"}, {"id": "fixtures_mock_lims_mocklimsstate", "label": "MockLimsState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L38"}, {"id": "fixtures_mock_lims_mocklimsstate_issue_session", "label": ".issue_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L53"}, {"id": "fixtures_mock_lims_mocklimsstate_is_valid_session", "label": ".is_valid_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L59"}, {"id": "fixtures_mock_lims_mocklimsstate_invalidate_sessions", "label": ".invalidate_sessions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L62"}, {"id": "fixtures_mock_lims_default_user", "label": "_default_user()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L69"}, {"id": "fixtures_mock_lims_default_project", "label": "_default_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L77"}, {"id": "fixtures_mock_lims_make_mock_lims_app", "label": "make_mock_lims_app()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L90"}, {"id": "fixtures_mock_lims_rationale_1", "label": "In-memory FastAPI fixture LIMS server used by the LIMS-client tests. The fixtur", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L1"}, {"id": "fixtures_mock_lims_rationale_39", "label": "Mutable per-app state. ``valid_email`` / ``valid_password`` are the credent", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L39"}, {"id": "fixtures_mock_lims_rationale_54", "label": "Mint a fresh opaque session token.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L54"}, {"id": "fixtures_mock_lims_rationale_63", "label": "Drop every issued session token. The next protected call sees a 401 and", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L63"}, {"id": "fixtures_mock_lims_rationale_97", "label": "Build a FastAPI app implementing the v1 LIMS read surface. Returns a fresh", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L97"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_mock_lims_py", "target": "secrets", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_mock_lims_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_mock_lims_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_mock_lims_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_mock_lims_py", "target": "fixtures_mock_lims_mocklimsstate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L38", "weight": 1.0}, {"source": "fixtures_mock_lims_mocklimsstate", "target": "fixtures_mock_lims_mocklimsstate_issue_session", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L53", "weight": 1.0}, {"source": "fixtures_mock_lims_mocklimsstate", "target": "fixtures_mock_lims_mocklimsstate_is_valid_session", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L59", "weight": 1.0}, {"source": "fixtures_mock_lims_mocklimsstate", "target": "fixtures_mock_lims_mocklimsstate_invalidate_sessions", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_mock_lims_py", "target": "fixtures_mock_lims_default_user", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_mock_lims_py", "target": "fixtures_mock_lims_default_project", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L77", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_mock_lims_py", "target": "fixtures_mock_lims_make_mock_lims_app", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L90", "weight": 1.0}, {"source": "fixtures_mock_lims_make_mock_lims_app", "target": "fixtures_mock_lims_mocklimsstate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L105", "weight": 1.0}, {"source": "fixtures_mock_lims_make_mock_lims_app", "target": "fixtures_mock_lims_default_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L108", "weight": 1.0}, {"source": "fixtures_mock_lims_make_mock_lims_app", "target": "fixtures_mock_lims_default_user", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L109", "weight": 1.0}, {"source": "fixtures_mock_lims_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_mock_lims_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L1", "weight": 1.0}, {"source": "fixtures_mock_lims_rationale_39", "target": "fixtures_mock_lims_mocklimsstate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L39", "weight": 1.0}, {"source": "fixtures_mock_lims_rationale_54", "target": "fixtures_mock_lims_mocklimsstate_issue_session", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L54", "weight": 1.0}, {"source": "fixtures_mock_lims_rationale_63", "target": "fixtures_mock_lims_mocklimsstate_invalidate_sessions", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L63", "weight": 1.0}, {"source": "fixtures_mock_lims_rationale_97", "target": "fixtures_mock_lims_make_mock_lims_app", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L97", "weight": 1.0}], "raw_calls": [{"caller_nid": "fixtures_mock_lims_mocklimsstate_issue_session", "callee": "token_hex", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L55"}, {"caller_nid": "fixtures_mock_lims_mocklimsstate_issue_session", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L56"}, {"caller_nid": "fixtures_mock_lims_mocklimsstate_invalidate_sessions", "callee": "clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L66"}, {"caller_nid": "fixtures_mock_lims_make_mock_lims_app", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L104"}, {"caller_nid": "fixtures_mock_lims_make_mock_lims_app", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L108"}, {"caller_nid": "fixtures_mock_lims_make_mock_lims_app", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L109"}, {"caller_nid": "fixtures_mock_lims_make_mock_lims_app", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L117"}, {"caller_nid": "fixtures_mock_lims_make_mock_lims_app", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L128"}, {"caller_nid": "fixtures_mock_lims_make_mock_lims_app", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L133"}, {"caller_nid": "fixtures_mock_lims_make_mock_lims_app", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py", "source_location": "L140"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/b03d5573617e6013bc7b746b2565c471a57ef1c07f0526b83e3c16d752513987.json b/graphify-out/cache/ast/b03d5573617e6013bc7b746b2565c471a57ef1c07f0526b83e3c16d752513987.json new file mode 100644 index 0000000..dbc644e --- /dev/null +++ b/graphify-out/cache/ast/b03d5573617e6013bc7b746b2565c471a57ef1c07f0526b83e3c16d752513987.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_12_orchestrator_mode_md", "label": "12_Orchestrator_Mode.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/12_Orchestrator_Mode.md", "source_location": "L1"}, {"id": "design_spec_sections_12_orchestrator_mode_12_orchestrator_mode_multi_equipment_workstations", "label": "12. Orchestrator Mode (Multi-Equipment Workstations)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/12_Orchestrator_Mode.md", "source_location": "L1"}, {"id": "design_spec_sections_12_orchestrator_mode_12_1_what_changes_in_orchestrator_mode", "label": "12.1 What Changes in Orchestrator Mode", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/12_Orchestrator_Mode.md", "source_location": "L7"}, {"id": "design_spec_sections_12_orchestrator_mode_12_2_configuration", "label": "12.2 Configuration", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/12_Orchestrator_Mode.md", "source_location": "L20"}, {"id": "design_spec_sections_12_orchestrator_mode_12_3_concurrent_run_handling", "label": "12.3 Concurrent Run Handling", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/12_Orchestrator_Mode.md", "source_location": "L24"}, {"id": "design_spec_sections_12_orchestrator_mode_12_4_logging_and_db_changes", "label": "12.4 Logging and DB Changes", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/12_Orchestrator_Mode.md", "source_location": "L28"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_12_orchestrator_mode_md", "target": "design_spec_sections_12_orchestrator_mode_12_orchestrator_mode_multi_equipment_workstations", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/12_Orchestrator_Mode.md", "source_location": "L1", "weight": 1.0}, {"source": "design_spec_sections_12_orchestrator_mode_12_orchestrator_mode_multi_equipment_workstations", "target": "design_spec_sections_12_orchestrator_mode_12_1_what_changes_in_orchestrator_mode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/12_Orchestrator_Mode.md", "source_location": "L7", "weight": 1.0}, {"source": "design_spec_sections_12_orchestrator_mode_12_orchestrator_mode_multi_equipment_workstations", "target": "design_spec_sections_12_orchestrator_mode_12_2_configuration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/12_Orchestrator_Mode.md", "source_location": "L20", "weight": 1.0}, {"source": "design_spec_sections_12_orchestrator_mode_12_orchestrator_mode_multi_equipment_workstations", "target": "design_spec_sections_12_orchestrator_mode_12_3_concurrent_run_handling", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/12_Orchestrator_Mode.md", "source_location": "L24", "weight": 1.0}, {"source": "design_spec_sections_12_orchestrator_mode_12_orchestrator_mode_multi_equipment_workstations", "target": "design_spec_sections_12_orchestrator_mode_12_4_logging_and_db_changes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/12_Orchestrator_Mode.md", "source_location": "L28", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/b0cb0fba6211abda3e6aa82d2de8d3dcb0467aa121c45016d8603d25377febef.json b/graphify-out/cache/ast/b0cb0fba6211abda3e6aa82d2de8d3dcb0467aa121c45016d8603d25377febef.json new file mode 100644 index 0000000..577efb9 --- /dev/null +++ b/graphify-out/cache/ast/b0cb0fba6211abda3e6aa82d2de8d3dcb0467aa121c45016d8603d25377febef.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_plugins_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/__init__.py", "source_location": "L1"}, {"id": "plugins_init_rationale_1", "label": "Integration tests for the plugin host. Backend Spec \u00a76.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/__init__.py", "source_location": "L1"}], "edges": [{"source": "plugins_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_integration_plugins_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/b0e73ce3673079cfd7d46ceff4f849eb1b008fe0b9e250bd0aec0bea494e0fe8.json b/graphify-out/cache/ast/b0e73ce3673079cfd7d46ceff4f849eb1b008fe0b9e250bd0aec0bea494e0fe8.json new file mode 100644 index 0000000..e62fd1c --- /dev/null +++ b/graphify-out/cache/ast/b0e73ce3673079cfd7d46ceff4f849eb1b008fe0b9e250bd0aec0bea494e0fe8.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "label": "models.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L1"}, {"id": "config_models_parse_hhmm", "label": "_parse_hhmm()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L73"}, {"id": "config_models_pathsconfig", "label": "PathsConfig", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L97"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "config_models_limsconfig", "label": "LIMSConfig", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L112"}, {"id": "config_models_readmedefaultfield", "label": "READMEDefaultField", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L128"}, {"id": "config_models_id_matches_question_id_grammar", "label": "_id_matches_question_id_grammar()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L143"}, {"id": "config_models_serialize_type", "label": "_serialize_type()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L153"}, {"id": "config_models_choice_requires_non_empty_options", "label": "_choice_requires_non_empty_options()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L158"}, {"id": "config_models_readmeconfig", "label": "READMEConfig", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L169"}, {"id": "config_models_bandwidthwindow", "label": "BandwidthWindow", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L182"}, {"id": "config_models_serialize_days", "label": "_serialize_days()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L192"}, {"id": "config_models_from_must_precede_to", "label": "_from_must_precede_to()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L196"}, {"id": "config_models_bandwidthconfig", "label": "BandwidthConfig", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L205"}, {"id": "config_models_upload_mbps_positive_or_none", "label": "_upload_mbps_positive_or_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L215"}, {"id": "config_models_rclonesftptransport", "label": "RcloneSftpTransport", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L227"}, {"id": "config_models_rclonesmbtransport", "label": "RcloneSmbTransport", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L247"}, {"id": "config_models_transport_requires_keyring_password", "label": "transport_requires_keyring_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L276"}, {"id": "config_models_orchestratorstagingtransport", "label": "OrchestratorStagingTransport", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L288"}, {"id": "config_models_equipmentconfig", "label": "EquipmentConfig", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L307"}, {"id": "config_models_serialize_sync_mode", "label": "_serialize_sync_mode()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L329"}, {"id": "config_models_validate_equipment_id", "label": "_validate_equipment_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L334"}, {"id": "config_models_sync_mode_dictates_transport", "label": "_sync_mode_dictates_transport()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L345"}, {"id": "config_models_nascleanupconfig", "label": "NASCleanupConfig", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L375"}, {"id": "config_models_loggingconfig", "label": "LoggingConfig", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L391"}, {"id": "config_models_normalize_and_validate_level", "label": "_normalize_and_validate_level()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L402"}, {"id": "config_models_operatorsconfig", "label": "OperatorsConfig", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L422"}, {"id": "config_models_default_content_scan_extensions", "label": "_default_content_scan_extensions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L435"}, {"id": "config_models_validatorconfig", "label": "ValidatorConfig", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L454"}, {"id": "config_models_extensions_must_start_with_dot", "label": "_extensions_must_start_with_dot()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L466"}, {"id": "config_models_pluginsconfig", "label": "PluginsConfig", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L479"}, {"id": "config_models_default_ignore_globs", "label": "_default_ignore_globs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L492"}, {"id": "config_models_syncconfig", "label": "SyncConfig", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L496"}, {"id": "config_models_orchestratorstagingcleanup", "label": "OrchestratorStagingCleanup", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L513"}, {"id": "config_models_serialize_mode", "label": "_serialize_mode()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L524"}, {"id": "config_models_orchestratorconfig", "label": "OrchestratorConfig", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L529"}, {"id": "config_models_config", "label": "Config", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L554"}, {"id": "config_models_cross_field_invariants", "label": "_cross_field_invariants()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L572"}, {"id": "config_models_config_with_equipment_appended", "label": "config_with_equipment_appended()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L592"}, {"id": "config_models_rationale_1", "label": "Pydantic models that mirror ``config.yaml``. Backend Spec \u00a79. These models are", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L1"}, {"id": "config_models_rationale_74", "label": "Return ``datetime.time`` for a strict zero-padded ``HH:MM`` string. The wiz", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L74"}, {"id": "config_models_rationale_98", "label": "``paths:`` block. Templates / plugins / equipment-first local root.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L98"}, {"id": "config_models_rationale_113", "label": "``lims:`` block. Read-only LIMS endpoint plus offline catalogue path.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L113"}, {"id": "config_models_rationale_129", "label": "One operator-defined extra README field. Backend Spec \u00a79, \u00a710.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L129"}, {"id": "config_models_rationale_170", "label": "``readme:`` block. Lab-policy fields layered on top of the core set.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L170"}, {"id": "config_models_rationale_183", "label": "One ``{days, from, to}`` window. Backend Spec \u00a79.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L183"}, {"id": "config_models_rationale_206", "label": "``bandwidth:`` sub-block on a transport.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L206"}, {"id": "config_models_rationale_228", "label": "``transport:`` block for SFTP over SSH with password auth. The wizard invok", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L228"}, {"id": "config_models_rationale_248", "label": "``transport:`` block for an SMB share with password auth. The wizard invoke", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L248"}, {"id": "config_models_rationale_277", "label": "Return True when ``transport`` sources its credential from the keyring. Bot", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L277"}, {"id": "config_models_rationale_289", "label": "``orchestrator_staging_transport:`` -- staging hop only. Backend Spec \u00a713.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L289"}, {"id": "config_models_rationale_308", "label": "One ``equipment:`` list entry. Backend Spec \u00a79. ``sync_mode`` (Redesign Spe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L308"}, {"id": "config_models_rationale_376", "label": "``nas_cleanup:`` block. Local-copy retention after NAS verify.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L376"}, {"id": "config_models_rationale_392", "label": "``logging:`` block. Central app-log rotation + level.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L392"}, {"id": "config_models_rationale_423", "label": "``operators:`` block. Optional case-sensitive allowlist.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L423"}, {"id": "config_models_rationale_455", "label": "``validator:`` block. Content-scan tuning. Backend Spec \u00a78.1.1, \u00a711.8.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L455"}, {"id": "config_models_rationale_480", "label": "``plugins:`` block. Master opt-in for network-declaring plugins.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L480"}, {"id": "config_models_rationale_497", "label": "``sync:`` block. NAS sync engine kill-switch + retry / quiescence policy.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L497"}, {"id": "config_models_rationale_514", "label": "``orchestrator.staging_cleanup:`` sub-block. Backend Spec \u00a713.7.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L514"}, {"id": "config_models_rationale_530", "label": "``orchestrator:`` block. Backend Spec \u00a79, \u00a713. GUI/Orchestrator Redesign \u00a73", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L530"}, {"id": "config_models_rationale_555", "label": "Top-level ``config.yaml`` model. Mirrors \u00a79 verbatim.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L555"}, {"id": "config_models_rationale_593", "label": "Return a copy of ``config`` with ``equipment`` appended. The single place t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L593"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_parse_hhmm", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L73", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_pathsconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L97", "weight": 1.0}, {"source": "config_models_pathsconfig", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L97", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_limsconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L112", "weight": 1.0}, {"source": "config_models_limsconfig", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L112", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_readmedefaultfield", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L128", "weight": 1.0}, {"source": "config_models_readmedefaultfield", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L128", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_id_matches_question_id_grammar", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L143", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_serialize_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L153", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_choice_requires_non_empty_options", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L158", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_readmeconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L169", "weight": 1.0}, {"source": "config_models_readmeconfig", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L169", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_bandwidthwindow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L182", "weight": 1.0}, {"source": "config_models_bandwidthwindow", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L182", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_serialize_days", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L192", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_from_must_precede_to", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L196", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_bandwidthconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L205", "weight": 1.0}, {"source": "config_models_bandwidthconfig", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L205", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_upload_mbps_positive_or_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L215", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_rclonesftptransport", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L227", "weight": 1.0}, {"source": "config_models_rclonesftptransport", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L227", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_rclonesmbtransport", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L247", "weight": 1.0}, {"source": "config_models_rclonesmbtransport", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L247", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_transport_requires_keyring_password", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L276", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_orchestratorstagingtransport", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L288", "weight": 1.0}, {"source": "config_models_orchestratorstagingtransport", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L288", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_serialize_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L298", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_equipmentconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L307", "weight": 1.0}, {"source": "config_models_equipmentconfig", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L307", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_serialize_sync_mode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L329", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_validate_equipment_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L334", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_sync_mode_dictates_transport", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L345", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_nascleanupconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L375", "weight": 1.0}, {"source": "config_models_nascleanupconfig", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L375", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_loggingconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L391", "weight": 1.0}, {"source": "config_models_loggingconfig", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L391", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_normalize_and_validate_level", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L402", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_operatorsconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L422", "weight": 1.0}, {"source": "config_models_operatorsconfig", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L422", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_default_content_scan_extensions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L435", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_validatorconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L454", "weight": 1.0}, {"source": "config_models_validatorconfig", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L454", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_extensions_must_start_with_dot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L466", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_pluginsconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L479", "weight": 1.0}, {"source": "config_models_pluginsconfig", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L479", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_default_ignore_globs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L492", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_syncconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L496", "weight": 1.0}, {"source": "config_models_syncconfig", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L496", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_orchestratorstagingcleanup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L513", "weight": 1.0}, {"source": "config_models_orchestratorstagingcleanup", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L513", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_serialize_mode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L524", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_orchestratorconfig", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L529", "weight": 1.0}, {"source": "config_models_orchestratorconfig", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L529", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L554", "weight": 1.0}, {"source": "config_models_config", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L554", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_cross_field_invariants", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L572", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "target": "config_models_config_with_equipment_appended", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L592", "weight": 1.0}, {"source": "config_models_from_must_precede_to", "target": "config_models_parse_hhmm", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L197", "weight": 1.0}, {"source": "config_models_config_with_equipment_appended", "target": "config_models_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L606", "weight": 1.0}, {"source": "config_models_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_config_models_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L1", "weight": 1.0}, {"source": "config_models_rationale_74", "target": "config_models_parse_hhmm", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L74", "weight": 1.0}, {"source": "config_models_rationale_98", "target": "config_models_pathsconfig", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L98", "weight": 1.0}, {"source": "config_models_rationale_113", "target": "config_models_limsconfig", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L113", "weight": 1.0}, {"source": "config_models_rationale_129", "target": "config_models_readmedefaultfield", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L129", "weight": 1.0}, {"source": "config_models_rationale_170", "target": "config_models_readmeconfig", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L170", "weight": 1.0}, {"source": "config_models_rationale_183", "target": "config_models_bandwidthwindow", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L183", "weight": 1.0}, {"source": "config_models_rationale_206", "target": "config_models_bandwidthconfig", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L206", "weight": 1.0}, {"source": "config_models_rationale_228", "target": "config_models_rclonesftptransport", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L228", "weight": 1.0}, {"source": "config_models_rationale_248", "target": "config_models_rclonesmbtransport", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L248", "weight": 1.0}, {"source": "config_models_rationale_277", "target": "config_models_transport_requires_keyring_password", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L277", "weight": 1.0}, {"source": "config_models_rationale_289", "target": "config_models_orchestratorstagingtransport", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L289", "weight": 1.0}, {"source": "config_models_rationale_308", "target": "config_models_equipmentconfig", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L308", "weight": 1.0}, {"source": "config_models_rationale_376", "target": "config_models_nascleanupconfig", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L376", "weight": 1.0}, {"source": "config_models_rationale_392", "target": "config_models_loggingconfig", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L392", "weight": 1.0}, {"source": "config_models_rationale_423", "target": "config_models_operatorsconfig", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L423", "weight": 1.0}, {"source": "config_models_rationale_455", "target": "config_models_validatorconfig", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L455", "weight": 1.0}, {"source": "config_models_rationale_480", "target": "config_models_pluginsconfig", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L480", "weight": 1.0}, {"source": "config_models_rationale_497", "target": "config_models_syncconfig", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L497", "weight": 1.0}, {"source": "config_models_rationale_514", "target": "config_models_orchestratorstagingcleanup", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L514", "weight": 1.0}, {"source": "config_models_rationale_530", "target": "config_models_orchestratorconfig", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L530", "weight": 1.0}, {"source": "config_models_rationale_555", "target": "config_models_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L555", "weight": 1.0}, {"source": "config_models_rationale_593", "target": "config_models_config_with_equipment_appended", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L593", "weight": 1.0}], "raw_calls": [{"caller_nid": "config_models_parse_hhmm", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L82"}, {"caller_nid": "config_models_parse_hhmm", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L82"}, {"caller_nid": "config_models_parse_hhmm", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L84"}, {"caller_nid": "config_models_parse_hhmm", "callee": "fromisoformat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L86"}, {"caller_nid": "config_models_parse_hhmm", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L89"}, {"caller_nid": "config_models_id_matches_question_id_grammar", "callee": "fullmatch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L144"}, {"caller_nid": "config_models_id_matches_question_id_grammar", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L149"}, {"caller_nid": "config_models_choice_requires_non_empty_options", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L163"}, {"caller_nid": "config_models_from_must_precede_to", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L201"}, {"caller_nid": "config_models_upload_mbps_positive_or_none", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L218"}, {"caller_nid": "config_models_transport_requires_keyring_password", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L285"}, {"caller_nid": "config_models_validate_equipment_id", "callee": "canonicalize_equipment_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L340"}, {"caller_nid": "config_models_validate_equipment_id", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L342"}, {"caller_nid": "config_models_validate_equipment_id", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L342"}, {"caller_nid": "config_models_sync_mode_dictates_transport", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L350"}, {"caller_nid": "config_models_sync_mode_dictates_transport", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L356"}, {"caller_nid": "config_models_sync_mode_dictates_transport", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L363"}, {"caller_nid": "config_models_sync_mode_dictates_transport", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L366"}, {"caller_nid": "config_models_normalize_and_validate_level", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L403"}, {"caller_nid": "config_models_normalize_and_validate_level", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L404"}, {"caller_nid": "config_models_normalize_and_validate_level", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L405"}, {"caller_nid": "config_models_normalize_and_validate_level", "callee": "upper", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L406"}, {"caller_nid": "config_models_normalize_and_validate_level", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L406"}, {"caller_nid": "config_models_normalize_and_validate_level", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L410"}, {"caller_nid": "config_models_normalize_and_validate_level", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L413"}, {"caller_nid": "config_models_extensions_must_start_with_dot", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L468"}, {"caller_nid": "config_models_extensions_must_start_with_dot", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L470"}, {"caller_nid": "config_models_cross_field_invariants", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L575"}, {"caller_nid": "config_models_cross_field_invariants", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L579"}, {"caller_nid": "config_models_cross_field_invariants", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L580"}, {"caller_nid": "config_models_config_with_equipment_appended", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L610"}, {"caller_nid": "config_models_config_with_equipment_appended", "callee": "model_copy", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L611"}, {"caller_nid": "config_models_config_with_equipment_appended", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L614"}, {"caller_nid": "config_models_config_with_equipment_appended", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py", "source_location": "L614"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/b13c6caaf0baf565e08171a71c75e3b3a1cefb26aafeff0b71889f9808b50e23.json b/graphify-out/cache/ast/b13c6caaf0baf565e08171a71c75e3b3a1cefb26aafeff0b71889f9808b50e23.json new file mode 100644 index 0000000..49545c5 --- /dev/null +++ b/graphify-out/cache/ast/b13c6caaf0baf565e08171a71c75e3b3a1cefb26aafeff0b71889f9808b50e23.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "label": "test_keyboard.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L1"}, {"id": "ui_test_keyboard_test_all_documented_shortcuts_in_registry", "label": "test_all_documented_shortcuts_in_registry()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L26"}, {"id": "ui_test_keyboard_test_new_project_combo_macos_and_other", "label": "test_new_project_combo_macos_and_other()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L43"}, {"id": "ui_test_keyboard_test_new_run_combo_macos_and_other", "label": "test_new_run_combo_macos_and_other()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L51"}, {"id": "ui_test_keyboard_test_new_test_run_combo_macos_and_other", "label": "test_new_test_run_combo_macos_and_other()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L59"}, {"id": "ui_test_keyboard_test_open_settings_uses_comma_key", "label": "test_open_settings_uses_comma_key()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L67"}, {"id": "ui_test_keyboard_test_refresh_tree_combo", "label": "test_refresh_tree_combo()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L75"}, {"id": "ui_test_keyboard_test_open_problems_combo", "label": "test_open_problems_combo()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L83"}, {"id": "ui_test_keyboard_test_focus_tree_search_is_unmodified_slash", "label": "test_focus_tree_search_is_unmodified_slash()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L91"}, {"id": "ui_test_keyboard_test_wizard_next_uses_enter_with_modifier", "label": "test_wizard_next_uses_enter_with_modifier()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L99"}, {"id": "ui_test_keyboard_test_wizard_cancel_uses_escape", "label": "test_wizard_cancel_uses_escape()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L107"}, {"id": "ui_test_keyboard_test_combo_for_current_os_returns_other_on_linux", "label": "test_combo_for_current_os_returns_other_on_linux()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L115"}, {"id": "ui_test_keyboard_test_combo_for_current_os_returns_macos_on_darwin", "label": "test_combo_for_current_os_returns_macos_on_darwin()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L123"}, {"id": "ui_test_keyboard_test_resolve_finds_known_combo_on_linux", "label": "test_resolve_finds_known_combo_on_linux()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L131"}, {"id": "ui_test_keyboard_test_resolve_returns_none_for_unknown_combo", "label": "test_resolve_returns_none_for_unknown_combo()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L139"}, {"id": "ui_test_keyboard_test_get_binding_raises_for_unknown", "label": "test_get_binding_raises_for_unknown()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L145"}, {"id": "ui_test_keyboard_test_registry_register_and_dispatch", "label": "test_registry_register_and_dispatch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L155"}, {"id": "ui_test_keyboard_test_registry_dispatch_returns_false_when_unbound", "label": "test_registry_dispatch_returns_false_when_unbound()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L165"}, {"id": "ui_test_keyboard_test_registry_double_register_raises", "label": "test_registry_double_register_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L172"}, {"id": "ui_test_keyboard_test_keycombo_matches_returns_true_for_same_modifiers", "label": "test_keycombo_matches_returns_true_for_same_modifiers()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L181"}, {"id": "ui_test_keyboard_test_descriptions_match_spec", "label": "test_descriptions_match_spec()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L189"}, {"id": "ui_test_keyboard_rationale_1", "label": "Unit tests for :mod:`exlab_wizard.ui.keyboard`. The registry is intentionally s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L1"}, {"id": "ui_test_keyboard_rationale_27", "label": "Every Frontend \u00a73.7 row has a ShortcutBinding.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L27"}, {"id": "ui_test_keyboard_rationale_44", "label": "``Cmd+N`` on macOS, ``Ctrl+N`` elsewhere.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L44"}, {"id": "ui_test_keyboard_rationale_52", "label": "``Cmd+Shift+N`` / ``Ctrl+Shift+N``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L52"}, {"id": "ui_test_keyboard_rationale_60", "label": "``Cmd+Shift+T`` / ``Ctrl+Shift+T``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L60"}, {"id": "ui_test_keyboard_rationale_68", "label": "``Cmd+,`` / ``Ctrl+,``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L68"}, {"id": "ui_test_keyboard_rationale_76", "label": "``Cmd+R`` / ``Ctrl+R``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L76"}, {"id": "ui_test_keyboard_rationale_84", "label": "``Cmd+Shift+P`` / ``Ctrl+Shift+P``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L84"}, {"id": "ui_test_keyboard_rationale_92", "label": "``/`` focuses the tree search box.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L92"}, {"id": "ui_test_keyboard_rationale_100", "label": "``Cmd+Enter`` / ``Ctrl+Enter`` advances the wizard.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L100"}, {"id": "ui_test_keyboard_rationale_108", "label": "Esc cancels the wizard.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L108"}, {"id": "ui_test_keyboard_rationale_116", "label": "On non-darwin we return ``other``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L116"}, {"id": "ui_test_keyboard_rationale_124", "label": "On darwin we return ``macos``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L124"}, {"id": "ui_test_keyboard_rationale_132", "label": "Resolver returns the right shortcut id on non-darwin.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L132"}, {"id": "ui_test_keyboard_rationale_140", "label": "Unknown combos resolve to ``None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L140"}, {"id": "ui_test_keyboard_rationale_146", "label": "``get_binding`` raises ``KeyError`` for an unknown shortcut id.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L146"}, {"id": "ui_test_keyboard_rationale_156", "label": "``ShortcutRegistry`` dispatches the registered handler exactly once.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L156"}, {"id": "ui_test_keyboard_rationale_166", "label": "Dispatching an unbound shortcut returns ``False`` and runs no handler.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L166"}, {"id": "ui_test_keyboard_rationale_173", "label": "Two handlers per shortcut is forbidden.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L173"}, {"id": "ui_test_keyboard_rationale_182", "label": "``KeyCombo.matches`` is exact-match across modifiers and key.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L182"}, {"id": "ui_test_keyboard_rationale_190", "label": "Each binding has a non-empty description (Frontend \u00a73.7).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L190"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "unittest_mock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "exlab_wizard_ui_keyboard", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_all_documented_shortcuts_in_registry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_new_project_combo_macos_and_other", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_new_run_combo_macos_and_other", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_new_test_run_combo_macos_and_other", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_open_settings_uses_comma_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_refresh_tree_combo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L75", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_open_problems_combo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_focus_tree_search_is_unmodified_slash", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L91", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_wizard_next_uses_enter_with_modifier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L99", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_wizard_cancel_uses_escape", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L107", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_combo_for_current_os_returns_other_on_linux", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L115", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_combo_for_current_os_returns_macos_on_darwin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L123", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_resolve_finds_known_combo_on_linux", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L131", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_resolve_returns_none_for_unknown_combo", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L139", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_get_binding_raises_for_unknown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L145", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_registry_register_and_dispatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L155", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_registry_dispatch_returns_false_when_unbound", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L165", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_registry_double_register_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L172", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_keycombo_matches_returns_true_for_same_modifiers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L181", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "target": "ui_test_keyboard_test_descriptions_match_spec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L189", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_keyboard_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_27", "target": "ui_test_keyboard_test_all_documented_shortcuts_in_registry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L27", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_44", "target": "ui_test_keyboard_test_new_project_combo_macos_and_other", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L44", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_52", "target": "ui_test_keyboard_test_new_run_combo_macos_and_other", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L52", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_60", "target": "ui_test_keyboard_test_new_test_run_combo_macos_and_other", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L60", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_68", "target": "ui_test_keyboard_test_open_settings_uses_comma_key", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L68", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_76", "target": "ui_test_keyboard_test_refresh_tree_combo", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L76", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_84", "target": "ui_test_keyboard_test_open_problems_combo", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L84", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_92", "target": "ui_test_keyboard_test_focus_tree_search_is_unmodified_slash", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L92", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_100", "target": "ui_test_keyboard_test_wizard_next_uses_enter_with_modifier", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L100", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_108", "target": "ui_test_keyboard_test_wizard_cancel_uses_escape", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L108", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_116", "target": "ui_test_keyboard_test_combo_for_current_os_returns_other_on_linux", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L116", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_124", "target": "ui_test_keyboard_test_combo_for_current_os_returns_macos_on_darwin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L124", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_132", "target": "ui_test_keyboard_test_resolve_finds_known_combo_on_linux", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L132", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_140", "target": "ui_test_keyboard_test_resolve_returns_none_for_unknown_combo", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L140", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_146", "target": "ui_test_keyboard_test_get_binding_raises_for_unknown", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L146", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_156", "target": "ui_test_keyboard_test_registry_register_and_dispatch", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L156", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_166", "target": "ui_test_keyboard_test_registry_dispatch_returns_false_when_unbound", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L166", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_173", "target": "ui_test_keyboard_test_registry_double_register_raises", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L173", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_182", "target": "ui_test_keyboard_test_keycombo_matches_returns_true_for_same_modifiers", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L182", "weight": 1.0}, {"source": "ui_test_keyboard_rationale_190", "target": "ui_test_keyboard_test_descriptions_match_spec", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L190", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_keyboard_test_all_documented_shortcuts_in_registry", "callee": "list_bindings", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L29"}, {"caller_nid": "ui_test_keyboard_test_new_project_combo_macos_and_other", "callee": "get_binding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L46"}, {"caller_nid": "ui_test_keyboard_test_new_project_combo_macos_and_other", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L47"}, {"caller_nid": "ui_test_keyboard_test_new_project_combo_macos_and_other", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L48"}, {"caller_nid": "ui_test_keyboard_test_new_run_combo_macos_and_other", "callee": "get_binding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L54"}, {"caller_nid": "ui_test_keyboard_test_new_run_combo_macos_and_other", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L55"}, {"caller_nid": "ui_test_keyboard_test_new_run_combo_macos_and_other", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L56"}, {"caller_nid": "ui_test_keyboard_test_new_test_run_combo_macos_and_other", "callee": "get_binding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L62"}, {"caller_nid": "ui_test_keyboard_test_new_test_run_combo_macos_and_other", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L63"}, {"caller_nid": "ui_test_keyboard_test_new_test_run_combo_macos_and_other", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L64"}, {"caller_nid": "ui_test_keyboard_test_open_settings_uses_comma_key", "callee": "get_binding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L70"}, {"caller_nid": "ui_test_keyboard_test_refresh_tree_combo", "callee": "get_binding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L78"}, {"caller_nid": "ui_test_keyboard_test_refresh_tree_combo", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L79"}, {"caller_nid": "ui_test_keyboard_test_refresh_tree_combo", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L80"}, {"caller_nid": "ui_test_keyboard_test_open_problems_combo", "callee": "get_binding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L86"}, {"caller_nid": "ui_test_keyboard_test_open_problems_combo", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L87"}, {"caller_nid": "ui_test_keyboard_test_open_problems_combo", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L88"}, {"caller_nid": "ui_test_keyboard_test_focus_tree_search_is_unmodified_slash", "callee": "get_binding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L94"}, {"caller_nid": "ui_test_keyboard_test_focus_tree_search_is_unmodified_slash", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L95"}, {"caller_nid": "ui_test_keyboard_test_focus_tree_search_is_unmodified_slash", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L96"}, {"caller_nid": "ui_test_keyboard_test_wizard_next_uses_enter_with_modifier", "callee": "get_binding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L102"}, {"caller_nid": "ui_test_keyboard_test_wizard_next_uses_enter_with_modifier", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L103"}, {"caller_nid": "ui_test_keyboard_test_wizard_next_uses_enter_with_modifier", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L104"}, {"caller_nid": "ui_test_keyboard_test_wizard_cancel_uses_escape", "callee": "get_binding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L110"}, {"caller_nid": "ui_test_keyboard_test_wizard_cancel_uses_escape", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L111"}, {"caller_nid": "ui_test_keyboard_test_wizard_cancel_uses_escape", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L112"}, {"caller_nid": "ui_test_keyboard_test_combo_for_current_os_returns_other_on_linux", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L118"}, {"caller_nid": "ui_test_keyboard_test_combo_for_current_os_returns_other_on_linux", "callee": "combo_for_current_os", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L119"}, {"caller_nid": "ui_test_keyboard_test_combo_for_current_os_returns_other_on_linux", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L120"}, {"caller_nid": "ui_test_keyboard_test_combo_for_current_os_returns_macos_on_darwin", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L126"}, {"caller_nid": "ui_test_keyboard_test_combo_for_current_os_returns_macos_on_darwin", "callee": "combo_for_current_os", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L127"}, {"caller_nid": "ui_test_keyboard_test_combo_for_current_os_returns_macos_on_darwin", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L128"}, {"caller_nid": "ui_test_keyboard_test_resolve_finds_known_combo_on_linux", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L134"}, {"caller_nid": "ui_test_keyboard_test_resolve_finds_known_combo_on_linux", "callee": "resolve", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L135"}, {"caller_nid": "ui_test_keyboard_test_resolve_returns_none_for_unknown_combo", "callee": "resolve", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L142"}, {"caller_nid": "ui_test_keyboard_test_get_binding_raises_for_unknown", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L148"}, {"caller_nid": "ui_test_keyboard_test_get_binding_raises_for_unknown", "callee": "get_binding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L152"}, {"caller_nid": "ui_test_keyboard_test_registry_register_and_dispatch", "callee": "ShortcutRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L158"}, {"caller_nid": "ui_test_keyboard_test_registry_register_and_dispatch", "callee": "register", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L160"}, {"caller_nid": "ui_test_keyboard_test_registry_register_and_dispatch", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L160"}, {"caller_nid": "ui_test_keyboard_test_registry_register_and_dispatch", "callee": "dispatch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L161"}, {"caller_nid": "ui_test_keyboard_test_registry_dispatch_returns_false_when_unbound", "callee": "ShortcutRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L168"}, {"caller_nid": "ui_test_keyboard_test_registry_dispatch_returns_false_when_unbound", "callee": "dispatch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L169"}, {"caller_nid": "ui_test_keyboard_test_registry_double_register_raises", "callee": "ShortcutRegistry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L175"}, {"caller_nid": "ui_test_keyboard_test_registry_double_register_raises", "callee": "register", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L176"}, {"caller_nid": "ui_test_keyboard_test_registry_double_register_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L177"}, {"caller_nid": "ui_test_keyboard_test_registry_double_register_raises", "callee": "register", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L178"}, {"caller_nid": "ui_test_keyboard_test_keycombo_matches_returns_true_for_same_modifiers", "callee": "KeyCombo", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L184"}, {"caller_nid": "ui_test_keyboard_test_keycombo_matches_returns_true_for_same_modifiers", "callee": "matches", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L185"}, {"caller_nid": "ui_test_keyboard_test_keycombo_matches_returns_true_for_same_modifiers", "callee": "matches", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L186"}, {"caller_nid": "ui_test_keyboard_test_descriptions_match_spec", "callee": "list_bindings", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py", "source_location": "L192"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/b258c288b2b62737fa6b67b063886aaa8194006d629550722b0ff2575bb156b6.json b/graphify-out/cache/ast/b258c288b2b62737fa6b67b063886aaa8194006d629550722b0ff2575bb156b6.json new file mode 100644 index 0000000..71560e8 --- /dev/null +++ b/graphify-out/cache/ast/b258c288b2b62737fa6b67b063886aaa8194006d629550722b0ff2575bb156b6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "label": "test_orchestrator_lifecycle.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L1"}, {"id": "integration_test_orchestrator_lifecycle_handle", "label": "_Handle", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L41"}, {"id": "integration_test_orchestrator_lifecycle_stubjobrow", "label": "_StubJobRow", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L48"}, {"id": "integration_test_orchestrator_lifecycle_stubnassync", "label": "_StubNasSync", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L53"}, {"id": "integration_test_orchestrator_lifecycle_stubnassync_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L56"}, {"id": "integration_test_orchestrator_lifecycle_stubnassync_enqueue", "label": ".enqueue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L60"}, {"id": "integration_test_orchestrator_lifecycle_stubnassync_status", "label": ".status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L64"}, {"id": "integration_test_orchestrator_lifecycle_stubnassync_list_all", "label": ".list_all()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L67"}, {"id": "integration_test_orchestrator_lifecycle_enqueued_paths", "label": "enqueued_paths()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L73"}, {"id": "integration_test_orchestrator_lifecycle_make_config", "label": "_make_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L77"}, {"id": "integration_test_orchestrator_lifecycle_stage_run", "label": "_stage_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L104"}, {"id": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", "label": "test_poller_enqueues_run_after_settle_window()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L116"}, {"id": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", "label": "test_poller_skips_file_already_synced_at_current_signature()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L134"}, {"id": "integration_test_orchestrator_lifecycle_mark_run_synced", "label": "_mark_run_synced()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L161"}, {"id": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "label": "test_staging_endpoint_surfaces_run_with_rollup_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L170"}, {"id": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "label": "test_clear_endpoint_deletes_synced_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L187"}, {"id": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", "label": "test_clear_endpoint_rejects_unsynced_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L210"}, {"id": "integration_test_orchestrator_lifecycle_rationale_1", "label": "Integration test for the orchestrator quiescence-sync lifecycle. Backend Spec \u00a7", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L1"}, {"id": "integration_test_orchestrator_lifecycle_rationale_54", "label": "In-memory sync client that records per-file enqueue + serves status/list_all.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L54"}, {"id": "integration_test_orchestrator_lifecycle_rationale_117", "label": "A staged run is enqueued only once its files settle for the window.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L117"}, {"id": "integration_test_orchestrator_lifecycle_rationale_135", "label": "A quiet file recorded in sync_state.json at its current signature is not re-", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L135"}, {"id": "integration_test_orchestrator_lifecycle_rationale_162", "label": "Write a fully-verified ``sync_state.json`` so the run rolls up to ``synced``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L162"}, {"id": "integration_test_orchestrator_lifecycle_rationale_171", "label": "``GET /staging`` reports the run with its ``sync_state.json`` rollup.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L171"}, {"id": "integration_test_orchestrator_lifecycle_rationale_188", "label": "``POST /staging/.../clear`` deletes a fully-``synced`` run's data files, ret", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L188"}, {"id": "integration_test_orchestrator_lifecycle_rationale_211", "label": "A run that is not fully ``synced`` cannot be cleared.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L211"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "fastapi_testclient", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "exlab_wizard_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "exlab_wizard_cache_sync_state_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "exlab_wizard_orchestrator_quiescence_poller", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "integration_test_orchestrator_lifecycle_handle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "integration_test_orchestrator_lifecycle_stubjobrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "integration_test_orchestrator_lifecycle_stubnassync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L53", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_stubnassync", "target": "integration_test_orchestrator_lifecycle_stubnassync_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L56", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_stubnassync", "target": "integration_test_orchestrator_lifecycle_stubnassync_enqueue", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L60", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_stubnassync", "target": "integration_test_orchestrator_lifecycle_stubnassync_status", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L64", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_stubnassync", "target": "integration_test_orchestrator_lifecycle_stubnassync_list_all", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "integration_test_orchestrator_lifecycle_enqueued_paths", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L73", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "integration_test_orchestrator_lifecycle_make_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L77", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "integration_test_orchestrator_lifecycle_stage_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L104", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L116", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L134", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "integration_test_orchestrator_lifecycle_mark_run_synced", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L161", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L170", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L187", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "target": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L210", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_stubnassync_enqueue", "target": "integration_test_orchestrator_lifecycle_handle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L62", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_stubnassync_list_all", "target": "integration_test_orchestrator_lifecycle_stubjobrow", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L69", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", "target": "integration_test_orchestrator_lifecycle_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L118", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", "target": "integration_test_orchestrator_lifecycle_stage_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L119", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", "target": "integration_test_orchestrator_lifecycle_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L120", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", "target": "integration_test_orchestrator_lifecycle_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L137", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", "target": "integration_test_orchestrator_lifecycle_stage_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L138", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", "target": "integration_test_orchestrator_lifecycle_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L148", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "target": "integration_test_orchestrator_lifecycle_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L172", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "target": "integration_test_orchestrator_lifecycle_stage_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L173", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "target": "integration_test_orchestrator_lifecycle_mark_run_synced", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L175", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "target": "integration_test_orchestrator_lifecycle_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L176", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "target": "integration_test_orchestrator_lifecycle_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L192", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "target": "integration_test_orchestrator_lifecycle_stage_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L193", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "target": "integration_test_orchestrator_lifecycle_mark_run_synced", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L195", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "target": "integration_test_orchestrator_lifecycle_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L196", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", "target": "integration_test_orchestrator_lifecycle_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L212", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", "target": "integration_test_orchestrator_lifecycle_stage_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L213", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", "target": "integration_test_orchestrator_lifecycle_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L215", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_rationale_1", "target": "users_alex_projects_exlabwizard_tests_integration_test_orchestrator_lifecycle_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L1", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_rationale_54", "target": "integration_test_orchestrator_lifecycle_stubnassync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L54", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_rationale_117", "target": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L117", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_rationale_135", "target": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L135", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_rationale_162", "target": "integration_test_orchestrator_lifecycle_mark_run_synced", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L162", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_rationale_171", "target": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L171", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_rationale_188", "target": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L188", "weight": 1.0}, {"source": "integration_test_orchestrator_lifecycle_rationale_211", "target": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L211", "weight": 1.0}], "raw_calls": [{"caller_nid": "integration_test_orchestrator_lifecycle_stubnassync_enqueue", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L61"}, {"caller_nid": "integration_test_orchestrator_lifecycle_stubnassync_enqueue", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L61"}, {"caller_nid": "integration_test_orchestrator_lifecycle_stubnassync_enqueue", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L62"}, {"caller_nid": "integration_test_orchestrator_lifecycle_stubnassync_status", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L65"}, {"caller_nid": "integration_test_orchestrator_lifecycle_stubnassync_status", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L65"}, {"caller_nid": "integration_test_orchestrator_lifecycle_stubnassync_list_all", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L69"}, {"caller_nid": "integration_test_orchestrator_lifecycle_make_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L78"}, {"caller_nid": "integration_test_orchestrator_lifecycle_make_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L79"}, {"caller_nid": "integration_test_orchestrator_lifecycle_make_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L79"}, {"caller_nid": "integration_test_orchestrator_lifecycle_make_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L81"}, {"caller_nid": "integration_test_orchestrator_lifecycle_make_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L84"}, {"caller_nid": "integration_test_orchestrator_lifecycle_make_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L86"}, {"caller_nid": "integration_test_orchestrator_lifecycle_make_config", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L91"}, {"caller_nid": "integration_test_orchestrator_lifecycle_make_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L95"}, {"caller_nid": "integration_test_orchestrator_lifecycle_make_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L97"}, {"caller_nid": "integration_test_orchestrator_lifecycle_make_config", "callee": "OrchestratorStagingCleanup", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L98"}, {"caller_nid": "integration_test_orchestrator_lifecycle_make_config", "callee": "SyncConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L100"}, {"caller_nid": "integration_test_orchestrator_lifecycle_stage_run", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L106"}, {"caller_nid": "integration_test_orchestrator_lifecycle_stage_run", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L107"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", "callee": "QuiescenceSyncPoller", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L121"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L122"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L126"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L128"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L130"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L139"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L141"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L142"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", "callee": "QuiescenceSyncPoller", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L149"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L151"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", "callee": "poll_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L152"}, {"caller_nid": "integration_test_orchestrator_lifecycle_mark_run_synced", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L163"}, {"caller_nid": "integration_test_orchestrator_lifecycle_mark_run_synced", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L164"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L174"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L176"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L177"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L178"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L179"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L181"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L182"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L183"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L194"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L196"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L197"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L198"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L199"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L201"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L204"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L205"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L206"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L206"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L214"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L215"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L217"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L218"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L219"}, {"caller_nid": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py", "source_location": "L221"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/b262f447c830df3cf9cdbaacd6fcc672b6fd59bbe01e7c4fc7074da80b136117.json b/graphify-out/cache/ast/b262f447c830df3cf9cdbaacd6fcc672b6fd59bbe01e7c4fc7074da80b136117.json new file mode 100644 index 0000000..e13dd41 --- /dev/null +++ b/graphify-out/cache/ast/b262f447c830df3cf9cdbaacd6fcc672b6fd59bbe01e7c4fc7074da80b136117.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_io_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/b2920a22263f7b824861bbc323b86654a84746a4f4bf3da4a39b8d6dda18f083.json b/graphify-out/cache/ast/b2920a22263f7b824861bbc323b86654a84746a4f4bf3da4a39b8d6dda18f083.json new file mode 100644 index 0000000..b45ebfc --- /dev/null +++ b/graphify-out/cache/ast/b2920a22263f7b824861bbc323b86654a84746a4f4bf3da4a39b8d6dda18f083.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_tree_context_menu_py", "label": "tree_context_menu.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L1"}, {"id": "components_tree_context_menu_render_equipment_context_menu", "label": "render_equipment_context_menu()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L50"}, {"id": "components_tree_context_menu_render_run_context_menu", "label": "render_run_context_menu()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L79"}, {"id": "components_tree_context_menu_rationale_1", "label": "Tree context-menu renderers. GUI/Orchestrator Redesign \u00a74.6 / decision 4A / \u00a79.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L1"}, {"id": "components_tree_context_menu_rationale_55", "label": "Render the right-click menu for an owned-equipment tree node. The callback", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L55"}, {"id": "components_tree_context_menu_rationale_84", "label": "Render the right-click menu for a run tree node. The callback receives ``(r", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L84"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_tree_context_menu_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_tree_context_menu_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_tree_context_menu_py", "target": "components_tree_context_menu_render_equipment_context_menu", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_tree_context_menu_py", "target": "components_tree_context_menu_render_run_context_menu", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L79", "weight": 1.0}, {"source": "components_tree_context_menu_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_tree_context_menu_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L1", "weight": 1.0}, {"source": "components_tree_context_menu_rationale_55", "target": "components_tree_context_menu_render_equipment_context_menu", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L55", "weight": 1.0}, {"source": "components_tree_context_menu_rationale_84", "target": "components_tree_context_menu_render_run_context_menu", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L84", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_tree_context_menu_render_equipment_context_menu", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L65"}, {"caller_nid": "components_tree_context_menu_render_equipment_context_menu", "callee": "context_menu", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L65"}, {"caller_nid": "components_tree_context_menu_render_equipment_context_menu", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L68"}, {"caller_nid": "components_tree_context_menu_render_equipment_context_menu", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L68"}, {"caller_nid": "components_tree_context_menu_render_equipment_context_menu", "callee": "menu_item", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L68"}, {"caller_nid": "components_tree_context_menu_render_equipment_context_menu", "callee": "on_action", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L70"}, {"caller_nid": "components_tree_context_menu_render_equipment_context_menu", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L72"}, {"caller_nid": "components_tree_context_menu_render_equipment_context_menu", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L72"}, {"caller_nid": "components_tree_context_menu_render_equipment_context_menu", "callee": "menu_item", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L72"}, {"caller_nid": "components_tree_context_menu_render_equipment_context_menu", "callee": "on_action", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L74"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L95"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "context_menu", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L95"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L98"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L98"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "menu_item", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L98"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "on_action", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L100"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L102"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L102"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "menu_item", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L102"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "on_action", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L104"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L106"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L106"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "menu_item", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L106"}, {"caller_nid": "components_tree_context_menu_render_run_context_menu", "callee": "on_action", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py", "source_location": "L108"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/b441ec664d873619eb52bbcc81abd9142f8eeda14f97117d15722fa24a4b4318.json b/graphify-out/cache/ast/b441ec664d873619eb52bbcc81abd9142f8eeda14f97117d15722fa24a4b4318.json new file mode 100644 index 0000000..8409f24 --- /dev/null +++ b/graphify-out/cache/ast/b441ec664d873619eb52bbcc81abd9142f8eeda14f97117d15722fa24a4b4318.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "label": "test_notifications.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L1"}, {"id": "ui_test_notifications_reset_state", "label": "_reset_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L25"}, {"id": "ui_test_notifications_test_notify_success_uses_positive_type", "label": "test_notify_success_uses_positive_type()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L33"}, {"id": "ui_test_notifications_test_notify_info_default_timeout", "label": "test_notify_info_default_timeout()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L45"}, {"id": "ui_test_notifications_test_notify_warning_extended_timeout", "label": "test_notify_warning_extended_timeout()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L54"}, {"id": "ui_test_notifications_test_notify_error_extended_timeout", "label": "test_notify_error_extended_timeout()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L63"}, {"id": "ui_test_notifications_test_notify_with_action_extends_to_12_seconds", "label": "test_notify_with_action_extends_to_12_seconds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L72"}, {"id": "ui_test_notifications_test_show_banner_rejects_unknown_id", "label": "test_show_banner_rejects_unknown_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L85"}, {"id": "ui_test_notifications_test_show_banner_records_active", "label": "test_show_banner_records_active()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L97"}, {"id": "ui_test_notifications_test_clear_banner_removes_record", "label": "test_clear_banner_removes_record()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L111"}, {"id": "ui_test_notifications_test_banner_overflow_count_when_exceeding_two", "label": "test_banner_overflow_count_when_exceeding_two()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L124"}, {"id": "ui_test_notifications_test_field_errors_round_trip", "label": "test_field_errors_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L148"}, {"id": "ui_test_notifications_test_form_errors_round_trip", "label": "test_form_errors_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L157"}, {"id": "ui_test_notifications_test_banner_id_closed_set_matches_spec", "label": "test_banner_id_closed_set_matches_spec()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L166"}, {"id": "ui_test_notifications_test_severity_closed_set_matches_spec", "label": "test_severity_closed_set_matches_spec()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L178"}, {"id": "ui_test_notifications_test_container_id_closed_set_matches_spec", "label": "test_container_id_closed_set_matches_spec()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L189"}, {"id": "ui_test_notifications_test_action_spec_is_frozen", "label": "test_action_spec_is_frozen()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L199"}, {"id": "ui_test_notifications_rationale_1", "label": "Unit tests for :mod:`exlab_wizard.ui.notifications`. The helpers all delegate t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L1"}, {"id": "ui_test_notifications_rationale_26", "label": "Clear in-memory banner / inline state between tests.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L26"}, {"id": "ui_test_notifications_rationale_34", "label": "``notify_success`` calls ``ui.notify(... type=\"positive\")``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L34"}, {"id": "ui_test_notifications_rationale_46", "label": "``notify_info`` uses the 4 s default.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L46"}, {"id": "ui_test_notifications_rationale_55", "label": "``notify_warning`` uses the 8 s default.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L55"}, {"id": "ui_test_notifications_rationale_64", "label": "``notify_error`` uses the 8 s default.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L64"}, {"id": "ui_test_notifications_rationale_73", "label": "When an action is attached, the timeout extends to 12 s.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L73"}, {"id": "ui_test_notifications_rationale_86", "label": "An out-of-set banner id raises ``ValueError``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L86"}, {"id": "ui_test_notifications_rationale_98", "label": "``show_banner`` records the banner under the right container.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L98"}, {"id": "ui_test_notifications_rationale_112", "label": "``clear_banner`` removes the active record.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L112"}, {"id": "ui_test_notifications_rationale_125", "label": "Frontend \u00a72.2.3: max 2 banners; 3rd collapses into a count.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L125"}, {"id": "ui_test_notifications_rationale_149", "label": "Inline field errors round-trip through register / get / clear.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L149"}, {"id": "ui_test_notifications_rationale_158", "label": "Inline form errors round-trip through register / get / clear.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L158"}, {"id": "ui_test_notifications_rationale_167", "label": "Frontend \u00a72.2.3: exactly five canonical banner ids.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L167"}, {"id": "ui_test_notifications_rationale_179", "label": "Severity matches DESIGN.md alerts table.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L179"}, {"id": "ui_test_notifications_rationale_190", "label": "ContainerId enumerates the three banner placement scopes.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L190"}, {"id": "ui_test_notifications_rationale_200", "label": "``ActionSpec`` is immutable so callbacks can't be swapped post-hoc.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L200"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "unittest_mock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "exlab_wizard_ui", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "exlab_wizard_ui_notifications", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_reset_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_notify_success_uses_positive_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_notify_info_default_timeout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_notify_warning_extended_timeout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L54", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_notify_error_extended_timeout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_notify_with_action_extends_to_12_seconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_show_banner_rejects_unknown_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L85", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_show_banner_records_active", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L97", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_clear_banner_removes_record", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L111", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_banner_overflow_count_when_exceeding_two", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L124", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_field_errors_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L148", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_form_errors_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L157", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_banner_id_closed_set_matches_spec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L166", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_severity_closed_set_matches_spec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L178", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_container_id_closed_set_matches_spec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L189", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "target": "ui_test_notifications_test_action_spec_is_frozen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L199", "weight": 1.0}, {"source": "ui_test_notifications_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_notifications_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_notifications_rationale_26", "target": "ui_test_notifications_reset_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L26", "weight": 1.0}, {"source": "ui_test_notifications_rationale_34", "target": "ui_test_notifications_test_notify_success_uses_positive_type", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L34", "weight": 1.0}, {"source": "ui_test_notifications_rationale_46", "target": "ui_test_notifications_test_notify_info_default_timeout", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L46", "weight": 1.0}, {"source": "ui_test_notifications_rationale_55", "target": "ui_test_notifications_test_notify_warning_extended_timeout", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L55", "weight": 1.0}, {"source": "ui_test_notifications_rationale_64", "target": "ui_test_notifications_test_notify_error_extended_timeout", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L64", "weight": 1.0}, {"source": "ui_test_notifications_rationale_73", "target": "ui_test_notifications_test_notify_with_action_extends_to_12_seconds", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L73", "weight": 1.0}, {"source": "ui_test_notifications_rationale_86", "target": "ui_test_notifications_test_show_banner_rejects_unknown_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L86", "weight": 1.0}, {"source": "ui_test_notifications_rationale_98", "target": "ui_test_notifications_test_show_banner_records_active", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L98", "weight": 1.0}, {"source": "ui_test_notifications_rationale_112", "target": "ui_test_notifications_test_clear_banner_removes_record", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L112", "weight": 1.0}, {"source": "ui_test_notifications_rationale_125", "target": "ui_test_notifications_test_banner_overflow_count_when_exceeding_two", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L125", "weight": 1.0}, {"source": "ui_test_notifications_rationale_149", "target": "ui_test_notifications_test_field_errors_round_trip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L149", "weight": 1.0}, {"source": "ui_test_notifications_rationale_158", "target": "ui_test_notifications_test_form_errors_round_trip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L158", "weight": 1.0}, {"source": "ui_test_notifications_rationale_167", "target": "ui_test_notifications_test_banner_id_closed_set_matches_spec", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L167", "weight": 1.0}, {"source": "ui_test_notifications_rationale_179", "target": "ui_test_notifications_test_severity_closed_set_matches_spec", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L179", "weight": 1.0}, {"source": "ui_test_notifications_rationale_190", "target": "ui_test_notifications_test_container_id_closed_set_matches_spec", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L190", "weight": 1.0}, {"source": "ui_test_notifications_rationale_200", "target": "ui_test_notifications_test_action_spec_is_frozen", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L200", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_notifications_reset_state", "callee": "reset_for_tests", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L28"}, {"caller_nid": "ui_test_notifications_reset_state", "callee": "reset_for_tests", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L30"}, {"caller_nid": "ui_test_notifications_test_notify_success_uses_positive_type", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L36"}, {"caller_nid": "ui_test_notifications_test_notify_success_uses_positive_type", "callee": "notify_success", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L37"}, {"caller_nid": "ui_test_notifications_test_notify_success_uses_positive_type", "callee": "assert_called_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L38"}, {"caller_nid": "ui_test_notifications_test_notify_info_default_timeout", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L48"}, {"caller_nid": "ui_test_notifications_test_notify_info_default_timeout", "callee": "notify_info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L49"}, {"caller_nid": "ui_test_notifications_test_notify_warning_extended_timeout", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L57"}, {"caller_nid": "ui_test_notifications_test_notify_warning_extended_timeout", "callee": "notify_warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L58"}, {"caller_nid": "ui_test_notifications_test_notify_error_extended_timeout", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L66"}, {"caller_nid": "ui_test_notifications_test_notify_error_extended_timeout", "callee": "notify_error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L67"}, {"caller_nid": "ui_test_notifications_test_notify_with_action_extends_to_12_seconds", "callee": "ActionSpec", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L75"}, {"caller_nid": "ui_test_notifications_test_notify_with_action_extends_to_12_seconds", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L76"}, {"caller_nid": "ui_test_notifications_test_notify_with_action_extends_to_12_seconds", "callee": "notify_warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L77"}, {"caller_nid": "ui_test_notifications_test_show_banner_rejects_unknown_id", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L88"}, {"caller_nid": "ui_test_notifications_test_show_banner_rejects_unknown_id", "callee": "show_banner", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L89"}, {"caller_nid": "ui_test_notifications_test_show_banner_records_active", "callee": "show_banner", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L100"}, {"caller_nid": "ui_test_notifications_test_show_banner_records_active", "callee": "list_active_banners", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L106"}, {"caller_nid": "ui_test_notifications_test_show_banner_records_active", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L107"}, {"caller_nid": "ui_test_notifications_test_clear_banner_removes_record", "callee": "show_banner", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L114"}, {"caller_nid": "ui_test_notifications_test_clear_banner_removes_record", "callee": "clear_banner", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L120"}, {"caller_nid": "ui_test_notifications_test_clear_banner_removes_record", "callee": "list_active_banners", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L121"}, {"caller_nid": "ui_test_notifications_test_banner_overflow_count_when_exceeding_two", "callee": "show_banner", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L127"}, {"caller_nid": "ui_test_notifications_test_banner_overflow_count_when_exceeding_two", "callee": "show_banner", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L133"}, {"caller_nid": "ui_test_notifications_test_banner_overflow_count_when_exceeding_two", "callee": "show_banner", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L139"}, {"caller_nid": "ui_test_notifications_test_banner_overflow_count_when_exceeding_two", "callee": "banner_overflow_count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L145"}, {"caller_nid": "ui_test_notifications_test_field_errors_round_trip", "callee": "notify_field_error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L151"}, {"caller_nid": "ui_test_notifications_test_field_errors_round_trip", "callee": "get_field_error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L152"}, {"caller_nid": "ui_test_notifications_test_field_errors_round_trip", "callee": "clear_field_error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L153"}, {"caller_nid": "ui_test_notifications_test_field_errors_round_trip", "callee": "get_field_error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L154"}, {"caller_nid": "ui_test_notifications_test_form_errors_round_trip", "callee": "notify_form_error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L160"}, {"caller_nid": "ui_test_notifications_test_form_errors_round_trip", "callee": "get_form_error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L161"}, {"caller_nid": "ui_test_notifications_test_form_errors_round_trip", "callee": "clear_form_errors", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L162"}, {"caller_nid": "ui_test_notifications_test_form_errors_round_trip", "callee": "get_form_error", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L163"}, {"caller_nid": "ui_test_notifications_test_action_spec_is_frozen", "callee": "ActionSpec", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L204"}, {"caller_nid": "ui_test_notifications_test_action_spec_is_frozen", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py", "source_location": "L205"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/b4cc0bda9c625ced78bbc96253257554f04907bee4085e625c0935b9f1d8d579.json b/graphify-out/cache/ast/b4cc0bda9c625ced78bbc96253257554f04907bee4085e625c0935b9f1d8d579.json new file mode 100644 index 0000000..f288163 --- /dev/null +++ b/graphify-out/cache/ast/b4cc0bda9c625ced78bbc96253257554f04907bee4085e625c0935b9f1d8d579.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "label": "main.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L1"}, {"id": "pages_main_mainpagestate", "label": "MainPageState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L32"}, {"id": "pages_main_default_chips", "label": "_default_chips()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L75"}, {"id": "pages_main_chip_state_to_tree_filters", "label": "chip_state_to_tree_filters()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L85"}, {"id": "pages_main_problems_badge_text", "label": "problems_badge_text()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L96"}, {"id": "pages_main_setup_incomplete_banner_props", "label": "setup_incomplete_banner_props()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L108"}, {"id": "pages_main_render_file_explorer_page", "label": "render_file_explorer_page()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L135"}, {"id": "pages_main_render_centre_file_list", "label": "_render_centre_file_list()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L421"}, {"id": "pages_main_render_right_pane", "label": "_render_right_pane()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L453"}, {"id": "pages_main_rationale_1", "label": "Main window (Frontend Spec \u00a73). Layout: * **Left drawer** -- search box + filt", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L1"}, {"id": "pages_main_rationale_33", "label": "Render state for the main page. GUI/Orchestrator Redesign \u00a74: the legacy tw", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L33"}, {"id": "pages_main_rationale_76", "label": "The three default chips on the left-tree filter strip (\u00a73.5.4).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L76"}, {"id": "pages_main_rationale_86", "label": "Translate a chip group state into a :class:`TreeFilters`.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L86"}, {"id": "pages_main_rationale_97", "label": "Return the count text shown on the Problems tab. Frontend \u00a73.2: hard count", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L97"}, {"id": "pages_main_rationale_109", "label": "Banner content for the setup-incomplete state (\u00a73.1.4). ``next_action`` is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L109"}, {"id": "pages_main_rationale_157", "label": "Render the rebuilt three-region file-explorer main window. GUI/Orchestrator", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L157"}, {"id": "pages_main_rationale_427", "label": "Render the centre-pane file list (Redesign \u00a74.3). Each row carries a right-", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L427"}, {"id": "pages_main_rationale_459", "label": "Render the right Metadata / Problems pane (Redesign \u00a74.4).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L459"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "exlab_wizard_ui", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "exlab_wizard_ui_components", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "exlab_wizard_ui_components_tree", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "exlab_wizard_ui_pages_staging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "pages_main_mainpagestate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "pages_main_default_chips", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L75", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "pages_main_chip_state_to_tree_filters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L85", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "pages_main_problems_badge_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L96", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "pages_main_setup_incomplete_banner_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L108", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "pages_main_render_file_explorer_page", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "pages_main_render_centre_file_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L421", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "target": "pages_main_render_right_pane", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L453", "weight": 1.0}, {"source": "pages_main_render_file_explorer_page", "target": "pages_main_mainpagestate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L174", "weight": 1.0}, {"source": "pages_main_render_file_explorer_page", "target": "pages_main_setup_incomplete_banner_props", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L243", "weight": 1.0}, {"source": "pages_main_render_file_explorer_page", "target": "pages_main_default_chips", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L266", "weight": 1.0}, {"source": "pages_main_render_file_explorer_page", "target": "pages_main_chip_state_to_tree_filters", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L269", "weight": 1.0}, {"source": "pages_main_render_file_explorer_page", "target": "pages_main_render_centre_file_list", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L299", "weight": 1.0}, {"source": "pages_main_render_file_explorer_page", "target": "pages_main_render_right_pane", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L369", "weight": 1.0}, {"source": "pages_main_render_right_pane", "target": "pages_main_problems_badge_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L473", "weight": 1.0}, {"source": "pages_main_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_main_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L1", "weight": 1.0}, {"source": "pages_main_rationale_33", "target": "pages_main_mainpagestate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L33", "weight": 1.0}, {"source": "pages_main_rationale_76", "target": "pages_main_default_chips", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L76", "weight": 1.0}, {"source": "pages_main_rationale_86", "target": "pages_main_chip_state_to_tree_filters", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L86", "weight": 1.0}, {"source": "pages_main_rationale_97", "target": "pages_main_problems_badge_text", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L97", "weight": 1.0}, {"source": "pages_main_rationale_109", "target": "pages_main_setup_incomplete_banner_props", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L109", "weight": 1.0}, {"source": "pages_main_rationale_157", "target": "pages_main_render_file_explorer_page", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L157", "weight": 1.0}, {"source": "pages_main_rationale_427", "target": "pages_main_render_centre_file_list", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L427", "weight": 1.0}, {"source": "pages_main_rationale_459", "target": "pages_main_render_right_pane", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L459", "weight": 1.0}], "raw_calls": [{"caller_nid": "pages_main_default_chips", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L79"}, {"caller_nid": "pages_main_default_chips", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L80"}, {"caller_nid": "pages_main_default_chips", "callee": "ChipDefinition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L81"}, {"caller_nid": "pages_main_chip_state_to_tree_filters", "callee": "TreeFilters", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L88"}, {"caller_nid": "pages_main_chip_state_to_tree_filters", "callee": "is_active", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L89"}, {"caller_nid": "pages_main_chip_state_to_tree_filters", "callee": "is_active", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L90"}, {"caller_nid": "pages_main_chip_state_to_tree_filters", "callee": "is_active", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L91"}, {"caller_nid": "pages_main_problems_badge_text", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L104"}, {"caller_nid": "pages_main_setup_incomplete_banner_props", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L126"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L184"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L184"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "header", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L184"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L192"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L192"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "space", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L196"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L198"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L198"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "on_open_new_project", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L198"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L201"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L201"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "on_open_new_run", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L201"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L204"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L204"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "on_open_new_test_run", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L204"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L211"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "tooltip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L213"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L214"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L214"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "on_open_add_equipment", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L214"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L222"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L222"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "on_open_operations", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L224"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L226"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L226"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "on_refresh", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L226"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L229"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L229"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "on_open_settings", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L229"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "render_breadcrumb", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L233"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "show_banner", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L239"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "ActionSpec", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L244"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "clear_banner", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L251"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "banner_stack", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L252"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L263"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "splitter", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L263"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L264"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L264"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L264"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L265"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L265"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L265"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "filter_chips", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L266"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "build_tree", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L267"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L292"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L292"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L292"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L296"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L296"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L325"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L325"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L325"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "on_toggle_right_pane", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L325"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L338"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L338"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L348"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L348"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L356"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L356"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L360"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L360"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L366"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L366"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L377"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "footer", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L377"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L382"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L382"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "status_bar_segment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L388"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "status_bar_segment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L396"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "status_bar_segment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L401"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "status_bar_segment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L405"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L411"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "status_bar_segment", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L411"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L416"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L416"}, {"caller_nid": "pages_main_render_file_explorer_page", "callee": "on_clear_verified", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L416"}, {"caller_nid": "pages_main_render_centre_file_list", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L442"}, {"caller_nid": "pages_main_render_centre_file_list", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L442"}, {"caller_nid": "pages_main_render_centre_file_list", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L442"}, {"caller_nid": "pages_main_render_centre_file_list", "callee": "FileListState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L446"}, {"caller_nid": "pages_main_render_centre_file_list", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L448"}, {"caller_nid": "pages_main_render_centre_file_list", "callee": "render_file_list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L450"}, {"caller_nid": "pages_main_render_right_pane", "callee": "tabs", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L469"}, {"caller_nid": "pages_main_render_right_pane", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L470"}, {"caller_nid": "pages_main_render_right_pane", "callee": "tab", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L470"}, {"caller_nid": "pages_main_render_right_pane", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L471"}, {"caller_nid": "pages_main_render_right_pane", "callee": "tab", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L471"}, {"caller_nid": "pages_main_render_right_pane", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L475"}, {"caller_nid": "pages_main_render_right_pane", "callee": "tab_panels", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L475"}, {"caller_nid": "pages_main_render_right_pane", "callee": "tab_panel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L476"}, {"caller_nid": "pages_main_render_right_pane", "callee": "MetadataPaneState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L477"}, {"caller_nid": "pages_main_render_right_pane", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L480"}, {"caller_nid": "pages_main_render_right_pane", "callee": "render_metadata_pane", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L482"}, {"caller_nid": "pages_main_render_right_pane", "callee": "tab_panel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L486"}, {"caller_nid": "pages_main_render_right_pane", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L488"}, {"caller_nid": "pages_main_render_right_pane", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L488"}, {"caller_nid": "pages_main_render_right_pane", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py", "source_location": "L488"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/b7d24e03d822883a22089ccc237e35fba913275e752f5b099519283ff08e68aa.json b/graphify-out/cache/ast/b7d24e03d822883a22089ccc237e35fba913275e752f5b099519283ff08e68aa.json new file mode 100644 index 0000000..d520c8f --- /dev/null +++ b/graphify-out/cache/ast/b7d24e03d822883a22089ccc237e35fba913275e752f5b099519283ff08e68aa.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_index_md", "label": "index.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/index.md", "source_location": "L1"}, {"id": "source_index_exlab_wizard_documentation", "label": "ExLab-Wizard documentation", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/index.md", "source_location": "L1"}, {"id": "source_index_codeblock_1", "label": "code:{toctree} (:maxdepth: 2)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/index.md", "source_location": "L7"}, {"id": "source_index_what_is_exlab_wizard", "label": "What is ExLab-Wizard", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/index.md", "source_location": "L16"}, {"id": "source_index_where_to_start", "label": "Where to start", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/index.md", "source_location": "L26"}, {"id": "source_index_project_metadata", "label": "Project metadata", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/index.md", "source_location": "L38"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_index_md", "target": "source_index_exlab_wizard_documentation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/index.md", "source_location": "L1", "weight": 1.0}, {"source": "source_index_exlab_wizard_documentation", "target": "source_index_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/index.md", "source_location": "L7", "weight": 1.0}, {"source": "source_index_exlab_wizard_documentation", "target": "source_index_what_is_exlab_wizard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/index.md", "source_location": "L16", "weight": 1.0}, {"source": "source_index_exlab_wizard_documentation", "target": "source_index_where_to_start", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/index.md", "source_location": "L26", "weight": 1.0}, {"source": "source_index_exlab_wizard_documentation", "target": "source_index_project_metadata", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/index.md", "source_location": "L38", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/b7d89c6f634bfd2a8dc72984bb80c0d2f30816bdcfe601816e950e5637300e84.json b/graphify-out/cache/ast/b7d89c6f634bfd2a8dc72984bb80c0d2f30816bdcfe601816e950e5637300e84.json new file mode 100644 index 0000000..802f012 --- /dev/null +++ b/graphify-out/cache/ast/b7d89c6f634bfd2a8dc72984bb80c0d2f30816bdcfe601816e950e5637300e84.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_io_test_atomic_write_py", "label": "test_atomic_write.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L1"}, {"id": "io_test_atomic_write_test_atomic_write_creates_file", "label": "test_atomic_write_creates_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L13"}, {"id": "io_test_atomic_write_test_atomic_write_overwrites_existing", "label": "test_atomic_write_overwrites_existing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L19"}, {"id": "io_test_atomic_write_test_atomic_write_leaves_no_temp_file_on_success", "label": "test_atomic_write_leaves_no_temp_file_on_success()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L26"}, {"id": "io_test_atomic_write_test_atomic_write_cleans_up_temp_on_replace_failure", "label": "test_atomic_write_cleans_up_temp_on_replace_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L33"}, {"id": "io_test_atomic_write_test_atomic_write_skip_fsync", "label": "test_atomic_write_skip_fsync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L48"}, {"id": "io_test_atomic_write_test_atomic_write_calls_fsync_by_default", "label": "test_atomic_write_calls_fsync_by_default()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L56"}, {"id": "io_test_atomic_write_rationale_1", "label": "Tests for ``exlab_wizard.io.atomic_write``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_io_test_atomic_write_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_atomic_write_py", "target": "unittest_mock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_atomic_write_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_atomic_write_py", "target": "exlab_wizard_io_atomic_write", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_atomic_write_py", "target": "io_test_atomic_write_test_atomic_write_creates_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_atomic_write_py", "target": "io_test_atomic_write_test_atomic_write_overwrites_existing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_atomic_write_py", "target": "io_test_atomic_write_test_atomic_write_leaves_no_temp_file_on_success", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_atomic_write_py", "target": "io_test_atomic_write_test_atomic_write_cleans_up_temp_on_replace_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_atomic_write_py", "target": "io_test_atomic_write_test_atomic_write_skip_fsync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_atomic_write_py", "target": "io_test_atomic_write_test_atomic_write_calls_fsync_by_default", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L56", "weight": 1.0}, {"source": "io_test_atomic_write_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_io_test_atomic_write_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "io_test_atomic_write_test_atomic_write_creates_file", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L15"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_creates_file", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L16"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_overwrites_existing", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L21"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_overwrites_existing", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L22"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_overwrites_existing", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L23"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_leaves_no_temp_file_on_success", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L28"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_leaves_no_temp_file_on_success", "callee": "iterdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L29"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_cleans_up_temp_on_replace_failure", "callee": "OSError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L36"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_cleans_up_temp_on_replace_failure", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L38"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_cleans_up_temp_on_replace_failure", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L39"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_cleans_up_temp_on_replace_failure", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L41"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_cleans_up_temp_on_replace_failure", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L43"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_cleans_up_temp_on_replace_failure", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L44"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_cleans_up_temp_on_replace_failure", "callee": "iterdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L44"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_skip_fsync", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L50"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_skip_fsync", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L51"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_skip_fsync", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L53"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_calls_fsync_by_default", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L58"}, {"caller_nid": "io_test_atomic_write_test_atomic_write_calls_fsync_by_default", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py", "source_location": "L59"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/b8f38ab946c6f7012b76964913140b51259543594c39dbdecf40069089d0a04e.json b/graphify-out/cache/ast/b8f38ab946c6f7012b76964913140b51259543594c39dbdecf40069089d0a04e.json new file mode 100644 index 0000000..49ab1b8 --- /dev/null +++ b/graphify-out/cache/ast/b8f38ab946c6f7012b76964913140b51259543594c39dbdecf40069089d0a04e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_controller_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/__init__.py", "source_location": "L1"}, {"id": "controller_init_rationale_1", "label": "Integration tests for the controller package. Backend Spec \u00a74.7.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/__init__.py", "source_location": "L1"}], "edges": [{"source": "controller_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_integration_controller_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/controller/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/b9d69361a309f735e17d85418bfe9bd4cf605f997c7820b20316ccb4f0a0b219.json b/graphify-out/cache/ast/b9d69361a309f735e17d85418bfe9bd4cf605f997c7820b20316ccb4f0a0b219.json new file mode 100644 index 0000000..4254861 --- /dev/null +++ b/graphify-out/cache/ast/b9d69361a309f735e17d85418bfe9bd4cf605f997c7820b20316ccb4f0a0b219.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_user_guide_08_problems_md", "label": "08_problems.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md", "source_location": "L1"}, {"id": "user_guide_08_problems_3_8_review_and_resolve_naming_and_validation_problems", "label": "3.8 Review and Resolve Naming and Validation Problems", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md", "source_location": "L1"}, {"id": "user_guide_08_problems_capability_summary", "label": "Capability summary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md", "source_location": "L3"}, {"id": "user_guide_08_problems_walkthrough", "label": "Walkthrough", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md", "source_location": "L17"}, {"id": "user_guide_08_problems_screenshots", "label": "Screenshots", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md", "source_location": "L33"}, {"id": "user_guide_08_problems_codeblock_1", "label": "code:{image} (:alt: Problems tab with one hard-tier finding visible)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md", "source_location": "L35"}, {"id": "user_guide_08_problems_related_material", "label": "Related material", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md", "source_location": "L40"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_user_guide_08_problems_md", "target": "user_guide_08_problems_3_8_review_and_resolve_naming_and_validation_problems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md", "source_location": "L1", "weight": 1.0}, {"source": "user_guide_08_problems_3_8_review_and_resolve_naming_and_validation_problems", "target": "user_guide_08_problems_capability_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md", "source_location": "L3", "weight": 1.0}, {"source": "user_guide_08_problems_3_8_review_and_resolve_naming_and_validation_problems", "target": "user_guide_08_problems_walkthrough", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md", "source_location": "L17", "weight": 1.0}, {"source": "user_guide_08_problems_3_8_review_and_resolve_naming_and_validation_problems", "target": "user_guide_08_problems_screenshots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md", "source_location": "L33", "weight": 1.0}, {"source": "user_guide_08_problems_screenshots", "target": "user_guide_08_problems_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md", "source_location": "L35", "weight": 1.0}, {"source": "user_guide_08_problems_3_8_review_and_resolve_naming_and_validation_problems", "target": "user_guide_08_problems_related_material", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md", "source_location": "L40", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/bb3f33b0c415c6d6f2c7b9b6fdc96342dac2e2db128122803b7ff08e2ee046c4.json b/graphify-out/cache/ast/bb3f33b0c415c6d6f2c7b9b6fdc96342dac2e2db128122803b7ff08e2ee046c4.json new file mode 100644 index 0000000..391a36a --- /dev/null +++ b/graphify-out/cache/ast/bb3f33b0c415c6d6f2c7b9b6fdc96342dac2e2db128122803b7ff08e2ee046c4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_operations_modal_py", "label": "operations_modal.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L1"}, {"id": "components_operations_modal_operationrow", "label": "OperationRow", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L34"}, {"id": "components_operations_modal_from_session", "label": "from_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L46"}, {"id": "components_operations_modal_operation_columns", "label": "operation_columns()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L80"}, {"id": "components_operations_modal_sort_rows", "label": "sort_rows()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L93"}, {"id": "components_operations_modal_state_glyph", "label": "state_glyph()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L107"}, {"id": "components_operations_modal_operations_modal", "label": "operations_modal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L113"}, {"id": "components_operations_modal_rationale_1", "label": "In-flight operations panel (Frontend Spec \u00a79.5). A modal reachable from the Syn", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L1"}, {"id": "components_operations_modal_rationale_35", "label": "A single row in the operations panel.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L35"}, {"id": "components_operations_modal_rationale_47", "label": "Map a controller ``Session`` to a panel row. Collapses the \u00a74.7 state m", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L47"}, {"id": "components_operations_modal_rationale_81", "label": "Column definitions for the NiceGUI table (Frontend \u00a79.5).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L81"}, {"id": "components_operations_modal_rationale_94", "label": "Suspended rows first (oldest first), then running, then completed. Per Fron", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L94"}, {"id": "components_operations_modal_rationale_108", "label": "Map an operation state to its NiceGUI icon name.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L108"}, {"id": "components_operations_modal_rationale_120", "label": "Build the operations modal.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L120"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_operations_modal_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_operations_modal_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_operations_modal_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_operations_modal_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_operations_modal_py", "target": "components_operations_modal_operationrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_operations_modal_py", "target": "components_operations_modal_from_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_operations_modal_py", "target": "components_operations_modal_operation_columns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L80", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_operations_modal_py", "target": "components_operations_modal_sort_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_operations_modal_py", "target": "components_operations_modal_state_glyph", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L107", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_operations_modal_py", "target": "components_operations_modal_operations_modal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L113", "weight": 1.0}, {"source": "components_operations_modal_operations_modal", "target": "components_operations_modal_sort_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L122", "weight": 1.0}, {"source": "components_operations_modal_operations_modal", "target": "components_operations_modal_operation_columns", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L124", "weight": 1.0}, {"source": "components_operations_modal_operations_modal", "target": "components_operations_modal_state_glyph", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L158", "weight": 1.0}, {"source": "components_operations_modal_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_operations_modal_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L1", "weight": 1.0}, {"source": "components_operations_modal_rationale_35", "target": "components_operations_modal_operationrow", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L35", "weight": 1.0}, {"source": "components_operations_modal_rationale_47", "target": "components_operations_modal_operationrow_from_session", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L47", "weight": 1.0}, {"source": "components_operations_modal_rationale_81", "target": "components_operations_modal_operation_columns", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L81", "weight": 1.0}, {"source": "components_operations_modal_rationale_94", "target": "components_operations_modal_sort_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L94", "weight": 1.0}, {"source": "components_operations_modal_rationale_108", "target": "components_operations_modal_state_glyph", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L108", "weight": 1.0}, {"source": "components_operations_modal_rationale_120", "target": "components_operations_modal_operations_modal", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L120", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_operations_modal_from_session", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L68"}, {"caller_nid": "components_operations_modal_from_session", "callee": "cls", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L69"}, {"caller_nid": "components_operations_modal_from_session", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L72"}, {"caller_nid": "components_operations_modal_from_session", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L73"}, {"caller_nid": "components_operations_modal_from_session", "callee": "project_identifier", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L74"}, {"caller_nid": "components_operations_modal_from_session", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L75"}, {"caller_nid": "components_operations_modal_sort_rows", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L101"}, {"caller_nid": "components_operations_modal_sort_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L103"}, {"caller_nid": "components_operations_modal_state_glyph", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L110"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "dialog", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L133"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L136"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "card", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L136"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L144"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L144"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L152"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L152"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L152"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L158"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "icon", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L158"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L159"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L159"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L164"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L164"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L165"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L165"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L166"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L166"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L168"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L168"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L172"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L172"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "on_resume", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L174"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L176"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L176"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "on_cancel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L178"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L180"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L180"}, {"caller_nid": "components_operations_modal_operations_modal", "callee": "on_view_log", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py", "source_location": "L182"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/bb9e2069a361a850f2ceb3a1031c33bba916d4241276de9808bedb9c327a278d.json b/graphify-out/cache/ast/bb9e2069a361a850f2ceb3a1031c33bba916d4241276de9808bedb9c327a278d.json new file mode 100644 index 0000000..316f100 --- /dev/null +++ b/graphify-out/cache/ast/bb9e2069a361a850f2ceb3a1031c33bba916d4241276de9808bedb9c327a278d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_04_backend_architecture_md", "label": "04_Backend_Architecture.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L1"}, {"id": "design_spec_sections_04_backend_architecture_4_backend_architecture", "label": "4. Backend Architecture", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L1"}, {"id": "design_spec_sections_04_backend_architecture_4_1_deployment_model", "label": "4.1 Deployment Model", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L7"}, {"id": "design_spec_sections_04_backend_architecture_4_2_process_model", "label": "4.2 Process Model", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L35"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_1", "label": "code:block1 (\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L37"}, {"id": "design_spec_sections_04_backend_architecture_4_3_package_layout", "label": "4.3 Package Layout", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L78"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_2", "label": "code:block2 (exlab_wizard/)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L80"}, {"id": "design_spec_sections_04_backend_architecture_4_3_1_the_constants_package", "label": "4.3.1 The `constants/` package", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L181"}, {"id": "design_spec_sections_04_backend_architecture_4_3_2_the_tray_and_window_packages", "label": "4.3.2 The `tray/` and `window/` packages", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L192"}, {"id": "design_spec_sections_04_backend_architecture_4_4_component_contracts", "label": "4.4 Component Contracts", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L220"}, {"id": "design_spec_sections_04_backend_architecture_4_4_1_creationcontroller", "label": "4.4.1 CreationController", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L224"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_3", "label": "code:python (class CreationController:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L226"}, {"id": "design_spec_sections_04_backend_architecture_4_4_2_templateengine", "label": "4.4.2 TemplateEngine", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L238"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_4", "label": "code:python (class TemplateEngine:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L240"}, {"id": "design_spec_sections_04_backend_architecture_4_4_3_pluginhost", "label": "4.4.3 PluginHost", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L248"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_5", "label": "code:python (class PluginHost:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L250"}, {"id": "design_spec_sections_04_backend_architecture_4_4_4_validator", "label": "4.4.4 Validator", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L265"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_6", "label": "code:python (class Validator:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L267"}, {"id": "design_spec_sections_04_backend_architecture_4_4_5_cachewriter", "label": "4.4.5 CacheWriter", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L276"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_7", "label": "code:python (class CacheWriter:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L285"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_8", "label": "code:python (# Inside CacheWriter.update_creation_atomic)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L301"}, {"id": "design_spec_sections_04_backend_architecture_4_4_6_nassyncclient_and_limsclient", "label": "4.4.6 NASSyncClient and LIMSClient", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L320"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_9", "label": "code:python (class NASSyncClient:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L324"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_10", "label": "code:python (class LIMSClient:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L334"}, {"id": "design_spec_sections_04_backend_architecture_4_4_7_sessionstore", "label": "4.4.7 SessionStore", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L345"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_11", "label": "code:python (class SessionStore:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L347"}, {"id": "design_spec_sections_04_backend_architecture_4_5_async_threading_model", "label": "4.5 Async / Threading Model", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L359"}, {"id": "design_spec_sections_04_backend_architecture_4_6_frontend_backend_protocol", "label": "4.6 Frontend \u2194 Backend Protocol", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L377"}, {"id": "design_spec_sections_04_backend_architecture_4_6_1_rest_surface_illustrative_subset_full_schema_lives_in_api_schemas_py", "label": "4.6.1 REST surface (illustrative subset; full schema lives in `api/schemas.py`)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L381"}, {"id": "design_spec_sections_04_backend_architecture_4_6_2_websocket_events", "label": "4.6.2 WebSocket events", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L406"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_12", "label": "code:json ({ \"kind\": \"phase\", \"phase\": \"rendering_template\", )", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L410"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_13", "label": "code:json ({ \"kind\": \"snapshot\", \"findings\": [...], \"audit_at\": \"...\" })", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L424"}, {"id": "design_spec_sections_04_backend_architecture_4_6_3_api_versioning_health_and_error_envelope", "label": "4.6.3 API versioning, health, and error envelope", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L429"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_14", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L448"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_15", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L472"}, {"id": "design_spec_sections_04_backend_architecture_4_7_creation_session_state_machine", "label": "4.7 Creation-Session State Machine", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L512"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_16", "label": "code:block16 (create_project / create_run)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L514"}, {"id": "design_spec_sections_04_backend_architecture_4_7_1_sessionstate_phase_mapping", "label": "4.7.1 SessionState \u2192 Phase mapping", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L573"}, {"id": "design_spec_sections_04_backend_architecture_4_8_crash_recovery", "label": "4.8 Crash Recovery", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L593"}, {"id": "design_spec_sections_04_backend_architecture_4_9_first_launch_and_setup_incomplete_state", "label": "4.9 First-Launch and Setup-Incomplete State", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L607"}, {"id": "design_spec_sections_04_backend_architecture_4_9_1_setup_states", "label": "4.9.1 Setup states", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L611"}, {"id": "design_spec_sections_04_backend_architecture_4_9_2_endpoint_gating", "label": "4.9.2 Endpoint gating", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L626"}, {"id": "design_spec_sections_04_backend_architecture_4_9_3_get_api_v1_setup_status_response_shape", "label": "4.9.3 `GET /api/v1/setup/status` response shape", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L643"}, {"id": "design_spec_sections_04_backend_architecture_codeblock_17", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L645"}, {"id": "design_spec_sections_04_backend_architecture_4_9_4_lims_unreachability_is_a_soft_block", "label": "4.9.4 LIMS unreachability is a soft block", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L659"}, {"id": "design_spec_sections_04_backend_architecture_4_9_5_initial_setup_ordering_informational", "label": "4.9.5 Initial setup ordering (informational)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L665"}, {"id": "design_spec_sections_04_backend_architecture_4_10_testing_strategy", "label": "4.10 Testing Strategy", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L679"}, {"id": "design_spec_sections_04_backend_architecture_4_10_1_unit_tests_tests_unit", "label": "4.10.1 Unit tests (`tests/unit/`)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L683"}, {"id": "design_spec_sections_04_backend_architecture_4_10_2_integration_tests_tests_integration", "label": "4.10.2 Integration tests (`tests/integration/`)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L694"}, {"id": "design_spec_sections_04_backend_architecture_4_10_3_end_to_end_tests_tests_e2e", "label": "4.10.3 End-to-end tests (`tests/e2e/`)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L707"}, {"id": "design_spec_sections_04_backend_architecture_4_10_4_test_fixtures_tests_fixtures", "label": "4.10.4 Test fixtures (`tests/fixtures/`)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L718"}, {"id": "design_spec_sections_04_backend_architecture_4_10_5_what_s_not_tested_at_each_layer", "label": "4.10.5 What's NOT tested at each layer", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L728"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_04_backend_architecture_md", "target": "design_spec_sections_04_backend_architecture_4_backend_architecture", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L1", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_backend_architecture", "target": "design_spec_sections_04_backend_architecture_4_1_deployment_model", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L7", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_backend_architecture", "target": "design_spec_sections_04_backend_architecture_4_2_process_model", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L35", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_2_process_model", "target": "design_spec_sections_04_backend_architecture_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L37", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_backend_architecture", "target": "design_spec_sections_04_backend_architecture_4_3_package_layout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L78", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_3_package_layout", "target": "design_spec_sections_04_backend_architecture_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L80", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_3_package_layout", "target": "design_spec_sections_04_backend_architecture_4_3_1_the_constants_package", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L181", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_3_package_layout", "target": "design_spec_sections_04_backend_architecture_4_3_2_the_tray_and_window_packages", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L192", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_backend_architecture", "target": "design_spec_sections_04_backend_architecture_4_4_component_contracts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L220", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", "target": "design_spec_sections_04_backend_architecture_4_4_1_creationcontroller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L224", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_1_creationcontroller", "target": "design_spec_sections_04_backend_architecture_codeblock_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L226", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", "target": "design_spec_sections_04_backend_architecture_4_4_2_templateengine", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L238", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_2_templateengine", "target": "design_spec_sections_04_backend_architecture_codeblock_4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L240", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", "target": "design_spec_sections_04_backend_architecture_4_4_3_pluginhost", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L248", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_3_pluginhost", "target": "design_spec_sections_04_backend_architecture_codeblock_5", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L250", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", "target": "design_spec_sections_04_backend_architecture_4_4_4_validator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L265", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_4_validator", "target": "design_spec_sections_04_backend_architecture_codeblock_6", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L267", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", "target": "design_spec_sections_04_backend_architecture_4_4_5_cachewriter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L276", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_5_cachewriter", "target": "design_spec_sections_04_backend_architecture_codeblock_7", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L285", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_5_cachewriter", "target": "design_spec_sections_04_backend_architecture_codeblock_8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L301", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", "target": "design_spec_sections_04_backend_architecture_4_4_6_nassyncclient_and_limsclient", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L320", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_6_nassyncclient_and_limsclient", "target": "design_spec_sections_04_backend_architecture_codeblock_9", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L324", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_6_nassyncclient_and_limsclient", "target": "design_spec_sections_04_backend_architecture_codeblock_10", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L334", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", "target": "design_spec_sections_04_backend_architecture_4_4_7_sessionstore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L345", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_4_7_sessionstore", "target": "design_spec_sections_04_backend_architecture_codeblock_11", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L347", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_backend_architecture", "target": "design_spec_sections_04_backend_architecture_4_5_async_threading_model", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L359", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_backend_architecture", "target": "design_spec_sections_04_backend_architecture_4_6_frontend_backend_protocol", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L377", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_6_frontend_backend_protocol", "target": "design_spec_sections_04_backend_architecture_4_6_1_rest_surface_illustrative_subset_full_schema_lives_in_api_schemas_py", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L381", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_6_frontend_backend_protocol", "target": "design_spec_sections_04_backend_architecture_4_6_2_websocket_events", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L406", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_6_2_websocket_events", "target": "design_spec_sections_04_backend_architecture_codeblock_12", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L410", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_6_2_websocket_events", "target": "design_spec_sections_04_backend_architecture_codeblock_13", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L424", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_6_frontend_backend_protocol", "target": "design_spec_sections_04_backend_architecture_4_6_3_api_versioning_health_and_error_envelope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L429", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_6_3_api_versioning_health_and_error_envelope", "target": "design_spec_sections_04_backend_architecture_codeblock_14", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L448", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_6_3_api_versioning_health_and_error_envelope", "target": "design_spec_sections_04_backend_architecture_codeblock_15", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L472", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_backend_architecture", "target": "design_spec_sections_04_backend_architecture_4_7_creation_session_state_machine", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L512", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_7_creation_session_state_machine", "target": "design_spec_sections_04_backend_architecture_codeblock_16", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L514", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_7_creation_session_state_machine", "target": "design_spec_sections_04_backend_architecture_4_7_1_sessionstate_phase_mapping", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L573", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_backend_architecture", "target": "design_spec_sections_04_backend_architecture_4_8_crash_recovery", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L593", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_backend_architecture", "target": "design_spec_sections_04_backend_architecture_4_9_first_launch_and_setup_incomplete_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L607", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_9_first_launch_and_setup_incomplete_state", "target": "design_spec_sections_04_backend_architecture_4_9_1_setup_states", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L611", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_9_first_launch_and_setup_incomplete_state", "target": "design_spec_sections_04_backend_architecture_4_9_2_endpoint_gating", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L626", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_9_first_launch_and_setup_incomplete_state", "target": "design_spec_sections_04_backend_architecture_4_9_3_get_api_v1_setup_status_response_shape", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L643", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_9_3_get_api_v1_setup_status_response_shape", "target": "design_spec_sections_04_backend_architecture_codeblock_17", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L645", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_9_first_launch_and_setup_incomplete_state", "target": "design_spec_sections_04_backend_architecture_4_9_4_lims_unreachability_is_a_soft_block", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L659", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_9_first_launch_and_setup_incomplete_state", "target": "design_spec_sections_04_backend_architecture_4_9_5_initial_setup_ordering_informational", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L665", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_backend_architecture", "target": "design_spec_sections_04_backend_architecture_4_10_testing_strategy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L679", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_10_testing_strategy", "target": "design_spec_sections_04_backend_architecture_4_10_1_unit_tests_tests_unit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L683", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_10_testing_strategy", "target": "design_spec_sections_04_backend_architecture_4_10_2_integration_tests_tests_integration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L694", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_10_testing_strategy", "target": "design_spec_sections_04_backend_architecture_4_10_3_end_to_end_tests_tests_e2e", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L707", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_10_testing_strategy", "target": "design_spec_sections_04_backend_architecture_4_10_4_test_fixtures_tests_fixtures", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L718", "weight": 1.0}, {"source": "design_spec_sections_04_backend_architecture_4_10_testing_strategy", "target": "design_spec_sections_04_backend_architecture_4_10_5_what_s_not_tested_at_each_layer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md", "source_location": "L728", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/bc36b7e524d668c1e95a424be07f268f1fb651f8a923855df34ab90116b13740.json b/graphify-out/cache/ast/bc36b7e524d668c1e95a424be07f268f1fb651f8a923855df34ab90116b13740.json new file mode 100644 index 0000000..a4bacbb --- /dev/null +++ b/graphify-out/cache/ast/bc36b7e524d668c1e95a424be07f268f1fb651f8a923855df34ab90116b13740.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "label": "metadata_pane.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L1"}, {"id": "components_metadata_pane_metadatapanestate", "label": "MetadataPaneState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L29"}, {"id": "components_metadata_pane_render_metadata_pane", "label": "render_metadata_pane()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L38"}, {"id": "components_metadata_pane_kv", "label": "_kv()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L82"}, {"id": "components_metadata_pane_render_equipment", "label": "_render_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L92"}, {"id": "components_metadata_pane_render_received_equipment", "label": "_render_received_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L118"}, {"id": "components_metadata_pane_render_project", "label": "_render_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L138"}, {"id": "components_metadata_pane_render_runs_folder", "label": "_render_runs_folder()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L148"}, {"id": "components_metadata_pane_render_run", "label": "_render_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L163"}, {"id": "components_metadata_pane_render_received_run", "label": "_render_received_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L200"}, {"id": "components_metadata_pane_rationale_1", "label": "Node-type-aware metadata pane for the rebuilt main window. GUI/Orchestrator Red", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L1"}, {"id": "components_metadata_pane_rationale_30", "label": "Mutable state for the metadata pane.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L30"}, {"id": "components_metadata_pane_rationale_43", "label": "Render the right-pane Metadata content for ``state.selected_node``. Dispatc", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L43"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "target": "components_metadata_pane_metadatapanestate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "target": "components_metadata_pane_render_metadata_pane", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "target": "components_metadata_pane_kv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L82", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "target": "components_metadata_pane_render_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L92", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "target": "components_metadata_pane_render_received_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L118", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "target": "components_metadata_pane_render_project", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L138", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "target": "components_metadata_pane_render_runs_folder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L148", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "target": "components_metadata_pane_render_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L163", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "target": "components_metadata_pane_render_received_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L200", "weight": 1.0}, {"source": "components_metadata_pane_render_metadata_pane", "target": "components_metadata_pane_render_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L66", "weight": 1.0}, {"source": "components_metadata_pane_render_metadata_pane", "target": "components_metadata_pane_render_received_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L68", "weight": 1.0}, {"source": "components_metadata_pane_render_metadata_pane", "target": "components_metadata_pane_render_project", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L70", "weight": 1.0}, {"source": "components_metadata_pane_render_metadata_pane", "target": "components_metadata_pane_render_runs_folder", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L72", "weight": 1.0}, {"source": "components_metadata_pane_render_metadata_pane", "target": "components_metadata_pane_render_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L74", "weight": 1.0}, {"source": "components_metadata_pane_render_metadata_pane", "target": "components_metadata_pane_render_received_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L76", "weight": 1.0}, {"source": "components_metadata_pane_render_equipment", "target": "components_metadata_pane_kv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L103", "weight": 1.0}, {"source": "components_metadata_pane_render_received_equipment", "target": "components_metadata_pane_kv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L133", "weight": 1.0}, {"source": "components_metadata_pane_render_project", "target": "components_metadata_pane_kv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L141", "weight": 1.0}, {"source": "components_metadata_pane_render_runs_folder", "target": "components_metadata_pane_kv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L159", "weight": 1.0}, {"source": "components_metadata_pane_render_run", "target": "components_metadata_pane_kv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L176", "weight": 1.0}, {"source": "components_metadata_pane_render_received_run", "target": "components_metadata_pane_kv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L203", "weight": 1.0}, {"source": "components_metadata_pane_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_metadata_pane_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L1", "weight": 1.0}, {"source": "components_metadata_pane_rationale_30", "target": "components_metadata_pane_metadatapanestate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L30", "weight": 1.0}, {"source": "components_metadata_pane_rationale_43", "target": "components_metadata_pane_render_metadata_pane", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L43", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_metadata_pane_render_metadata_pane", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L55"}, {"caller_nid": "components_metadata_pane_render_metadata_pane", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L55"}, {"caller_nid": "components_metadata_pane_render_metadata_pane", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L55"}, {"caller_nid": "components_metadata_pane_render_metadata_pane", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L55"}, {"caller_nid": "components_metadata_pane_render_metadata_pane", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L61"}, {"caller_nid": "components_metadata_pane_render_metadata_pane", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L61"}, {"caller_nid": "components_metadata_pane_render_metadata_pane", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L61"}, {"caller_nid": "components_metadata_pane_render_metadata_pane", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L78"}, {"caller_nid": "components_metadata_pane_render_metadata_pane", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L78"}, {"caller_nid": "components_metadata_pane_kv", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L87"}, {"caller_nid": "components_metadata_pane_kv", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L87"}, {"caller_nid": "components_metadata_pane_kv", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L88"}, {"caller_nid": "components_metadata_pane_kv", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L88"}, {"caller_nid": "components_metadata_pane_kv", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L89"}, {"caller_nid": "components_metadata_pane_kv", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L89"}, {"caller_nid": "components_metadata_pane_kv", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L89"}, {"caller_nid": "components_metadata_pane_render_equipment", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L99"}, {"caller_nid": "components_metadata_pane_render_equipment", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L99"}, {"caller_nid": "components_metadata_pane_render_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L99"}, {"caller_nid": "components_metadata_pane_render_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L99"}, {"caller_nid": "components_metadata_pane_render_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L103"}, {"caller_nid": "components_metadata_pane_render_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L104"}, {"caller_nid": "components_metadata_pane_render_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L105"}, {"caller_nid": "components_metadata_pane_render_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L106"}, {"caller_nid": "components_metadata_pane_render_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L107"}, {"caller_nid": "components_metadata_pane_render_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L108"}, {"caller_nid": "components_metadata_pane_render_equipment", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L109"}, {"caller_nid": "components_metadata_pane_render_equipment", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L109"}, {"caller_nid": "components_metadata_pane_render_equipment", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L109"}, {"caller_nid": "components_metadata_pane_render_received_equipment", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L125"}, {"caller_nid": "components_metadata_pane_render_received_equipment", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L125"}, {"caller_nid": "components_metadata_pane_render_received_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L125"}, {"caller_nid": "components_metadata_pane_render_received_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L125"}, {"caller_nid": "components_metadata_pane_render_received_equipment", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L129"}, {"caller_nid": "components_metadata_pane_render_received_equipment", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L129"}, {"caller_nid": "components_metadata_pane_render_received_equipment", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L129"}, {"caller_nid": "components_metadata_pane_render_received_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L133"}, {"caller_nid": "components_metadata_pane_render_received_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L134"}, {"caller_nid": "components_metadata_pane_render_received_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L135"}, {"caller_nid": "components_metadata_pane_render_project", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L141"}, {"caller_nid": "components_metadata_pane_render_project", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L142"}, {"caller_nid": "components_metadata_pane_render_project", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L143"}, {"caller_nid": "components_metadata_pane_render_project", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L144"}, {"caller_nid": "components_metadata_pane_render_project", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L145"}, {"caller_nid": "components_metadata_pane_render_runs_folder", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L156"}, {"caller_nid": "components_metadata_pane_render_runs_folder", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L156"}, {"caller_nid": "components_metadata_pane_render_runs_folder", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L159"}, {"caller_nid": "components_metadata_pane_render_runs_folder", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L160"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L172"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L172"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L172"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L172"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L176"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L177"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L178"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L179"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L180"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L181"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L182"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L184"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L184"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L184"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L185"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L186"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L186"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L186"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "on_run_staging_action", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L188"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L190"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L190"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L190"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "on_run_staging_action", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L192"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L194"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L194"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L194"}, {"caller_nid": "components_metadata_pane_render_run", "callee": "on_run_staging_action", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L196"}, {"caller_nid": "components_metadata_pane_render_received_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L203"}, {"caller_nid": "components_metadata_pane_render_received_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L204"}, {"caller_nid": "components_metadata_pane_render_received_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L205"}, {"caller_nid": "components_metadata_pane_render_received_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L206"}, {"caller_nid": "components_metadata_pane_render_received_run", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py", "source_location": "L207"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/bd45ec08aec0a1d2b6a9808d952aa6870ab01fc64770f74fcadc4189fb74979b.json b/graphify-out/cache/ast/bd45ec08aec0a1d2b6a9808d952aa6870ab01fc64770f74fcadc4189fb74979b.json new file mode 100644 index 0000000..faa9a86 --- /dev/null +++ b/graphify-out/cache/ast/bd45ec08aec0a1d2b6a9808d952aa6870ab01fc64770f74fcadc4189fb74979b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "label": "test_storage_secret.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L1"}, {"id": "tray_test_storage_secret_test_generates_secret_on_first_call", "label": "test_generates_secret_on_first_call()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L23"}, {"id": "tray_test_storage_secret_test_idempotent_across_calls", "label": "test_idempotent_across_calls()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L31"}, {"id": "tray_test_storage_secret_test_secret_file_mode_is_0600", "label": "test_secret_file_mode_is_0600()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L38"}, {"id": "tray_test_storage_secret_test_regenerates_on_empty_file", "label": "test_regenerates_on_empty_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L45"}, {"id": "tray_test_storage_secret_test_regenerates_on_whitespace_only_file", "label": "test_regenerates_on_whitespace_only_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L53"}, {"id": "tray_test_storage_secret_test_creates_state_dir_if_missing", "label": "test_creates_state_dir_if_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L61"}, {"id": "tray_test_storage_secret_rationale_1", "label": "Tests for ``exlab_wizard.tray.storage_secret``. The secret backs NiceGUI's Star", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "target": "stat", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "target": "exlab_wizard_tray_storage_secret", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "target": "tray_test_storage_secret_test_generates_secret_on_first_call", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "target": "tray_test_storage_secret_test_idempotent_across_calls", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "target": "tray_test_storage_secret_test_secret_file_mode_is_0600", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "target": "tray_test_storage_secret_test_regenerates_on_empty_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "target": "tray_test_storage_secret_test_regenerates_on_whitespace_only_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "target": "tray_test_storage_secret_test_creates_state_dir_if_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L61", "weight": 1.0}, {"source": "tray_test_storage_secret_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_tray_test_storage_secret_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_test_storage_secret_test_generates_secret_on_first_call", "callee": "load_or_create_storage_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L24"}, {"caller_nid": "tray_test_storage_secret_test_generates_secret_on_first_call", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L26"}, {"caller_nid": "tray_test_storage_secret_test_generates_secret_on_first_call", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L27"}, {"caller_nid": "tray_test_storage_secret_test_generates_secret_on_first_call", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L27"}, {"caller_nid": "tray_test_storage_secret_test_generates_secret_on_first_call", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L28"}, {"caller_nid": "tray_test_storage_secret_test_idempotent_across_calls", "callee": "load_or_create_storage_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L32"}, {"caller_nid": "tray_test_storage_secret_test_idempotent_across_calls", "callee": "load_or_create_storage_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L33"}, {"caller_nid": "tray_test_storage_secret_test_secret_file_mode_is_0600", "callee": "load_or_create_storage_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L39"}, {"caller_nid": "tray_test_storage_secret_test_secret_file_mode_is_0600", "callee": "S_IMODE", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L41"}, {"caller_nid": "tray_test_storage_secret_test_secret_file_mode_is_0600", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L41"}, {"caller_nid": "tray_test_storage_secret_test_regenerates_on_empty_file", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L47"}, {"caller_nid": "tray_test_storage_secret_test_regenerates_on_empty_file", "callee": "load_or_create_storage_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L48"}, {"caller_nid": "tray_test_storage_secret_test_regenerates_on_empty_file", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L50"}, {"caller_nid": "tray_test_storage_secret_test_regenerates_on_empty_file", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L50"}, {"caller_nid": "tray_test_storage_secret_test_regenerates_on_whitespace_only_file", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L55"}, {"caller_nid": "tray_test_storage_secret_test_regenerates_on_whitespace_only_file", "callee": "load_or_create_storage_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L56"}, {"caller_nid": "tray_test_storage_secret_test_regenerates_on_whitespace_only_file", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L58"}, {"caller_nid": "tray_test_storage_secret_test_regenerates_on_whitespace_only_file", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L58"}, {"caller_nid": "tray_test_storage_secret_test_creates_state_dir_if_missing", "callee": "load_or_create_storage_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L63"}, {"caller_nid": "tray_test_storage_secret_test_creates_state_dir_if_missing", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py", "source_location": "L64"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/bd660bac88e19770c77103f86d66b60b77a222c293d08ac5b68b6a7488baf94f.json b/graphify-out/cache/ast/bd660bac88e19770c77103f86d66b60b77a222c293d08ac5b68b6a7488baf94f.json new file mode 100644 index 0000000..28a2eb1 --- /dev/null +++ b/graphify-out/cache/ast/bd660bac88e19770c77103f86d66b60b77a222c293d08ac5b68b6a7488baf94f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_constants_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/__init__.py", "source_location": "L1"}, {"id": "constants_init_rationale_1", "label": "Unit tests for ``exlab_wizard.constants``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/__init__.py", "source_location": "L1"}], "edges": [{"source": "constants_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_constants_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/bd88efd40e699f4c1435e769d9d025d985d2ff63e7af95bacb7591a35d58bba2.json b/graphify-out/cache/ast/bd88efd40e699f4c1435e769d9d025d985d2ff63e7af95bacb7591a35d58bba2.json new file mode 100644 index 0000000..4dc84bd --- /dev/null +++ b/graphify-out/cache/ast/bd88efd40e699f4c1435e769d9d025d985d2ff63e7af95bacb7591a35d58bba2.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "label": "test_templates_page.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L1"}, {"id": "ui_test_templates_page_test_create_template_scaffolds_dir_with_manifest_and_content", "label": "test_create_template_scaffolds_dir_with_manifest_and_content()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L35"}, {"id": "ui_test_templates_page_test_create_template_strips_whitespace_from_name", "label": "test_create_template_strips_whitespace_from_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L50"}, {"id": "ui_test_templates_page_test_create_template_writes_description_into_manifest", "label": "test_create_template_writes_description_into_manifest()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L55"}, {"id": "ui_test_templates_page_test_create_run_template_records_run_scope", "label": "test_create_run_template_records_run_scope()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L69"}, {"id": "ui_test_templates_page_test_create_project_template_omits_run_scope_key", "label": "test_create_project_template_omits_run_scope_key()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L81"}, {"id": "ui_test_templates_page_test_create_template_rejects_empty_name", "label": "test_create_template_rejects_empty_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L92"}, {"id": "ui_test_templates_page_test_create_template_rejects_unknown_type", "label": "test_create_template_rejects_unknown_type()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L97"}, {"id": "ui_test_templates_page_test_create_run_template_requires_run_scope", "label": "test_create_run_template_requires_run_scope()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L102"}, {"id": "ui_test_templates_page_test_create_run_template_rejects_invalid_run_scope", "label": "test_create_run_template_rejects_invalid_run_scope()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L107"}, {"id": "ui_test_templates_page_test_create_template_rejects_duplicate_name", "label": "test_create_template_rejects_duplicate_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L112"}, {"id": "ui_test_templates_page_test_scaffolded_project_template_resolves_with_engine", "label": "test_scaffolded_project_template_resolves_with_engine()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L123"}, {"id": "ui_test_templates_page_test_scaffolded_run_template_resolves_with_engine", "label": "test_scaffolded_run_template_resolves_with_engine()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L139"}, {"id": "ui_test_templates_page_test_list_templates_returns_empty_for_missing_dir", "label": "test_list_templates_returns_empty_for_missing_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L156"}, {"id": "ui_test_templates_page_test_list_templates_returns_empty_for_dir_with_no_templates", "label": "test_list_templates_returns_empty_for_dir_with_no_templates()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L160"}, {"id": "ui_test_templates_page_test_list_templates_summarizes_each_template", "label": "test_list_templates_summarizes_each_template()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L166"}, {"id": "ui_test_templates_page_test_list_templates_is_sorted", "label": "test_list_templates_is_sorted()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L189"}, {"id": "ui_test_templates_page_test_list_templates_skips_dirs_without_manifest", "label": "test_list_templates_skips_dirs_without_manifest()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L199"}, {"id": "ui_test_templates_page_test_list_templates_filters_by_template_type", "label": "test_list_templates_filters_by_template_type()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L209"}, {"id": "ui_test_templates_page_test_list_templates_skips_malformed_manifest", "label": "test_list_templates_skips_malformed_manifest()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L225"}, {"id": "ui_test_templates_page_test_list_templates_skips_non_mapping_manifest", "label": "test_list_templates_skips_non_mapping_manifest()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L237"}, {"id": "ui_test_templates_page_rationale_1", "label": "Tests for the template-manager page helpers. ``render_template_manager`` render", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "yaml", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "exlab_wizard_api_app", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "exlab_wizard_template_copier_driver", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "exlab_wizard_ui_pages_templates", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_create_template_scaffolds_dir_with_manifest_and_content", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_create_template_strips_whitespace_from_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_create_template_writes_description_into_manifest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L55", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_create_run_template_records_run_scope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_create_project_template_omits_run_scope_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_create_template_rejects_empty_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L92", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_create_template_rejects_unknown_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L97", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_create_run_template_requires_run_scope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L102", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_create_run_template_rejects_invalid_run_scope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L107", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_create_template_rejects_duplicate_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L112", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_scaffolded_project_template_resolves_with_engine", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L123", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_scaffolded_run_template_resolves_with_engine", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L139", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_list_templates_returns_empty_for_missing_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L156", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_list_templates_returns_empty_for_dir_with_no_templates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L160", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_list_templates_summarizes_each_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L166", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_list_templates_is_sorted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L189", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_list_templates_skips_dirs_without_manifest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L199", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_list_templates_filters_by_template_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L209", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_list_templates_skips_malformed_manifest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L225", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "target": "ui_test_templates_page_test_list_templates_skips_non_mapping_manifest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L237", "weight": 1.0}, {"source": "ui_test_templates_page_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_templates_page_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_templates_page_test_create_template_scaffolds_dir_with_manifest_and_content", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L38"}, {"caller_nid": "ui_test_templates_page_test_create_template_scaffolds_dir_with_manifest_and_content", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L41"}, {"caller_nid": "ui_test_templates_page_test_create_template_scaffolds_dir_with_manifest_and_content", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L43"}, {"caller_nid": "ui_test_templates_page_test_create_template_scaffolds_dir_with_manifest_and_content", "callee": "iterdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L45"}, {"caller_nid": "ui_test_templates_page_test_create_template_scaffolds_dir_with_manifest_and_content", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L46"}, {"caller_nid": "ui_test_templates_page_test_create_template_scaffolds_dir_with_manifest_and_content", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L47"}, {"caller_nid": "ui_test_templates_page_test_create_template_strips_whitespace_from_name", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L51"}, {"caller_nid": "ui_test_templates_page_test_create_template_writes_description_into_manifest", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L58"}, {"caller_nid": "ui_test_templates_page_test_create_template_writes_description_into_manifest", "callee": "safe_load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L64"}, {"caller_nid": "ui_test_templates_page_test_create_template_writes_description_into_manifest", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L64"}, {"caller_nid": "ui_test_templates_page_test_create_run_template_records_run_scope", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L70"}, {"caller_nid": "ui_test_templates_page_test_create_run_template_records_run_scope", "callee": "safe_load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L76"}, {"caller_nid": "ui_test_templates_page_test_create_run_template_records_run_scope", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L76"}, {"caller_nid": "ui_test_templates_page_test_create_project_template_omits_run_scope_key", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L82"}, {"caller_nid": "ui_test_templates_page_test_create_project_template_omits_run_scope_key", "callee": "safe_load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L83"}, {"caller_nid": "ui_test_templates_page_test_create_project_template_omits_run_scope_key", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L83"}, {"caller_nid": "ui_test_templates_page_test_create_template_rejects_empty_name", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L93"}, {"caller_nid": "ui_test_templates_page_test_create_template_rejects_empty_name", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L94"}, {"caller_nid": "ui_test_templates_page_test_create_template_rejects_unknown_type", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L98"}, {"caller_nid": "ui_test_templates_page_test_create_template_rejects_unknown_type", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L99"}, {"caller_nid": "ui_test_templates_page_test_create_run_template_requires_run_scope", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L103"}, {"caller_nid": "ui_test_templates_page_test_create_run_template_requires_run_scope", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L104"}, {"caller_nid": "ui_test_templates_page_test_create_run_template_rejects_invalid_run_scope", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L108"}, {"caller_nid": "ui_test_templates_page_test_create_run_template_rejects_invalid_run_scope", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L109"}, {"caller_nid": "ui_test_templates_page_test_create_template_rejects_duplicate_name", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L113"}, {"caller_nid": "ui_test_templates_page_test_create_template_rejects_duplicate_name", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L114"}, {"caller_nid": "ui_test_templates_page_test_create_template_rejects_duplicate_name", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L115"}, {"caller_nid": "ui_test_templates_page_test_scaffolded_project_template_resolves_with_engine", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L126"}, {"caller_nid": "ui_test_templates_page_test_scaffolded_project_template_resolves_with_engine", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L132"}, {"caller_nid": "ui_test_templates_page_test_scaffolded_project_template_resolves_with_engine", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L132"}, {"caller_nid": "ui_test_templates_page_test_scaffolded_run_template_resolves_with_engine", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L140"}, {"caller_nid": "ui_test_templates_page_test_scaffolded_run_template_resolves_with_engine", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L146"}, {"caller_nid": "ui_test_templates_page_test_scaffolded_run_template_resolves_with_engine", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L146"}, {"caller_nid": "ui_test_templates_page_test_list_templates_returns_empty_for_missing_dir", "callee": "list_templates", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L157"}, {"caller_nid": "ui_test_templates_page_test_list_templates_returns_empty_for_dir_with_no_templates", "callee": "list_templates", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L163"}, {"caller_nid": "ui_test_templates_page_test_list_templates_summarizes_each_template", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L167"}, {"caller_nid": "ui_test_templates_page_test_list_templates_summarizes_each_template", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L168"}, {"caller_nid": "ui_test_templates_page_test_list_templates_summarizes_each_template", "callee": "list_templates", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L176"}, {"caller_nid": "ui_test_templates_page_test_list_templates_summarizes_each_template", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L179"}, {"caller_nid": "ui_test_templates_page_test_list_templates_summarizes_each_template", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L179"}, {"caller_nid": "ui_test_templates_page_test_list_templates_is_sorted", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L191"}, {"caller_nid": "ui_test_templates_page_test_list_templates_is_sorted", "callee": "list_templates", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L192"}, {"caller_nid": "ui_test_templates_page_test_list_templates_skips_dirs_without_manifest", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L200"}, {"caller_nid": "ui_test_templates_page_test_list_templates_skips_dirs_without_manifest", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L201"}, {"caller_nid": "ui_test_templates_page_test_list_templates_skips_dirs_without_manifest", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L202"}, {"caller_nid": "ui_test_templates_page_test_list_templates_skips_dirs_without_manifest", "callee": "list_templates", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L204"}, {"caller_nid": "ui_test_templates_page_test_list_templates_filters_by_template_type", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L210"}, {"caller_nid": "ui_test_templates_page_test_list_templates_filters_by_template_type", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L211"}, {"caller_nid": "ui_test_templates_page_test_list_templates_filters_by_template_type", "callee": "list_templates", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L218"}, {"caller_nid": "ui_test_templates_page_test_list_templates_filters_by_template_type", "callee": "list_templates", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L219"}, {"caller_nid": "ui_test_templates_page_test_list_templates_skips_malformed_manifest", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L226"}, {"caller_nid": "ui_test_templates_page_test_list_templates_skips_malformed_manifest", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L228"}, {"caller_nid": "ui_test_templates_page_test_list_templates_skips_malformed_manifest", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L230"}, {"caller_nid": "ui_test_templates_page_test_list_templates_skips_malformed_manifest", "callee": "list_templates", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L232"}, {"caller_nid": "ui_test_templates_page_test_list_templates_skips_non_mapping_manifest", "callee": "create_template", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L238"}, {"caller_nid": "ui_test_templates_page_test_list_templates_skips_non_mapping_manifest", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L240"}, {"caller_nid": "ui_test_templates_page_test_list_templates_skips_non_mapping_manifest", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L242"}, {"caller_nid": "ui_test_templates_page_test_list_templates_skips_non_mapping_manifest", "callee": "list_templates", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py", "source_location": "L244"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/be5526f9cfb4738898c4a046d1bcabc259134bb2b34904ff7b67b2d0906a449e.json b/graphify-out/cache/ast/be5526f9cfb4738898c4a046d1bcabc259134bb2b34904ff7b67b2d0906a449e.json new file mode 100644 index 0000000..eed6a25 --- /dev/null +++ b/graphify-out/cache/ast/be5526f9cfb4738898c4a046d1bcabc259134bb2b34904ff7b67b2d0906a449e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_storage_secret_py", "label": "storage_secret.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L1"}, {"id": "tray_storage_secret_load_or_create_storage_secret", "label": "load_or_create_storage_secret()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L31"}, {"id": "tray_storage_secret_rationale_1", "label": "Per-installation NiceGUI ``storage_secret`` token. Backend Spec \u00a715.3. NiceGUI'", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L1"}, {"id": "tray_storage_secret_rationale_32", "label": "Return the per-installation storage secret, generating it if absent. The fi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L32"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_storage_secret_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_storage_secret_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_storage_secret_py", "target": "secrets", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_storage_secret_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_storage_secret_py", "target": "exlab_wizard_io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_storage_secret_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_storage_secret_py", "target": "tray_storage_secret_load_or_create_storage_secret", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L31", "weight": 1.0}, {"source": "tray_storage_secret_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_storage_secret_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_storage_secret_rationale_32", "target": "tray_storage_secret_load_or_create_storage_secret", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L32", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_storage_secret_load_or_create_storage_secret", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L39"}, {"caller_nid": "tray_storage_secret_load_or_create_storage_secret", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L40"}, {"caller_nid": "tray_storage_secret_load_or_create_storage_secret", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L42"}, {"caller_nid": "tray_storage_secret_load_or_create_storage_secret", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L42"}, {"caller_nid": "tray_storage_secret_load_or_create_storage_secret", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L44"}, {"caller_nid": "tray_storage_secret_load_or_create_storage_secret", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L48"}, {"caller_nid": "tray_storage_secret_load_or_create_storage_secret", "callee": "token_hex", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L50"}, {"caller_nid": "tray_storage_secret_load_or_create_storage_secret", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L51"}, {"caller_nid": "tray_storage_secret_load_or_create_storage_secret", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L52"}, {"caller_nid": "tray_storage_secret_load_or_create_storage_secret", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L52"}, {"caller_nid": "tray_storage_secret_load_or_create_storage_secret", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L53"}, {"caller_nid": "tray_storage_secret_load_or_create_storage_secret", "callee": "chmod", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py", "source_location": "L54"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/bff13b61ff48374033a988c00dc037140fe522272f4374b077a369524e20366d.json b/graphify-out/cache/ast/bff13b61ff48374033a988c00dc037140fe522272f4374b077a369524e20366d.json new file mode 100644 index 0000000..e46ff3d --- /dev/null +++ b/graphify-out/cache/ast/bff13b61ff48374033a988c00dc037140fe522272f4374b077a369524e20366d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_07_sync_and_database_integration_md", "label": "07_Sync_and_Database_Integration.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L1"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_sync_and_database_integration", "label": "7. Sync and Database Integration", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L1"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", "label": "7.1 NAS Sync (Internal Module)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L7"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_1_1_component_model", "label": "7.1.1 Component model", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L13"}, {"id": "design_spec_sections_07_sync_and_database_integration_codeblock_1", "label": "code:block1 (\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L17"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_1_2_job_lifecycle", "label": "7.1.2 Job lifecycle", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L41"}, {"id": "design_spec_sections_07_sync_and_database_integration_codeblock_2", "label": "code:block2 (QUEUED \u2192 RUNNING \u2192 AWAITING_VERIFY \u2192 VERIFIED \u2192 CLEANUP_ELIG)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L45"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_1_3_transport_drivers", "label": "7.1.3 Transport drivers", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L63"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_1_4_hash_verification", "label": "7.1.4 Hash verification", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L73"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_1_5_retry_policy", "label": "7.1.5 Retry policy", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L84"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_1_6_cleanup_safety_interlocks", "label": "7.1.6 Cleanup safety interlocks", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L95"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_1_7_bandwidth_limiting", "label": "7.1.7 Bandwidth limiting", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L108"}, {"id": "design_spec_sections_07_sync_and_database_integration_codeblock_3", "label": "code:yaml (equipment:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L112"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_1_8_credential_storage", "label": "7.1.8 Credential storage", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L128"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_1_9_what_nassync_does_not_do", "label": "7.1.9 What NASSync does not do", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L132"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_1_10_cache_file_syncing_and_metadata_only_retention_on_cleanup", "label": "7.1.10 Cache file syncing and metadata-only retention on cleanup", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L139"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", "label": "7.2 LIMS Integration", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L149"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_0_empirical_facts_about_the_lims", "label": "7.2.0 Empirical facts about the LIMS", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L155"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_1_project_mapping_mapping_b_committed", "label": "7.2.1 Project mapping (Mapping B, committed)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L166"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_2_run_level_lims_integration_deferred_to_v1_x", "label": "7.2.2 Run-level LIMS integration (deferred to v1.x)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L176"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_3_limsclient_interface_v1", "label": "7.2.3 `LIMSClient` interface (v1)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L184"}, {"id": "design_spec_sections_07_sync_and_database_integration_codeblock_4", "label": "code:python (class LIMSClient:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L186"}, {"id": "design_spec_sections_07_sync_and_database_integration_codeblock_5", "label": "code:python (@dataclass(frozen=True))", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L199"}, {"id": "design_spec_sections_07_sync_and_database_integration_codeblock_6", "label": "code:python (@dataclass(frozen=True))", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L215"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_4_project_cache_and_offline_behavior", "label": "7.2.4 Project cache and offline behavior", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L229"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_5_authentication_cookie_session", "label": "7.2.5 Authentication (cookie session)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L241"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_6_asks_for_the_lims_team_deferred", "label": "7.2.6 Asks for the LIMS team (deferred)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L252"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_7_v1_x_run_level_record_specification_target", "label": "7.2.7 v1.x run-level record (specification target)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L263"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_8_what_exlab_wizard_does_not_write_to_lims_in_v1", "label": "7.2.8 What ExLab-Wizard does not write to LIMS in v1", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L293"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", "label": "7.2.9 Offline Catalogue (NAS-shared LIMS project list)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L304"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_9_1_file_location_and_format", "label": "7.2.9.1 File location and format", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L310"}, {"id": "design_spec_sections_07_sync_and_database_integration_codeblock_7", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L316"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_9_2_producer_behavior", "label": "7.2.9.2 Producer behavior", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L338"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_9_3_consumer_behavior", "label": "7.2.9.3 Consumer behavior", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L350"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_9_4_failure_modes", "label": "7.2.9.4 Failure modes", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L369"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_9_5_security_and_trust", "label": "7.2.9.5 Security and trust", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L380"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_2_9_6_out_of_scope_for_v1", "label": "7.2.9.6 Out of scope for v1", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L386"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_3_pre_sync_gate", "label": "7.3 Pre-Sync Gate", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L393"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_4_credential_storage_os_keyring", "label": "7.4 Credential Storage (OS Keyring)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L409"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_4_1_keyring_entry_naming_convention", "label": "7.4.1 Keyring entry naming convention", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L421"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_4_2_settings_ui_for_credentials", "label": "7.4.2 Settings UI for credentials", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L435"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_4_3_credential_lifecycle", "label": "7.4.3 Credential lifecycle", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L439"}, {"id": "design_spec_sections_07_sync_and_database_integration_7_4_4_fallback_when_no_keyring_backend_is_available", "label": "7.4.4 Fallback when no keyring backend is available", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L447"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_07_sync_and_database_integration_md", "target": "design_spec_sections_07_sync_and_database_integration_7_sync_and_database_integration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L1", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_sync_and_database_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L7", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", "target": "design_spec_sections_07_sync_and_database_integration_7_1_1_component_model", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L13", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_1_1_component_model", "target": "design_spec_sections_07_sync_and_database_integration_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L17", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", "target": "design_spec_sections_07_sync_and_database_integration_7_1_2_job_lifecycle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L41", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_1_2_job_lifecycle", "target": "design_spec_sections_07_sync_and_database_integration_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L45", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", "target": "design_spec_sections_07_sync_and_database_integration_7_1_3_transport_drivers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L63", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", "target": "design_spec_sections_07_sync_and_database_integration_7_1_4_hash_verification", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L73", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", "target": "design_spec_sections_07_sync_and_database_integration_7_1_5_retry_policy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L84", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", "target": "design_spec_sections_07_sync_and_database_integration_7_1_6_cleanup_safety_interlocks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L95", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", "target": "design_spec_sections_07_sync_and_database_integration_7_1_7_bandwidth_limiting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L108", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_1_7_bandwidth_limiting", "target": "design_spec_sections_07_sync_and_database_integration_codeblock_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L112", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", "target": "design_spec_sections_07_sync_and_database_integration_7_1_8_credential_storage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L128", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", "target": "design_spec_sections_07_sync_and_database_integration_7_1_9_what_nassync_does_not_do", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L132", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", "target": "design_spec_sections_07_sync_and_database_integration_7_1_10_cache_file_syncing_and_metadata_only_retention_on_cleanup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L139", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_sync_and_database_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L149", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_2_0_empirical_facts_about_the_lims", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L155", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_2_1_project_mapping_mapping_b_committed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L166", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_2_2_run_level_lims_integration_deferred_to_v1_x", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L176", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_2_3_limsclient_interface_v1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L184", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_3_limsclient_interface_v1", "target": "design_spec_sections_07_sync_and_database_integration_codeblock_4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L186", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_3_limsclient_interface_v1", "target": "design_spec_sections_07_sync_and_database_integration_codeblock_5", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L199", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_3_limsclient_interface_v1", "target": "design_spec_sections_07_sync_and_database_integration_codeblock_6", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L215", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_2_4_project_cache_and_offline_behavior", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L229", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_2_5_authentication_cookie_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L241", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_2_6_asks_for_the_lims_team_deferred", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L252", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_2_7_v1_x_run_level_record_specification_target", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L263", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_2_8_what_exlab_wizard_does_not_write_to_lims_in_v1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L293", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L304", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_1_file_location_and_format", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L310", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_9_1_file_location_and_format", "target": "design_spec_sections_07_sync_and_database_integration_codeblock_7", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L316", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_2_producer_behavior", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L338", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_3_consumer_behavior", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L350", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_4_failure_modes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L369", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_5_security_and_trust", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L380", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_6_out_of_scope_for_v1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L386", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_sync_and_database_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_3_pre_sync_gate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L393", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_sync_and_database_integration", "target": "design_spec_sections_07_sync_and_database_integration_7_4_credential_storage_os_keyring", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L409", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_4_credential_storage_os_keyring", "target": "design_spec_sections_07_sync_and_database_integration_7_4_1_keyring_entry_naming_convention", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L421", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_4_credential_storage_os_keyring", "target": "design_spec_sections_07_sync_and_database_integration_7_4_2_settings_ui_for_credentials", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L435", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_4_credential_storage_os_keyring", "target": "design_spec_sections_07_sync_and_database_integration_7_4_3_credential_lifecycle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L439", "weight": 1.0}, {"source": "design_spec_sections_07_sync_and_database_integration_7_4_credential_storage_os_keyring", "target": "design_spec_sections_07_sync_and_database_integration_7_4_4_fallback_when_no_keyring_backend_is_available", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", "source_location": "L447", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/bff5a9662e5bdb10de703834dcb1c08ca257abf3cf3aeeb72b61dd7b288993b4.json b/graphify-out/cache/ast/bff5a9662e5bdb10de703834dcb1c08ca257abf3cf3aeeb72b61dd7b288993b4.json new file mode 100644 index 0000000..939f6a1 --- /dev/null +++ b/graphify-out/cache/ast/bff5a9662e5bdb10de703834dcb1c08ca257abf3cf3aeeb72b61dd7b288993b4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_plugins_hello_plugin_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/__init__.py", "source_location": "L1"}, {"id": "hello_plugin_init_rationale_1", "label": "hello_plugin -- canonical scaffold from Backend Spec \u00a76.5. The ``Plugin`` re-ex", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_hello_plugin_init_py", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_hello_plugin_plugin_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/__init__.py", "source_location": "L7", "weight": 1.0}, {"source": "hello_plugin_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_hello_plugin_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/c00d14a1b682c32742d250eb16cc8f53122058c31566c0a1875289a52f7dac14.json b/graphify-out/cache/ast/c00d14a1b682c32742d250eb16cc8f53122058c31566c0a1875289a52f7dac14.json new file mode 100644 index 0000000..9a88e13 --- /dev/null +++ b/graphify-out/cache/ast/c00d14a1b682c32742d250eb16cc8f53122058c31566c0a1875289a52f7dac14.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/c089a4ee9d5d0dd59833432a6b49d75995d367c1273be4065f381ca5983ca18b.json b/graphify-out/cache/ast/c089a4ee9d5d0dd59833432a6b49d75995d367c1273be4065f381ca5983ca18b.json new file mode 100644 index 0000000..4831792 --- /dev/null +++ b/graphify-out/cache/ast/c089a4ee9d5d0dd59833432a6b49d75995d367c1273be4065f381ca5983ca18b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "label": "test_main.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L1"}, {"id": "window_test_main_write_server_json", "label": "_write_server_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L24"}, {"id": "window_test_main_test_read_server_handshake_returns_none_when_missing", "label": "test_read_server_handshake_returns_none_when_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L36"}, {"id": "window_test_main_test_read_server_handshake_returns_handshake", "label": "test_read_server_handshake_returns_handshake()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L40"}, {"id": "window_test_main_test_read_server_handshake_returns_none_on_invalid_json", "label": "test_read_server_handshake_returns_none_on_invalid_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L48"}, {"id": "window_test_main_test_read_server_handshake_returns_none_on_missing_keys", "label": "test_read_server_handshake_returns_none_on_missing_keys()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L53"}, {"id": "window_test_main_test_main_returns_stale_when_no_state_file", "label": "test_main_returns_stale_when_no_state_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L58"}, {"id": "window_test_main_test_main_returns_stale_on_dead_pid", "label": "test_main_returns_stale_on_dead_pid()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L67"}, {"id": "window_test_main_test_main_hands_off_with_live_state", "label": "test_main_hands_off_with_live_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L75"}, {"id": "window_test_main_test_is_pid_alive_for_self", "label": "test_is_pid_alive_for_self()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L89"}, {"id": "window_test_main_test_is_pid_alive_rejects_zero", "label": "test_is_pid_alive_rejects_zero()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L93"}, {"id": "window_test_main_test_is_pid_alive_for_dead_pid", "label": "test_is_pid_alive_for_dead_pid()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L98"}, {"id": "window_test_main_test_is_pid_alive_falls_through_to_default", "label": "test_is_pid_alive_falls_through_to_default()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L103"}, {"id": "window_test_main_test_default_state_dir_is_used", "label": "test_default_state_dir_is_used()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L117"}, {"id": "window_test_main_test_default_handoff_invokes_run_window", "label": "test_default_handoff_invokes_run_window()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L123"}, {"id": "window_test_main_test_argv_is_ignored", "label": "test_argv_is_ignored()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L139"}, {"id": "window_test_main_test_server_handshake_round_trip", "label": "test_server_handshake_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L145"}, {"id": "window_test_main_test_posix_is_pid_alive_handles_permission", "label": "test_posix_is_pid_alive_handles_permission()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L152"}, {"id": "window_test_main_test_posix_is_pid_alive_handles_dead_pid", "label": "test_posix_is_pid_alive_handles_dead_pid()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L163"}, {"id": "window_test_main_test_is_pid_alive_dispatches_to_windows", "label": "test_is_pid_alive_dispatches_to_windows()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L173"}, {"id": "window_test_main_rationale_1", "label": "Tests for :mod:`exlab_wizard.window.main`. Backend Spec \u00a715.3.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L1"}, {"id": "window_test_main_rationale_104", "label": "Default ``pid_alive`` lookup uses ``is_pid_alive``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L104"}, {"id": "window_test_main_rationale_153", "label": "A foreign-uid live PID counts as alive.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L153"}, {"id": "window_test_main_rationale_174", "label": "When sys.platform is 'win32' the windows implementation runs.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L174"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "unittest_mock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "exlab_wizard_window_main", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_write_server_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_read_server_handshake_returns_none_when_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_read_server_handshake_returns_handshake", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_read_server_handshake_returns_none_on_invalid_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_read_server_handshake_returns_none_on_missing_keys", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_main_returns_stale_when_no_state_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_main_returns_stale_on_dead_pid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_main_hands_off_with_live_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L75", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_is_pid_alive_for_self", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L89", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_is_pid_alive_rejects_zero", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_is_pid_alive_for_dead_pid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L98", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_is_pid_alive_falls_through_to_default", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L103", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_default_state_dir_is_used", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L117", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_default_handoff_invokes_run_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L123", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_argv_is_ignored", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L139", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_server_handshake_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L145", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_posix_is_pid_alive_handles_permission", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L152", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_posix_is_pid_alive_handles_dead_pid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L163", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "target": "window_test_main_test_is_pid_alive_dispatches_to_windows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L173", "weight": 1.0}, {"source": "window_test_main_test_read_server_handshake_returns_handshake", "target": "window_test_main_write_server_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L41", "weight": 1.0}, {"source": "window_test_main_test_main_returns_stale_on_dead_pid", "target": "window_test_main_write_server_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L68", "weight": 1.0}, {"source": "window_test_main_test_main_hands_off_with_live_state", "target": "window_test_main_write_server_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L76", "weight": 1.0}, {"source": "window_test_main_test_is_pid_alive_falls_through_to_default", "target": "window_test_main_write_server_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L105", "weight": 1.0}, {"source": "window_test_main_test_default_handoff_invokes_run_window", "target": "window_test_main_write_server_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L126", "weight": 1.0}, {"source": "window_test_main_test_argv_is_ignored", "target": "window_test_main_write_server_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L140", "weight": 1.0}, {"source": "window_test_main_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_window_test_main_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L1", "weight": 1.0}, {"source": "window_test_main_rationale_104", "target": "window_test_main_test_is_pid_alive_falls_through_to_default", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L104", "weight": 1.0}, {"source": "window_test_main_rationale_153", "target": "window_test_main_test_posix_is_pid_alive_handles_permission", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L153", "weight": 1.0}, {"source": "window_test_main_rationale_174", "target": "window_test_main_test_is_pid_alive_dispatches_to_windows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L174", "weight": 1.0}], "raw_calls": [{"caller_nid": "window_test_main_write_server_json", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L25"}, {"caller_nid": "window_test_main_write_server_json", "callee": "getpid", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L28"}, {"caller_nid": "window_test_main_write_server_json", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L32"}, {"caller_nid": "window_test_main_write_server_json", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L32"}, {"caller_nid": "window_test_main_test_read_server_handshake_returns_none_when_missing", "callee": "read_server_handshake", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L37"}, {"caller_nid": "window_test_main_test_read_server_handshake_returns_handshake", "callee": "read_server_handshake", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L42"}, {"caller_nid": "window_test_main_test_read_server_handshake_returns_handshake", "callee": "getpid", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L45"}, {"caller_nid": "window_test_main_test_read_server_handshake_returns_none_on_invalid_json", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L49"}, {"caller_nid": "window_test_main_test_read_server_handshake_returns_none_on_invalid_json", "callee": "read_server_handshake", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L50"}, {"caller_nid": "window_test_main_test_read_server_handshake_returns_none_on_missing_keys", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L54"}, {"caller_nid": "window_test_main_test_read_server_handshake_returns_none_on_missing_keys", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L54"}, {"caller_nid": "window_test_main_test_read_server_handshake_returns_none_on_missing_keys", "callee": "read_server_handshake", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L55"}, {"caller_nid": "window_test_main_test_main_returns_stale_when_no_state_file", "callee": "main", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L61"}, {"caller_nid": "window_test_main_test_main_returns_stale_when_no_state_file", "callee": "readouterr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L63"}, {"caller_nid": "window_test_main_test_main_returns_stale_on_dead_pid", "callee": "main", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L69"}, {"caller_nid": "window_test_main_test_main_returns_stale_on_dead_pid", "callee": "readouterr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L71"}, {"caller_nid": "window_test_main_test_main_hands_off_with_live_state", "callee": "main", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L83"}, {"caller_nid": "window_test_main_test_main_hands_off_with_live_state", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L85"}, {"caller_nid": "window_test_main_test_is_pid_alive_for_self", "callee": "is_pid_alive", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L90"}, {"caller_nid": "window_test_main_test_is_pid_alive_for_self", "callee": "getpid", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L90"}, {"caller_nid": "window_test_main_test_is_pid_alive_rejects_zero", "callee": "is_pid_alive", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L94"}, {"caller_nid": "window_test_main_test_is_pid_alive_rejects_zero", "callee": "is_pid_alive", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L95"}, {"caller_nid": "window_test_main_test_is_pid_alive_for_dead_pid", "callee": "is_pid_alive", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L100"}, {"caller_nid": "window_test_main_test_is_pid_alive_falls_through_to_default", "callee": "main", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L112"}, {"caller_nid": "window_test_main_test_default_state_dir_is_used", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L118"}, {"caller_nid": "window_test_main_test_default_state_dir_is_used", "callee": "main", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L119"}, {"caller_nid": "window_test_main_test_default_handoff_invokes_run_window", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L133"}, {"caller_nid": "window_test_main_test_default_handoff_invokes_run_window", "callee": "main", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L134"}, {"caller_nid": "window_test_main_test_argv_is_ignored", "callee": "main", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L141"}, {"caller_nid": "window_test_main_test_server_handshake_round_trip", "callee": "ServerHandshake", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L146"}, {"caller_nid": "window_test_main_test_posix_is_pid_alive_handles_permission", "callee": "skip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L155"}, {"caller_nid": "window_test_main_test_posix_is_pid_alive_handles_permission", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L159"}, {"caller_nid": "window_test_main_test_posix_is_pid_alive_handles_permission", "callee": "_posix_is_pid_alive", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L160"}, {"caller_nid": "window_test_main_test_posix_is_pid_alive_handles_dead_pid", "callee": "skip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L165"}, {"caller_nid": "window_test_main_test_posix_is_pid_alive_handles_dead_pid", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L169"}, {"caller_nid": "window_test_main_test_posix_is_pid_alive_handles_dead_pid", "callee": "_posix_is_pid_alive", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L170"}, {"caller_nid": "window_test_main_test_is_pid_alive_dispatches_to_windows", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L177"}, {"caller_nid": "window_test_main_test_is_pid_alive_dispatches_to_windows", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L178"}, {"caller_nid": "window_test_main_test_is_pid_alive_dispatches_to_windows", "callee": "is_pid_alive", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py", "source_location": "L179"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c09ae9cccfe1f51a237a41bb478297f75c1a1ed7d22b52597badbd5906cf19cd.json b/graphify-out/cache/ast/c09ae9cccfe1f51a237a41bb478297f75c1a1ed7d22b52597badbd5906cf19cd.json new file mode 100644 index 0000000..2fe5591 --- /dev/null +++ b/graphify-out/cache/ast/c09ae9cccfe1f51a237a41bb478297f75c1a1ed7d22b52597badbd5906cf19cd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "label": "main_page.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L1"}, {"id": "page_objects_main_page_mainpage", "label": "MainPage", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L15"}, {"id": "page_objects_main_page_mainpage_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L18"}, {"id": "page_objects_main_page_tree", "label": "tree()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L22"}, {"id": "page_objects_main_page_setup_incomplete_banner", "label": "setup_incomplete_banner()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L27"}, {"id": "page_objects_main_page_toolbar_new_project", "label": "toolbar_new_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L32"}, {"id": "page_objects_main_page_toolbar_new_run", "label": "toolbar_new_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L37"}, {"id": "page_objects_main_page_toolbar_new_test_run", "label": "toolbar_new_test_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L42"}, {"id": "page_objects_main_page_toolbar_settings", "label": "toolbar_settings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L47"}, {"id": "page_objects_main_page_toolbar_refresh", "label": "toolbar_refresh()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L52"}, {"id": "page_objects_main_page_toolbar_add_equipment", "label": "toolbar_add_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L57"}, {"id": "page_objects_main_page_search_box", "label": "search_box()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L62"}, {"id": "page_objects_main_page_tab_metadata", "label": "tab_metadata()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L67"}, {"id": "page_objects_main_page_tab_problems", "label": "tab_problems()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L72"}, {"id": "page_objects_main_page_toggle_right_pane", "label": "toggle_right_pane()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L77"}, {"id": "page_objects_main_page_footer_clear_verified", "label": "footer_clear_verified()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L82"}, {"id": "page_objects_main_page_footer_staging_segment", "label": "footer_staging_segment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L87"}, {"id": "page_objects_main_page_rationale_1", "label": "Page object for the main window. Frontend Spec \u00a76. Selectors target ``data-test", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L1"}, {"id": "page_objects_main_page_rationale_16", "label": "Page object for the main window. Frontend Spec \u00a76.1, \u00a76.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L16"}, {"id": "page_objects_main_page_rationale_23", "label": "The left-pane project / session tree (\u00a76.2.1).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L23"}, {"id": "page_objects_main_page_rationale_28", "label": "Banner shown while the setup gate is open (\u00a76.2.4).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L28"}, {"id": "page_objects_main_page_rationale_33", "label": "Toolbar button that opens the new-project wizard (\u00a76.2.2).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L33"}, {"id": "page_objects_main_page_rationale_38", "label": "Toolbar button that opens the new-run wizard (\u00a76.2.2).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L38"}, {"id": "page_objects_main_page_rationale_43", "label": "Toolbar button that opens the new-test-run wizard (\u00a76.2.2).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L43"}, {"id": "page_objects_main_page_rationale_48", "label": "Toolbar button that opens the settings dialog (\u00a76.2.2).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L48"}, {"id": "page_objects_main_page_rationale_53", "label": "Toolbar refresh button (\u00a76.2.2).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L53"}, {"id": "page_objects_main_page_rationale_58", "label": "Toolbar Add-Equipment button (Redesign \u00a74 / \u00a76).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L58"}, {"id": "page_objects_main_page_rationale_63", "label": "The tree search input (\u00a76.2.1).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L63"}, {"id": "page_objects_main_page_rationale_68", "label": "Metadata tab (Redesign \u00a74.4).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L68"}, {"id": "page_objects_main_page_rationale_73", "label": "Problems tab (\u00a76.2.3 / Redesign \u00a74.4).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L73"}, {"id": "page_objects_main_page_rationale_78", "label": "Right-pane collapse toggle (Redesign \u00a74).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L78"}, {"id": "page_objects_main_page_rationale_83", "label": "Footer bulk Clear-verified button (Redesign \u00a74.6).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L83"}, {"id": "page_objects_main_page_rationale_88", "label": "Footer Staging status segment (Redesign \u00a74.6).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L88"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "playwright_sync_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_mainpage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L15", "weight": 1.0}, {"source": "page_objects_main_page_mainpage", "target": "page_objects_main_page_mainpage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_tree", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_setup_incomplete_banner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_toolbar_new_project", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_toolbar_new_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_toolbar_new_test_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_toolbar_settings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_toolbar_refresh", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_toolbar_add_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_search_box", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_tab_metadata", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_tab_problems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_toggle_right_pane", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L77", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_footer_clear_verified", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L82", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "target": "page_objects_main_page_footer_staging_segment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L87", "weight": 1.0}, {"source": "page_objects_main_page_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_page_objects_main_page_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L1", "weight": 1.0}, {"source": "page_objects_main_page_rationale_16", "target": "page_objects_main_page_mainpage", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L16", "weight": 1.0}, {"source": "page_objects_main_page_rationale_23", "target": "page_objects_main_page_mainpage_tree", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L23", "weight": 1.0}, {"source": "page_objects_main_page_rationale_28", "target": "page_objects_main_page_mainpage_setup_incomplete_banner", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L28", "weight": 1.0}, {"source": "page_objects_main_page_rationale_33", "target": "page_objects_main_page_mainpage_toolbar_new_project", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L33", "weight": 1.0}, {"source": "page_objects_main_page_rationale_38", "target": "page_objects_main_page_mainpage_toolbar_new_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L38", "weight": 1.0}, {"source": "page_objects_main_page_rationale_43", "target": "page_objects_main_page_mainpage_toolbar_new_test_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L43", "weight": 1.0}, {"source": "page_objects_main_page_rationale_48", "target": "page_objects_main_page_mainpage_toolbar_settings", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L48", "weight": 1.0}, {"source": "page_objects_main_page_rationale_53", "target": "page_objects_main_page_mainpage_toolbar_refresh", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L53", "weight": 1.0}, {"source": "page_objects_main_page_rationale_58", "target": "page_objects_main_page_mainpage_toolbar_add_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L58", "weight": 1.0}, {"source": "page_objects_main_page_rationale_63", "target": "page_objects_main_page_mainpage_search_box", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L63", "weight": 1.0}, {"source": "page_objects_main_page_rationale_68", "target": "page_objects_main_page_mainpage_tab_metadata", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L68", "weight": 1.0}, {"source": "page_objects_main_page_rationale_73", "target": "page_objects_main_page_mainpage_tab_problems", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L73", "weight": 1.0}, {"source": "page_objects_main_page_rationale_78", "target": "page_objects_main_page_mainpage_toggle_right_pane", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L78", "weight": 1.0}, {"source": "page_objects_main_page_rationale_83", "target": "page_objects_main_page_mainpage_footer_clear_verified", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L83", "weight": 1.0}, {"source": "page_objects_main_page_rationale_88", "target": "page_objects_main_page_mainpage_footer_staging_segment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L88", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_objects_main_page_tree", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L24"}, {"caller_nid": "page_objects_main_page_setup_incomplete_banner", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L29"}, {"caller_nid": "page_objects_main_page_toolbar_new_project", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L34"}, {"caller_nid": "page_objects_main_page_toolbar_new_run", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L39"}, {"caller_nid": "page_objects_main_page_toolbar_new_test_run", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L44"}, {"caller_nid": "page_objects_main_page_toolbar_settings", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L49"}, {"caller_nid": "page_objects_main_page_toolbar_refresh", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L54"}, {"caller_nid": "page_objects_main_page_toolbar_add_equipment", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L59"}, {"caller_nid": "page_objects_main_page_search_box", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L64"}, {"caller_nid": "page_objects_main_page_tab_metadata", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L69"}, {"caller_nid": "page_objects_main_page_tab_problems", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L74"}, {"caller_nid": "page_objects_main_page_toggle_right_pane", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L79"}, {"caller_nid": "page_objects_main_page_footer_clear_verified", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L84"}, {"caller_nid": "page_objects_main_page_footer_staging_segment", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py", "source_location": "L89"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c0aa11307030d8525d7754285a35ee9558655cbe650092ea966f9737eec00459.json b/graphify-out/cache/ast/c0aa11307030d8525d7754285a35ee9558655cbe650092ea966f9737eec00459.json new file mode 100644 index 0000000..98ebe96 --- /dev/null +++ b/graphify-out/cache/ast/c0aa11307030d8525d7754285a35ee9558655cbe650092ea966f9737eec00459.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_plugin_guide_worked_examples_md", "label": "worked_examples.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md", "source_location": "L1"}, {"id": "plugin_guide_worked_examples_worked_examples", "label": "Worked Examples", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md", "source_location": "L1"}, {"id": "plugin_guide_worked_examples_hello_plugin", "label": "Hello plugin", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md", "source_location": "L8"}, {"id": "plugin_guide_worked_examples_xlsx_field_filler", "label": "xlsx_field_filler", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md", "source_location": "L19"}, {"id": "plugin_guide_worked_examples_docx_variable_replacer", "label": "docx_variable_replacer", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md", "source_location": "L39"}, {"id": "plugin_guide_worked_examples_where_to_look_in_the_codebase", "label": "Where to look in the codebase", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md", "source_location": "L49"}, {"id": "plugin_guide_worked_examples_codeblock_1", "label": "code:block1 (pip install -e .[plugin-examples])", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md", "source_location": "L62"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_plugin_guide_worked_examples_md", "target": "plugin_guide_worked_examples_worked_examples", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md", "source_location": "L1", "weight": 1.0}, {"source": "plugin_guide_worked_examples_worked_examples", "target": "plugin_guide_worked_examples_hello_plugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md", "source_location": "L8", "weight": 1.0}, {"source": "plugin_guide_worked_examples_worked_examples", "target": "plugin_guide_worked_examples_xlsx_field_filler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md", "source_location": "L19", "weight": 1.0}, {"source": "plugin_guide_worked_examples_worked_examples", "target": "plugin_guide_worked_examples_docx_variable_replacer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md", "source_location": "L39", "weight": 1.0}, {"source": "plugin_guide_worked_examples_worked_examples", "target": "plugin_guide_worked_examples_where_to_look_in_the_codebase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md", "source_location": "L49", "weight": 1.0}, {"source": "plugin_guide_worked_examples_where_to_look_in_the_codebase", "target": "plugin_guide_worked_examples_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md", "source_location": "L62", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/c1d03d80a653f6296e7ffa5021f0fed84b4ed8b67ae92ee68ad9f53d1bbedf28.json b/graphify-out/cache/ast/c1d03d80a653f6296e7ffa5021f0fed84b4ed8b67ae92ee68ad9f53d1bbedf28.json new file mode 100644 index 0000000..519fb42 --- /dev/null +++ b/graphify-out/cache/ast/c1d03d80a653f6296e7ffa5021f0fed84b4ed8b67ae92ee68ad9f53d1bbedf28.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "label": "test_main.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L1"}, {"id": "tray_test_main_stubserverrunner", "label": "_StubServerRunner", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L15"}, {"id": "tray_test_main_stubserverrunner_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L16"}, {"id": "tray_test_main_stubserverrunner_start", "label": ".start()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L22"}, {"id": "tray_test_main_stubserverrunner_stop", "label": ".stop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L26"}, {"id": "tray_test_main_stubwindowlauncher", "label": "_StubWindowLauncher", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L30"}, {"id": "tray_test_main_stubwindowlauncher_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L31"}, {"id": "tray_test_main_stubwindowlauncher_open", "label": ".open()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L35"}, {"id": "tray_test_main_stubwindowlauncher_close", "label": ".close()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L38"}, {"id": "tray_test_main_stubquitcoordinator", "label": "_StubQuitCoordinator", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L42"}, {"id": "tray_test_main_stubquitcoordinator_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L43"}, {"id": "tray_test_main_stubquitcoordinator_quit", "label": ".quit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L46"}, {"id": "tray_test_main_stubstatusticker", "label": "_StubStatusTicker", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L51"}, {"id": "tray_test_main_stubstatusticker_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L52"}, {"id": "tray_test_main_stubstatusticker_start", "label": ".start()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L57"}, {"id": "tray_test_main_stubstatusticker_stop", "label": ".stop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L60"}, {"id": "tray_test_main_stubstatusticker_tick_once", "label": ".tick_once()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L63"}, {"id": "tray_test_main_stubbus", "label": "_StubBus", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L68"}, {"id": "tray_test_main_stubbus_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L69"}, {"id": "tray_test_main_stubbus_cancel_all", "label": ".cancel_all()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L72"}, {"id": "tray_test_main_stubautostart", "label": "_StubAutostart", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L76"}, {"id": "tray_test_main_make_tray", "label": "_make_tray()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L80"}, {"id": "tray_test_main_test_start_server_calls_runner", "label": "test_start_server_calls_runner()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L91"}, {"id": "tray_test_main_test_open_window_delegates", "label": "test_open_window_delegates()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L98"}, {"id": "tray_test_main_test_request_quit_runs_coordinator", "label": "test_request_quit_runs_coordinator()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L104"}, {"id": "tray_test_main_test_request_quit_calls_icon_stop_when_set", "label": "test_request_quit_calls_icon_stop_when_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L110"}, {"id": "tray_test_main_test_request_quit_handles_icon_stop_error", "label": "test_request_quit_handles_icon_stop_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L118"}, {"id": "tray_test_main_test_shutdown_tears_components_down", "label": "test_shutdown_tears_components_down()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L126"}, {"id": "tray_test_main_test_run_wires_icon_and_invokes_run_loop", "label": "test_run_wires_icon_and_invokes_run_loop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L135"}, {"id": "tray_test_main_test_build_default_components", "label": "test_build_default_components()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L166"}, {"id": "tray_test_main_test_main_uses_run_helper", "label": "test_main_uses_run_helper()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L178"}, {"id": "tray_test_main_test_main_handles_keyboard_interrupt", "label": "test_main_handles_keyboard_interrupt()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L201"}, {"id": "tray_test_main_test_run_returns_one_on_icon_failure", "label": "test_run_returns_one_on_icon_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L218"}, {"id": "tray_test_main_test_request_quit_uses_running_loop_when_present", "label": "test_request_quit_uses_running_loop_when_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L232"}, {"id": "tray_test_main_test_build_default_app", "label": "test_build_default_app()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L269"}, {"id": "tray_test_main_test_build_default_components_falls_back_to_default_app", "label": "test_build_default_components_falls_back_to_default_app()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L302"}, {"id": "tray_test_main_test_parse_argv_defaults_no_smoke", "label": "test_parse_argv_defaults_no_smoke()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L314"}, {"id": "tray_test_main_test_parse_argv_smoke_flag", "label": "test_parse_argv_smoke_flag()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L323"}, {"id": "tray_test_main_test_parse_argv_no_autostart_prompt_silently_accepted", "label": "test_parse_argv_no_autostart_prompt_silently_accepted()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L331"}, {"id": "tray_test_main_test_run_smoke_starts_server_and_stops_on_signal", "label": "test_run_smoke_starts_server_and_stops_on_signal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L339"}, {"id": "tray_test_main_test_main_smoke_dispatches_to_run_smoke", "label": "test_main_smoke_dispatches_to_run_smoke()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L376"}, {"id": "tray_test_main_test_parse_argv_version_flag", "label": "test_parse_argv_version_flag()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L397"}, {"id": "tray_test_main_test_main_version_prints_version_and_exits_zero", "label": "test_main_version_prints_version_and_exits_zero()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L405"}, {"id": "tray_test_main_test_parse_argv_defaults_no_test_flags", "label": "test_parse_argv_defaults_no_test_flags()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L423"}, {"id": "tray_test_main_test_parse_argv_test_flag", "label": "test_parse_argv_test_flag()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L432"}, {"id": "tray_test_main_test_parse_argv_test_with_samples", "label": "test_parse_argv_test_with_samples()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L440"}, {"id": "tray_test_main_test_parse_argv_samples_without_test_errors", "label": "test_parse_argv_samples_without_test_errors()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L448"}, {"id": "tray_test_main_test_mode_env", "label": "test_mode_env()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L462"}, {"id": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", "label": "test_main_test_flag_sets_env_and_bootstraps_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L487"}, {"id": "tray_test_main_test_main_test_does_not_overwrite_existing_config", "label": "test_main_test_does_not_overwrite_existing_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L524"}, {"id": "tray_test_main_test_main_test_with_samples_adds_equipment", "label": "test_main_test_with_samples_adds_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L539"}, {"id": "tray_test_main_test_main_without_test_does_not_set_env", "label": "test_main_without_test_does_not_set_env()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L555"}, {"id": "tray_test_main_rationale_1", "label": "Tests for :mod:`exlab_wizard.tray.main`. Backend Spec \u00a74.3.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L1"}, {"id": "tray_test_main_rationale_179", "label": "``main()`` builds default components and calls :meth:`TrayApp.run`.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L179"}, {"id": "tray_test_main_rationale_235", "label": "``asyncio.run`` raises RuntimeError when a loop is running. The tray's ``re", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L235"}, {"id": "tray_test_main_rationale_270", "label": "``_build_default_app`` builds deps, calls ``create_app``, mounts NiceGUI.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L270"}, {"id": "tray_test_main_rationale_305", "label": "When ``app`` is None, the helper calls ``_build_default_app``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L305"}, {"id": "tray_test_main_rationale_315", "label": "No flags -> ``smoke`` is False, ``no_autostart_prompt`` is False.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L315"}, {"id": "tray_test_main_rationale_324", "label": "``--smoke`` sets the smoke flag.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L324"}, {"id": "tray_test_main_rationale_332", "label": "``--no-autostart-prompt`` is silently accepted (reserved).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L332"}, {"id": "tray_test_main_rationale_342", "label": "``_run_smoke`` boots the server, blocks on a stop event, and stops cleanly.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L342"}, {"id": "tray_test_main_rationale_379", "label": "``main([\"--smoke\"])`` calls ``_run_smoke`` instead of the icon loop.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L379"}, {"id": "tray_test_main_rationale_398", "label": "``--version`` sets the version flag.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L398"}, {"id": "tray_test_main_rationale_408", "label": "``main([\"--version\"])`` prints the package version and returns 0.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L408"}, {"id": "tray_test_main_rationale_424", "label": "No flags -> both test-mode flags are False.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L424"}, {"id": "tray_test_main_rationale_451", "label": "``--add-test-samples`` alone must be rejected via parser.error (exit 2).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L451"}, {"id": "tray_test_main_rationale_463", "label": "Sandbox ``main([\"--test\", ...])`` into ``tmp_path``. Redirects ``Path.home(", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L463"}, {"id": "tray_test_main_rationale_488", "label": "``main([\"--test\"])`` sets EXLAB_WIZARD_TEST_MODE=1 and writes a starter config.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L488"}, {"id": "tray_test_main_rationale_525", "label": "Re-running ``--test`` must preserve any edits the user made in-session.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L525"}, {"id": "tray_test_main_rationale_556", "label": "Sanity: running without --test leaves the env var unset and writes no test confi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L556"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "unittest_mock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "exlab_wizard_tray_main", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_stubserverrunner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L15", "weight": 1.0}, {"source": "tray_test_main_stubserverrunner", "target": "tray_test_main_stubserverrunner_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L16", "weight": 1.0}, {"source": "tray_test_main_stubserverrunner", "target": "tray_test_main_stubserverrunner_start", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L22", "weight": 1.0}, {"source": "tray_test_main_stubserverrunner", "target": "tray_test_main_stubserverrunner_stop", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_stubwindowlauncher", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L30", "weight": 1.0}, {"source": "tray_test_main_stubwindowlauncher", "target": "tray_test_main_stubwindowlauncher_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L31", "weight": 1.0}, {"source": "tray_test_main_stubwindowlauncher", "target": "tray_test_main_stubwindowlauncher_open", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L35", "weight": 1.0}, {"source": "tray_test_main_stubwindowlauncher", "target": "tray_test_main_stubwindowlauncher_close", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_stubquitcoordinator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L42", "weight": 1.0}, {"source": "tray_test_main_stubquitcoordinator", "target": "tray_test_main_stubquitcoordinator_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L43", "weight": 1.0}, {"source": "tray_test_main_stubquitcoordinator", "target": "tray_test_main_stubquitcoordinator_quit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_stubstatusticker", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L51", "weight": 1.0}, {"source": "tray_test_main_stubstatusticker", "target": "tray_test_main_stubstatusticker_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L52", "weight": 1.0}, {"source": "tray_test_main_stubstatusticker", "target": "tray_test_main_stubstatusticker_start", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L57", "weight": 1.0}, {"source": "tray_test_main_stubstatusticker", "target": "tray_test_main_stubstatusticker_stop", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L60", "weight": 1.0}, {"source": "tray_test_main_stubstatusticker", "target": "tray_test_main_stubstatusticker_tick_once", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_stubbus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L68", "weight": 1.0}, {"source": "tray_test_main_stubbus", "target": "tray_test_main_stubbus_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L69", "weight": 1.0}, {"source": "tray_test_main_stubbus", "target": "tray_test_main_stubbus_cancel_all", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_stubautostart", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_make_tray", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L80", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_start_server_calls_runner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L91", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_open_window_delegates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L98", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_request_quit_runs_coordinator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L104", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_request_quit_calls_icon_stop_when_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L110", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_request_quit_handles_icon_stop_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L118", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_shutdown_tears_components_down", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L126", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_run_wires_icon_and_invokes_run_loop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_build_default_components", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L166", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_main_uses_run_helper", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L178", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_main_handles_keyboard_interrupt", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L201", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_run_returns_one_on_icon_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L218", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_request_quit_uses_running_loop_when_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L232", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_build_default_app", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L269", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_build_default_components_falls_back_to_default_app", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L302", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_parse_argv_defaults_no_smoke", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L314", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_parse_argv_smoke_flag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L323", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_parse_argv_no_autostart_prompt_silently_accepted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L331", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_run_smoke_starts_server_and_stops_on_signal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L339", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_main_smoke_dispatches_to_run_smoke", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L376", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_parse_argv_version_flag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L397", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_main_version_prints_version_and_exits_zero", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L405", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_parse_argv_defaults_no_test_flags", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L423", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_parse_argv_test_flag", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L432", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_parse_argv_test_with_samples", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L440", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_parse_argv_samples_without_test_errors", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L448", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_mode_env", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L462", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L487", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_main_test_does_not_overwrite_existing_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L524", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_main_test_with_samples_adds_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L539", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "target": "tray_test_main_test_main_without_test_does_not_set_env", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L555", "weight": 1.0}, {"source": "tray_test_main_make_tray", "target": "tray_test_main_stubserverrunner", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L82", "weight": 1.0}, {"source": "tray_test_main_make_tray", "target": "tray_test_main_stubwindowlauncher", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L83", "weight": 1.0}, {"source": "tray_test_main_make_tray", "target": "tray_test_main_stubquitcoordinator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L84", "weight": 1.0}, {"source": "tray_test_main_make_tray", "target": "tray_test_main_stubstatusticker", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L85", "weight": 1.0}, {"source": "tray_test_main_make_tray", "target": "tray_test_main_stubbus", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L86", "weight": 1.0}, {"source": "tray_test_main_make_tray", "target": "tray_test_main_stubautostart", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L87", "weight": 1.0}, {"source": "tray_test_main_test_start_server_calls_runner", "target": "tray_test_main_make_tray", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L92", "weight": 1.0}, {"source": "tray_test_main_test_open_window_delegates", "target": "tray_test_main_make_tray", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L99", "weight": 1.0}, {"source": "tray_test_main_test_request_quit_runs_coordinator", "target": "tray_test_main_make_tray", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L105", "weight": 1.0}, {"source": "tray_test_main_test_request_quit_calls_icon_stop_when_set", "target": "tray_test_main_make_tray", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L111", "weight": 1.0}, {"source": "tray_test_main_test_request_quit_handles_icon_stop_error", "target": "tray_test_main_make_tray", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L119", "weight": 1.0}, {"source": "tray_test_main_test_shutdown_tears_components_down", "target": "tray_test_main_make_tray", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L127", "weight": 1.0}, {"source": "tray_test_main_test_run_wires_icon_and_invokes_run_loop", "target": "tray_test_main_make_tray", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L136", "weight": 1.0}, {"source": "tray_test_main_test_main_handles_keyboard_interrupt", "target": "tray_test_main_make_tray", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L207", "weight": 1.0}, {"source": "tray_test_main_test_run_returns_one_on_icon_failure", "target": "tray_test_main_make_tray", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L219", "weight": 1.0}, {"source": "tray_test_main_test_request_quit_uses_running_loop_when_present", "target": "tray_test_main_make_tray", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L244", "weight": 1.0}, {"source": "tray_test_main_test_mode_env", "target": "tray_test_main_make_tray", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L482", "weight": 1.0}, {"source": "tray_test_main_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_tray_test_main_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_test_main_rationale_179", "target": "tray_test_main_test_main_uses_run_helper", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L179", "weight": 1.0}, {"source": "tray_test_main_rationale_235", "target": "tray_test_main_test_request_quit_uses_running_loop_when_present", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L235", "weight": 1.0}, {"source": "tray_test_main_rationale_270", "target": "tray_test_main_test_build_default_app", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L270", "weight": 1.0}, {"source": "tray_test_main_rationale_305", "target": "tray_test_main_test_build_default_components_falls_back_to_default_app", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L305", "weight": 1.0}, {"source": "tray_test_main_rationale_315", "target": "tray_test_main_test_parse_argv_defaults_no_smoke", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L315", "weight": 1.0}, {"source": "tray_test_main_rationale_324", "target": "tray_test_main_test_parse_argv_smoke_flag", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L324", "weight": 1.0}, {"source": "tray_test_main_rationale_332", "target": "tray_test_main_test_parse_argv_no_autostart_prompt_silently_accepted", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L332", "weight": 1.0}, {"source": "tray_test_main_rationale_342", "target": "tray_test_main_test_run_smoke_starts_server_and_stops_on_signal", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L342", "weight": 1.0}, {"source": "tray_test_main_rationale_379", "target": "tray_test_main_test_main_smoke_dispatches_to_run_smoke", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L379", "weight": 1.0}, {"source": "tray_test_main_rationale_398", "target": "tray_test_main_test_parse_argv_version_flag", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L398", "weight": 1.0}, {"source": "tray_test_main_rationale_408", "target": "tray_test_main_test_main_version_prints_version_and_exits_zero", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L408", "weight": 1.0}, {"source": "tray_test_main_rationale_424", "target": "tray_test_main_test_parse_argv_defaults_no_test_flags", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L424", "weight": 1.0}, {"source": "tray_test_main_rationale_451", "target": "tray_test_main_test_parse_argv_samples_without_test_errors", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L451", "weight": 1.0}, {"source": "tray_test_main_rationale_463", "target": "tray_test_main_test_mode_env", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L463", "weight": 1.0}, {"source": "tray_test_main_rationale_488", "target": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L488", "weight": 1.0}, {"source": "tray_test_main_rationale_525", "target": "tray_test_main_test_main_test_does_not_overwrite_existing_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L525", "weight": 1.0}, {"source": "tray_test_main_rationale_556", "target": "tray_test_main_test_main_without_test_does_not_set_env", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L556", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_test_main_make_tray", "callee": "TrayApp", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L81"}, {"caller_nid": "tray_test_main_test_start_server_calls_runner", "callee": "start_server", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L93"}, {"caller_nid": "tray_test_main_test_open_window_delegates", "callee": "open_window", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L100"}, {"caller_nid": "tray_test_main_test_request_quit_runs_coordinator", "callee": "request_quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L106"}, {"caller_nid": "tray_test_main_test_request_quit_calls_icon_stop_when_set", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L112"}, {"caller_nid": "tray_test_main_test_request_quit_calls_icon_stop_when_set", "callee": "request_quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L114"}, {"caller_nid": "tray_test_main_test_request_quit_calls_icon_stop_when_set", "callee": "assert_called_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L115"}, {"caller_nid": "tray_test_main_test_request_quit_handles_icon_stop_error", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L120"}, {"caller_nid": "tray_test_main_test_request_quit_handles_icon_stop_error", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L121"}, {"caller_nid": "tray_test_main_test_request_quit_handles_icon_stop_error", "callee": "request_quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L123"}, {"caller_nid": "tray_test_main_test_shutdown_tears_components_down", "callee": "shutdown", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L128"}, {"caller_nid": "tray_test_main_test_run_wires_icon_and_invokes_run_loop", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L146"}, {"caller_nid": "tray_test_main_test_run_wires_icon_and_invokes_run_loop", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L153"}, {"caller_nid": "tray_test_main_test_build_default_components", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L168"}, {"caller_nid": "tray_test_main_test_build_default_components", "callee": "_FakeApp", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L170"}, {"caller_nid": "tray_test_main_test_build_default_components", "callee": "_build_default_components", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L171"}, {"caller_nid": "tray_test_main_test_build_default_components", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L172"}, {"caller_nid": "tray_test_main_test_main_uses_run_helper", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L182"}, {"caller_nid": "tray_test_main_test_main_uses_run_helper", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L183"}, {"caller_nid": "tray_test_main_test_main_uses_run_helper", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L192"}, {"caller_nid": "tray_test_main_test_main_uses_run_helper", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L195"}, {"caller_nid": "tray_test_main_test_main_uses_run_helper", "callee": "main", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L196"}, {"caller_nid": "tray_test_main_test_main_handles_keyboard_interrupt", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L204"}, {"caller_nid": "tray_test_main_test_main_handles_keyboard_interrupt", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L205"}, {"caller_nid": "tray_test_main_test_main_handles_keyboard_interrupt", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L207"}, {"caller_nid": "tray_test_main_test_main_handles_keyboard_interrupt", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L213"}, {"caller_nid": "tray_test_main_test_main_handles_keyboard_interrupt", "callee": "main", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L214"}, {"caller_nid": "tray_test_main_test_run_returns_one_on_icon_failure", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L221"}, {"caller_nid": "tray_test_main_test_run_returns_one_on_icon_failure", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L222"}, {"caller_nid": "tray_test_main_test_run_returns_one_on_icon_failure", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L224"}, {"caller_nid": "tray_test_main_test_run_returns_one_on_icon_failure", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L228"}, {"caller_nid": "tray_test_main_test_request_quit_uses_running_loop_when_present", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L252"}, {"caller_nid": "tray_test_main_test_request_quit_uses_running_loop_when_present", "callee": "_FakeLoop", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L263"}, {"caller_nid": "tray_test_main_test_request_quit_uses_running_loop_when_present", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L264"}, {"caller_nid": "tray_test_main_test_request_quit_uses_running_loop_when_present", "callee": "request_quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L265"}, {"caller_nid": "tray_test_main_test_build_default_app", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L273"}, {"caller_nid": "tray_test_main_test_build_default_app", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L274"}, {"caller_nid": "tray_test_main_test_build_default_app", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L285"}, {"caller_nid": "tray_test_main_test_build_default_app", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L286"}, {"caller_nid": "tray_test_main_test_build_default_app", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L290"}, {"caller_nid": "tray_test_main_test_build_default_app", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L294"}, {"caller_nid": "tray_test_main_test_build_default_app", "callee": "_build_default_app", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L296"}, {"caller_nid": "tray_test_main_test_build_default_components_falls_back_to_default_app", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L308"}, {"caller_nid": "tray_test_main_test_build_default_components_falls_back_to_default_app", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L308"}, {"caller_nid": "tray_test_main_test_build_default_components_falls_back_to_default_app", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L309"}, {"caller_nid": "tray_test_main_test_build_default_components_falls_back_to_default_app", "callee": "_build_default_components", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L310"}, {"caller_nid": "tray_test_main_test_parse_argv_defaults_no_smoke", "callee": "_parse_argv", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L318"}, {"caller_nid": "tray_test_main_test_parse_argv_smoke_flag", "callee": "_parse_argv", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L327"}, {"caller_nid": "tray_test_main_test_parse_argv_no_autostart_prompt_silently_accepted", "callee": "_parse_argv", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L335"}, {"caller_nid": "tray_test_main_test_run_smoke_starts_server_and_stops_on_signal", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L361"}, {"caller_nid": "tray_test_main_test_run_smoke_starts_server_and_stops_on_signal", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L362"}, {"caller_nid": "tray_test_main_test_run_smoke_starts_server_and_stops_on_signal", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L362"}, {"caller_nid": "tray_test_main_test_run_smoke_starts_server_and_stops_on_signal", "callee": "Event", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L366"}, {"caller_nid": "tray_test_main_test_run_smoke_starts_server_and_stops_on_signal", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L367"}, {"caller_nid": "tray_test_main_test_run_smoke_starts_server_and_stops_on_signal", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L368"}, {"caller_nid": "tray_test_main_test_run_smoke_starts_server_and_stops_on_signal", "callee": "_run_smoke", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L370"}, {"caller_nid": "tray_test_main_test_main_smoke_dispatches_to_run_smoke", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L382"}, {"caller_nid": "tray_test_main_test_main_smoke_dispatches_to_run_smoke", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L383"}, {"caller_nid": "tray_test_main_test_main_smoke_dispatches_to_run_smoke", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L391"}, {"caller_nid": "tray_test_main_test_main_smoke_dispatches_to_run_smoke", "callee": "main", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L392"}, {"caller_nid": "tray_test_main_test_parse_argv_version_flag", "callee": "_parse_argv", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L401"}, {"caller_nid": "tray_test_main_test_main_version_prints_version_and_exits_zero", "callee": "main", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L412"}, {"caller_nid": "tray_test_main_test_main_version_prints_version_and_exits_zero", "callee": "readouterr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L414"}, {"caller_nid": "tray_test_main_test_main_version_prints_version_and_exits_zero", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L415"}, {"caller_nid": "tray_test_main_test_parse_argv_defaults_no_test_flags", "callee": "_parse_argv", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L427"}, {"caller_nid": "tray_test_main_test_parse_argv_test_flag", "callee": "_parse_argv", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L435"}, {"caller_nid": "tray_test_main_test_parse_argv_test_with_samples", "callee": "_parse_argv", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L443"}, {"caller_nid": "tray_test_main_test_parse_argv_samples_without_test_errors", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L454"}, {"caller_nid": "tray_test_main_test_parse_argv_samples_without_test_errors", "callee": "_parse_argv", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L455"}, {"caller_nid": "tray_test_main_test_parse_argv_samples_without_test_errors", "callee": "readouterr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L457"}, {"caller_nid": "tray_test_main_test_mode_env", "callee": "delenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L475"}, {"caller_nid": "tray_test_main_test_mode_env", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L476"}, {"caller_nid": "tray_test_main_test_mode_env", "callee": "classmethod", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L476"}, {"caller_nid": "tray_test_main_test_mode_env", "callee": "delenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L478"}, {"caller_nid": "tray_test_main_test_mode_env", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L479"}, {"caller_nid": "tray_test_main_test_mode_env", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L481"}, {"caller_nid": "tray_test_main_test_mode_env", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L482"}, {"caller_nid": "tray_test_main_test_mode_env", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L483"}, {"caller_nid": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", "callee": "main", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L498"}, {"caller_nid": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L504"}, {"caller_nid": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L508"}, {"caller_nid": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L510"}, {"caller_nid": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L511"}, {"caller_nid": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L512"}, {"caller_nid": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L513"}, {"caller_nid": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L521"}, {"caller_nid": "tray_test_main_test_main_test_does_not_overwrite_existing_config", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L529"}, {"caller_nid": "tray_test_main_test_main_test_does_not_overwrite_existing_config", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L531"}, {"caller_nid": "tray_test_main_test_main_test_does_not_overwrite_existing_config", "callee": "main", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L533"}, {"caller_nid": "tray_test_main_test_main_test_does_not_overwrite_existing_config", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L536"}, {"caller_nid": "tray_test_main_test_main_test_with_samples_adds_equipment", "callee": "main", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L544"}, {"caller_nid": "tray_test_main_test_main_test_with_samples_adds_equipment", "callee": "load_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L546"}, {"caller_nid": "tray_test_main_test_main_test_with_samples_adds_equipment", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L547"}, {"caller_nid": "tray_test_main_test_main_without_test_does_not_set_env", "callee": "main", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L560"}, {"caller_nid": "tray_test_main_test_main_without_test_does_not_set_env", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py", "source_location": "L562"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c1e00219d81f69d17b41e0507d84fd8980bd02a669f7131a999d8fd74bdd405d.json b/graphify-out/cache/ast/c1e00219d81f69d17b41e0507d84fd8980bd02a669f7131a999d8fd74bdd405d.json new file mode 100644 index 0000000..429a74c --- /dev/null +++ b/graphify-out/cache/ast/c1e00219d81f69d17b41e0507d84fd8980bd02a669f7131a999d8fd74bdd405d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "label": "test_pywebview_app.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L1"}, {"id": "window_test_pywebview_app_hs", "label": "_hs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L20"}, {"id": "window_test_pywebview_app_test_build_window_url_uses_loopback", "label": "test_build_window_url_uses_loopback()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L24"}, {"id": "window_test_pywebview_app_test_is_debug_enabled_default", "label": "test_is_debug_enabled_default()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L28"}, {"id": "window_test_pywebview_app_test_is_debug_enabled_truthy", "label": "test_is_debug_enabled_truthy()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L34"}, {"id": "window_test_pywebview_app_test_is_debug_enabled_falsy", "label": "test_is_debug_enabled_falsy()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L40"}, {"id": "window_test_pywebview_app_test_run_window_calls_create_and_start", "label": "test_run_window_calls_create_and_start()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L45"}, {"id": "window_test_pywebview_app_test_run_window_passes_debug_when_env_var_set", "label": "test_run_window_passes_debug_when_env_var_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L64"}, {"id": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", "label": "test_run_window_with_only_create_window_uses_default_start()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L77"}, {"id": "window_test_pywebview_app_test_window_title_constant", "label": "test_window_title_constant()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L97"}, {"id": "window_test_pywebview_app_test_import_webview_returns_module", "label": "test_import_webview_returns_module()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L101"}, {"id": "window_test_pywebview_app_rationale_1", "label": "Tests for :mod:`exlab_wizard.window.pywebview_app`. Backend Spec \u00a715.3.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L1"}, {"id": "window_test_pywebview_app_rationale_80", "label": "When ``start`` is omitted the lazy import path is taken.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L80"}, {"id": "window_test_pywebview_app_rationale_102", "label": "The lazy-import helper imports ``webview`` when called.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L102"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "exlab_wizard_window_main", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "exlab_wizard_window_pywebview_app", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "window_test_pywebview_app_hs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "window_test_pywebview_app_test_build_window_url_uses_loopback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "window_test_pywebview_app_test_is_debug_enabled_default", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "window_test_pywebview_app_test_is_debug_enabled_truthy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "window_test_pywebview_app_test_is_debug_enabled_falsy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "window_test_pywebview_app_test_run_window_calls_create_and_start", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "window_test_pywebview_app_test_run_window_passes_debug_when_env_var_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L64", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L77", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "window_test_pywebview_app_test_window_title_constant", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L97", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "target": "window_test_pywebview_app_test_import_webview_returns_module", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L101", "weight": 1.0}, {"source": "window_test_pywebview_app_test_build_window_url_uses_loopback", "target": "window_test_pywebview_app_hs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L25", "weight": 1.0}, {"source": "window_test_pywebview_app_test_run_window_calls_create_and_start", "target": "window_test_pywebview_app_hs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L55", "weight": 1.0}, {"source": "window_test_pywebview_app_test_run_window_passes_debug_when_env_var_set", "target": "window_test_pywebview_app_hs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L73", "weight": 1.0}, {"source": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", "target": "window_test_pywebview_app_hs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L91", "weight": 1.0}, {"source": "window_test_pywebview_app_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_window_test_pywebview_app_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L1", "weight": 1.0}, {"source": "window_test_pywebview_app_rationale_80", "target": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L80", "weight": 1.0}, {"source": "window_test_pywebview_app_rationale_102", "target": "window_test_pywebview_app_test_import_webview_returns_module", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L102", "weight": 1.0}], "raw_calls": [{"caller_nid": "window_test_pywebview_app_hs", "callee": "ServerHandshake", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L21"}, {"caller_nid": "window_test_pywebview_app_test_build_window_url_uses_loopback", "callee": "build_window_url", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L25"}, {"caller_nid": "window_test_pywebview_app_test_is_debug_enabled_default", "callee": "delenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L29"}, {"caller_nid": "window_test_pywebview_app_test_is_debug_enabled_default", "callee": "is_debug_enabled", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L30"}, {"caller_nid": "window_test_pywebview_app_test_is_debug_enabled_truthy", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L35"}, {"caller_nid": "window_test_pywebview_app_test_is_debug_enabled_truthy", "callee": "is_debug_enabled", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L36"}, {"caller_nid": "window_test_pywebview_app_test_is_debug_enabled_falsy", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L41"}, {"caller_nid": "window_test_pywebview_app_test_is_debug_enabled_falsy", "callee": "is_debug_enabled", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L42"}, {"caller_nid": "window_test_pywebview_app_test_run_window_calls_create_and_start", "callee": "run_window", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L55"}, {"caller_nid": "window_test_pywebview_app_test_run_window_passes_debug_when_env_var_set", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L67"}, {"caller_nid": "window_test_pywebview_app_test_run_window_passes_debug_when_env_var_set", "callee": "run_window", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L73"}, {"caller_nid": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L82"}, {"caller_nid": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L86"}, {"caller_nid": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L87"}, {"caller_nid": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L90"}, {"caller_nid": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", "callee": "run_window", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L91"}, {"caller_nid": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L93"}, {"caller_nid": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L94"}, {"caller_nid": "window_test_pywebview_app_test_import_webview_returns_module", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L105"}, {"caller_nid": "window_test_pywebview_app_test_import_webview_returns_module", "callee": "setitem", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L106"}, {"caller_nid": "window_test_pywebview_app_test_import_webview_returns_module", "callee": "_import_webview", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py", "source_location": "L109"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c2aa0e24618ec920c49259f1054e4ba37795731b1a38badc0260e34204b07c6c.json b/graphify-out/cache/ast/c2aa0e24618ec920c49259f1054e4ba37795731b1a38badc0260e34204b07c6c.json new file mode 100644 index 0000000..b2740bc --- /dev/null +++ b/graphify-out/cache/ast/c2aa0e24618ec920c49259f1054e4ba37795731b1a38badc0260e34204b07c6c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "label": "_test_app.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L1"}, {"id": "e2e_test_app_teststate", "label": "TestState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L67"}, {"id": "e2e_test_app_read_query", "label": "_read_query()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L102"}, {"id": "e2e_test_app_classify_test_node", "label": "_classify_test_node()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L109"}, {"id": "e2e_test_app_seeded_metadata_payload", "label": "_seeded_metadata_payload()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L129"}, {"id": "e2e_test_app_feed_rows", "label": "_feed_rows()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L189"}, {"id": "e2e_test_app_seeded_file_entries", "label": "_seeded_file_entries()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L209"}, {"id": "e2e_test_app_build_test_app", "label": "build_test_app()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L236"}, {"id": "e2e_test_app_create_app_factory", "label": "create_app_factory()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L898"}, {"id": "e2e_test_app_rationale_1", "label": "E2E test app wiring (Phase 16 follow-up). Builds a FastAPI app via :func:`exlab", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L1"}, {"id": "e2e_test_app_rationale_68", "label": "Mutable cross-request state for the e2e harness.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L68"}, {"id": "e2e_test_app_rationale_103", "label": "Parse a request URL's query string into a multi-value mapping.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L103"}, {"id": "e2e_test_app_rationale_110", "label": "Same shape classifier the production mount uses, for seeded ids. Returns ``", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L110"}, {"id": "e2e_test_app_rationale_130", "label": "Per-node-kind hardcoded payloads the test app threads into the production re", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L130"}, {"id": "e2e_test_app_rationale_192", "label": "Return a node's feed as normalized 5-tuples. ``(name, size, sync_status, ke", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L192"}, {"id": "e2e_test_app_rationale_210", "label": "Build the centre-pane file rows the test flows assert on. Returns a default", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L210"}, {"id": "e2e_test_app_rationale_237", "label": "Construct the FastAPI app and mount the NiceGUI test surface.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L237"}, {"id": "e2e_test_app_rationale_899", "label": "uvicorn ``--factory`` entrypoint.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L899"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "urllib_parse", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "exlab_wizard_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "exlab_wizard_ui", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "exlab_wizard_ui_notifications", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L55", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "exlab_wizard_ui_pages", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L61", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "e2e_test_app_teststate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "e2e_test_app_read_query", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L102", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "e2e_test_app_classify_test_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L109", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "e2e_test_app_seeded_metadata_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L129", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "e2e_test_app_feed_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L189", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "e2e_test_app_seeded_file_entries", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L209", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "e2e_test_app_build_test_app", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L236", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "target": "e2e_test_app_create_app_factory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L898", "weight": 1.0}, {"source": "e2e_test_app_seeded_file_entries", "target": "e2e_test_app_feed_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L220", "weight": 1.0}, {"source": "e2e_test_app_build_test_app", "target": "e2e_test_app_teststate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L243", "weight": 1.0}, {"source": "e2e_test_app_create_app_factory", "target": "e2e_test_app_build_test_app", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L900", "weight": 1.0}, {"source": "e2e_test_app_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_app_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_test_app_rationale_68", "target": "e2e_test_app_teststate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L68", "weight": 1.0}, {"source": "e2e_test_app_rationale_103", "target": "e2e_test_app_read_query", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L103", "weight": 1.0}, {"source": "e2e_test_app_rationale_110", "target": "e2e_test_app_classify_test_node", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L110", "weight": 1.0}, {"source": "e2e_test_app_rationale_130", "target": "e2e_test_app_seeded_metadata_payload", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L130", "weight": 1.0}, {"source": "e2e_test_app_rationale_192", "target": "e2e_test_app_feed_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L192", "weight": 1.0}, {"source": "e2e_test_app_rationale_210", "target": "e2e_test_app_seeded_file_entries", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L210", "weight": 1.0}, {"source": "e2e_test_app_rationale_237", "target": "e2e_test_app_build_test_app", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L237", "weight": 1.0}, {"source": "e2e_test_app_rationale_899", "target": "e2e_test_app_create_app_factory", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L899", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_app_read_query", "callee": "parse_qs", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L106"}, {"caller_nid": "e2e_test_app_read_query", "callee": "split", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L106"}, {"caller_nid": "e2e_test_app_seeded_metadata_payload", "callee": "rsplit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L153"}, {"caller_nid": "e2e_test_app_seeded_metadata_payload", "callee": "split", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L164"}, {"caller_nid": "e2e_test_app_seeded_metadata_payload", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L165"}, {"caller_nid": "e2e_test_app_feed_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L198"}, {"caller_nid": "e2e_test_app_feed_rows", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L200"}, {"caller_nid": "e2e_test_app_feed_rows", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L203"}, {"caller_nid": "e2e_test_app_seeded_file_entries", "callee": "FileListEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L222"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L242"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "register_static_assets", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L249"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L254"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L280"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L461"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L485"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L507"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L529"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L580"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L630"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L740"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L785"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L818"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L849"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L875"}, {"caller_nid": "e2e_test_app_build_test_app", "callee": "run_with", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py", "source_location": "L889"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c38c16140086303461310fb09aa09409c8bf6d1638c36f5935c510c0f880a3fd.json b/graphify-out/cache/ast/c38c16140086303461310fb09aa09409c8bf6d1638c36f5935c510c0f880a3fd.json new file mode 100644 index 0000000..35e5f04 --- /dev/null +++ b/graphify-out/cache/ast/c38c16140086303461310fb09aa09409c8bf6d1638c36f5935c510c0f880a3fd.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_05_browse_view_sync_icons_py", "label": "test_flow_05_browse_view_sync_icons.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L1"}, {"id": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "label": "test_flow_05_sync_icons_render_in_tree()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L20"}, {"id": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_static_assets_serve_200", "label": "test_flow_05_sync_icons_static_assets_serve_200()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L47"}, {"id": "e2e_test_flow_05_browse_view_sync_icons_rationale_1", "label": "E2E flow 05b: per-run sync icons in the browse tree. Verifies that the project", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L1"}, {"id": "e2e_test_flow_05_browse_view_sync_icons_rationale_48", "label": "The ``/assets`` mount serves both SVGs as 200 OK.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L48"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_05_browse_view_sync_icons_py", "target": "httpx", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_05_browse_view_sync_icons_py", "target": "tests_e2e_page_objects_main_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_05_browse_view_sync_icons_py", "target": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_05_browse_view_sync_icons_py", "target": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_static_assets_serve_200", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L47", "weight": 1.0}, {"source": "e2e_test_flow_05_browse_view_sync_icons_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_05_browse_view_sync_icons_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_test_flow_05_browse_view_sync_icons_rationale_48", "target": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_static_assets_serve_200", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L48", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "MainPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L21"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L22"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L23"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L24"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L26"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L32"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L33"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L36"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L36"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L37"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L37"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L41"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "count", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L42"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L42"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_static_assets_serve_200", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L51"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_static_assets_serve_200", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L54"}, {"caller_nid": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_static_assets_serve_200", "callee": "lstrip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py", "source_location": "L54"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c3945dba187a1852f57a1b7acc8a485fe05fe2220437d7617eb8231d2cfceacf.json b/graphify-out/cache/ast/c3945dba187a1852f57a1b7acc8a485fe05fe2220437d7617eb8231d2cfceacf.json new file mode 100644 index 0000000..bbdf9c8 --- /dev/null +++ b/graphify-out/cache/ast/c3945dba187a1852f57a1b7acc8a485fe05fe2220437d7617eb8231d2cfceacf.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", "label": "bandwidth_schedule_editor.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L1"}, {"id": "components_bandwidth_schedule_editor_schedulewindow", "label": "ScheduleWindow", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L31"}, {"id": "components_bandwidth_schedule_editor_bandwidthschedule", "label": "BandwidthSchedule", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L41"}, {"id": "components_bandwidth_schedule_editor_validate_window", "label": "validate_window()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L49"}, {"id": "components_bandwidth_schedule_editor_find_overlaps", "label": "find_overlaps()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L63"}, {"id": "components_bandwidth_schedule_editor_schedule_props", "label": "schedule_props()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L81"}, {"id": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "label": "bandwidth_schedule_editor()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L101"}, {"id": "components_bandwidth_schedule_editor_rationale_1", "label": "Bandwidth schedule editor (Frontend Spec \u00a77.7.3). Lives inside the Equipment Ad", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L1"}, {"id": "components_bandwidth_schedule_editor_rationale_32", "label": "One row in the schedule table.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L32"}, {"id": "components_bandwidth_schedule_editor_rationale_42", "label": "The full editor state.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L42"}, {"id": "components_bandwidth_schedule_editor_rationale_50", "label": "Return an error string if ``window`` is invalid, else ``None``. Time string", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L50"}, {"id": "components_bandwidth_schedule_editor_rationale_64", "label": "Return pairs of indices whose Days and time ranges overlap. Pairs are retur", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L64"}, {"id": "components_bandwidth_schedule_editor_rationale_82", "label": "Compute renderable props for a :class:`BandwidthSchedule`.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L82"}, {"id": "components_bandwidth_schedule_editor_rationale_102", "label": "Build the schedule editor.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L102"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", "target": "components_bandwidth_schedule_editor_schedulewindow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", "target": "components_bandwidth_schedule_editor_bandwidthschedule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", "target": "components_bandwidth_schedule_editor_validate_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", "target": "components_bandwidth_schedule_editor_find_overlaps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", "target": "components_bandwidth_schedule_editor_schedule_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", "target": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L101", "weight": 1.0}, {"source": "components_bandwidth_schedule_editor_schedule_props", "target": "components_bandwidth_schedule_editor_validate_window", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L93", "weight": 1.0}, {"source": "components_bandwidth_schedule_editor_schedule_props", "target": "components_bandwidth_schedule_editor_find_overlaps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L97", "weight": 1.0}, {"source": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "target": "components_bandwidth_schedule_editor_schedule_props", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L104", "weight": 1.0}, {"source": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "target": "components_bandwidth_schedule_editor_validate_window", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L139", "weight": 1.0}, {"source": "components_bandwidth_schedule_editor_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L1", "weight": 1.0}, {"source": "components_bandwidth_schedule_editor_rationale_32", "target": "components_bandwidth_schedule_editor_schedulewindow", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L32", "weight": 1.0}, {"source": "components_bandwidth_schedule_editor_rationale_42", "target": "components_bandwidth_schedule_editor_bandwidthschedule", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L42", "weight": 1.0}, {"source": "components_bandwidth_schedule_editor_rationale_50", "target": "components_bandwidth_schedule_editor_validate_window", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L50", "weight": 1.0}, {"source": "components_bandwidth_schedule_editor_rationale_64", "target": "components_bandwidth_schedule_editor_find_overlaps", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L64", "weight": 1.0}, {"source": "components_bandwidth_schedule_editor_rationale_82", "target": "components_bandwidth_schedule_editor_schedule_props", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L82", "weight": 1.0}, {"source": "components_bandwidth_schedule_editor_rationale_102", "target": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L102", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_bandwidth_schedule_editor_find_overlaps", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L70"}, {"caller_nid": "components_bandwidth_schedule_editor_find_overlaps", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L71"}, {"caller_nid": "components_bandwidth_schedule_editor_find_overlaps", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L71"}, {"caller_nid": "components_bandwidth_schedule_editor_find_overlaps", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L73"}, {"caller_nid": "components_bandwidth_schedule_editor_find_overlaps", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L73"}, {"caller_nid": "components_bandwidth_schedule_editor_find_overlaps", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L77"}, {"caller_nid": "components_bandwidth_schedule_editor_schedule_props", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L89"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L110"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L110"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L110"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L112"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L112"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L119"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L119"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "radio", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L120"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "number", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L127"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L131"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L132"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L132"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L133"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L133"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L134"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L135"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L136"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L141"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L141"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L143"}, {"caller_nid": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", "source_location": "L143"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c3c1e9947d9da61ec2f1e01ab47eebf85122cebbe7a1f76a99dcab8f16208a66.json b/graphify-out/cache/ast/c3c1e9947d9da61ec2f1e01ab47eebf85122cebbe7a1f76a99dcab8f16208a66.json new file mode 100644 index 0000000..27569a2 --- /dev/null +++ b/graphify-out/cache/ast/c3c1e9947d9da61ec2f1e01ab47eebf85122cebbe7a1f76a99dcab8f16208a66.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "label": "generator.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L1"}, {"id": "readme_generator_corefields", "label": "CoreFields", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L96"}, {"id": "readme_generator_templatefielddecl", "label": "TemplateFieldDecl", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L110"}, {"id": "readme_generator_customfield", "label": "CustomField", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L128"}, {"id": "readme_generator_systemfields", "label": "SystemFields", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L140"}, {"id": "readme_generator_readmecontext", "label": "ReadmeContext", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L153"}, {"id": "readme_generator_readmegenerator", "label": "ReadmeGenerator", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L176"}, {"id": "readme_generator_readmegenerator_generate", "label": ".generate()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L179"}, {"id": "readme_generator_readmegenerator_generate_sync", "label": "._generate_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L197"}, {"id": "readme_generator_validate", "label": "_validate()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L228"}, {"id": "readme_generator_validate_core_fields", "label": "_validate_core_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L247"}, {"id": "readme_generator_reject_core_redeclaration", "label": "_reject_core_redeclaration()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L270"}, {"id": "readme_generator_validate_required_fields", "label": "_validate_required_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L283"}, {"id": "readme_generator_validate_field_id_uniqueness", "label": "_validate_field_id_uniqueness()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L298"}, {"id": "readme_generator_validate_typed_fields", "label": "_validate_typed_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L313"}, {"id": "readme_generator_check_value_type", "label": "_check_value_type()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L335"}, {"id": "readme_generator_validate_custom_field_labels", "label": "_validate_custom_field_labels()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L378"}, {"id": "readme_generator_is_present", "label": "_is_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L397"}, {"id": "readme_generator_core_fields_dict", "label": "_core_fields_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L418"}, {"id": "readme_generator_custom_fields_list", "label": "_custom_fields_list()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L422"}, {"id": "readme_generator_system_fields_dict", "label": "_system_fields_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L426"}, {"id": "readme_generator_build_front_matter", "label": "_build_front_matter()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L438"}, {"id": "readme_generator_render_readme_bytes", "label": "_render_readme_bytes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L458"}, {"id": "readme_generator_build_readme_fields", "label": "_build_readme_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L476"}, {"id": "readme_generator_rationale_1", "label": "README generator. Backend Spec \u00a710 / \u00a711.4. Renders ``README.md`` (YAML front m", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L1"}, {"id": "readme_generator_rationale_97", "label": "Mandatory core fields (User Interaction Spec \u00a72). All three are non-empty (", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L97"}, {"id": "readme_generator_rationale_111", "label": "Field declaration from a template's ``_exlab_readme.fields`` list or from ``", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L111"}, {"id": "readme_generator_rationale_129", "label": "An ad-hoc user-added field. Backend Spec \u00a710.4. Custom fields are plain str", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L129"}, {"id": "readme_generator_rationale_141", "label": "Auto-populated, non-editable system fields. Backend Spec \u00a710.6.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L141"}, {"id": "readme_generator_rationale_154", "label": "Inputs to :class:`ReadmeGenerator`. Composed by the controller. The control", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L154"}, {"id": "readme_generator_rationale_177", "label": "Renders ``README.md`` + ``readme_fields.json``. Backend Spec \u00a710.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L177"}, {"id": "readme_generator_rationale_180", "label": "Validate ``ctx``, write both files, return ``(readme, cache)``. The des", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L180"}, {"id": "readme_generator_rationale_229", "label": "Run every validation gate. Raises on the first failure. Order matches the s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L229"}, {"id": "readme_generator_rationale_319", "label": "Per-type validation. Spec \u00a710.3 type semantics. Skips fields whose value is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L319"}, {"id": "readme_generator_rationale_379", "label": "Ensure custom labels do not shadow any layer's field id. The four-layer set", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L379"}, {"id": "readme_generator_rationale_398", "label": "Return True iff ``value`` carries a non-empty piece of content. Strings are", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L398"}, {"id": "readme_generator_rationale_439", "label": "Build the ordered front matter dict for ``yaml.safe_dump``. Order matches t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L439"}, {"id": "readme_generator_rationale_459", "label": "Render the full README markdown into UTF-8 bytes. ``yaml.safe_dump`` is con", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L459"}, {"id": "readme_generator_rationale_481", "label": "Build the typed :class:`ReadmeFieldsJson` payload for the cache file.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L481"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "yaml", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "msgspec", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "exlab_wizard", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L61", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "exlab_wizard_io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L64", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L65", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_corefields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L96", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_templatefielddecl", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L110", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_customfield", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L128", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_systemfields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L140", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_readmecontext", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L153", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_readmegenerator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L176", "weight": 1.0}, {"source": "readme_generator_readmegenerator", "target": "readme_generator_readmegenerator_generate", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L179", "weight": 1.0}, {"source": "readme_generator_readmegenerator", "target": "readme_generator_readmegenerator_generate_sync", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L197", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_validate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L228", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_validate_core_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L247", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_reject_core_redeclaration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L270", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_validate_required_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L283", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_validate_field_id_uniqueness", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L298", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_validate_typed_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L313", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_check_value_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L335", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_validate_custom_field_labels", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L378", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_is_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L397", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_core_fields_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L418", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_custom_fields_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L422", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_system_fields_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L426", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_build_front_matter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L438", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_render_readme_bytes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L458", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "target": "readme_generator_build_readme_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L476", "weight": 1.0}, {"source": "readme_generator_readmegenerator_generate_sync", "target": "readme_generator_validate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L198", "weight": 1.0}, {"source": "readme_generator_readmegenerator_generate_sync", "target": "readme_generator_build_front_matter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L206", "weight": 1.0}, {"source": "readme_generator_readmegenerator_generate_sync", "target": "readme_generator_render_readme_bytes", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L207", "weight": 1.0}, {"source": "readme_generator_readmegenerator_generate_sync", "target": "readme_generator_build_readme_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L208", "weight": 1.0}, {"source": "readme_generator_validate", "target": "readme_generator_validate_core_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L236", "weight": 1.0}, {"source": "readme_generator_validate", "target": "readme_generator_reject_core_redeclaration", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L237", "weight": 1.0}, {"source": "readme_generator_validate", "target": "readme_generator_validate_required_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L239", "weight": 1.0}, {"source": "readme_generator_validate", "target": "readme_generator_validate_field_id_uniqueness", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L241", "weight": 1.0}, {"source": "readme_generator_validate", "target": "readme_generator_validate_typed_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L242", "weight": 1.0}, {"source": "readme_generator_validate", "target": "readme_generator_validate_custom_field_labels", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L244", "weight": 1.0}, {"source": "readme_generator_validate_required_fields", "target": "readme_generator_is_present", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L294", "weight": 1.0}, {"source": "readme_generator_validate_typed_fields", "target": "readme_generator_is_present", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L330", "weight": 1.0}, {"source": "readme_generator_validate_typed_fields", "target": "readme_generator_check_value_type", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L332", "weight": 1.0}, {"source": "readme_generator_build_front_matter", "target": "readme_generator_core_fields_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L450", "weight": 1.0}, {"source": "readme_generator_build_front_matter", "target": "readme_generator_custom_fields_list", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L453", "weight": 1.0}, {"source": "readme_generator_build_front_matter", "target": "readme_generator_system_fields_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L454", "weight": 1.0}, {"source": "readme_generator_build_readme_fields", "target": "readme_generator_core_fields_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L485", "weight": 1.0}, {"source": "readme_generator_build_readme_fields", "target": "readme_generator_custom_fields_list", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L488", "weight": 1.0}, {"source": "readme_generator_build_readme_fields", "target": "readme_generator_system_fields_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L489", "weight": 1.0}, {"source": "readme_generator_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_readme_generator_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L1", "weight": 1.0}, {"source": "readme_generator_rationale_97", "target": "readme_generator_corefields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L97", "weight": 1.0}, {"source": "readme_generator_rationale_111", "target": "readme_generator_templatefielddecl", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L111", "weight": 1.0}, {"source": "readme_generator_rationale_129", "target": "readme_generator_customfield", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L129", "weight": 1.0}, {"source": "readme_generator_rationale_141", "target": "readme_generator_systemfields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L141", "weight": 1.0}, {"source": "readme_generator_rationale_154", "target": "readme_generator_readmecontext", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L154", "weight": 1.0}, {"source": "readme_generator_rationale_177", "target": "readme_generator_readmegenerator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L177", "weight": 1.0}, {"source": "readme_generator_rationale_180", "target": "readme_generator_readmegenerator_generate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L180", "weight": 1.0}, {"source": "readme_generator_rationale_229", "target": "readme_generator_validate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L229", "weight": 1.0}, {"source": "readme_generator_rationale_319", "target": "readme_generator_validate_typed_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L319", "weight": 1.0}, {"source": "readme_generator_rationale_379", "target": "readme_generator_validate_custom_field_labels", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L379", "weight": 1.0}, {"source": "readme_generator_rationale_398", "target": "readme_generator_is_present", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L398", "weight": 1.0}, {"source": "readme_generator_rationale_439", "target": "readme_generator_build_front_matter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L439", "weight": 1.0}, {"source": "readme_generator_rationale_459", "target": "readme_generator_render_readme_bytes", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L459", "weight": 1.0}, {"source": "readme_generator_rationale_481", "target": "readme_generator_build_readme_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L481", "weight": 1.0}], "raw_calls": [{"caller_nid": "readme_generator_readmegenerator_generate", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L191"}, {"caller_nid": "readme_generator_readmegenerator_generate_sync", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L201"}, {"caller_nid": "readme_generator_readmegenerator_generate_sync", "callee": "cache_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L201"}, {"caller_nid": "readme_generator_readmegenerator_generate_sync", "callee": "readme_fields_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L202"}, {"caller_nid": "readme_generator_readmegenerator_generate_sync", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L204"}, {"caller_nid": "readme_generator_readmegenerator_generate_sync", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L209"}, {"caller_nid": "readme_generator_readmegenerator_generate_sync", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L211"}, {"caller_nid": "readme_generator_readmegenerator_generate_sync", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L212"}, {"caller_nid": "readme_generator_readmegenerator_generate_sync", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L214"}, {"caller_nid": "readme_generator_validate_core_fields", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L248"}, {"caller_nid": "readme_generator_validate_core_fields", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L249"}, {"caller_nid": "readme_generator_validate_core_fields", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L250"}, {"caller_nid": "readme_generator_validate_core_fields", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L253"}, {"caller_nid": "readme_generator_validate_core_fields", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L255"}, {"caller_nid": "readme_generator_validate_core_fields", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L257"}, {"caller_nid": "readme_generator_validate_core_fields", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L259"}, {"caller_nid": "readme_generator_validate_core_fields", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L260"}, {"caller_nid": "readme_generator_validate_core_fields", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L261"}, {"caller_nid": "readme_generator_validate_core_fields", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L263"}, {"caller_nid": "readme_generator_validate_core_fields", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L264"}, {"caller_nid": "readme_generator_validate_core_fields", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L266"}, {"caller_nid": "readme_generator_reject_core_redeclaration", "callee": "TemplateCoreFieldRedeclaredError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L277"}, {"caller_nid": "readme_generator_validate_required_fields", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L293"}, {"caller_nid": "readme_generator_validate_required_fields", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L295"}, {"caller_nid": "readme_generator_validate_field_id_uniqueness", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L307"}, {"caller_nid": "readme_generator_validate_typed_fields", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L325"}, {"caller_nid": "readme_generator_validate_typed_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L326"}, {"caller_nid": "readme_generator_check_value_type", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L337"}, {"caller_nid": "readme_generator_check_value_type", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L339"}, {"caller_nid": "readme_generator_check_value_type", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L342"}, {"caller_nid": "readme_generator_check_value_type", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L343"}, {"caller_nid": "readme_generator_check_value_type", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L344"}, {"caller_nid": "readme_generator_check_value_type", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L348"}, {"caller_nid": "readme_generator_check_value_type", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L349"}, {"caller_nid": "readme_generator_check_value_type", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L350"}, {"caller_nid": "readme_generator_check_value_type", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L353"}, {"caller_nid": "readme_generator_check_value_type", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L355"}, {"caller_nid": "readme_generator_check_value_type", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L360"}, {"caller_nid": "readme_generator_check_value_type", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L361"}, {"caller_nid": "readme_generator_check_value_type", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L363"}, {"caller_nid": "readme_generator_check_value_type", "callee": "parse_utc_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L366"}, {"caller_nid": "readme_generator_check_value_type", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L368"}, {"caller_nid": "readme_generator_check_value_type", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L374"}, {"caller_nid": "readme_generator_check_value_type", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L375"}, {"caller_nid": "readme_generator_check_value_type", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L375"}, {"caller_nid": "readme_generator_validate_custom_field_labels", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L386"}, {"caller_nid": "readme_generator_validate_custom_field_labels", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L387"}, {"caller_nid": "readme_generator_validate_custom_field_labels", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L388"}, {"caller_nid": "readme_generator_validate_custom_field_labels", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L391"}, {"caller_nid": "readme_generator_validate_custom_field_labels", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L393"}, {"caller_nid": "readme_generator_is_present", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L406"}, {"caller_nid": "readme_generator_is_present", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L408"}, {"caller_nid": "readme_generator_is_present", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L409"}, {"caller_nid": "readme_generator_is_present", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L409"}, {"caller_nid": "readme_generator_is_present", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L410"}, {"caller_nid": "readme_generator_system_fields_dict", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L428"}, {"caller_nid": "readme_generator_system_fields_dict", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L430"}, {"caller_nid": "readme_generator_system_fields_dict", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L431"}, {"caller_nid": "readme_generator_build_front_matter", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L451"}, {"caller_nid": "readme_generator_build_front_matter", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L452"}, {"caller_nid": "readme_generator_render_readme_bytes", "callee": "safe_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L465"}, {"caller_nid": "readme_generator_render_readme_bytes", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L473"}, {"caller_nid": "readme_generator_build_readme_fields", "callee": "ReadmeFieldsJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L482"}, {"caller_nid": "readme_generator_build_readme_fields", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L486"}, {"caller_nid": "readme_generator_build_readme_fields", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py", "source_location": "L487"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c561f3b8e7d9a799ad21dff204b7f18bb887fd0e8ec4230f4aa9aff7c3b9c154.json b/graphify-out/cache/ast/c561f3b8e7d9a799ad21dff204b7f18bb887fd0e8ec4230f4aa9aff7c3b9c154.json new file mode 100644 index 0000000..650b480 --- /dev/null +++ b/graphify-out/cache/ast/c561f3b8e7d9a799ad21dff204b7f18bb887fd0e8ec4230f4aa9aff7c3b9c154.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_smoke_py", "label": "test_smoke.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_smoke.py", "source_location": "L1"}, {"id": "e2e_test_smoke_test_root_url_responds_with_html", "label": "test_root_url_responds_with_html()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_smoke.py", "source_location": "L15"}, {"id": "e2e_test_smoke_rationale_1", "label": "E2E smoke flow. Confirms the Phase 16 e2e harness can drive a real browser agai", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_smoke.py", "source_location": "L1"}, {"id": "e2e_test_smoke_rationale_16", "label": "Smoke: navigate to / and confirm the e2e harness is wired up. The Phase 16", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_smoke.py", "source_location": "L16"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_smoke_py", "target": "e2e_test_smoke_test_root_url_responds_with_html", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_smoke.py", "source_location": "L15", "weight": 1.0}, {"source": "e2e_test_smoke_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_smoke_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_smoke.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_test_smoke_rationale_16", "target": "e2e_test_smoke_test_root_url_responds_with_html", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_smoke.py", "source_location": "L16", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_smoke_test_root_url_responds_with_html", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_smoke.py", "source_location": "L25"}, {"caller_nid": "e2e_test_smoke_test_root_url_responds_with_html", "callee": "title", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_smoke.py", "source_location": "L26"}, {"caller_nid": "e2e_test_smoke_test_root_url_responds_with_html", "callee": "inner_html", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_smoke.py", "source_location": "L28"}, {"caller_nid": "e2e_test_smoke_test_root_url_responds_with_html", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_smoke.py", "source_location": "L29"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c5b1a48e199e8af7aecc3a82029a8fdb91667faa67d8a2a5b1f92fd085dcc71e.json b/graphify-out/cache/ast/c5b1a48e199e8af7aecc3a82029a8fdb91667faa67d8a2a5b1f92fd085dcc71e.json new file mode 100644 index 0000000..ba755ac --- /dev/null +++ b/graphify-out/cache/ast/c5b1a48e199e8af7aecc3a82029a8fdb91667faa67d8a2a5b1f92fd085dcc71e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "label": "staging.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L1"}, {"id": "pages_staging_stagingdockstate", "label": "StagingDockState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L86"}, {"id": "pages_staging_format_bytes", "label": "format_bytes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L106"}, {"id": "pages_staging_format_elapsed", "label": "format_elapsed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L126"}, {"id": "pages_staging_state_pill_props", "label": "state_pill_props()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L142"}, {"id": "pages_staging_row_props", "label": "row_props()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L158"}, {"id": "pages_staging_run_label", "label": "_run_label()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L177"}, {"id": "pages_staging_render_staging_dock", "label": "render_staging_dock()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L189"}, {"id": "pages_staging_invoke", "label": "_invoke()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L309"}, {"id": "pages_staging_rationale_1", "label": "Orchestrator staging panel (Frontend Spec \u00a73.9, Backend \u00a713.8). A bottom-dock p", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L1"}, {"id": "pages_staging_rationale_87", "label": "Render state for the staging panel. ``rows`` is the list of staging rows pu", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L87"}, {"id": "pages_staging_rationale_107", "label": "Render ``value`` as a binary unit string (KiB / MiB / ...). Returns a compa", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L107"}, {"id": "pages_staging_rationale_127", "label": "Render ``seconds`` as a compact \"Hh Mm Ss\" / \"Mm Ss\" / \"Ss\" string.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L127"}, {"id": "pages_staging_rationale_143", "label": "Static badge props for a staging-state pill. Returns ``{label, color, backg", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L143"}, {"id": "pages_staging_rationale_159", "label": "Render-ready dict for one table row. Exposed for unit tests so the pure for", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L159"}, {"id": "pages_staging_rationale_178", "label": "Return the leaf segment of ``run_path`` for the Run column.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L178"}, {"id": "pages_staging_rationale_190", "label": "Render the bottom-dock staging panel. Returns the NiceGUI element when the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L190"}, {"id": "pages_staging_rationale_310", "label": "Best-effort invoke a callback; ignore None so unit tests stay simple.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L310"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "exlab_wizard_orchestrator_staging_query", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "pages_staging_stagingdockstate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L86", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "pages_staging_format_bytes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L106", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "pages_staging_format_elapsed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L126", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "pages_staging_state_pill_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L142", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "pages_staging_row_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L158", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "pages_staging_run_label", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L177", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "pages_staging_render_staging_dock", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L189", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "target": "pages_staging_invoke", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L309", "weight": 1.0}, {"source": "pages_staging_row_props", "target": "pages_staging_state_pill_props", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L166", "weight": 1.0}, {"source": "pages_staging_row_props", "target": "pages_staging_run_label", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L168", "weight": 1.0}, {"source": "pages_staging_row_props", "target": "pages_staging_format_bytes", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L171", "weight": 1.0}, {"source": "pages_staging_row_props", "target": "pages_staging_format_elapsed", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L172", "weight": 1.0}, {"source": "pages_staging_render_staging_dock", "target": "pages_staging_row_props", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L203", "weight": 1.0}, {"source": "pages_staging_render_staging_dock", "target": "pages_staging_invoke", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L228", "weight": 1.0}, {"source": "pages_staging_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_staging_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L1", "weight": 1.0}, {"source": "pages_staging_rationale_87", "target": "pages_staging_stagingdockstate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L87", "weight": 1.0}, {"source": "pages_staging_rationale_107", "target": "pages_staging_format_bytes", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L107", "weight": 1.0}, {"source": "pages_staging_rationale_127", "target": "pages_staging_format_elapsed", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L127", "weight": 1.0}, {"source": "pages_staging_rationale_143", "target": "pages_staging_state_pill_props", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L143", "weight": 1.0}, {"source": "pages_staging_rationale_159", "target": "pages_staging_row_props", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L159", "weight": 1.0}, {"source": "pages_staging_rationale_178", "target": "pages_staging_run_label", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L178", "weight": 1.0}, {"source": "pages_staging_rationale_190", "target": "pages_staging_render_staging_dock", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L190", "weight": 1.0}, {"source": "pages_staging_rationale_310", "target": "pages_staging_invoke", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L310", "weight": 1.0}], "raw_calls": [{"caller_nid": "pages_staging_format_bytes", "callee": "float", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L116"}, {"caller_nid": "pages_staging_format_bytes", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L118"}, {"caller_nid": "pages_staging_format_bytes", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L122"}, {"caller_nid": "pages_staging_format_elapsed", "callee": "divmod", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L132"}, {"caller_nid": "pages_staging_format_elapsed", "callee": "divmod", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L135"}, {"caller_nid": "pages_staging_format_elapsed", "callee": "divmod", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L138"}, {"caller_nid": "pages_staging_state_pill_props", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L150"}, {"caller_nid": "pages_staging_run_label", "callee": "rsplit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L181"}, {"caller_nid": "pages_staging_run_label", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L181"}, {"caller_nid": "pages_staging_run_label", "callee": "replace", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L181"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L207"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L207"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L207"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L217"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L217"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L217"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L218"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L218"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "space", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L224"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "sum", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L225"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L226"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L226"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L226"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L235"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L235"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L235"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L244"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L244"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L251"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L254"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L254"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L254"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L254"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L261"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "badge", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L261"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L266"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L266"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L271"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L271"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L276"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L276"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L276"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L281"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L281"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L286"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L286"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L291"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L291"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L292"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L292"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L296"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L296"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "disable", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L301"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L302"}, {"caller_nid": "pages_staging_render_staging_dock", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L302"}, {"caller_nid": "pages_staging_invoke", "callee": "handler", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py", "source_location": "L313"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c5cfc55f7d6c7af348317f7255f7fe343a426ff681d70b208e323dba89407678.json b/graphify-out/cache/ast/c5cfc55f7d6c7af348317f7255f7fe343a426ff681d70b208e323dba89407678.json new file mode 100644 index 0000000..53b3e89 --- /dev/null +++ b/graphify-out/cache/ast/c5cfc55f7d6c7af348317f7255f7fe343a426ff681d70b208e323dba89407678.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_io_test_yaml_files_py", "label": "test_yaml_files.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L1"}, {"id": "io_test_yaml_files_test_load_yaml_manifest_returns_dict", "label": "test_load_yaml_manifest_returns_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L13"}, {"id": "io_test_yaml_files_test_load_yaml_manifest_empty_file_returns_empty_dict", "label": "test_load_yaml_manifest_empty_file_returns_empty_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L19"}, {"id": "io_test_yaml_files_test_load_yaml_manifest_non_dict_returns_empty_dict", "label": "test_load_yaml_manifest_non_dict_returns_empty_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L25"}, {"id": "io_test_yaml_files_test_load_yaml_manifest_propagates_yaml_error", "label": "test_load_yaml_manifest_propagates_yaml_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L32"}, {"id": "io_test_yaml_files_test_load_yaml_manifest_missing_file_raises", "label": "test_load_yaml_manifest_missing_file_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L39"}, {"id": "io_test_yaml_files_rationale_1", "label": "Tests for ``exlab_wizard.io.yaml_files``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L1"}, {"id": "io_test_yaml_files_rationale_26", "label": "A YAML file with a top-level scalar/list is not a manifest.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L26"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_io_test_yaml_files_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_yaml_files_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_yaml_files_py", "target": "yaml", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_yaml_files_py", "target": "exlab_wizard_io_yaml_files", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_yaml_files_py", "target": "io_test_yaml_files_test_load_yaml_manifest_returns_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_yaml_files_py", "target": "io_test_yaml_files_test_load_yaml_manifest_empty_file_returns_empty_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_yaml_files_py", "target": "io_test_yaml_files_test_load_yaml_manifest_non_dict_returns_empty_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_yaml_files_py", "target": "io_test_yaml_files_test_load_yaml_manifest_propagates_yaml_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_io_test_yaml_files_py", "target": "io_test_yaml_files_test_load_yaml_manifest_missing_file_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L39", "weight": 1.0}, {"source": "io_test_yaml_files_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_io_test_yaml_files_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L1", "weight": 1.0}, {"source": "io_test_yaml_files_rationale_26", "target": "io_test_yaml_files_test_load_yaml_manifest_non_dict_returns_empty_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L26", "weight": 1.0}], "raw_calls": [{"caller_nid": "io_test_yaml_files_test_load_yaml_manifest_returns_dict", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L15"}, {"caller_nid": "io_test_yaml_files_test_load_yaml_manifest_returns_dict", "callee": "load_yaml_manifest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L16"}, {"caller_nid": "io_test_yaml_files_test_load_yaml_manifest_empty_file_returns_empty_dict", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L21"}, {"caller_nid": "io_test_yaml_files_test_load_yaml_manifest_empty_file_returns_empty_dict", "callee": "load_yaml_manifest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L22"}, {"caller_nid": "io_test_yaml_files_test_load_yaml_manifest_non_dict_returns_empty_dict", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L28"}, {"caller_nid": "io_test_yaml_files_test_load_yaml_manifest_non_dict_returns_empty_dict", "callee": "load_yaml_manifest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L29"}, {"caller_nid": "io_test_yaml_files_test_load_yaml_manifest_propagates_yaml_error", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L34"}, {"caller_nid": "io_test_yaml_files_test_load_yaml_manifest_propagates_yaml_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L35"}, {"caller_nid": "io_test_yaml_files_test_load_yaml_manifest_propagates_yaml_error", "callee": "load_yaml_manifest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L36"}, {"caller_nid": "io_test_yaml_files_test_load_yaml_manifest_missing_file_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L40"}, {"caller_nid": "io_test_yaml_files_test_load_yaml_manifest_missing_file_raises", "callee": "load_yaml_manifest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py", "source_location": "L41"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c66341cdf3b228813e0ac6b4b1c5c9f4b1b73f97172b4e1813a3aaea988a07ab.json b/graphify-out/cache/ast/c66341cdf3b228813e0ac6b4b1c5c9f4b1b73f97172b4e1813a3aaea988a07ab.json new file mode 100644 index 0000000..f56d9d0 --- /dev/null +++ b/graphify-out/cache/ast/c66341cdf3b228813e0ac6b4b1c5c9f4b1b73f97172b4e1813a3aaea988a07ab.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/__init__.py", "source_location": "L1"}, {"id": "constants_init_rationale_1", "label": "Public re-exports for the ``exlab_wizard.constants`` package. Callers should im", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_init_py", "target": "exlab_wizard_constants_app", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/__init__.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_init_py", "target": "exlab_wizard_constants_enums", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/__init__.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_init_py", "target": "exlab_wizard_constants_filenames", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/__init__.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_init_py", "target": "exlab_wizard_constants_keyring", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/__init__.py", "source_location": "L68", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_init_py", "target": "exlab_wizard_constants_limits", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/__init__.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_init_py", "target": "exlab_wizard_constants_patterns", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/__init__.py", "source_location": "L104", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_init_py", "target": "exlab_wizard_constants_schema_versions", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/__init__.py", "source_location": "L139", "weight": 1.0}, {"source": "constants_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_constants_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/c676c06bcfd2abd5c9408555b4e4d563f38606b41453fe5524f3aeb7e6302523.json b/graphify-out/cache/ast/c676c06bcfd2abd5c9408555b4e4d563f38606b41453fe5524f3aeb7e6302523.json new file mode 100644 index 0000000..8b33e92 --- /dev/null +++ b/graphify-out/cache/ast/c676c06bcfd2abd5c9408555b4e4d563f38606b41453fe5524f3aeb7e6302523.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "label": "test_errors.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L1"}, {"id": "api_test_errors_bare_request", "label": "_bare_request()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L33"}, {"id": "api_test_errors_test_build_envelope_includes_required_fields", "label": "test_build_envelope_includes_required_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L45"}, {"id": "api_test_errors_test_build_envelope_drops_optional_fields_when_absent", "label": "test_build_envelope_drops_optional_fields_when_absent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L64"}, {"id": "api_test_errors_test_unknown_code_falls_back_to_internal_error", "label": "test_unknown_code_falls_back_to_internal_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L70"}, {"id": "api_test_errors_test_extract_trace_id_uses_header_when_present", "label": "test_extract_trace_id_uses_header_when_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L75"}, {"id": "api_test_errors_test_extract_trace_id_generates_when_missing", "label": "test_extract_trace_id_generates_when_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L87"}, {"id": "api_test_errors_test_error_response_sets_trace_id_header", "label": "test_error_response_sets_trace_id_header()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L93"}, {"id": "api_test_errors_test_required_codes_are_registered", "label": "test_required_codes_are_registered()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L105"}, {"id": "api_test_errors_test_register_exception_handlers_catches_exlab_validation", "label": "test_register_exception_handlers_catches_exlab_validation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L129"}, {"id": "api_test_errors_pydanticbody", "label": "_PydanticBody", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L147"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "api_test_errors_test_register_exception_handlers_catches_pydantic_validation", "label": "test_register_exception_handlers_catches_pydantic_validation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L154"}, {"id": "api_test_errors_test_register_exception_handlers_catches_keyring_error", "label": "test_register_exception_handlers_catches_keyring_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L170"}, {"id": "api_test_errors_test_register_exception_handlers_catches_schema_major_mismatch", "label": "test_register_exception_handlers_catches_schema_major_mismatch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L184"}, {"id": "api_test_errors_test_register_exception_handlers_catches_setup_incomplete", "label": "test_register_exception_handlers_catches_setup_incomplete()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L199"}, {"id": "api_test_errors_test_register_exception_handlers_catches_config_error", "label": "test_register_exception_handlers_catches_config_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L217"}, {"id": "api_test_errors_test_register_exception_handlers_catches_template_load_error", "label": "test_register_exception_handlers_catches_template_load_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L231"}, {"id": "api_test_errors_test_register_exception_handlers_catches_template_core_field_redeclared", "label": "test_register_exception_handlers_catches_template_core_field_redeclared()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L245"}, {"id": "api_test_errors_test_generic_handler_returns_internal_error", "label": "test_generic_handler_returns_internal_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L259"}, {"id": "api_test_errors_rationale_1", "label": "Unit tests for the ``exlab_wizard.api.errors`` envelope helpers.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L1"}, {"id": "api_test_errors_rationale_34", "label": "Build a minimal Starlette Request for handler tests.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L34"}, {"id": "api_test_errors_rationale_106", "label": "Every code in \u00a74.6.3's table must be in :data:`ERROR_CODES`.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L106"}, {"id": "api_test_errors_rationale_148", "label": "Module-level body class so FastAPI treats ``body: _PydanticBody`` as a JSON", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L148"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "fastapi_testclient", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "starlette_requests", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "exlab_wizard_api_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_bare_request", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_build_envelope_includes_required_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_build_envelope_drops_optional_fields_when_absent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L64", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_unknown_code_falls_back_to_internal_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L70", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_extract_trace_id_uses_header_when_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L75", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_extract_trace_id_generates_when_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L87", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_error_response_sets_trace_id_header", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_required_codes_are_registered", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L105", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_register_exception_handlers_catches_exlab_validation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L129", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_pydanticbody", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L147", "weight": 1.0}, {"source": "api_test_errors_pydanticbody", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L147", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_register_exception_handlers_catches_pydantic_validation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L154", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_register_exception_handlers_catches_keyring_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L170", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_register_exception_handlers_catches_schema_major_mismatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L184", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_register_exception_handlers_catches_setup_incomplete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L199", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_register_exception_handlers_catches_config_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L217", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_register_exception_handlers_catches_template_load_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L231", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_register_exception_handlers_catches_template_core_field_redeclared", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L245", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "target": "api_test_errors_test_generic_handler_returns_internal_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L259", "weight": 1.0}, {"source": "api_test_errors_test_extract_trace_id_generates_when_missing", "target": "api_test_errors_bare_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L88", "weight": 1.0}, {"source": "api_test_errors_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_api_test_errors_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L1", "weight": 1.0}, {"source": "api_test_errors_rationale_34", "target": "api_test_errors_bare_request", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L34", "weight": 1.0}, {"source": "api_test_errors_rationale_106", "target": "api_test_errors_test_required_codes_are_registered", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L106", "weight": 1.0}, {"source": "api_test_errors_rationale_148", "target": "api_test_errors_pydanticbody", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L148", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_test_errors_bare_request", "callee": "Request", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L42"}, {"caller_nid": "api_test_errors_test_build_envelope_includes_required_fields", "callee": "build_error_envelope", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L46"}, {"caller_nid": "api_test_errors_test_build_envelope_drops_optional_fields_when_absent", "callee": "build_error_envelope", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L65"}, {"caller_nid": "api_test_errors_test_unknown_code_falls_back_to_internal_error", "callee": "build_error_envelope", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L71"}, {"caller_nid": "api_test_errors_test_extract_trace_id_uses_header_when_present", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L80"}, {"caller_nid": "api_test_errors_test_extract_trace_id_uses_header_when_present", "callee": "lower", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L80"}, {"caller_nid": "api_test_errors_test_extract_trace_id_uses_header_when_present", "callee": "Request", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L83"}, {"caller_nid": "api_test_errors_test_extract_trace_id_uses_header_when_present", "callee": "extract_or_create_trace_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L84"}, {"caller_nid": "api_test_errors_test_extract_trace_id_generates_when_missing", "callee": "extract_or_create_trace_id", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L89"}, {"caller_nid": "api_test_errors_test_extract_trace_id_generates_when_missing", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L90"}, {"caller_nid": "api_test_errors_test_error_response_sets_trace_id_header", "callee": "error_response", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L94"}, {"caller_nid": "api_test_errors_test_error_response_sets_trace_id_header", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L101"}, {"caller_nid": "api_test_errors_test_error_response_sets_trace_id_header", "callee": "bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L101"}, {"caller_nid": "api_test_errors_test_required_codes_are_registered", "callee": "issubset", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L126"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_exlab_validation", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L130"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_exlab_validation", "callee": "register_exception_handlers", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L131"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_exlab_validation", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L133"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_exlab_validation", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L139"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_exlab_validation", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L140"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_exlab_validation", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L142"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_pydantic_validation", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L155"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_pydantic_validation", "callee": "register_exception_handlers", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L156"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_pydantic_validation", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L158"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_pydantic_validation", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L162"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_pydantic_validation", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L163"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_pydantic_validation", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L165"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_keyring_error", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L171"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_keyring_error", "callee": "register_exception_handlers", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L172"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_keyring_error", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L174"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_keyring_error", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L178"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_keyring_error", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L179"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_keyring_error", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L181"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_schema_major_mismatch", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L185"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_schema_major_mismatch", "callee": "register_exception_handlers", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L186"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_schema_major_mismatch", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L188"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_schema_major_mismatch", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L192"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_schema_major_mismatch", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L193"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_schema_major_mismatch", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L194"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_setup_incomplete", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L200"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_setup_incomplete", "callee": "register_exception_handlers", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L201"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_setup_incomplete", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L203"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_setup_incomplete", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L209"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_setup_incomplete", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L210"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_setup_incomplete", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L212"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_config_error", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L218"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_config_error", "callee": "register_exception_handlers", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L219"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_config_error", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L221"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_config_error", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L225"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_config_error", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L226"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_config_error", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L228"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_template_load_error", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L232"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_template_load_error", "callee": "register_exception_handlers", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L233"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_template_load_error", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L235"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_template_load_error", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L239"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_template_load_error", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L240"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_template_load_error", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L242"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_template_core_field_redeclared", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L246"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_template_core_field_redeclared", "callee": "register_exception_handlers", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L247"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_template_core_field_redeclared", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L249"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_template_core_field_redeclared", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L253"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_template_core_field_redeclared", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L254"}, {"caller_nid": "api_test_errors_test_register_exception_handlers_catches_template_core_field_redeclared", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L255"}, {"caller_nid": "api_test_errors_test_generic_handler_returns_internal_error", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L260"}, {"caller_nid": "api_test_errors_test_generic_handler_returns_internal_error", "callee": "register_exception_handlers", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L261"}, {"caller_nid": "api_test_errors_test_generic_handler_returns_internal_error", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L263"}, {"caller_nid": "api_test_errors_test_generic_handler_returns_internal_error", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L270"}, {"caller_nid": "api_test_errors_test_generic_handler_returns_internal_error", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L271"}, {"caller_nid": "api_test_errors_test_generic_handler_returns_internal_error", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py", "source_location": "L273"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c6d78c468b45618f3d0010b66a1d0f113eddb4d3c807b37da1f6b36ebe924844.json b/graphify-out/cache/ast/c6d78c468b45618f3d0010b66a1d0f113eddb4d3c807b37da1f6b36ebe924844.json new file mode 100644 index 0000000..92bac5e --- /dev/null +++ b/graphify-out/cache/ast/c6d78c468b45618f3d0010b66a1d0f113eddb4d3c807b37da1f6b36ebe924844.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "label": "test_findings.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L1"}, {"id": "validator_test_findings_make_finding", "label": "_make_finding()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L23"}, {"id": "validator_test_findings_test_finding_instantiation_with_all_fields", "label": "test_finding_instantiation_with_all_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L45"}, {"id": "validator_test_findings_test_finding_minimum_required_fields", "label": "test_finding_minimum_required_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L58"}, {"id": "validator_test_findings_test_finding_is_frozen", "label": "test_finding_is_frozen()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L74"}, {"id": "validator_test_findings_test_to_dict_contains_all_spec_keys", "label": "test_to_dict_contains_all_spec_keys()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L86"}, {"id": "validator_test_findings_test_to_dict_values_match_field_values", "label": "test_to_dict_values_match_field_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L103"}, {"id": "validator_test_findings_test_to_dict_from_dict_round_trip_identity", "label": "test_to_dict_from_dict_round_trip_identity()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L113"}, {"id": "validator_test_findings_test_from_dict_accepts_minimal_payload", "label": "test_from_dict_accepts_minimal_payload()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L119"}, {"id": "validator_test_findings_test_from_dict_ignores_unknown_keys", "label": "test_from_dict_ignores_unknown_keys()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L135"}, {"id": "validator_test_findings_test_to_dict_preserves_none_matched_token", "label": "test_to_dict_preserves_none_matched_token()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L149"}, {"id": "validator_test_findings_test_finding_is_hashable", "label": "test_finding_is_hashable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L169"}, {"id": "validator_test_findings_test_findings_in_set_dedupe_by_value", "label": "test_findings_in_set_dedupe_by_value()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L176"}, {"id": "validator_test_findings_test_findings_in_set_distinguish_by_value", "label": "test_findings_in_set_distinguish_by_value()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L184"}, {"id": "validator_test_findings_test_findings_can_be_sorted_by_to_dict_key", "label": "test_findings_can_be_sorted_by_to_dict_key()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L198"}, {"id": "validator_test_findings_test_findings_sort_by_tier_then_rule_then_path", "label": "test_findings_sort_by_tier_then_rule_then_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L206"}, {"id": "validator_test_findings_test_equality_with_same_field_values", "label": "test_equality_with_same_field_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L224"}, {"id": "validator_test_findings_test_inequality_when_one_field_differs", "label": "test_inequality_when_one_field_differs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L230"}, {"id": "validator_test_findings_test_finding_equality_is_not_identity", "label": "test_finding_equality_is_not_identity()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L236"}, {"id": "validator_test_findings_test_audit_mode_flags_round_trip", "label": "test_audit_mode_flags_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L243"}, {"id": "validator_test_findings_rationale_1", "label": "Unit tests for ``exlab_wizard.validator.findings``. The :class:`Finding` datacl", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L1"}, {"id": "validator_test_findings_rationale_24", "label": "Return a canonical Finding matching the \u00a711.8 example payload.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L24"}, {"id": "validator_test_findings_rationale_59", "label": "The five non-default fields are required; the rest default.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L59"}, {"id": "validator_test_findings_rationale_75", "label": "Findings are frozen so they can be hashed / put in sets.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L75"}, {"id": "validator_test_findings_rationale_120", "label": "Optional fields default if missing from the payload.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L120"}, {"id": "validator_test_findings_rationale_136", "label": "Unknown keys in a future-minor payload are not lethal.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L136"}, {"id": "validator_test_findings_rationale_150", "label": "``matched_token`` of ``None`` survives the round-trip as ``None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L150"}, {"id": "validator_test_findings_rationale_177", "label": "Two findings with identical field values collapse in a set.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L177"}, {"id": "validator_test_findings_rationale_185", "label": "Different field values produce distinct set entries.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L185"}, {"id": "validator_test_findings_rationale_199", "label": "Findings sort lexicographically when keyed by their dict shape.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L199"}, {"id": "validator_test_findings_rationale_207", "label": "The expected three-key sort produces hard-first ordering.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L207"}, {"id": "validator_test_findings_rationale_244", "label": "The audit-mode-only flags (synced_under_prior_policy / override_active) surv", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L244"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "exlab_wizard_validator_findings", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_make_finding", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_finding_instantiation_with_all_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_finding_minimum_required_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_finding_is_frozen", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L74", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_to_dict_contains_all_spec_keys", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L86", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_to_dict_values_match_field_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L103", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_to_dict_from_dict_round_trip_identity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L113", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_from_dict_accepts_minimal_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L119", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_from_dict_ignores_unknown_keys", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_to_dict_preserves_none_matched_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L149", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_finding_is_hashable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L169", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_findings_in_set_dedupe_by_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L176", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_findings_in_set_distinguish_by_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L184", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_findings_can_be_sorted_by_to_dict_key", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L198", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_findings_sort_by_tier_then_rule_then_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L206", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_equality_with_same_field_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L224", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_inequality_when_one_field_differs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L230", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_finding_equality_is_not_identity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L236", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "target": "validator_test_findings_test_audit_mode_flags_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L243", "weight": 1.0}, {"source": "validator_test_findings_test_finding_instantiation_with_all_fields", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L46", "weight": 1.0}, {"source": "validator_test_findings_test_finding_is_frozen", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L76", "weight": 1.0}, {"source": "validator_test_findings_test_to_dict_contains_all_spec_keys", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L87", "weight": 1.0}, {"source": "validator_test_findings_test_to_dict_values_match_field_values", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L104", "weight": 1.0}, {"source": "validator_test_findings_test_to_dict_from_dict_round_trip_identity", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L114", "weight": 1.0}, {"source": "validator_test_findings_test_finding_is_hashable", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L170", "weight": 1.0}, {"source": "validator_test_findings_test_findings_in_set_dedupe_by_value", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L178", "weight": 1.0}, {"source": "validator_test_findings_test_findings_in_set_distinguish_by_value", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L187", "weight": 1.0}, {"source": "validator_test_findings_test_findings_can_be_sorted_by_to_dict_key", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L200", "weight": 1.0}, {"source": "validator_test_findings_test_findings_sort_by_tier_then_rule_then_path", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L208", "weight": 1.0}, {"source": "validator_test_findings_test_equality_with_same_field_values", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L225", "weight": 1.0}, {"source": "validator_test_findings_test_inequality_when_one_field_differs", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L231", "weight": 1.0}, {"source": "validator_test_findings_test_finding_equality_is_not_identity", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L237", "weight": 1.0}, {"source": "validator_test_findings_test_audit_mode_flags_round_trip", "target": "validator_test_findings_make_finding", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L247", "weight": 1.0}, {"source": "validator_test_findings_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_validator_test_findings_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L1", "weight": 1.0}, {"source": "validator_test_findings_rationale_24", "target": "validator_test_findings_make_finding", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L24", "weight": 1.0}, {"source": "validator_test_findings_rationale_59", "target": "validator_test_findings_test_finding_minimum_required_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L59", "weight": 1.0}, {"source": "validator_test_findings_rationale_75", "target": "validator_test_findings_test_finding_is_frozen", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L75", "weight": 1.0}, {"source": "validator_test_findings_rationale_120", "target": "validator_test_findings_test_from_dict_accepts_minimal_payload", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L120", "weight": 1.0}, {"source": "validator_test_findings_rationale_136", "target": "validator_test_findings_test_from_dict_ignores_unknown_keys", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L136", "weight": 1.0}, {"source": "validator_test_findings_rationale_150", "target": "validator_test_findings_test_to_dict_preserves_none_matched_token", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L150", "weight": 1.0}, {"source": "validator_test_findings_rationale_177", "target": "validator_test_findings_test_findings_in_set_dedupe_by_value", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L177", "weight": 1.0}, {"source": "validator_test_findings_rationale_185", "target": "validator_test_findings_test_findings_in_set_distinguish_by_value", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L185", "weight": 1.0}, {"source": "validator_test_findings_rationale_199", "target": "validator_test_findings_test_findings_can_be_sorted_by_to_dict_key", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L199", "weight": 1.0}, {"source": "validator_test_findings_rationale_207", "target": "validator_test_findings_test_findings_sort_by_tier_then_rule_then_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L207", "weight": 1.0}, {"source": "validator_test_findings_rationale_244", "target": "validator_test_findings_test_audit_mode_flags_round_trip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L244", "weight": 1.0}], "raw_calls": [{"caller_nid": "validator_test_findings_make_finding", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L36"}, {"caller_nid": "validator_test_findings_make_finding", "callee": "Finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L37"}, {"caller_nid": "validator_test_findings_test_finding_minimum_required_fields", "callee": "Finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L60"}, {"caller_nid": "validator_test_findings_test_finding_is_frozen", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L77"}, {"caller_nid": "validator_test_findings_test_to_dict_contains_all_spec_keys", "callee": "to_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L88"}, {"caller_nid": "validator_test_findings_test_to_dict_contains_all_spec_keys", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L100"}, {"caller_nid": "validator_test_findings_test_to_dict_values_match_field_values", "callee": "to_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L105"}, {"caller_nid": "validator_test_findings_test_to_dict_from_dict_round_trip_identity", "callee": "from_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L115"}, {"caller_nid": "validator_test_findings_test_to_dict_from_dict_round_trip_identity", "callee": "to_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L115"}, {"caller_nid": "validator_test_findings_test_from_dict_accepts_minimal_payload", "callee": "from_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L128"}, {"caller_nid": "validator_test_findings_test_from_dict_ignores_unknown_keys", "callee": "from_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L145"}, {"caller_nid": "validator_test_findings_test_to_dict_preserves_none_matched_token", "callee": "Finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L151"}, {"caller_nid": "validator_test_findings_test_to_dict_preserves_none_matched_token", "callee": "to_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L159"}, {"caller_nid": "validator_test_findings_test_to_dict_preserves_none_matched_token", "callee": "from_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L161"}, {"caller_nid": "validator_test_findings_test_finding_is_hashable", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L173"}, {"caller_nid": "validator_test_findings_test_finding_is_hashable", "callee": "hash", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L173"}, {"caller_nid": "validator_test_findings_test_findings_in_set_dedupe_by_value", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L181"}, {"caller_nid": "validator_test_findings_test_findings_in_set_distinguish_by_value", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L190"}, {"caller_nid": "validator_test_findings_test_findings_can_be_sorted_by_to_dict_key", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L202"}, {"caller_nid": "validator_test_findings_test_findings_sort_by_tier_then_rule_then_path", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L215"}, {"caller_nid": "validator_test_findings_test_audit_mode_flags_round_trip", "callee": "from_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L248"}, {"caller_nid": "validator_test_findings_test_audit_mode_flags_round_trip", "callee": "to_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py", "source_location": "L248"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c6f25fddd40f87e5a927b6362d45621e3ddf18cbdf8786369d8a6e8eca3b9f8d.json b/graphify-out/cache/ast/c6f25fddd40f87e5a927b6362d45621e3ddf18cbdf8786369d8a6e8eca3b9f8d.json new file mode 100644 index 0000000..1dc617b --- /dev/null +++ b/graphify-out/cache/ast/c6f25fddd40f87e5a927b6362d45621e3ddf18cbdf8786369d8a6e8eca3b9f8d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "label": "test_pyinstaller_smoke.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L1"}, {"id": "integration_test_pyinstaller_smoke_test_tray_main_imports", "label": "test_tray_main_imports()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L61"}, {"id": "integration_test_pyinstaller_smoke_test_window_main_imports", "label": "test_window_main_imports()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L71"}, {"id": "integration_test_pyinstaller_smoke_test_cli_main_imports", "label": "test_cli_main_imports()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L77"}, {"id": "integration_test_pyinstaller_smoke_test_version_exposed_and_well_formed", "label": "test_version_exposed_and_well_formed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L91"}, {"id": "integration_test_pyinstaller_smoke_test_version_matches_pyproject", "label": "test_version_matches_pyproject()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L105"}, {"id": "integration_test_pyinstaller_smoke_test_pyproject_scripts_match_expected", "label": "test_pyproject_scripts_match_expected()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L123"}, {"id": "integration_test_pyinstaller_smoke_test_spec_file_is_valid_python", "label": "test_spec_file_is_valid_python()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L138"}, {"id": "integration_test_pyinstaller_smoke_test_spec_references_entry_executable", "label": "test_spec_references_entry_executable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L150"}, {"id": "integration_test_pyinstaller_smoke_test_spec_references_entry_script", "label": "test_spec_references_entry_script()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L164"}, {"id": "integration_test_pyinstaller_smoke_test_spec_uses_merge_directive", "label": "test_spec_uses_merge_directive()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L174"}, {"id": "integration_test_pyinstaller_smoke_test_spec_lists_required_hidden_imports", "label": "test_spec_lists_required_hidden_imports()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L189"}, {"id": "integration_test_pyinstaller_smoke_test_spec_declares_macos_bundle_identifier", "label": "test_spec_declares_macos_bundle_identifier()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L198"}, {"id": "integration_test_pyinstaller_smoke_test_workflow_is_valid_yaml", "label": "test_workflow_is_valid_yaml()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L209"}, {"id": "integration_test_pyinstaller_smoke_test_workflow_matrix_lists_all_v1_targets", "label": "test_workflow_matrix_lists_all_v1_targets()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L218"}, {"id": "integration_test_pyinstaller_smoke_test_workflow_runs_pyinstaller_and_smoke", "label": "test_workflow_runs_pyinstaller_and_smoke()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L227"}, {"id": "integration_test_pyinstaller_smoke_test_internal_templates_dir_exists", "label": "test_internal_templates_dir_exists()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L246"}, {"id": "integration_test_pyinstaller_smoke_test_internal_plugins_dir_exists", "label": "test_internal_plugins_dir_exists()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L252"}, {"id": "integration_test_pyinstaller_smoke_test_local_build_scripts_exist", "label": "test_local_build_scripts_exist()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L263"}, {"id": "integration_test_pyinstaller_smoke_test_workflow_does_not_run_on_branch_push", "label": "test_workflow_does_not_run_on_branch_push()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L283"}, {"id": "integration_test_pyinstaller_smoke_test_workflow_pull_request_targets_main_only", "label": "test_workflow_pull_request_targets_main_only()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L299"}, {"id": "integration_test_pyinstaller_smoke_test_workflow_concurrency_cancels_in_progress", "label": "test_workflow_concurrency_cancels_in_progress()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L310"}, {"id": "integration_test_pyinstaller_smoke_rationale_1", "label": "Structural smoke tests for the PyInstaller distribution. Phase 15. The actual `", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L1"}, {"id": "integration_test_pyinstaller_smoke_rationale_62", "label": "``exlab_wizard.tray.main:main`` must import cleanly. PyInstaller's static a", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L62"}, {"id": "integration_test_pyinstaller_smoke_rationale_72", "label": "``exlab_wizard.window.main:main`` must import cleanly.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L72"}, {"id": "integration_test_pyinstaller_smoke_rationale_78", "label": "``exlab_wizard.__main__:main`` must import cleanly. This is the operator-fa", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L78"}, {"id": "integration_test_pyinstaller_smoke_rationale_92", "label": "``exlab_wizard.__version__`` is a non-empty SemVer string. Backend Spec \u00a715", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L92"}, {"id": "integration_test_pyinstaller_smoke_rationale_106", "label": "``__version__`` mirrors ``[project] version`` in ``pyproject.toml``. Drift", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L106"}, {"id": "integration_test_pyinstaller_smoke_rationale_124", "label": "``[project.scripts]`` lists exactly the three \u00a715.3 entry points.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L124"}, {"id": "integration_test_pyinstaller_smoke_rationale_139", "label": "``exlab_wizard.spec`` parses as Python source. The file is interpreted by P", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L139"}, {"id": "integration_test_pyinstaller_smoke_rationale_151", "label": "The spec names each of the three \u00a715.1 executables.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L151"}, {"id": "integration_test_pyinstaller_smoke_rationale_165", "label": "The spec names the three entry-point script paths. PyInstaller resolves the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L165"}, {"id": "integration_test_pyinstaller_smoke_rationale_175", "label": "The spec uses PyInstaller's ``MERGE`` directive (Backend Spec \u00a715.1). ``MER", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L175"}, {"id": "integration_test_pyinstaller_smoke_rationale_190", "label": "The spec declares hidden imports for libs PyInstaller misses. Backend Spec", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L190"}, {"id": "integration_test_pyinstaller_smoke_rationale_199", "label": "The spec sets the macOS ``CFBundleIdentifier`` (\u00a715.1).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L199"}, {"id": "integration_test_pyinstaller_smoke_rationale_210", "label": "``.github/workflows/build.yml`` parses as YAML.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L210"}, {"id": "integration_test_pyinstaller_smoke_rationale_219", "label": "The matrix covers the three v1 runners (Linux, Windows, mac arm64).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L219"}, {"id": "integration_test_pyinstaller_smoke_rationale_228", "label": "The workflow runs ``pyinstaller exlab_wizard.spec`` and a version probe. Ba", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L228"}, {"id": "integration_test_pyinstaller_smoke_rationale_247", "label": "``_internal/templates/`` is checked into the repo (\u00a715.4).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L247"}, {"id": "integration_test_pyinstaller_smoke_rationale_253", "label": "``_internal/plugins/`` is checked into the repo (\u00a715.4).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L253"}, {"id": "integration_test_pyinstaller_smoke_rationale_264", "label": "Both POSIX and Windows wrappers are committed. These mirror the CI build st", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L264"}, {"id": "integration_test_pyinstaller_smoke_rationale_284", "label": "Build matrix is reserved for the merge gate, not every branch push. Branch", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L284"}, {"id": "integration_test_pyinstaller_smoke_rationale_300", "label": "``pull_request`` is gated on ``main`` so PRs to other branches don't run.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L300"}, {"id": "integration_test_pyinstaller_smoke_rationale_311", "label": "Superseded runs on the same ref are auto-cancelled. Without ``cancel-in-pro", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L311"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "ast", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "importlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "tomllib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "yaml", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_tray_main_imports", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L61", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_window_main_imports", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L71", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_cli_main_imports", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L77", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_version_exposed_and_well_formed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L91", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_version_matches_pyproject", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L105", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_pyproject_scripts_match_expected", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L123", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_spec_file_is_valid_python", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L138", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_spec_references_entry_executable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L150", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_spec_references_entry_script", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L164", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_spec_uses_merge_directive", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L174", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_spec_lists_required_hidden_imports", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L189", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_spec_declares_macos_bundle_identifier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L198", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_workflow_is_valid_yaml", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L209", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_workflow_matrix_lists_all_v1_targets", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L218", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_workflow_runs_pyinstaller_and_smoke", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L227", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_internal_templates_dir_exists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L246", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_internal_plugins_dir_exists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L252", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_local_build_scripts_exist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L263", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_workflow_does_not_run_on_branch_push", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L283", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_workflow_pull_request_targets_main_only", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L299", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "target": "integration_test_pyinstaller_smoke_test_workflow_concurrency_cancels_in_progress", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L310", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_1", "target": "users_alex_projects_exlabwizard_tests_integration_test_pyinstaller_smoke_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L1", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_62", "target": "integration_test_pyinstaller_smoke_test_tray_main_imports", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L62", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_72", "target": "integration_test_pyinstaller_smoke_test_window_main_imports", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L72", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_78", "target": "integration_test_pyinstaller_smoke_test_cli_main_imports", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L78", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_92", "target": "integration_test_pyinstaller_smoke_test_version_exposed_and_well_formed", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L92", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_106", "target": "integration_test_pyinstaller_smoke_test_version_matches_pyproject", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L106", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_124", "target": "integration_test_pyinstaller_smoke_test_pyproject_scripts_match_expected", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L124", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_139", "target": "integration_test_pyinstaller_smoke_test_spec_file_is_valid_python", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L139", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_151", "target": "integration_test_pyinstaller_smoke_test_spec_references_entry_executable", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L151", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_165", "target": "integration_test_pyinstaller_smoke_test_spec_references_entry_script", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L165", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_175", "target": "integration_test_pyinstaller_smoke_test_spec_uses_merge_directive", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L175", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_190", "target": "integration_test_pyinstaller_smoke_test_spec_lists_required_hidden_imports", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L190", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_199", "target": "integration_test_pyinstaller_smoke_test_spec_declares_macos_bundle_identifier", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L199", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_210", "target": "integration_test_pyinstaller_smoke_test_workflow_is_valid_yaml", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L210", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_219", "target": "integration_test_pyinstaller_smoke_test_workflow_matrix_lists_all_v1_targets", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L219", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_228", "target": "integration_test_pyinstaller_smoke_test_workflow_runs_pyinstaller_and_smoke", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L228", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_247", "target": "integration_test_pyinstaller_smoke_test_internal_templates_dir_exists", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L247", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_253", "target": "integration_test_pyinstaller_smoke_test_internal_plugins_dir_exists", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L253", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_264", "target": "integration_test_pyinstaller_smoke_test_local_build_scripts_exist", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L264", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_284", "target": "integration_test_pyinstaller_smoke_test_workflow_does_not_run_on_branch_push", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L284", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_300", "target": "integration_test_pyinstaller_smoke_test_workflow_pull_request_targets_main_only", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L300", "weight": 1.0}, {"source": "integration_test_pyinstaller_smoke_rationale_311", "target": "integration_test_pyinstaller_smoke_test_workflow_concurrency_cancels_in_progress", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L311", "weight": 1.0}], "raw_calls": [{"caller_nid": "integration_test_pyinstaller_smoke_test_tray_main_imports", "callee": "import_module", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L67"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_tray_main_imports", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L68"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_tray_main_imports", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L68"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_window_main_imports", "callee": "import_module", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L73"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_window_main_imports", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L74"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_window_main_imports", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L74"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_cli_main_imports", "callee": "import_module", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L82"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_cli_main_imports", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L83"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_cli_main_imports", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L83"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_version_exposed_and_well_formed", "callee": "import_module", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L97"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_version_exposed_and_well_formed", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L98"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_version_exposed_and_well_formed", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L99"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_version_exposed_and_well_formed", "callee": "fullmatch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L100"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_version_matches_pyproject", "callee": "import_module", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L112"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_version_matches_pyproject", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L113"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_version_matches_pyproject", "callee": "load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L114"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_pyproject_scripts_match_expected", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L125"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_pyproject_scripts_match_expected", "callee": "load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L126"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_spec_file_is_valid_python", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L144"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_spec_file_is_valid_python", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L145"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_spec_file_is_valid_python", "callee": "parse", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L146"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_spec_file_is_valid_python", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L146"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_spec_references_entry_executable", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L152"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_spec_references_entry_script", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L170"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_spec_uses_merge_directive", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L181"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_spec_lists_required_hidden_imports", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L194"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_spec_declares_macos_bundle_identifier", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L200"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_is_valid_yaml", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L211"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_is_valid_yaml", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L212"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_is_valid_yaml", "callee": "safe_load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L213"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_is_valid_yaml", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L214"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_matrix_lists_all_v1_targets", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L220"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_matrix_lists_all_v1_targets", "callee": "safe_load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L221"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_runs_pyinstaller_and_smoke", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L235"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_internal_templates_dir_exists", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L248"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_internal_templates_dir_exists", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L249"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_internal_plugins_dir_exists", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L254"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_internal_plugins_dir_exists", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L255"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_local_build_scripts_exist", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L271"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_local_build_scripts_exist", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L272"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_local_build_scripts_exist", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L275"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_does_not_run_on_branch_push", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L290"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_does_not_run_on_branch_push", "callee": "safe_load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L291"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_pull_request_targets_main_only", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L301"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_pull_request_targets_main_only", "callee": "safe_load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L302"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_pull_request_targets_main_only", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L305"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_pull_request_targets_main_only", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L306"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_concurrency_cancels_in_progress", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L317"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_concurrency_cancels_in_progress", "callee": "safe_load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L318"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_concurrency_cancels_in_progress", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L319"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_concurrency_cancels_in_progress", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L321"}, {"caller_nid": "integration_test_pyinstaller_smoke_test_workflow_concurrency_cancels_in_progress", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py", "source_location": "L325"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/c6f3fbd466c11742e82f4acc17b86bbbcbe092dab5f4c9773a95c235a29d524f.json b/graphify-out/cache/ast/c6f3fbd466c11742e82f4acc17b86bbbcbe092dab5f4c9773a95c235a29d524f.json new file mode 100644 index 0000000..07dfbc1 --- /dev/null +++ b/graphify-out/cache/ast/c6f3fbd466c11742e82f4acc17b86bbbcbe092dab5f4c9773a95c235a29d524f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/__init__.py", "source_location": "L1"}, {"id": "tray_init_rationale_1", "label": "Tray application package. Backend Spec \u00a74.3.2. Public API: * :class:`Autostart", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_init_py", "target": "exlab_wizard_tray_autostart", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/__init__.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_init_py", "target": "exlab_wizard_tray_icon", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/__init__.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_init_py", "target": "exlab_wizard_tray_main", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/__init__.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_init_py", "target": "exlab_wizard_tray_notifications", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/__init__.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_init_py", "target": "exlab_wizard_tray_quit_coordinator", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/__init__.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_init_py", "target": "exlab_wizard_tray_server_runner", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/__init__.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_init_py", "target": "exlab_wizard_tray_status", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/__init__.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_init_py", "target": "exlab_wizard_tray_window_launcher", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/__init__.py", "source_location": "L31", "weight": 1.0}, {"source": "tray_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/c965dd8fed3e571410077da1071f8dc0885c0aeeb6a5e30193db89146298f3ba.json b/graphify-out/cache/ast/c965dd8fed3e571410077da1071f8dc0885c0aeeb6a5e30193db89146298f3ba.json new file mode 100644 index 0000000..fb6b2bd --- /dev/null +++ b/graphify-out/cache/ast/c965dd8fed3e571410077da1071f8dc0885c0aeeb6a5e30193db89146298f3ba.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/__init__.py", "source_location": "L1"}, {"id": "lims_init_rationale_1", "label": "LIMS integration package. Backend Spec \u00a77.2 + \u00a77.4. Public surface: - :class:`", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_init_py", "target": "exlab_wizard_lims_cache", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/__init__.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_init_py", "target": "exlab_wizard_lims_catalogue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/__init__.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_init_py", "target": "exlab_wizard_lims_client", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/__init__.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_init_py", "target": "exlab_wizard_lims_keyring_store", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/__init__.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_init_py", "target": "exlab_wizard_lims_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/__init__.py", "source_location": "L19", "weight": 1.0}, {"source": "lims_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/c9e5534cbcedc29c8b3a12c0ad39c2c4a2e3edc9265a806b45ebb1d3843f452e.json b/graphify-out/cache/ast/c9e5534cbcedc29c8b3a12c0ad39c2c4a2e3edc9265a806b45ebb1d3843f452e.json new file mode 100644 index 0000000..53a793b --- /dev/null +++ b/graphify-out/cache/ast/c9e5534cbcedc29c8b3a12c0ad39c2c4a2e3edc9265a806b45ebb1d3843f452e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_policy_violation_plugin_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/__init__.py", "source_location": "L1"}, {"id": "policy_violation_plugin_init_rationale_1", "label": "policy_violation_plugin -- writes to a forbidden path (Backend Spec \u00a76.1.5).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_policy_violation_plugin_init_py", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_policy_violation_plugin_plugin_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/__init__.py", "source_location": "L3", "weight": 1.0}, {"source": "policy_violation_plugin_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_policy_violation_plugin_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/cd274a1b39c2bb74250ddb1f59e2bf63110adca15ba382f03ce9900064d39f7e.json b/graphify-out/cache/ast/cd274a1b39c2bb74250ddb1f59e2bf63110adca15ba382f03ce9900064d39f7e.json new file mode 100644 index 0000000..dd34707 --- /dev/null +++ b/graphify-out/cache/ast/cd274a1b39c2bb74250ddb1f59e2bf63110adca15ba382f03ce9900064d39f7e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_timeout_plugin_plugin_py", "label": "plugin.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L1"}, {"id": "timeout_plugin_plugin_timeoutplugin", "label": "TimeoutPlugin", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L19"}, {"id": "plugin", "label": "Plugin", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "timeout_plugin_plugin_timeoutplugin_can_handle", "label": ".can_handle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L27"}, {"id": "timeout_plugin_plugin_timeoutplugin_transform", "label": ".transform()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L30"}, {"id": "timeout_plugin_plugin_rationale_1", "label": "timeout_plugin -- exercises Backend Spec \u00a76.3.4 timeout enforcement. The plugin", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L1"}, {"id": "timeout_plugin_plugin_rationale_20", "label": "Hang past the declared timeout. Never reaches its file write.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L20"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_timeout_plugin_plugin_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_timeout_plugin_plugin_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_timeout_plugin_plugin_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_timeout_plugin_plugin_py", "target": "exlab_wizard_plugins", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_timeout_plugin_plugin_py", "target": "timeout_plugin_plugin_timeoutplugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L19", "weight": 1.0}, {"source": "timeout_plugin_plugin_timeoutplugin", "target": "plugin", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L19", "weight": 1.0}, {"source": "timeout_plugin_plugin_timeoutplugin", "target": "timeout_plugin_plugin_timeoutplugin_can_handle", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L27", "weight": 1.0}, {"source": "timeout_plugin_plugin_timeoutplugin", "target": "timeout_plugin_plugin_timeoutplugin_transform", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L30", "weight": 1.0}, {"source": "timeout_plugin_plugin_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_timeout_plugin_plugin_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L1", "weight": 1.0}, {"source": "timeout_plugin_plugin_rationale_20", "target": "timeout_plugin_plugin_timeoutplugin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L20", "weight": 1.0}], "raw_calls": [{"caller_nid": "timeout_plugin_plugin_timeoutplugin_transform", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L34"}, {"caller_nid": "timeout_plugin_plugin_timeoutplugin_transform", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L35"}, {"caller_nid": "timeout_plugin_plugin_timeoutplugin_transform", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", "source_location": "L36"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/ce88a182e305a27e28f8a9c5a7e7026a2e01163b926b84697af9cc39cb223cc6.json b/graphify-out/cache/ast/ce88a182e305a27e28f8a9c5a7e7026a2e01163b926b84697af9cc39cb223cc6.json new file mode 100644 index 0000000..976ed12 --- /dev/null +++ b/graphify-out/cache/ast/ce88a182e305a27e28f8a9c5a7e7026a2e01163b926b84697af9cc39cb223cc6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "label": "equipment.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L1"}, {"id": "cache_equipment_equipmentcachewriter", "label": "EquipmentCacheWriter", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L63"}, {"id": "cache_equipment_equipmentcachewriter_write_equipment", "label": ".write_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L73"}, {"id": "cache_equipment_equipmentcachewriter_read_equipment", "label": ".read_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L91"}, {"id": "cache_equipment_equipmentcachewriter_write_test_runs_marker", "label": ".write_test_runs_marker()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L106"}, {"id": "cache_equipment_write_equipment_sync", "label": "_write_equipment_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L127"}, {"id": "cache_equipment_read_equipment_sync", "label": "_read_equipment_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L151"}, {"id": "cache_equipment_equipmentcachewriter_read_test_runs_marker", "label": ".read_test_runs_marker()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L154"}, {"id": "cache_equipment_read_test_runs_marker_sync", "label": "_read_test_runs_marker_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L163"}, {"id": "cache_equipment_write_test_runs_marker_sync", "label": "_write_test_runs_marker_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L167"}, {"id": "cache_equipment_read_existing_first_seen_at", "label": "_read_existing_first_seen_at()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L183"}, {"id": "cache_equipment_rationale_1", "label": "Writer for ``equipment.json`` (registry) and ``test_runs.json`` (marker). Backe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L1"}, {"id": "cache_equipment_rationale_64", "label": "Writer for ``equipment.json`` and ``test_runs.json``. Instances are statele", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L64"}, {"id": "cache_equipment_rationale_74", "label": "Write or rewrite the per-equipment ``equipment.json`` file. Stamping ru", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L74"}, {"id": "cache_equipment_rationale_92", "label": "Read and decode an existing ``equipment.json`` file. Uses ``msgspec.jso", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L92"}, {"id": "cache_equipment_rationale_107", "label": "Write the ``test_runs.json`` marker file. Idempotent per \u00a711.4.2: if th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L107"}, {"id": "cache_equipment_rationale_155", "label": "Read and decode a ``test_runs.json`` marker file. Raises ``SchemaMajorM", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L155"}, {"id": "cache_equipment_rationale_184", "label": "Return the on-disk ``first_seen_at`` if the file exists. Returns ``None`` w", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L184"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "filelock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "exlab_wizard_cache", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "exlab_wizard_io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "cache_equipment_equipmentcachewriter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L63", "weight": 1.0}, {"source": "cache_equipment_equipmentcachewriter", "target": "cache_equipment_equipmentcachewriter_write_equipment", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L73", "weight": 1.0}, {"source": "cache_equipment_equipmentcachewriter", "target": "cache_equipment_equipmentcachewriter_read_equipment", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L91", "weight": 1.0}, {"source": "cache_equipment_equipmentcachewriter", "target": "cache_equipment_equipmentcachewriter_write_test_runs_marker", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L106", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "cache_equipment_write_equipment_sync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L127", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "cache_equipment_read_equipment_sync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L151", "weight": 1.0}, {"source": "cache_equipment_equipmentcachewriter", "target": "cache_equipment_equipmentcachewriter_read_test_runs_marker", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L154", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "cache_equipment_read_test_runs_marker_sync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L163", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "cache_equipment_write_test_runs_marker_sync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L167", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "target": "cache_equipment_read_existing_first_seen_at", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L183", "weight": 1.0}, {"source": "cache_equipment_write_equipment_sync", "target": "cache_equipment_read_existing_first_seen_at", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L131", "weight": 1.0}, {"source": "cache_equipment_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_equipment_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L1", "weight": 1.0}, {"source": "cache_equipment_rationale_64", "target": "cache_equipment_equipmentcachewriter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L64", "weight": 1.0}, {"source": "cache_equipment_rationale_74", "target": "cache_equipment_equipmentcachewriter_write_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L74", "weight": 1.0}, {"source": "cache_equipment_rationale_92", "target": "cache_equipment_equipmentcachewriter_read_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L92", "weight": 1.0}, {"source": "cache_equipment_rationale_107", "target": "cache_equipment_equipmentcachewriter_write_test_runs_marker", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L107", "weight": 1.0}, {"source": "cache_equipment_rationale_155", "target": "cache_equipment_equipmentcachewriter_read_test_runs_marker", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L155", "weight": 1.0}, {"source": "cache_equipment_rationale_184", "target": "cache_equipment_read_existing_first_seen_at", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L184", "weight": 1.0}], "raw_calls": [{"caller_nid": "cache_equipment_equipmentcachewriter_write_equipment", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L89"}, {"caller_nid": "cache_equipment_equipmentcachewriter_read_equipment", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L104"}, {"caller_nid": "cache_equipment_equipmentcachewriter_write_test_runs_marker", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L120"}, {"caller_nid": "cache_equipment_write_equipment_sync", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L128"}, {"caller_nid": "cache_equipment_write_equipment_sync", "callee": "FileLock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L129"}, {"caller_nid": "cache_equipment_write_equipment_sync", "callee": "lock_path_for", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L129"}, {"caller_nid": "cache_equipment_write_equipment_sync", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L130"}, {"caller_nid": "cache_equipment_write_equipment_sync", "callee": "replace", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L134"}, {"caller_nid": "cache_equipment_write_equipment_sync", "callee": "replace", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L143"}, {"caller_nid": "cache_equipment_write_equipment_sync", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L148"}, {"caller_nid": "cache_equipment_write_equipment_sync", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L148"}, {"caller_nid": "cache_equipment_read_equipment_sync", "callee": "read_msgspec_json", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L152"}, {"caller_nid": "cache_equipment_equipmentcachewriter_read_test_runs_marker", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L160"}, {"caller_nid": "cache_equipment_read_test_runs_marker_sync", "callee": "read_msgspec_json", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L164"}, {"caller_nid": "cache_equipment_write_test_runs_marker_sync", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L168"}, {"caller_nid": "cache_equipment_write_test_runs_marker_sync", "callee": "FileLock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L169"}, {"caller_nid": "cache_equipment_write_test_runs_marker_sync", "callee": "lock_path_for", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L169"}, {"caller_nid": "cache_equipment_write_test_runs_marker_sync", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L170"}, {"caller_nid": "cache_equipment_write_test_runs_marker_sync", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L175"}, {"caller_nid": "cache_equipment_write_test_runs_marker_sync", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L175"}, {"caller_nid": "cache_equipment_read_existing_first_seen_at", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L193"}, {"caller_nid": "cache_equipment_read_existing_first_seen_at", "callee": "read_msgspec_json", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L196"}, {"caller_nid": "cache_equipment_read_existing_first_seen_at", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py", "source_location": "L203"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/cec009f15dba93600ffae68bdc63c0383f9788568cbe3998d56674863161a30d.json b/graphify-out/cache/ast/cec009f15dba93600ffae68bdc63c0383f9788568cbe3998d56674863161a30d.json new file mode 100644 index 0000000..b1d457b --- /dev/null +++ b/graphify-out/cache/ast/cec009f15dba93600ffae68bdc63c0383f9788568cbe3998d56674863161a30d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_user_guide_03_create_project_md", "label": "03_create_project.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md", "source_location": "L1"}, {"id": "user_guide_03_create_project_3_1_create_a_new_project", "label": "3.1 Create a New Project", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md", "source_location": "L1"}, {"id": "user_guide_03_create_project_capability_summary", "label": "Capability summary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md", "source_location": "L3"}, {"id": "user_guide_03_create_project_walkthrough", "label": "Walkthrough", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md", "source_location": "L17"}, {"id": "user_guide_03_create_project_screenshots", "label": "Screenshots", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md", "source_location": "L30"}, {"id": "user_guide_03_create_project_codeblock_1", "label": "code:{image} (:alt: New project wizard, initial render)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md", "source_location": "L36"}, {"id": "user_guide_03_create_project_related_material", "label": "Related material", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md", "source_location": "L41"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_user_guide_03_create_project_md", "target": "user_guide_03_create_project_3_1_create_a_new_project", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md", "source_location": "L1", "weight": 1.0}, {"source": "user_guide_03_create_project_3_1_create_a_new_project", "target": "user_guide_03_create_project_capability_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md", "source_location": "L3", "weight": 1.0}, {"source": "user_guide_03_create_project_3_1_create_a_new_project", "target": "user_guide_03_create_project_walkthrough", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md", "source_location": "L17", "weight": 1.0}, {"source": "user_guide_03_create_project_3_1_create_a_new_project", "target": "user_guide_03_create_project_screenshots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md", "source_location": "L30", "weight": 1.0}, {"source": "user_guide_03_create_project_screenshots", "target": "user_guide_03_create_project_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md", "source_location": "L36", "weight": 1.0}, {"source": "user_guide_03_create_project_3_1_create_a_new_project", "target": "user_guide_03_create_project_related_material", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md", "source_location": "L41", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/cfb39dc003f1ba7c80b00cb0068d0dcc4ec7088ec5fcfc04907996de80149b1f.json b/graphify-out/cache/ast/cfb39dc003f1ba7c80b00cb0068d0dcc4ec7088ec5fcfc04907996de80149b1f.json new file mode 100644 index 0000000..2ff1a1c --- /dev/null +++ b/graphify-out/cache/ast/cfb39dc003f1ba7c80b00cb0068d0dcc4ec7088ec5fcfc04907996de80149b1f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_constants_test_keyring_py", "label": "test_keyring.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L1"}, {"id": "constants_test_keyring_test_keyring_service_literal", "label": "test_keyring_service_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L13"}, {"id": "constants_test_keyring_test_keyring_username_lims_literal", "label": "test_keyring_username_lims_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L18"}, {"id": "constants_test_keyring_test_keyring_username_nas_template_literal", "label": "test_keyring_username_nas_template_literal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L23"}, {"id": "constants_test_keyring_test_keyring_nas_username_formats_template", "label": "test_keyring_nas_username_formats_template()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L28"}, {"id": "constants_test_keyring_test_keyring_nas_username_handles_various_ids", "label": "test_keyring_nas_username_handles_various_ids()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L33"}, {"id": "constants_test_keyring_test_keyring_re_exported_from_package", "label": "test_keyring_re_exported_from_package()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L46"}, {"id": "constants_test_keyring_rationale_1", "label": "Verify the keyring service / username conventions. These literals are committed", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_keyring_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_keyring_py", "target": "constants_test_keyring_test_keyring_service_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_keyring_py", "target": "constants_test_keyring_test_keyring_username_lims_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_keyring_py", "target": "constants_test_keyring_test_keyring_username_nas_template_literal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_keyring_py", "target": "constants_test_keyring_test_keyring_nas_username_formats_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_keyring_py", "target": "constants_test_keyring_test_keyring_nas_username_handles_various_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_constants_test_keyring_py", "target": "constants_test_keyring_test_keyring_re_exported_from_package", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L46", "weight": 1.0}, {"source": "constants_test_keyring_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_constants_test_keyring_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "constants_test_keyring_test_keyring_nas_username_formats_template", "callee": "keyring_nas_username", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L30"}, {"caller_nid": "constants_test_keyring_test_keyring_nas_username_handles_various_ids", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L42"}, {"caller_nid": "constants_test_keyring_test_keyring_nas_username_handles_various_ids", "callee": "keyring_nas_username", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L43"}, {"caller_nid": "constants_test_keyring_test_keyring_re_exported_from_package", "callee": "keyring_nas_username", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py", "source_location": "L52"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/d039f946bc6ea50234ef8cb4385285811623f4d2d7b9de357e4fc2d461066bdc.json b/graphify-out/cache/ast/d039f946bc6ea50234ef8cb4385285811623f4d2d7b9de357e4fc2d461066bdc.json new file mode 100644 index 0000000..94177c4 --- /dev/null +++ b/graphify-out/cache/ast/d039f946bc6ea50234ef8cb4385285811623f4d2d7b9de357e4fc2d461066bdc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "label": "rules.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L1"}, {"id": "validator_rules_check_unresolved_placeholder", "label": "check_unresolved_placeholder()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L83"}, {"id": "validator_rules_scan_for_placeholders", "label": "_scan_for_placeholders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L122"}, {"id": "validator_rules_check_illegal_filesystem_character", "label": "check_illegal_filesystem_character()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L185"}, {"id": "validator_rules_scan_for_illegal_chars", "label": "_scan_for_illegal_chars()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L210"}, {"id": "validator_rules_check_reserved_filesystem_name", "label": "check_reserved_filesystem_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L269"}, {"id": "validator_rules_check_unsafe_project_name", "label": "check_unsafe_project_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L305"}, {"id": "validator_rules_check_mode_prefix_mismatch", "label": "check_mode_prefix_mismatch()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L339"}, {"id": "validator_rules_check_orphan", "label": "check_orphan()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L429"}, {"id": "validator_rules_check_missing_required_field", "label": "check_missing_required_field()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L465"}, {"id": "validator_rules_lookup_field_value", "label": "_lookup_field_value()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L503"}, {"id": "validator_rules_check_malformed_yaml_front_matter", "label": "check_malformed_yaml_front_matter()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L520"}, {"id": "validator_rules_rationale_1", "label": "Validator rule functions. Backend Spec \u00a78.1. This module is a pure-function lib", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L1"}, {"id": "validator_rules_rationale_89", "label": "\u00a78.1.1: detect angle-bracket and Jinja placeholder tokens. Hard-tier. Uses", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L89"}, {"id": "validator_rules_rationale_127", "label": "Return one finding per placeholder match in ``text``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L127"}, {"id": "validator_rules_rationale_190", "label": "\u00a78.1.2: detect Windows-illegal characters in any segment / file name. Illeg", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L190"}, {"id": "validator_rules_rationale_211", "label": "Return one finding per illegal character / trailing-rule violation in ``name``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L211"}, {"id": "validator_rules_rationale_270", "label": "\u00a78.1.2: detect Windows reserved names (``CON``, ``PRN``, ``AUX``, ``NUL``, `", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L270"}, {"id": "validator_rules_rationale_306", "label": "\u00a73.2: flag a project directory whose name is not a safe path segment. The p", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L306"}, {"id": "validator_rules_rationale_345", "label": "\u00a78.1.3: detect three-way disagreement between ``run_kind``, leaf prefix, and", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L345"}, {"id": "validator_rules_rationale_430", "label": "\u00a78.1.4: detect missing ``creation.json`` at project / run level (NOT equipme", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L430"}, {"id": "validator_rules_rationale_470", "label": "\u00a78.1.5: detect required README fields that are absent or empty. Soft-tier.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L470"}, {"id": "validator_rules_rationale_504", "label": "Return the first non-missing value for ``field_id`` across layers. A missin", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L504"}, {"id": "validator_rules_rationale_521", "label": "\u00a78.1: detect malformed YAML front matter at the head of a Markdown file.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L521"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "yaml", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "validator_rules_check_unresolved_placeholder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "validator_rules_scan_for_placeholders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L122", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "validator_rules_check_illegal_filesystem_character", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L185", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "validator_rules_scan_for_illegal_chars", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L210", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "validator_rules_check_reserved_filesystem_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L269", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "validator_rules_check_unsafe_project_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L305", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "validator_rules_check_mode_prefix_mismatch", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L339", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "validator_rules_check_orphan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L429", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "validator_rules_check_missing_required_field", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L465", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "validator_rules_lookup_field_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L503", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "target": "validator_rules_check_malformed_yaml_front_matter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L520", "weight": 1.0}, {"source": "validator_rules_check_unresolved_placeholder", "target": "validator_rules_scan_for_placeholders", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L103", "weight": 1.0}, {"source": "validator_rules_check_illegal_filesystem_character", "target": "validator_rules_scan_for_illegal_chars", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L202", "weight": 1.0}, {"source": "validator_rules_check_missing_required_field", "target": "validator_rules_lookup_field_value", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L487", "weight": 1.0}, {"source": "validator_rules_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_validator_rules_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L1", "weight": 1.0}, {"source": "validator_rules_rationale_89", "target": "validator_rules_check_unresolved_placeholder", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L89", "weight": 1.0}, {"source": "validator_rules_rationale_127", "target": "validator_rules_scan_for_placeholders", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L127", "weight": 1.0}, {"source": "validator_rules_rationale_190", "target": "validator_rules_check_illegal_filesystem_character", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L190", "weight": 1.0}, {"source": "validator_rules_rationale_211", "target": "validator_rules_scan_for_illegal_chars", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L211", "weight": 1.0}, {"source": "validator_rules_rationale_270", "target": "validator_rules_check_reserved_filesystem_name", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L270", "weight": 1.0}, {"source": "validator_rules_rationale_306", "target": "validator_rules_check_unsafe_project_name", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L306", "weight": 1.0}, {"source": "validator_rules_rationale_345", "target": "validator_rules_check_mode_prefix_mismatch", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L345", "weight": 1.0}, {"source": "validator_rules_rationale_430", "target": "validator_rules_check_orphan", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L430", "weight": 1.0}, {"source": "validator_rules_rationale_470", "target": "validator_rules_check_missing_required_field", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L470", "weight": 1.0}, {"source": "validator_rules_rationale_504", "target": "validator_rules_lookup_field_value", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L504", "weight": 1.0}, {"source": "validator_rules_rationale_521", "target": "validator_rules_check_malformed_yaml_front_matter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L521", "weight": 1.0}], "raw_calls": [{"caller_nid": "validator_rules_check_unresolved_placeholder", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L102"}, {"caller_nid": "validator_rules_check_unresolved_placeholder", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L107"}, {"caller_nid": "validator_rules_check_unresolved_placeholder", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L109"}, {"caller_nid": "validator_rules_check_unresolved_placeholder", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L110"}, {"caller_nid": "validator_rules_check_unresolved_placeholder", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L110"}, {"caller_nid": "validator_rules_check_unresolved_placeholder", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L111"}, {"caller_nid": "validator_rules_check_unresolved_placeholder", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L117"}, {"caller_nid": "validator_rules_scan_for_placeholders", "callee": "finditer", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L130"}, {"caller_nid": "validator_rules_scan_for_placeholders", "callee": "group", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L131"}, {"caller_nid": "validator_rules_scan_for_placeholders", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L132"}, {"caller_nid": "validator_rules_scan_for_placeholders", "callee": "finditer", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L145"}, {"caller_nid": "validator_rules_scan_for_placeholders", "callee": "group", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L146"}, {"caller_nid": "validator_rules_scan_for_placeholders", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L147"}, {"caller_nid": "validator_rules_scan_for_placeholders", "callee": "finditer", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L161"}, {"caller_nid": "validator_rules_scan_for_placeholders", "callee": "group", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L162"}, {"caller_nid": "validator_rules_scan_for_placeholders", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L163"}, {"caller_nid": "validator_rules_check_illegal_filesystem_character", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L202"}, {"caller_nid": "validator_rules_check_illegal_filesystem_character", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L205"}, {"caller_nid": "validator_rules_scan_for_illegal_chars", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L214"}, {"caller_nid": "validator_rules_scan_for_illegal_chars", "callee": "ord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L219"}, {"caller_nid": "validator_rules_scan_for_illegal_chars", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L220"}, {"caller_nid": "validator_rules_scan_for_illegal_chars", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L221"}, {"caller_nid": "validator_rules_scan_for_illegal_chars", "callee": "endswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L232"}, {"caller_nid": "validator_rules_scan_for_illegal_chars", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L233"}, {"caller_nid": "validator_rules_scan_for_illegal_chars", "callee": "endswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L246"}, {"caller_nid": "validator_rules_scan_for_illegal_chars", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L247"}, {"caller_nid": "validator_rules_check_reserved_filesystem_name", "callee": "split", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L283"}, {"caller_nid": "validator_rules_check_reserved_filesystem_name", "callee": "upper", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L284"}, {"caller_nid": "validator_rules_check_reserved_filesystem_name", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L286"}, {"caller_nid": "validator_rules_check_unsafe_project_name", "callee": "project_name_violations", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L320"}, {"caller_nid": "validator_rules_check_unsafe_project_name", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L321"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "is_test_run_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L363"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "is_run_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L364"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L380"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "_make_finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L381"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L388"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "_make_finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L389"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L396"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "_make_finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L397"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L398"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L405"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "_make_finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L406"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L413"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "_make_finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L414"}, {"caller_nid": "validator_rules_check_mode_prefix_mismatch", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L415"}, {"caller_nid": "validator_rules_check_orphan", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L443"}, {"caller_nid": "validator_rules_check_orphan", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L443"}, {"caller_nid": "validator_rules_check_orphan", "callee": "capitalize", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L450"}, {"caller_nid": "validator_rules_check_missing_required_field", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L482"}, {"caller_nid": "validator_rules_check_missing_required_field", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L483"}, {"caller_nid": "validator_rules_check_missing_required_field", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L484"}, {"caller_nid": "validator_rules_check_missing_required_field", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L489"}, {"caller_nid": "validator_rules_check_malformed_yaml_front_matter", "callee": "splitlines", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L528"}, {"caller_nid": "validator_rules_check_malformed_yaml_front_matter", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L529"}, {"caller_nid": "validator_rules_check_malformed_yaml_front_matter", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L533"}, {"caller_nid": "validator_rules_check_malformed_yaml_front_matter", "callee": "min", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L533"}, {"caller_nid": "validator_rules_check_malformed_yaml_front_matter", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L533"}, {"caller_nid": "validator_rules_check_malformed_yaml_front_matter", "callee": "rstrip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L534"}, {"caller_nid": "validator_rules_check_malformed_yaml_front_matter", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L554"}, {"caller_nid": "validator_rules_check_malformed_yaml_front_matter", "callee": "safe_load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py", "source_location": "L556"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/d14954473452cae68ef2e8bfbd8f8c30bb886d88342a7ae4e0b31193224885b5.json b/graphify-out/cache/ast/d14954473452cae68ef2e8bfbd8f8c30bb886d88342a7ae4e0b31193224885b5.json new file mode 100644 index 0000000..2671d0c --- /dev/null +++ b/graphify-out/cache/ast/d14954473452cae68ef2e8bfbd8f8c30bb886d88342a7ae4e0b31193224885b5.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_stub_rclone_py", "label": "stub_rclone.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L1"}, {"id": "fixtures_stub_rclone_parse_copy_args", "label": "_parse_copy_args()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L54"}, {"id": "fixtures_stub_rclone_is_flag_value", "label": "_is_flag_value()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L66"}, {"id": "fixtures_stub_rclone_emit_combined", "label": "_emit_combined()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L84"}, {"id": "fixtures_stub_rclone_flag_value", "label": "_flag_value()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L113"}, {"id": "fixtures_stub_rclone_dump_env", "label": "_dump_env()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L124"}, {"id": "fixtures_stub_rclone_require_env", "label": "_require_env()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L135"}, {"id": "fixtures_stub_rclone_main", "label": "main()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L166"}, {"id": "fixtures_stub_rclone_rationale_55", "label": "Return ``(local, remote_spec)`` from a ``rclone copy`` argv.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L55"}, {"id": "fixtures_stub_rclone_rationale_67", "label": "Return True if ``arg`` is the value-half of a ``--flag value`` pair.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L67"}, {"id": "fixtures_stub_rclone_rationale_85", "label": "Write `` `` per file in ``--files-from`` to ``--combined``. `", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L85"}, {"id": "fixtures_stub_rclone_rationale_114", "label": "Return the value following ``flag`` in ``argv`` or ``None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L114"}, {"id": "fixtures_stub_rclone_rationale_125", "label": "When ``STUB_RCLONE_ENV_DUMP`` is set, write the rclone-prefixed env.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L125"}, {"id": "fixtures_stub_rclone_rationale_136", "label": "Enforce ``STUB_RCLONE_REQUIRE_ENV``; return 0 if satisfied else 3. Confirms", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L136"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_stub_rclone_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_stub_rclone_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_stub_rclone_py", "target": "shutil", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_stub_rclone_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_stub_rclone_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_stub_rclone_py", "target": "fixtures_stub_rclone_parse_copy_args", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L54", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_stub_rclone_py", "target": "fixtures_stub_rclone_is_flag_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L66", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_stub_rclone_py", "target": "fixtures_stub_rclone_emit_combined", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L84", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_stub_rclone_py", "target": "fixtures_stub_rclone_flag_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L113", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_stub_rclone_py", "target": "fixtures_stub_rclone_dump_env", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L124", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_stub_rclone_py", "target": "fixtures_stub_rclone_require_env", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_stub_rclone_py", "target": "fixtures_stub_rclone_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L166", "weight": 1.0}, {"source": "fixtures_stub_rclone_parse_copy_args", "target": "fixtures_stub_rclone_is_flag_value", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L59", "weight": 1.0}, {"source": "fixtures_stub_rclone_emit_combined", "target": "fixtures_stub_rclone_flag_value", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L91", "weight": 1.0}, {"source": "fixtures_stub_rclone_main", "target": "fixtures_stub_rclone_dump_env", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L171", "weight": 1.0}, {"source": "fixtures_stub_rclone_main", "target": "fixtures_stub_rclone_require_env", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L201", "weight": 1.0}, {"source": "fixtures_stub_rclone_main", "target": "fixtures_stub_rclone_emit_combined", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L234", "weight": 1.0}, {"source": "fixtures_stub_rclone_main", "target": "fixtures_stub_rclone_parse_copy_args", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L255", "weight": 1.0}, {"source": "fixtures_stub_rclone_rationale_55", "target": "fixtures_stub_rclone_parse_copy_args", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L55", "weight": 1.0}, {"source": "fixtures_stub_rclone_rationale_67", "target": "fixtures_stub_rclone_is_flag_value", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L67", "weight": 1.0}, {"source": "fixtures_stub_rclone_rationale_85", "target": "fixtures_stub_rclone_emit_combined", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L85", "weight": 1.0}, {"source": "fixtures_stub_rclone_rationale_114", "target": "fixtures_stub_rclone_flag_value", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L114", "weight": 1.0}, {"source": "fixtures_stub_rclone_rationale_125", "target": "fixtures_stub_rclone_dump_env", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L125", "weight": 1.0}, {"source": "fixtures_stub_rclone_rationale_136", "target": "fixtures_stub_rclone_require_env", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L136", "weight": 1.0}], "raw_calls": [{"caller_nid": "fixtures_stub_rclone_parse_copy_args", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L56"}, {"caller_nid": "fixtures_stub_rclone_parse_copy_args", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L57"}, {"caller_nid": "fixtures_stub_rclone_parse_copy_args", "callee": "exit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L58"}, {"caller_nid": "fixtures_stub_rclone_parse_copy_args", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L59"}, {"caller_nid": "fixtures_stub_rclone_parse_copy_args", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L60"}, {"caller_nid": "fixtures_stub_rclone_parse_copy_args", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L61"}, {"caller_nid": "fixtures_stub_rclone_parse_copy_args", "callee": "exit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L62"}, {"caller_nid": "fixtures_stub_rclone_is_flag_value", "callee": "index", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L78"}, {"caller_nid": "fixtures_stub_rclone_emit_combined", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L94"}, {"caller_nid": "fixtures_stub_rclone_emit_combined", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L100"}, {"caller_nid": "fixtures_stub_rclone_emit_combined", "callee": "splitlines", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L101"}, {"caller_nid": "fixtures_stub_rclone_emit_combined", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L101"}, {"caller_nid": "fixtures_stub_rclone_emit_combined", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L101"}, {"caller_nid": "fixtures_stub_rclone_emit_combined", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L102"}, {"caller_nid": "fixtures_stub_rclone_emit_combined", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L105"}, {"caller_nid": "fixtures_stub_rclone_emit_combined", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L107"}, {"caller_nid": "fixtures_stub_rclone_emit_combined", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L107"}, {"caller_nid": "fixtures_stub_rclone_emit_combined", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L109"}, {"caller_nid": "fixtures_stub_rclone_flag_value", "callee": "index", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L116"}, {"caller_nid": "fixtures_stub_rclone_flag_value", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L119"}, {"caller_nid": "fixtures_stub_rclone_dump_env", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L126"}, {"caller_nid": "fixtures_stub_rclone_dump_env", "callee": "open", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L129"}, {"caller_nid": "fixtures_stub_rclone_dump_env", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L130"}, {"caller_nid": "fixtures_stub_rclone_dump_env", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L130"}, {"caller_nid": "fixtures_stub_rclone_dump_env", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L131"}, {"caller_nid": "fixtures_stub_rclone_dump_env", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L132"}, {"caller_nid": "fixtures_stub_rclone_require_env", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L142"}, {"caller_nid": "fixtures_stub_rclone_require_env", "callee": "upper", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L145"}, {"caller_nid": "fixtures_stub_rclone_require_env", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L145"}, {"caller_nid": "fixtures_stub_rclone_require_env", "callee": "split", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L145"}, {"caller_nid": "fixtures_stub_rclone_require_env", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L145"}, {"caller_nid": "fixtures_stub_rclone_require_env", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L147"}, {"caller_nid": "fixtures_stub_rclone_require_env", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L149"}, {"caller_nid": "fixtures_stub_rclone_require_env", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L150"}, {"caller_nid": "fixtures_stub_rclone_require_env", "callee": "rsplit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L150"}, {"caller_nid": "fixtures_stub_rclone_require_env", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L154"}, {"caller_nid": "fixtures_stub_rclone_require_env", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L160"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L167"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "open", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L169"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L170"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L170"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L173"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L174"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L176"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L183"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L184"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L191"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L194"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L196"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L196"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L208"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L211"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L218"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L218"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L220"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L222"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L222"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L228"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L231"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L242"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L245"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L248"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L252"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L257"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "split", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L259"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L261"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L264"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "lstrip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L264"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L265"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L266"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "iterdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L267"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L269"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "copytree", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L270"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "copy2", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L272"}, {"caller_nid": "fixtures_stub_rclone_main", "callee": "copy2", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py", "source_location": "L274"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/d1d135598d171747295aaeba1a29beeea4f5ecdf5ee5684f8eb28142b2ab1494.json b/graphify-out/cache/ast/d1d135598d171747295aaeba1a29beeea4f5ecdf5ee5684f8eb28142b2ab1494.json new file mode 100644 index 0000000..d85f9e8 --- /dev/null +++ b/graphify-out/cache/ast/d1d135598d171747295aaeba1a29beeea4f5ecdf5ee5684f8eb28142b2ab1494.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "label": "test_live_reload.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L1"}, {"id": "tray_test_live_reload_stub_configure_logging", "label": "_stub_configure_logging()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L40"}, {"id": "tray_test_live_reload_equipment", "label": "_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L54"}, {"id": "tray_test_live_reload_config", "label": "_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L70"}, {"id": "tray_test_live_reload_recordingcomponent", "label": "_RecordingComponent", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L86"}, {"id": "tray_test_live_reload_recordingcomponent_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L89"}, {"id": "tray_test_live_reload_recordingcomponent_apply_config", "label": ".apply_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L93"}, {"id": "tray_test_live_reload_recordingvalidator", "label": "_RecordingValidator", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L98"}, {"id": "tray_test_live_reload_recordingvalidator_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L99"}, {"id": "tray_test_live_reload_recordingvalidator_reconfigure", "label": ".reconfigure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L102"}, {"id": "tray_test_live_reload_asyncstub", "label": "_AsyncStub", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L106"}, {"id": "tray_test_live_reload_asyncstub_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L109"}, {"id": "tray_test_live_reload_asyncstub_start", "label": ".start()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L116"}, {"id": "tray_test_live_reload_running_deps", "label": "_running_deps()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L120"}, {"id": "tray_test_live_reload_test_reconfigures_existing_components_in_place", "label": "test_reconfigures_existing_components_in_place()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L136"}, {"id": "tray_test_live_reload_test_skips_logging_reconfigure_when_unchanged", "label": "test_skips_logging_reconfigure_when_unchanged()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L150"}, {"id": "tray_test_live_reload_test_component_failure_is_isolated", "label": "test_component_failure_is_isolated()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L156"}, {"id": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", "label": "test_rebuilds_lims_only_on_endpoint_change()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L182"}, {"id": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", "label": "test_rebuilds_plugin_host_only_on_dir_change()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L201"}, {"id": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "label": "test_builds_and_starts_components_on_fresh_install()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L226"}, {"id": "tray_test_live_reload_rationale_1", "label": "Tests for the live config-reload coordinator (no tray relaunch). ``exlab_wizard", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L1"}, {"id": "tray_test_live_reload_rationale_41", "label": "Stub the real logging reconfigure so tests don't churn global handlers. Ret", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L41"}, {"id": "tray_test_live_reload_rationale_87", "label": "Stub controller / nas_sync / poller recording ``apply_config`` calls.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L87"}, {"id": "tray_test_live_reload_rationale_107", "label": "Fresh-built nas_sync / poller stub with async init / start.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L107"}, {"id": "tray_test_live_reload_rationale_121", "label": "Build a deps bundle whose config-dependent components already exist.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L121"}, {"id": "tray_test_live_reload_rationale_157", "label": "One component raising must not abort the rest, and config still lands.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L157"}, {"id": "tray_test_live_reload_rationale_229", "label": "On a first save the absent components are built and their async bring-up is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L229"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "exlab_wizard_api_app", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "exlab_wizard_api_app", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "exlab_wizard_tray", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "exlab_wizard_tray_dependencies", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "tray_test_live_reload_stub_configure_logging", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "tray_test_live_reload_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L54", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "tray_test_live_reload_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L70", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "tray_test_live_reload_recordingcomponent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L86", "weight": 1.0}, {"source": "tray_test_live_reload_recordingcomponent", "target": "tray_test_live_reload_recordingcomponent_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L89", "weight": 1.0}, {"source": "tray_test_live_reload_recordingcomponent", "target": "tray_test_live_reload_recordingcomponent_apply_config", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "tray_test_live_reload_recordingvalidator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L98", "weight": 1.0}, {"source": "tray_test_live_reload_recordingvalidator", "target": "tray_test_live_reload_recordingvalidator_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L99", "weight": 1.0}, {"source": "tray_test_live_reload_recordingvalidator", "target": "tray_test_live_reload_recordingvalidator_reconfigure", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L102", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "tray_test_live_reload_asyncstub", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L106", "weight": 1.0}, {"source": "tray_test_live_reload_asyncstub", "target": "tray_test_live_reload_asyncstub_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L109", "weight": 1.0}, {"source": "tray_test_live_reload_asyncstub", "target": "tray_test_live_reload_asyncstub_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L113", "weight": 1.0}, {"source": "tray_test_live_reload_asyncstub", "target": "tray_test_live_reload_asyncstub_start", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L116", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "tray_test_live_reload_running_deps", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L120", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "tray_test_live_reload_test_reconfigures_existing_components_in_place", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L136", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "tray_test_live_reload_test_skips_logging_reconfigure_when_unchanged", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L150", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "tray_test_live_reload_test_component_failure_is_isolated", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L156", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L182", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L201", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "target": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L226", "weight": 1.0}, {"source": "tray_test_live_reload_config", "target": "tray_test_live_reload_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L82", "weight": 1.0}, {"source": "tray_test_live_reload_running_deps", "target": "tray_test_live_reload_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L123", "weight": 1.0}, {"source": "tray_test_live_reload_running_deps", "target": "tray_test_live_reload_recordingvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L124", "weight": 1.0}, {"source": "tray_test_live_reload_running_deps", "target": "tray_test_live_reload_recordingcomponent", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L125", "weight": 1.0}, {"source": "tray_test_live_reload_test_reconfigures_existing_components_in_place", "target": "tray_test_live_reload_running_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L137", "weight": 1.0}, {"source": "tray_test_live_reload_test_reconfigures_existing_components_in_place", "target": "tray_test_live_reload_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L138", "weight": 1.0}, {"source": "tray_test_live_reload_test_reconfigures_existing_components_in_place", "target": "tray_test_live_reload_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L138", "weight": 1.0}, {"source": "tray_test_live_reload_test_skips_logging_reconfigure_when_unchanged", "target": "tray_test_live_reload_running_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L151", "weight": 1.0}, {"source": "tray_test_live_reload_test_skips_logging_reconfigure_when_unchanged", "target": "tray_test_live_reload_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L152", "weight": 1.0}, {"source": "tray_test_live_reload_test_component_failure_is_isolated", "target": "tray_test_live_reload_running_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L164", "weight": 1.0}, {"source": "tray_test_live_reload_test_component_failure_is_isolated", "target": "tray_test_live_reload_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L166", "weight": 1.0}, {"source": "tray_test_live_reload_test_component_failure_is_isolated", "target": "tray_test_live_reload_equipment", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L166", "weight": 1.0}, {"source": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", "target": "tray_test_live_reload_running_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L185", "weight": 1.0}, {"source": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", "target": "tray_test_live_reload_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L186", "weight": 1.0}, {"source": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", "target": "tray_test_live_reload_running_deps", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L204", "weight": 1.0}, {"source": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", "target": "tray_test_live_reload_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L205", "weight": 1.0}, {"source": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "target": "tray_test_live_reload_asyncstub", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L231", "weight": 1.0}, {"source": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "target": "tray_test_live_reload_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L242", "weight": 1.0}, {"source": "tray_test_live_reload_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_tray_test_live_reload_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_test_live_reload_rationale_41", "target": "tray_test_live_reload_stub_configure_logging", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L41", "weight": 1.0}, {"source": "tray_test_live_reload_rationale_87", "target": "tray_test_live_reload_recordingcomponent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L87", "weight": 1.0}, {"source": "tray_test_live_reload_rationale_107", "target": "tray_test_live_reload_asyncstub", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L107", "weight": 1.0}, {"source": "tray_test_live_reload_rationale_121", "target": "tray_test_live_reload_running_deps", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L121", "weight": 1.0}, {"source": "tray_test_live_reload_rationale_157", "target": "tray_test_live_reload_test_component_failure_is_isolated", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L157", "weight": 1.0}, {"source": "tray_test_live_reload_rationale_229", "target": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L229", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_test_live_reload_stub_configure_logging", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L47"}, {"caller_nid": "tray_test_live_reload_stub_configure_logging", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L49"}, {"caller_nid": "tray_test_live_reload_equipment", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L55"}, {"caller_nid": "tray_test_live_reload_equipment", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L60"}, {"caller_nid": "tray_test_live_reload_equipment", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L65"}, {"caller_nid": "tray_test_live_reload_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L78"}, {"caller_nid": "tray_test_live_reload_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L79"}, {"caller_nid": "tray_test_live_reload_config", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L80"}, {"caller_nid": "tray_test_live_reload_config", "callee": "LoggingConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L81"}, {"caller_nid": "tray_test_live_reload_config", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L82"}, {"caller_nid": "tray_test_live_reload_recordingcomponent_apply_config", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L94"}, {"caller_nid": "tray_test_live_reload_recordingcomponent_apply_config", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L95"}, {"caller_nid": "tray_test_live_reload_recordingvalidator_reconfigure", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L103"}, {"caller_nid": "tray_test_live_reload_running_deps", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L122"}, {"caller_nid": "tray_test_live_reload_test_reconfigures_existing_components_in_place", "callee": "apply_live_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L140"}, {"caller_nid": "tray_test_live_reload_test_skips_logging_reconfigure_when_unchanged", "callee": "apply_live_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L152"}, {"caller_nid": "tray_test_live_reload_test_component_failure_is_isolated", "callee": "_Boom", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L165"}, {"caller_nid": "tray_test_live_reload_test_component_failure_is_isolated", "callee": "apply_live_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L168"}, {"caller_nid": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L184"}, {"caller_nid": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L184"}, {"caller_nid": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", "callee": "apply_live_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L191"}, {"caller_nid": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", "callee": "clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L196"}, {"caller_nid": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", "callee": "apply_live_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L197"}, {"caller_nid": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L203"}, {"caller_nid": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L203"}, {"caller_nid": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", "callee": "apply_live_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L209"}, {"caller_nid": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", "callee": "clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L215"}, {"caller_nid": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", "callee": "apply_live_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L216"}, {"caller_nid": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L233"}, {"caller_nid": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L234"}, {"caller_nid": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L235"}, {"caller_nid": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L236"}, {"caller_nid": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L237"}, {"caller_nid": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L238"}, {"caller_nid": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L240"}, {"caller_nid": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L241"}, {"caller_nid": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "callee": "apply_live_config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L244"}, {"caller_nid": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L255"}, {"caller_nid": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py", "source_location": "L256"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/d2807dc8f4867e3f8bf428f731a83f4c9725eed5daf28ecc85fd8e216460a85a.json b/graphify-out/cache/ast/d2807dc8f4867e3f8bf428f731a83f4c9725eed5daf28ecc85fd8e216460a85a.json new file mode 100644 index 0000000..e0adf55 --- /dev/null +++ b/graphify-out/cache/ast/d2807dc8f4867e3f8bf428f731a83f4c9725eed5daf28ecc85fd8e216460a85a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_11_cache_folders_md", "label": "11_Cache_Folders.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L1"}, {"id": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", "label": "11. `.exlab-wizard` Cache Folders", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L1"}, {"id": "design_spec_sections_11_cache_folders_11_1_folder_placement", "label": "11.1 Folder Placement", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L7"}, {"id": "design_spec_sections_11_cache_folders_codeblock_1", "label": "code:block1 (/)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L9"}, {"id": "design_spec_sections_11_cache_folders_11_2_file_inventory_per_level", "label": "11.2 File Inventory per Level", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L50"}, {"id": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", "label": "11.3 `creation.json` Schema", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L93"}, {"id": "design_spec_sections_11_cache_folders_codeblock_2", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L97"}, {"id": "design_spec_sections_11_cache_folders_codeblock_3", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L167"}, {"id": "design_spec_sections_11_cache_folders_codeblock_4", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L181"}, {"id": "design_spec_sections_11_cache_folders_codeblock_5", "label": "code:block5 ({ entry \u2208 validation_overrides)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L206"}, {"id": "design_spec_sections_11_cache_folders_codeblock_6", "label": "code:block6 (\"paths\": {)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L220"}, {"id": "design_spec_sections_11_cache_folders_schema_version_history", "label": "Schema-version history", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L227"}, {"id": "design_spec_sections_11_cache_folders_11_4_readme_fields_json_schema", "label": "11.4 `readme_fields.json` Schema", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L243"}, {"id": "design_spec_sections_11_cache_folders_codeblock_7", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L249"}, {"id": "design_spec_sections_11_cache_folders_11_4_1_equipment_json_schema", "label": "11.4.1 `equipment.json` Schema", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L285"}, {"id": "design_spec_sections_11_cache_folders_codeblock_8", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L287"}, {"id": "design_spec_sections_11_cache_folders_11_4_2_test_runs_json_schema", "label": "11.4.2 `test_runs.json` Schema", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L311"}, {"id": "design_spec_sections_11_cache_folders_codeblock_9", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L313"}, {"id": "design_spec_sections_11_cache_folders_11_4_3_runs_json_schema", "label": "11.4.3 `runs.json` Schema", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L327"}, {"id": "design_spec_sections_11_cache_folders_codeblock_10", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L329"}, {"id": "design_spec_sections_11_cache_folders_11_5_wizard_hostname_log_format", "label": "11.5 `wizard..log` Format", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L343"}, {"id": "design_spec_sections_11_cache_folders_codeblock_11", "label": "code:block11 (2026-04-17T14:31:55Z [INFO ] [host:labpc-04] [equip:CONFOCAL)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L351"}, {"id": "design_spec_sections_11_cache_folders_11_5_1_log_levels_rotation_and_the_central_app_log", "label": "11.5.1 Log Levels, Rotation, and the Central App Log", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L366"}, {"id": "design_spec_sections_11_cache_folders_11_6_nas_sync_behavior_for_cache_files", "label": "11.6 NAS Sync Behavior for Cache Files", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L397"}, {"id": "design_spec_sections_11_cache_folders_11_7_discovery_and_validation_use_cases", "label": "11.7 Discovery and Validation Use Cases", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L401"}, {"id": "design_spec_sections_11_cache_folders_11_8_validator_engine_and_problem_query_contract", "label": "11.8 Validator Engine and Problem Query Contract", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L413"}, {"id": "design_spec_sections_11_cache_folders_codeblock_12", "label": "code:json ({)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L430"}, {"id": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", "label": "11.9 Schema Versioning and Migration Policy", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L452"}, {"id": "design_spec_sections_11_cache_folders_11_9_1_versioning_rules", "label": "11.9.1 Versioning rules", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L456"}, {"id": "design_spec_sections_11_cache_folders_11_9_2_reader_policy", "label": "11.9.2 Reader policy", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L462"}, {"id": "design_spec_sections_11_cache_folders_11_9_3_writer_policy", "label": "11.9.3 Writer policy", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L472"}, {"id": "design_spec_sections_11_cache_folders_11_9_4_cross_major_migration_v1_v2", "label": "11.9.4 Cross-major migration (v1 \u2192 v2)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L480"}, {"id": "design_spec_sections_11_cache_folders_11_9_5_directory_layout_migration_v0_5_v0_6", "label": "11.9.5 Directory-layout migration (v0.5 \u2192 v0.6)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L488"}, {"id": "design_spec_sections_11_cache_folders_11_9_6_what_about_config_yaml", "label": "11.9.6 What about `config.yaml`?", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L492"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_11_cache_folders_md", "target": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L1", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", "target": "design_spec_sections_11_cache_folders_11_1_folder_placement", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L7", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_1_folder_placement", "target": "design_spec_sections_11_cache_folders_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L9", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", "target": "design_spec_sections_11_cache_folders_11_2_file_inventory_per_level", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L50", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", "target": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L93", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", "target": "design_spec_sections_11_cache_folders_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L97", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", "target": "design_spec_sections_11_cache_folders_codeblock_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L167", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", "target": "design_spec_sections_11_cache_folders_codeblock_4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L181", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", "target": "design_spec_sections_11_cache_folders_codeblock_5", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L206", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", "target": "design_spec_sections_11_cache_folders_codeblock_6", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L220", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", "target": "design_spec_sections_11_cache_folders_schema_version_history", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L227", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", "target": "design_spec_sections_11_cache_folders_11_4_readme_fields_json_schema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L243", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_4_readme_fields_json_schema", "target": "design_spec_sections_11_cache_folders_codeblock_7", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L249", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_4_readme_fields_json_schema", "target": "design_spec_sections_11_cache_folders_11_4_1_equipment_json_schema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L285", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_4_1_equipment_json_schema", "target": "design_spec_sections_11_cache_folders_codeblock_8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L287", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_4_readme_fields_json_schema", "target": "design_spec_sections_11_cache_folders_11_4_2_test_runs_json_schema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L311", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_4_2_test_runs_json_schema", "target": "design_spec_sections_11_cache_folders_codeblock_9", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L313", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_4_readme_fields_json_schema", "target": "design_spec_sections_11_cache_folders_11_4_3_runs_json_schema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L327", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_4_3_runs_json_schema", "target": "design_spec_sections_11_cache_folders_codeblock_10", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L329", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", "target": "design_spec_sections_11_cache_folders_11_5_wizard_hostname_log_format", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L343", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_5_wizard_hostname_log_format", "target": "design_spec_sections_11_cache_folders_codeblock_11", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L351", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_5_wizard_hostname_log_format", "target": "design_spec_sections_11_cache_folders_11_5_1_log_levels_rotation_and_the_central_app_log", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L366", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", "target": "design_spec_sections_11_cache_folders_11_6_nas_sync_behavior_for_cache_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L397", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", "target": "design_spec_sections_11_cache_folders_11_7_discovery_and_validation_use_cases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L401", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", "target": "design_spec_sections_11_cache_folders_11_8_validator_engine_and_problem_query_contract", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L413", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_8_validator_engine_and_problem_query_contract", "target": "design_spec_sections_11_cache_folders_codeblock_12", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L430", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", "target": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L452", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", "target": "design_spec_sections_11_cache_folders_11_9_1_versioning_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L456", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", "target": "design_spec_sections_11_cache_folders_11_9_2_reader_policy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L462", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", "target": "design_spec_sections_11_cache_folders_11_9_3_writer_policy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L472", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", "target": "design_spec_sections_11_cache_folders_11_9_4_cross_major_migration_v1_v2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L480", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", "target": "design_spec_sections_11_cache_folders_11_9_5_directory_layout_migration_v0_5_v0_6", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L488", "weight": 1.0}, {"source": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", "target": "design_spec_sections_11_cache_folders_11_9_6_what_about_config_yaml", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md", "source_location": "L492", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/d28b89683a6d9bca90429a5edefa4bef48e27424d7f61e4ee4ac2d5e36daf441.json b/graphify-out/cache/ast/d28b89683a6d9bca90429a5edefa4bef48e27424d7f61e4ee4ac2d5e36daf441.json new file mode 100644 index 0000000..e7ff067 --- /dev/null +++ b/graphify-out/cache/ast/d28b89683a6d9bca90429a5edefa4bef48e27424d7f61e4ee4ac2d5e36daf441.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_lims_exlab_v1_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/__init__.py", "source_location": "L1"}], "edges": [], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/d30fe50e4aae5ef516aa371daf052e12040237e5cbc26764b433c01e7db121cf.json b/graphify-out/cache/ast/d30fe50e4aae5ef516aa371daf052e12040237e5cbc26764b433c01e7db121cf.json new file mode 100644 index 0000000..5f9c44a --- /dev/null +++ b/graphify-out/cache/ast/d30fe50e4aae5ef516aa371daf052e12040237e5cbc26764b433c01e7db121cf.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_16_logging_md", "label": "16_Logging.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L1"}, {"id": "design_spec_sections_16_logging_16_logging_architecture", "label": "16. Logging Architecture", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L1"}, {"id": "design_spec_sections_16_logging_16_1_goals", "label": "16.1 Goals", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L14"}, {"id": "design_spec_sections_16_logging_16_2_the_logging_package", "label": "16.2 The `logging/` package", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L23"}, {"id": "design_spec_sections_16_logging_codeblock_1", "label": "code:block1 (exlab_wizard/logging/)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L25"}, {"id": "design_spec_sections_16_logging_16_2_1_the_get_logger_name_entry_point", "label": "16.2.1 The `get_logger(name)` entry point", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L34"}, {"id": "design_spec_sections_16_logging_codeblock_2", "label": "code:python (from exlab_wizard.logging import get_logger)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L38"}, {"id": "design_spec_sections_16_logging_16_2_2_configure_logging_config_at_startup", "label": "16.2.2 `configure_logging(config)` at startup", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L55"}, {"id": "design_spec_sections_16_logging_codeblock_3", "label": "code:python (from exlab_wizard.logging import configure_logging)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L59"}, {"id": "design_spec_sections_16_logging_16_2_3_context_vars", "label": "16.2.3 Context vars", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L72"}, {"id": "design_spec_sections_16_logging_codeblock_4", "label": "code:python (from exlab_wizard.logging.context import set_run_context, cl)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L76"}, {"id": "design_spec_sections_16_logging_16_2_4_equipment_scoped_handlers", "label": "16.2.4 Equipment-scoped handlers", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L91"}, {"id": "design_spec_sections_16_logging_16_2_5_non_blocking_emit_via_queuehandler_queuelistener", "label": "16.2.5 Non-blocking emit via `QueueHandler` + `QueueListener`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L102"}, {"id": "design_spec_sections_16_logging_16_3_log_file_layout_where_to_look_quick_reference", "label": "16.3 Log file layout (where-to-look quick reference)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L114"}, {"id": "design_spec_sections_16_logging_16_4_format", "label": "16.4 Format", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L132"}, {"id": "design_spec_sections_16_logging_codeblock_5", "label": "code:block5 ( [] [host:] [equi)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L136"}, {"id": "design_spec_sections_16_logging_16_5_levels_and_configuration", "label": "16.5 Levels and configuration", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L154"}, {"id": "design_spec_sections_16_logging_16_6_rotation", "label": "16.6 Rotation", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L169"}, {"id": "design_spec_sections_16_logging_16_7_debugging_recipes", "label": "16.7 Debugging recipes", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L185"}, {"id": "design_spec_sections_16_logging_16_7_1_a_run_failed_what_happened", "label": "16.7.1 \"A run failed; what happened?\"", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L189"}, {"id": "design_spec_sections_16_logging_16_7_2_sync_is_failing_for_many_runs", "label": "16.7.2 \"Sync is failing for many runs\"", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L195"}, {"id": "design_spec_sections_16_logging_16_7_3_a_plugin_is_misbehaving_in_production", "label": "16.7.3 \"A plugin is misbehaving in production\"", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L201"}, {"id": "design_spec_sections_16_logging_16_7_4_i_don_t_trust_my_config_what_s_actually_loaded", "label": "16.7.4 \"I don't trust my config; what's actually loaded?\"", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L209"}, {"id": "design_spec_sections_16_logging_16_7_5_increase_verbosity_for_one_debug_session", "label": "16.7.5 \"Increase verbosity for one debug session\"", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L214"}, {"id": "design_spec_sections_16_logging_16_8_plugin_worker_logging", "label": "16.8 Plugin worker logging", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L223"}, {"id": "design_spec_sections_16_logging_16_9_operator_facing_log_access", "label": "16.9 Operator-facing log access", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L237"}, {"id": "design_spec_sections_16_logging_16_10_anti_patterns", "label": "16.10 Anti-patterns", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L247"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_16_logging_md", "target": "design_spec_sections_16_logging_16_logging_architecture", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L1", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_logging_architecture", "target": "design_spec_sections_16_logging_16_1_goals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L14", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_logging_architecture", "target": "design_spec_sections_16_logging_16_2_the_logging_package", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L23", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_2_the_logging_package", "target": "design_spec_sections_16_logging_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L25", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_2_the_logging_package", "target": "design_spec_sections_16_logging_16_2_1_the_get_logger_name_entry_point", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L34", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_2_1_the_get_logger_name_entry_point", "target": "design_spec_sections_16_logging_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L38", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_2_the_logging_package", "target": "design_spec_sections_16_logging_16_2_2_configure_logging_config_at_startup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L55", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_2_2_configure_logging_config_at_startup", "target": "design_spec_sections_16_logging_codeblock_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L59", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_2_the_logging_package", "target": "design_spec_sections_16_logging_16_2_3_context_vars", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L72", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_2_3_context_vars", "target": "design_spec_sections_16_logging_codeblock_4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L76", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_2_the_logging_package", "target": "design_spec_sections_16_logging_16_2_4_equipment_scoped_handlers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L91", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_2_the_logging_package", "target": "design_spec_sections_16_logging_16_2_5_non_blocking_emit_via_queuehandler_queuelistener", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L102", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_logging_architecture", "target": "design_spec_sections_16_logging_16_3_log_file_layout_where_to_look_quick_reference", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L114", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_logging_architecture", "target": "design_spec_sections_16_logging_16_4_format", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L132", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_4_format", "target": "design_spec_sections_16_logging_codeblock_5", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L136", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_logging_architecture", "target": "design_spec_sections_16_logging_16_5_levels_and_configuration", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L154", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_logging_architecture", "target": "design_spec_sections_16_logging_16_6_rotation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L169", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_logging_architecture", "target": "design_spec_sections_16_logging_16_7_debugging_recipes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L185", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_7_debugging_recipes", "target": "design_spec_sections_16_logging_16_7_1_a_run_failed_what_happened", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L189", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_7_debugging_recipes", "target": "design_spec_sections_16_logging_16_7_2_sync_is_failing_for_many_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L195", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_7_debugging_recipes", "target": "design_spec_sections_16_logging_16_7_3_a_plugin_is_misbehaving_in_production", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L201", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_7_debugging_recipes", "target": "design_spec_sections_16_logging_16_7_4_i_don_t_trust_my_config_what_s_actually_loaded", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L209", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_7_debugging_recipes", "target": "design_spec_sections_16_logging_16_7_5_increase_verbosity_for_one_debug_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L214", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_logging_architecture", "target": "design_spec_sections_16_logging_16_8_plugin_worker_logging", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L223", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_logging_architecture", "target": "design_spec_sections_16_logging_16_9_operator_facing_log_access", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L237", "weight": 1.0}, {"source": "design_spec_sections_16_logging_16_logging_architecture", "target": "design_spec_sections_16_logging_16_10_anti_patterns", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md", "source_location": "L247", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/d48ef0da17fcf722cb1325c2d7b3ac287d85c1a072c7a308b781b4bd307020b9.json b/graphify-out/cache/ast/d48ef0da17fcf722cb1325c2d7b3ac287d85c1a072c7a308b781b4bd307020b9.json new file mode 100644 index 0000000..b5c1ae0 --- /dev/null +++ b/graphify-out/cache/ast/d48ef0da17fcf722cb1325c2d7b3ac287d85c1a072c7a308b781b4bd307020b9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/__init__.py", "source_location": "L1"}, {"id": "client_init_rationale_1", "label": "Client-side abstractions used by the rebuilt main window. GUI/Orchestrator Rede", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/__init__.py", "source_location": "L1"}], "edges": [{"source": "client_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_client_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/d4d31440db0409a286ac0c73acab9be81e723de98d1578d027918d8e1cf9591d.json b/graphify-out/cache/ast/d4d31440db0409a286ac0c73acab9be81e723de98d1578d027918d8e1cf9591d.json new file mode 100644 index 0000000..6960b87 --- /dev/null +++ b/graphify-out/cache/ast/d4d31440db0409a286ac0c73acab9be81e723de98d1578d027918d8e1cf9591d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/__init__.py", "source_location": "L1"}, {"id": "ui_init_rationale_1", "label": "UI package re-exports (Backend Spec \u00a74.3, Frontend Spec \u00a72). Public surface: *", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_init_py", "target": "exlab_wizard_ui", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/__init__.py", "source_location": "L13", "weight": 1.0}, {"source": "ui_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/d4f7af8077e16b8a65e3771929ee7415946d829b0918517630766c4adffe7dfc.json b/graphify-out/cache/ast/d4f7af8077e16b8a65e3771929ee7415946d829b0918517630766c4adffe7dfc.json new file mode 100644 index 0000000..5e7933f --- /dev/null +++ b/graphify-out/cache/ast/d4f7af8077e16b8a65e3771929ee7415946d829b0918517630766c4adffe7dfc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "label": "test_window_launcher.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L1"}, {"id": "tray_test_window_launcher_python_window_argv", "label": "_python_window_argv()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L18"}, {"id": "tray_test_window_launcher_test_open_spawns_subprocess", "label": "test_open_spawns_subprocess()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L29"}, {"id": "tray_test_window_launcher_test_close_terminates_subprocess", "label": "test_close_terminates_subprocess()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L42"}, {"id": "tray_test_window_launcher_test_close_is_idempotent", "label": "test_close_is_idempotent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L53"}, {"id": "tray_test_window_launcher_test_open_focuses_existing", "label": "test_open_focuses_existing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L60"}, {"id": "tray_test_window_launcher_test_resolve_window_executable_prefers_env_var", "label": "test_resolve_window_executable_prefers_env_var()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L71"}, {"id": "tray_test_window_launcher_test_resolve_window_executable_uses_path", "label": "test_resolve_window_executable_uses_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L76"}, {"id": "tray_test_window_launcher_test_resolve_window_executable_falls_back_to_module", "label": "test_resolve_window_executable_falls_back_to_module()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L85"}, {"id": "tray_test_window_launcher_test_window_executable_override", "label": "test_window_executable_override()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L95"}, {"id": "tray_test_window_launcher_test_argv_falls_through_resolve_helper", "label": "test_argv_falls_through_resolve_helper()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L103"}, {"id": "tray_test_window_launcher_test_pid_is_none_before_open", "label": "test_pid_is_none_before_open()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L113"}, {"id": "tray_test_window_launcher_test_close_kills_unresponsive_process", "label": "test_close_kills_unresponsive_process()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L119"}, {"id": "tray_test_window_launcher_rationale_1", "label": "Tests for :mod:`exlab_wizard.tray.window_launcher`. Backend Spec \u00a74.3.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L1"}, {"id": "tray_test_window_launcher_rationale_19", "label": "Return an argv that runs a tiny window stand-in (a sleep).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L19"}, {"id": "tray_test_window_launcher_rationale_104", "label": "Default constructor with no override delegates to the resolver.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L104"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "subprocess", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "unittest_mock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "exlab_wizard_tray_window_launcher", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "tray_test_window_launcher_python_window_argv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "tray_test_window_launcher_test_open_spawns_subprocess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "tray_test_window_launcher_test_close_terminates_subprocess", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "tray_test_window_launcher_test_close_is_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "tray_test_window_launcher_test_open_focuses_existing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "tray_test_window_launcher_test_resolve_window_executable_prefers_env_var", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L71", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "tray_test_window_launcher_test_resolve_window_executable_uses_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "tray_test_window_launcher_test_resolve_window_executable_falls_back_to_module", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L85", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "tray_test_window_launcher_test_window_executable_override", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L95", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "tray_test_window_launcher_test_argv_falls_through_resolve_helper", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L103", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "tray_test_window_launcher_test_pid_is_none_before_open", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L113", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "target": "tray_test_window_launcher_test_close_kills_unresponsive_process", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L119", "weight": 1.0}, {"source": "tray_test_window_launcher_test_open_spawns_subprocess", "target": "tray_test_window_launcher_python_window_argv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L31", "weight": 1.0}, {"source": "tray_test_window_launcher_test_close_terminates_subprocess", "target": "tray_test_window_launcher_python_window_argv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L44", "weight": 1.0}, {"source": "tray_test_window_launcher_test_open_focuses_existing", "target": "tray_test_window_launcher_python_window_argv", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L62", "weight": 1.0}, {"source": "tray_test_window_launcher_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_tray_test_window_launcher_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_test_window_launcher_rationale_19", "target": "tray_test_window_launcher_python_window_argv", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L19", "weight": 1.0}, {"source": "tray_test_window_launcher_rationale_104", "target": "tray_test_window_launcher_test_argv_falls_through_resolve_helper", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L104", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_test_window_launcher_test_open_spawns_subprocess", "callee": "WindowLauncher", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L30"}, {"caller_nid": "tray_test_window_launcher_test_open_spawns_subprocess", "callee": "object", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L32"}, {"caller_nid": "tray_test_window_launcher_test_open_spawns_subprocess", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L33"}, {"caller_nid": "tray_test_window_launcher_test_open_spawns_subprocess", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L36"}, {"caller_nid": "tray_test_window_launcher_test_open_spawns_subprocess", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L38"}, {"caller_nid": "tray_test_window_launcher_test_close_terminates_subprocess", "callee": "WindowLauncher", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L43"}, {"caller_nid": "tray_test_window_launcher_test_close_terminates_subprocess", "callee": "object", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L44"}, {"caller_nid": "tray_test_window_launcher_test_close_terminates_subprocess", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L45"}, {"caller_nid": "tray_test_window_launcher_test_close_terminates_subprocess", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L48"}, {"caller_nid": "tray_test_window_launcher_test_close_is_idempotent", "callee": "WindowLauncher", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L54"}, {"caller_nid": "tray_test_window_launcher_test_close_is_idempotent", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L55"}, {"caller_nid": "tray_test_window_launcher_test_close_is_idempotent", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L56"}, {"caller_nid": "tray_test_window_launcher_test_open_focuses_existing", "callee": "WindowLauncher", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L61"}, {"caller_nid": "tray_test_window_launcher_test_open_focuses_existing", "callee": "object", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L62"}, {"caller_nid": "tray_test_window_launcher_test_open_focuses_existing", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L63"}, {"caller_nid": "tray_test_window_launcher_test_open_focuses_existing", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L65"}, {"caller_nid": "tray_test_window_launcher_test_open_focuses_existing", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L66"}, {"caller_nid": "tray_test_window_launcher_test_open_focuses_existing", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L67"}, {"caller_nid": "tray_test_window_launcher_test_open_focuses_existing", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L68"}, {"caller_nid": "tray_test_window_launcher_test_open_focuses_existing", "callee": "getMessage", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L68"}, {"caller_nid": "tray_test_window_launcher_test_resolve_window_executable_prefers_env_var", "callee": "setenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L72"}, {"caller_nid": "tray_test_window_launcher_test_resolve_window_executable_prefers_env_var", "callee": "_resolve_window_executable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L73"}, {"caller_nid": "tray_test_window_launcher_test_resolve_window_executable_uses_path", "callee": "delenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L77"}, {"caller_nid": "tray_test_window_launcher_test_resolve_window_executable_uses_path", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L78"}, {"caller_nid": "tray_test_window_launcher_test_resolve_window_executable_uses_path", "callee": "_resolve_window_executable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L82"}, {"caller_nid": "tray_test_window_launcher_test_resolve_window_executable_falls_back_to_module", "callee": "delenv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L88"}, {"caller_nid": "tray_test_window_launcher_test_resolve_window_executable_falls_back_to_module", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L89"}, {"caller_nid": "tray_test_window_launcher_test_resolve_window_executable_falls_back_to_module", "callee": "_resolve_window_executable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L90"}, {"caller_nid": "tray_test_window_launcher_test_window_executable_override", "callee": "WindowLauncher", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L96"}, {"caller_nid": "tray_test_window_launcher_test_window_executable_override", "callee": "_argv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L100"}, {"caller_nid": "tray_test_window_launcher_test_argv_falls_through_resolve_helper", "callee": "WindowLauncher", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L105"}, {"caller_nid": "tray_test_window_launcher_test_argv_falls_through_resolve_helper", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L106"}, {"caller_nid": "tray_test_window_launcher_test_argv_falls_through_resolve_helper", "callee": "_argv", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L110"}, {"caller_nid": "tray_test_window_launcher_test_pid_is_none_before_open", "callee": "WindowLauncher", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L114"}, {"caller_nid": "tray_test_window_launcher_test_close_kills_unresponsive_process", "callee": "WindowLauncher", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L120"}, {"caller_nid": "tray_test_window_launcher_test_close_kills_unresponsive_process", "callee": "_ZombieProc", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L146"}, {"caller_nid": "tray_test_window_launcher_test_close_kills_unresponsive_process", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py", "source_location": "L148"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/d55c110e167e4907f0a2e08bb216c5b9a78d4182b72b3af5ac69448a05607bfb.json b/graphify-out/cache/ast/d55c110e167e4907f0a2e08bb216c5b9a78d4182b72b3af5ac69448a05607bfb.json new file mode 100644 index 0000000..35dc12b --- /dev/null +++ b/graphify-out/cache/ast/d55c110e167e4907f0a2e08bb216c5b9a78d4182b72b3af5ac69448a05607bfb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_user_guide_07_orchestrator_md", "label": "07_orchestrator.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L1"}, {"id": "user_guide_07_orchestrator_3_7_monitor_orchestrator_staging", "label": "3.7 Monitor Orchestrator Staging", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L1"}, {"id": "user_guide_07_orchestrator_capability_summary", "label": "Capability summary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L3"}, {"id": "user_guide_07_orchestrator_walkthrough", "label": "Walkthrough", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L16"}, {"id": "user_guide_07_orchestrator_screenshots", "label": "Screenshots", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L29"}, {"id": "user_guide_07_orchestrator_codeblock_1", "label": "code:{image} (:alt: Staging dock with one row in the staging state)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L31"}, {"id": "user_guide_07_orchestrator_codeblock_2", "label": "code:{image} (:alt: Main window with the orchestrator staging panel enable)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L36"}, {"id": "user_guide_07_orchestrator_related_material", "label": "Related material", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L41"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_user_guide_07_orchestrator_md", "target": "user_guide_07_orchestrator_3_7_monitor_orchestrator_staging", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L1", "weight": 1.0}, {"source": "user_guide_07_orchestrator_3_7_monitor_orchestrator_staging", "target": "user_guide_07_orchestrator_capability_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L3", "weight": 1.0}, {"source": "user_guide_07_orchestrator_3_7_monitor_orchestrator_staging", "target": "user_guide_07_orchestrator_walkthrough", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L16", "weight": 1.0}, {"source": "user_guide_07_orchestrator_3_7_monitor_orchestrator_staging", "target": "user_guide_07_orchestrator_screenshots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L29", "weight": 1.0}, {"source": "user_guide_07_orchestrator_screenshots", "target": "user_guide_07_orchestrator_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L31", "weight": 1.0}, {"source": "user_guide_07_orchestrator_screenshots", "target": "user_guide_07_orchestrator_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L36", "weight": 1.0}, {"source": "user_guide_07_orchestrator_3_7_monitor_orchestrator_staging", "target": "user_guide_07_orchestrator_related_material", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md", "source_location": "L41", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/d7033176f0b9ac2ec38d6ff94e6d13d55167fd4cd99fe182b9679f5bfe79d4b0.json b/graphify-out/cache/ast/d7033176f0b9ac2ec38d6ff94e6d13d55167fd4cd99fe182b9679f5bfe79d4b0.json new file mode 100644 index 0000000..4e639fe --- /dev/null +++ b/graphify-out/cache/ast/d7033176f0b9ac2ec38d6ff94e6d13d55167fd4cd99fe182b9679f5bfe79d4b0.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "label": "notifications.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L1"}, {"id": "tray_notifications_notify", "label": "notify()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L50"}, {"id": "tray_notifications_default_notifier", "label": "_default_notifier()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L70"}, {"id": "tray_notifications_noop_notifier", "label": "_noop_notifier()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L80"}, {"id": "tray_notifications_bucket", "label": "_Bucket", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L90"}, {"id": "tray_notifications_notificationbus", "label": "NotificationBus", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L99"}, {"id": "tray_notifications_notificationbus_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L108"}, {"id": "tray_notifications_notificationbus_emit", "label": ".emit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L125"}, {"id": "tray_notifications_notificationbus_flush_pending", "label": ".flush_pending()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L153"}, {"id": "tray_notifications_notificationbus_cancel_all", "label": ".cancel_all()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L166"}, {"id": "tray_notifications_notificationbus_flush", "label": "._flush()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L178"}, {"id": "tray_notifications_coalesced_message", "label": "_coalesced_message()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L192"}, {"id": "tray_notifications_rationale_1", "label": "OS notifications via plyer with 5-second coalescing. Backend Spec \u00a715.7.3. Two", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L1"}, {"id": "tray_notifications_rationale_56", "label": "Fire a plyer notification (or an injected stub). ``notifier`` defaults to `", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L56"}, {"id": "tray_notifications_rationale_71", "label": "Resolve the plyer notifier lazily; safe even when plyer's backend errors.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L71"}, {"id": "tray_notifications_rationale_91", "label": "Per-trigger coalescing bucket.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L91"}, {"id": "tray_notifications_rationale_100", "label": "Coalescing layer over :func:`notify`. The launcher constructs one bus and t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L100"}, {"id": "tray_notifications_rationale_126", "label": "Submit a notification trigger. If the window is foregrounded the call i", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L126"}, {"id": "tray_notifications_rationale_154", "label": "Drain every active bucket synchronously. Returns the bucket count. Used", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L154"}, {"id": "tray_notifications_rationale_167", "label": "Cancel every active timer without firing the notifications.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L167"}, {"id": "tray_notifications_rationale_193", "label": "Render the coalesced summary string for a burst of ``count`` events.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L193"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "target": "threading", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "target": "tray_notifications_notify", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "target": "tray_notifications_default_notifier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L70", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "target": "tray_notifications_noop_notifier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L80", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "target": "tray_notifications_bucket", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L90", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "target": "tray_notifications_notificationbus", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L99", "weight": 1.0}, {"source": "tray_notifications_notificationbus", "target": "tray_notifications_notificationbus_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L108", "weight": 1.0}, {"source": "tray_notifications_notificationbus", "target": "tray_notifications_notificationbus_emit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L125", "weight": 1.0}, {"source": "tray_notifications_notificationbus", "target": "tray_notifications_notificationbus_flush_pending", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L153", "weight": 1.0}, {"source": "tray_notifications_notificationbus", "target": "tray_notifications_notificationbus_cancel_all", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L166", "weight": 1.0}, {"source": "tray_notifications_notificationbus", "target": "tray_notifications_notificationbus_flush", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L178", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "target": "tray_notifications_coalesced_message", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L192", "weight": 1.0}, {"source": "tray_notifications_notify", "target": "tray_notifications_default_notifier", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L63", "weight": 1.0}, {"source": "tray_notifications_notificationbus_emit", "target": "tray_notifications_bucket", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L141", "weight": 1.0}, {"source": "tray_notifications_notificationbus_flush_pending", "target": "tray_notifications_notificationbus_flush", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L163", "weight": 1.0}, {"source": "tray_notifications_notificationbus_flush", "target": "tray_notifications_coalesced_message", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L188", "weight": 1.0}, {"source": "tray_notifications_notificationbus_flush", "target": "tray_notifications_notify", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L189", "weight": 1.0}, {"source": "tray_notifications_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_tray_notifications_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_notifications_rationale_56", "target": "tray_notifications_notify", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L56", "weight": 1.0}, {"source": "tray_notifications_rationale_71", "target": "tray_notifications_default_notifier", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L71", "weight": 1.0}, {"source": "tray_notifications_rationale_91", "target": "tray_notifications_bucket", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L91", "weight": 1.0}, {"source": "tray_notifications_rationale_100", "target": "tray_notifications_notificationbus", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L100", "weight": 1.0}, {"source": "tray_notifications_rationale_126", "target": "tray_notifications_notificationbus_emit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L126", "weight": 1.0}, {"source": "tray_notifications_rationale_154", "target": "tray_notifications_notificationbus_flush_pending", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L154", "weight": 1.0}, {"source": "tray_notifications_rationale_167", "target": "tray_notifications_notificationbus_cancel_all", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L167", "weight": 1.0}, {"source": "tray_notifications_rationale_193", "target": "tray_notifications_coalesced_message", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L193", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_notifications_notify", "callee": "fn", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L65"}, {"caller_nid": "tray_notifications_notify", "callee": "exception", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L67"}, {"caller_nid": "tray_notifications_noop_notifier", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L81"}, {"caller_nid": "tray_notifications_notificationbus_init", "callee": "float", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L117"}, {"caller_nid": "tray_notifications_notificationbus_init", "callee": "Lock", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L119"}, {"caller_nid": "tray_notifications_notificationbus_emit", "callee": "_is_foreground", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L134"}, {"caller_nid": "tray_notifications_notificationbus_emit", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L135"}, {"caller_nid": "tray_notifications_notificationbus_emit", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L139"}, {"caller_nid": "tray_notifications_notificationbus_emit", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L145"}, {"caller_nid": "tray_notifications_notificationbus_emit", "callee": "Timer", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L146"}, {"caller_nid": "tray_notifications_notificationbus_emit", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L148"}, {"caller_nid": "tray_notifications_notificationbus_flush_pending", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L161"}, {"caller_nid": "tray_notifications_notificationbus_flush_pending", "callee": "keys", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L161"}, {"caller_nid": "tray_notifications_notificationbus_flush_pending", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L164"}, {"caller_nid": "tray_notifications_notificationbus_cancel_all", "callee": "values", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L169"}, {"caller_nid": "tray_notifications_notificationbus_cancel_all", "callee": "cancel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L171"}, {"caller_nid": "tray_notifications_notificationbus_cancel_all", "callee": "clear", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L172"}, {"caller_nid": "tray_notifications_notificationbus_flush", "callee": "pop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L180"}, {"caller_nid": "tray_notifications_notificationbus_flush", "callee": "cancel", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py", "source_location": "L184"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/d76e29c53767405f18ffebfb133d434a46c2b38ec110c4a227e75dd0b1625c10.json b/graphify-out/cache/ast/d76e29c53767405f18ffebfb133d434a46c2b38ec110c4a227e75dd0b1625c10.json new file mode 100644 index 0000000..0df3bcf --- /dev/null +++ b/graphify-out/cache/ast/d76e29c53767405f18ffebfb133d434a46c2b38ec110c4a227e75dd0b1625c10.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_io_yaml_files_py", "label": "yaml_files.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py", "source_location": "L1"}, {"id": "io_yaml_files_load_yaml_manifest", "label": "load_yaml_manifest()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py", "source_location": "L20"}, {"id": "io_yaml_files_rationale_1", "label": "Shared YAML manifest reader (PyYAML safe-load). Used for read-only manifests wh", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py", "source_location": "L1"}, {"id": "io_yaml_files_rationale_21", "label": "Read and ``safe_load`` a YAML manifest into a plain dict. Raises ``FileNotF", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py", "source_location": "L21"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_yaml_files_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_yaml_files_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_yaml_files_py", "target": "yaml", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_yaml_files_py", "target": "io_yaml_files_load_yaml_manifest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py", "source_location": "L20", "weight": 1.0}, {"source": "io_yaml_files_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_io_yaml_files_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py", "source_location": "L1", "weight": 1.0}, {"source": "io_yaml_files_rationale_21", "target": "io_yaml_files_load_yaml_manifest", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py", "source_location": "L21", "weight": 1.0}], "raw_calls": [{"caller_nid": "io_yaml_files_load_yaml_manifest", "callee": "safe_load", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py", "source_location": "L28"}, {"caller_nid": "io_yaml_files_load_yaml_manifest", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py", "source_location": "L28"}, {"caller_nid": "io_yaml_files_load_yaml_manifest", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py", "source_location": "L29"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/d7faaf4a2f9cc8b6887e77a49bb7651ff547e9c0e83e0e210904c46616bb8985.json b/graphify-out/cache/ast/d7faaf4a2f9cc8b6887e77a49bb7651ff547e9c0e83e0e210904c46616bb8985.json new file mode 100644 index 0000000..9d9d871 --- /dev/null +++ b/graphify-out/cache/ast/d7faaf4a2f9cc8b6887e77a49bb7651ff547e9c0e83e0e210904c46616bb8985.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "label": "test_nas_client.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L1"}, {"id": "sync_test_nas_client_build_config", "label": "_build_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L55"}, {"id": "sync_test_nas_client_make_creation", "label": "_make_creation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L86"}, {"id": "sync_test_nas_client_populate_run", "label": "_populate_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L106"}, {"id": "sync_test_nas_client_make_push_factory", "label": "_make_push_factory()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L119"}, {"id": "sync_test_nas_client_writer", "label": "writer()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L136"}, {"id": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "label": "test_enqueue_blocks_run_with_hard_finding_no_override()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L145"}, {"id": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", "label": "test_enqueue_clean_run_creates_queued_row()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L176"}, {"id": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "label": "test_enqueue_with_active_override_unblocks()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L206"}, {"id": "sync_test_nas_client_test_status_returns_none_when_no_job", "label": "test_status_returns_none_when_no_job()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L254"}, {"id": "sync_test_nas_client_test_retry_resets_failed_to_queued", "label": "test_retry_resets_failed_to_queued()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L275"}, {"id": "sync_test_nas_client_test_force_verify_returns_self_consistent", "label": "test_force_verify_returns_self_consistent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L310"}, {"id": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "label": "test_worker_drives_to_verified_and_marks_synced()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L334"}, {"id": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "label": "test_worker_terminal_failed_on_auth_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L376"}, {"id": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "label": "test_enqueue_existing_failed_resets_to_queued()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L402"}, {"id": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", "label": "test_enqueue_idempotent_for_already_queued_row()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L435"}, {"id": "sync_test_nas_client_test_close_is_idempotent", "label": "test_close_is_idempotent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L469"}, {"id": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", "label": "test_mark_cleaned_writes_cleaned_to_creation_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L487"}, {"id": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", "label": "test_mark_cleaned_is_noop_when_creation_json_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L509"}, {"id": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", "label": "test_enqueue_with_files_inserts_subset()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L536"}, {"id": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "label": "test_enqueue_requeues_terminal_job_with_new_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L564"}, {"id": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", "label": "test_enqueue_noops_active_job_with_new_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L599"}, {"id": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "label": "test_apply_config_swaps_equipment_map()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L636"}, {"id": "sync_test_nas_client_rationale_1", "label": "Unit tests for ``exlab_wizard.sync.nas_client.NASSyncClient``. Backend Spec \u00a77.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L1"}, {"id": "sync_test_nas_client_rationale_107", "label": "Build a clean run directory with a creation.json under EQ1/PROJ-0042/.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L107"}, {"id": "sync_test_nas_client_rationale_122", "label": "A push callable factory that yields deterministic outcomes for tests.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L122"}, {"id": "sync_test_nas_client_rationale_148", "label": "A run path containing ```` is gated and not queued.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L148"}, {"id": "sync_test_nas_client_rationale_209", "label": "A run with placeholder findings + matching active overrides is queued.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L209"}, {"id": "sync_test_nas_client_rationale_337", "label": "A successful push -> AWAITING_VERIFY -> VERIFIED -> sync_status='synced'.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L337"}, {"id": "sync_test_nas_client_rationale_405", "label": "Re-enqueueing a FAILED row resets it back to QUEUED.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L405"}, {"id": "sync_test_nas_client_rationale_438", "label": "Enqueueing twice for the same path returns the same job id.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L438"}, {"id": "sync_test_nas_client_rationale_490", "label": "``_mark_cleaned`` flips ``creation.json.sync_status`` to ``\"cleaned\"``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L490"}, {"id": "sync_test_nas_client_rationale_512", "label": "With ``retain_cache=False`` the cache dir is gone; ``_mark_cleaned`` no-ops.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L512"}, {"id": "sync_test_nas_client_rationale_537", "label": "``enqueue(run, files=[...])`` stores the subset on the queue row.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L537"}, {"id": "sync_test_nas_client_rationale_567", "label": "A terminal (FAILED) job is re-armed in QUEUED with a fresh file subset.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L567"}, {"id": "sync_test_nas_client_rationale_602", "label": "An active (QUEUED) job is left untouched when re-enqueued with new files.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L602"}, {"id": "sync_test_nas_client_rationale_637", "label": "A live config swap rebuilds the equipment lookup in place.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L637"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "exlab_wizard_cache_creation_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "exlab_wizard_sync_nas_client", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "exlab_wizard_sync_queue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "exlab_wizard_sync_transports", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "exlab_wizard_validator_engine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "tests_unit_sync_helpers", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_build_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L55", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_make_creation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L86", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_populate_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L106", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_make_push_factory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L119", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_writer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L136", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L145", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L176", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L206", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_status_returns_none_when_no_job", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L254", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_retry_resets_failed_to_queued", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L275", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_force_verify_returns_self_consistent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L310", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L334", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L376", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L402", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L435", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_close_is_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L469", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L487", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L509", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L536", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L564", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L599", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "target": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L636", "weight": 1.0}, {"source": "sync_test_nas_client_populate_run", "target": "sync_test_nas_client_make_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L114", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L149", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "target": "sync_test_nas_client_make_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L155", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "target": "sync_test_nas_client_make_push_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L163", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L177", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", "target": "sync_test_nas_client_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L178", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", "target": "sync_test_nas_client_make_push_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L185", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L210", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "target": "sync_test_nas_client_make_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L236", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "target": "sync_test_nas_client_make_push_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L244", "weight": 1.0}, {"source": "sync_test_nas_client_test_status_returns_none_when_no_job", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L255", "weight": 1.0}, {"source": "sync_test_nas_client_test_status_returns_none_when_no_job", "target": "sync_test_nas_client_make_push_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L261", "weight": 1.0}, {"source": "sync_test_nas_client_test_retry_resets_failed_to_queued", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L276", "weight": 1.0}, {"source": "sync_test_nas_client_test_retry_resets_failed_to_queued", "target": "sync_test_nas_client_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L277", "weight": 1.0}, {"source": "sync_test_nas_client_test_retry_resets_failed_to_queued", "target": "sync_test_nas_client_make_push_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L285", "weight": 1.0}, {"source": "sync_test_nas_client_test_force_verify_returns_self_consistent", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L311", "weight": 1.0}, {"source": "sync_test_nas_client_test_force_verify_returns_self_consistent", "target": "sync_test_nas_client_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L312", "weight": 1.0}, {"source": "sync_test_nas_client_test_force_verify_returns_self_consistent", "target": "sync_test_nas_client_make_push_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L319", "weight": 1.0}, {"source": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L338", "weight": 1.0}, {"source": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "target": "sync_test_nas_client_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L339", "weight": 1.0}, {"source": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "target": "sync_test_nas_client_make_push_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L346", "weight": 1.0}, {"source": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L377", "weight": 1.0}, {"source": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "target": "sync_test_nas_client_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L378", "weight": 1.0}, {"source": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "target": "sync_test_nas_client_make_push_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L385", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L406", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "target": "sync_test_nas_client_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L407", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "target": "sync_test_nas_client_make_push_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L414", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L439", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", "target": "sync_test_nas_client_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L440", "weight": 1.0}, {"source": "sync_test_nas_client_test_close_is_idempotent", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L470", "weight": 1.0}, {"source": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L491", "weight": 1.0}, {"source": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", "target": "sync_test_nas_client_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L492", "weight": 1.0}, {"source": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L513", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L538", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", "target": "sync_test_nas_client_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L539", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L568", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "target": "sync_test_nas_client_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L569", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "target": "sync_test_nas_client_make_push_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L576", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L603", "weight": 1.0}, {"source": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", "target": "sync_test_nas_client_populate_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L604", "weight": 1.0}, {"source": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "target": "sync_test_nas_client_build_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L639", "weight": 1.0}, {"source": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "target": "sync_test_nas_client_make_push_factory", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L643", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_sync_test_nas_client_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L1", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_107", "target": "sync_test_nas_client_populate_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L107", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_122", "target": "sync_test_nas_client_make_push_factory", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L122", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_148", "target": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L148", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_209", "target": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L209", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_337", "target": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L337", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_405", "target": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L405", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_438", "target": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L438", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_490", "target": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L490", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_512", "target": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L512", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_537", "target": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L537", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_567", "target": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L567", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_602", "target": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L602", "weight": 1.0}, {"source": "sync_test_nas_client_rationale_637", "target": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L637", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_test_nas_client_build_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L56"}, {"caller_nid": "sync_test_nas_client_build_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L57"}, {"caller_nid": "sync_test_nas_client_build_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L60"}, {"caller_nid": "sync_test_nas_client_build_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L63"}, {"caller_nid": "sync_test_nas_client_build_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L66"}, {"caller_nid": "sync_test_nas_client_build_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L68"}, {"caller_nid": "sync_test_nas_client_build_config", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L73"}, {"caller_nid": "sync_test_nas_client_build_config", "callee": "NASCleanupConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L77"}, {"caller_nid": "sync_test_nas_client_make_creation", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L87"}, {"caller_nid": "sync_test_nas_client_make_creation", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L93"}, {"caller_nid": "sync_test_nas_client_make_creation", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L94"}, {"caller_nid": "sync_test_nas_client_make_creation", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L101"}, {"caller_nid": "sync_test_nas_client_make_creation", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L101"}, {"caller_nid": "sync_test_nas_client_populate_run", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L109"}, {"caller_nid": "sync_test_nas_client_populate_run", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L110"}, {"caller_nid": "sync_test_nas_client_populate_run", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L112"}, {"caller_nid": "sync_test_nas_client_populate_run", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L115"}, {"caller_nid": "sync_test_nas_client_populate_run", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L115"}, {"caller_nid": "sync_test_nas_client_writer", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L137"}, {"caller_nid": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L151"}, {"caller_nid": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L153"}, {"caller_nid": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L156"}, {"caller_nid": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L156"}, {"caller_nid": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L158"}, {"caller_nid": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L161"}, {"caller_nid": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L165"}, {"caller_nid": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L167"}, {"caller_nid": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L170"}, {"caller_nid": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L170"}, {"caller_nid": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L173"}, {"caller_nid": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L180"}, {"caller_nid": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L183"}, {"caller_nid": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L187"}, {"caller_nid": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L189"}, {"caller_nid": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", "callee": "status", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L193"}, {"caller_nid": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L203"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L212"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L214"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L217"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L218"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "callee": "override_entry_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L226"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "callee": "OverrideEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L227"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L237"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L237"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L239"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L242"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L246"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L248"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L251"}, {"caller_nid": "sync_test_nas_client_test_status_returns_none_when_no_job", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L256"}, {"caller_nid": "sync_test_nas_client_test_status_returns_none_when_no_job", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L259"}, {"caller_nid": "sync_test_nas_client_test_status_returns_none_when_no_job", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L263"}, {"caller_nid": "sync_test_nas_client_test_status_returns_none_when_no_job", "callee": "status", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L265"}, {"caller_nid": "sync_test_nas_client_test_status_returns_none_when_no_job", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L267"}, {"caller_nid": "sync_test_nas_client_test_retry_resets_failed_to_queued", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L279"}, {"caller_nid": "sync_test_nas_client_test_retry_resets_failed_to_queued", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L282"}, {"caller_nid": "sync_test_nas_client_test_retry_resets_failed_to_queued", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L288"}, {"caller_nid": "sync_test_nas_client_test_retry_resets_failed_to_queued", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L290"}, {"caller_nid": "sync_test_nas_client_test_retry_resets_failed_to_queued", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L292"}, {"caller_nid": "sync_test_nas_client_test_retry_resets_failed_to_queued", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L293"}, {"caller_nid": "sync_test_nas_client_test_retry_resets_failed_to_queued", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L296"}, {"caller_nid": "sync_test_nas_client_test_retry_resets_failed_to_queued", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L298"}, {"caller_nid": "sync_test_nas_client_test_retry_resets_failed_to_queued", "callee": "retry", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L300"}, {"caller_nid": "sync_test_nas_client_test_retry_resets_failed_to_queued", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L301"}, {"caller_nid": "sync_test_nas_client_test_retry_resets_failed_to_queued", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L307"}, {"caller_nid": "sync_test_nas_client_test_force_verify_returns_self_consistent", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L314"}, {"caller_nid": "sync_test_nas_client_test_force_verify_returns_self_consistent", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L317"}, {"caller_nid": "sync_test_nas_client_test_force_verify_returns_self_consistent", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L321"}, {"caller_nid": "sync_test_nas_client_test_force_verify_returns_self_consistent", "callee": "force_verify", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L323"}, {"caller_nid": "sync_test_nas_client_test_force_verify_returns_self_consistent", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L326"}, {"caller_nid": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L341"}, {"caller_nid": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L344"}, {"caller_nid": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "callee": "local_check_factory", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L350"}, {"caller_nid": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L355"}, {"caller_nid": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L357"}, {"caller_nid": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L358"}, {"caller_nid": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L359"}, {"caller_nid": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L366"}, {"caller_nid": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L368"}, {"caller_nid": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L370"}, {"caller_nid": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L370"}, {"caller_nid": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L373"}, {"caller_nid": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L380"}, {"caller_nid": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L383"}, {"caller_nid": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L388"}, {"caller_nid": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L390"}, {"caller_nid": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L391"}, {"caller_nid": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L392"}, {"caller_nid": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L395"}, {"caller_nid": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L397"}, {"caller_nid": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L399"}, {"caller_nid": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L409"}, {"caller_nid": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L412"}, {"caller_nid": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L417"}, {"caller_nid": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L419"}, {"caller_nid": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L420"}, {"caller_nid": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L421"}, {"caller_nid": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L424"}, {"caller_nid": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L426"}, {"caller_nid": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L428"}, {"caller_nid": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L432"}, {"caller_nid": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L452"}, {"caller_nid": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L455"}, {"caller_nid": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L460"}, {"caller_nid": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L462"}, {"caller_nid": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L463"}, {"caller_nid": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L466"}, {"caller_nid": "sync_test_nas_client_test_close_is_idempotent", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L471"}, {"caller_nid": "sync_test_nas_client_test_close_is_idempotent", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L474"}, {"caller_nid": "sync_test_nas_client_test_close_is_idempotent", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L477"}, {"caller_nid": "sync_test_nas_client_test_close_is_idempotent", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L478"}, {"caller_nid": "sync_test_nas_client_test_close_is_idempotent", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L479"}, {"caller_nid": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L493"}, {"caller_nid": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L496"}, {"caller_nid": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L499"}, {"caller_nid": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", "callee": "_mark_cleaned", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L501"}, {"caller_nid": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L503"}, {"caller_nid": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L503"}, {"caller_nid": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L506"}, {"caller_nid": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L515"}, {"caller_nid": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L517"}, {"caller_nid": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L520"}, {"caller_nid": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L523"}, {"caller_nid": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", "callee": "_mark_cleaned", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L526"}, {"caller_nid": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L528"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L545"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L548"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L553"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L555"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", "callee": "get_by_run_path", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L557"}, {"caller_nid": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L561"}, {"caller_nid": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L571"}, {"caller_nid": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L574"}, {"caller_nid": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L579"}, {"caller_nid": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L581"}, {"caller_nid": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L582"}, {"caller_nid": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L583"}, {"caller_nid": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L586"}, {"caller_nid": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "callee": "fail", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L588"}, {"caller_nid": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L590"}, {"caller_nid": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "callee": "get_by_run_path", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L592"}, {"caller_nid": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L596"}, {"caller_nid": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L610"}, {"caller_nid": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L613"}, {"caller_nid": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L618"}, {"caller_nid": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L620"}, {"caller_nid": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", "callee": "enqueue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L621"}, {"caller_nid": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", "callee": "get_by_run_path", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L624"}, {"caller_nid": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L628"}, {"caller_nid": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "callee": "NASSyncClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L638"}, {"caller_nid": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L641"}, {"caller_nid": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L642"}, {"caller_nid": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L645"}, {"caller_nid": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L647"}, {"caller_nid": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L648"}, {"caller_nid": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L648"}, {"caller_nid": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L650"}, {"caller_nid": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L653"}, {"caller_nid": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L655"}, {"caller_nid": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L660"}, {"caller_nid": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "callee": "apply_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L665"}, {"caller_nid": "sync_test_nas_client_test_apply_config_swaps_equipment_map", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py", "source_location": "L669"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/d815b109fb73b6284ca20783d4c9a09495a184c3acf2e578c2f85d00328a9fa4.json b/graphify-out/cache/ast/d815b109fb73b6284ca20783d4c9a09495a184c3acf2e578c2f85d00328a9fa4.json new file mode 100644 index 0000000..586f613 --- /dev/null +++ b/graphify-out/cache/ast/d815b109fb73b6284ca20783d4c9a09495a184c3acf2e578c2f85d00328a9fa4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "label": "test_validator_determinism.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L1"}, {"id": "integration_test_validator_determinism_build_creation_json_dict", "label": "_build_creation_json_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L49"}, {"id": "integration_test_validator_determinism_write_creation_json", "label": "_write_creation_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L83"}, {"id": "integration_test_validator_determinism_build_fixture_tree", "label": "_build_fixture_tree()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L89"}, {"id": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "label": "test_audit_two_calls_return_byte_identical_finding_lists()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L164"}, {"id": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", "label": "test_audit_byte_identical_with_query_problems_alias()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L221"}, {"id": "integration_test_validator_determinism_rationale_1", "label": "Integration test: ``Validator.audit`` is byte-deterministic across runs. Backen", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L1"}, {"id": "integration_test_validator_determinism_rationale_90", "label": "Construct a tree with several findings in stable on-disk shape. The tree co", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L90"}, {"id": "integration_test_validator_determinism_rationale_165", "label": "Spec \u00a711.8 determinism: two ``audit`` calls produce identical findings. The", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L165"}, {"id": "integration_test_validator_determinism_rationale_222", "label": "``audit`` and ``query_problems`` produce byte-identical outputs. This is th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L222"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "target": "msgspec", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "target": "exlab_wizard_validator_engine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "target": "exlab_wizard_validator_findings", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "target": "integration_test_validator_determinism_build_creation_json_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L49", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "target": "integration_test_validator_determinism_write_creation_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "target": "integration_test_validator_determinism_build_fixture_tree", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L89", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "target": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L164", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "target": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L221", "weight": 1.0}, {"source": "integration_test_validator_determinism_build_fixture_tree", "target": "integration_test_validator_determinism_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L112", "weight": 1.0}, {"source": "integration_test_validator_determinism_build_fixture_tree", "target": "integration_test_validator_determinism_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L112", "weight": 1.0}, {"source": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "target": "integration_test_validator_determinism_build_fixture_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L175", "weight": 1.0}, {"source": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", "target": "integration_test_validator_determinism_build_fixture_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L229", "weight": 1.0}, {"source": "integration_test_validator_determinism_rationale_1", "target": "users_alex_projects_exlabwizard_tests_integration_test_validator_determinism_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L1", "weight": 1.0}, {"source": "integration_test_validator_determinism_rationale_90", "target": "integration_test_validator_determinism_build_fixture_tree", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L90", "weight": 1.0}, {"source": "integration_test_validator_determinism_rationale_165", "target": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L165", "weight": 1.0}, {"source": "integration_test_validator_determinism_rationale_222", "target": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L222", "weight": 1.0}], "raw_calls": [{"caller_nid": "integration_test_validator_determinism_write_creation_json", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L85"}, {"caller_nid": "integration_test_validator_determinism_write_creation_json", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L86"}, {"caller_nid": "integration_test_validator_determinism_write_creation_json", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L86"}, {"caller_nid": "integration_test_validator_determinism_write_creation_json", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L86"}, {"caller_nid": "integration_test_validator_determinism_build_fixture_tree", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L111"}, {"caller_nid": "integration_test_validator_determinism_build_fixture_tree", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L118"}, {"caller_nid": "integration_test_validator_determinism_build_fixture_tree", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L124"}, {"caller_nid": "integration_test_validator_determinism_build_fixture_tree", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L134"}, {"caller_nid": "integration_test_validator_determinism_build_fixture_tree", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L141"}, {"caller_nid": "integration_test_validator_determinism_build_fixture_tree", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L144"}, {"caller_nid": "integration_test_validator_determinism_build_fixture_tree", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L149"}, {"caller_nid": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L177"}, {"caller_nid": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L190"}, {"caller_nid": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L195"}, {"caller_nid": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L196"}, {"caller_nid": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L205"}, {"caller_nid": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L205"}, {"caller_nid": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "callee": "zip", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L206"}, {"caller_nid": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L207"}, {"caller_nid": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L208"}, {"caller_nid": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "callee": "to_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L214"}, {"caller_nid": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "callee": "to_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L215"}, {"caller_nid": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L216"}, {"caller_nid": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L217"}, {"caller_nid": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L230"}, {"caller_nid": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L231"}, {"caller_nid": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L236"}, {"caller_nid": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", "callee": "query_problems", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L237"}, {"caller_nid": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L240"}, {"caller_nid": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", "callee": "to_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L240"}, {"caller_nid": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L241"}, {"caller_nid": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", "callee": "to_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py", "source_location": "L241"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/d9dc45e17622b92b9e7745976978d836e68505c30793342048149bce1c6123e3.json b/graphify-out/cache/ast/d9dc45e17622b92b9e7745976978d836e68505c30793342048149bce1c6123e3.json new file mode 100644 index 0000000..7f348f3 --- /dev/null +++ b/graphify-out/cache/ast/d9dc45e17622b92b9e7745976978d836e68505c30793342048149bce1c6123e3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "label": "file_list.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L1"}, {"id": "components_file_list_filelistentry", "label": "FileListEntry", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L38"}, {"id": "components_file_list_fileliststate", "label": "FileListState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L58"}, {"id": "components_file_list_filelistdiff", "label": "FileListDiff", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L68"}, {"id": "components_file_list_diff_file_lists", "label": "diff_file_lists()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L76"}, {"id": "components_file_list_render_file_list", "label": "render_file_list()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L112"}, {"id": "components_file_list_render_header", "label": "_render_header()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L155"}, {"id": "components_file_list_render_row", "label": "_render_row()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L180"}, {"id": "components_file_list_rationale_1", "label": "Live file-list component for the rebuilt main window. GUI/Orchestrator Redesign", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L1"}, {"id": "components_file_list_rationale_39", "label": "One row in the centre-pane file list. ``keep_local`` mirrors the file's ``s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L39"}, {"id": "components_file_list_rationale_59", "label": "Mutable state for the file list, consumed by the renderer.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L59"}, {"id": "components_file_list_rationale_69", "label": "Result of comparing two successive folder-list snapshots.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L69"}, {"id": "components_file_list_rationale_80", "label": "Return additions / removals / modifications between two snapshots. Pure fun", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L80"}, {"id": "components_file_list_rationale_118", "label": "Render the centre-pane file list. Pure render function. Double-clicking a f", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L118"}, {"id": "components_file_list_rationale_156", "label": "Render the file-list column header row (Name / Size / Modified / Status).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L156"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "target": "exlab_wizard_ui_components_sync_status_icon", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "target": "exlab_wizard_ui_pages_staging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "target": "components_file_list_filelistentry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "target": "components_file_list_fileliststate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "target": "components_file_list_filelistdiff", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L68", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "target": "components_file_list_diff_file_lists", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "target": "components_file_list_render_file_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L112", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "target": "components_file_list_render_header", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L155", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "target": "components_file_list_render_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L180", "weight": 1.0}, {"source": "components_file_list_diff_file_lists", "target": "components_file_list_filelistdiff", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L105", "weight": 1.0}, {"source": "components_file_list_render_file_list", "target": "components_file_list_render_header", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L143", "weight": 1.0}, {"source": "components_file_list_render_file_list", "target": "components_file_list_render_row", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L146", "weight": 1.0}, {"source": "components_file_list_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_file_list_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L1", "weight": 1.0}, {"source": "components_file_list_rationale_39", "target": "components_file_list_filelistentry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L39", "weight": 1.0}, {"source": "components_file_list_rationale_59", "target": "components_file_list_fileliststate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L59", "weight": 1.0}, {"source": "components_file_list_rationale_69", "target": "components_file_list_filelistdiff", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L69", "weight": 1.0}, {"source": "components_file_list_rationale_80", "target": "components_file_list_diff_file_lists", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L80", "weight": 1.0}, {"source": "components_file_list_rationale_118", "target": "components_file_list_render_file_list", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L118", "weight": 1.0}, {"source": "components_file_list_rationale_156", "target": "components_file_list_render_header", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L156", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_file_list_diff_file_lists", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L89"}, {"caller_nid": "components_file_list_diff_file_lists", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L90"}, {"caller_nid": "components_file_list_diff_file_lists", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L91"}, {"caller_nid": "components_file_list_diff_file_lists", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L91"}, {"caller_nid": "components_file_list_diff_file_lists", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L92"}, {"caller_nid": "components_file_list_diff_file_lists", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L92"}, {"caller_nid": "components_file_list_diff_file_lists", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L94"}, {"caller_nid": "components_file_list_diff_file_lists", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L104"}, {"caller_nid": "components_file_list_diff_file_lists", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L108"}, {"caller_nid": "components_file_list_render_file_list", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L130"}, {"caller_nid": "components_file_list_render_file_list", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L130"}, {"caller_nid": "components_file_list_render_file_list", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L130"}, {"caller_nid": "components_file_list_render_file_list", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L132"}, {"caller_nid": "components_file_list_render_file_list", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L132"}, {"caller_nid": "components_file_list_render_file_list", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L132"}, {"caller_nid": "components_file_list_render_file_list", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L137"}, {"caller_nid": "components_file_list_render_file_list", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L137"}, {"caller_nid": "components_file_list_render_file_list", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L137"}, {"caller_nid": "components_file_list_render_file_list", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L137"}, {"caller_nid": "components_file_list_render_file_list", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L142"}, {"caller_nid": "components_file_list_render_file_list", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L144"}, {"caller_nid": "components_file_list_render_header", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L166"}, {"caller_nid": "components_file_list_render_header", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L166"}, {"caller_nid": "components_file_list_render_header", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L166"}, {"caller_nid": "components_file_list_render_header", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L176"}, {"caller_nid": "components_file_list_render_header", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L176"}, {"caller_nid": "components_file_list_render_header", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L176"}, {"caller_nid": "components_file_list_render_header", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L177"}, {"caller_nid": "components_file_list_render_row", "callee": "format_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L192"}, {"caller_nid": "components_file_list_render_row", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L192"}, {"caller_nid": "components_file_list_render_row", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L202"}, {"caller_nid": "components_file_list_render_row", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L202"}, {"caller_nid": "components_file_list_render_row", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L202"}, {"caller_nid": "components_file_list_render_row", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L208"}, {"caller_nid": "components_file_list_render_row", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L208"}, {"caller_nid": "components_file_list_render_row", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L208"}, {"caller_nid": "components_file_list_render_row", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L209"}, {"caller_nid": "components_file_list_render_row", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L211"}, {"caller_nid": "components_file_list_render_row", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L211"}, {"caller_nid": "components_file_list_render_row", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L211"}, {"caller_nid": "components_file_list_render_row", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L216"}, {"caller_nid": "components_file_list_render_row", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L216"}, {"caller_nid": "components_file_list_render_row", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L217"}, {"caller_nid": "components_file_list_render_row", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L218"}, {"caller_nid": "components_file_list_render_row", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L218"}, {"caller_nid": "components_file_list_render_row", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L219"}, {"caller_nid": "components_file_list_render_row", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L220"}, {"caller_nid": "components_file_list_render_row", "callee": "element", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L220"}, {"caller_nid": "components_file_list_render_row", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L221"}, {"caller_nid": "components_file_list_render_row", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L223"}, {"caller_nid": "components_file_list_render_row", "callee": "context_menu", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L223"}, {"caller_nid": "components_file_list_render_row", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L229"}, {"caller_nid": "components_file_list_render_row", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L229"}, {"caller_nid": "components_file_list_render_row", "callee": "menu_item", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L229"}, {"caller_nid": "components_file_list_render_row", "callee": "on_context_menu", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L231"}, {"caller_nid": "components_file_list_render_row", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L233"}, {"caller_nid": "components_file_list_render_row", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L233"}, {"caller_nid": "components_file_list_render_row", "callee": "menu_item", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L233"}, {"caller_nid": "components_file_list_render_row", "callee": "on_context_menu", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L235"}, {"caller_nid": "components_file_list_render_row", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L238"}, {"caller_nid": "components_file_list_render_row", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L238"}, {"caller_nid": "components_file_list_render_row", "callee": "menu_item", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L238"}, {"caller_nid": "components_file_list_render_row", "callee": "on_context_menu", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py", "source_location": "L240"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/d9f5576bb88ed5ba36c780dd555ee1b5c0a5548947ce1c887be092f2d0b61768.json b/graphify-out/cache/ast/d9f5576bb88ed5ba36c780dd555ee1b5c0a5548947ce1c887be092f2d0b61768.json new file mode 100644 index 0000000..3235a18 --- /dev/null +++ b/graphify-out/cache/ast/d9f5576bb88ed5ba36c780dd555ee1b5c0a5548947ce1c887be092f2d0b61768.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "label": "test_keyring_store.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L1"}, {"id": "lims_test_keyring_store_inmemorykeyring", "label": "_InMemoryKeyring", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L25"}, {"id": "lims_test_keyring_store_inmemorykeyring_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L30"}, {"id": "lims_test_keyring_store_inmemorykeyring_get_password", "label": ".get_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L33"}, {"id": "lims_test_keyring_store_inmemorykeyring_set_password", "label": ".set_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L36"}, {"id": "lims_test_keyring_store_inmemorykeyring_delete_password", "label": ".delete_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L39"}, {"id": "lims_test_keyring_store_brokenkeyring", "label": "_BrokenKeyring", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L45"}, {"id": "lims_test_keyring_store_brokenkeyring_get_password", "label": ".get_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L50"}, {"id": "lims_test_keyring_store_brokenkeyring_set_password", "label": ".set_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L53"}, {"id": "lims_test_keyring_store_brokenkeyring_delete_password", "label": ".delete_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L56"}, {"id": "lims_test_keyring_store_swap_keyring", "label": "_swap_keyring()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L61"}, {"id": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", "label": "test_set_get_delete_via_os_keyring()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L70"}, {"id": "lims_test_keyring_store_test_get_returns_none_for_missing", "label": "test_get_returns_none_for_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L79"}, {"id": "lims_test_keyring_store_test_delete_missing_is_silent", "label": "test_delete_missing_is_silent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L85"}, {"id": "lims_test_keyring_store_test_is_keyring_available_true", "label": "test_is_keyring_available_true()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L93"}, {"id": "lims_test_keyring_store_test_is_keyring_available_false_on_broken_backend", "label": "test_is_keyring_available_false_on_broken_backend()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L99"}, {"id": "lims_test_keyring_store_test_fallback_round_trip", "label": "test_fallback_round_trip()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L105"}, {"id": "lims_test_keyring_store_test_fallback_delete", "label": "test_fallback_delete()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L122"}, {"id": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", "label": "test_fallback_wrong_passphrase_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L138"}, {"id": "lims_test_keyring_store_test_fallback_no_passphrase_raises", "label": "test_fallback_no_passphrase_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L155"}, {"id": "lims_test_keyring_store_test_fallback_empty_passphrase_raises", "label": "test_fallback_empty_passphrase_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L162"}, {"id": "lims_test_keyring_store_test_fallback_file_format_integrity", "label": "test_fallback_file_format_integrity()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L169"}, {"id": "lims_test_keyring_store_test_fallback_corrupt_file_raises", "label": "test_fallback_corrupt_file_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L185"}, {"id": "lims_test_keyring_store_test_fallback_unsupported_version_raises", "label": "test_fallback_unsupported_version_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L198"}, {"id": "lims_test_keyring_store_test_fallback_missing_fields_raises", "label": "test_fallback_missing_fields_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L212"}, {"id": "lims_test_keyring_store_test_fallback_set_then_overwrite", "label": "test_fallback_set_then_overwrite()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L224"}, {"id": "lims_test_keyring_store_test_keyring_set_failure_falls_back", "label": "test_keyring_set_failure_falls_back()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L236"}, {"id": "lims_test_keyring_store_test_is_keyring_available_false_on_unexpected_exception", "label": "test_is_keyring_available_false_on_unexpected_exception()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L249"}, {"id": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", "label": "test_fallback_get_when_no_secrets_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L269"}, {"id": "lims_test_keyring_store_test_fallback_delete_when_no_file", "label": "test_fallback_delete_when_no_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L281"}, {"id": "lims_test_keyring_store_test_fallback_delete_when_username_absent", "label": "test_fallback_delete_when_username_absent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L292"}, {"id": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", "label": "test_load_fallback_unreadable_path_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L306"}, {"id": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "label": "test_fallback_plaintext_must_be_object()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L324"}, {"id": "lims_test_keyring_store_test_envelope_must_be_object", "label": "test_envelope_must_be_object()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L360"}, {"id": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", "label": "test_get_consults_fallback_when_keyring_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L373"}, {"id": "lims_test_keyring_store_rationale_1", "label": "Tests for :class:`exlab_wizard.lims.keyring_store.KeyringStore`. The OS-keyring", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L1"}, {"id": "lims_test_keyring_store_rationale_26", "label": "Trivial in-memory keyring backend used to drive the OS-keyring path.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L26"}, {"id": "lims_test_keyring_store_rationale_46", "label": "Keyring backend that raises on every operation.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L46"}, {"id": "lims_test_keyring_store_rationale_106", "label": "Set + get via the encrypted fallback (no OS keyring).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L106"}, {"id": "lims_test_keyring_store_rationale_170", "label": "The fallback file is a JSON envelope with version, salt, ciphertext.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L170"}, {"id": "lims_test_keyring_store_rationale_225", "label": "A second ``set_password`` overwrites the prior secret.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L225"}, {"id": "lims_test_keyring_store_rationale_237", "label": "When the OS keyring set fails, the encrypted-at-rest write is used and a sub", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L237"}, {"id": "lims_test_keyring_store_rationale_250", "label": "A backend raising a non-KeyringError is also treated as unavailable.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L250"}, {"id": "lims_test_keyring_store_rationale_270", "label": "``get_password`` returns None (not error) when keyring is broken and the fal", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L270"}, {"id": "lims_test_keyring_store_rationale_282", "label": "Deleting against a broken keyring with no fallback file is silent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L282"}, {"id": "lims_test_keyring_store_rationale_293", "label": "Deleting a missing username in the fallback file is silent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L293"}, {"id": "lims_test_keyring_store_rationale_307", "label": "An OSError during fallback read surfaces as KeyringUnavailableError.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L307"}, {"id": "lims_test_keyring_store_rationale_325", "label": "If the decrypted plaintext is a non-object JSON value, the read raises.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L325"}, {"id": "lims_test_keyring_store_rationale_361", "label": "A JSON list at the envelope layer is rejected as malformed.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L361"}, {"id": "lims_test_keyring_store_rationale_374", "label": "If the OS keyring returns None but the fallback file exists, the fallback is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L374"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "base64", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "keyring", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "keyring_backend", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "keyring_errors", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "exlab_wizard_lims_keyring_store", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_inmemorykeyring", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L25", "weight": 1.0}, {"source": "lims_test_keyring_store_inmemorykeyring", "target": "lims_test_keyring_store_inmemorykeyring_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L30", "weight": 1.0}, {"source": "lims_test_keyring_store_inmemorykeyring", "target": "lims_test_keyring_store_inmemorykeyring_get_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L33", "weight": 1.0}, {"source": "lims_test_keyring_store_inmemorykeyring", "target": "lims_test_keyring_store_inmemorykeyring_set_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L36", "weight": 1.0}, {"source": "lims_test_keyring_store_inmemorykeyring", "target": "lims_test_keyring_store_inmemorykeyring_delete_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_brokenkeyring", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L45", "weight": 1.0}, {"source": "lims_test_keyring_store_brokenkeyring", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L50", "weight": 1.0}, {"source": "lims_test_keyring_store_brokenkeyring", "target": "lims_test_keyring_store_brokenkeyring_set_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L53", "weight": 1.0}, {"source": "lims_test_keyring_store_brokenkeyring", "target": "lims_test_keyring_store_brokenkeyring_delete_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_swap_keyring", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L61", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L70", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_get_returns_none_for_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L79", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_delete_missing_is_silent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L85", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_is_keyring_available_true", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_is_keyring_available_false_on_broken_backend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L99", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_round_trip", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L105", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_delete", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L122", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L138", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_no_passphrase_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L155", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_empty_passphrase_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L162", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_file_format_integrity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L169", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_corrupt_file_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L185", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_unsupported_version_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L198", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_missing_fields_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L212", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_set_then_overwrite", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L224", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_keyring_set_failure_falls_back", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L236", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_is_keyring_available_false_on_unexpected_exception", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L249", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L269", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_delete_when_no_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L281", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_delete_when_username_absent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L292", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L306", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L324", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_envelope_must_be_object", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L360", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "target": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L373", "weight": 1.0}, {"source": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L71", "weight": 1.0}, {"source": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", "target": "lims_test_keyring_store_inmemorykeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L71", "weight": 1.0}, {"source": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", "target": "lims_test_keyring_store_brokenkeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L73", "weight": 1.0}, {"source": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L74", "weight": 1.0}, {"source": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", "target": "lims_test_keyring_store_brokenkeyring_delete_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L75", "weight": 1.0}, {"source": "lims_test_keyring_store_test_get_returns_none_for_missing", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L80", "weight": 1.0}, {"source": "lims_test_keyring_store_test_get_returns_none_for_missing", "target": "lims_test_keyring_store_inmemorykeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L80", "weight": 1.0}, {"source": "lims_test_keyring_store_test_get_returns_none_for_missing", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L82", "weight": 1.0}, {"source": "lims_test_keyring_store_test_delete_missing_is_silent", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L86", "weight": 1.0}, {"source": "lims_test_keyring_store_test_delete_missing_is_silent", "target": "lims_test_keyring_store_inmemorykeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L86", "weight": 1.0}, {"source": "lims_test_keyring_store_test_delete_missing_is_silent", "target": "lims_test_keyring_store_brokenkeyring_delete_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L90", "weight": 1.0}, {"source": "lims_test_keyring_store_test_is_keyring_available_true", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L94", "weight": 1.0}, {"source": "lims_test_keyring_store_test_is_keyring_available_true", "target": "lims_test_keyring_store_inmemorykeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L94", "weight": 1.0}, {"source": "lims_test_keyring_store_test_is_keyring_available_false_on_broken_backend", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L100", "weight": 1.0}, {"source": "lims_test_keyring_store_test_is_keyring_available_false_on_broken_backend", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L100", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_round_trip", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L107", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_round_trip", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L107", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_round_trip", "target": "lims_test_keyring_store_brokenkeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L112", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_round_trip", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L119", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_delete", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L123", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_delete", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L123", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_delete", "target": "lims_test_keyring_store_brokenkeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L128", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_delete", "target": "lims_test_keyring_store_brokenkeyring_delete_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L129", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_delete", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L135", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L139", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L139", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", "target": "lims_test_keyring_store_brokenkeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L144", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L152", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_no_passphrase_raises", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L156", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_no_passphrase_raises", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L156", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_no_passphrase_raises", "target": "lims_test_keyring_store_brokenkeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L159", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_empty_passphrase_raises", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L163", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_empty_passphrase_raises", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L163", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_empty_passphrase_raises", "target": "lims_test_keyring_store_brokenkeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L166", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_file_format_integrity", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L171", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_file_format_integrity", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L171", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_file_format_integrity", "target": "lims_test_keyring_store_brokenkeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L176", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_corrupt_file_raises", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L189", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_corrupt_file_raises", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L189", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_corrupt_file_raises", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L195", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_unsupported_version_raises", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L203", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_unsupported_version_raises", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L203", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_unsupported_version_raises", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L209", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_missing_fields_raises", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L215", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_missing_fields_raises", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L215", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_missing_fields_raises", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L221", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_set_then_overwrite", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L226", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_set_then_overwrite", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L226", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_set_then_overwrite", "target": "lims_test_keyring_store_brokenkeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L231", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_set_then_overwrite", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L233", "weight": 1.0}, {"source": "lims_test_keyring_store_test_keyring_set_failure_falls_back", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L240", "weight": 1.0}, {"source": "lims_test_keyring_store_test_keyring_set_failure_falls_back", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L240", "weight": 1.0}, {"source": "lims_test_keyring_store_test_keyring_set_failure_falls_back", "target": "lims_test_keyring_store_brokenkeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L245", "weight": 1.0}, {"source": "lims_test_keyring_store_test_keyring_set_failure_falls_back", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L246", "weight": 1.0}, {"source": "lims_test_keyring_store_test_is_keyring_available_false_on_unexpected_exception", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L264", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L273", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L273", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L278", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_delete_when_no_file", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L283", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_delete_when_no_file", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L283", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_delete_when_no_file", "target": "lims_test_keyring_store_brokenkeyring_delete_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L289", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_delete_when_username_absent", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L294", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_delete_when_username_absent", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L294", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_delete_when_username_absent", "target": "lims_test_keyring_store_brokenkeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L299", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_delete_when_username_absent", "target": "lims_test_keyring_store_brokenkeyring_delete_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L302", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_delete_when_username_absent", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L303", "weight": 1.0}, {"source": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L315", "weight": 1.0}, {"source": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L315", "weight": 1.0}, {"source": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L321", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L351", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L351", "weight": 1.0}, {"source": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L357", "weight": 1.0}, {"source": "lims_test_keyring_store_test_envelope_must_be_object", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L364", "weight": 1.0}, {"source": "lims_test_keyring_store_test_envelope_must_be_object", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L364", "weight": 1.0}, {"source": "lims_test_keyring_store_test_envelope_must_be_object", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L370", "weight": 1.0}, {"source": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", "target": "lims_test_keyring_store_swap_keyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L378", "weight": 1.0}, {"source": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", "target": "lims_test_keyring_store_brokenkeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L378", "weight": 1.0}, {"source": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", "target": "lims_test_keyring_store_brokenkeyring_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L383", "weight": 1.0}, {"source": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", "target": "lims_test_keyring_store_inmemorykeyring", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L386", "weight": 1.0}, {"source": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", "target": "lims_test_keyring_store_brokenkeyring_get_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L391", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_lims_test_keyring_store_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L1", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_26", "target": "lims_test_keyring_store_inmemorykeyring", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L26", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_46", "target": "lims_test_keyring_store_brokenkeyring", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L46", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_106", "target": "lims_test_keyring_store_test_fallback_round_trip", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L106", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_170", "target": "lims_test_keyring_store_test_fallback_file_format_integrity", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L170", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_225", "target": "lims_test_keyring_store_test_fallback_set_then_overwrite", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L225", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_237", "target": "lims_test_keyring_store_test_keyring_set_failure_falls_back", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L237", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_250", "target": "lims_test_keyring_store_test_is_keyring_available_false_on_unexpected_exception", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L250", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_270", "target": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L270", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_282", "target": "lims_test_keyring_store_test_fallback_delete_when_no_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L282", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_293", "target": "lims_test_keyring_store_test_fallback_delete_when_username_absent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L293", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_307", "target": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L307", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_325", "target": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L325", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_361", "target": "lims_test_keyring_store_test_envelope_must_be_object", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L361", "weight": 1.0}, {"source": "lims_test_keyring_store_rationale_374", "target": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L374", "weight": 1.0}], "raw_calls": [{"caller_nid": "lims_test_keyring_store_inmemorykeyring_get_password", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L34"}, {"caller_nid": "lims_test_keyring_store_inmemorykeyring_delete_password", "callee": "PasswordDeleteError", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L41"}, {"caller_nid": "lims_test_keyring_store_brokenkeyring_get_password", "callee": "KeyringError", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L51"}, {"caller_nid": "lims_test_keyring_store_brokenkeyring_set_password", "callee": "KeyringError", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L54"}, {"caller_nid": "lims_test_keyring_store_brokenkeyring_delete_password", "callee": "KeyringError", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L57"}, {"caller_nid": "lims_test_keyring_store_swap_keyring", "callee": "get_keyring", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L62"}, {"caller_nid": "lims_test_keyring_store_swap_keyring", "callee": "set_keyring", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L63"}, {"caller_nid": "lims_test_keyring_store_swap_keyring", "callee": "set_keyring", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L67"}, {"caller_nid": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L72"}, {"caller_nid": "lims_test_keyring_store_test_get_returns_none_for_missing", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L81"}, {"caller_nid": "lims_test_keyring_store_test_delete_missing_is_silent", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L87"}, {"caller_nid": "lims_test_keyring_store_test_is_keyring_available_true", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L95"}, {"caller_nid": "lims_test_keyring_store_test_is_keyring_available_true", "callee": "is_keyring_available", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L96"}, {"caller_nid": "lims_test_keyring_store_test_is_keyring_available_false_on_broken_backend", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L101"}, {"caller_nid": "lims_test_keyring_store_test_is_keyring_available_false_on_broken_backend", "callee": "is_keyring_available", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L102"}, {"caller_nid": "lims_test_keyring_store_test_fallback_round_trip", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L108"}, {"caller_nid": "lims_test_keyring_store_test_fallback_round_trip", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L113"}, {"caller_nid": "lims_test_keyring_store_test_fallback_round_trip", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L115"}, {"caller_nid": "lims_test_keyring_store_test_fallback_delete", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L124"}, {"caller_nid": "lims_test_keyring_store_test_fallback_delete", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L131"}, {"caller_nid": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L140"}, {"caller_nid": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L147"}, {"caller_nid": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L151"}, {"caller_nid": "lims_test_keyring_store_test_fallback_no_passphrase_raises", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L157"}, {"caller_nid": "lims_test_keyring_store_test_fallback_no_passphrase_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L158"}, {"caller_nid": "lims_test_keyring_store_test_fallback_empty_passphrase_raises", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L164"}, {"caller_nid": "lims_test_keyring_store_test_fallback_empty_passphrase_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L165"}, {"caller_nid": "lims_test_keyring_store_test_fallback_file_format_integrity", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L172"}, {"caller_nid": "lims_test_keyring_store_test_fallback_file_format_integrity", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L177"}, {"caller_nid": "lims_test_keyring_store_test_fallback_file_format_integrity", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L177"}, {"caller_nid": "lims_test_keyring_store_test_fallback_file_format_integrity", "callee": "b64decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L181"}, {"caller_nid": "lims_test_keyring_store_test_fallback_file_format_integrity", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L182"}, {"caller_nid": "lims_test_keyring_store_test_fallback_file_format_integrity", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L182"}, {"caller_nid": "lims_test_keyring_store_test_fallback_corrupt_file_raises", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L187"}, {"caller_nid": "lims_test_keyring_store_test_fallback_corrupt_file_raises", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L188"}, {"caller_nid": "lims_test_keyring_store_test_fallback_corrupt_file_raises", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L190"}, {"caller_nid": "lims_test_keyring_store_test_fallback_corrupt_file_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L194"}, {"caller_nid": "lims_test_keyring_store_test_fallback_unsupported_version_raises", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L200"}, {"caller_nid": "lims_test_keyring_store_test_fallback_unsupported_version_raises", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L201"}, {"caller_nid": "lims_test_keyring_store_test_fallback_unsupported_version_raises", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L204"}, {"caller_nid": "lims_test_keyring_store_test_fallback_unsupported_version_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L208"}, {"caller_nid": "lims_test_keyring_store_test_fallback_missing_fields_raises", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L214"}, {"caller_nid": "lims_test_keyring_store_test_fallback_missing_fields_raises", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L214"}, {"caller_nid": "lims_test_keyring_store_test_fallback_missing_fields_raises", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L216"}, {"caller_nid": "lims_test_keyring_store_test_fallback_missing_fields_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L220"}, {"caller_nid": "lims_test_keyring_store_test_fallback_set_then_overwrite", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L227"}, {"caller_nid": "lims_test_keyring_store_test_keyring_set_failure_falls_back", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L241"}, {"caller_nid": "lims_test_keyring_store_test_is_keyring_available_false_on_unexpected_exception", "callee": "_ExplodingKeyring", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L264"}, {"caller_nid": "lims_test_keyring_store_test_is_keyring_available_false_on_unexpected_exception", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L265"}, {"caller_nid": "lims_test_keyring_store_test_is_keyring_available_false_on_unexpected_exception", "callee": "is_keyring_available", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L266"}, {"caller_nid": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L274"}, {"caller_nid": "lims_test_keyring_store_test_fallback_delete_when_no_file", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L284"}, {"caller_nid": "lims_test_keyring_store_test_fallback_delete_when_username_absent", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L295"}, {"caller_nid": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L309"}, {"caller_nid": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L314"}, {"caller_nid": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L314"}, {"caller_nid": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L316"}, {"caller_nid": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L320"}, {"caller_nid": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "callee": "urandom", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L332"}, {"caller_nid": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "callee": "hash_secret_raw", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L333"}, {"caller_nid": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "callee": "urlsafe_b64encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L342"}, {"caller_nid": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L343"}, {"caller_nid": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "callee": "encrypt", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L343"}, {"caller_nid": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "callee": "Fernet", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L343"}, {"caller_nid": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L346"}, {"caller_nid": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "callee": "b64encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L346"}, {"caller_nid": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L350"}, {"caller_nid": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L350"}, {"caller_nid": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L352"}, {"caller_nid": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L356"}, {"caller_nid": "lims_test_keyring_store_test_envelope_must_be_object", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L363"}, {"caller_nid": "lims_test_keyring_store_test_envelope_must_be_object", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L363"}, {"caller_nid": "lims_test_keyring_store_test_envelope_must_be_object", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L365"}, {"caller_nid": "lims_test_keyring_store_test_envelope_must_be_object", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L369"}, {"caller_nid": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L379"}, {"caller_nid": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", "callee": "KeyringStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py", "source_location": "L387"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/da7faa4bd9e9bcefbfaaebb37334963f83a63d0b84d931744f974aec81a6bae4.json b/graphify-out/cache/ast/da7faa4bd9e9bcefbfaaebb37334963f83a63d0b84d931744f974aec81a6bae4.json new file mode 100644 index 0000000..3e032c3 --- /dev/null +++ b/graphify-out/cache/ast/da7faa4bd9e9bcefbfaaebb37334963f83a63d0b84d931744f974aec81a6bae4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "label": "test_file_list.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L1"}, {"id": "ui_test_file_list_entry", "label": "_entry()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L14"}, {"id": "ui_test_file_list_test_diff_detects_additions", "label": "test_diff_detects_additions()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L27"}, {"id": "ui_test_file_list_test_diff_detects_removals", "label": "test_diff_detects_removals()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L37"}, {"id": "ui_test_file_list_test_diff_detects_size_change_as_modification", "label": "test_diff_detects_size_change_as_modification()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L47"}, {"id": "ui_test_file_list_test_diff_detects_sync_status_change_as_modification", "label": "test_diff_detects_sync_status_change_as_modification()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L57"}, {"id": "ui_test_file_list_test_diff_unchanged_is_empty", "label": "test_diff_unchanged_is_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L65"}, {"id": "ui_test_file_list_test_file_list_entry_defaults_keep_local_and_tombstone_false", "label": "test_file_list_entry_defaults_keep_local_and_tombstone_false()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L78"}, {"id": "ui_test_file_list_test_diff_detects_keep_local_change_as_modification", "label": "test_diff_detects_keep_local_change_as_modification()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L85"}, {"id": "ui_test_file_list_test_diff_detects_tombstone_change_as_modification", "label": "test_diff_detects_tombstone_change_as_modification()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L93"}, {"id": "ui_test_file_list_test_keep_local_action_constant_is_distinct", "label": "test_keep_local_action_constant_is_distinct()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L101"}, {"id": "ui_test_file_list_test_render_file_list_keep_local_menu_and_tombstone", "label": "test_render_file_list_keep_local_menu_and_tombstone()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L106"}, {"id": "ui_test_file_list_rationale_1", "label": "Unit tests for ``ui/components/file_list``. Redesign \u00a74.3, \u00a75.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L1"}, {"id": "ui_test_file_list_rationale_79", "label": "A bare entry defaults ``keep_local`` and ``tombstone`` to False.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L79"}, {"id": "ui_test_file_list_rationale_86", "label": "Flipping ``keep_local`` is a modification (drives a re-render).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L86"}, {"id": "ui_test_file_list_rationale_94", "label": "A file transitioning to a tombstone is a modification.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L94"}, {"id": "ui_test_file_list_rationale_102", "label": "``FILE_CONTEXT_KEEP_LOCAL`` is a distinct discriminator value.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L102"}, {"id": "ui_test_file_list_rationale_107", "label": "The renderer wires the keep-local menu item and tombstone row. Exercises th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L107"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "target": "exlab_wizard_ui_components_file_list", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "target": "ui_test_file_list_entry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "target": "ui_test_file_list_test_diff_detects_additions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "target": "ui_test_file_list_test_diff_detects_removals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "target": "ui_test_file_list_test_diff_detects_size_change_as_modification", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "target": "ui_test_file_list_test_diff_detects_sync_status_change_as_modification", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "target": "ui_test_file_list_test_diff_unchanged_is_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L65", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "target": "ui_test_file_list_test_file_list_entry_defaults_keep_local_and_tombstone_false", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L78", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "target": "ui_test_file_list_test_diff_detects_keep_local_change_as_modification", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L85", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "target": "ui_test_file_list_test_diff_detects_tombstone_change_as_modification", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "target": "ui_test_file_list_test_keep_local_action_constant_is_distinct", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L101", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "target": "ui_test_file_list_test_render_file_list_keep_local_menu_and_tombstone", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L106", "weight": 1.0}, {"source": "ui_test_file_list_test_diff_detects_additions", "target": "ui_test_file_list_entry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L30", "weight": 1.0}, {"source": "ui_test_file_list_test_diff_detects_removals", "target": "ui_test_file_list_entry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L39", "weight": 1.0}, {"source": "ui_test_file_list_test_diff_detects_size_change_as_modification", "target": "ui_test_file_list_entry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L49", "weight": 1.0}, {"source": "ui_test_file_list_test_diff_detects_sync_status_change_as_modification", "target": "ui_test_file_list_entry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L59", "weight": 1.0}, {"source": "ui_test_file_list_test_diff_unchanged_is_empty", "target": "ui_test_file_list_entry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L66", "weight": 1.0}, {"source": "ui_test_file_list_test_file_list_entry_defaults_keep_local_and_tombstone_false", "target": "ui_test_file_list_entry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L80", "weight": 1.0}, {"source": "ui_test_file_list_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_file_list_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_file_list_rationale_79", "target": "ui_test_file_list_test_file_list_entry_defaults_keep_local_and_tombstone_false", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L79", "weight": 1.0}, {"source": "ui_test_file_list_rationale_86", "target": "ui_test_file_list_test_diff_detects_keep_local_change_as_modification", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L86", "weight": 1.0}, {"source": "ui_test_file_list_rationale_94", "target": "ui_test_file_list_test_diff_detects_tombstone_change_as_modification", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L94", "weight": 1.0}, {"source": "ui_test_file_list_rationale_102", "target": "ui_test_file_list_test_keep_local_action_constant_is_distinct", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L102", "weight": 1.0}, {"source": "ui_test_file_list_rationale_107", "target": "ui_test_file_list_test_render_file_list_keep_local_menu_and_tombstone", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L107", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_file_list_entry", "callee": "FileListEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L17"}, {"caller_nid": "ui_test_file_list_entry", "callee": "rsplit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L18"}, {"caller_nid": "ui_test_file_list_test_diff_detects_additions", "callee": "diff_file_lists", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L28"}, {"caller_nid": "ui_test_file_list_test_diff_detects_removals", "callee": "diff_file_lists", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L38"}, {"caller_nid": "ui_test_file_list_test_diff_detects_size_change_as_modification", "callee": "diff_file_lists", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L48"}, {"caller_nid": "ui_test_file_list_test_diff_detects_sync_status_change_as_modification", "callee": "diff_file_lists", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L58"}, {"caller_nid": "ui_test_file_list_test_diff_unchanged_is_empty", "callee": "diff_file_lists", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L67"}, {"caller_nid": "ui_test_file_list_test_diff_detects_keep_local_change_as_modification", "callee": "FileListEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L87"}, {"caller_nid": "ui_test_file_list_test_diff_detects_keep_local_change_as_modification", "callee": "FileListEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L88"}, {"caller_nid": "ui_test_file_list_test_diff_detects_keep_local_change_as_modification", "callee": "diff_file_lists", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L89"}, {"caller_nid": "ui_test_file_list_test_diff_detects_tombstone_change_as_modification", "callee": "FileListEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L95"}, {"caller_nid": "ui_test_file_list_test_diff_detects_tombstone_change_as_modification", "callee": "FileListEntry", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L96"}, {"caller_nid": "ui_test_file_list_test_diff_detects_tombstone_change_as_modification", "callee": "diff_file_lists", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L97"}, {"caller_nid": "ui_test_file_list_test_render_file_list_keep_local_menu_and_tombstone", "callee": "page", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L119"}, {"caller_nid": "ui_test_file_list_test_render_file_list_keep_local_menu_and_tombstone", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py", "source_location": "L148"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/daaef970991dc94d529b0738bbbe799042a995ca3ef70c365c0c5f546ea7fa78.json b/graphify-out/cache/ast/daaef970991dc94d529b0738bbbe799042a995ca3ef70c365c0c5f546ea7fa78.json new file mode 100644 index 0000000..fb69b04 --- /dev/null +++ b/graphify-out/cache/ast/daaef970991dc94d529b0738bbbe799042a995ca3ef70c365c0c5f546ea7fa78.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_user_guide_01_settings_md", "label": "01_settings.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L1"}, {"id": "user_guide_01_settings_3_6_configure_equipment_paths_and_integrations", "label": "3.6 Configure Equipment, Paths, and Integrations", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L1"}, {"id": "user_guide_01_settings_capability_summary", "label": "Capability summary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L3"}, {"id": "user_guide_01_settings_walkthrough", "label": "Walkthrough", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L16"}, {"id": "user_guide_01_settings_add_equipment_wizard", "label": "Add Equipment wizard", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L30"}, {"id": "user_guide_01_settings_screenshots", "label": "Screenshots", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L51"}, {"id": "user_guide_01_settings_codeblock_1", "label": "code:{image} (:alt: Settings dialog with the Paths section active)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L53"}, {"id": "user_guide_01_settings_codeblock_2", "label": "code:{image} (:alt: Add-Equipment wizard, identity step)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L58"}, {"id": "user_guide_01_settings_related_material", "label": "Related material", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L63"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_user_guide_01_settings_md", "target": "user_guide_01_settings_3_6_configure_equipment_paths_and_integrations", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L1", "weight": 1.0}, {"source": "user_guide_01_settings_3_6_configure_equipment_paths_and_integrations", "target": "user_guide_01_settings_capability_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L3", "weight": 1.0}, {"source": "user_guide_01_settings_3_6_configure_equipment_paths_and_integrations", "target": "user_guide_01_settings_walkthrough", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L16", "weight": 1.0}, {"source": "user_guide_01_settings_3_6_configure_equipment_paths_and_integrations", "target": "user_guide_01_settings_add_equipment_wizard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L30", "weight": 1.0}, {"source": "user_guide_01_settings_3_6_configure_equipment_paths_and_integrations", "target": "user_guide_01_settings_screenshots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L51", "weight": 1.0}, {"source": "user_guide_01_settings_screenshots", "target": "user_guide_01_settings_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L53", "weight": 1.0}, {"source": "user_guide_01_settings_screenshots", "target": "user_guide_01_settings_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L58", "weight": 1.0}, {"source": "user_guide_01_settings_3_6_configure_equipment_paths_and_integrations", "target": "user_guide_01_settings_related_material", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md", "source_location": "L63", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/db4d88414908fa6203fb3bcb7af993cc58947879816b3c33bd690358fcf8975d.json b/graphify-out/cache/ast/db4d88414908fa6203fb3bcb7af993cc58947879816b3c33bd690358fcf8975d.json new file mode 100644 index 0000000..989ebd3 --- /dev/null +++ b/graphify-out/cache/ast/db4d88414908fa6203fb3bcb7af993cc58947879816b3c33bd690358fcf8975d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_configs_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/configs/__init__.py", "source_location": "L1"}, {"id": "configs_init_rationale_1", "label": "Read-only YAML fixtures for the config-loader unit tests.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/configs/__init__.py", "source_location": "L1"}], "edges": [{"source": "configs_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_configs_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/configs/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/dc19697be9b018f4bd58478434045809832a7184fdcb0d0328dde3eb82f9e73b.json b/graphify-out/cache/ast/dc19697be9b018f4bd58478434045809832a7184fdcb0d0328dde3eb82f9e73b.json new file mode 100644 index 0000000..88fab70 --- /dev/null +++ b/graphify-out/cache/ast/dc19697be9b018f4bd58478434045809832a7184fdcb0d0328dde3eb82f9e73b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "label": "test_cleanup.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L1"}, {"id": "sync_test_cleanup_job", "label": "_job()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L22"}, {"id": "sync_test_cleanup_config", "label": "_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L38"}, {"id": "sync_test_cleanup_test_all_interlocks_pass", "label": "test_all_interlocks_pass()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L53"}, {"id": "sync_test_cleanup_test_min_verify_passes_blocks", "label": "test_min_verify_passes_blocks()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L65"}, {"id": "sync_test_cleanup_test_min_age_hours_blocks", "label": "test_min_age_hours_blocks()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L77"}, {"id": "sync_test_cleanup_test_remote_stat_failure_blocks", "label": "test_remote_stat_failure_blocks()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L90"}, {"id": "sync_test_cleanup_test_recent_revocation_blocks", "label": "test_recent_revocation_blocks()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L102"}, {"id": "sync_test_cleanup_test_old_revocation_does_not_block", "label": "test_old_revocation_does_not_block()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L124"}, {"id": "sync_test_cleanup_test_missing_verified_at_blocks", "label": "test_missing_verified_at_blocks()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L145"}, {"id": "sync_test_cleanup_test_has_recent_revocation_with_malformed_timestamp_is_recent", "label": "test_has_recent_revocation_with_malformed_timestamp_is_recent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L157"}, {"id": "sync_test_cleanup_test_has_recent_revocation_ignores_non_tombstones", "label": "test_has_recent_revocation_ignores_non_tombstones()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L172"}, {"id": "sync_test_cleanup_rationale_1", "label": "Tests for ``exlab_wizard.sync.cleanup``. Backend Spec \u00a77.1.6. Each interlock mu", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L1"}, {"id": "sync_test_cleanup_rationale_54", "label": "Happy path: cleanup is allowed.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L54"}, {"id": "sync_test_cleanup_rationale_66", "label": "Failing the verify-passes threshold blocks cleanup.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L66"}, {"id": "sync_test_cleanup_rationale_78", "label": "A verify that happened too recently blocks cleanup.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L78"}, {"id": "sync_test_cleanup_rationale_91", "label": "An unreachable NAS blocks cleanup.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L91"}, {"id": "sync_test_cleanup_rationale_103", "label": "A tombstone written within ``min_age_hours`` blocks cleanup.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L103"}, {"id": "sync_test_cleanup_rationale_146", "label": "A verified_at column missing or malformed blocks cleanup.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L146"}, {"id": "sync_test_cleanup_rationale_158", "label": "A malformed ``recorded_at`` is treated as recent (fail-safe).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L158"}, {"id": "sync_test_cleanup_rationale_173", "label": "An override entry without ``revoked: True`` is ignored.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L173"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "exlab_wizard_sync_cleanup", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "exlab_wizard_sync_queue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "sync_test_cleanup_job", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "sync_test_cleanup_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "sync_test_cleanup_test_all_interlocks_pass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "sync_test_cleanup_test_min_verify_passes_blocks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L65", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "sync_test_cleanup_test_min_age_hours_blocks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L77", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "sync_test_cleanup_test_remote_stat_failure_blocks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L90", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "sync_test_cleanup_test_recent_revocation_blocks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L102", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "sync_test_cleanup_test_old_revocation_does_not_block", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L124", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "sync_test_cleanup_test_missing_verified_at_blocks", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L145", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "sync_test_cleanup_test_has_recent_revocation_with_malformed_timestamp_is_recent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L157", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "target": "sync_test_cleanup_test_has_recent_revocation_ignores_non_tombstones", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L172", "weight": 1.0}, {"source": "sync_test_cleanup_test_all_interlocks_pass", "target": "sync_test_cleanup_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L56", "weight": 1.0}, {"source": "sync_test_cleanup_test_all_interlocks_pass", "target": "sync_test_cleanup_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L59", "weight": 1.0}, {"source": "sync_test_cleanup_test_min_verify_passes_blocks", "target": "sync_test_cleanup_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L68", "weight": 1.0}, {"source": "sync_test_cleanup_test_min_verify_passes_blocks", "target": "sync_test_cleanup_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L71", "weight": 1.0}, {"source": "sync_test_cleanup_test_min_age_hours_blocks", "target": "sync_test_cleanup_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L81", "weight": 1.0}, {"source": "sync_test_cleanup_test_min_age_hours_blocks", "target": "sync_test_cleanup_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L84", "weight": 1.0}, {"source": "sync_test_cleanup_test_remote_stat_failure_blocks", "target": "sync_test_cleanup_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L93", "weight": 1.0}, {"source": "sync_test_cleanup_test_remote_stat_failure_blocks", "target": "sync_test_cleanup_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L96", "weight": 1.0}, {"source": "sync_test_cleanup_test_recent_revocation_blocks", "target": "sync_test_cleanup_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L115", "weight": 1.0}, {"source": "sync_test_cleanup_test_recent_revocation_blocks", "target": "sync_test_cleanup_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L118", "weight": 1.0}, {"source": "sync_test_cleanup_test_old_revocation_does_not_block", "target": "sync_test_cleanup_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L136", "weight": 1.0}, {"source": "sync_test_cleanup_test_old_revocation_does_not_block", "target": "sync_test_cleanup_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L139", "weight": 1.0}, {"source": "sync_test_cleanup_test_missing_verified_at_blocks", "target": "sync_test_cleanup_job", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L148", "weight": 1.0}, {"source": "sync_test_cleanup_test_missing_verified_at_blocks", "target": "sync_test_cleanup_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L151", "weight": 1.0}, {"source": "sync_test_cleanup_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_sync_test_cleanup_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L1", "weight": 1.0}, {"source": "sync_test_cleanup_rationale_54", "target": "sync_test_cleanup_test_all_interlocks_pass", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L54", "weight": 1.0}, {"source": "sync_test_cleanup_rationale_66", "target": "sync_test_cleanup_test_min_verify_passes_blocks", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L66", "weight": 1.0}, {"source": "sync_test_cleanup_rationale_78", "target": "sync_test_cleanup_test_min_age_hours_blocks", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L78", "weight": 1.0}, {"source": "sync_test_cleanup_rationale_91", "target": "sync_test_cleanup_test_remote_stat_failure_blocks", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L91", "weight": 1.0}, {"source": "sync_test_cleanup_rationale_103", "target": "sync_test_cleanup_test_recent_revocation_blocks", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L103", "weight": 1.0}, {"source": "sync_test_cleanup_rationale_146", "target": "sync_test_cleanup_test_missing_verified_at_blocks", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L146", "weight": 1.0}, {"source": "sync_test_cleanup_rationale_158", "target": "sync_test_cleanup_test_has_recent_revocation_with_malformed_timestamp_is_recent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L158", "weight": 1.0}, {"source": "sync_test_cleanup_rationale_173", "target": "sync_test_cleanup_test_has_recent_revocation_ignores_non_tombstones", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L173", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_test_cleanup_job", "callee": "SyncJobRow", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L27"}, {"caller_nid": "sync_test_cleanup_config", "callee": "NASCleanupConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L45"}, {"caller_nid": "sync_test_cleanup_test_all_interlocks_pass", "callee": "cleanup_interlocks_satisfied", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L55"}, {"caller_nid": "sync_test_cleanup_test_min_verify_passes_blocks", "callee": "cleanup_interlocks_satisfied", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L67"}, {"caller_nid": "sync_test_cleanup_test_min_age_hours_blocks", "callee": "strftime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L79"}, {"caller_nid": "sync_test_cleanup_test_min_age_hours_blocks", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L79"}, {"caller_nid": "sync_test_cleanup_test_min_age_hours_blocks", "callee": "cleanup_interlocks_satisfied", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L80"}, {"caller_nid": "sync_test_cleanup_test_remote_stat_failure_blocks", "callee": "cleanup_interlocks_satisfied", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L92"}, {"caller_nid": "sync_test_cleanup_test_recent_revocation_blocks", "callee": "strftime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L110"}, {"caller_nid": "sync_test_cleanup_test_recent_revocation_blocks", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L110"}, {"caller_nid": "sync_test_cleanup_test_recent_revocation_blocks", "callee": "cleanup_interlocks_satisfied", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L114"}, {"caller_nid": "sync_test_cleanup_test_old_revocation_does_not_block", "callee": "strftime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L131"}, {"caller_nid": "sync_test_cleanup_test_old_revocation_does_not_block", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L131"}, {"caller_nid": "sync_test_cleanup_test_old_revocation_does_not_block", "callee": "cleanup_interlocks_satisfied", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L135"}, {"caller_nid": "sync_test_cleanup_test_missing_verified_at_blocks", "callee": "cleanup_interlocks_satisfied", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L147"}, {"caller_nid": "sync_test_cleanup_test_has_recent_revocation_with_malformed_timestamp_is_recent", "callee": "has_recent_revocation", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L169"}, {"caller_nid": "sync_test_cleanup_test_has_recent_revocation_ignores_non_tombstones", "callee": "strftime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L179"}, {"caller_nid": "sync_test_cleanup_test_has_recent_revocation_ignores_non_tombstones", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L179"}, {"caller_nid": "sync_test_cleanup_test_has_recent_revocation_ignores_non_tombstones", "callee": "has_recent_revocation", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py", "source_location": "L184"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/dd83640501ccabd8e43db20b95a54ae5b6b3125cf029ea7a7f371f63afdebace.json b/graphify-out/cache/ast/dd83640501ccabd8e43db20b95a54ae5b6b3125cf029ea7a7f371f63afdebace.json new file mode 100644 index 0000000..950417f --- /dev/null +++ b/graphify-out/cache/ast/dd83640501ccabd8e43db20b95a54ae5b6b3125cf029ea7a7f371f63afdebace.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "label": "test_server_runner.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L1"}, {"id": "tray_test_server_runner_fakeuvicornserver", "label": "_FakeUvicornServer", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L21"}, {"id": "tray_test_server_runner_fakeuvicornserver_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L24"}, {"id": "tray_test_server_runner_fakeuvicornserver_run", "label": ".run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L30"}, {"id": "tray_test_server_runner_make_runner", "label": "_make_runner()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L44"}, {"id": "tray_test_server_runner_test_pick_free_port_returns_bindable_port", "label": "test_pick_free_port_returns_bindable_port()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L60"}, {"id": "tray_test_server_runner_test_start_writes_server_json_atomically", "label": "test_start_writes_server_json_atomically()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L72"}, {"id": "tray_test_server_runner_test_stop_deletes_state_file", "label": "test_stop_deletes_state_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L89"}, {"id": "tray_test_server_runner_test_double_start_raises", "label": "test_double_start_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L98"}, {"id": "tray_test_server_runner_test_port_property_before_start_raises", "label": "test_port_property_before_start_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L108"}, {"id": "tray_test_server_runner_test_port_property_after_start", "label": "test_port_property_after_start()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L114"}, {"id": "tray_test_server_runner_test_state_file_property_returns_expected_path", "label": "test_state_file_property_returns_expected_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L123"}, {"id": "tray_test_server_runner_test_stop_is_idempotent", "label": "test_stop_is_idempotent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L128"}, {"id": "tray_test_server_runner_test_start_creates_state_dir_if_missing", "label": "test_start_creates_state_dir_if_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L135"}, {"id": "tray_test_server_runner_test_is_running_tracks_thread_lifecycle", "label": "test_is_running_tracks_thread_lifecycle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L145"}, {"id": "tray_test_server_runner_test_real_uvicorn_resolves_lazily", "label": "test_real_uvicorn_resolves_lazily()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L157"}, {"id": "tray_test_server_runner_test_delete_state_file_handles_missing", "label": "test_delete_state_file_handles_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L170"}, {"id": "tray_test_server_runner_test_stop_handles_attribute_error_on_should_exit", "label": "test_stop_handles_attribute_error_on_should_exit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L176"}, {"id": "tray_test_server_runner_rationale_1", "label": "Tests for :mod:`exlab_wizard.tray.server_runner`. Backend Spec \u00a74.3.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L1"}, {"id": "tray_test_server_runner_rationale_22", "label": "Fake :class:`uvicorn.Server` that runs a tiny event loop.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L22"}, {"id": "tray_test_server_runner_rationale_158", "label": "The real ``_build_uvicorn`` defers the uvicorn import. We can call ``_build", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L158"}, {"id": "tray_test_server_runner_rationale_177", "label": "A custom server object missing ``should_exit`` is tolerated.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L177"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "socket", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "threading", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "exlab_wizard_tray_server_runner", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_fakeuvicornserver", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L21", "weight": 1.0}, {"source": "tray_test_server_runner_fakeuvicornserver", "target": "tray_test_server_runner_fakeuvicornserver_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L24", "weight": 1.0}, {"source": "tray_test_server_runner_fakeuvicornserver", "target": "tray_test_server_runner_fakeuvicornserver_run", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_make_runner", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_test_pick_free_port_returns_bindable_port", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_test_start_writes_server_json_atomically", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_test_stop_deletes_state_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L89", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_test_double_start_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L98", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_test_port_property_before_start_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L108", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_test_port_property_after_start", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L114", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_test_state_file_property_returns_expected_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L123", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_test_stop_is_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L128", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_test_start_creates_state_dir_if_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_test_is_running_tracks_thread_lifecycle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L145", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_test_real_uvicorn_resolves_lazily", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L157", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_test_delete_state_file_handles_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L170", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "target": "tray_test_server_runner_test_stop_handles_attribute_error_on_should_exit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L176", "weight": 1.0}, {"source": "tray_test_server_runner_make_runner", "target": "tray_test_server_runner_fakeuvicornserver", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L49", "weight": 1.0}, {"source": "tray_test_server_runner_test_start_writes_server_json_atomically", "target": "tray_test_server_runner_make_runner", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L73", "weight": 1.0}, {"source": "tray_test_server_runner_test_stop_deletes_state_file", "target": "tray_test_server_runner_make_runner", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L90", "weight": 1.0}, {"source": "tray_test_server_runner_test_double_start_raises", "target": "tray_test_server_runner_make_runner", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L99", "weight": 1.0}, {"source": "tray_test_server_runner_test_port_property_before_start_raises", "target": "tray_test_server_runner_make_runner", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L109", "weight": 1.0}, {"source": "tray_test_server_runner_test_port_property_after_start", "target": "tray_test_server_runner_make_runner", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L115", "weight": 1.0}, {"source": "tray_test_server_runner_test_state_file_property_returns_expected_path", "target": "tray_test_server_runner_make_runner", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L124", "weight": 1.0}, {"source": "tray_test_server_runner_test_stop_is_idempotent", "target": "tray_test_server_runner_make_runner", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L129", "weight": 1.0}, {"source": "tray_test_server_runner_test_start_creates_state_dir_if_missing", "target": "tray_test_server_runner_make_runner", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L137", "weight": 1.0}, {"source": "tray_test_server_runner_test_is_running_tracks_thread_lifecycle", "target": "tray_test_server_runner_make_runner", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L146", "weight": 1.0}, {"source": "tray_test_server_runner_test_stop_handles_attribute_error_on_should_exit", "target": "tray_test_server_runner_make_runner", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L178", "weight": 1.0}, {"source": "tray_test_server_runner_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_tray_test_server_runner_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_test_server_runner_rationale_22", "target": "tray_test_server_runner_fakeuvicornserver", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L22", "weight": 1.0}, {"source": "tray_test_server_runner_rationale_158", "target": "tray_test_server_runner_test_real_uvicorn_resolves_lazily", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L158", "weight": 1.0}, {"source": "tray_test_server_runner_rationale_177", "target": "tray_test_server_runner_test_stop_handles_attribute_error_on_should_exit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L177", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_test_server_runner_fakeuvicornserver_init", "callee": "Event", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L27"}, {"caller_nid": "tray_test_server_runner_fakeuvicornserver_run", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L33"}, {"caller_nid": "tray_test_server_runner_fakeuvicornserver_run", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L35"}, {"caller_nid": "tray_test_server_runner_fakeuvicornserver_run", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L37"}, {"caller_nid": "tray_test_server_runner_fakeuvicornserver_run", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L40"}, {"caller_nid": "tray_test_server_runner_fakeuvicornserver_run", "callee": "Event", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L40"}, {"caller_nid": "tray_test_server_runner_fakeuvicornserver_run", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L41"}, {"caller_nid": "tray_test_server_runner_make_runner", "callee": "ServerRunner", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L55"}, {"caller_nid": "tray_test_server_runner_make_runner", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L55"}, {"caller_nid": "tray_test_server_runner_test_pick_free_port_returns_bindable_port", "callee": "pick_free_port", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L61"}, {"caller_nid": "tray_test_server_runner_test_pick_free_port_returns_bindable_port", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L62"}, {"caller_nid": "tray_test_server_runner_test_pick_free_port_returns_bindable_port", "callee": "socket", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L65"}, {"caller_nid": "tray_test_server_runner_test_pick_free_port_returns_bindable_port", "callee": "bind", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L67"}, {"caller_nid": "tray_test_server_runner_test_pick_free_port_returns_bindable_port", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L69"}, {"caller_nid": "tray_test_server_runner_test_start_writes_server_json_atomically", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L74"}, {"caller_nid": "tray_test_server_runner_test_start_writes_server_json_atomically", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L77"}, {"caller_nid": "tray_test_server_runner_test_start_writes_server_json_atomically", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L78"}, {"caller_nid": "tray_test_server_runner_test_start_writes_server_json_atomically", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L78"}, {"caller_nid": "tray_test_server_runner_test_start_writes_server_json_atomically", "callee": "getpid", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L80"}, {"caller_nid": "tray_test_server_runner_test_start_writes_server_json_atomically", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L83"}, {"caller_nid": "tray_test_server_runner_test_start_writes_server_json_atomically", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L86"}, {"caller_nid": "tray_test_server_runner_test_stop_deletes_state_file", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L91"}, {"caller_nid": "tray_test_server_runner_test_stop_deletes_state_file", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L92"}, {"caller_nid": "tray_test_server_runner_test_stop_deletes_state_file", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L94"}, {"caller_nid": "tray_test_server_runner_test_double_start_raises", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L100"}, {"caller_nid": "tray_test_server_runner_test_double_start_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L102"}, {"caller_nid": "tray_test_server_runner_test_double_start_raises", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L103"}, {"caller_nid": "tray_test_server_runner_test_double_start_raises", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L105"}, {"caller_nid": "tray_test_server_runner_test_port_property_before_start_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L110"}, {"caller_nid": "tray_test_server_runner_test_port_property_after_start", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L116"}, {"caller_nid": "tray_test_server_runner_test_port_property_after_start", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L120"}, {"caller_nid": "tray_test_server_runner_test_stop_is_idempotent", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L130"}, {"caller_nid": "tray_test_server_runner_test_stop_is_idempotent", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L131"}, {"caller_nid": "tray_test_server_runner_test_start_creates_state_dir_if_missing", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L138"}, {"caller_nid": "tray_test_server_runner_test_start_creates_state_dir_if_missing", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L140"}, {"caller_nid": "tray_test_server_runner_test_start_creates_state_dir_if_missing", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L142"}, {"caller_nid": "tray_test_server_runner_test_is_running_tracks_thread_lifecycle", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L148"}, {"caller_nid": "tray_test_server_runner_test_is_running_tracks_thread_lifecycle", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L153"}, {"caller_nid": "tray_test_server_runner_test_real_uvicorn_resolves_lazily", "callee": "ServerRunner", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L164"}, {"caller_nid": "tray_test_server_runner_test_real_uvicorn_resolves_lazily", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L164"}, {"caller_nid": "tray_test_server_runner_test_real_uvicorn_resolves_lazily", "callee": "_build_uvicorn", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L165"}, {"caller_nid": "tray_test_server_runner_test_real_uvicorn_resolves_lazily", "callee": "hasattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L166"}, {"caller_nid": "tray_test_server_runner_test_delete_state_file_handles_missing", "callee": "ServerRunner", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L171"}, {"caller_nid": "tray_test_server_runner_test_delete_state_file_handles_missing", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L171"}, {"caller_nid": "tray_test_server_runner_test_delete_state_file_handles_missing", "callee": "_delete_state_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L173"}, {"caller_nid": "tray_test_server_runner_test_stop_handles_attribute_error_on_should_exit", "callee": "start", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L179"}, {"caller_nid": "tray_test_server_runner_test_stop_handles_attribute_error_on_should_exit", "callee": "_Slotted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L184"}, {"caller_nid": "tray_test_server_runner_test_stop_handles_attribute_error_on_should_exit", "callee": "stop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py", "source_location": "L186"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/ddbf09c7801275f0d759ed781e6d6e10717b37cb12c63526bea9a8cd9c68d078.json b/graphify-out/cache/ast/ddbf09c7801275f0d759ed781e6d6e10717b37cb12c63526bea9a8cd9c68d078.json new file mode 100644 index 0000000..72bfffa --- /dev/null +++ b/graphify-out/cache/ast/ddbf09c7801275f0d759ed781e6d6e10717b37cb12c63526bea9a8cd9c68d078.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_21_stage_ceiling_py", "label": "test_flow_21_stage_ceiling.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L1"}, {"id": "e2e_test_flow_21_stage_ceiling_goto", "label": "_goto()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L12"}, {"id": "e2e_test_flow_21_stage_ceiling_test_flow_21_stage_equipment_metadata_renders_ceiling_note", "label": "test_flow_21_stage_equipment_metadata_renders_ceiling_note()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L25"}, {"id": "e2e_test_flow_21_stage_ceiling_rationale_1", "label": "E2E flow 21: stage-mode ceiling note (Redesign \u00a73.2 / \u00a74.4). When a stage-mode", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_21_stage_ceiling_py", "target": "e2e_test_flow_21_stage_ceiling_goto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_21_stage_ceiling_py", "target": "e2e_test_flow_21_stage_ceiling_test_flow_21_stage_equipment_metadata_renders_ceiling_note", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L25", "weight": 1.0}, {"source": "e2e_test_flow_21_stage_ceiling_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_21_stage_ceiling_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_21_stage_ceiling_goto", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L14"}, {"caller_nid": "e2e_test_flow_21_stage_ceiling_goto", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L16"}, {"caller_nid": "e2e_test_flow_21_stage_ceiling_goto", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L17"}, {"caller_nid": "e2e_test_flow_21_stage_ceiling_goto", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L21"}, {"caller_nid": "e2e_test_flow_21_stage_ceiling_goto", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L22"}, {"caller_nid": "e2e_test_flow_21_stage_ceiling_test_flow_21_stage_equipment_metadata_renders_ceiling_note", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L28"}, {"caller_nid": "e2e_test_flow_21_stage_ceiling_test_flow_21_stage_equipment_metadata_renders_ceiling_note", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L29"}, {"caller_nid": "e2e_test_flow_21_stage_ceiling_test_flow_21_stage_equipment_metadata_renders_ceiling_note", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L34"}, {"caller_nid": "e2e_test_flow_21_stage_ceiling_test_flow_21_stage_equipment_metadata_renders_ceiling_note", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L34"}, {"caller_nid": "e2e_test_flow_21_stage_ceiling_test_flow_21_stage_equipment_metadata_renders_ceiling_note", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L37"}, {"caller_nid": "e2e_test_flow_21_stage_ceiling_test_flow_21_stage_equipment_metadata_renders_ceiling_note", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L37"}, {"caller_nid": "e2e_test_flow_21_stage_ceiling_test_flow_21_stage_equipment_metadata_renders_ceiling_note", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L38"}, {"caller_nid": "e2e_test_flow_21_stage_ceiling_test_flow_21_stage_equipment_metadata_renders_ceiling_note", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L39"}, {"caller_nid": "e2e_test_flow_21_stage_ceiling_test_flow_21_stage_equipment_metadata_renders_ceiling_note", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py", "source_location": "L39"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/de7ec7c73dca858c358b3fe4188bd54bebe47560f57493ee012be08883cdbaec.json b/graphify-out/cache/ast/de7ec7c73dca858c358b3fe4188bd54bebe47560f57493ee012be08883cdbaec.json new file mode 100644 index 0000000..10fe286 --- /dev/null +++ b/graphify-out/cache/ast/de7ec7c73dca858c358b3fe4188bd54bebe47560f57493ee012be08883cdbaec.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_validator_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/__init__.py", "source_location": "L1"}, {"id": "validator_init_rationale_1", "label": "Unit tests for ``exlab_wizard.validator``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/__init__.py", "source_location": "L1"}], "edges": [{"source": "validator_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_validator_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/e04eee45bc181a92b04373ab3e7776d17ea64db0c40cf12ae8782ce9704831f4.json b/graphify-out/cache/ast/e04eee45bc181a92b04373ab3e7776d17ea64db0c40cf12ae8782ce9704831f4.json new file mode 100644 index 0000000..909aa61 --- /dev/null +++ b/graphify-out/cache/ast/e04eee45bc181a92b04373ab3e7776d17ea64db0c40cf12ae8782ce9704831f4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "label": "test_rules.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L1"}, {"id": "validator_test_rules_test_angle_bracket_token_in_segment_fires", "label": "test_angle_bracket_token_in_segment_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L37"}, {"id": "validator_test_rules_test_non_token_angle_brackets_pass", "label": "test_non_token_angle_brackets_pass()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L64"}, {"id": "validator_test_rules_test_jinja_var_marker_in_filename_fires", "label": "test_jinja_var_marker_in_filename_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L75"}, {"id": "validator_test_rules_test_jinja_block_marker_in_content_fires", "label": "test_jinja_block_marker_in_content_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L88"}, {"id": "validator_test_rules_test_unresolved_placeholder_in_content_fires", "label": "test_unresolved_placeholder_in_content_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L101"}, {"id": "validator_test_rules_test_no_findings_on_clean_inputs", "label": "test_no_findings_on_clean_inputs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L110"}, {"id": "validator_test_rules_test_large_text_file_skipped_from_content_scan", "label": "test_large_text_file_skipped_from_content_scan()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L119"}, {"id": "validator_test_rules_test_under_size_cap_content_is_scanned", "label": "test_under_size_cap_content_is_scanned()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L131"}, {"id": "validator_test_rules_test_multiple_matches_in_same_input_each_yield_finding", "label": "test_multiple_matches_in_same_input_each_yield_finding()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L142"}, {"id": "validator_test_rules_test_empty_file_contents_dict_is_path_only_scan", "label": "test_empty_file_contents_dict_is_path_only_scan()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L152"}, {"id": "validator_test_rules_test_windows_illegal_char_in_segment_fires", "label": "test_windows_illegal_char_in_segment_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L180"}, {"id": "validator_test_rules_test_nul_byte_in_name_fires", "label": "test_nul_byte_in_name_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L191"}, {"id": "validator_test_rules_test_low_ascii_control_char_fires", "label": "test_low_ascii_control_char_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L200"}, {"id": "validator_test_rules_test_trailing_dot_fires", "label": "test_trailing_dot_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L210"}, {"id": "validator_test_rules_test_trailing_space_fires", "label": "test_trailing_space_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L218"}, {"id": "validator_test_rules_test_normal_names_pass", "label": "test_normal_names_pass()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L237"}, {"id": "validator_test_rules_test_findings_have_hard_tier", "label": "test_findings_have_hard_tier()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L245"}, {"id": "validator_test_rules_test_reserved_name_fires", "label": "test_reserved_name_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L276"}, {"id": "validator_test_rules_test_non_reserved_name_passes", "label": "test_non_reserved_name_passes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L297"}, {"id": "validator_test_rules_test_unsafe_project_name_fires", "label": "test_unsafe_project_name_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L320"}, {"id": "validator_test_rules_test_safe_project_name_passes", "label": "test_safe_project_name_passes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L340"}, {"id": "validator_test_rules_test_experimental_with_run_prefix_under_runs_parent_passes", "label": "test_experimental_with_run_prefix_under_runs_parent_passes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L349"}, {"id": "validator_test_rules_test_experimental_with_run_prefix_at_project_level_fires", "label": "test_experimental_with_run_prefix_at_project_level_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L359"}, {"id": "validator_test_rules_test_experimental_with_test_run_prefix_fires", "label": "test_experimental_with_test_run_prefix_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L372"}, {"id": "validator_test_rules_test_experimental_under_test_runs_parent_fires", "label": "test_experimental_under_test_runs_parent_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L382"}, {"id": "validator_test_rules_test_test_with_test_run_prefix_under_test_runs_passes", "label": "test_test_with_test_run_prefix_under_test_runs_passes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L391"}, {"id": "validator_test_rules_test_test_with_run_prefix_fires", "label": "test_test_with_run_prefix_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L400"}, {"id": "validator_test_rules_test_test_with_test_run_prefix_but_wrong_parent_fires", "label": "test_test_with_test_run_prefix_but_wrong_parent_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L409"}, {"id": "validator_test_rules_test_run_kind_none_returns_no_findings", "label": "test_run_kind_none_returns_no_findings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L418"}, {"id": "validator_test_rules_test_project_without_creation_json_fires", "label": "test_project_without_creation_json_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L432"}, {"id": "validator_test_rules_test_run_without_creation_json_fires", "label": "test_run_without_creation_json_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L439"}, {"id": "validator_test_rules_test_equipment_without_creation_json_does_not_fire", "label": "test_equipment_without_creation_json_does_not_fire()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L445"}, {"id": "validator_test_rules_test_project_with_creation_json_passes", "label": "test_project_with_creation_json_passes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L450"}, {"id": "validator_test_rules_test_run_with_creation_json_passes", "label": "test_run_with_creation_json_passes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L455"}, {"id": "validator_test_rules_test_missing_id_fires", "label": "test_missing_id_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L465"}, {"id": "validator_test_rules_test_empty_string_value_fires", "label": "test_empty_string_value_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L479"}, {"id": "validator_test_rules_test_present_id_with_non_empty_value_passes", "label": "test_present_id_with_non_empty_value_passes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L492"}, {"id": "validator_test_rules_test_field_present_in_template_fields_layer_passes", "label": "test_field_present_in_template_fields_layer_passes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L504"}, {"id": "validator_test_rules_test_none_readme_fields_treats_all_required_as_missing", "label": "test_none_readme_fields_treats_all_required_as_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L516"}, {"id": "validator_test_rules_test_value_explicit_none_fires", "label": "test_value_explicit_none_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L524"}, {"id": "validator_test_rules_test_well_formed_front_matter_passes", "label": "test_well_formed_front_matter_passes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L541"}, {"id": "validator_test_rules_test_unterminated_front_matter_fires", "label": "test_unterminated_front_matter_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L546"}, {"id": "validator_test_rules_test_malformed_yaml_in_block_fires", "label": "test_malformed_yaml_in_block_fires()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L554"}, {"id": "validator_test_rules_test_no_front_matter_passes", "label": "test_no_front_matter_passes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L562"}, {"id": "validator_test_rules_test_empty_content_passes", "label": "test_empty_content_passes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L567"}, {"id": "validator_test_rules_test_front_matter_with_nested_yaml_passes", "label": "test_front_matter_with_nested_yaml_passes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L571"}, {"id": "validator_test_rules_rationale_1", "label": "Tests for ``exlab_wizard.validator.rules``. Backend Spec \u00a78.1. Covers each \u00a78.1", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L1"}, {"id": "validator_test_rules_rationale_350", "label": "Redesign \u00a73.4: experimental run leaf parented by ``Runs`` is valid.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L350"}, {"id": "validator_test_rules_rationale_360", "label": "Redesign \u00a73.4: a misplaced ``Run_*`` directly under the project (not under `", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L360"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "exlab_wizard_validator_rules", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_angle_bracket_token_in_segment_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_non_token_angle_brackets_pass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L64", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_jinja_var_marker_in_filename_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L75", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_jinja_block_marker_in_content_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L88", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_unresolved_placeholder_in_content_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L101", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_no_findings_on_clean_inputs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L110", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_large_text_file_skipped_from_content_scan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L119", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_under_size_cap_content_is_scanned", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L131", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_multiple_matches_in_same_input_each_yield_finding", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L142", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_empty_file_contents_dict_is_path_only_scan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L152", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_windows_illegal_char_in_segment_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L180", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_nul_byte_in_name_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L191", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_low_ascii_control_char_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L200", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_trailing_dot_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L210", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_trailing_space_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L218", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_normal_names_pass", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L237", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_findings_have_hard_tier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L245", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_reserved_name_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L276", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_non_reserved_name_passes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L297", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_unsafe_project_name_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L320", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_safe_project_name_passes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L340", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_experimental_with_run_prefix_under_runs_parent_passes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L349", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_experimental_with_run_prefix_at_project_level_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L359", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_experimental_with_test_run_prefix_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L372", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_experimental_under_test_runs_parent_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L382", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_test_with_test_run_prefix_under_test_runs_passes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L391", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_test_with_run_prefix_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L400", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_test_with_test_run_prefix_but_wrong_parent_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L409", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_run_kind_none_returns_no_findings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L418", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_project_without_creation_json_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L432", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_run_without_creation_json_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L439", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_equipment_without_creation_json_does_not_fire", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L445", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_project_with_creation_json_passes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L450", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_run_with_creation_json_passes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L455", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_missing_id_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L465", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_empty_string_value_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L479", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_present_id_with_non_empty_value_passes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L492", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_field_present_in_template_fields_layer_passes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L504", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_none_readme_fields_treats_all_required_as_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L516", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_value_explicit_none_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L524", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_well_formed_front_matter_passes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L541", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_unterminated_front_matter_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L546", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_malformed_yaml_in_block_fires", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L554", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_no_front_matter_passes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L562", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_empty_content_passes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L567", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "target": "validator_test_rules_test_front_matter_with_nested_yaml_passes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L571", "weight": 1.0}, {"source": "validator_test_rules_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_validator_test_rules_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L1", "weight": 1.0}, {"source": "validator_test_rules_rationale_350", "target": "validator_test_rules_test_experimental_with_run_prefix_under_runs_parent_passes", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L350", "weight": 1.0}, {"source": "validator_test_rules_rationale_360", "target": "validator_test_rules_test_experimental_with_run_prefix_at_project_level_fires", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L360", "weight": 1.0}], "raw_calls": [{"caller_nid": "validator_test_rules_test_angle_bracket_token_in_segment_fires", "callee": "check_unresolved_placeholder", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L38"}, {"caller_nid": "validator_test_rules_test_angle_bracket_token_in_segment_fires", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L43"}, {"caller_nid": "validator_test_rules_test_non_token_angle_brackets_pass", "callee": "check_unresolved_placeholder", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L65"}, {"caller_nid": "validator_test_rules_test_jinja_var_marker_in_filename_fires", "callee": "check_unresolved_placeholder", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L76"}, {"caller_nid": "validator_test_rules_test_jinja_var_marker_in_filename_fires", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L81"}, {"caller_nid": "validator_test_rules_test_jinja_var_marker_in_filename_fires", "callee": "next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L82"}, {"caller_nid": "validator_test_rules_test_jinja_block_marker_in_content_fires", "callee": "check_unresolved_placeholder", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L89"}, {"caller_nid": "validator_test_rules_test_jinja_block_marker_in_content_fires", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L94"}, {"caller_nid": "validator_test_rules_test_jinja_block_marker_in_content_fires", "callee": "next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L95"}, {"caller_nid": "validator_test_rules_test_unresolved_placeholder_in_content_fires", "callee": "check_unresolved_placeholder", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L102"}, {"caller_nid": "validator_test_rules_test_unresolved_placeholder_in_content_fires", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L107"}, {"caller_nid": "validator_test_rules_test_no_findings_on_clean_inputs", "callee": "check_unresolved_placeholder", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L111"}, {"caller_nid": "validator_test_rules_test_large_text_file_skipped_from_content_scan", "callee": "check_unresolved_placeholder", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L123"}, {"caller_nid": "validator_test_rules_test_under_size_cap_content_is_scanned", "callee": "check_unresolved_placeholder", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L134"}, {"caller_nid": "validator_test_rules_test_under_size_cap_content_is_scanned", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L139"}, {"caller_nid": "validator_test_rules_test_multiple_matches_in_same_input_each_yield_finding", "callee": "check_unresolved_placeholder", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L143"}, {"caller_nid": "validator_test_rules_test_multiple_matches_in_same_input_each_yield_finding", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L148"}, {"caller_nid": "validator_test_rules_test_empty_file_contents_dict_is_path_only_scan", "callee": "check_unresolved_placeholder", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L153"}, {"caller_nid": "validator_test_rules_test_empty_file_contents_dict_is_path_only_scan", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L158"}, {"caller_nid": "validator_test_rules_test_windows_illegal_char_in_segment_fires", "callee": "check_illegal_filesystem_character", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L181"}, {"caller_nid": "validator_test_rules_test_windows_illegal_char_in_segment_fires", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L185"}, {"caller_nid": "validator_test_rules_test_nul_byte_in_name_fires", "callee": "check_illegal_filesystem_character", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L193"}, {"caller_nid": "validator_test_rules_test_nul_byte_in_name_fires", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L197"}, {"caller_nid": "validator_test_rules_test_low_ascii_control_char_fires", "callee": "check_illegal_filesystem_character", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L203"}, {"caller_nid": "validator_test_rules_test_low_ascii_control_char_fires", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L207"}, {"caller_nid": "validator_test_rules_test_trailing_dot_fires", "callee": "check_illegal_filesystem_character", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L211"}, {"caller_nid": "validator_test_rules_test_trailing_dot_fires", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L215"}, {"caller_nid": "validator_test_rules_test_trailing_space_fires", "callee": "check_illegal_filesystem_character", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L219"}, {"caller_nid": "validator_test_rules_test_trailing_space_fires", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L223"}, {"caller_nid": "validator_test_rules_test_normal_names_pass", "callee": "check_illegal_filesystem_character", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L238"}, {"caller_nid": "validator_test_rules_test_findings_have_hard_tier", "callee": "check_illegal_filesystem_character", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L246"}, {"caller_nid": "validator_test_rules_test_findings_have_hard_tier", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L250"}, {"caller_nid": "validator_test_rules_test_reserved_name_fires", "callee": "check_reserved_filesystem_name", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L277"}, {"caller_nid": "validator_test_rules_test_reserved_name_fires", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L278"}, {"caller_nid": "validator_test_rules_test_non_reserved_name_passes", "callee": "check_reserved_filesystem_name", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L298"}, {"caller_nid": "validator_test_rules_test_unsafe_project_name_fires", "callee": "check_unsafe_project_name", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L321"}, {"caller_nid": "validator_test_rules_test_unsafe_project_name_fires", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L323"}, {"caller_nid": "validator_test_rules_test_unsafe_project_name_fires", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L326"}, {"caller_nid": "validator_test_rules_test_unsafe_project_name_fires", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L327"}, {"caller_nid": "validator_test_rules_test_unsafe_project_name_fires", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L328"}, {"caller_nid": "validator_test_rules_test_safe_project_name_passes", "callee": "check_unsafe_project_name", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L341"}, {"caller_nid": "validator_test_rules_test_experimental_with_run_prefix_under_runs_parent_passes", "callee": "check_mode_prefix_mismatch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L351"}, {"caller_nid": "validator_test_rules_test_experimental_with_run_prefix_at_project_level_fires", "callee": "check_mode_prefix_mismatch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L362"}, {"caller_nid": "validator_test_rules_test_experimental_with_run_prefix_at_project_level_fires", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L367"}, {"caller_nid": "validator_test_rules_test_experimental_with_test_run_prefix_fires", "callee": "check_mode_prefix_mismatch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L373"}, {"caller_nid": "validator_test_rules_test_experimental_with_test_run_prefix_fires", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L378"}, {"caller_nid": "validator_test_rules_test_experimental_with_test_run_prefix_fires", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L379"}, {"caller_nid": "validator_test_rules_test_experimental_under_test_runs_parent_fires", "callee": "check_mode_prefix_mismatch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L383"}, {"caller_nid": "validator_test_rules_test_experimental_under_test_runs_parent_fires", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L388"}, {"caller_nid": "validator_test_rules_test_test_with_test_run_prefix_under_test_runs_passes", "callee": "check_mode_prefix_mismatch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L392"}, {"caller_nid": "validator_test_rules_test_test_with_run_prefix_fires", "callee": "check_mode_prefix_mismatch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L401"}, {"caller_nid": "validator_test_rules_test_test_with_run_prefix_fires", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L406"}, {"caller_nid": "validator_test_rules_test_test_with_test_run_prefix_but_wrong_parent_fires", "callee": "check_mode_prefix_mismatch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L410"}, {"caller_nid": "validator_test_rules_test_test_with_test_run_prefix_but_wrong_parent_fires", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L415"}, {"caller_nid": "validator_test_rules_test_run_kind_none_returns_no_findings", "callee": "check_mode_prefix_mismatch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L419"}, {"caller_nid": "validator_test_rules_test_project_without_creation_json_fires", "callee": "check_orphan", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L433"}, {"caller_nid": "validator_test_rules_test_project_without_creation_json_fires", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L434"}, {"caller_nid": "validator_test_rules_test_run_without_creation_json_fires", "callee": "check_orphan", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L440"}, {"caller_nid": "validator_test_rules_test_run_without_creation_json_fires", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L441"}, {"caller_nid": "validator_test_rules_test_equipment_without_creation_json_does_not_fire", "callee": "check_orphan", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L446"}, {"caller_nid": "validator_test_rules_test_project_with_creation_json_passes", "callee": "check_orphan", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L451"}, {"caller_nid": "validator_test_rules_test_run_with_creation_json_passes", "callee": "check_orphan", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L456"}, {"caller_nid": "validator_test_rules_test_missing_id_fires", "callee": "check_missing_required_field", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L466"}, {"caller_nid": "validator_test_rules_test_missing_id_fires", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L474"}, {"caller_nid": "validator_test_rules_test_empty_string_value_fires", "callee": "check_missing_required_field", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L480"}, {"caller_nid": "validator_test_rules_test_empty_string_value_fires", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L488"}, {"caller_nid": "validator_test_rules_test_present_id_with_non_empty_value_passes", "callee": "check_missing_required_field", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L493"}, {"caller_nid": "validator_test_rules_test_field_present_in_template_fields_layer_passes", "callee": "check_missing_required_field", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L505"}, {"caller_nid": "validator_test_rules_test_none_readme_fields_treats_all_required_as_missing", "callee": "check_missing_required_field", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L517"}, {"caller_nid": "validator_test_rules_test_none_readme_fields_treats_all_required_as_missing", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L521"}, {"caller_nid": "validator_test_rules_test_value_explicit_none_fires", "callee": "check_missing_required_field", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L525"}, {"caller_nid": "validator_test_rules_test_value_explicit_none_fires", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L533"}, {"caller_nid": "validator_test_rules_test_well_formed_front_matter_passes", "callee": "check_malformed_yaml_front_matter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L543"}, {"caller_nid": "validator_test_rules_test_unterminated_front_matter_fires", "callee": "check_malformed_yaml_front_matter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L548"}, {"caller_nid": "validator_test_rules_test_unterminated_front_matter_fires", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L549"}, {"caller_nid": "validator_test_rules_test_malformed_yaml_in_block_fires", "callee": "check_malformed_yaml_front_matter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L557"}, {"caller_nid": "validator_test_rules_test_malformed_yaml_in_block_fires", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L558"}, {"caller_nid": "validator_test_rules_test_no_front_matter_passes", "callee": "check_malformed_yaml_front_matter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L564"}, {"caller_nid": "validator_test_rules_test_empty_content_passes", "callee": "check_malformed_yaml_front_matter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L568"}, {"caller_nid": "validator_test_rules_test_front_matter_with_nested_yaml_passes", "callee": "check_malformed_yaml_front_matter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py", "source_location": "L585"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e0d4abb2e5c598f62d5358fc386745659012ea4a578596bcb9d9fe45fcc0960a.json b/graphify-out/cache/ast/e0d4abb2e5c598f62d5358fc386745659012ea4a578596bcb9d9fe45fcc0960a.json new file mode 100644 index 0000000..c797a9b --- /dev/null +++ b/graphify-out/cache/ast/e0d4abb2e5c598f62d5358fc386745659012ea4a578596bcb9d9fe45fcc0960a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "label": "browse.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L1"}, {"id": "routers_browse_runnode", "label": "RunNode", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L67"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "routers_browse_projectnode", "label": "ProjectNode", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L77"}, {"id": "routers_browse_equipmentnode", "label": "EquipmentNode", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L91"}, {"id": "routers_browse_relayequipmentnode", "label": "RelayEquipmentNode", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L109"}, {"id": "routers_browse_treeresponse", "label": "TreeResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L125"}, {"id": "routers_browse_folderentry", "label": "FolderEntry", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L132"}, {"id": "routers_browse_folderresponse", "label": "FolderResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L156"}, {"id": "routers_browse_rundetail", "label": "RunDetail", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L165"}, {"id": "routers_browse_runlogentry", "label": "RunLogEntry", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L180"}, {"id": "routers_browse_runlogresponse", "label": "RunLogResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L199"}, {"id": "routers_browse_build_browse_router", "label": "build_browse_router()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L214"}, {"id": "routers_browse_run_log_from_queue", "label": "_run_log_from_queue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L341"}, {"id": "routers_browse_path_is_under_allowed_root", "label": "_path_is_under_allowed_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L375"}, {"id": "routers_browse_build_equipment_node", "label": "_build_equipment_node()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L405"}, {"id": "routers_browse_build_received_equipment_nodes", "label": "build_received_equipment_nodes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L420"}, {"id": "routers_browse_relay_label_from_first_run", "label": "_relay_label_from_first_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L463"}, {"id": "routers_browse_find_run_root", "label": "_find_run_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L494"}, {"id": "routers_browse_read_sync_state", "label": "_read_sync_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L515"}, {"id": "routers_browse_file_state_from_record", "label": "_file_state_from_record()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L531"}, {"id": "routers_browse_per_file_sync_status", "label": "_per_file_sync_status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L550"}, {"id": "routers_browse_run_relative_posix", "label": "_run_relative_posix()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L571"}, {"id": "routers_browse_iter_run_or_project_subdirs", "label": "_iter_run_or_project_subdirs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L579"}, {"id": "routers_browse_scan_projects", "label": "_scan_projects()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L602"}, {"id": "routers_browse_build_project_node", "label": "_build_project_node()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L610"}, {"id": "routers_browse_scan_run_children", "label": "_scan_run_children()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L639"}, {"id": "routers_browse_build_run_node", "label": "_build_run_node()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L652"}, {"id": "routers_browse_run_rollup_status", "label": "_run_rollup_status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L675"}, {"id": "routers_browse_read_readme", "label": "_read_readme()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L696"}, {"id": "routers_browse_scan_folder_sync", "label": "scan_folder_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L712"}, {"id": "routers_browse_tombstone_entries", "label": "_tombstone_entries()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L808"}, {"id": "routers_browse_build_hierarchy_dict", "label": "build_hierarchy_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L853"}, {"id": "routers_browse_projects_for_ui_tree", "label": "_projects_for_ui_tree()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L887"}, {"id": "routers_browse_rationale_1", "label": "``/tree`` and ``/run/{path}`` browse endpoints. Backend Spec \u00a74.6.1. Two endpoi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L1"}, {"id": "routers_browse_rationale_92", "label": "An owned-equipment node in the tree (Redesign \u00a73.3). ``sync_mode`` (\"nas\" |", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L92"}, {"id": "routers_browse_rationale_110", "label": "A received-equipment node auto-discovered from the staging area. Redesign \u00a7", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L110"}, {"id": "routers_browse_rationale_133", "label": "One row in the new ``GET /folder/{path}`` response. Redesign \u00a74.3 / \u00a75. Ope", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L133"}, {"id": "routers_browse_rationale_157", "label": "Immediate contents of one folder. Redesign \u00a75 (live file feed).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L157"}, {"id": "routers_browse_rationale_181", "label": "One row in the ``GET /run/{path}/log`` response. The orchestrator does not", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L181"}, {"id": "routers_browse_rationale_200", "label": "``GET /run/{path}/log`` response (Redesign \u00a74.6 View-log surface).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L200"}, {"id": "routers_browse_rationale_215", "label": "Construct the ``/tree`` + ``/run`` router.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L215"}, {"id": "routers_browse_rationale_342", "label": "Derive a run's per-run log from its sync-queue job. Returns ``(history, cur", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L342"}, {"id": "routers_browse_rationale_376", "label": "Return True if ``path`` is under any of the configured roots. Redesign \u00a75 /", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L376"}, {"id": "routers_browse_rationale_421", "label": "Walk the staging root and surface received-equipment nodes. Redesign \u00a73.3:", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L421"}, {"id": "routers_browse_rationale_464", "label": "Best-effort: read the first creation.json under this equipment to pick up th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L464"}, {"id": "routers_browse_rationale_495", "label": "Walk up from ``folder`` to the nearest run directory, or ``None``. A run di", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L495"}, {"id": "routers_browse_rationale_516", "label": "Read a run's ``sync_state.json`` via :class:`SyncStateWriter`. Returns the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L516"}, {"id": "routers_browse_rationale_532", "label": "Map a ``sync_state.json`` record + on-disk presence to a GUI state. The fiv", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L532"}, {"id": "routers_browse_rationale_551", "label": "Return the per-file GUI sync state for a folder-list row. Operator-free per", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L551"}, {"id": "routers_browse_rationale_572", "label": "Return ``path`` relative to ``run_root`` as a POSIX string, or ``None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L572"}, {"id": "routers_browse_rationale_580", "label": "Return name-sorted real subdirectories of ``parent``, sans the cache. Hides", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L580"}, {"id": "routers_browse_rationale_603", "label": "Return a sorted list of project nodes under an equipment dir.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L603"}, {"id": "routers_browse_rationale_653", "label": "Build a tree run node, deriving its rollup from ``sync_state.json``. Operat", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L653"}, {"id": "routers_browse_rationale_676", "label": "Return a run's derived ``RunSyncState`` rollup value, or ``None``. Reads ``", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L676"}, {"id": "routers_browse_rationale_697", "label": "Return the run's README.md text, or ``None`` if absent / unreadable.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L697"}, {"id": "routers_browse_rationale_713", "label": "Synchronous core of the ``GET /folder/{path}`` endpoint. Extracted so the N", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L713"}, {"id": "routers_browse_rationale_814", "label": "Build \"On NAS\" tombstone rows for cleared-run files absent on disk. Operato", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L814"}, {"id": "routers_browse_rationale_854", "label": "Compose the nested hierarchy dict that ``ui.components.tree.build_tree`` expects", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L854"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "exlab_wizard_api_dependencies", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "exlab_wizard_api_setup", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "exlab_wizard_io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_runnode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L67", "weight": 1.0}, {"source": "routers_browse_runnode", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_projectnode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L77", "weight": 1.0}, {"source": "routers_browse_projectnode", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L77", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_equipmentnode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L91", "weight": 1.0}, {"source": "routers_browse_equipmentnode", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L91", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_relayequipmentnode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L109", "weight": 1.0}, {"source": "routers_browse_relayequipmentnode", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L109", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_treeresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L125", "weight": 1.0}, {"source": "routers_browse_treeresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L125", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_folderentry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L132", "weight": 1.0}, {"source": "routers_browse_folderentry", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L132", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_folderresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L156", "weight": 1.0}, {"source": "routers_browse_folderresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L156", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_rundetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L165", "weight": 1.0}, {"source": "routers_browse_rundetail", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L165", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_runlogentry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L180", "weight": 1.0}, {"source": "routers_browse_runlogentry", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L180", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_runlogresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L199", "weight": 1.0}, {"source": "routers_browse_runlogresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L199", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_build_browse_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L214", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_run_log_from_queue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L341", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_path_is_under_allowed_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L375", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_build_equipment_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L405", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_build_received_equipment_nodes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L420", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_relay_label_from_first_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L463", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_find_run_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L494", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_read_sync_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L515", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_file_state_from_record", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L531", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_per_file_sync_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L550", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_run_relative_posix", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L571", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_iter_run_or_project_subdirs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L579", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_scan_projects", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L602", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_build_project_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L610", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_scan_run_children", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L639", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_build_run_node", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L652", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_run_rollup_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L675", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_read_readme", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L696", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_scan_folder_sync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L712", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_tombstone_entries", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L808", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_build_hierarchy_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L853", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "target": "routers_browse_projects_for_ui_tree", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L887", "weight": 1.0}, {"source": "routers_browse_run_log_from_queue", "target": "routers_browse_runlogentry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L366", "weight": 1.0}, {"source": "routers_browse_build_equipment_node", "target": "routers_browse_scan_projects", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L407", "weight": 1.0}, {"source": "routers_browse_build_equipment_node", "target": "routers_browse_equipmentnode", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L410", "weight": 1.0}, {"source": "routers_browse_build_received_equipment_nodes", "target": "routers_browse_scan_projects", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L448", "weight": 1.0}, {"source": "routers_browse_build_received_equipment_nodes", "target": "routers_browse_relayequipmentnode", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L452", "weight": 1.0}, {"source": "routers_browse_build_received_equipment_nodes", "target": "routers_browse_relay_label_from_first_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L454", "weight": 1.0}, {"source": "routers_browse_relay_label_from_first_run", "target": "routers_browse_iter_run_or_project_subdirs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L466", "weight": 1.0}, {"source": "routers_browse_per_file_sync_status", "target": "routers_browse_find_run_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L560", "weight": 1.0}, {"source": "routers_browse_per_file_sync_status", "target": "routers_browse_read_sync_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L563", "weight": 1.0}, {"source": "routers_browse_per_file_sync_status", "target": "routers_browse_run_relative_posix", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L566", "weight": 1.0}, {"source": "routers_browse_per_file_sync_status", "target": "routers_browse_file_state_from_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L568", "weight": 1.0}, {"source": "routers_browse_scan_projects", "target": "routers_browse_build_project_node", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L605", "weight": 1.0}, {"source": "routers_browse_scan_projects", "target": "routers_browse_iter_run_or_project_subdirs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L606", "weight": 1.0}, {"source": "routers_browse_build_project_node", "target": "routers_browse_iter_run_or_project_subdirs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L613", "weight": 1.0}, {"source": "routers_browse_build_project_node", "target": "routers_browse_scan_run_children", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L616", "weight": 1.0}, {"source": "routers_browse_build_project_node", "target": "routers_browse_build_run_node", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L628", "weight": 1.0}, {"source": "routers_browse_build_project_node", "target": "routers_browse_projectnode", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L630", "weight": 1.0}, {"source": "routers_browse_scan_run_children", "target": "routers_browse_build_run_node", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L646", "weight": 1.0}, {"source": "routers_browse_scan_run_children", "target": "routers_browse_iter_run_or_project_subdirs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L647", "weight": 1.0}, {"source": "routers_browse_build_run_node", "target": "routers_browse_run_rollup_status", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L665", "weight": 1.0}, {"source": "routers_browse_build_run_node", "target": "routers_browse_runnode", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L666", "weight": 1.0}, {"source": "routers_browse_scan_folder_sync", "target": "routers_browse_path_is_under_allowed_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L732", "weight": 1.0}, {"source": "routers_browse_scan_folder_sync", "target": "routers_browse_find_run_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L772", "weight": 1.0}, {"source": "routers_browse_scan_folder_sync", "target": "routers_browse_read_sync_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L773", "weight": 1.0}, {"source": "routers_browse_scan_folder_sync", "target": "routers_browse_run_relative_posix", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L784", "weight": 1.0}, {"source": "routers_browse_scan_folder_sync", "target": "routers_browse_folderentry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L789", "weight": 1.0}, {"source": "routers_browse_scan_folder_sync", "target": "routers_browse_file_state_from_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L795", "weight": 1.0}, {"source": "routers_browse_scan_folder_sync", "target": "routers_browse_tombstone_entries", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L803", "weight": 1.0}, {"source": "routers_browse_scan_folder_sync", "target": "routers_browse_folderresponse", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L805", "weight": 1.0}, {"source": "routers_browse_tombstone_entries", "target": "routers_browse_file_state_from_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L834", "weight": 1.0}, {"source": "routers_browse_tombstone_entries", "target": "routers_browse_folderentry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L839", "weight": 1.0}, {"source": "routers_browse_build_hierarchy_dict", "target": "routers_browse_build_equipment_node", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L872", "weight": 1.0}, {"source": "routers_browse_build_hierarchy_dict", "target": "routers_browse_equipmentnode", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L873", "weight": 1.0}, {"source": "routers_browse_build_hierarchy_dict", "target": "routers_browse_projects_for_ui_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L877", "weight": 1.0}, {"source": "routers_browse_build_hierarchy_dict", "target": "routers_browse_build_received_equipment_nodes", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L878", "weight": 1.0}, {"source": "routers_browse_projects_for_ui_tree", "target": "routers_browse_projectnode", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L893", "weight": 1.0}, {"source": "routers_browse_projects_for_ui_tree", "target": "routers_browse_runnode", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L900", "weight": 1.0}, {"source": "routers_browse_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_browse_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L1", "weight": 1.0}, {"source": "routers_browse_rationale_92", "target": "routers_browse_equipmentnode", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L92", "weight": 1.0}, {"source": "routers_browse_rationale_110", "target": "routers_browse_relayequipmentnode", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L110", "weight": 1.0}, {"source": "routers_browse_rationale_133", "target": "routers_browse_folderentry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L133", "weight": 1.0}, {"source": "routers_browse_rationale_157", "target": "routers_browse_folderresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L157", "weight": 1.0}, {"source": "routers_browse_rationale_181", "target": "routers_browse_runlogentry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L181", "weight": 1.0}, {"source": "routers_browse_rationale_200", "target": "routers_browse_runlogresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L200", "weight": 1.0}, {"source": "routers_browse_rationale_215", "target": "routers_browse_build_browse_router", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L215", "weight": 1.0}, {"source": "routers_browse_rationale_342", "target": "routers_browse_run_log_from_queue", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L342", "weight": 1.0}, {"source": "routers_browse_rationale_376", "target": "routers_browse_path_is_under_allowed_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L376", "weight": 1.0}, {"source": "routers_browse_rationale_421", "target": "routers_browse_build_received_equipment_nodes", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L421", "weight": 1.0}, {"source": "routers_browse_rationale_464", "target": "routers_browse_relay_label_from_first_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L464", "weight": 1.0}, {"source": "routers_browse_rationale_495", "target": "routers_browse_find_run_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L495", "weight": 1.0}, {"source": "routers_browse_rationale_516", "target": "routers_browse_read_sync_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L516", "weight": 1.0}, {"source": "routers_browse_rationale_532", "target": "routers_browse_file_state_from_record", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L532", "weight": 1.0}, {"source": "routers_browse_rationale_551", "target": "routers_browse_per_file_sync_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L551", "weight": 1.0}, {"source": "routers_browse_rationale_572", "target": "routers_browse_run_relative_posix", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L572", "weight": 1.0}, {"source": "routers_browse_rationale_580", "target": "routers_browse_iter_run_or_project_subdirs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L580", "weight": 1.0}, {"source": "routers_browse_rationale_603", "target": "routers_browse_scan_projects", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L603", "weight": 1.0}, {"source": "routers_browse_rationale_653", "target": "routers_browse_build_run_node", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L653", "weight": 1.0}, {"source": "routers_browse_rationale_676", "target": "routers_browse_run_rollup_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L676", "weight": 1.0}, {"source": "routers_browse_rationale_697", "target": "routers_browse_read_readme", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L697", "weight": 1.0}, {"source": "routers_browse_rationale_713", "target": "routers_browse_scan_folder_sync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L713", "weight": 1.0}, {"source": "routers_browse_rationale_814", "target": "routers_browse_tombstone_entries", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L814", "weight": 1.0}, {"source": "routers_browse_rationale_854", "target": "routers_browse_build_hierarchy_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L854", "weight": 1.0}], "raw_calls": [{"caller_nid": "routers_browse_build_browse_router", "callee": "APIRouter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L216"}, {"caller_nid": "routers_browse_build_browse_router", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L218"}, {"caller_nid": "routers_browse_build_browse_router", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L221"}, {"caller_nid": "routers_browse_build_browse_router", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L235"}, {"caller_nid": "routers_browse_build_browse_router", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L238"}, {"caller_nid": "routers_browse_build_browse_router", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L252"}, {"caller_nid": "routers_browse_build_browse_router", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L255"}, {"caller_nid": "routers_browse_build_browse_router", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L288"}, {"caller_nid": "routers_browse_build_browse_router", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L291"}, {"caller_nid": "routers_browse_run_log_from_queue", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L349"}, {"caller_nid": "routers_browse_run_log_from_queue", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L350"}, {"caller_nid": "routers_browse_run_log_from_queue", "callee": "getter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L354"}, {"caller_nid": "routers_browse_run_log_from_queue", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L356"}, {"caller_nid": "routers_browse_run_log_from_queue", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L360"}, {"caller_nid": "routers_browse_run_log_from_queue", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L360"}, {"caller_nid": "routers_browse_run_log_from_queue", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L363"}, {"caller_nid": "routers_browse_run_log_from_queue", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L368"}, {"caller_nid": "routers_browse_run_log_from_queue", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L368"}, {"caller_nid": "routers_browse_path_is_under_allowed_root", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L385"}, {"caller_nid": "routers_browse_path_is_under_allowed_root", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L386"}, {"caller_nid": "routers_browse_path_is_under_allowed_root", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L388"}, {"caller_nid": "routers_browse_path_is_under_allowed_root", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L393"}, {"caller_nid": "routers_browse_path_is_under_allowed_root", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L393"}, {"caller_nid": "routers_browse_path_is_under_allowed_root", "callee": "is_relative_to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L398"}, {"caller_nid": "routers_browse_path_is_under_allowed_root", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L398"}, {"caller_nid": "routers_browse_path_is_under_allowed_root", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L398"}, {"caller_nid": "routers_browse_build_equipment_node", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L407"}, {"caller_nid": "routers_browse_build_equipment_node", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L413"}, {"caller_nid": "routers_browse_build_equipment_node", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L414"}, {"caller_nid": "routers_browse_build_received_equipment_nodes", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L426"}, {"caller_nid": "routers_browse_build_received_equipment_nodes", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L429"}, {"caller_nid": "routers_browse_build_received_equipment_nodes", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L430"}, {"caller_nid": "routers_browse_build_received_equipment_nodes", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L436"}, {"caller_nid": "routers_browse_build_received_equipment_nodes", "callee": "scandir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L436"}, {"caller_nid": "routers_browse_build_received_equipment_nodes", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L440"}, {"caller_nid": "routers_browse_build_received_equipment_nodes", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L447"}, {"caller_nid": "routers_browse_build_received_equipment_nodes", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L451"}, {"caller_nid": "routers_browse_build_received_equipment_nodes", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L455"}, {"caller_nid": "routers_browse_relay_label_from_first_run", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L467"}, {"caller_nid": "routers_browse_relay_label_from_first_run", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L470"}, {"caller_nid": "routers_browse_relay_label_from_first_run", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L472"}, {"caller_nid": "routers_browse_relay_label_from_first_run", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L472"}, {"caller_nid": "routers_browse_relay_label_from_first_run", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L473"}, {"caller_nid": "routers_browse_relay_label_from_first_run", "callee": "read_msgspec_json", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L475"}, {"caller_nid": "routers_browse_find_run_root", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L503"}, {"caller_nid": "routers_browse_find_run_root", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L505"}, {"caller_nid": "routers_browse_find_run_root", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L505"}, {"caller_nid": "routers_browse_read_sync_state", "callee": "read_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L525"}, {"caller_nid": "routers_browse_read_sync_state", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L525"}, {"caller_nid": "routers_browse_read_sync_state", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L527"}, {"caller_nid": "routers_browse_file_state_from_record", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L544"}, {"caller_nid": "routers_browse_per_file_sync_status", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L558"}, {"caller_nid": "routers_browse_per_file_sync_status", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L567"}, {"caller_nid": "routers_browse_run_relative_posix", "callee": "as_posix", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L574"}, {"caller_nid": "routers_browse_run_relative_posix", "callee": "relative_to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L574"}, {"caller_nid": "routers_browse_iter_run_or_project_subdirs", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L589"}, {"caller_nid": "routers_browse_iter_run_or_project_subdirs", "callee": "scandir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L589"}, {"caller_nid": "routers_browse_iter_run_or_project_subdirs", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L593"}, {"caller_nid": "routers_browse_iter_run_or_project_subdirs", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L594"}, {"caller_nid": "routers_browse_iter_run_or_project_subdirs", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L598"}, {"caller_nid": "routers_browse_scan_projects", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L605"}, {"caller_nid": "routers_browse_build_project_node", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L615"}, {"caller_nid": "routers_browse_build_project_node", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L616"}, {"caller_nid": "routers_browse_build_project_node", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L621"}, {"caller_nid": "routers_browse_build_project_node", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L622"}, {"caller_nid": "routers_browse_build_project_node", "callee": "is_run_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L625"}, {"caller_nid": "routers_browse_build_project_node", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L628"}, {"caller_nid": "routers_browse_build_project_node", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L628"}, {"caller_nid": "routers_browse_build_project_node", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L629"}, {"caller_nid": "routers_browse_build_project_node", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L629"}, {"caller_nid": "routers_browse_build_project_node", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L632"}, {"caller_nid": "routers_browse_scan_run_children", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L646"}, {"caller_nid": "routers_browse_scan_run_children", "callee": "prefix_check", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L648"}, {"caller_nid": "routers_browse_build_run_node", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L661"}, {"caller_nid": "routers_browse_build_run_node", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L662"}, {"caller_nid": "routers_browse_build_run_node", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L668"}, {"caller_nid": "routers_browse_run_rollup_status", "callee": "read_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L684"}, {"caller_nid": "routers_browse_run_rollup_status", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L684"}, {"caller_nid": "routers_browse_run_rollup_status", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L686"}, {"caller_nid": "routers_browse_run_rollup_status", "callee": "rollup_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L688"}, {"caller_nid": "routers_browse_read_readme", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L699"}, {"caller_nid": "routers_browse_read_readme", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L702"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L723"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L723"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L725"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L733"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L743"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L744"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L753"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "scandir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L753"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L755"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L763"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L774"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L775"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L777"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L778"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L784"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L786"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L787"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L788"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L794"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "fromtimestamp", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L794"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L796"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L796"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L803"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "sort", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L804"}, {"caller_nid": "routers_browse_scan_folder_sync", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L805"}, {"caller_nid": "routers_browse_tombstone_entries", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L823"}, {"caller_nid": "routers_browse_tombstone_entries", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L838"}, {"caller_nid": "routers_browse_tombstone_entries", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L841"}, {"caller_nid": "routers_browse_tombstone_entries", "callee": "bool", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L846"}, {"caller_nid": "routers_browse_tombstone_entries", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L846"}, {"caller_nid": "routers_browse_build_hierarchy_dict", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L870"}, {"caller_nid": "routers_browse_build_hierarchy_dict", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L870"}, {"caller_nid": "routers_browse_projects_for_ui_tree", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L899"}, {"caller_nid": "routers_browse_projects_for_ui_tree", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py", "source_location": "L907"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e2129ad9ac5362bbe1105f85efe2e6570aa8cd20fdf3aaa065d3e8cbb3faacc4.json b/graphify-out/cache/ast/e2129ad9ac5362bbe1105f85efe2e6570aa8cd20fdf3aaa065d3e8cbb3faacc4.json new file mode 100644 index 0000000..440ccbc --- /dev/null +++ b/graphify-out/cache/ast/e2129ad9ac5362bbe1105f85efe2e6570aa8cd20fdf3aaa065d3e8cbb3faacc4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_equipment_form_py", "label": "equipment_form.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L1"}, {"id": "ui_equipment_form_build_equipment_config", "label": "build_equipment_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L29"}, {"id": "ui_equipment_form_rationale_1", "label": "Shared assembler for an :class:`EquipmentConfig` from raw form fields. GUI/Orch", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L1"}, {"id": "ui_equipment_form_rationale_54", "label": "Assemble a validated :class:`EquipmentConfig` from raw form fields. Redesig", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L54"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_equipment_form_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_equipment_form_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_equipment_form_py", "target": "ui_equipment_form_build_equipment_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L29", "weight": 1.0}, {"source": "ui_equipment_form_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_equipment_form_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_equipment_form_rationale_54", "target": "ui_equipment_form_build_equipment_config", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L54", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "SyncMode", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L63"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "RcloneSmbTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L70"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L72"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L73"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L74"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L75"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L76"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L79"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L81"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L82"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L83"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L84"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "OrchestratorStagingTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L87"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "OrchestratorTransportType", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L88"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L89"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L90"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L93"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L94"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L95"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L96"}, {"caller_nid": "ui_equipment_form_build_equipment_config", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py", "source_location": "L97"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e2883d27bebbd65ef3495434e9fa4b2e338709cbe16f909921fbc12219c95edc.json b/graphify-out/cache/ast/e2883d27bebbd65ef3495434e9fa4b2e338709cbe16f909921fbc12219c95edc.json new file mode 100644 index 0000000..2bc70e7 --- /dev/null +++ b/graphify-out/cache/ast/e2883d27bebbd65ef3495434e9fa4b2e338709cbe16f909921fbc12219c95edc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "label": "test_browse.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L1"}, {"id": "api_test_browse_config_with_local_root", "label": "_config_with_local_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L37"}, {"id": "api_test_browse_write_creation_json", "label": "_write_creation_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L63"}, {"id": "api_test_browse_test_get_tree_lists_equipment_and_projects", "label": "test_get_tree_lists_equipment_and_projects()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L85"}, {"id": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", "label": "test_get_tree_returns_empty_when_no_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L116"}, {"id": "api_test_browse_test_get_run_returns_detail", "label": "test_get_run_returns_detail()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L134"}, {"id": "api_test_browse_test_get_run_404_when_creation_missing", "label": "test_get_run_404_when_creation_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L153"}, {"id": "api_test_browse_test_get_tree_skips_unknown_dirs", "label": "test_get_tree_skips_unknown_dirs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L166"}, {"id": "api_test_browse_test_get_tree_includes_test_runs", "label": "test_get_tree_includes_test_runs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L184"}, {"id": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", "label": "test_get_run_returns_422_when_creation_json_malformed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L204"}, {"id": "api_test_browse_test_get_run_returns_none_readme_when_absent", "label": "test_get_run_returns_none_readme_when_absent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L225"}, {"id": "api_test_browse_test_get_folder_returns_immediate_contents", "label": "test_get_folder_returns_immediate_contents()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L244"}, {"id": "api_test_browse_test_get_folder_404_on_vanished_path", "label": "test_get_folder_404_on_vanished_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L265"}, {"id": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", "label": "test_get_tree_includes_sync_mode_on_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L276"}, {"id": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", "label": "test_get_folder_rejects_path_outside_configured_roots()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L288"}, {"id": "api_test_browse_stubjobrow", "label": "_StubJobRow", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L310"}, {"id": "api_test_browse_stubjobrow_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L313"}, {"id": "api_test_browse_stubnassync", "label": "_StubNasSync", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L326"}, {"id": "api_test_browse_stubnassync_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L329"}, {"id": "api_test_browse_stubnassync_get_by_run_path", "label": ".get_by_run_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L332"}, {"id": "api_test_browse_test_get_run_log_returns_queue_derived_history", "label": "test_get_run_log_returns_queue_derived_history()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L338"}, {"id": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", "label": "test_get_run_log_forwards_failure_extras_in_payload()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L361"}, {"id": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", "label": "test_get_run_log_empty_history_when_no_queue_job()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L394"}, {"id": "api_test_browse_test_get_run_log_404_when_run_missing", "label": "test_get_run_log_404_when_run_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L412"}, {"id": "api_test_browse_test_build_hierarchy_dict_returns_empty_when_config_missing", "label": "test_build_hierarchy_dict_returns_empty_when_config_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L427"}, {"id": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", "label": "test_build_hierarchy_dict_includes_owned_and_relay_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L433"}, {"id": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", "label": "test_scan_folder_sync_lists_immediate_contents()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L468"}, {"id": "api_test_browse_test_scan_folder_sync_raises_404_for_missing_path", "label": "test_scan_folder_sync_raises_404_for_missing_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L487"}, {"id": "api_test_browse_seed_run_with_creation", "label": "_seed_run_with_creation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L508"}, {"id": "api_test_browse_write_sync_state", "label": "_write_sync_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L517"}, {"id": "api_test_browse_test_per_file_status_acquiring_when_not_in_sync_state", "label": "test_per_file_status_acquiring_when_not_in_sync_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L539"}, {"id": "api_test_browse_test_per_file_status_syncing_when_unverified", "label": "test_per_file_status_syncing_when_unverified()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L552"}, {"id": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", "label": "test_per_file_status_synced_when_verified_and_on_disk()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L566"}, {"id": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", "label": "test_per_file_status_on_nas_tombstone_for_cleared_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L583"}, {"id": "api_test_browse_test_per_file_status_keep_local_flag_carried", "label": "test_per_file_status_keep_local_flag_carried()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L606"}, {"id": "api_test_browse_test_build_run_node_rollup_from_sync_state", "label": "test_build_run_node_rollup_from_sync_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L630"}, {"id": "api_test_browse_test_build_run_node_rollup_cleared", "label": "test_build_run_node_rollup_cleared()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L646"}, {"id": "api_test_browse_rationale_1", "label": "Unit tests for the ``/tree`` and ``/run/{path}`` browse endpoints.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L1"}, {"id": "api_test_browse_rationale_117", "label": "When config has no equipment the setup gate blocks /tree.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L117"}, {"id": "api_test_browse_rationale_185", "label": "``TestRuns`` directory under a project surfaces as ``test_runs`` list.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L185"}, {"id": "api_test_browse_rationale_205", "label": "A creation.json that is present but malformed surfaces as 422.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L205"}, {"id": "api_test_browse_rationale_226", "label": "Run with creation.json but no README.md returns readme: null.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L226"}, {"id": "api_test_browse_rationale_289", "label": "Path-confinement guard: only the configured local_root / staging_root / temp", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L289"}, {"id": "api_test_browse_rationale_311", "label": "A minimal sync-queue job row for the run-log tests.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L311"}, {"id": "api_test_browse_rationale_327", "label": "Sync-queue stub serving ``get_by_run_path`` for the log endpoint.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L327"}, {"id": "api_test_browse_rationale_339", "label": "A staged run's sync-queue job state is surfaced as the log.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L339"}, {"id": "api_test_browse_rationale_362", "label": "A failed job row's ``last_error`` / ``attempts`` / ``verify_passes`` / ``nas", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L362"}, {"id": "api_test_browse_rationale_395", "label": "A run with no sync-queue job returns an empty history + 'none' state.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L395"}, {"id": "api_test_browse_rationale_413", "label": "A run directory that does not exist returns 404 ``session_not_found``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L413"}, {"id": "api_test_browse_rationale_434", "label": "The nested dict surfaces both owned and received-equipment roots with their", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L434"}, {"id": "api_test_browse_rationale_469", "label": "``scan_folder_sync`` shares the same shape as the route handler.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L469"}, {"id": "api_test_browse_rationale_488", "label": "A missing folder raises the same 404 HTTPException the route does.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L488"}, {"id": "api_test_browse_rationale_509", "label": "Create a run dir with a creation.json so it is recognised as a run.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L509"}, {"id": "api_test_browse_rationale_518", "label": "Write a sync_state.json with the given per-file records.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L518"}, {"id": "api_test_browse_rationale_540", "label": "A file on disk but absent from sync_state.json reads as ``acquiring``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L540"}, {"id": "api_test_browse_rationale_553", "label": "A recorded file with verified_at null + on disk reads as ``syncing``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L553"}, {"id": "api_test_browse_rationale_567", "label": "A recorded+verified file still on disk reads as ``synced``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L567"}, {"id": "api_test_browse_rationale_584", "label": "A cleared run lists verified-but-absent files as ``on_nas`` tombstones.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L584"}, {"id": "api_test_browse_rationale_607", "label": "A keep_local file carries the flag alongside its sync status.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L607"}, {"id": "api_test_browse_rationale_631", "label": "The tree run-node sync_status is the sync_state.json rollup, not creation.json.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L631"}, {"id": "api_test_browse_rationale_647", "label": "A cleared run rolls up to ``cleared`` in the tree.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L647"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "fastapi_testclient", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "exlab_wizard_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_config_with_local_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_write_creation_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L63", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_tree_lists_equipment_and_projects", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L85", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L116", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_run_returns_detail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L134", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_run_404_when_creation_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L153", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_tree_skips_unknown_dirs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L166", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_tree_includes_test_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L184", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L204", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_run_returns_none_readme_when_absent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L225", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_folder_returns_immediate_contents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L244", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_folder_404_on_vanished_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L265", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L276", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L288", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_stubjobrow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L310", "weight": 1.0}, {"source": "api_test_browse_stubjobrow", "target": "api_test_browse_stubjobrow_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L313", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_stubnassync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L326", "weight": 1.0}, {"source": "api_test_browse_stubnassync", "target": "api_test_browse_stubnassync_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L329", "weight": 1.0}, {"source": "api_test_browse_stubnassync", "target": "api_test_browse_stubnassync_get_by_run_path", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L332", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_run_log_returns_queue_derived_history", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L338", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L361", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L394", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_get_run_log_404_when_run_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L412", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_build_hierarchy_dict_returns_empty_when_config_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L427", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L433", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L468", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_scan_folder_sync_raises_404_for_missing_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L487", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_seed_run_with_creation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L508", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_write_sync_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L517", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_per_file_status_acquiring_when_not_in_sync_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L539", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_per_file_status_syncing_when_unverified", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L552", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L566", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L583", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_per_file_status_keep_local_flag_carried", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L606", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_build_run_node_rollup_from_sync_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L630", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "target": "api_test_browse_test_build_run_node_rollup_cleared", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L646", "weight": 1.0}, {"source": "api_test_browse_test_get_tree_lists_equipment_and_projects", "target": "api_test_browse_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L93", "weight": 1.0}, {"source": "api_test_browse_test_get_tree_lists_equipment_and_projects", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L96", "weight": 1.0}, {"source": "api_test_browse_test_get_run_returns_detail", "target": "api_test_browse_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L139", "weight": 1.0}, {"source": "api_test_browse_test_get_run_returns_detail", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L142", "weight": 1.0}, {"source": "api_test_browse_test_get_run_404_when_creation_missing", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L156", "weight": 1.0}, {"source": "api_test_browse_test_get_tree_skips_unknown_dirs", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L175", "weight": 1.0}, {"source": "api_test_browse_test_get_tree_includes_test_runs", "target": "api_test_browse_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L194", "weight": 1.0}, {"source": "api_test_browse_test_get_tree_includes_test_runs", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L195", "weight": 1.0}, {"source": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L216", "weight": 1.0}, {"source": "api_test_browse_test_get_run_returns_none_readme_when_absent", "target": "api_test_browse_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L230", "weight": 1.0}, {"source": "api_test_browse_test_get_run_returns_none_readme_when_absent", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L231", "weight": 1.0}, {"source": "api_test_browse_test_get_folder_returns_immediate_contents", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L251", "weight": 1.0}, {"source": "api_test_browse_test_get_folder_404_on_vanished_path", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L267", "weight": 1.0}, {"source": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L279", "weight": 1.0}, {"source": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L296", "weight": 1.0}, {"source": "api_test_browse_test_get_run_log_returns_queue_derived_history", "target": "api_test_browse_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L342", "weight": 1.0}, {"source": "api_test_browse_test_get_run_log_returns_queue_derived_history", "target": "api_test_browse_stubjobrow", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L342", "weight": 1.0}, {"source": "api_test_browse_test_get_run_log_returns_queue_derived_history", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L344", "weight": 1.0}, {"source": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", "target": "api_test_browse_stubjobrow", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L372", "weight": 1.0}, {"source": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L378", "weight": 1.0}, {"source": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", "target": "api_test_browse_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L380", "weight": 1.0}, {"source": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L399", "weight": 1.0}, {"source": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", "target": "api_test_browse_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L401", "weight": 1.0}, {"source": "api_test_browse_test_get_run_log_404_when_run_missing", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L414", "weight": 1.0}, {"source": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L453", "weight": 1.0}, {"source": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L477", "weight": 1.0}, {"source": "api_test_browse_test_scan_folder_sync_raises_404_for_missing_path", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L493", "weight": 1.0}, {"source": "api_test_browse_seed_run_with_creation", "target": "api_test_browse_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L513", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_acquiring_when_not_in_sync_state", "target": "api_test_browse_seed_run_with_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L544", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_acquiring_when_not_in_sync_state", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L546", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_syncing_when_unverified", "target": "api_test_browse_seed_run_with_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L557", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_syncing_when_unverified", "target": "api_test_browse_write_sync_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L559", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_syncing_when_unverified", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L560", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", "target": "api_test_browse_seed_run_with_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L571", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", "target": "api_test_browse_write_sync_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L573", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L577", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", "target": "api_test_browse_seed_run_with_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L588", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", "target": "api_test_browse_write_sync_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L590", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L595", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_keep_local_flag_carried", "target": "api_test_browse_seed_run_with_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L611", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_keep_local_flag_carried", "target": "api_test_browse_write_sync_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L613", "weight": 1.0}, {"source": "api_test_browse_test_per_file_status_keep_local_flag_carried", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L623", "weight": 1.0}, {"source": "api_test_browse_test_build_run_node_rollup_from_sync_state", "target": "api_test_browse_seed_run_with_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L633", "weight": 1.0}, {"source": "api_test_browse_test_build_run_node_rollup_from_sync_state", "target": "api_test_browse_write_sync_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L634", "weight": 1.0}, {"source": "api_test_browse_test_build_run_node_rollup_from_sync_state", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L638", "weight": 1.0}, {"source": "api_test_browse_test_build_run_node_rollup_cleared", "target": "api_test_browse_seed_run_with_creation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L649", "weight": 1.0}, {"source": "api_test_browse_test_build_run_node_rollup_cleared", "target": "api_test_browse_write_sync_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L650", "weight": 1.0}, {"source": "api_test_browse_test_build_run_node_rollup_cleared", "target": "api_test_browse_config_with_local_root", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L655", "weight": 1.0}, {"source": "api_test_browse_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_api_test_browse_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L1", "weight": 1.0}, {"source": "api_test_browse_rationale_117", "target": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L117", "weight": 1.0}, {"source": "api_test_browse_rationale_185", "target": "api_test_browse_test_get_tree_includes_test_runs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L185", "weight": 1.0}, {"source": "api_test_browse_rationale_205", "target": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L205", "weight": 1.0}, {"source": "api_test_browse_rationale_226", "target": "api_test_browse_test_get_run_returns_none_readme_when_absent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L226", "weight": 1.0}, {"source": "api_test_browse_rationale_289", "target": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L289", "weight": 1.0}, {"source": "api_test_browse_rationale_311", "target": "api_test_browse_stubjobrow", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L311", "weight": 1.0}, {"source": "api_test_browse_rationale_327", "target": "api_test_browse_stubnassync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L327", "weight": 1.0}, {"source": "api_test_browse_rationale_339", "target": "api_test_browse_test_get_run_log_returns_queue_derived_history", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L339", "weight": 1.0}, {"source": "api_test_browse_rationale_362", "target": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L362", "weight": 1.0}, {"source": "api_test_browse_rationale_395", "target": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L395", "weight": 1.0}, {"source": "api_test_browse_rationale_413", "target": "api_test_browse_test_get_run_log_404_when_run_missing", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L413", "weight": 1.0}, {"source": "api_test_browse_rationale_434", "target": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L434", "weight": 1.0}, {"source": "api_test_browse_rationale_469", "target": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L469", "weight": 1.0}, {"source": "api_test_browse_rationale_488", "target": "api_test_browse_test_scan_folder_sync_raises_404_for_missing_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L488", "weight": 1.0}, {"source": "api_test_browse_rationale_509", "target": "api_test_browse_seed_run_with_creation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L509", "weight": 1.0}, {"source": "api_test_browse_rationale_518", "target": "api_test_browse_write_sync_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L518", "weight": 1.0}, {"source": "api_test_browse_rationale_540", "target": "api_test_browse_test_per_file_status_acquiring_when_not_in_sync_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L540", "weight": 1.0}, {"source": "api_test_browse_rationale_553", "target": "api_test_browse_test_per_file_status_syncing_when_unverified", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L553", "weight": 1.0}, {"source": "api_test_browse_rationale_567", "target": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L567", "weight": 1.0}, {"source": "api_test_browse_rationale_584", "target": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L584", "weight": 1.0}, {"source": "api_test_browse_rationale_607", "target": "api_test_browse_test_per_file_status_keep_local_flag_carried", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L607", "weight": 1.0}, {"source": "api_test_browse_rationale_631", "target": "api_test_browse_test_build_run_node_rollup_from_sync_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L631", "weight": 1.0}, {"source": "api_test_browse_rationale_647", "target": "api_test_browse_test_build_run_node_rollup_cleared", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L647", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_test_browse_config_with_local_root", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L38"}, {"caller_nid": "api_test_browse_config_with_local_root", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L39"}, {"caller_nid": "api_test_browse_config_with_local_root", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L40"}, {"caller_nid": "api_test_browse_config_with_local_root", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L41"}, {"caller_nid": "api_test_browse_config_with_local_root", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L42"}, {"caller_nid": "api_test_browse_config_with_local_root", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L45"}, {"caller_nid": "api_test_browse_config_with_local_root", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L48"}, {"caller_nid": "api_test_browse_config_with_local_root", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L50"}, {"caller_nid": "api_test_browse_config_with_local_root", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L58"}, {"caller_nid": "api_test_browse_config_with_local_root", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L59"}, {"caller_nid": "api_test_browse_write_creation_json", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L65"}, {"caller_nid": "api_test_browse_write_creation_json", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L66"}, {"caller_nid": "api_test_browse_write_creation_json", "callee": "strftime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L68"}, {"caller_nid": "api_test_browse_write_creation_json", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L68"}, {"caller_nid": "api_test_browse_write_creation_json", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L72"}, {"caller_nid": "api_test_browse_write_creation_json", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L75"}, {"caller_nid": "api_test_browse_write_creation_json", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L79"}, {"caller_nid": "api_test_browse_write_creation_json", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L79"}, {"caller_nid": "api_test_browse_write_creation_json", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L82"}, {"caller_nid": "api_test_browse_write_creation_json", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L82"}, {"caller_nid": "api_test_browse_test_get_tree_lists_equipment_and_projects", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L87"}, {"caller_nid": "api_test_browse_test_get_tree_lists_equipment_and_projects", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L92"}, {"caller_nid": "api_test_browse_test_get_tree_lists_equipment_and_projects", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L96"}, {"caller_nid": "api_test_browse_test_get_tree_lists_equipment_and_projects", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L97"}, {"caller_nid": "api_test_browse_test_get_tree_lists_equipment_and_projects", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L98"}, {"caller_nid": "api_test_browse_test_get_tree_lists_equipment_and_projects", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L99"}, {"caller_nid": "api_test_browse_test_get_tree_lists_equipment_and_projects", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L101"}, {"caller_nid": "api_test_browse_test_get_tree_lists_equipment_and_projects", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L102"}, {"caller_nid": "api_test_browse_test_get_tree_lists_equipment_and_projects", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L105"}, {"caller_nid": "api_test_browse_test_get_tree_lists_equipment_and_projects", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L108"}, {"caller_nid": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L119"}, {"caller_nid": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L120"}, {"caller_nid": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L121"}, {"caller_nid": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L121"}, {"caller_nid": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L122"}, {"caller_nid": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L124"}, {"caller_nid": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L125"}, {"caller_nid": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L126"}, {"caller_nid": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L127"}, {"caller_nid": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L129"}, {"caller_nid": "api_test_browse_test_get_run_returns_detail", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L136"}, {"caller_nid": "api_test_browse_test_get_run_returns_detail", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L138"}, {"caller_nid": "api_test_browse_test_get_run_returns_detail", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L140"}, {"caller_nid": "api_test_browse_test_get_run_returns_detail", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L142"}, {"caller_nid": "api_test_browse_test_get_run_returns_detail", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L143"}, {"caller_nid": "api_test_browse_test_get_run_returns_detail", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L144"}, {"caller_nid": "api_test_browse_test_get_run_returns_detail", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L145"}, {"caller_nid": "api_test_browse_test_get_run_returns_detail", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L147"}, {"caller_nid": "api_test_browse_test_get_run_404_when_creation_missing", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L155"}, {"caller_nid": "api_test_browse_test_get_run_404_when_creation_missing", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L156"}, {"caller_nid": "api_test_browse_test_get_run_404_when_creation_missing", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L157"}, {"caller_nid": "api_test_browse_test_get_run_404_when_creation_missing", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L158"}, {"caller_nid": "api_test_browse_test_get_run_404_when_creation_missing", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L160"}, {"caller_nid": "api_test_browse_test_get_run_404_when_creation_missing", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L162"}, {"caller_nid": "api_test_browse_test_get_tree_skips_unknown_dirs", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L169"}, {"caller_nid": "api_test_browse_test_get_tree_skips_unknown_dirs", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L171"}, {"caller_nid": "api_test_browse_test_get_tree_skips_unknown_dirs", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L174"}, {"caller_nid": "api_test_browse_test_get_tree_skips_unknown_dirs", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L175"}, {"caller_nid": "api_test_browse_test_get_tree_skips_unknown_dirs", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L176"}, {"caller_nid": "api_test_browse_test_get_tree_skips_unknown_dirs", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L177"}, {"caller_nid": "api_test_browse_test_get_tree_skips_unknown_dirs", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L178"}, {"caller_nid": "api_test_browse_test_get_tree_skips_unknown_dirs", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L178"}, {"caller_nid": "api_test_browse_test_get_tree_includes_test_runs", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L193"}, {"caller_nid": "api_test_browse_test_get_tree_includes_test_runs", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L195"}, {"caller_nid": "api_test_browse_test_get_tree_includes_test_runs", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L196"}, {"caller_nid": "api_test_browse_test_get_tree_includes_test_runs", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L197"}, {"caller_nid": "api_test_browse_test_get_tree_includes_test_runs", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L198"}, {"caller_nid": "api_test_browse_test_get_tree_includes_test_runs", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L198"}, {"caller_nid": "api_test_browse_test_get_tree_includes_test_runs", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L200"}, {"caller_nid": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L208"}, {"caller_nid": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L210"}, {"caller_nid": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L214"}, {"caller_nid": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L215"}, {"caller_nid": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L216"}, {"caller_nid": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L217"}, {"caller_nid": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L218"}, {"caller_nid": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L219"}, {"caller_nid": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L221"}, {"caller_nid": "api_test_browse_test_get_run_returns_none_readme_when_absent", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L229"}, {"caller_nid": "api_test_browse_test_get_run_returns_none_readme_when_absent", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L231"}, {"caller_nid": "api_test_browse_test_get_run_returns_none_readme_when_absent", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L232"}, {"caller_nid": "api_test_browse_test_get_run_returns_none_readme_when_absent", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L233"}, {"caller_nid": "api_test_browse_test_get_run_returns_none_readme_when_absent", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L234"}, {"caller_nid": "api_test_browse_test_get_run_returns_none_readme_when_absent", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L236"}, {"caller_nid": "api_test_browse_test_get_folder_returns_immediate_contents", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L247"}, {"caller_nid": "api_test_browse_test_get_folder_returns_immediate_contents", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L248"}, {"caller_nid": "api_test_browse_test_get_folder_returns_immediate_contents", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L249"}, {"caller_nid": "api_test_browse_test_get_folder_returns_immediate_contents", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L250"}, {"caller_nid": "api_test_browse_test_get_folder_returns_immediate_contents", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L251"}, {"caller_nid": "api_test_browse_test_get_folder_returns_immediate_contents", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L252"}, {"caller_nid": "api_test_browse_test_get_folder_returns_immediate_contents", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L253"}, {"caller_nid": "api_test_browse_test_get_folder_returns_immediate_contents", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L254"}, {"caller_nid": "api_test_browse_test_get_folder_returns_immediate_contents", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L256"}, {"caller_nid": "api_test_browse_test_get_folder_returns_immediate_contents", "callee": "next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L259"}, {"caller_nid": "api_test_browse_test_get_folder_returns_immediate_contents", "callee": "next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L261"}, {"caller_nid": "api_test_browse_test_get_folder_404_on_vanished_path", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L266"}, {"caller_nid": "api_test_browse_test_get_folder_404_on_vanished_path", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L269"}, {"caller_nid": "api_test_browse_test_get_folder_404_on_vanished_path", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L270"}, {"caller_nid": "api_test_browse_test_get_folder_404_on_vanished_path", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L271"}, {"caller_nid": "api_test_browse_test_get_folder_404_on_vanished_path", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L273"}, {"caller_nid": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L278"}, {"caller_nid": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L279"}, {"caller_nid": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L280"}, {"caller_nid": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L281"}, {"caller_nid": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L282"}, {"caller_nid": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L282"}, {"caller_nid": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L292"}, {"caller_nid": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L294"}, {"caller_nid": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L295"}, {"caller_nid": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L296"}, {"caller_nid": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L297"}, {"caller_nid": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L298"}, {"caller_nid": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L299"}, {"caller_nid": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L301"}, {"caller_nid": "api_test_browse_stubjobrow_init", "callee": "SyncJobState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L317"}, {"caller_nid": "api_test_browse_stubnassync_get_by_run_path", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L333"}, {"caller_nid": "api_test_browse_test_get_run_log_returns_queue_derived_history", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L341"}, {"caller_nid": "api_test_browse_test_get_run_log_returns_queue_derived_history", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L342"}, {"caller_nid": "api_test_browse_test_get_run_log_returns_queue_derived_history", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L343"}, {"caller_nid": "api_test_browse_test_get_run_log_returns_queue_derived_history", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L348"}, {"caller_nid": "api_test_browse_test_get_run_log_returns_queue_derived_history", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L349"}, {"caller_nid": "api_test_browse_test_get_run_log_returns_queue_derived_history", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L350"}, {"caller_nid": "api_test_browse_test_get_run_log_returns_queue_derived_history", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L352"}, {"caller_nid": "api_test_browse_test_get_run_log_returns_queue_derived_history", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L353"}, {"caller_nid": "api_test_browse_test_get_run_log_returns_queue_derived_history", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L355"}, {"caller_nid": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L371"}, {"caller_nid": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L372"}, {"caller_nid": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L377"}, {"caller_nid": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L382"}, {"caller_nid": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L383"}, {"caller_nid": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L384"}, {"caller_nid": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L386"}, {"caller_nid": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L397"}, {"caller_nid": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L398"}, {"caller_nid": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L403"}, {"caller_nid": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L404"}, {"caller_nid": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L405"}, {"caller_nid": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L407"}, {"caller_nid": "api_test_browse_test_get_run_log_404_when_run_missing", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L414"}, {"caller_nid": "api_test_browse_test_get_run_log_404_when_run_missing", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L415"}, {"caller_nid": "api_test_browse_test_get_run_log_404_when_run_missing", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L416"}, {"caller_nid": "api_test_browse_test_get_run_log_404_when_run_missing", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L417"}, {"caller_nid": "api_test_browse_test_get_run_log_404_when_run_missing", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L419"}, {"caller_nid": "api_test_browse_test_build_hierarchy_dict_returns_empty_when_config_missing", "callee": "build_hierarchy_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L430"}, {"caller_nid": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L441"}, {"caller_nid": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L443"}, {"caller_nid": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L451"}, {"caller_nid": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L456"}, {"caller_nid": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", "callee": "build_hierarchy_dict", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L458"}, {"caller_nid": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L465"}, {"caller_nid": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L474"}, {"caller_nid": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L475"}, {"caller_nid": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L476"}, {"caller_nid": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", "callee": "scan_folder_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L478"}, {"caller_nid": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L478"}, {"caller_nid": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L484"}, {"caller_nid": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L484"}, {"caller_nid": "api_test_browse_test_scan_folder_sync_raises_404_for_missing_path", "callee": "scan_folder_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L495"}, {"caller_nid": "api_test_browse_test_scan_folder_sync_raises_404_for_missing_path", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L495"}, {"caller_nid": "api_test_browse_test_scan_folder_sync_raises_404_for_missing_path", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L499"}, {"caller_nid": "api_test_browse_seed_run_with_creation", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L512"}, {"caller_nid": "api_test_browse_write_sync_state", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L523"}, {"caller_nid": "api_test_browse_write_sync_state", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L524"}, {"caller_nid": "api_test_browse_write_sync_state", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L525"}, {"caller_nid": "api_test_browse_write_sync_state", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L526"}, {"caller_nid": "api_test_browse_write_sync_state", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L529"}, {"caller_nid": "api_test_browse_write_sync_state", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L530"}, {"caller_nid": "api_test_browse_write_sync_state", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L533"}, {"caller_nid": "api_test_browse_write_sync_state", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L534"}, {"caller_nid": "api_test_browse_write_sync_state", "callee": "set_keep_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L534"}, {"caller_nid": "api_test_browse_write_sync_state", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L536"}, {"caller_nid": "api_test_browse_write_sync_state", "callee": "mark_cleared", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L536"}, {"caller_nid": "api_test_browse_test_per_file_status_acquiring_when_not_in_sync_state", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L545"}, {"caller_nid": "api_test_browse_test_per_file_status_acquiring_when_not_in_sync_state", "callee": "scan_folder_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L547"}, {"caller_nid": "api_test_browse_test_per_file_status_acquiring_when_not_in_sync_state", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L547"}, {"caller_nid": "api_test_browse_test_per_file_status_syncing_when_unverified", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L558"}, {"caller_nid": "api_test_browse_test_per_file_status_syncing_when_unverified", "callee": "scan_folder_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L561"}, {"caller_nid": "api_test_browse_test_per_file_status_syncing_when_unverified", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L561"}, {"caller_nid": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L572"}, {"caller_nid": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", "callee": "scan_folder_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L578"}, {"caller_nid": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L578"}, {"caller_nid": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", "callee": "scan_folder_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L596"}, {"caller_nid": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L596"}, {"caller_nid": "api_test_browse_test_per_file_status_keep_local_flag_carried", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L612"}, {"caller_nid": "api_test_browse_test_per_file_status_keep_local_flag_carried", "callee": "scan_folder_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L624"}, {"caller_nid": "api_test_browse_test_per_file_status_keep_local_flag_carried", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L624"}, {"caller_nid": "api_test_browse_test_build_run_node_rollup_from_sync_state", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L638"}, {"caller_nid": "api_test_browse_test_build_run_node_rollup_from_sync_state", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L639"}, {"caller_nid": "api_test_browse_test_build_run_node_rollup_from_sync_state", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L640"}, {"caller_nid": "api_test_browse_test_build_run_node_rollup_from_sync_state", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L641"}, {"caller_nid": "api_test_browse_test_build_run_node_rollup_from_sync_state", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L641"}, {"caller_nid": "api_test_browse_test_build_run_node_rollup_cleared", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L655"}, {"caller_nid": "api_test_browse_test_build_run_node_rollup_cleared", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L656"}, {"caller_nid": "api_test_browse_test_build_run_node_rollup_cleared", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L657"}, {"caller_nid": "api_test_browse_test_build_run_node_rollup_cleared", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L658"}, {"caller_nid": "api_test_browse_test_build_run_node_rollup_cleared", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py", "source_location": "L658"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e28bf930b902a735875d0405e0492b292f7e20e91d23f10b2658b580044bc53e.json b/graphify-out/cache/ast/e28bf930b902a735875d0405e0492b292f7e20e91d23f10b2658b580044bc53e.json new file mode 100644 index 0000000..f64ee03 --- /dev/null +++ b/graphify-out/cache/ast/e28bf930b902a735875d0405e0492b292f7e20e91d23f10b2658b580044bc53e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "label": "wizard_project_page.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L1"}, {"id": "page_objects_wizard_project_page_wizardprojectpage", "label": "WizardProjectPage", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L11"}, {"id": "page_objects_wizard_project_page_wizardprojectpage_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L14"}, {"id": "page_objects_wizard_project_page_card", "label": "card()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L18"}, {"id": "page_objects_wizard_project_page_stepper", "label": "stepper()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L23"}, {"id": "page_objects_wizard_project_page_wizardprojectpage_step", "label": ".step()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L27"}, {"id": "page_objects_wizard_project_page_lims_gate", "label": "lims_gate()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L32"}, {"id": "page_objects_wizard_project_page_lims_id", "label": "lims_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L41"}, {"id": "page_objects_wizard_project_page_back", "label": "back()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L46"}, {"id": "page_objects_wizard_project_page_cancel", "label": "cancel()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L54"}, {"id": "page_objects_wizard_project_page_next", "label": "next()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L59"}, {"id": "page_objects_wizard_project_page_submit", "label": "submit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L64"}, {"id": "page_objects_wizard_project_page_success_card", "label": "success_card()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L69"}, {"id": "page_objects_wizard_project_page_rationale_1", "label": "Page object for the New Project Wizard. Frontend Spec \u00a76.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L1"}, {"id": "page_objects_wizard_project_page_rationale_12", "label": "Locators for the new-project wizard's seven-step stepper.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L12"}, {"id": "page_objects_wizard_project_page_rationale_19", "label": "The wizard's outermost card element.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L19"}, {"id": "page_objects_wizard_project_page_rationale_24", "label": "The vertical stepper that holds the seven steps.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L24"}, {"id": "page_objects_wizard_project_page_rationale_28", "label": "Locator for a specific step container.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L28"}, {"id": "page_objects_wizard_project_page_rationale_33", "label": "The manual-entry gate button on the LIMS Project step. Rendered only wh", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L33"}, {"id": "page_objects_wizard_project_page_rationale_42", "label": "The manual LIMS short-ID input (revealed by ``lims_gate``).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L42"}, {"id": "page_objects_wizard_project_page_rationale_47", "label": "The back button on the active stepper navigation. Absent on the first s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L47"}, {"id": "page_objects_wizard_project_page_rationale_55", "label": "The cancel button; present on every step, returns to /main.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L55"}, {"id": "page_objects_wizard_project_page_rationale_60", "label": "The primary advance button on the active stepper navigation.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L60"}, {"id": "page_objects_wizard_project_page_rationale_65", "label": "The Create button on the confirm step.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L65"}, {"id": "page_objects_wizard_project_page_rationale_70", "label": "The success indicator rendered after submit.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L70"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "target": "playwright_sync_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "target": "page_objects_wizard_project_page_wizardprojectpage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L11", "weight": 1.0}, {"source": "page_objects_wizard_project_page_wizardprojectpage", "target": "page_objects_wizard_project_page_wizardprojectpage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "target": "page_objects_wizard_project_page_card", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "target": "page_objects_wizard_project_page_stepper", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L23", "weight": 1.0}, {"source": "page_objects_wizard_project_page_wizardprojectpage", "target": "page_objects_wizard_project_page_wizardprojectpage_step", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "target": "page_objects_wizard_project_page_lims_gate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "target": "page_objects_wizard_project_page_lims_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "target": "page_objects_wizard_project_page_back", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "target": "page_objects_wizard_project_page_cancel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L54", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "target": "page_objects_wizard_project_page_next", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "target": "page_objects_wizard_project_page_submit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L64", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "target": "page_objects_wizard_project_page_success_card", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L69", "weight": 1.0}, {"source": "page_objects_wizard_project_page_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_page_objects_wizard_project_page_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L1", "weight": 1.0}, {"source": "page_objects_wizard_project_page_rationale_12", "target": "page_objects_wizard_project_page_wizardprojectpage", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L12", "weight": 1.0}, {"source": "page_objects_wizard_project_page_rationale_19", "target": "page_objects_wizard_project_page_wizardprojectpage_card", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L19", "weight": 1.0}, {"source": "page_objects_wizard_project_page_rationale_24", "target": "page_objects_wizard_project_page_wizardprojectpage_stepper", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L24", "weight": 1.0}, {"source": "page_objects_wizard_project_page_rationale_28", "target": "page_objects_wizard_project_page_wizardprojectpage_step", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L28", "weight": 1.0}, {"source": "page_objects_wizard_project_page_rationale_33", "target": "page_objects_wizard_project_page_wizardprojectpage_lims_gate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L33", "weight": 1.0}, {"source": "page_objects_wizard_project_page_rationale_42", "target": "page_objects_wizard_project_page_wizardprojectpage_lims_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L42", "weight": 1.0}, {"source": "page_objects_wizard_project_page_rationale_47", "target": "page_objects_wizard_project_page_wizardprojectpage_back", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L47", "weight": 1.0}, {"source": "page_objects_wizard_project_page_rationale_55", "target": "page_objects_wizard_project_page_wizardprojectpage_cancel", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L55", "weight": 1.0}, {"source": "page_objects_wizard_project_page_rationale_60", "target": "page_objects_wizard_project_page_wizardprojectpage_next", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L60", "weight": 1.0}, {"source": "page_objects_wizard_project_page_rationale_65", "target": "page_objects_wizard_project_page_wizardprojectpage_submit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L65", "weight": 1.0}, {"source": "page_objects_wizard_project_page_rationale_70", "target": "page_objects_wizard_project_page_wizardprojectpage_success_card", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L70", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_objects_wizard_project_page_card", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L20"}, {"caller_nid": "page_objects_wizard_project_page_stepper", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L25"}, {"caller_nid": "page_objects_wizard_project_page_wizardprojectpage_step", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L29"}, {"caller_nid": "page_objects_wizard_project_page_lims_gate", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L38"}, {"caller_nid": "page_objects_wizard_project_page_lims_id", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L43"}, {"caller_nid": "page_objects_wizard_project_page_back", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L51"}, {"caller_nid": "page_objects_wizard_project_page_cancel", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L56"}, {"caller_nid": "page_objects_wizard_project_page_next", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L61"}, {"caller_nid": "page_objects_wizard_project_page_submit", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L66"}, {"caller_nid": "page_objects_wizard_project_page_success_card", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py", "source_location": "L71"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e2b9a6f7e076fc1a99e9ad0530e9441b9b86196521d7017a735fea5b57beb08e.json b/graphify-out/cache/ast/e2b9a6f7e076fc1a99e9ad0530e9441b9b86196521d7017a735fea5b57beb08e.json new file mode 100644 index 0000000..2afa1d0 --- /dev/null +++ b/graphify-out/cache/ast/e2b9a6f7e076fc1a99e9ad0530e9441b9b86196521d7017a735fea5b57beb08e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "label": "host.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L1"}, {"id": "plugins_host_pluginrecord", "label": "PluginRecord", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L86"}, {"id": "plugins_host_pluginregistryprotocol", "label": "PluginRegistryProtocol", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L116"}, {"id": "protocol", "label": "Protocol", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "plugins_host_pluginregistryprotocol_get_record", "label": ".get_record()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L126"}, {"id": "plugins_host_inputrequiredpayload", "label": "InputRequiredPayload", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L135"}, {"id": "plugins_host_pluginpassresult", "label": "PluginPassResult", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L150"}, {"id": "plugins_host_apply_rlimits", "label": "_apply_rlimits()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L168"}, {"id": "plugins_host_sanitized_env", "label": "_sanitized_env()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L214"}, {"id": "plugins_host_snapshot_tree", "label": "_snapshot_tree()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L240"}, {"id": "plugins_host_is_forbidden_write", "label": "_is_forbidden_write()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L280"}, {"id": "plugins_host_diff_and_collect_violations", "label": "_diff_and_collect_violations()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L285"}, {"id": "plugins_host_read_silently", "label": "_read_silently()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L338"}, {"id": "plugins_host_revert_to_snapshot", "label": "_revert_to_snapshot()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L346"}, {"id": "plugins_host_drain_stderr", "label": "_drain_stderr()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L397"}, {"id": "plugins_host_emit_forwarded_log", "label": "_emit_forwarded_log()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L447"}, {"id": "plugins_host_resolve_run_id", "label": "_resolve_run_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L472"}, {"id": "plugins_host_pluginhost", "label": "PluginHost", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L487"}, {"id": "plugins_host_pluginhost_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L493"}, {"id": "plugins_host_pluginhost_run_pass", "label": ".run_pass()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L502"}, {"id": "plugins_host_pluginhost_run_one", "label": "._run_one()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L548"}, {"id": "plugins_host_pluginhost_spawn_worker", "label": "._spawn_worker()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L629"}, {"id": "plugins_host_pluginhost_terminate", "label": "._terminate()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L766"}, {"id": "plugins_host_pluginhost_stderr_path_for", "label": "._stderr_path_for()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L783"}, {"id": "plugins_host_spawnoutcome", "label": "_SpawnOutcome", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L797"}, {"id": "plugins_host_failure", "label": "failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L807"}, {"id": "plugins_host_read_stdout_envelope", "label": "_read_stdout_envelope()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L817"}, {"id": "plugins_host_build_applied_entry", "label": "_build_applied_entry()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L838"}, {"id": "plugins_host_exit_code_to_status", "label": "_exit_code_to_status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L876"}, {"id": "plugins_host_listbackedregistry", "label": "_ListBackedRegistry", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L900"}, {"id": "plugins_host_listbackedregistry_get_record", "label": ".get_record()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L911"}, {"id": "plugins_host_build_test_registry", "label": "build_test_registry()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L918"}, {"id": "plugins_host_applied_entry_as_json", "label": "applied_entry_as_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L925"}, {"id": "plugins_host_rationale_1", "label": "Plugin host: spawns plugin worker subprocesses with strict isolation. Backend S", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L1"}, {"id": "plugins_host_rationale_87", "label": "One resolved plugin, ready to be spawned. Backend Spec \u00a76.2.1. Attributes:", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L87"}, {"id": "plugins_host_rationale_117", "label": "Read-only registry surface the host depends on. Backend Spec \u00a76.2. The conc", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L117"}, {"id": "plugins_host_rationale_136", "label": "Frame surfaced to the controller when a plugin needs more input. Backend Sp", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L136"}, {"id": "plugins_host_rationale_151", "label": "Aggregate result returned by :meth:`PluginHost.run_pass`. Backend Spec \u00a76.2", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L151"}, {"id": "plugins_host_rationale_169", "label": "``preexec_fn`` for the worker subprocess: install POSIX rlimits. Backend Sp", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L169"}, {"id": "plugins_host_rationale_215", "label": "Return the worker's ``env`` mapping (Backend Spec \u00a76.3.1).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L215"}, {"id": "plugins_host_rationale_241", "label": "Capture a small fingerprint per file in ``root``. The returned mapping is k", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L241"}, {"id": "plugins_host_rationale_281", "label": "Return ``True`` when ``rel_path`` is in the \u00a76.1.5 forbidden set.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L281"}, {"id": "plugins_host_rationale_289", "label": "Return ``(violations, modified_files)``. ``violations`` lists relative path", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L289"}, {"id": "plugins_host_rationale_339", "label": "Return the file's bytes or ``None`` on read failure.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L339"}, {"id": "plugins_host_rationale_350", "label": "Best-effort revert of every change after a forbidden-write plugin. Removes", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L350"}, {"id": "plugins_host_rationale_403", "label": "Read the worker's stderr line-by-line. JSON-shaped lines are forwarded into", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L403"}, {"id": "plugins_host_rationale_453", "label": "Forward a worker log frame into the canonical logger chain.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L453"}, {"id": "plugins_host_rationale_473", "label": "Return a filesystem-safe run identifier for stderr capture paths.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L473"}, {"id": "plugins_host_rationale_488", "label": "Spawns plugin worker subprocesses with strict isolation. Backend Spec \u00a76.3", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L488"}, {"id": "plugins_host_rationale_509", "label": "Drive the plugin pass for a single creation session. Spawns one worker", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L509"}, {"id": "plugins_host_rationale_555", "label": "Run a single plugin worker, including resume on input-required. Returns", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L555"}, {"id": "plugins_host_rationale_637", "label": "Spawn one worker subprocess and supervise it to completion. Returns a :", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L637"}, {"id": "plugins_host_rationale_767", "label": "SIGTERM, wait the grace period, SIGKILL. Backend Spec \u00a76.3.4.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L767"}, {"id": "plugins_host_rationale_784", "label": "Return the path the worker's stderr should be captured to.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L784"}, {"id": "plugins_host_rationale_798", "label": "Result of supervising a single worker invocation.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L798"}, {"id": "plugins_host_rationale_818", "label": "Read and JSON-decode the worker's stdout envelope.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L818"}, {"id": "plugins_host_rationale_847", "label": "Shape one ``plugins_applied[]`` entry for ``creation.json``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L847"}, {"id": "plugins_host_rationale_877", "label": "Map a worker exit code to one of the \u00a76.2.4 status values.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L877"}, {"id": "plugins_host_rationale_901", "label": "Minimal :class:`PluginRegistryProtocol` implementation used for tests. Test", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L901"}, {"id": "plugins_host_rationale_919", "label": "Return a tiny in-memory registry over ``records``. Tests only.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L919"}, {"id": "plugins_host_rationale_926", "label": "Return ``entry`` as a JSON-friendly dict (deep-copied).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L926"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "re", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "resource", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "signal", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "time", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "exlab_wizard_constants_enums", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "exlab_wizard_plugins_base", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_pluginrecord", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L86", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_pluginregistryprotocol", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L116", "weight": 1.0}, {"source": "plugins_host_pluginregistryprotocol", "target": "protocol", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L116", "weight": 1.0}, {"source": "plugins_host_pluginregistryprotocol", "target": "plugins_host_pluginregistryprotocol_get_record", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L126", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_inputrequiredpayload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_pluginpassresult", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L150", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_apply_rlimits", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L168", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_sanitized_env", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L214", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_snapshot_tree", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L240", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_is_forbidden_write", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L280", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_diff_and_collect_violations", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L285", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_read_silently", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L338", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_revert_to_snapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L346", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_drain_stderr", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L397", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_emit_forwarded_log", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L447", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_resolve_run_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L472", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_pluginhost", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L487", "weight": 1.0}, {"source": "plugins_host_pluginhost", "target": "plugins_host_pluginhost_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L493", "weight": 1.0}, {"source": "plugins_host_pluginhost", "target": "plugins_host_pluginhost_run_pass", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L502", "weight": 1.0}, {"source": "plugins_host_pluginhost", "target": "plugins_host_pluginhost_run_one", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L548", "weight": 1.0}, {"source": "plugins_host_pluginhost", "target": "plugins_host_pluginhost_spawn_worker", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L629", "weight": 1.0}, {"source": "plugins_host_pluginhost", "target": "plugins_host_pluginhost_terminate", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L766", "weight": 1.0}, {"source": "plugins_host_pluginhost", "target": "plugins_host_pluginhost_stderr_path_for", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L783", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_spawnoutcome", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L797", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L807", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_read_stdout_envelope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L817", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_build_applied_entry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L838", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_exit_code_to_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L876", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_listbackedregistry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L900", "weight": 1.0}, {"source": "plugins_host_listbackedregistry", "target": "plugins_host_listbackedregistry_get_record", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L911", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_build_test_registry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L918", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "target": "plugins_host_applied_entry_as_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L925", "weight": 1.0}, {"source": "plugins_host_diff_and_collect_violations", "target": "plugins_host_read_silently", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L319", "weight": 1.0}, {"source": "plugins_host_diff_and_collect_violations", "target": "plugins_host_is_forbidden_write", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L324", "weight": 1.0}, {"source": "plugins_host_drain_stderr", "target": "plugins_host_emit_forwarded_log", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L440", "weight": 1.0}, {"source": "plugins_host_pluginhost_run_pass", "target": "plugins_host_pluginpassresult", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L518", "weight": 1.0}, {"source": "plugins_host_pluginhost_run_pass", "target": "plugins_host_listbackedregistry_get_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L521", "weight": 1.0}, {"source": "plugins_host_pluginhost_run_pass", "target": "plugins_host_pluginhost_run_one", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L529", "weight": 1.0}, {"source": "plugins_host_pluginhost_run_one", "target": "plugins_host_snapshot_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L568", "weight": 1.0}, {"source": "plugins_host_pluginhost_run_one", "target": "plugins_host_pluginhost_spawn_worker", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L575", "weight": 1.0}, {"source": "plugins_host_pluginhost_run_one", "target": "plugins_host_inputrequiredpayload", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L584", "weight": 1.0}, {"source": "plugins_host_pluginhost_run_one", "target": "plugins_host_build_applied_entry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L593", "weight": 1.0}, {"source": "plugins_host_pluginhost_run_one", "target": "plugins_host_diff_and_collect_violations", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L606", "weight": 1.0}, {"source": "plugins_host_pluginhost_run_one", "target": "plugins_host_revert_to_snapshot", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L609", "weight": 1.0}, {"source": "plugins_host_pluginhost_spawn_worker", "target": "plugins_host_failure", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L662", "weight": 1.0}, {"source": "plugins_host_pluginhost_spawn_worker", "target": "plugins_host_sanitized_env", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L671", "weight": 1.0}, {"source": "plugins_host_pluginhost_spawn_worker", "target": "plugins_host_pluginhost_stderr_path_for", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L685", "weight": 1.0}, {"source": "plugins_host_pluginhost_spawn_worker", "target": "plugins_host_drain_stderr", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L721", "weight": 1.0}, {"source": "plugins_host_pluginhost_spawn_worker", "target": "plugins_host_read_stdout_envelope", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L723", "weight": 1.0}, {"source": "plugins_host_pluginhost_spawn_worker", "target": "plugins_host_pluginhost_terminate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L730", "weight": 1.0}, {"source": "plugins_host_pluginhost_spawn_worker", "target": "plugins_host_spawnoutcome", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L740", "weight": 1.0}, {"source": "plugins_host_pluginhost_stderr_path_for", "target": "plugins_host_resolve_run_id", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L787", "weight": 1.0}, {"source": "plugins_host_build_applied_entry", "target": "plugins_host_exit_code_to_status", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L852", "weight": 1.0}, {"source": "plugins_host_build_test_registry", "target": "plugins_host_listbackedregistry", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L920", "weight": 1.0}, {"source": "plugins_host_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_host_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L1", "weight": 1.0}, {"source": "plugins_host_rationale_87", "target": "plugins_host_pluginrecord", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L87", "weight": 1.0}, {"source": "plugins_host_rationale_117", "target": "plugins_host_pluginregistryprotocol", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L117", "weight": 1.0}, {"source": "plugins_host_rationale_136", "target": "plugins_host_inputrequiredpayload", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L136", "weight": 1.0}, {"source": "plugins_host_rationale_151", "target": "plugins_host_pluginpassresult", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L151", "weight": 1.0}, {"source": "plugins_host_rationale_169", "target": "plugins_host_apply_rlimits", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L169", "weight": 1.0}, {"source": "plugins_host_rationale_215", "target": "plugins_host_sanitized_env", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L215", "weight": 1.0}, {"source": "plugins_host_rationale_241", "target": "plugins_host_snapshot_tree", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L241", "weight": 1.0}, {"source": "plugins_host_rationale_281", "target": "plugins_host_is_forbidden_write", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L281", "weight": 1.0}, {"source": "plugins_host_rationale_289", "target": "plugins_host_diff_and_collect_violations", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L289", "weight": 1.0}, {"source": "plugins_host_rationale_339", "target": "plugins_host_read_silently", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L339", "weight": 1.0}, {"source": "plugins_host_rationale_350", "target": "plugins_host_revert_to_snapshot", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L350", "weight": 1.0}, {"source": "plugins_host_rationale_403", "target": "plugins_host_drain_stderr", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L403", "weight": 1.0}, {"source": "plugins_host_rationale_453", "target": "plugins_host_emit_forwarded_log", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L453", "weight": 1.0}, {"source": "plugins_host_rationale_473", "target": "plugins_host_resolve_run_id", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L473", "weight": 1.0}, {"source": "plugins_host_rationale_488", "target": "plugins_host_pluginhost", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L488", "weight": 1.0}, {"source": "plugins_host_rationale_509", "target": "plugins_host_pluginhost_run_pass", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L509", "weight": 1.0}, {"source": "plugins_host_rationale_555", "target": "plugins_host_pluginhost_run_one", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L555", "weight": 1.0}, {"source": "plugins_host_rationale_637", "target": "plugins_host_pluginhost_spawn_worker", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L637", "weight": 1.0}, {"source": "plugins_host_rationale_767", "target": "plugins_host_pluginhost_terminate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L767", "weight": 1.0}, {"source": "plugins_host_rationale_784", "target": "plugins_host_pluginhost_stderr_path_for", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L784", "weight": 1.0}, {"source": "plugins_host_rationale_798", "target": "plugins_host_spawnoutcome", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L798", "weight": 1.0}, {"source": "plugins_host_rationale_818", "target": "plugins_host_read_stdout_envelope", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L818", "weight": 1.0}, {"source": "plugins_host_rationale_847", "target": "plugins_host_build_applied_entry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L847", "weight": 1.0}, {"source": "plugins_host_rationale_877", "target": "plugins_host_exit_code_to_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L877", "weight": 1.0}, {"source": "plugins_host_rationale_901", "target": "plugins_host_listbackedregistry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L901", "weight": 1.0}, {"source": "plugins_host_rationale_919", "target": "plugins_host_build_test_registry", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L919", "weight": 1.0}, {"source": "plugins_host_rationale_926", "target": "plugins_host_applied_entry_as_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L926", "weight": 1.0}], "raw_calls": [{"caller_nid": "plugins_host_apply_rlimits", "callee": "max", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L183"}, {"caller_nid": "plugins_host_apply_rlimits", "callee": "max", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L184"}, {"caller_nid": "plugins_host_apply_rlimits", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L185"}, {"caller_nid": "plugins_host_apply_rlimits", "callee": "setrlimit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L186"}, {"caller_nid": "plugins_host_apply_rlimits", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L187"}, {"caller_nid": "plugins_host_apply_rlimits", "callee": "setrlimit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L188"}, {"caller_nid": "plugins_host_apply_rlimits", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L189"}, {"caller_nid": "plugins_host_apply_rlimits", "callee": "setrlimit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L190"}, {"caller_nid": "plugins_host_sanitized_env", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L218"}, {"caller_nid": "plugins_host_sanitized_env", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L221"}, {"caller_nid": "plugins_host_sanitized_env", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L222"}, {"caller_nid": "plugins_host_sanitized_env", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L225"}, {"caller_nid": "plugins_host_sanitized_env", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L228"}, {"caller_nid": "plugins_host_snapshot_tree", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L255"}, {"caller_nid": "plugins_host_snapshot_tree", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L255"}, {"caller_nid": "plugins_host_snapshot_tree", "callee": "rglob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L257"}, {"caller_nid": "plugins_host_snapshot_tree", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L258"}, {"caller_nid": "plugins_host_snapshot_tree", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L261"}, {"caller_nid": "plugins_host_snapshot_tree", "callee": "as_posix", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L264"}, {"caller_nid": "plugins_host_snapshot_tree", "callee": "relative_to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L264"}, {"caller_nid": "plugins_host_snapshot_tree", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L268"}, {"caller_nid": "plugins_host_is_forbidden_write", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L282"}, {"caller_nid": "plugins_host_is_forbidden_write", "callee": "match", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L282"}, {"caller_nid": "plugins_host_diff_and_collect_violations", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L297"}, {"caller_nid": "plugins_host_diff_and_collect_violations", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L300"}, {"caller_nid": "plugins_host_diff_and_collect_violations", "callee": "rglob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L301"}, {"caller_nid": "plugins_host_diff_and_collect_violations", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L302"}, {"caller_nid": "plugins_host_diff_and_collect_violations", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L305"}, {"caller_nid": "plugins_host_diff_and_collect_violations", "callee": "as_posix", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L308"}, {"caller_nid": "plugins_host_diff_and_collect_violations", "callee": "relative_to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L308"}, {"caller_nid": "plugins_host_diff_and_collect_violations", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L309"}, {"caller_nid": "plugins_host_diff_and_collect_violations", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L310"}, {"caller_nid": "plugins_host_diff_and_collect_violations", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L323"}, {"caller_nid": "plugins_host_diff_and_collect_violations", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L325"}, {"caller_nid": "plugins_host_diff_and_collect_violations", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L332"}, {"caller_nid": "plugins_host_diff_and_collect_violations", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L333"}, {"caller_nid": "plugins_host_read_silently", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L341"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L358"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L361"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L362"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "rglob", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L362"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L363"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "as_posix", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L365"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "relative_to", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L365"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "add", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L366"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L367"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L369"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "unlink", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L370"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L375"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L380"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L387"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L388"}, {"caller_nid": "plugins_host_revert_to_snapshot", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L389"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L414"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L416"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "readline", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L422"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L426"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "flush", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L427"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L428"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L428"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L432"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L435"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "upper", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L437"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L437"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L437"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L438"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L438"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L439"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L443"}, {"caller_nid": "plugins_host_drain_stderr", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L444"}, {"caller_nid": "plugins_host_emit_forwarded_log", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L454"}, {"caller_nid": "plugins_host_emit_forwarded_log", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L455"}, {"caller_nid": "plugins_host_emit_forwarded_log", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L463"}, {"caller_nid": "plugins_host_emit_forwarded_log", "callee": "method", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L464"}, {"caller_nid": "plugins_host_resolve_run_id", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L475"}, {"caller_nid": "plugins_host_resolve_run_id", "callee": "sub", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L477"}, {"caller_nid": "plugins_host_resolve_run_id", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L477"}, {"caller_nid": "plugins_host_resolve_run_id", "callee": "sub", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L479"}, {"caller_nid": "plugins_host_pluginhost_run_pass", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L523"}, {"caller_nid": "plugins_host_pluginhost_run_pass", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L535"}, {"caller_nid": "plugins_host_pluginhost_run_pass", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L536"}, {"caller_nid": "plugins_host_pluginhost_run_pass", "callee": "pop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L538"}, {"caller_nid": "plugins_host_pluginhost_run_pass", "callee": "pop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L540"}, {"caller_nid": "plugins_host_pluginhost_run_one", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L586"}, {"caller_nid": "plugins_host_pluginhost_run_one", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L587"}, {"caller_nid": "plugins_host_pluginhost_run_one", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L587"}, {"caller_nid": "plugins_host_pluginhost_run_one", "callee": "on_input_required", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L589"}, {"caller_nid": "plugins_host_pluginhost_run_one", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L601"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L647"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L648"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L656"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L660"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L660"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L661"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L670"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L683"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "cwd", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L683"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L687"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "create_subprocess_exec", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L689"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L697"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L703"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L703"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L710"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "drain", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L711"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L712"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L713"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "wait_closed", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L714"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "create_task", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L720"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "create_task", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L723"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L727"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L727"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L732"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "gather", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L733"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L735"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "monotonic", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L735"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "result", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L737"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L737"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L752"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L755"}, {"caller_nid": "plugins_host_pluginhost_spawn_worker", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L755"}, {"caller_nid": "plugins_host_pluginhost_terminate", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L769"}, {"caller_nid": "plugins_host_pluginhost_terminate", "callee": "send_signal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L770"}, {"caller_nid": "plugins_host_pluginhost_terminate", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L772"}, {"caller_nid": "plugins_host_pluginhost_terminate", "callee": "terminate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L773"}, {"caller_nid": "plugins_host_pluginhost_terminate", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L775"}, {"caller_nid": "plugins_host_pluginhost_terminate", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L775"}, {"caller_nid": "plugins_host_pluginhost_terminate", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L777"}, {"caller_nid": "plugins_host_pluginhost_terminate", "callee": "kill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L778"}, {"caller_nid": "plugins_host_pluginhost_terminate", "callee": "suppress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L779"}, {"caller_nid": "plugins_host_pluginhost_terminate", "callee": "wait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L780"}, {"caller_nid": "plugins_host_failure", "callee": "cls", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L808"}, {"caller_nid": "plugins_host_read_stdout_envelope", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L821"}, {"caller_nid": "plugins_host_read_stdout_envelope", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L826"}, {"caller_nid": "plugins_host_read_stdout_envelope", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L828"}, {"caller_nid": "plugins_host_read_stdout_envelope", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L828"}, {"caller_nid": "plugins_host_read_stdout_envelope", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L832"}, {"caller_nid": "plugins_host_read_stdout_envelope", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L835"}, {"caller_nid": "plugins_host_build_applied_entry", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L848"}, {"caller_nid": "plugins_host_build_applied_entry", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L848"}, {"caller_nid": "plugins_host_build_applied_entry", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L870"}, {"caller_nid": "plugins_host_build_applied_entry", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L870"}, {"caller_nid": "plugins_host_build_test_registry", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L920"}, {"caller_nid": "plugins_host_applied_entry_as_json", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L927"}, {"caller_nid": "plugins_host_applied_entry_as_json", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py", "source_location": "L927"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e32bbc4d2ffaf3903ae3b572d5e9b69be69e7d6a1ae3af045903150b064fa7d7.json b/graphify-out/cache/ast/e32bbc4d2ffaf3903ae3b572d5e9b69be69e7d6a1ae3af045903150b064fa7d7.json new file mode 100644 index 0000000..ad90005 --- /dev/null +++ b/graphify-out/cache/ast/e32bbc4d2ffaf3903ae3b572d5e9b69be69e7d6a1ae3af045903150b064fa7d7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_superpowers_specs_2026_05_28_staging_root_opt_in_design_md", "label": "2026-05-28-staging-root-opt-in-design.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L1"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", "label": "Opt-in `staging_root` \u2014 Design Spec", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L1"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_1_summary", "label": "1. Summary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L12"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_2_goals_non_goals", "label": "2. Goals & non-goals", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L39"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_goals", "label": "Goals", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L41"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_non_goals", "label": "Non-goals", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L50"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_3_design", "label": "3. Design", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L59"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_3_1_setup_state_gate_paths_py", "label": "3.1 Setup-state gate \u2014 `paths.py`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L61"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_3_2_suggestion_helper_paths_py", "label": "3.2 Suggestion helper \u2014 `paths.py`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L76"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_3_3_settings_ui_ui_pages_settings_py", "label": "3.3 Settings UI \u2014 `ui/pages/settings.py`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L95"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_3_4_create_on_save_ui_mount_py_persist_config", "label": "3.4 Create-on-save \u2014 `ui/mount.py` `_persist_config`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L104"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_3_5_verified_not_modified", "label": "3.5 Verified, not modified", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L121"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_3_6_test_mode_unchanged", "label": "3.6 Test mode \u2014 unchanged", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L143"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_4_data_flow", "label": "4. Data flow", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L152"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_codeblock_1", "label": "code:block1 (staging_root BLANK)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L156"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_5_error_handling_edge_cases", "label": "5. Error handling & edge cases", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L171"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_6_testing", "label": "6. Testing", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L183"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_tests_unit_test_paths_py", "label": "`tests/unit/test_paths.py`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L185"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_tests_unit_ui_test_settings_page_py", "label": "`tests/unit/ui/test_settings_page.py`", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L197"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_tests_unit_ui_test_mount_py_new_cases", "label": "`tests/unit/ui/test_mount.py` (new cases)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L200"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_regression_sweep", "label": "Regression sweep", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L206"}, {"id": "specs_2026_05_28_staging_root_opt_in_design_7_affected_files", "label": "7. Affected files", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L213"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_superpowers_specs_2026_05_28_staging_root_opt_in_design_md", "target": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L1", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", "target": "specs_2026_05_28_staging_root_opt_in_design_1_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L12", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", "target": "specs_2026_05_28_staging_root_opt_in_design_2_goals_non_goals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L39", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_2_goals_non_goals", "target": "specs_2026_05_28_staging_root_opt_in_design_goals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L41", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_2_goals_non_goals", "target": "specs_2026_05_28_staging_root_opt_in_design_non_goals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L50", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", "target": "specs_2026_05_28_staging_root_opt_in_design_3_design", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L59", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_3_design", "target": "specs_2026_05_28_staging_root_opt_in_design_3_1_setup_state_gate_paths_py", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L61", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_3_design", "target": "specs_2026_05_28_staging_root_opt_in_design_3_2_suggestion_helper_paths_py", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L76", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_3_design", "target": "specs_2026_05_28_staging_root_opt_in_design_3_3_settings_ui_ui_pages_settings_py", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L95", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_3_design", "target": "specs_2026_05_28_staging_root_opt_in_design_3_4_create_on_save_ui_mount_py_persist_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L104", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_3_design", "target": "specs_2026_05_28_staging_root_opt_in_design_3_5_verified_not_modified", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L121", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_3_design", "target": "specs_2026_05_28_staging_root_opt_in_design_3_6_test_mode_unchanged", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L143", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", "target": "specs_2026_05_28_staging_root_opt_in_design_4_data_flow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L152", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_4_data_flow", "target": "specs_2026_05_28_staging_root_opt_in_design_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L156", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", "target": "specs_2026_05_28_staging_root_opt_in_design_5_error_handling_edge_cases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L171", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", "target": "specs_2026_05_28_staging_root_opt_in_design_6_testing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L183", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_6_testing", "target": "specs_2026_05_28_staging_root_opt_in_design_tests_unit_test_paths_py", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L185", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_6_testing", "target": "specs_2026_05_28_staging_root_opt_in_design_tests_unit_ui_test_settings_page_py", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L197", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_6_testing", "target": "specs_2026_05_28_staging_root_opt_in_design_tests_unit_ui_test_mount_py_new_cases", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L200", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_6_testing", "target": "specs_2026_05_28_staging_root_opt_in_design_regression_sweep", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L206", "weight": 1.0}, {"source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", "target": "specs_2026_05_28_staging_root_opt_in_design_7_affected_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", "source_location": "L213", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/e351609125a76ac5792a53592d891f9b06868c7ab85e90f86433a9108f538d2d.json b/graphify-out/cache/ast/e351609125a76ac5792a53592d891f9b06868c7ab85e90f86433a9108f538d2d.json new file mode 100644 index 0000000..78e86ad --- /dev/null +++ b/graphify-out/cache/ast/e351609125a76ac5792a53592d891f9b06868c7ab85e90f86433a9108f538d2d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "label": "test_problems.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L1"}, {"id": "api_test_problems_stubvalidator", "label": "_StubValidator", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L38"}, {"id": "api_test_problems_stubvalidator_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L41"}, {"id": "api_test_problems_stubvalidator_query_problems", "label": ".query_problems()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L45"}, {"id": "api_test_problems_stubvalidator_audit", "label": ".audit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L48"}, {"id": "api_test_problems_ready_config", "label": "_ready_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L53"}, {"id": "api_test_problems_findings", "label": "_findings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L77"}, {"id": "api_test_problems_write_creation_json", "label": "_write_creation_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L99"}, {"id": "api_test_problems_test_list_problems_returns_findings", "label": "test_list_problems_returns_findings()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L121"}, {"id": "api_test_problems_test_list_problems_filters_by_severity", "label": "test_list_problems_filters_by_severity()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L138"}, {"id": "api_test_problems_test_list_problems_filters_by_class", "label": "test_list_problems_filters_by_class()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L151"}, {"id": "api_test_problems_test_list_problems_with_equipment_scope", "label": "test_list_problems_with_equipment_scope()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L164"}, {"id": "api_test_problems_test_list_problems_unknown_scope_returns_422", "label": "test_list_problems_unknown_scope_returns_422()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L176"}, {"id": "api_test_problems_test_refresh_runs_audit", "label": "test_refresh_runs_audit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L190"}, {"id": "api_test_problems_test_append_override_writes_entry", "label": "test_append_override_writes_entry()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L205"}, {"id": "api_test_problems_test_append_override_404_when_path_absent", "label": "test_append_override_404_when_path_absent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L239"}, {"id": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "label": "test_problems_websocket_sends_snapshot_on_connect()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L258"}, {"id": "api_test_problems_test_problems_websocket_closes_when_no_channel", "label": "test_problems_websocket_closes_when_no_channel()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L280"}, {"id": "api_test_problems_test_refresh_publishes_snapshot_to_channel", "label": "test_refresh_publishes_snapshot_to_channel()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L301"}, {"id": "api_test_problems_test_revoke_override_writes_tombstone", "label": "test_revoke_override_writes_tombstone()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L323"}, {"id": "api_test_problems_rationale_1", "label": "Unit tests for the ``/problems`` router.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L1"}, {"id": "api_test_problems_rationale_39", "label": "Test double that returns a canned finding list.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L39"}, {"id": "api_test_problems_rationale_259", "label": "Connecting to /problems/events emits a snapshot frame immediately.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L259"}, {"id": "api_test_problems_rationale_281", "label": "Without an audit channel the WebSocket closes with 1011.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L281"}, {"id": "api_test_problems_rationale_302", "label": "``POST /problems/refresh`` invokes audit and publishes to the channel.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L302"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "fastapi_testclient", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "exlab_wizard_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "exlab_wizard_cache_creation_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "exlab_wizard_validator_findings", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_stubvalidator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L38", "weight": 1.0}, {"source": "api_test_problems_stubvalidator", "target": "api_test_problems_stubvalidator_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L41", "weight": 1.0}, {"source": "api_test_problems_stubvalidator", "target": "api_test_problems_stubvalidator_query_problems", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L45", "weight": 1.0}, {"source": "api_test_problems_stubvalidator", "target": "api_test_problems_stubvalidator_audit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_ready_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_findings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L77", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_write_creation_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L99", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_test_list_problems_returns_findings", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L121", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_test_list_problems_filters_by_severity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L138", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_test_list_problems_filters_by_class", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L151", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_test_list_problems_with_equipment_scope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L164", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_test_list_problems_unknown_scope_returns_422", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L176", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_test_refresh_runs_audit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L190", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_test_append_override_writes_entry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L205", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_test_append_override_404_when_path_absent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L239", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L258", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_test_problems_websocket_closes_when_no_channel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L280", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_test_refresh_publishes_snapshot_to_channel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L301", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "target": "api_test_problems_test_revoke_override_writes_tombstone", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L323", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_returns_findings", "target": "api_test_problems_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L123", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_returns_findings", "target": "api_test_problems_stubvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L125", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_returns_findings", "target": "api_test_problems_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L125", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_filters_by_severity", "target": "api_test_problems_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L140", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_filters_by_severity", "target": "api_test_problems_stubvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L142", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_filters_by_severity", "target": "api_test_problems_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L142", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_filters_by_class", "target": "api_test_problems_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L153", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_filters_by_class", "target": "api_test_problems_stubvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L155", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_filters_by_class", "target": "api_test_problems_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L155", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_with_equipment_scope", "target": "api_test_problems_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L166", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_with_equipment_scope", "target": "api_test_problems_stubvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L168", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_with_equipment_scope", "target": "api_test_problems_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L168", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_unknown_scope_returns_422", "target": "api_test_problems_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L178", "weight": 1.0}, {"source": "api_test_problems_test_list_problems_unknown_scope_returns_422", "target": "api_test_problems_stubvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L180", "weight": 1.0}, {"source": "api_test_problems_test_refresh_runs_audit", "target": "api_test_problems_stubvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L191", "weight": 1.0}, {"source": "api_test_problems_test_refresh_runs_audit", "target": "api_test_problems_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L191", "weight": 1.0}, {"source": "api_test_problems_test_refresh_runs_audit", "target": "api_test_problems_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L193", "weight": 1.0}, {"source": "api_test_problems_test_append_override_writes_entry", "target": "api_test_problems_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L208", "weight": 1.0}, {"source": "api_test_problems_test_append_override_writes_entry", "target": "api_test_problems_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L211", "weight": 1.0}, {"source": "api_test_problems_test_append_override_writes_entry", "target": "api_test_problems_stubvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L213", "weight": 1.0}, {"source": "api_test_problems_test_append_override_404_when_path_absent", "target": "api_test_problems_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L242", "weight": 1.0}, {"source": "api_test_problems_test_append_override_404_when_path_absent", "target": "api_test_problems_stubvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L244", "weight": 1.0}, {"source": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "target": "api_test_problems_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L267", "weight": 1.0}, {"source": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "target": "api_test_problems_stubvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L269", "weight": 1.0}, {"source": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "target": "api_test_problems_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L269", "weight": 1.0}, {"source": "api_test_problems_test_problems_websocket_closes_when_no_channel", "target": "api_test_problems_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L285", "weight": 1.0}, {"source": "api_test_problems_test_problems_websocket_closes_when_no_channel", "target": "api_test_problems_stubvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L287", "weight": 1.0}, {"source": "api_test_problems_test_refresh_publishes_snapshot_to_channel", "target": "api_test_problems_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L309", "weight": 1.0}, {"source": "api_test_problems_test_refresh_publishes_snapshot_to_channel", "target": "api_test_problems_stubvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L311", "weight": 1.0}, {"source": "api_test_problems_test_refresh_publishes_snapshot_to_channel", "target": "api_test_problems_findings", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L311", "weight": 1.0}, {"source": "api_test_problems_test_revoke_override_writes_tombstone", "target": "api_test_problems_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L326", "weight": 1.0}, {"source": "api_test_problems_test_revoke_override_writes_tombstone", "target": "api_test_problems_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L329", "weight": 1.0}, {"source": "api_test_problems_test_revoke_override_writes_tombstone", "target": "api_test_problems_stubvalidator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L331", "weight": 1.0}, {"source": "api_test_problems_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_api_test_problems_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L1", "weight": 1.0}, {"source": "api_test_problems_rationale_39", "target": "api_test_problems_stubvalidator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L39", "weight": 1.0}, {"source": "api_test_problems_rationale_259", "target": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L259", "weight": 1.0}, {"source": "api_test_problems_rationale_281", "target": "api_test_problems_test_problems_websocket_closes_when_no_channel", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L281", "weight": 1.0}, {"source": "api_test_problems_rationale_302", "target": "api_test_problems_test_refresh_publishes_snapshot_to_channel", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L302", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_test_problems_stubvalidator_init", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L42"}, {"caller_nid": "api_test_problems_stubvalidator_query_problems", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L46"}, {"caller_nid": "api_test_problems_stubvalidator_audit", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L50"}, {"caller_nid": "api_test_problems_ready_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L54"}, {"caller_nid": "api_test_problems_ready_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L55"}, {"caller_nid": "api_test_problems_ready_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L56"}, {"caller_nid": "api_test_problems_ready_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L56"}, {"caller_nid": "api_test_problems_ready_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L56"}, {"caller_nid": "api_test_problems_ready_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L59"}, {"caller_nid": "api_test_problems_ready_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L62"}, {"caller_nid": "api_test_problems_ready_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L64"}, {"caller_nid": "api_test_problems_ready_config", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L72"}, {"caller_nid": "api_test_problems_ready_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L73"}, {"caller_nid": "api_test_problems_findings", "callee": "Finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L79"}, {"caller_nid": "api_test_problems_findings", "callee": "Finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L87"}, {"caller_nid": "api_test_problems_write_creation_json", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L101"}, {"caller_nid": "api_test_problems_write_creation_json", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L102"}, {"caller_nid": "api_test_problems_write_creation_json", "callee": "strftime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L104"}, {"caller_nid": "api_test_problems_write_creation_json", "callee": "now", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L104"}, {"caller_nid": "api_test_problems_write_creation_json", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L108"}, {"caller_nid": "api_test_problems_write_creation_json", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L111"}, {"caller_nid": "api_test_problems_write_creation_json", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L115"}, {"caller_nid": "api_test_problems_write_creation_json", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L115"}, {"caller_nid": "api_test_problems_write_creation_json", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L118"}, {"caller_nid": "api_test_problems_write_creation_json", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L118"}, {"caller_nid": "api_test_problems_test_list_problems_returns_findings", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L122"}, {"caller_nid": "api_test_problems_test_list_problems_returns_findings", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L127"}, {"caller_nid": "api_test_problems_test_list_problems_returns_findings", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L128"}, {"caller_nid": "api_test_problems_test_list_problems_returns_findings", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L129"}, {"caller_nid": "api_test_problems_test_list_problems_returns_findings", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L131"}, {"caller_nid": "api_test_problems_test_list_problems_returns_findings", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L132"}, {"caller_nid": "api_test_problems_test_list_problems_filters_by_severity", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L139"}, {"caller_nid": "api_test_problems_test_list_problems_filters_by_severity", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L144"}, {"caller_nid": "api_test_problems_test_list_problems_filters_by_severity", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L145"}, {"caller_nid": "api_test_problems_test_list_problems_filters_by_severity", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L146"}, {"caller_nid": "api_test_problems_test_list_problems_filters_by_severity", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L147"}, {"caller_nid": "api_test_problems_test_list_problems_filters_by_severity", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L148"}, {"caller_nid": "api_test_problems_test_list_problems_filters_by_class", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L152"}, {"caller_nid": "api_test_problems_test_list_problems_filters_by_class", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L157"}, {"caller_nid": "api_test_problems_test_list_problems_filters_by_class", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L158"}, {"caller_nid": "api_test_problems_test_list_problems_filters_by_class", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L159"}, {"caller_nid": "api_test_problems_test_list_problems_filters_by_class", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L160"}, {"caller_nid": "api_test_problems_test_list_problems_filters_by_class", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L161"}, {"caller_nid": "api_test_problems_test_list_problems_with_equipment_scope", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L165"}, {"caller_nid": "api_test_problems_test_list_problems_with_equipment_scope", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L170"}, {"caller_nid": "api_test_problems_test_list_problems_with_equipment_scope", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L171"}, {"caller_nid": "api_test_problems_test_list_problems_with_equipment_scope", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L172"}, {"caller_nid": "api_test_problems_test_list_problems_unknown_scope_returns_422", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L177"}, {"caller_nid": "api_test_problems_test_list_problems_unknown_scope_returns_422", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L182"}, {"caller_nid": "api_test_problems_test_list_problems_unknown_scope_returns_422", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L183"}, {"caller_nid": "api_test_problems_test_list_problems_unknown_scope_returns_422", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L184"}, {"caller_nid": "api_test_problems_test_list_problems_unknown_scope_returns_422", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L186"}, {"caller_nid": "api_test_problems_test_refresh_runs_audit", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L192"}, {"caller_nid": "api_test_problems_test_refresh_runs_audit", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L195"}, {"caller_nid": "api_test_problems_test_refresh_runs_audit", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L196"}, {"caller_nid": "api_test_problems_test_refresh_runs_audit", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L197"}, {"caller_nid": "api_test_problems_test_refresh_runs_audit", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L199"}, {"caller_nid": "api_test_problems_test_append_override_writes_entry", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L207"}, {"caller_nid": "api_test_problems_test_append_override_writes_entry", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L209"}, {"caller_nid": "api_test_problems_test_append_override_writes_entry", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L210"}, {"caller_nid": "api_test_problems_test_append_override_writes_entry", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L216"}, {"caller_nid": "api_test_problems_test_append_override_writes_entry", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L217"}, {"caller_nid": "api_test_problems_test_append_override_writes_entry", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L223"}, {"caller_nid": "api_test_problems_test_append_override_writes_entry", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L225"}, {"caller_nid": "api_test_problems_test_append_override_writes_entry", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L230"}, {"caller_nid": "api_test_problems_test_append_override_writes_entry", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L231"}, {"caller_nid": "api_test_problems_test_append_override_writes_entry", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L234"}, {"caller_nid": "api_test_problems_test_append_override_404_when_path_absent", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L240"}, {"caller_nid": "api_test_problems_test_append_override_404_when_path_absent", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L241"}, {"caller_nid": "api_test_problems_test_append_override_404_when_path_absent", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L247"}, {"caller_nid": "api_test_problems_test_append_override_404_when_path_absent", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L248"}, {"caller_nid": "api_test_problems_test_append_override_404_when_path_absent", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L254"}, {"caller_nid": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L266"}, {"caller_nid": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "callee": "AuditChannel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L270"}, {"caller_nid": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L272"}, {"caller_nid": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L273"}, {"caller_nid": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "callee": "websocket_connect", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L274"}, {"caller_nid": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L275"}, {"caller_nid": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "callee": "receive_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L275"}, {"caller_nid": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L277"}, {"caller_nid": "api_test_problems_test_problems_websocket_closes_when_no_channel", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L284"}, {"caller_nid": "api_test_problems_test_problems_websocket_closes_when_no_channel", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L290"}, {"caller_nid": "api_test_problems_test_problems_websocket_closes_when_no_channel", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L293"}, {"caller_nid": "api_test_problems_test_problems_websocket_closes_when_no_channel", "callee": "websocket_connect", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L295"}, {"caller_nid": "api_test_problems_test_refresh_publishes_snapshot_to_channel", "callee": "AuditChannel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L307"}, {"caller_nid": "api_test_problems_test_refresh_publishes_snapshot_to_channel", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L308"}, {"caller_nid": "api_test_problems_test_refresh_publishes_snapshot_to_channel", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L314"}, {"caller_nid": "api_test_problems_test_refresh_publishes_snapshot_to_channel", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L315"}, {"caller_nid": "api_test_problems_test_refresh_publishes_snapshot_to_channel", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L316"}, {"caller_nid": "api_test_problems_test_refresh_publishes_snapshot_to_channel", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L318"}, {"caller_nid": "api_test_problems_test_revoke_override_writes_tombstone", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L325"}, {"caller_nid": "api_test_problems_test_revoke_override_writes_tombstone", "callee": "CreationWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L327"}, {"caller_nid": "api_test_problems_test_revoke_override_writes_tombstone", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L328"}, {"caller_nid": "api_test_problems_test_revoke_override_writes_tombstone", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L334"}, {"caller_nid": "api_test_problems_test_revoke_override_writes_tombstone", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L335"}, {"caller_nid": "api_test_problems_test_revoke_override_writes_tombstone", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L341"}, {"caller_nid": "api_test_problems_test_revoke_override_writes_tombstone", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py", "source_location": "L343"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e38e417f4de61a5b3764f6dbdc02192394a3e3a8a1e222debbab22101eccb341.json b/graphify-out/cache/ast/e38e417f4de61a5b3764f6dbdc02192394a3e3a8a1e222debbab22101eccb341.json new file mode 100644 index 0000000..46671b2 --- /dev/null +++ b/graphify-out/cache/ast/e38e417f4de61a5b3764f6dbdc02192394a3e3a8a1e222debbab22101eccb341.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "label": "test_format.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L1"}, {"id": "logging_test_format_reset_context", "label": "_reset_context()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L21"}, {"id": "logging_test_format_record", "label": "_record()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L31"}, {"id": "logging_test_format_test_renders_all_tags_when_full_context_set", "label": "test_renders_all_tags_when_full_context_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L56"}, {"id": "logging_test_format_test_omits_tags_when_their_context_var_is_unset", "label": "test_omits_tags_when_their_context_var_is_unset()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L74"}, {"id": "logging_test_format_test_emits_no_tags_when_context_is_empty", "label": "test_emits_no_tags_when_context_is_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L84"}, {"id": "logging_test_format_test_level_field_is_left_padded_to_five_chars", "label": "test_level_field_is_left_padded_to_five_chars()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L90"}, {"id": "logging_test_format_test_timestamp_is_utc_iso_8601_with_z_suffix", "label": "test_timestamp_is_utc_iso_8601_with_z_suffix()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L111"}, {"id": "logging_test_format_test_message_with_format_args_is_rendered", "label": "test_message_with_format_args_is_rendered()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L122"}, {"id": "logging_test_format_test_redact_url_userinfo_password", "label": "test_redact_url_userinfo_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L143"}, {"id": "logging_test_format_test_redact_url_userinfo_password_with_punctuation", "label": "test_redact_url_userinfo_password_with_punctuation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L147"}, {"id": "logging_test_format_test_redact_bearer_token", "label": "test_redact_bearer_token()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L154"}, {"id": "logging_test_format_test_redact_bearer_token_lowercase", "label": "test_redact_bearer_token_lowercase()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L158"}, {"id": "logging_test_format_test_redact_authorization_header", "label": "test_redact_authorization_header()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L162"}, {"id": "logging_test_format_test_redact_authorization_bearer_combined", "label": "test_redact_authorization_bearer_combined()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L166"}, {"id": "logging_test_format_test_redact_leaves_non_secret_strings_alone", "label": "test_redact_leaves_non_secret_strings_alone()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L172"}, {"id": "logging_test_format_test_redact_handles_url_without_password", "label": "test_redact_handles_url_without_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L178"}, {"id": "logging_test_format_test_redact_handles_multiple_secrets_in_one_string", "label": "test_redact_handles_multiple_secrets_in_one_string()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L183"}, {"id": "logging_test_format_test_redact_coerces_non_string_input", "label": "test_redact_coerces_non_string_input()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L191"}, {"id": "logging_test_format_test_format_appends_exception_text_when_exc_info_set", "label": "test_format_appends_exception_text_when_exc_info_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L200"}, {"id": "logging_test_format_rationale_1", "label": "Tests for ``exlab_wizard.logging.format``. Backend Spec \u00a716.4 defines the canon", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L1"}, {"id": "logging_test_format_rationale_22", "label": "Ensure each test starts with no run context bleed-through.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L22"}, {"id": "logging_test_format_rationale_32", "label": "Build a minimal ``LogRecord`` at a known timestamp. The timestamp is set to", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L32"}, {"id": "logging_test_format_rationale_91", "label": "Spec \u00a716.4: level field is exactly 5 chars wide. \u00a716.5 commits four canonic", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L91"}, {"id": "logging_test_format_rationale_201", "label": "``record.exc_info`` triggers the formatter to append a traceback (\u00a716.4 keep", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L201"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "exlab_wizard_logging_context", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "exlab_wizard_logging_format", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_reset_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_record", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_renders_all_tags_when_full_context_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_omits_tags_when_their_context_var_is_unset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L74", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_emits_no_tags_when_context_is_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L84", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_level_field_is_left_padded_to_five_chars", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L90", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_timestamp_is_utc_iso_8601_with_z_suffix", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L111", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_message_with_format_args_is_rendered", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L122", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_redact_url_userinfo_password", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L143", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_redact_url_userinfo_password_with_punctuation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L147", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_redact_bearer_token", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L154", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_redact_bearer_token_lowercase", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L158", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_redact_authorization_header", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L162", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_redact_authorization_bearer_combined", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L166", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_redact_leaves_non_secret_strings_alone", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L172", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_redact_handles_url_without_password", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L178", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_redact_handles_multiple_secrets_in_one_string", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L183", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_redact_coerces_non_string_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L191", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "target": "logging_test_format_test_format_appends_exception_text_when_exc_info_set", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L200", "weight": 1.0}, {"source": "logging_test_format_test_renders_all_tags_when_full_context_set", "target": "logging_test_format_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L65", "weight": 1.0}, {"source": "logging_test_format_test_omits_tags_when_their_context_var_is_unset", "target": "logging_test_format_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L77", "weight": 1.0}, {"source": "logging_test_format_test_emits_no_tags_when_context_is_empty", "target": "logging_test_format_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L86", "weight": 1.0}, {"source": "logging_test_format_test_level_field_is_left_padded_to_five_chars", "target": "logging_test_format_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L98", "weight": 1.0}, {"source": "logging_test_format_test_timestamp_is_utc_iso_8601_with_z_suffix", "target": "logging_test_format_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L113", "weight": 1.0}, {"source": "logging_test_format_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_logging_test_format_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L1", "weight": 1.0}, {"source": "logging_test_format_rationale_22", "target": "logging_test_format_reset_context", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L22", "weight": 1.0}, {"source": "logging_test_format_rationale_32", "target": "logging_test_format_record", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L32", "weight": 1.0}, {"source": "logging_test_format_rationale_91", "target": "logging_test_format_test_level_field_is_left_padded_to_five_chars", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L91", "weight": 1.0}, {"source": "logging_test_format_rationale_201", "target": "logging_test_format_test_format_appends_exception_text_when_exc_info_set", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L201", "weight": 1.0}], "raw_calls": [{"caller_nid": "logging_test_format_reset_context", "callee": "clear_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L23"}, {"caller_nid": "logging_test_format_record", "callee": "LogRecord", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L37"}, {"caller_nid": "logging_test_format_test_renders_all_tags_when_full_context_set", "callee": "StructuredTagFormatter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L57"}, {"caller_nid": "logging_test_format_test_renders_all_tags_when_full_context_set", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L58"}, {"caller_nid": "logging_test_format_test_renders_all_tags_when_full_context_set", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L65"}, {"caller_nid": "logging_test_format_test_omits_tags_when_their_context_var_is_unset", "callee": "StructuredTagFormatter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L75"}, {"caller_nid": "logging_test_format_test_omits_tags_when_their_context_var_is_unset", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L76"}, {"caller_nid": "logging_test_format_test_omits_tags_when_their_context_var_is_unset", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L77"}, {"caller_nid": "logging_test_format_test_emits_no_tags_when_context_is_empty", "callee": "StructuredTagFormatter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L85"}, {"caller_nid": "logging_test_format_test_emits_no_tags_when_context_is_empty", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L86"}, {"caller_nid": "logging_test_format_test_level_field_is_left_padded_to_five_chars", "callee": "StructuredTagFormatter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L97"}, {"caller_nid": "logging_test_format_test_level_field_is_left_padded_to_five_chars", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L98"}, {"caller_nid": "logging_test_format_test_level_field_is_left_padded_to_five_chars", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L99"}, {"caller_nid": "logging_test_format_test_level_field_is_left_padded_to_five_chars", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L100"}, {"caller_nid": "logging_test_format_test_level_field_is_left_padded_to_five_chars", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L101"}, {"caller_nid": "logging_test_format_test_level_field_is_left_padded_to_five_chars", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L102"}, {"caller_nid": "logging_test_format_test_timestamp_is_utc_iso_8601_with_z_suffix", "callee": "StructuredTagFormatter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L112"}, {"caller_nid": "logging_test_format_test_timestamp_is_utc_iso_8601_with_z_suffix", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L113"}, {"caller_nid": "logging_test_format_test_timestamp_is_utc_iso_8601_with_z_suffix", "callee": "split", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L114"}, {"caller_nid": "logging_test_format_test_timestamp_is_utc_iso_8601_with_z_suffix", "callee": "endswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L117"}, {"caller_nid": "logging_test_format_test_message_with_format_args_is_rendered", "callee": "StructuredTagFormatter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L123"}, {"caller_nid": "logging_test_format_test_message_with_format_args_is_rendered", "callee": "LogRecord", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L124"}, {"caller_nid": "logging_test_format_test_message_with_format_args_is_rendered", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L134"}, {"caller_nid": "logging_test_format_test_redact_url_userinfo_password", "callee": "redact_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L144"}, {"caller_nid": "logging_test_format_test_redact_url_userinfo_password_with_punctuation", "callee": "redact_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L151"}, {"caller_nid": "logging_test_format_test_redact_bearer_token", "callee": "redact_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L155"}, {"caller_nid": "logging_test_format_test_redact_bearer_token_lowercase", "callee": "redact_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L159"}, {"caller_nid": "logging_test_format_test_redact_authorization_header", "callee": "redact_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L163"}, {"caller_nid": "logging_test_format_test_redact_authorization_bearer_combined", "callee": "redact_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L169"}, {"caller_nid": "logging_test_format_test_redact_leaves_non_secret_strings_alone", "callee": "redact_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L173"}, {"caller_nid": "logging_test_format_test_redact_leaves_non_secret_strings_alone", "callee": "redact_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L174"}, {"caller_nid": "logging_test_format_test_redact_leaves_non_secret_strings_alone", "callee": "redact_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L175"}, {"caller_nid": "logging_test_format_test_redact_handles_url_without_password", "callee": "redact_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L180"}, {"caller_nid": "logging_test_format_test_redact_handles_multiple_secrets_in_one_string", "callee": "redact_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L185"}, {"caller_nid": "logging_test_format_test_redact_coerces_non_string_input", "callee": "redact_secret", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L196"}, {"caller_nid": "logging_test_format_test_redact_coerces_non_string_input", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L196"}, {"caller_nid": "logging_test_format_test_format_appends_exception_text_when_exc_info_set", "callee": "StructuredTagFormatter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L203"}, {"caller_nid": "logging_test_format_test_format_appends_exception_text_when_exc_info_set", "callee": "RuntimeError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L205"}, {"caller_nid": "logging_test_format_test_format_appends_exception_text_when_exc_info_set", "callee": "LogRecord", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L209"}, {"caller_nid": "logging_test_format_test_format_appends_exception_text_when_exc_info_set", "callee": "exc_info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L216"}, {"caller_nid": "logging_test_format_test_format_appends_exception_text_when_exc_info_set", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py", "source_location": "L219"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e394dec17406b907cabb4187218910f1e1bc3eda5cc9a1f2519326b87765fcc6.json b/graphify-out/cache/ast/e394dec17406b907cabb4187218910f1e1bc3eda5cc9a1f2519326b87765fcc6.json new file mode 100644 index 0000000..66b0a67 --- /dev/null +++ b/graphify-out/cache/ast/e394dec17406b907cabb4187218910f1e1bc3eda5cc9a1f2519326b87765fcc6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_errors_py", "label": "errors.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L1"}, {"id": "exlab_wizard_errors_exlaberror", "label": "ExLabError", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L19"}, {"id": "exception", "label": "Exception", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "exlab_wizard_errors_configerror", "label": "ConfigError", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L23"}, {"id": "exlab_wizard_errors_validationerror", "label": "ValidationError", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L27"}, {"id": "exlab_wizard_errors_templateloaderror", "label": "TemplateLoadError", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L31"}, {"id": "exlab_wizard_errors_templatecorefieldredeclarederror", "label": "TemplateCoreFieldRedeclaredError", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L35"}, {"id": "exlab_wizard_errors_pluginerror", "label": "PluginError", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L39"}, {"id": "exlab_wizard_errors_plugininputrequired", "label": "PluginInputRequired", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L43"}, {"id": "exlab_wizard_errors_plugininputrequired_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L46"}, {"id": "exlab_wizard_errors_reason", "label": "reason()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L51"}, {"id": "exlab_wizard_errors_schemamajormismatcherror", "label": "SchemaMajorMismatchError", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L55"}, {"id": "exlab_wizard_errors_schemamajormismatcherror_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L58"}, {"id": "exlab_wizard_errors_keyringunavailableerror", "label": "KeyringUnavailableError", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L64"}, {"id": "exlab_wizard_errors_setupincompleteerror", "label": "SetupIncompleteError", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L68"}, {"id": "exlab_wizard_errors_rationale_1", "label": "Top-level exception hierarchy. Backend Spec \u00a74.3 errors.py.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L1"}, {"id": "exlab_wizard_errors_rationale_20", "label": "Base class for all ExLab-Wizard exceptions.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L20"}, {"id": "exlab_wizard_errors_rationale_24", "label": "Raised on config.yaml validation failures. Backend Spec \u00a79.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L24"}, {"id": "exlab_wizard_errors_rationale_28", "label": "Raised by the validator engine on creation-time gates. Backend Spec \u00a78.1.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L28"}, {"id": "exlab_wizard_errors_rationale_32", "label": "Raised when a Copier template fails to load. Backend Spec \u00a75.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L32"}, {"id": "exlab_wizard_errors_rationale_36", "label": "Raised when a template redeclares label / operator / objective. Backend Spec \u00a710", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L36"}, {"id": "exlab_wizard_errors_rationale_40", "label": "Raised by plugin workers to signal expected failure. Backend Spec \u00a76.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L40"}, {"id": "exlab_wizard_errors_rationale_44", "label": "Raised by plugin workers to escalate for additional input. Backend Spec \u00a76.4.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L44"}, {"id": "exlab_wizard_errors_rationale_56", "label": "Raised when a cache file's schema major version exceeds reader support. Backend", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L56"}, {"id": "exlab_wizard_errors_rationale_65", "label": "Raised when no OS keyring backend is reachable and fallback is exhausted. Backen", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L65"}, {"id": "exlab_wizard_errors_rationale_69", "label": "Raised when a creation gate runs while setup state is INCOMPLETE_*. Backend Spec", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L69"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_errors_py", "target": "exlab_wizard_errors_exlaberror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L19", "weight": 1.0}, {"source": "exlab_wizard_errors_exlaberror", "target": "exception", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_errors_py", "target": "exlab_wizard_errors_configerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L23", "weight": 1.0}, {"source": "exlab_wizard_errors_configerror", "target": "exlab_wizard_errors_exlaberror", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_errors_py", "target": "exlab_wizard_errors_validationerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L27", "weight": 1.0}, {"source": "exlab_wizard_errors_validationerror", "target": "exlab_wizard_errors_exlaberror", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_errors_py", "target": "exlab_wizard_errors_templateloaderror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L31", "weight": 1.0}, {"source": "exlab_wizard_errors_templateloaderror", "target": "exlab_wizard_errors_exlaberror", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_errors_py", "target": "exlab_wizard_errors_templatecorefieldredeclarederror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L35", "weight": 1.0}, {"source": "exlab_wizard_errors_templatecorefieldredeclarederror", "target": "exlab_wizard_errors_templateloaderror", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_errors_py", "target": "exlab_wizard_errors_pluginerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L39", "weight": 1.0}, {"source": "exlab_wizard_errors_pluginerror", "target": "exlab_wizard_errors_exlaberror", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_errors_py", "target": "exlab_wizard_errors_plugininputrequired", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L43", "weight": 1.0}, {"source": "exlab_wizard_errors_plugininputrequired", "target": "exlab_wizard_errors_exlaberror", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L43", "weight": 1.0}, {"source": "exlab_wizard_errors_plugininputrequired", "target": "exlab_wizard_errors_plugininputrequired_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_errors_py", "target": "exlab_wizard_errors_reason", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_errors_py", "target": "exlab_wizard_errors_schemamajormismatcherror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L55", "weight": 1.0}, {"source": "exlab_wizard_errors_schemamajormismatcherror", "target": "exlab_wizard_errors_exlaberror", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L55", "weight": 1.0}, {"source": "exlab_wizard_errors_schemamajormismatcherror", "target": "exlab_wizard_errors_schemamajormismatcherror_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_errors_py", "target": "exlab_wizard_errors_keyringunavailableerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L64", "weight": 1.0}, {"source": "exlab_wizard_errors_keyringunavailableerror", "target": "exlab_wizard_errors_exlaberror", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L64", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_errors_py", "target": "exlab_wizard_errors_setupincompleteerror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L68", "weight": 1.0}, {"source": "exlab_wizard_errors_setupincompleteerror", "target": "exlab_wizard_errors_exlaberror", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L68", "weight": 1.0}, {"source": "exlab_wizard_errors_plugininputrequired_init", "target": "exlab_wizard_errors_schemamajormismatcherror_init", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L47", "weight": 1.0}, {"source": "exlab_wizard_errors_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_errors_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L1", "weight": 1.0}, {"source": "exlab_wizard_errors_rationale_20", "target": "exlab_wizard_errors_exlaberror", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L20", "weight": 1.0}, {"source": "exlab_wizard_errors_rationale_24", "target": "exlab_wizard_errors_configerror", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L24", "weight": 1.0}, {"source": "exlab_wizard_errors_rationale_28", "target": "exlab_wizard_errors_validationerror", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L28", "weight": 1.0}, {"source": "exlab_wizard_errors_rationale_32", "target": "exlab_wizard_errors_templateloaderror", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L32", "weight": 1.0}, {"source": "exlab_wizard_errors_rationale_36", "target": "exlab_wizard_errors_templatecorefieldredeclarederror", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L36", "weight": 1.0}, {"source": "exlab_wizard_errors_rationale_40", "target": "exlab_wizard_errors_pluginerror", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L40", "weight": 1.0}, {"source": "exlab_wizard_errors_rationale_44", "target": "exlab_wizard_errors_plugininputrequired", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L44", "weight": 1.0}, {"source": "exlab_wizard_errors_rationale_56", "target": "exlab_wizard_errors_schemamajormismatcherror", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L56", "weight": 1.0}, {"source": "exlab_wizard_errors_rationale_65", "target": "exlab_wizard_errors_keyringunavailableerror", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L65", "weight": 1.0}, {"source": "exlab_wizard_errors_rationale_69", "target": "exlab_wizard_errors_setupincompleteerror", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L69", "weight": 1.0}], "raw_calls": [{"caller_nid": "exlab_wizard_errors_plugininputrequired_init", "callee": "super", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L47"}, {"caller_nid": "exlab_wizard_errors_reason", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L52"}, {"caller_nid": "exlab_wizard_errors_schemamajormismatcherror_init", "callee": "super", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py", "source_location": "L59"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e3cdf0aecda488b0ddb731f68d9b88a64322562e73892b1813b993b953259308.json b/graphify-out/cache/ast/e3cdf0aecda488b0ddb731f68d9b88a64322562e73892b1813b993b953259308.json new file mode 100644 index 0000000..c78f42a --- /dev/null +++ b/graphify-out/cache/ast/e3cdf0aecda488b0ddb731f68d9b88a64322562e73892b1813b993b953259308.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_13_keyboard_py", "label": "test_flow_13_keyboard.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L1"}, {"id": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", "label": "test_flow_13_keyboard()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L14"}, {"id": "e2e_test_flow_13_keyboard_rationale_1", "label": "E2E flow 13: Keyboard shortcuts + accessibility focus management. Frontend Spec", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_13_keyboard_py", "target": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L14", "weight": 1.0}, {"source": "e2e_test_flow_13_keyboard_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_13_keyboard_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L15"}, {"caller_nid": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L16"}, {"caller_nid": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L17"}, {"caller_nid": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L17"}, {"caller_nid": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L19"}, {"caller_nid": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", "callee": "press", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L22"}, {"caller_nid": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", "callee": "wait_for_function", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L23"}, {"caller_nid": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", "callee": "get_attribute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L28"}, {"caller_nid": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", "callee": "press", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L31"}, {"caller_nid": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", "callee": "wait_for_function", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L32"}, {"caller_nid": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", "callee": "get_attribute", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py", "source_location": "L37"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e3cfeb89b18b1bac17489412d2f15f55aacf66cf45fb7df24f324958a73d7291.json b/graphify-out/cache/ast/e3cfeb89b18b1bac17489412d2f15f55aacf66cf45fb7df24f324958a73d7291.json new file mode 100644 index 0000000..1ea233c --- /dev/null +++ b/graphify-out/cache/ast/e3cfeb89b18b1bac17489412d2f15f55aacf66cf45fb7df24f324958a73d7291.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "label": "wizard_project.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L1"}, {"id": "pages_wizard_project_projectwizardstate", "label": "ProjectWizardState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L61"}, {"id": "pages_wizard_project_can_advance", "label": "can_advance()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L84"}, {"id": "pages_wizard_project_preview_step_clear", "label": "preview_step_clear()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L111"}, {"id": "pages_wizard_project_disk_space_pre_flight_message", "label": "disk_space_pre_flight_message()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L121"}, {"id": "pages_wizard_project_render_project_wizard", "label": "render_project_wizard()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L131"}, {"id": "pages_wizard_project_render_project_step_fields", "label": "_render_project_step_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L285"}, {"id": "pages_wizard_project_step_helper_text", "label": "_step_helper_text()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L396"}, {"id": "pages_wizard_project_rationale_1", "label": "New Project Wizard (Frontend Spec \u00a74). Seven steps in a ``ui.stepper``: 1. LIM", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L1"}, {"id": "pages_wizard_project_rationale_62", "label": "Mutable state for the in-flight wizard.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L62"}, {"id": "pages_wizard_project_rationale_85", "label": "Return ``True`` when the active step's preconditions are satisfied. Central", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L85"}, {"id": "pages_wizard_project_rationale_112", "label": "Pre-flight checks for the Preview step (Frontend \u00a710.5.4).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L112"}, {"id": "pages_wizard_project_rationale_122", "label": "Return a copy-ready message when disk space is low; else ``None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L122"}, {"id": "pages_wizard_project_rationale_141", "label": "Render the seven-step project wizard. ``templates`` is the list of project-", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L141"}, {"id": "pages_wizard_project_rationale_294", "label": "Render the bound input fields for one project-wizard step. Each widget two-", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L294"}, {"id": "pages_wizard_project_rationale_397", "label": "Helper text rendered inside each stepper step.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L397"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "inspect", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "exlab_wizard_ui_components", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "exlab_wizard_ui_pages_templates", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "pages_wizard_project_projectwizardstate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L61", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "pages_wizard_project_can_advance", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L84", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "pages_wizard_project_preview_step_clear", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L111", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "pages_wizard_project_disk_space_pre_flight_message", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L121", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "pages_wizard_project_render_project_wizard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L131", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "pages_wizard_project_render_project_step_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L285", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "target": "pages_wizard_project_step_helper_text", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L396", "weight": 1.0}, {"source": "pages_wizard_project_can_advance", "target": "pages_wizard_project_preview_step_clear", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L107", "weight": 1.0}, {"source": "pages_wizard_project_render_project_wizard", "target": "pages_wizard_project_projectwizardstate", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L156", "weight": 1.0}, {"source": "pages_wizard_project_render_project_wizard", "target": "pages_wizard_project_can_advance", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L164", "weight": 1.0}, {"source": "pages_wizard_project_render_project_wizard", "target": "pages_wizard_project_step_helper_text", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L218", "weight": 1.0}, {"source": "pages_wizard_project_render_project_wizard", "target": "pages_wizard_project_render_project_step_fields", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L222", "weight": 1.0}, {"source": "pages_wizard_project_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_pages_wizard_project_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L1", "weight": 1.0}, {"source": "pages_wizard_project_rationale_62", "target": "pages_wizard_project_projectwizardstate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L62", "weight": 1.0}, {"source": "pages_wizard_project_rationale_85", "target": "pages_wizard_project_can_advance", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L85", "weight": 1.0}, {"source": "pages_wizard_project_rationale_112", "target": "pages_wizard_project_preview_step_clear", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L112", "weight": 1.0}, {"source": "pages_wizard_project_rationale_122", "target": "pages_wizard_project_disk_space_pre_flight_message", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L122", "weight": 1.0}, {"source": "pages_wizard_project_rationale_141", "target": "pages_wizard_project_render_project_wizard", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L141", "weight": 1.0}, {"source": "pages_wizard_project_rationale_294", "target": "pages_wizard_project_render_project_step_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L294", "weight": 1.0}, {"source": "pages_wizard_project_rationale_397", "target": "pages_wizard_project_step_helper_text", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L397", "weight": 1.0}], "raw_calls": [{"caller_nid": "pages_wizard_project_can_advance", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L99"}, {"caller_nid": "pages_wizard_project_can_advance", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L103"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L157"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L158"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L160"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L167"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L168"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L193"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L193"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "card", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L193"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L204"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L204"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L205"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L205"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L205"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L211"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "stepper", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L211"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L215"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "step", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L215"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L218"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L218"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "_variables_panel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L220"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "_progress_view", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L243"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "stepper_navigation", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L247"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L252"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L252"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "previous", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L254"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L257"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L257"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "on_cancel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L259"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L279"}, {"caller_nid": "pages_wizard_project_render_project_wizard", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L279"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L308"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L310"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L312"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "on_value_change", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L322"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L322"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "select", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L322"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L333"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L333"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L337"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "on_value_change", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L337"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L337"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L337"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "setattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L343"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "bind_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L348"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L348"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L348"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "set_visibility", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L352"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "set_visibility", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L353"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L354"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "button", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L354"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "on_click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L363"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "on_value_change", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L370"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L370"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "select", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L370"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "on_value_change", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L376"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L376"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "select", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L376"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "setattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L381"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "on_value_change", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L389"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L389"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "input", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L389"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L389"}, {"caller_nid": "pages_wizard_project_render_project_step_fields", "callee": "__setitem__", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py", "source_location": "L392"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e47a71c21f23769726116d5c5d27db5c2e9a9bae045491d589d15c36de4d024c.json b/graphify-out/cache/ast/e47a71c21f23769726116d5c5d27db5c2e9a9bae045491d589d15c36de4d024c.json new file mode 100644 index 0000000..8957f9d --- /dev/null +++ b/graphify-out/cache/ast/e47a71c21f23769726116d5c5d27db5c2e9a9bae045491d589d15c36de4d024c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_status_bar_segment_py", "label": "status_bar_segment.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L1"}, {"id": "components_status_bar_segment_segmentspec", "label": "SegmentSpec", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L32"}, {"id": "components_status_bar_segment_segment_spec", "label": "segment_spec()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L41"}, {"id": "components_status_bar_segment_status_bar_segment", "label": "status_bar_segment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L64"}, {"id": "components_status_bar_segment_rationale_1", "label": "Bottom-of-window status bar segment (Frontend Spec \u00a73.5.5). The status bar has", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L1"}, {"id": "components_status_bar_segment_rationale_33", "label": "Computed render spec for a status-bar segment.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L33"}, {"id": "components_status_bar_segment_rationale_46", "label": "Compute a :class:`SegmentSpec` from a label and state. The state controls t", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L46"}, {"id": "components_status_bar_segment_rationale_70", "label": "Build a clickable status-bar segment.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L70"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_status_bar_segment_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_status_bar_segment_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_status_bar_segment_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_status_bar_segment_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_status_bar_segment_py", "target": "components_status_bar_segment_segmentspec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_status_bar_segment_py", "target": "components_status_bar_segment_segment_spec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_status_bar_segment_py", "target": "components_status_bar_segment_status_bar_segment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L64", "weight": 1.0}, {"source": "components_status_bar_segment_segment_spec", "target": "components_status_bar_segment_segmentspec", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L61", "weight": 1.0}, {"source": "components_status_bar_segment_status_bar_segment", "target": "components_status_bar_segment_segment_spec", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L72", "weight": 1.0}, {"source": "components_status_bar_segment_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_status_bar_segment_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L1", "weight": 1.0}, {"source": "components_status_bar_segment_rationale_33", "target": "components_status_bar_segment_segmentspec", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L33", "weight": 1.0}, {"source": "components_status_bar_segment_rationale_46", "target": "components_status_bar_segment_segment_spec", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L46", "weight": 1.0}, {"source": "components_status_bar_segment_rationale_70", "target": "components_status_bar_segment_status_bar_segment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L70", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_status_bar_segment_status_bar_segment", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L79"}, {"caller_nid": "components_status_bar_segment_status_bar_segment", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L79"}, {"caller_nid": "components_status_bar_segment_status_bar_segment", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L79"}, {"caller_nid": "components_status_bar_segment_status_bar_segment", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L91"}, {"caller_nid": "components_status_bar_segment_status_bar_segment", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L91"}, {"caller_nid": "components_status_bar_segment_status_bar_segment", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L92"}, {"caller_nid": "components_status_bar_segment_status_bar_segment", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L94"}, {"caller_nid": "components_status_bar_segment_status_bar_segment", "callee": "on_click", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py", "source_location": "L94"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e550148569245fea68c5db1ba6d263fadd6aa64729d81cb02624890a6cf92cad.json b/graphify-out/cache/ast/e550148569245fea68c5db1ba6d263fadd6aa64729d81cb02624890a6cf92cad.json new file mode 100644 index 0000000..2546098 --- /dev/null +++ b/graphify-out/cache/ast/e550148569245fea68c5db1ba6d263fadd6aa64729d81cb02624890a6cf92cad.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/__init__.py", "source_location": "L1"}, {"id": "sync_init_rationale_1", "label": "Sync package. Backend Spec \u00a77. Public re-exports for the NAS sync subsystem. Ca", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_init_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/__init__.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_init_py", "target": "exlab_wizard_sync_bandwidth", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/__init__.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_init_py", "target": "exlab_wizard_sync_cleanup", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/__init__.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_init_py", "target": "exlab_wizard_sync_nas_client", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/__init__.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_init_py", "target": "exlab_wizard_sync_pre_sync_gate", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/__init__.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_init_py", "target": "exlab_wizard_sync_queue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/__init__.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_init_py", "target": "exlab_wizard_sync_transports", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/__init__.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_init_py", "target": "exlab_wizard_sync_verifier", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/__init__.py", "source_location": "L29", "weight": 1.0}, {"source": "sync_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/e56385e843d8218a58e932e0480acc139f6b5cc78e592f4700b2aae14c066e94.json b/graphify-out/cache/ast/e56385e843d8218a58e932e0480acc139f6b5cc78e592f4700b2aae14c066e94.json new file mode 100644 index 0000000..bbbed57 --- /dev/null +++ b/graphify-out/cache/ast/e56385e843d8218a58e932e0480acc139f6b5cc78e592f4700b2aae14c066e94.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_readme_md", "label": "README.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L1"}, {"id": "exlabwizard_readme_exlabwizard", "label": "ExLabWizard", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L1"}, {"id": "exlabwizard_readme_context", "label": "Context", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L10"}, {"id": "exlabwizard_readme_installation", "label": "Installation", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L20"}, {"id": "exlabwizard_readme_prerequisites", "label": "Prerequisites", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L22"}, {"id": "exlabwizard_readme_from_source_development", "label": "From source (development)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L32"}, {"id": "exlabwizard_readme_codeblock_1", "label": "code:bash (git clone https://github.com/exfab/ExLabWizard.git)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L37"}, {"id": "exlabwizard_readme_pre_built_binary", "label": "Pre-built binary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L53"}, {"id": "exlabwizard_readme_running_exlab_wizard", "label": "Running ExLab-Wizard", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L61"}, {"id": "exlabwizard_readme_codeblock_2", "label": "code:bash (uv run exlab-wizard-tray # or: source .venv/bin/activate)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L73"}, {"id": "exlabwizard_readme_building_a_distributable_binary", "label": "Building a distributable binary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L89"}, {"id": "exlabwizard_readme_codeblock_3", "label": "code:bash (./scripts/build_local.sh # macOS / Linux)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L91"}, {"id": "exlabwizard_readme_tests_lint_type_check", "label": "Tests, lint, type-check", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L100"}, {"id": "exlabwizard_readme_codeblock_4", "label": "code:bash (uv run pytest tests/unit tests/integration # fast suite)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L102"}, {"id": "exlabwizard_readme_documentation", "label": "Documentation", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L114"}], "edges": [{"source": "users_alex_projects_exlabwizard_readme_md", "target": "exlabwizard_readme_exlabwizard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L1", "weight": 1.0}, {"source": "exlabwizard_readme_exlabwizard", "target": "exlabwizard_readme_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L10", "weight": 1.0}, {"source": "exlabwizard_readme_exlabwizard", "target": "exlabwizard_readme_installation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L20", "weight": 1.0}, {"source": "exlabwizard_readme_installation", "target": "exlabwizard_readme_prerequisites", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L22", "weight": 1.0}, {"source": "exlabwizard_readme_installation", "target": "exlabwizard_readme_from_source_development", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L32", "weight": 1.0}, {"source": "exlabwizard_readme_from_source_development", "target": "exlabwizard_readme_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L37", "weight": 1.0}, {"source": "exlabwizard_readme_installation", "target": "exlabwizard_readme_pre_built_binary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L53", "weight": 1.0}, {"source": "exlabwizard_readme_exlabwizard", "target": "exlabwizard_readme_running_exlab_wizard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L61", "weight": 1.0}, {"source": "exlabwizard_readme_running_exlab_wizard", "target": "exlabwizard_readme_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L73", "weight": 1.0}, {"source": "exlabwizard_readme_exlabwizard", "target": "exlabwizard_readme_building_a_distributable_binary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L89", "weight": 1.0}, {"source": "exlabwizard_readme_building_a_distributable_binary", "target": "exlabwizard_readme_codeblock_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L91", "weight": 1.0}, {"source": "exlabwizard_readme_exlabwizard", "target": "exlabwizard_readme_tests_lint_type_check", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L100", "weight": 1.0}, {"source": "exlabwizard_readme_tests_lint_type_check", "target": "exlabwizard_readme_codeblock_4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L102", "weight": 1.0}, {"source": "exlabwizard_readme_exlabwizard", "target": "exlabwizard_readme_documentation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/README.md", "source_location": "L114", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/e6c0c5e4e0619d52122d211a1e37c954bc3b52e25d0742c76612d44c71da8afa.json b/graphify-out/cache/ast/e6c0c5e4e0619d52122d211a1e37c954bc3b52e25d0742c76612d44c71da8afa.json new file mode 100644 index 0000000..ce66206 --- /dev/null +++ b/graphify-out/cache/ast/e6c0c5e4e0619d52122d211a1e37c954bc3b52e25d0742c76612d44c71da8afa.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_06_problems_py", "label": "test_flow_06_problems.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L1"}, {"id": "e2e_test_flow_06_problems_test_flow_06_problems", "label": "test_flow_06_problems()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L19"}, {"id": "e2e_test_flow_06_problems_rationale_1", "label": "E2E flow 06: Problems view + override / revoke round trip. Frontend Spec \u00a76.6 (", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_06_problems_py", "target": "tests_e2e_page_objects_problems_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_06_problems_py", "target": "e2e_test_flow_06_problems_test_flow_06_problems", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L19", "weight": 1.0}, {"source": "e2e_test_flow_06_problems_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_06_problems_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "ProblemsPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L20"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L21"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L22"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L24"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L25"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L25"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "inner_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L28"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "row_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L28"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L29"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "row_override", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L29"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L30"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L33"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "row_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L33"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "inner_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L34"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "row_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L34"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L37"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "row_revoke", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L37"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L38"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "row_revoke", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L38"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L39"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L40"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L40"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "inner_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L41"}, {"caller_nid": "e2e_test_flow_06_problems_test_flow_06_problems", "callee": "row_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py", "source_location": "L41"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e6c9bd8509623589f20830f10c54c3d3e9513f798ab06aa317e37a4f77685b01.json b/graphify-out/cache/ast/e6c9bd8509623589f20830f10c54c3d3e9513f798ab06aa317e37a4f77685b01.json new file mode 100644 index 0000000..02c8de9 --- /dev/null +++ b/graphify-out/cache/ast/e6c9bd8509623589f20830f10c54c3d3e9513f798ab06aa317e37a4f77685b01.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "label": "test_quit_coordinator.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L1"}, {"id": "tray_test_quit_coordinator_stubserver", "label": "_StubServer", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L17"}, {"id": "tray_test_quit_coordinator_stubserver_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L18"}, {"id": "tray_test_quit_coordinator_stubserver_stop", "label": ".stop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L21"}, {"id": "tray_test_quit_coordinator_stubwindow", "label": "_StubWindow", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L25"}, {"id": "tray_test_quit_coordinator_stubwindow_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L26"}, {"id": "tray_test_quit_coordinator_stubwindow_close", "label": ".close()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L29"}, {"id": "tray_test_quit_coordinator_counted", "label": "_Counted", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L33"}, {"id": "tray_test_quit_coordinator_counted_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L34"}, {"id": "tray_test_quit_coordinator_make_coordinator", "label": "_make_coordinator()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L38"}, {"id": "tray_test_quit_coordinator_test_idle_predicate_short_circuits", "label": "test_idle_predicate_short_circuits()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L64"}, {"id": "tray_test_quit_coordinator_test_busy_predicate_times_out_and_force_quits", "label": "test_busy_predicate_times_out_and_force_quits()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L72"}, {"id": "tray_test_quit_coordinator_test_busy_predicate_wait_resets_timer", "label": "test_busy_predicate_wait_resets_timer()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L91"}, {"id": "tray_test_quit_coordinator_test_sigterm_uses_short_timeout", "label": "test_sigterm_uses_short_timeout()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L111"}, {"id": "tray_test_quit_coordinator_test_quit_handles_missing_window_launcher", "label": "test_quit_handles_missing_window_launcher()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L137"}, {"id": "tray_test_quit_coordinator_test_safe_count_handles_callable_attribute", "label": "test_safe_count_handles_callable_attribute()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L152"}, {"id": "tray_test_quit_coordinator_test_safe_count_handles_callable_that_raises", "label": "test_safe_count_handles_callable_that_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L158"}, {"id": "tray_test_quit_coordinator_test_safe_count_handles_none_obj", "label": "test_safe_count_handles_none_obj()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L168"}, {"id": "tray_test_quit_coordinator_test_safe_count_handles_non_numeric", "label": "test_safe_count_handles_non_numeric()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L172"}, {"id": "tray_test_quit_coordinator_test_force_quit_prompt_exception_defaults_to_force", "label": "test_force_quit_prompt_exception_defaults_to_force()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L179"}, {"id": "tray_test_quit_coordinator_test_default_timeout_constants_match_spec", "label": "test_default_timeout_constants_match_spec()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L192"}, {"id": "tray_test_quit_coordinator_test_idle_predicate_returns_true_immediately", "label": "test_idle_predicate_returns_true_immediately()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L199"}, {"id": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", "label": "test_predicate_eventually_becomes_true()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L208"}, {"id": "tray_test_quit_coordinator_rationale_1", "label": "Tests for :mod:`exlab_wizard.tray.quit_coordinator`. Backend Spec \u00a74.3.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L1"}, {"id": "tray_test_quit_coordinator_rationale_209", "label": "Wait loop returns True when the predicate flips mid-wait.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L209"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "exlab_wizard_tray_quit_coordinator", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_stubserver", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L17", "weight": 1.0}, {"source": "tray_test_quit_coordinator_stubserver", "target": "tray_test_quit_coordinator_stubserver_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L18", "weight": 1.0}, {"source": "tray_test_quit_coordinator_stubserver", "target": "tray_test_quit_coordinator_stubserver_stop", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_stubwindow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L25", "weight": 1.0}, {"source": "tray_test_quit_coordinator_stubwindow", "target": "tray_test_quit_coordinator_stubwindow_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L26", "weight": 1.0}, {"source": "tray_test_quit_coordinator_stubwindow", "target": "tray_test_quit_coordinator_stubwindow_close", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_counted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L33", "weight": 1.0}, {"source": "tray_test_quit_coordinator_counted", "target": "tray_test_quit_coordinator_counted_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_make_coordinator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_test_idle_predicate_short_circuits", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L64", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_test_busy_predicate_times_out_and_force_quits", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_test_busy_predicate_wait_resets_timer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L91", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_test_sigterm_uses_short_timeout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L111", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_test_quit_handles_missing_window_launcher", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L137", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_test_safe_count_handles_callable_attribute", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L152", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_test_safe_count_handles_callable_that_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L158", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_test_safe_count_handles_none_obj", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L168", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_test_safe_count_handles_non_numeric", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L172", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_test_force_quit_prompt_exception_defaults_to_force", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L179", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_test_default_timeout_constants_match_spec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L192", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_test_idle_predicate_returns_true_immediately", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L199", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "target": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L208", "weight": 1.0}, {"source": "tray_test_quit_coordinator_make_coordinator", "target": "tray_test_quit_coordinator_stubserver", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L46", "weight": 1.0}, {"source": "tray_test_quit_coordinator_make_coordinator", "target": "tray_test_quit_coordinator_stubwindow", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L47", "weight": 1.0}, {"source": "tray_test_quit_coordinator_make_coordinator", "target": "tray_test_quit_coordinator_counted", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L48", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_idle_predicate_short_circuits", "target": "tray_test_quit_coordinator_make_coordinator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L65", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_busy_predicate_times_out_and_force_quits", "target": "tray_test_quit_coordinator_make_coordinator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L79", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_busy_predicate_wait_resets_timer", "target": "tray_test_quit_coordinator_make_coordinator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L98", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_sigterm_uses_short_timeout", "target": "tray_test_quit_coordinator_make_coordinator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L117", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_quit_handles_missing_window_launcher", "target": "tray_test_quit_coordinator_stubserver", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L138", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_quit_handles_missing_window_launcher", "target": "tray_test_quit_coordinator_counted", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L142", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_safe_count_handles_callable_attribute", "target": "tray_test_quit_coordinator_counted", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L153", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_safe_count_handles_callable_that_raises", "target": "tray_test_quit_coordinator_counted", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L159", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_safe_count_handles_non_numeric", "target": "tray_test_quit_coordinator_counted", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L173", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_force_quit_prompt_exception_defaults_to_force", "target": "tray_test_quit_coordinator_make_coordinator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L183", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_idle_predicate_returns_true_immediately", "target": "tray_test_quit_coordinator_make_coordinator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L200", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", "target": "tray_test_quit_coordinator_stubserver", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L210", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", "target": "tray_test_quit_coordinator_stubwindow", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L211", "weight": 1.0}, {"source": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", "target": "tray_test_quit_coordinator_counted", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L224", "weight": 1.0}, {"source": "tray_test_quit_coordinator_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_tray_test_quit_coordinator_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_test_quit_coordinator_rationale_209", "target": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L209", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_test_quit_coordinator_counted_init", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L35"}, {"caller_nid": "tray_test_quit_coordinator_make_coordinator", "callee": "QuitCoordinator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L50"}, {"caller_nid": "tray_test_quit_coordinator_test_idle_predicate_short_circuits", "callee": "quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L66"}, {"caller_nid": "tray_test_quit_coordinator_test_busy_predicate_times_out_and_force_quits", "callee": "quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L85"}, {"caller_nid": "tray_test_quit_coordinator_test_busy_predicate_wait_resets_timer", "callee": "quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L104"}, {"caller_nid": "tray_test_quit_coordinator_test_sigterm_uses_short_timeout", "callee": "quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L131"}, {"caller_nid": "tray_test_quit_coordinator_test_quit_handles_missing_window_launcher", "callee": "QuitCoordinator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L139"}, {"caller_nid": "tray_test_quit_coordinator_test_quit_handles_missing_window_launcher", "callee": "quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L148"}, {"caller_nid": "tray_test_quit_coordinator_test_safe_count_handles_callable_attribute", "callee": "_safe_count", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L155"}, {"caller_nid": "tray_test_quit_coordinator_test_safe_count_handles_callable_that_raises", "callee": "_safe_count", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L165"}, {"caller_nid": "tray_test_quit_coordinator_test_safe_count_handles_none_obj", "callee": "_safe_count", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L169"}, {"caller_nid": "tray_test_quit_coordinator_test_safe_count_handles_non_numeric", "callee": "_safe_count", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L175"}, {"caller_nid": "tray_test_quit_coordinator_test_force_quit_prompt_exception_defaults_to_force", "callee": "quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L188"}, {"caller_nid": "tray_test_quit_coordinator_test_idle_predicate_returns_true_immediately", "callee": "_is_idle", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L202"}, {"caller_nid": "tray_test_quit_coordinator_test_idle_predicate_returns_true_immediately", "callee": "quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L203"}, {"caller_nid": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", "callee": "_Toggling", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L223"}, {"caller_nid": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", "callee": "QuitCoordinator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L225"}, {"caller_nid": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", "callee": "quit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py", "source_location": "L233"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e6e7430c22abed4e1173cf3f004fad4960dfe6b98c12630b9b8e8d9f39cdc83e.json b/graphify-out/cache/ast/e6e7430c22abed4e1173cf3f004fad4960dfe6b98c12630b9b8e8d9f39cdc83e.json new file mode 100644 index 0000000..e1e9738 --- /dev/null +++ b/graphify-out/cache/ast/e6e7430c22abed4e1173cf3f004fad4960dfe6b98c12630b9b8e8d9f39cdc83e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "label": "test_staging_page.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L1"}, {"id": "ui_test_staging_page_test_staging_dock_height_is_120_px", "label": "test_staging_dock_height_is_120_px()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L29"}, {"id": "ui_test_staging_page_test_staging_table_columns_match_brief_order", "label": "test_staging_table_columns_match_brief_order()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L33"}, {"id": "ui_test_staging_page_test_format_bytes_handles_negative_values", "label": "test_format_bytes_handles_negative_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L50"}, {"id": "ui_test_staging_page_test_format_bytes_renders_sub_kib_in_bytes", "label": "test_format_bytes_renders_sub_kib_in_bytes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L54"}, {"id": "ui_test_staging_page_test_format_bytes_renders_kib_with_one_decimal", "label": "test_format_bytes_renders_kib_with_one_decimal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L59"}, {"id": "ui_test_staging_page_test_format_bytes_renders_mib_and_gib", "label": "test_format_bytes_renders_mib_and_gib()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L64"}, {"id": "ui_test_staging_page_test_format_elapsed_seconds_only", "label": "test_format_elapsed_seconds_only()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L74"}, {"id": "ui_test_staging_page_test_format_elapsed_minutes_and_seconds", "label": "test_format_elapsed_minutes_and_seconds()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L79"}, {"id": "ui_test_staging_page_test_format_elapsed_hours_and_minutes", "label": "test_format_elapsed_hours_and_minutes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L83"}, {"id": "ui_test_staging_page_test_format_elapsed_days_and_hours", "label": "test_format_elapsed_days_and_hours()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L87"}, {"id": "ui_test_staging_page_test_format_elapsed_handles_negative", "label": "test_format_elapsed_handles_negative()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L91"}, {"id": "ui_test_staging_page_test_state_pill_props_returns_label_and_color_for_each_state", "label": "test_state_pill_props_returns_label_and_color_for_each_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L100"}, {"id": "ui_test_staging_page_test_state_pill_props_falls_back_for_unknown_state", "label": "test_state_pill_props_falls_back_for_unknown_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L112"}, {"id": "ui_test_staging_page_make_row", "label": "_make_row()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L123"}, {"id": "ui_test_staging_page_test_row_props_emits_run_label_as_leaf", "label": "test_row_props_emits_run_label_as_leaf()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L144"}, {"id": "ui_test_staging_page_test_row_props_marks_synced_rollup_as_clearable", "label": "test_row_props_marks_synced_rollup_as_clearable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L149"}, {"id": "ui_test_staging_page_test_row_props_does_not_mark_other_rollups_as_clearable", "label": "test_row_props_does_not_mark_other_rollups_as_clearable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L155"}, {"id": "ui_test_staging_page_test_row_props_formats_bytes_and_elapsed", "label": "test_row_props_formats_bytes_and_elapsed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L163"}, {"id": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", "label": "test_render_staging_dock_returns_dict_when_nicegui_unavailable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L174"}, {"id": "ui_test_staging_page_test_staging_dock_state_defaults", "label": "test_staging_dock_state_defaults()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L191"}, {"id": "ui_test_staging_page_rationale_1", "label": "Unit tests for the staging UI page. The page renders NiceGUI elements when the", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L1"}, {"id": "ui_test_staging_page_rationale_150", "label": "Only a fully-``synced`` run rollup is clearable.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L150"}, {"id": "ui_test_staging_page_rationale_175", "label": "When NiceGUI isn't importable the renderer returns a debug dict. This is th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L175"}, {"id": "ui_test_staging_page_rationale_192", "label": "An empty dock state initializes without errors.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L192"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "exlab_wizard_orchestrator_staging_query", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "exlab_wizard_ui_pages_staging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_staging_dock_height_is_120_px", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_staging_table_columns_match_brief_order", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_format_bytes_handles_negative_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L50", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_format_bytes_renders_sub_kib_in_bytes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L54", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_format_bytes_renders_kib_with_one_decimal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_format_bytes_renders_mib_and_gib", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L64", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_format_elapsed_seconds_only", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L74", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_format_elapsed_minutes_and_seconds", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L79", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_format_elapsed_hours_and_minutes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_format_elapsed_days_and_hours", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L87", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_format_elapsed_handles_negative", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L91", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_state_pill_props_returns_label_and_color_for_each_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L100", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_state_pill_props_falls_back_for_unknown_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L112", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_make_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L123", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_row_props_emits_run_label_as_leaf", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L144", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_row_props_marks_synced_rollup_as_clearable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L149", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_row_props_does_not_mark_other_rollups_as_clearable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L155", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_row_props_formats_bytes_and_elapsed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L163", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L174", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "target": "ui_test_staging_page_test_staging_dock_state_defaults", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L191", "weight": 1.0}, {"source": "ui_test_staging_page_test_row_props_emits_run_label_as_leaf", "target": "ui_test_staging_page_make_row", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L145", "weight": 1.0}, {"source": "ui_test_staging_page_test_row_props_marks_synced_rollup_as_clearable", "target": "ui_test_staging_page_make_row", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L151", "weight": 1.0}, {"source": "ui_test_staging_page_test_row_props_does_not_mark_other_rollups_as_clearable", "target": "ui_test_staging_page_make_row", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L159", "weight": 1.0}, {"source": "ui_test_staging_page_test_row_props_formats_bytes_and_elapsed", "target": "ui_test_staging_page_make_row", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L164", "weight": 1.0}, {"source": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", "target": "ui_test_staging_page_make_row", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L183", "weight": 1.0}, {"source": "ui_test_staging_page_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_staging_page_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_staging_page_rationale_150", "target": "ui_test_staging_page_test_row_props_marks_synced_rollup_as_clearable", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L150", "weight": 1.0}, {"source": "ui_test_staging_page_rationale_175", "target": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L175", "weight": 1.0}, {"source": "ui_test_staging_page_rationale_192", "target": "ui_test_staging_page_test_staging_dock_state_defaults", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L192", "weight": 1.0}], "raw_calls": [{"caller_nid": "ui_test_staging_page_test_format_bytes_handles_negative_values", "callee": "format_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L51"}, {"caller_nid": "ui_test_staging_page_test_format_bytes_renders_sub_kib_in_bytes", "callee": "format_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L55"}, {"caller_nid": "ui_test_staging_page_test_format_bytes_renders_sub_kib_in_bytes", "callee": "format_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L56"}, {"caller_nid": "ui_test_staging_page_test_format_bytes_renders_kib_with_one_decimal", "callee": "format_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L60"}, {"caller_nid": "ui_test_staging_page_test_format_bytes_renders_kib_with_one_decimal", "callee": "format_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L61"}, {"caller_nid": "ui_test_staging_page_test_format_bytes_renders_mib_and_gib", "callee": "format_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L65"}, {"caller_nid": "ui_test_staging_page_test_format_bytes_renders_mib_and_gib", "callee": "format_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L66"}, {"caller_nid": "ui_test_staging_page_test_format_elapsed_seconds_only", "callee": "format_elapsed", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L75"}, {"caller_nid": "ui_test_staging_page_test_format_elapsed_seconds_only", "callee": "format_elapsed", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L76"}, {"caller_nid": "ui_test_staging_page_test_format_elapsed_minutes_and_seconds", "callee": "format_elapsed", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L80"}, {"caller_nid": "ui_test_staging_page_test_format_elapsed_hours_and_minutes", "callee": "format_elapsed", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L84"}, {"caller_nid": "ui_test_staging_page_test_format_elapsed_days_and_hours", "callee": "format_elapsed", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L88"}, {"caller_nid": "ui_test_staging_page_test_format_elapsed_handles_negative", "callee": "format_elapsed", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L92"}, {"caller_nid": "ui_test_staging_page_test_state_pill_props_returns_label_and_color_for_each_state", "callee": "state_pill_props", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L106"}, {"caller_nid": "ui_test_staging_page_test_state_pill_props_falls_back_for_unknown_state", "callee": "state_pill_props", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L113"}, {"caller_nid": "ui_test_staging_page_make_row", "callee": "StagedRunSummary", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L131"}, {"caller_nid": "ui_test_staging_page_test_row_props_emits_run_label_as_leaf", "callee": "row_props", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L145"}, {"caller_nid": "ui_test_staging_page_test_row_props_marks_synced_rollup_as_clearable", "callee": "row_props", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L151"}, {"caller_nid": "ui_test_staging_page_test_row_props_does_not_mark_other_rollups_as_clearable", "callee": "row_props", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L159"}, {"caller_nid": "ui_test_staging_page_test_row_props_formats_bytes_and_elapsed", "callee": "row_props", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L164"}, {"caller_nid": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", "callee": "setitem", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L182"}, {"caller_nid": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", "callee": "StagingDockState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L183"}, {"caller_nid": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", "callee": "render_staging_dock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L184"}, {"caller_nid": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L185"}, {"caller_nid": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L188"}, {"caller_nid": "ui_test_staging_page_test_staging_dock_state_defaults", "callee": "StagingDockState", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py", "source_location": "L193"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e6e904a8be8205b5b43660eb953ab4ba864d6e82eaa50797ab3d447057f1aec9.json b/graphify-out/cache/ast/e6e904a8be8205b5b43660eb953ab4ba864d6e82eaa50797ab3d447057f1aec9.json new file mode 100644 index 0000000..9444f15 --- /dev/null +++ b/graphify-out/cache/ast/e6e904a8be8205b5b43660eb953ab4ba864d6e82eaa50797ab3d447057f1aec9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "label": "keyring_store.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L1"}, {"id": "lims_keyring_store_keyringstore", "label": "KeyringStore", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L62"}, {"id": "lims_keyring_store_keyringstore_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L77"}, {"id": "lims_keyring_store_keyringstore_is_keyring_available", "label": ".is_keyring_available()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L91"}, {"id": "lims_keyring_store_keyringstore_get_password", "label": ".get_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L109"}, {"id": "lims_keyring_store_keyringstore_set_password", "label": ".set_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L130"}, {"id": "lims_keyring_store_keyringstore_delete_password", "label": ".delete_password()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L144"}, {"id": "lims_keyring_store_keyringstore_fallback_get", "label": "._fallback_get()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L165"}, {"id": "lims_keyring_store_keyringstore_fallback_set", "label": "._fallback_set()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L171"}, {"id": "lims_keyring_store_keyringstore_fallback_delete", "label": "._fallback_delete()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L176"}, {"id": "lims_keyring_store_keyringstore_passphrase", "label": "._passphrase()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L184"}, {"id": "lims_keyring_store_keyringstore_derive_key", "label": "._derive_key()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L197"}, {"id": "lims_keyring_store_keyringstore_load_fallback", "label": "._load_fallback()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L209"}, {"id": "lims_keyring_store_keyringstore_save_fallback", "label": "._save_fallback()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L230"}, {"id": "lims_keyring_store_keyringstore_existing_salt", "label": "._existing_salt()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L244"}, {"id": "lims_keyring_store_decode_envelope", "label": "_decode_envelope()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L258"}, {"id": "lims_keyring_store_rationale_1", "label": "OS keyring storage with encrypted-at-rest fallback. Backend Spec \u00a77.4. Two back", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L1"}, {"id": "lims_keyring_store_rationale_63", "label": "OS keyring with encrypted-at-rest fallback. Backend Spec \u00a77.4. Tries the OS", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L63"}, {"id": "lims_keyring_store_rationale_92", "label": "Best-effort probe of the OS keyring backend. Implemented as a round-tri", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L92"}, {"id": "lims_keyring_store_rationale_110", "label": "Look up the secret for ``(KEYRING_SERVICE, username)``. Returns ``None`", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L110"}, {"id": "lims_keyring_store_rationale_131", "label": "Persist ``password`` under ``(KEYRING_SERVICE, username)``. On a keyrin", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L131"}, {"id": "lims_keyring_store_rationale_145", "label": "Remove the secret stored under ``(KEYRING_SERVICE, username)``. Missing", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L145"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "base64", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "keyring", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "keyring_errors", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "argon2_low_level", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "cryptography_fernet", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "exlab_wizard_io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "lims_keyring_store_keyringstore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L62", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore", "target": "lims_keyring_store_keyringstore_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L77", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore", "target": "lims_keyring_store_keyringstore_is_keyring_available", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L91", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore", "target": "lims_keyring_store_keyringstore_get_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L109", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore", "target": "lims_keyring_store_keyringstore_set_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L130", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore", "target": "lims_keyring_store_keyringstore_delete_password", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L144", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore", "target": "lims_keyring_store_keyringstore_fallback_get", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L165", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore", "target": "lims_keyring_store_keyringstore_fallback_set", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L171", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore", "target": "lims_keyring_store_keyringstore_fallback_delete", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L176", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore", "target": "lims_keyring_store_keyringstore_passphrase", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L184", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore", "target": "lims_keyring_store_keyringstore_derive_key", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L197", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore", "target": "lims_keyring_store_keyringstore_load_fallback", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L209", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore", "target": "lims_keyring_store_keyringstore_save_fallback", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L230", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore", "target": "lims_keyring_store_keyringstore_existing_salt", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L244", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "target": "lims_keyring_store_decode_envelope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L258", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_is_keyring_available", "target": "lims_keyring_store_keyringstore_set_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L101", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_is_keyring_available", "target": "lims_keyring_store_keyringstore_delete_password", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L102", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_get_password", "target": "lims_keyring_store_keyringstore_fallback_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L120", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_set_password", "target": "lims_keyring_store_keyringstore_fallback_set", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L142", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_delete_password", "target": "lims_keyring_store_keyringstore_fallback_delete", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L159", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_fallback_get", "target": "lims_keyring_store_keyringstore_load_fallback", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L168", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_fallback_set", "target": "lims_keyring_store_keyringstore_load_fallback", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L172", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_fallback_set", "target": "lims_keyring_store_keyringstore_save_fallback", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L174", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_fallback_delete", "target": "lims_keyring_store_keyringstore_load_fallback", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L179", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_fallback_delete", "target": "lims_keyring_store_keyringstore_save_fallback", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L182", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_load_fallback", "target": "lims_keyring_store_decode_envelope", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L215", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_load_fallback", "target": "lims_keyring_store_keyringstore_derive_key", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L218", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_load_fallback", "target": "lims_keyring_store_keyringstore_passphrase", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L218", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_save_fallback", "target": "lims_keyring_store_keyringstore_existing_salt", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L232", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_save_fallback", "target": "lims_keyring_store_keyringstore_derive_key", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L233", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_save_fallback", "target": "lims_keyring_store_keyringstore_passphrase", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L233", "weight": 1.0}, {"source": "lims_keyring_store_keyringstore_existing_salt", "target": "lims_keyring_store_decode_envelope", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L252", "weight": 1.0}, {"source": "lims_keyring_store_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_keyring_store_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L1", "weight": 1.0}, {"source": "lims_keyring_store_rationale_63", "target": "lims_keyring_store_keyringstore", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L63", "weight": 1.0}, {"source": "lims_keyring_store_rationale_92", "target": "lims_keyring_store_keyringstore_is_keyring_available", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L92", "weight": 1.0}, {"source": "lims_keyring_store_rationale_110", "target": "lims_keyring_store_keyringstore_get_password", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L110", "weight": 1.0}, {"source": "lims_keyring_store_rationale_131", "target": "lims_keyring_store_keyringstore_set_password", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L131", "weight": 1.0}, {"source": "lims_keyring_store_rationale_145", "target": "lims_keyring_store_keyringstore_delete_password", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L145", "weight": 1.0}], "raw_calls": [{"caller_nid": "lims_keyring_store_keyringstore_init", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L83"}, {"caller_nid": "lims_keyring_store_keyringstore_get_password", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L126"}, {"caller_nid": "lims_keyring_store_keyringstore_set_password", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L141"}, {"caller_nid": "lims_keyring_store_keyringstore_delete_password", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L157"}, {"caller_nid": "lims_keyring_store_keyringstore_delete_password", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L158"}, {"caller_nid": "lims_keyring_store_keyringstore_fallback_get", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L166"}, {"caller_nid": "lims_keyring_store_keyringstore_fallback_get", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L169"}, {"caller_nid": "lims_keyring_store_keyringstore_fallback_set", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L172"}, {"caller_nid": "lims_keyring_store_keyringstore_fallback_delete", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L177"}, {"caller_nid": "lims_keyring_store_keyringstore_passphrase", "callee": "KeyringUnavailableError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L190"}, {"caller_nid": "lims_keyring_store_keyringstore_passphrase", "callee": "_passphrase_provider", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L191"}, {"caller_nid": "lims_keyring_store_keyringstore_passphrase", "callee": "KeyringUnavailableError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L194"}, {"caller_nid": "lims_keyring_store_keyringstore_derive_key", "callee": "hash_secret_raw", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L198"}, {"caller_nid": "lims_keyring_store_keyringstore_derive_key", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L199"}, {"caller_nid": "lims_keyring_store_keyringstore_derive_key", "callee": "urlsafe_b64encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L207"}, {"caller_nid": "lims_keyring_store_keyringstore_load_fallback", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L211"}, {"caller_nid": "lims_keyring_store_keyringstore_load_fallback", "callee": "KeyringUnavailableError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L214"}, {"caller_nid": "lims_keyring_store_keyringstore_load_fallback", "callee": "b64decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L216"}, {"caller_nid": "lims_keyring_store_keyringstore_load_fallback", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L217"}, {"caller_nid": "lims_keyring_store_keyringstore_load_fallback", "callee": "decrypt", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L220"}, {"caller_nid": "lims_keyring_store_keyringstore_load_fallback", "callee": "Fernet", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L220"}, {"caller_nid": "lims_keyring_store_keyringstore_load_fallback", "callee": "KeyringUnavailableError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L223"}, {"caller_nid": "lims_keyring_store_keyringstore_load_fallback", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L224"}, {"caller_nid": "lims_keyring_store_keyringstore_load_fallback", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L225"}, {"caller_nid": "lims_keyring_store_keyringstore_load_fallback", "callee": "KeyringUnavailableError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L227"}, {"caller_nid": "lims_keyring_store_keyringstore_load_fallback", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L228"}, {"caller_nid": "lims_keyring_store_keyringstore_load_fallback", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L228"}, {"caller_nid": "lims_keyring_store_keyringstore_load_fallback", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L228"}, {"caller_nid": "lims_keyring_store_keyringstore_save_fallback", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L231"}, {"caller_nid": "lims_keyring_store_keyringstore_save_fallback", "callee": "urandom", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L232"}, {"caller_nid": "lims_keyring_store_keyringstore_save_fallback", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L234"}, {"caller_nid": "lims_keyring_store_keyringstore_save_fallback", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L235"}, {"caller_nid": "lims_keyring_store_keyringstore_save_fallback", "callee": "encrypt", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L235"}, {"caller_nid": "lims_keyring_store_keyringstore_save_fallback", "callee": "Fernet", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L235"}, {"caller_nid": "lims_keyring_store_keyringstore_save_fallback", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L238"}, {"caller_nid": "lims_keyring_store_keyringstore_save_fallback", "callee": "b64encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L238"}, {"caller_nid": "lims_keyring_store_keyringstore_save_fallback", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L241"}, {"caller_nid": "lims_keyring_store_keyringstore_save_fallback", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L242"}, {"caller_nid": "lims_keyring_store_keyringstore_existing_salt", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L245"}, {"caller_nid": "lims_keyring_store_keyringstore_existing_salt", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L248"}, {"caller_nid": "lims_keyring_store_keyringstore_existing_salt", "callee": "b64decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L255"}, {"caller_nid": "lims_keyring_store_decode_envelope", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L260"}, {"caller_nid": "lims_keyring_store_decode_envelope", "callee": "KeyringUnavailableError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L263"}, {"caller_nid": "lims_keyring_store_decode_envelope", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L264"}, {"caller_nid": "lims_keyring_store_decode_envelope", "callee": "KeyringUnavailableError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L266"}, {"caller_nid": "lims_keyring_store_decode_envelope", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L267"}, {"caller_nid": "lims_keyring_store_decode_envelope", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L269"}, {"caller_nid": "lims_keyring_store_decode_envelope", "callee": "KeyringUnavailableError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L272"}, {"caller_nid": "lims_keyring_store_decode_envelope", "callee": "KeyringUnavailableError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py", "source_location": "L275"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e7c3f66c822fecf15ea244be1b40a592edbe9712d30b128f2e9e77950053d366.json b/graphify-out/cache/ast/e7c3f66c822fecf15ea244be1b40a592edbe9712d30b128f2e9e77950053d366.json new file mode 100644 index 0000000..d65662f --- /dev/null +++ b/graphify-out/cache/ast/e7c3f66c822fecf15ea244be1b40a592edbe9712d30b128f2e9e77950053d366.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_09_configuration_file_md", "label": "09_Configuration_File.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/09_Configuration_File.md", "source_location": "L1"}, {"id": "design_spec_sections_09_configuration_file_9_configuration_file", "label": "9. Configuration File", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/09_Configuration_File.md", "source_location": "L1"}, {"id": "design_spec_sections_09_configuration_file_codeblock_1", "label": "code:yaml (paths:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/09_Configuration_File.md", "source_location": "L19"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_09_configuration_file_md", "target": "design_spec_sections_09_configuration_file_9_configuration_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/09_Configuration_File.md", "source_location": "L1", "weight": 1.0}, {"source": "design_spec_sections_09_configuration_file_9_configuration_file", "target": "design_spec_sections_09_configuration_file_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/09_Configuration_File.md", "source_location": "L19", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/e7c5e3bcc41ed5504d8832c8cb0b4e84d20471cbb81f40d904bc5ad16044ece6.json b/graphify-out/cache/ast/e7c5e3bcc41ed5504d8832c8cb0b4e84d20471cbb81f40d904bc5ad16044ece6.json new file mode 100644 index 0000000..0dfc4c8 --- /dev/null +++ b/graphify-out/cache/ast/e7c5e3bcc41ed5504d8832c8cb0b4e84d20471cbb81f40d904bc5ad16044ece6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "label": "sync_state_writer.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L1"}, {"id": "cache_sync_state_writer_sync_state_path", "label": "_sync_state_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L52"}, {"id": "cache_sync_state_writer_ensure_cache_dir", "label": "_ensure_cache_dir()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L57"}, {"id": "cache_sync_state_writer_empty_state", "label": "_empty_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L69"}, {"id": "cache_sync_state_writer_syncstatewriter", "label": "SyncStateWriter", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L74"}, {"id": "cache_sync_state_writer_syncstatewriter_read", "label": ".read()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L82"}, {"id": "cache_sync_state_writer_syncstatewriter_read_sync", "label": ".read_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L92"}, {"id": "cache_sync_state_writer_syncstatewriter_upsert_file", "label": ".upsert_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L108"}, {"id": "cache_sync_state_writer_syncstatewriter_set_keep_local", "label": ".set_keep_local()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L147"}, {"id": "cache_sync_state_writer_syncstatewriter_mark_cleared", "label": ".mark_cleared()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L161"}, {"id": "cache_sync_state_writer_syncstatewriter_mark_cleared_sync", "label": ".mark_cleared_sync()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L169"}, {"id": "cache_sync_state_writer_rollup_state", "label": "rollup_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L180"}, {"id": "cache_sync_state_writer_syncstatewriter_read_blocking", "label": "._read_blocking()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L202"}, {"id": "cache_sync_state_writer_decode_locked", "label": "_decode_locked()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L208"}, {"id": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "label": "._upsert_file_blocking()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L217"}, {"id": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "label": "._set_keep_local_blocking()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L256"}, {"id": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", "label": "._mark_cleared_blocking()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L278"}, {"id": "cache_sync_state_writer_with_file", "label": "_with_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L289"}, {"id": "cache_sync_state_writer_rationale_1", "label": "Orchestrator-only writer for ``sync_state.json``. Operator-free per-file NAS sy", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L1"}, {"id": "cache_sync_state_writer_rationale_53", "label": "Return the ``sync_state.json`` path under a run directory.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L53"}, {"id": "cache_sync_state_writer_rationale_58", "label": "Create ``path``'s parent (the run's ``.exlab-wizard/`` cache) dir. Neither", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L58"}, {"id": "cache_sync_state_writer_rationale_70", "label": "Return a fresh, file-less :class:`SyncStateJson` at the current version.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L70"}, {"id": "cache_sync_state_writer_rationale_75", "label": "Writer for ``sync_state.json``. Orchestrator-mode only. All public methods", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L75"}, {"id": "cache_sync_state_writer_rationale_83", "label": "Read and decode the run's ``sync_state.json``. Returns a fresh empty :c", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L83"}, {"id": "cache_sync_state_writer_rationale_93", "label": "Blocking variant of :meth:`read` for synchronous callers. :meth:`read`", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L93"}, {"id": "cache_sync_state_writer_rationale_117", "label": "Create or update one file record under an exclusive lock. The record fo", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L117"}, {"id": "cache_sync_state_writer_rationale_153", "label": "Toggle a file's ``keep_local`` flag, creating the record if absent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L153"}, {"id": "cache_sync_state_writer_rationale_162", "label": "Stamp ``cleared_at`` with the current UTC time. Called once the run's s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L162"}, {"id": "cache_sync_state_writer_rationale_170", "label": "Blocking variant of :meth:`mark_cleared` for synchronous callers. Used", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L170"}, {"id": "cache_sync_state_writer_rationale_181", "label": "Derive the run-level :class:`RunSyncState` rollup from ``state``. Pure", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L181"}, {"id": "cache_sync_state_writer_rationale_209", "label": "Decode ``sync_state.json``, returning an empty state if absent. Caller", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L209"}, {"id": "cache_sync_state_writer_rationale_294", "label": "Return a copy of ``payload`` with ``files[rel_path]`` set to ``record``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L294"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "filelock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "exlab_wizard_cache", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "exlab_wizard_cache_sync_state_schema", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "exlab_wizard_io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "cache_sync_state_writer_sync_state_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "cache_sync_state_writer_ensure_cache_dir", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "cache_sync_state_writer_empty_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "cache_sync_state_writer_syncstatewriter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L74", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter", "target": "cache_sync_state_writer_syncstatewriter_read", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L82", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter", "target": "cache_sync_state_writer_syncstatewriter_read_sync", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L92", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter", "target": "cache_sync_state_writer_syncstatewriter_upsert_file", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L108", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter", "target": "cache_sync_state_writer_syncstatewriter_set_keep_local", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L147", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter", "target": "cache_sync_state_writer_syncstatewriter_mark_cleared", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L161", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter", "target": "cache_sync_state_writer_syncstatewriter_mark_cleared_sync", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L169", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "cache_sync_state_writer_rollup_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L180", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter", "target": "cache_sync_state_writer_syncstatewriter_read_blocking", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L202", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "cache_sync_state_writer_decode_locked", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L208", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter", "target": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L217", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter", "target": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L256", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter", "target": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L278", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "target": "cache_sync_state_writer_with_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L289", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_read_sync", "target": "cache_sync_state_writer_syncstatewriter_read_blocking", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L106", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_mark_cleared_sync", "target": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L177", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_read_blocking", "target": "cache_sync_state_writer_sync_state_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L203", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_read_blocking", "target": "cache_sync_state_writer_decode_locked", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L205", "weight": 1.0}, {"source": "cache_sync_state_writer_decode_locked", "target": "cache_sync_state_writer_empty_state", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L214", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "target": "cache_sync_state_writer_sync_state_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L225", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "target": "cache_sync_state_writer_ensure_cache_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L226", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "target": "cache_sync_state_writer_decode_locked", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L228", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "target": "cache_sync_state_writer_with_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L246", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "target": "cache_sync_state_writer_sync_state_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L262", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "target": "cache_sync_state_writer_ensure_cache_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L263", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "target": "cache_sync_state_writer_decode_locked", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L265", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "target": "cache_sync_state_writer_with_file", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L268", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", "target": "cache_sync_state_writer_sync_state_path", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L279", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", "target": "cache_sync_state_writer_ensure_cache_dir", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L280", "weight": 1.0}, {"source": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", "target": "cache_sync_state_writer_decode_locked", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L282", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_sync_state_writer_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L1", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_53", "target": "cache_sync_state_writer_sync_state_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L53", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_58", "target": "cache_sync_state_writer_ensure_cache_dir", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L58", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_70", "target": "cache_sync_state_writer_empty_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L70", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_75", "target": "cache_sync_state_writer_syncstatewriter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L75", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_83", "target": "cache_sync_state_writer_syncstatewriter_read", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L83", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_93", "target": "cache_sync_state_writer_syncstatewriter_read_sync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L93", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_117", "target": "cache_sync_state_writer_syncstatewriter_upsert_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L117", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_153", "target": "cache_sync_state_writer_syncstatewriter_set_keep_local", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L153", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_162", "target": "cache_sync_state_writer_syncstatewriter_mark_cleared", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L162", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_170", "target": "cache_sync_state_writer_syncstatewriter_mark_cleared_sync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L170", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_181", "target": "cache_sync_state_writer_syncstatewriter_rollup_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L181", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_209", "target": "cache_sync_state_writer_syncstatewriter_decode_locked", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L209", "weight": 1.0}, {"source": "cache_sync_state_writer_rationale_294", "target": "cache_sync_state_writer_syncstatewriter_with_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L294", "weight": 1.0}], "raw_calls": [{"caller_nid": "cache_sync_state_writer_sync_state_path", "callee": "cache_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L54"}, {"caller_nid": "cache_sync_state_writer_ensure_cache_dir", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L66"}, {"caller_nid": "cache_sync_state_writer_empty_state", "callee": "SyncStateJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L71"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_read", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L90"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_upsert_file", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L138"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_set_keep_local", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L154"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_mark_cleared", "callee": "to_thread", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L167"}, {"caller_nid": "cache_sync_state_writer_rollup_state", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L196"}, {"caller_nid": "cache_sync_state_writer_rollup_state", "callee": "values", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L196"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_read_blocking", "callee": "FileLock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L204"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_read_blocking", "callee": "lock_path_for", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L204"}, {"caller_nid": "cache_sync_state_writer_decode_locked", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L213"}, {"caller_nid": "cache_sync_state_writer_decode_locked", "callee": "read_msgspec_json", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L215"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "callee": "FileLock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L227"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "callee": "lock_path_for", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L227"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L229"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "callee": "FileSyncRecord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L229"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "callee": "replace", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L238"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L247"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L247"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L248"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "callee": "FileLock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L264"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "callee": "lock_path_for", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L264"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L266"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "callee": "FileSyncRecord", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L266"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "callee": "replace", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L267"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L269"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L269"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L270"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", "callee": "FileLock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L281"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", "callee": "lock_path_for", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L281"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", "callee": "replace", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L283"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L283"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L284"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L284"}, {"caller_nid": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L285"}, {"caller_nid": "cache_sync_state_writer_with_file", "callee": "replace", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py", "source_location": "L300"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e7e3743bd7f85b481236c859a36c988073916c1f9e3176c626991cda7f90c055.json b/graphify-out/cache/ast/e7e3743bd7f85b481236c859a36c988073916c1f9e3176c626991cda7f90c055.json new file mode 100644 index 0000000..80f72c8 --- /dev/null +++ b/graphify-out/cache/ast/e7e3743bd7f85b481236c859a36c988073916c1f9e3176c626991cda7f90c055.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_design_py", "label": "design.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/design.py", "source_location": "L1"}, {"id": "ui_design_rationale_1", "label": "Design tokens. Mirrors DESIGN.md verbatim with the Frontend Spec \u00a72.1 typography", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/design.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_design_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/design.py", "source_location": "L16", "weight": 1.0}, {"source": "ui_design_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_design_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/design.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/e8cbb7d0fbbb42368d94e75e66ac7fc467ec686d9dc746aaa3d9ddb3c8df8a36.json b/graphify-out/cache/ast/e8cbb7d0fbbb42368d94e75e66ac7fc467ec686d9dc746aaa3d9ddb3c8df8a36.json new file mode 100644 index 0000000..f6c09f1 --- /dev/null +++ b/graphify-out/cache/ast/e8cbb7d0fbbb42368d94e75e66ac7fc467ec686d9dc746aaa3d9ddb3c8df8a36.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "label": "test_design.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L1"}, {"id": "ui_test_design_test_primary_palette_matches_designmd", "label": "test_primary_palette_matches_designmd()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L14"}, {"id": "ui_test_design_test_okabe_ito_palette_matches_designmd", "label": "test_okabe_ito_palette_matches_designmd()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L29"}, {"id": "ui_test_design_test_semantic_aliases_are_okabe_ito", "label": "test_semantic_aliases_are_okabe_ito()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L42"}, {"id": "ui_test_design_test_warning_token_is_oi_orange", "label": "test_warning_token_is_oi_orange()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L51"}, {"id": "ui_test_design_test_typography_uses_frontend_override", "label": "test_typography_uses_frontend_override()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L57"}, {"id": "ui_test_design_test_type_scale_matches_designmd", "label": "test_type_scale_matches_designmd()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L67"}, {"id": "ui_test_design_test_spacing_scale_4px_grid", "label": "test_spacing_scale_4px_grid()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L81"}, {"id": "ui_test_design_test_radius_tokens_match_designmd", "label": "test_radius_tokens_match_designmd()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L98"}, {"id": "ui_test_design_test_shadows_are_navy_tinted", "label": "test_shadows_are_navy_tinted()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L107"}, {"id": "ui_test_design_test_motion_tokens_match_designmd", "label": "test_motion_tokens_match_designmd()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L114"}, {"id": "ui_test_design_test_okabe_ito_series_order_is_fixed", "label": "test_okabe_ito_series_order_is_fixed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L121"}, {"id": "ui_test_design_test_vermilion_is_last_in_series", "label": "test_vermilion_is_last_in_series()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L135"}, {"id": "ui_test_design_test_no_blue_collision_in_series_first_six", "label": "test_no_blue_collision_in_series_first_six()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L141"}, {"id": "ui_test_design_test_badge_text_variants_are_wcag_aa", "label": "test_badge_text_variants_are_wcag_aa()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L152"}, {"id": "ui_test_design_test_alert_text_variants_match_designmd", "label": "test_alert_text_variants_match_designmd()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L164"}, {"id": "ui_test_design_test_yellow_is_present_but_only_for_fills", "label": "test_yellow_is_present_but_only_for_fills()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L175"}, {"id": "ui_test_design_rationale_1", "label": "Token-equality tests for :mod:`exlab_wizard.ui.design`. The tests assert each c", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L1"}, {"id": "ui_test_design_rationale_15", "label": "Primary palette hexes are verbatim from DESIGN.md \u00a701.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L15"}, {"id": "ui_test_design_rationale_30", "label": "Okabe-Ito hexes are verbatim from DESIGN.md \u00a701.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L30"}, {"id": "ui_test_design_rationale_43", "label": "Semantic tokens alias the Okabe-Ito palette per DESIGN.md \u00a701.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L43"}, {"id": "ui_test_design_rationale_52", "label": "Frontend \u00a72.1.4: warning is canonically ``--oi-orange``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L52"}, {"id": "ui_test_design_rationale_58", "label": "Frontend \u00a72.1.3 overrides DM Sans / DM Mono with IBM Plex / system mono.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L58"}, {"id": "ui_test_design_rationale_68", "label": "Type scale tokens are verbatim from DESIGN.md \u00a702.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L68"}, {"id": "ui_test_design_rationale_82", "label": "Spacing tokens follow the 4px grid (DESIGN.md \u00a703).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L82"}, {"id": "ui_test_design_rationale_99", "label": "Border radius tokens (DESIGN.md \u00a704).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L99"}, {"id": "ui_test_design_rationale_108", "label": "All shadow definitions use ``rgba(0,54,96,...)`` (DESIGN.md \u00a704).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L108"}, {"id": "ui_test_design_rationale_115", "label": "Motion tokens (DESIGN.md \u00a707).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L115"}, {"id": "ui_test_design_rationale_122", "label": "Series order is fixed (DESIGN.md absolute constraint).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L122"}, {"id": "ui_test_design_rationale_136", "label": "Vermilion is reserved for the error / alert series (DESIGN.md \u00a706).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L136"}, {"id": "ui_test_design_rationale_142", "label": "Frontend rules (DESIGN.md): series 5 is OI_BLUE but only after 4 prior series.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L142"}, {"id": "ui_test_design_rationale_153", "label": "Badge text variants are the documented darkened hexes (DESIGN.md \u00a705).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L153"}, {"id": "ui_test_design_rationale_165", "label": "Alert text variants are the documented hexes (DESIGN.md \u00a705).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L165"}, {"id": "ui_test_design_rationale_176", "label": "``#F0E442`` is exposed as a token but never used for chrome. The chip strip", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L176"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "exlab_wizard_ui", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_primary_palette_matches_designmd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_okabe_ito_palette_matches_designmd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_semantic_aliases_are_okabe_ito", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_warning_token_is_oi_orange", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_typography_uses_frontend_override", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_type_scale_matches_designmd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_spacing_scale_4px_grid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_radius_tokens_match_designmd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L98", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_shadows_are_navy_tinted", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L107", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_motion_tokens_match_designmd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L114", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_okabe_ito_series_order_is_fixed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L121", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_vermilion_is_last_in_series", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_no_blue_collision_in_series_first_six", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L141", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_badge_text_variants_are_wcag_aa", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L152", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_alert_text_variants_match_designmd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L164", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "target": "ui_test_design_test_yellow_is_present_but_only_for_fills", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L175", "weight": 1.0}, {"source": "ui_test_design_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_ui_test_design_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L1", "weight": 1.0}, {"source": "ui_test_design_rationale_15", "target": "ui_test_design_test_primary_palette_matches_designmd", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L15", "weight": 1.0}, {"source": "ui_test_design_rationale_30", "target": "ui_test_design_test_okabe_ito_palette_matches_designmd", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L30", "weight": 1.0}, {"source": "ui_test_design_rationale_43", "target": "ui_test_design_test_semantic_aliases_are_okabe_ito", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L43", "weight": 1.0}, {"source": "ui_test_design_rationale_52", "target": "ui_test_design_test_warning_token_is_oi_orange", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L52", "weight": 1.0}, {"source": "ui_test_design_rationale_58", "target": "ui_test_design_test_typography_uses_frontend_override", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L58", "weight": 1.0}, {"source": "ui_test_design_rationale_68", "target": "ui_test_design_test_type_scale_matches_designmd", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L68", "weight": 1.0}, {"source": "ui_test_design_rationale_82", "target": "ui_test_design_test_spacing_scale_4px_grid", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L82", "weight": 1.0}, {"source": "ui_test_design_rationale_99", "target": "ui_test_design_test_radius_tokens_match_designmd", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L99", "weight": 1.0}, {"source": "ui_test_design_rationale_108", "target": "ui_test_design_test_shadows_are_navy_tinted", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L108", "weight": 1.0}, {"source": "ui_test_design_rationale_115", "target": "ui_test_design_test_motion_tokens_match_designmd", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L115", "weight": 1.0}, {"source": "ui_test_design_rationale_122", "target": "ui_test_design_test_okabe_ito_series_order_is_fixed", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L122", "weight": 1.0}, {"source": "ui_test_design_rationale_136", "target": "ui_test_design_test_vermilion_is_last_in_series", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L136", "weight": 1.0}, {"source": "ui_test_design_rationale_142", "target": "ui_test_design_test_no_blue_collision_in_series_first_six", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L142", "weight": 1.0}, {"source": "ui_test_design_rationale_153", "target": "ui_test_design_test_badge_text_variants_are_wcag_aa", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L153", "weight": 1.0}, {"source": "ui_test_design_rationale_165", "target": "ui_test_design_test_alert_text_variants_match_designmd", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L165", "weight": 1.0}, {"source": "ui_test_design_rationale_176", "target": "ui_test_design_test_yellow_is_present_but_only_for_fills", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py", "source_location": "L176", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/e92a6c70f9290ca37b6f6600f040c6b6ecf282aec60b85edb8ae24f234efd319.json b/graphify-out/cache/ast/e92a6c70f9290ca37b6f6600f040c6b6ecf282aec60b85edb8ae24f234efd319.json new file mode 100644 index 0000000..43496db --- /dev/null +++ b/graphify-out/cache/ast/e92a6c70f9290ca37b6f6600f040c6b6ecf282aec60b85edb8ae24f234efd319.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_16_add_equipment_py", "label": "test_flow_16_add_equipment.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L1"}, {"id": "e2e_test_flow_16_add_equipment_goto", "label": "_goto()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L20"}, {"id": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", "label": "test_flow_16_add_equipment_identity_step()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L33"}, {"id": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_paths_step", "label": "test_flow_16_add_equipment_paths_step()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L44"}, {"id": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_sync_mode_step", "label": "test_flow_16_add_equipment_sync_mode_step()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L52"}, {"id": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", "label": "test_flow_16_add_equipment_review_and_confirm()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L59"}, {"id": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "label": "test_flow_16_next_enables_on_valid_input_and_state_survives_back()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L69"}, {"id": "e2e_test_flow_16_add_equipment_rationale_1", "label": "E2E flow 16: Add-Equipment wizard (Redesign \u00a76). Drives the four-step wizard en", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L1"}, {"id": "e2e_test_flow_16_add_equipment_rationale_34", "label": "Identity step renders the ID + label inputs.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L34"}, {"id": "e2e_test_flow_16_add_equipment_rationale_45", "label": "Paths step renders local + NAS root inputs.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L45"}, {"id": "e2e_test_flow_16_add_equipment_rationale_53", "label": "Sync mode step renders the nas/stage radio.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L53"}, {"id": "e2e_test_flow_16_add_equipment_rationale_60", "label": "Review step renders Confirm; clicking it fires the success label.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L60"}, {"id": "e2e_test_flow_16_add_equipment_rationale_70", "label": "An empty wizard: Next stays disabled until the identity step is valid, then", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L70"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_16_add_equipment_py", "target": "playwright_sync_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_16_add_equipment_py", "target": "tests_e2e_page_objects_wizard_equipment_page", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_16_add_equipment_py", "target": "e2e_test_flow_16_add_equipment_goto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_16_add_equipment_py", "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_16_add_equipment_py", "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_paths_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_16_add_equipment_py", "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_sync_mode_step", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_16_add_equipment_py", "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_16_add_equipment_py", "target": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L69", "weight": 1.0}, {"source": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", "target": "e2e_test_flow_16_add_equipment_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L36", "weight": 1.0}, {"source": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_paths_step", "target": "e2e_test_flow_16_add_equipment_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L47", "weight": 1.0}, {"source": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_sync_mode_step", "target": "e2e_test_flow_16_add_equipment_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L55", "weight": 1.0}, {"source": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", "target": "e2e_test_flow_16_add_equipment_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L62", "weight": 1.0}, {"source": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "target": "e2e_test_flow_16_add_equipment_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L80", "weight": 1.0}, {"source": "e2e_test_flow_16_add_equipment_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_16_add_equipment_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L1", "weight": 1.0}, {"source": "e2e_test_flow_16_add_equipment_rationale_34", "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L34", "weight": 1.0}, {"source": "e2e_test_flow_16_add_equipment_rationale_45", "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_paths_step", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L45", "weight": 1.0}, {"source": "e2e_test_flow_16_add_equipment_rationale_53", "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_sync_mode_step", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L53", "weight": 1.0}, {"source": "e2e_test_flow_16_add_equipment_rationale_60", "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L60", "weight": 1.0}, {"source": "e2e_test_flow_16_add_equipment_rationale_70", "target": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L70", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_16_add_equipment_goto", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L22"}, {"caller_nid": "e2e_test_flow_16_add_equipment_goto", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L24"}, {"caller_nid": "e2e_test_flow_16_add_equipment_goto", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L25"}, {"caller_nid": "e2e_test_flow_16_add_equipment_goto", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L29"}, {"caller_nid": "e2e_test_flow_16_add_equipment_goto", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L30"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", "callee": "WizardEquipmentPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L35"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L37"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L38"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L39"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L40"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L41"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_paths_step", "callee": "WizardEquipmentPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L46"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_paths_step", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L48"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_paths_step", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L49"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_sync_mode_step", "callee": "WizardEquipmentPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L54"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_sync_mode_step", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L56"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", "callee": "WizardEquipmentPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L61"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L63"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L64"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L65"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L66"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "WizardEquipmentPage", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L79"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L81"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "to_be_disabled", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L84"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "expect", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L84"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L85"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "fill", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L86"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "to_be_enabled", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L87"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "expect", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L87"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L90"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L91"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L94"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L95"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "to_have_value", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L96"}, {"caller_nid": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", "callee": "expect", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py", "source_location": "L96"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/e9f486d0444e29e9f2125421188b9039c1aed3710f3e68b1c38aab6465ecee7e.json b/graphify-out/cache/ast/e9f486d0444e29e9f2125421188b9039c1aed3710f3e68b1c38aab6465ecee7e.json new file mode 100644 index 0000000..9c38937 --- /dev/null +++ b/graphify-out/cache/ast/e9f486d0444e29e9f2125421188b9039c1aed3710f3e68b1c38aab6465ecee7e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/__init__.py", "source_location": "L1"}, {"id": "exlab_wizard_init_rationale_1", "label": "ExLab-Wizard package root. Backend Spec \u00a74.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/__init__.py", "source_location": "L1"}], "edges": [{"source": "exlab_wizard_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/ea0bb8bb0882017edeb034e7f852b03a27c531e0b11f91d50cdf8852cb068079.json b/graphify-out/cache/ast/ea0bb8bb0882017edeb034e7f852b03a27c531e0b11f91d50cdf8852cb068079.json new file mode 100644 index 0000000..0ddb424 --- /dev/null +++ b/graphify-out/cache/ast/ea0bb8bb0882017edeb034e7f852b03a27c531e0b11f91d50cdf8852cb068079.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_10_readme_generation_md", "label": "10_README_Generation.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L1"}, {"id": "design_spec_sections_10_readme_generation_10_readme_generation", "label": "10. README Generation", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L1"}, {"id": "design_spec_sections_10_readme_generation_10_1_when_it_runs", "label": "10.1 When It Runs", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L9"}, {"id": "design_spec_sections_10_readme_generation_codeblock_1", "label": "code:yaml (# In a template's copier.yml)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L15"}, {"id": "design_spec_sections_10_readme_generation_10_2_field_sources_merged_layers", "label": "10.2 Field Sources (Merged Layers)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L26"}, {"id": "design_spec_sections_10_readme_generation_10_3_field_types", "label": "10.3 Field Types", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L39"}, {"id": "design_spec_sections_10_readme_generation_codeblock_2", "label": "code:yaml (_exlab_readme:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L53"}, {"id": "design_spec_sections_10_readme_generation_10_4_user_added_custom_fields", "label": "10.4 User-Added Custom Fields", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L72"}, {"id": "design_spec_sections_10_readme_generation_10_5_pre_fill_behavior", "label": "10.5 Pre-fill Behavior", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L80"}, {"id": "design_spec_sections_10_readme_generation_10_6_auto_filled_system_fields", "label": "10.6 Auto-Filled System Fields", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L86"}, {"id": "design_spec_sections_10_readme_generation_10_7_output_format", "label": "10.7 Output Format", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L101"}, {"id": "design_spec_sections_10_readme_generation_codeblock_3", "label": "code:markdown (---)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L115"}, {"id": "design_spec_sections_10_readme_generation_10_7_1_machine_query_examples", "label": "10.7.1 Machine Query Examples", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L169"}, {"id": "design_spec_sections_10_readme_generation_codeblock_4", "label": "code:python (# Illustrative -- not implementation code)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L173"}, {"id": "design_spec_sections_10_readme_generation_10_7_2_prose_body", "label": "10.7.2 Prose Body", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L209"}, {"id": "design_spec_sections_10_readme_generation_10_8_readme_plugin_hook_removed_in_v0_7", "label": "10.8 README Plugin Hook (Removed in v0.7)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L215"}], "edges": [{"source": "users_alex_projects_exlabwizard_design_specs_design_spec_sections_10_readme_generation_md", "target": "design_spec_sections_10_readme_generation_10_readme_generation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L1", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_readme_generation", "target": "design_spec_sections_10_readme_generation_10_1_when_it_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L9", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_1_when_it_runs", "target": "design_spec_sections_10_readme_generation_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L15", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_readme_generation", "target": "design_spec_sections_10_readme_generation_10_2_field_sources_merged_layers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L26", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_readme_generation", "target": "design_spec_sections_10_readme_generation_10_3_field_types", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L39", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_3_field_types", "target": "design_spec_sections_10_readme_generation_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L53", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_readme_generation", "target": "design_spec_sections_10_readme_generation_10_4_user_added_custom_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L72", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_readme_generation", "target": "design_spec_sections_10_readme_generation_10_5_pre_fill_behavior", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L80", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_readme_generation", "target": "design_spec_sections_10_readme_generation_10_6_auto_filled_system_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L86", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_readme_generation", "target": "design_spec_sections_10_readme_generation_10_7_output_format", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L101", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_7_output_format", "target": "design_spec_sections_10_readme_generation_codeblock_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L115", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_7_output_format", "target": "design_spec_sections_10_readme_generation_10_7_1_machine_query_examples", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L169", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_7_1_machine_query_examples", "target": "design_spec_sections_10_readme_generation_codeblock_4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L173", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_7_output_format", "target": "design_spec_sections_10_readme_generation_10_7_2_prose_body", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L209", "weight": 1.0}, {"source": "design_spec_sections_10_readme_generation_10_readme_generation", "target": "design_spec_sections_10_readme_generation_10_8_readme_plugin_hook_removed_in_v0_7", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md", "source_location": "L215", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/ea22edfae20ea256789effec62395a2be76afb9dc2f8d92c05fc6fd43ab51618.json b/graphify-out/cache/ast/ea22edfae20ea256789effec62395a2be76afb9dc2f8d92c05fc6fd43ab51618.json new file mode 100644 index 0000000..9daa3c5 --- /dev/null +++ b/graphify-out/cache/ast/ea22edfae20ea256789effec62395a2be76afb9dc2f8d92c05fc6fd43ab51618.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_policy_violation_plugin_plugin_py", "label": "plugin.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L1"}, {"id": "policy_violation_plugin_plugin_policyviolationplugin", "label": "PolicyViolationPlugin", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L18"}, {"id": "plugin", "label": "Plugin", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "policy_violation_plugin_plugin_policyviolationplugin_can_handle", "label": ".can_handle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L26"}, {"id": "policy_violation_plugin_plugin_policyviolationplugin_transform", "label": ".transform()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L29"}, {"id": "policy_violation_plugin_plugin_rationale_1", "label": "policy_violation_plugin -- exercises Backend Spec \u00a76.1.5 enforcement. The plugi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L1"}, {"id": "policy_violation_plugin_plugin_rationale_19", "label": "Write into ``README.md`` (a wizard-controlled file).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L19"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_policy_violation_plugin_plugin_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_policy_violation_plugin_plugin_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_policy_violation_plugin_plugin_py", "target": "exlab_wizard_plugins", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_policy_violation_plugin_plugin_py", "target": "policy_violation_plugin_plugin_policyviolationplugin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L18", "weight": 1.0}, {"source": "policy_violation_plugin_plugin_policyviolationplugin", "target": "plugin", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L18", "weight": 1.0}, {"source": "policy_violation_plugin_plugin_policyviolationplugin", "target": "policy_violation_plugin_plugin_policyviolationplugin_can_handle", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L26", "weight": 1.0}, {"source": "policy_violation_plugin_plugin_policyviolationplugin", "target": "policy_violation_plugin_plugin_policyviolationplugin_transform", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L29", "weight": 1.0}, {"source": "policy_violation_plugin_plugin_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_policy_violation_plugin_plugin_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L1", "weight": 1.0}, {"source": "policy_violation_plugin_plugin_rationale_19", "target": "policy_violation_plugin_plugin_policyviolationplugin", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L19", "weight": 1.0}], "raw_calls": [{"caller_nid": "policy_violation_plugin_plugin_policyviolationplugin_transform", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", "source_location": "L33"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/eb0cefeb60ab66dd44da25b9bd7434427e3940af12d9410878b4ac9b068805ce.json b/graphify-out/cache/ast/eb0cefeb60ab66dd44da25b9bd7434427e3940af12d9410878b4ac9b068805ce.json new file mode 100644 index 0000000..928fecd --- /dev/null +++ b/graphify-out/cache/ast/eb0cefeb60ab66dd44da25b9bd7434427e3940af12d9410878b4ac9b068805ce.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_user_guide_02_browse_md", "label": "02_browse.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L1"}, {"id": "user_guide_02_browse_3_4_browse_existing_equipment_projects_and_runs", "label": "3.4 Browse Existing Equipment, Projects, and Runs", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L1"}, {"id": "user_guide_02_browse_capability_summary", "label": "Capability summary", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L3"}, {"id": "user_guide_02_browse_walkthrough", "label": "Walkthrough", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L20"}, {"id": "user_guide_02_browse_screenshots", "label": "Screenshots", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L51"}, {"id": "user_guide_02_browse_codeblock_1", "label": "code:{image} (:alt: File-explorer main window, no node selected)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L53"}, {"id": "user_guide_02_browse_codeblock_2", "label": "code:{image} (:alt: File explorer with a project selected -- tree, file li)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L58"}, {"id": "user_guide_02_browse_related_material", "label": "Related material", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L63"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_user_guide_02_browse_md", "target": "user_guide_02_browse_3_4_browse_existing_equipment_projects_and_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L1", "weight": 1.0}, {"source": "user_guide_02_browse_3_4_browse_existing_equipment_projects_and_runs", "target": "user_guide_02_browse_capability_summary", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L3", "weight": 1.0}, {"source": "user_guide_02_browse_3_4_browse_existing_equipment_projects_and_runs", "target": "user_guide_02_browse_walkthrough", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L20", "weight": 1.0}, {"source": "user_guide_02_browse_3_4_browse_existing_equipment_projects_and_runs", "target": "user_guide_02_browse_screenshots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L51", "weight": 1.0}, {"source": "user_guide_02_browse_screenshots", "target": "user_guide_02_browse_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L53", "weight": 1.0}, {"source": "user_guide_02_browse_screenshots", "target": "user_guide_02_browse_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L58", "weight": 1.0}, {"source": "user_guide_02_browse_3_4_browse_existing_equipment_projects_and_runs", "target": "user_guide_02_browse_related_material", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md", "source_location": "L63", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/eb28c0c3262a85ded032ff2c951d2aeec0ff331deddb539a91a758ca9f770b1f.json b/graphify-out/cache/ast/eb28c0c3262a85ded032ff2c951d2aeec0ff331deddb539a91a758ca9f770b1f.json new file mode 100644 index 0000000..07b0479 --- /dev/null +++ b/graphify-out/cache/ast/eb28c0c3262a85ded032ff2c951d2aeec0ff331deddb539a91a758ca9f770b1f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "label": "test_icon.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L1"}, {"id": "tray_test_icon_fakemenu", "label": "_FakeMenu", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L18"}, {"id": "tray_test_icon_fakemenu_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L21"}, {"id": "tray_test_icon_fakemenuitem", "label": "_FakeMenuItem", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L25"}, {"id": "tray_test_icon_fakemenuitem_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L26"}, {"id": "tray_test_icon_fakeicon", "label": "_FakeIcon", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L40"}, {"id": "tray_test_icon_fakeicon_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L41"}, {"id": "tray_test_icon_fakepystray", "label": "_FakePystray", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L48"}, {"id": "tray_test_icon_test_build_icon_returns_icon_object", "label": "test_build_icon_returns_icon_object()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L54"}, {"id": "tray_test_icon_test_open_menu_item_invokes_callback", "label": "test_open_menu_item_invokes_callback()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L71"}, {"id": "tray_test_icon_test_quit_menu_item_invokes_callback", "label": "test_quit_menu_item_invokes_callback()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L85"}, {"id": "tray_test_icon_test_status_label_callable", "label": "test_status_label_callable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L99"}, {"id": "tray_test_icon_test_callback_exception_is_swallowed", "label": "test_callback_exception_is_swallowed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L112"}, {"id": "tray_test_icon_test_default_icon_image_returns_pillow_image", "label": "test_default_icon_image_returns_pillow_image()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L127"}, {"id": "tray_test_icon_test_lazy_pystray_import", "label": "test_lazy_pystray_import()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L133"}, {"id": "tray_test_icon_test_separator_present", "label": "test_separator_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L148"}, {"id": "tray_test_icon_test_import_pystray_returns_module", "label": "test_import_pystray_returns_module()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L158"}, {"id": "tray_test_icon_rationale_1", "label": "Tests for :mod:`exlab_wizard.tray.icon`. Backend Spec \u00a74.3.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L1"}, {"id": "tray_test_icon_rationale_134", "label": "When ``pystray_module`` is omitted the lazy import path is taken.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L134"}, {"id": "tray_test_icon_rationale_159", "label": "The lazy-import helper imports pystray when called.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L159"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "unittest_mock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "exlab_wizard_tray_icon", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "tray_test_icon_fakemenu", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L18", "weight": 1.0}, {"source": "tray_test_icon_fakemenu", "target": "tray_test_icon_fakemenu_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "tray_test_icon_fakemenuitem", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L25", "weight": 1.0}, {"source": "tray_test_icon_fakemenuitem", "target": "tray_test_icon_fakemenuitem_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "tray_test_icon_fakeicon", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L40", "weight": 1.0}, {"source": "tray_test_icon_fakeicon", "target": "tray_test_icon_fakeicon_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "tray_test_icon_fakepystray", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "tray_test_icon_test_build_icon_returns_icon_object", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L54", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "tray_test_icon_test_open_menu_item_invokes_callback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L71", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "tray_test_icon_test_quit_menu_item_invokes_callback", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L85", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "tray_test_icon_test_status_label_callable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L99", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "tray_test_icon_test_callback_exception_is_swallowed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L112", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "tray_test_icon_test_default_icon_image_returns_pillow_image", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L127", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "tray_test_icon_test_lazy_pystray_import", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L133", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "tray_test_icon_test_separator_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L148", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "target": "tray_test_icon_test_import_pystray_returns_module", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L158", "weight": 1.0}, {"source": "tray_test_icon_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_tray_test_icon_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L1", "weight": 1.0}, {"source": "tray_test_icon_rationale_134", "target": "tray_test_icon_test_lazy_pystray_import", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L134", "weight": 1.0}, {"source": "tray_test_icon_rationale_159", "target": "tray_test_icon_test_import_pystray_returns_module", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L159", "weight": 1.0}], "raw_calls": [{"caller_nid": "tray_test_icon_test_build_icon_returns_icon_object", "callee": "build_icon", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L57"}, {"caller_nid": "tray_test_icon_test_build_icon_returns_icon_object", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L58"}, {"caller_nid": "tray_test_icon_test_build_icon_returns_icon_object", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L59"}, {"caller_nid": "tray_test_icon_test_build_icon_returns_icon_object", "callee": "object", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L62"}, {"caller_nid": "tray_test_icon_test_build_icon_returns_icon_object", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L64"}, {"caller_nid": "tray_test_icon_test_build_icon_returns_icon_object", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L67"}, {"caller_nid": "tray_test_icon_test_build_icon_returns_icon_object", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L68"}, {"caller_nid": "tray_test_icon_test_open_menu_item_invokes_callback", "callee": "build_icon", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L73"}, {"caller_nid": "tray_test_icon_test_open_menu_item_invokes_callback", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L74"}, {"caller_nid": "tray_test_icon_test_open_menu_item_invokes_callback", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L75"}, {"caller_nid": "tray_test_icon_test_open_menu_item_invokes_callback", "callee": "action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L81"}, {"caller_nid": "tray_test_icon_test_quit_menu_item_invokes_callback", "callee": "build_icon", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L87"}, {"caller_nid": "tray_test_icon_test_quit_menu_item_invokes_callback", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L88"}, {"caller_nid": "tray_test_icon_test_quit_menu_item_invokes_callback", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L89"}, {"caller_nid": "tray_test_icon_test_quit_menu_item_invokes_callback", "callee": "action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L95"}, {"caller_nid": "tray_test_icon_test_status_label_callable", "callee": "build_icon", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L100"}, {"caller_nid": "tray_test_icon_test_status_label_callable", "callee": "callable", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L107"}, {"caller_nid": "tray_test_icon_test_status_label_callable", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L109"}, {"caller_nid": "tray_test_icon_test_callback_exception_is_swallowed", "callee": "build_icon", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L116"}, {"caller_nid": "tray_test_icon_test_callback_exception_is_swallowed", "callee": "action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L123"}, {"caller_nid": "tray_test_icon_test_callback_exception_is_swallowed", "callee": "action", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L124"}, {"caller_nid": "tray_test_icon_test_default_icon_image_returns_pillow_image", "callee": "default_icon_image", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L128"}, {"caller_nid": "tray_test_icon_test_lazy_pystray_import", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L135"}, {"caller_nid": "tray_test_icon_test_lazy_pystray_import", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L139"}, {"caller_nid": "tray_test_icon_test_lazy_pystray_import", "callee": "build_icon", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L140"}, {"caller_nid": "tray_test_icon_test_lazy_pystray_import", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L145"}, {"caller_nid": "tray_test_icon_test_separator_present", "callee": "build_icon", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L149"}, {"caller_nid": "tray_test_icon_test_import_pystray_returns_module", "callee": "type", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L162"}, {"caller_nid": "tray_test_icon_test_import_pystray_returns_module", "callee": "setitem", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L163"}, {"caller_nid": "tray_test_icon_test_import_pystray_returns_module", "callee": "_import_pystray", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py", "source_location": "L166"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/ebf88e0967b7bab475b30992454e344b63cdc7c93c62cc3bcb1e0bf52dd78619.json b/graphify-out/cache/ast/ebf88e0967b7bab475b30992454e344b63cdc7c93c62cc3bcb1e0bf52dd78619.json new file mode 100644 index 0000000..143e02d --- /dev/null +++ b/graphify-out/cache/ast/ebf88e0967b7bab475b30992454e344b63cdc7c93c62cc3bcb1e0bf52dd78619.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_docker_readme_md", "label": "README.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L1"}, {"id": "docker_readme_nas_emulator_docker_compose_stack", "label": "NAS Emulator \u2014 Docker Compose Stack", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L1"}, {"id": "docker_readme_purpose_scope", "label": "Purpose & Scope", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L9"}, {"id": "docker_readme_requirements", "label": "Requirements", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L26"}, {"id": "docker_readme_layout", "label": "Layout", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L36"}, {"id": "docker_readme_codeblock_1", "label": "code:block1 (tests/docker/)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L38"}, {"id": "docker_readme_first_time_setup", "label": "First-Time Setup", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L53"}, {"id": "docker_readme_codeblock_2", "label": "code:bash (# 1. credentials / ports \u2014 edit NAS_PASSWORD to taste)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L57"}, {"id": "docker_readme_wiring_into_exlab_config", "label": "Wiring Into ExLab Config", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L81"}, {"id": "docker_readme_rclone_sftp_transport", "label": "`rclone_sftp` transport", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L87"}, {"id": "docker_readme_codeblock_3", "label": "code:yaml (equipment:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L89"}, {"id": "docker_readme_rclone_smb_transport", "label": "`rclone_smb` transport", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L103"}, {"id": "docker_readme_codeblock_4", "label": "code:yaml (equipment:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L105"}, {"id": "docker_readme_test_prefix_mode", "label": "TEST_-prefix mode", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L123"}, {"id": "docker_readme_shorter_quiescence_window", "label": "Shorter quiescence window", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L131"}, {"id": "docker_readme_codeblock_5", "label": "code:yaml (sync:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L136"}, {"id": "docker_readme_lifecycle", "label": "Lifecycle", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L142"}, {"id": "docker_readme_codeblock_6", "label": "code:bash (# from tests/docker/)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L144"}, {"id": "docker_readme_pytest_fixture_optional", "label": "Pytest Fixture (optional)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L155"}, {"id": "docker_readme_codeblock_7", "label": "code:python (import shutil, subprocess)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L165"}, {"id": "docker_readme_platform_notes", "label": "Platform Notes", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L192"}, {"id": "docker_readme_offline_air_gapped_use", "label": "Offline / Air-Gapped Use", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L204"}, {"id": "docker_readme_codeblock_8", "label": "code:bash (# online machine)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L206"}, {"id": "docker_readme_troubleshooting", "label": "Troubleshooting", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L216"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_docker_readme_md", "target": "docker_readme_nas_emulator_docker_compose_stack", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L1", "weight": 1.0}, {"source": "docker_readme_nas_emulator_docker_compose_stack", "target": "docker_readme_purpose_scope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L9", "weight": 1.0}, {"source": "docker_readme_nas_emulator_docker_compose_stack", "target": "docker_readme_requirements", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L26", "weight": 1.0}, {"source": "docker_readme_nas_emulator_docker_compose_stack", "target": "docker_readme_layout", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L36", "weight": 1.0}, {"source": "docker_readme_layout", "target": "docker_readme_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L38", "weight": 1.0}, {"source": "docker_readme_nas_emulator_docker_compose_stack", "target": "docker_readme_first_time_setup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L53", "weight": 1.0}, {"source": "docker_readme_first_time_setup", "target": "docker_readme_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L57", "weight": 1.0}, {"source": "docker_readme_nas_emulator_docker_compose_stack", "target": "docker_readme_wiring_into_exlab_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L81", "weight": 1.0}, {"source": "docker_readme_wiring_into_exlab_config", "target": "docker_readme_rclone_sftp_transport", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L87", "weight": 1.0}, {"source": "docker_readme_rclone_sftp_transport", "target": "docker_readme_codeblock_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L89", "weight": 1.0}, {"source": "docker_readme_wiring_into_exlab_config", "target": "docker_readme_rclone_smb_transport", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L103", "weight": 1.0}, {"source": "docker_readme_rclone_smb_transport", "target": "docker_readme_codeblock_4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L105", "weight": 1.0}, {"source": "docker_readme_wiring_into_exlab_config", "target": "docker_readme_test_prefix_mode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L123", "weight": 1.0}, {"source": "docker_readme_wiring_into_exlab_config", "target": "docker_readme_shorter_quiescence_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L131", "weight": 1.0}, {"source": "docker_readme_shorter_quiescence_window", "target": "docker_readme_codeblock_5", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L136", "weight": 1.0}, {"source": "docker_readme_nas_emulator_docker_compose_stack", "target": "docker_readme_lifecycle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L142", "weight": 1.0}, {"source": "docker_readme_lifecycle", "target": "docker_readme_codeblock_6", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L144", "weight": 1.0}, {"source": "docker_readme_nas_emulator_docker_compose_stack", "target": "docker_readme_pytest_fixture_optional", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L155", "weight": 1.0}, {"source": "docker_readme_pytest_fixture_optional", "target": "docker_readme_codeblock_7", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L165", "weight": 1.0}, {"source": "docker_readme_nas_emulator_docker_compose_stack", "target": "docker_readme_platform_notes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L192", "weight": 1.0}, {"source": "docker_readme_nas_emulator_docker_compose_stack", "target": "docker_readme_offline_air_gapped_use", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L204", "weight": 1.0}, {"source": "docker_readme_offline_air_gapped_use", "target": "docker_readme_codeblock_8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L206", "weight": 1.0}, {"source": "docker_readme_nas_emulator_docker_compose_stack", "target": "docker_readme_troubleshooting", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/docker/README.md", "source_location": "L216", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/ed5ef732a93c97789b75ddb9e08850dd158b1ba102eb8376fcacc45a6787119a.json b/graphify-out/cache/ast/ed5ef732a93c97789b75ddb9e08850dd158b1ba102eb8376fcacc45a6787119a.json new file mode 100644 index 0000000..8141f59 --- /dev/null +++ b/graphify-out/cache/ast/ed5ef732a93c97789b75ddb9e08850dd158b1ba102eb8376fcacc45a6787119a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "label": "problems.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L1"}, {"id": "routers_problems_findingresponse", "label": "FindingResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L67"}, {"id": "basemodel", "label": "BaseModel", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "routers_problems_problemsresponse", "label": "ProblemsResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L83"}, {"id": "routers_problems_overriderequest", "label": "OverrideRequest", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L92"}, {"id": "routers_problems_overrideresponse", "label": "OverrideResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L103"}, {"id": "routers_problems_revokerequest", "label": "RevokeRequest", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L117"}, {"id": "routers_problems_tombstoneresponse", "label": "TombstoneResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L127"}, {"id": "routers_problems_refreshresponse", "label": "RefreshResponse", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L138"}, {"id": "routers_problems_build_problems_router", "label": "build_problems_router()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L152"}, {"id": "routers_problems_build_scope", "label": "_build_scope()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L292"}, {"id": "routers_problems_matches_filters", "label": "_matches_filters()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L321"}, {"id": "routers_problems_last_audit_at", "label": "_last_audit_at()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L327"}, {"id": "routers_problems_require_validator", "label": "_require_validator()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L334"}, {"id": "routers_problems_require_cache_writer", "label": "_require_cache_writer()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L348"}, {"id": "routers_problems_require_creation_json", "label": "_require_creation_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L362"}, {"id": "routers_problems_stream_audit_channel", "label": "_stream_audit_channel()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L381"}, {"id": "routers_problems_rationale_1", "label": "``/problems`` router. Backend Spec \u00a74.6.1, \u00a711.8. Endpoints: * ``GET /problems", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L1"}, {"id": "routers_problems_rationale_68", "label": "One finding row in the \u00a711.8 schema.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L68"}, {"id": "routers_problems_rationale_84", "label": "``GET /problems`` response.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L84"}, {"id": "routers_problems_rationale_93", "label": "``POST /problems/{run_path}/override`` body. Backend Spec \u00a711.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L93"}, {"id": "routers_problems_rationale_104", "label": "Override append response.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L104"}, {"id": "routers_problems_rationale_118", "label": "``POST /problems/{run_path}/override/revoke`` body. Backend Spec \u00a711.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L118"}, {"id": "routers_problems_rationale_139", "label": "``POST /problems/refresh`` response.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L139"}, {"id": "routers_problems_rationale_153", "label": "Construct the ``/problems`` router.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L153"}, {"id": "routers_problems_rationale_363", "label": "Resolve a ``run_path`` to its ``creation.json`` or raise 404. Used by the o", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L363"}, {"id": "routers_problems_rationale_382", "label": "Forward each delta frame the audit channel publishes. The channel exposes a", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L382"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "contextlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "uuid", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "fastapi", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "pydantic", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "exlab_wizard_api_dependencies", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "exlab_wizard_api_events", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "exlab_wizard_api_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "exlab_wizard_api_setup", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_findingresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L67", "weight": 1.0}, {"source": "routers_problems_findingresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_problemsresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L83", "weight": 1.0}, {"source": "routers_problems_problemsresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_overriderequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L92", "weight": 1.0}, {"source": "routers_problems_overriderequest", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L92", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_overrideresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L103", "weight": 1.0}, {"source": "routers_problems_overrideresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L103", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_revokerequest", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L117", "weight": 1.0}, {"source": "routers_problems_revokerequest", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L117", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_tombstoneresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L127", "weight": 1.0}, {"source": "routers_problems_tombstoneresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L127", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_refreshresponse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L138", "weight": 1.0}, {"source": "routers_problems_refreshresponse", "target": "basemodel", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L138", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_build_problems_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L152", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_build_scope", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L292", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_matches_filters", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L321", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_last_audit_at", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L327", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_require_validator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L334", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_require_cache_writer", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L348", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_require_creation_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L362", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "target": "routers_problems_stream_audit_channel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L381", "weight": 1.0}, {"source": "routers_problems_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_api_routers_problems_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L1", "weight": 1.0}, {"source": "routers_problems_rationale_68", "target": "routers_problems_findingresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L68", "weight": 1.0}, {"source": "routers_problems_rationale_84", "target": "routers_problems_problemsresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L84", "weight": 1.0}, {"source": "routers_problems_rationale_93", "target": "routers_problems_overriderequest", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L93", "weight": 1.0}, {"source": "routers_problems_rationale_104", "target": "routers_problems_overrideresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L104", "weight": 1.0}, {"source": "routers_problems_rationale_118", "target": "routers_problems_revokerequest", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L118", "weight": 1.0}, {"source": "routers_problems_rationale_139", "target": "routers_problems_refreshresponse", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L139", "weight": 1.0}, {"source": "routers_problems_rationale_153", "target": "routers_problems_build_problems_router", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L153", "weight": 1.0}, {"source": "routers_problems_rationale_363", "target": "routers_problems_require_creation_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L363", "weight": 1.0}, {"source": "routers_problems_rationale_382", "target": "routers_problems_stream_audit_channel", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L382", "weight": 1.0}], "raw_calls": [{"caller_nid": "routers_problems_build_problems_router", "callee": "APIRouter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L154"}, {"caller_nid": "routers_problems_build_problems_router", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L156"}, {"caller_nid": "routers_problems_build_problems_router", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L159"}, {"caller_nid": "routers_problems_build_problems_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L179"}, {"caller_nid": "routers_problems_build_problems_router", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L182"}, {"caller_nid": "routers_problems_build_problems_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L197"}, {"caller_nid": "routers_problems_build_problems_router", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L201"}, {"caller_nid": "routers_problems_build_problems_router", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L225"}, {"caller_nid": "routers_problems_build_problems_router", "callee": "Depends", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L229"}, {"caller_nid": "routers_problems_build_problems_router", "callee": "websocket", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L252"}, {"caller_nid": "routers_problems_build_scope", "callee": "AuditScopeKind", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L294"}, {"caller_nid": "routers_problems_build_scope", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L294"}, {"caller_nid": "routers_problems_build_scope", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L296"}, {"caller_nid": "routers_problems_build_scope", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L311"}, {"caller_nid": "routers_problems_last_audit_at", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L328"}, {"caller_nid": "routers_problems_last_audit_at", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L330"}, {"caller_nid": "routers_problems_last_audit_at", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L331"}, {"caller_nid": "routers_problems_last_audit_at", "callee": "utc_now_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L331"}, {"caller_nid": "routers_problems_require_validator", "callee": "require_deps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L335"}, {"caller_nid": "routers_problems_require_validator", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L336"}, {"caller_nid": "routers_problems_require_validator", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L338"}, {"caller_nid": "routers_problems_require_cache_writer", "callee": "require_deps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L349"}, {"caller_nid": "routers_problems_require_cache_writer", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L350"}, {"caller_nid": "routers_problems_require_cache_writer", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L352"}, {"caller_nid": "routers_problems_require_creation_json", "callee": "creation_json_path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L369"}, {"caller_nid": "routers_problems_require_creation_json", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L369"}, {"caller_nid": "routers_problems_require_creation_json", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L370"}, {"caller_nid": "routers_problems_require_creation_json", "callee": "HTTPException", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L371"}, {"caller_nid": "routers_problems_stream_audit_channel", "callee": "subscribe", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L387"}, {"caller_nid": "routers_problems_stream_audit_channel", "callee": "event_from_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L389"}, {"caller_nid": "routers_problems_stream_audit_channel", "callee": "send_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L392"}, {"caller_nid": "routers_problems_stream_audit_channel", "callee": "encode_event", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py", "source_location": "L392"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/efef30e5cc5a08156a985b728bbbd1bfdeb01cfac52f2a078923a9a79adcd10f.json b/graphify-out/cache/ast/efef30e5cc5a08156a985b728bbbd1bfdeb01cfac52f2a078923a9a79adcd10f.json new file mode 100644 index 0000000..b88255e --- /dev/null +++ b/graphify-out/cache/ast/efef30e5cc5a08156a985b728bbbd1bfdeb01cfac52f2a078923a9a79adcd10f.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_superpowers_specs_2026_05_26_rclone_only_nas_sync_design_md", "label": "2026-05-26-rclone-only-nas-sync-design.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L1"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", "label": "Rclone-only NAS sync with password auth (SFTP + SMB)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L1"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_context", "label": "Context", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L9"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_goals", "label": "Goals", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L43"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_non_goals", "label": "Non-goals", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L63"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_architecture", "label": "Architecture", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L77"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_1", "label": "code:block1 (+-------------------------------+)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L79"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_components", "label": "Components", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L117"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_1_config_models", "label": "1. Config models", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L119"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_2", "label": "code:python (class RcloneSftpTransport(BaseModel):)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L128"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_2_keyring_dependencies_setup_gate", "label": "2. Keyring + dependencies + setup gate", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L159"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_3_rclone_driver", "label": "3. Rclone driver", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L197"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_3", "label": "code:python (class RcloneDriver:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L203"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_4", "label": "code:python (def build_rclone_env()", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L246"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_4_nas_sync_client", "label": "4. NAS sync client", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L261"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_5_verifier_collapse", "label": "5. Verifier collapse", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L299"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_5", "label": "code:python (class Verifier:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L312"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_6_wizard_settings_ui", "label": "6. Wizard + Settings UI", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L344"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_7_sync_state_schema", "label": "7. Sync state schema", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L390"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_6", "label": "code:python (class FileSyncRecord(Struct):)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L395"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_8_error_classification", "label": "8. Error classification", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L407"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_data_flow_one_sync_cycle", "label": "Data flow (one sync cycle)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L417"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_error_handling", "label": "Error handling", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L444"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_testing", "label": "Testing", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L460"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_open_follow_up_slot_b_drift_audit", "label": "Open follow-up: Slot B (drift audit)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L489"}, {"id": "specs_2026_05_26_rclone_only_nas_sync_design_risks_notes", "label": "Risks / notes", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L500"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_superpowers_specs_2026_05_26_rclone_only_nas_sync_design_md", "target": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L1", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", "target": "specs_2026_05_26_rclone_only_nas_sync_design_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L9", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", "target": "specs_2026_05_26_rclone_only_nas_sync_design_goals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L43", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", "target": "specs_2026_05_26_rclone_only_nas_sync_design_non_goals", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L63", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", "target": "specs_2026_05_26_rclone_only_nas_sync_design_architecture", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L77", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_architecture", "target": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L79", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", "target": "specs_2026_05_26_rclone_only_nas_sync_design_components", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L117", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_components", "target": "specs_2026_05_26_rclone_only_nas_sync_design_1_config_models", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L119", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_1_config_models", "target": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L128", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_components", "target": "specs_2026_05_26_rclone_only_nas_sync_design_2_keyring_dependencies_setup_gate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L159", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_components", "target": "specs_2026_05_26_rclone_only_nas_sync_design_3_rclone_driver", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L197", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_3_rclone_driver", "target": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L203", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_3_rclone_driver", "target": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L246", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_components", "target": "specs_2026_05_26_rclone_only_nas_sync_design_4_nas_sync_client", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L261", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_components", "target": "specs_2026_05_26_rclone_only_nas_sync_design_5_verifier_collapse", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L299", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_5_verifier_collapse", "target": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_5", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L312", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_components", "target": "specs_2026_05_26_rclone_only_nas_sync_design_6_wizard_settings_ui", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L344", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_components", "target": "specs_2026_05_26_rclone_only_nas_sync_design_7_sync_state_schema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L390", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_7_sync_state_schema", "target": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_6", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L395", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_components", "target": "specs_2026_05_26_rclone_only_nas_sync_design_8_error_classification", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L407", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", "target": "specs_2026_05_26_rclone_only_nas_sync_design_data_flow_one_sync_cycle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L417", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", "target": "specs_2026_05_26_rclone_only_nas_sync_design_error_handling", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L444", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", "target": "specs_2026_05_26_rclone_only_nas_sync_design_testing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L460", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", "target": "specs_2026_05_26_rclone_only_nas_sync_design_open_follow_up_slot_b_drift_audit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L489", "weight": 1.0}, {"source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", "target": "specs_2026_05_26_rclone_only_nas_sync_design_risks_notes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", "source_location": "L500", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/f04396167f9ab9fcaba189525ecd1f52dcfdc2bfe7caed2fffcce9c3d175b7e3.json b/graphify-out/cache/ast/f04396167f9ab9fcaba189525ecd1f52dcfdc2bfe7caed2fffcce9c3d175b7e3.json new file mode 100644 index 0000000..8499b0e --- /dev/null +++ b/graphify-out/cache/ast/f04396167f9ab9fcaba189525ecd1f52dcfdc2bfe7caed2fffcce9c3d175b7e3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "label": "test_client.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L1"}, {"id": "lims_test_client_make_client", "label": "_make_client()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L22"}, {"id": "lims_test_client_test_login_happy_path", "label": "test_login_happy_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L35"}, {"id": "lims_test_client_test_login_uses_explicit_password_over_provider", "label": "test_login_uses_explicit_password_over_provider()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L48"}, {"id": "lims_test_client_test_login_wrong_password_raises", "label": "test_login_wrong_password_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L59"}, {"id": "lims_test_client_test_login_with_no_password_raises_config_error", "label": "test_login_with_no_password_raises_config_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L69"}, {"id": "lims_test_client_test_list_projects_returns_typed_rows", "label": "test_list_projects_returns_typed_rows()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L79"}, {"id": "lims_test_client_test_list_projects_status_filter", "label": "test_list_projects_status_filter()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L93"}, {"id": "lims_test_client_test_get_project_by_uid", "label": "test_get_project_by_uid()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L122"}, {"id": "lims_test_client_test_get_project_by_short_id", "label": "test_get_project_by_short_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L134"}, {"id": "lims_test_client_test_get_project_404_returns_none", "label": "test_get_project_404_returns_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L146"}, {"id": "lims_test_client_test_get_me", "label": "test_get_me()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L157"}, {"id": "lims_test_client_test_health_check_ok", "label": "test_health_check_ok()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L169"}, {"id": "lims_test_client_test_health_check_failure_returns_status", "label": "test_health_check_failure_returns_status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L182"}, {"id": "lims_test_client_test_relogin_after_401", "label": "test_relogin_after_401()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L197"}, {"id": "lims_test_client_test_health_check_returns_non200_status", "label": "test_health_check_returns_non200_status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L213"}, {"id": "lims_test_client_test_endpoint_strips_trailing_slash", "label": "test_endpoint_strips_trailing_slash()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L243"}, {"id": "lims_test_client_rationale_1", "label": "Tests for :class:`exlab_wizard.lims.client.LIMSClient`. Each test wires the cli", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L1"}, {"id": "lims_test_client_rationale_183", "label": "``health_check`` MUST NOT raise. Per Backend Spec \u00a77.2.3.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L183"}, {"id": "lims_test_client_rationale_198", "label": "When the LIMS invalidates the cookie mid-flight, the client transparently re", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L198"}, {"id": "lims_test_client_rationale_214", "label": "When the LIMS returns a non-2xx status, ``health_check`` returns ``ok=False`", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L214"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "httpx", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "exlab_wizard_lims_client", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "exlab_wizard_lims_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "tests_fixtures_mock_lims", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_make_client", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_login_happy_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_login_uses_explicit_password_over_provider", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_login_wrong_password_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_login_with_no_password_raises_config_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_list_projects_returns_typed_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L79", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_list_projects_status_filter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_get_project_by_uid", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L122", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_get_project_by_short_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L134", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_get_project_404_returns_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L146", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_get_me", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L157", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_health_check_ok", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L169", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_health_check_failure_returns_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L182", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_relogin_after_401", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L197", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_health_check_returns_non200_status", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L213", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "target": "lims_test_client_test_endpoint_strips_trailing_slash", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L243", "weight": 1.0}, {"source": "lims_test_client_test_login_happy_path", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L37", "weight": 1.0}, {"source": "lims_test_client_test_login_uses_explicit_password_over_provider", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L50", "weight": 1.0}, {"source": "lims_test_client_test_login_wrong_password_raises", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L61", "weight": 1.0}, {"source": "lims_test_client_test_login_with_no_password_raises_config_error", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L71", "weight": 1.0}, {"source": "lims_test_client_test_list_projects_returns_typed_rows", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L81", "weight": 1.0}, {"source": "lims_test_client_test_list_projects_status_filter", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L113", "weight": 1.0}, {"source": "lims_test_client_test_get_project_by_uid", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L124", "weight": 1.0}, {"source": "lims_test_client_test_get_project_by_short_id", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L136", "weight": 1.0}, {"source": "lims_test_client_test_get_project_404_returns_none", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L148", "weight": 1.0}, {"source": "lims_test_client_test_get_me", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L159", "weight": 1.0}, {"source": "lims_test_client_test_health_check_ok", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L171", "weight": 1.0}, {"source": "lims_test_client_test_health_check_failure_returns_status", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L185", "weight": 1.0}, {"source": "lims_test_client_test_relogin_after_401", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L202", "weight": 1.0}, {"source": "lims_test_client_test_health_check_returns_non200_status", "target": "lims_test_client_make_client", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L233", "weight": 1.0}, {"source": "lims_test_client_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_lims_test_client_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L1", "weight": 1.0}, {"source": "lims_test_client_rationale_183", "target": "lims_test_client_test_health_check_failure_returns_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L183", "weight": 1.0}, {"source": "lims_test_client_rationale_198", "target": "lims_test_client_test_relogin_after_401", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L198", "weight": 1.0}, {"source": "lims_test_client_rationale_214", "target": "lims_test_client_test_health_check_returns_non200_status", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L214", "weight": 1.0}], "raw_calls": [{"caller_nid": "lims_test_client_make_client", "callee": "LIMSClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L23"}, {"caller_nid": "lims_test_client_make_client", "callee": "ASGITransport", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L28"}, {"caller_nid": "lims_test_client_make_client", "callee": "AsyncClient", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L31"}, {"caller_nid": "lims_test_client_test_login_happy_path", "callee": "make_mock_lims_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L36"}, {"caller_nid": "lims_test_client_test_login_happy_path", "callee": "login", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L39"}, {"caller_nid": "lims_test_client_test_login_happy_path", "callee": "get_me", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L41"}, {"caller_nid": "lims_test_client_test_login_happy_path", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L42"}, {"caller_nid": "lims_test_client_test_login_happy_path", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L45"}, {"caller_nid": "lims_test_client_test_login_uses_explicit_password_over_provider", "callee": "make_mock_lims_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L49"}, {"caller_nid": "lims_test_client_test_login_uses_explicit_password_over_provider", "callee": "login", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L52"}, {"caller_nid": "lims_test_client_test_login_uses_explicit_password_over_provider", "callee": "get_me", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L53"}, {"caller_nid": "lims_test_client_test_login_uses_explicit_password_over_provider", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L56"}, {"caller_nid": "lims_test_client_test_login_wrong_password_raises", "callee": "make_mock_lims_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L60"}, {"caller_nid": "lims_test_client_test_login_wrong_password_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L63"}, {"caller_nid": "lims_test_client_test_login_wrong_password_raises", "callee": "login", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L64"}, {"caller_nid": "lims_test_client_test_login_wrong_password_raises", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L66"}, {"caller_nid": "lims_test_client_test_login_with_no_password_raises_config_error", "callee": "make_mock_lims_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L70"}, {"caller_nid": "lims_test_client_test_login_with_no_password_raises_config_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L73"}, {"caller_nid": "lims_test_client_test_login_with_no_password_raises_config_error", "callee": "login", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L74"}, {"caller_nid": "lims_test_client_test_login_with_no_password_raises_config_error", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L76"}, {"caller_nid": "lims_test_client_test_list_projects_returns_typed_rows", "callee": "make_mock_lims_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L80"}, {"caller_nid": "lims_test_client_test_list_projects_returns_typed_rows", "callee": "login", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L83"}, {"caller_nid": "lims_test_client_test_list_projects_returns_typed_rows", "callee": "list_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L84"}, {"caller_nid": "lims_test_client_test_list_projects_returns_typed_rows", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L85"}, {"caller_nid": "lims_test_client_test_list_projects_returns_typed_rows", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L86"}, {"caller_nid": "lims_test_client_test_list_projects_returns_typed_rows", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L90"}, {"caller_nid": "lims_test_client_test_list_projects_status_filter", "callee": "make_mock_lims_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L112"}, {"caller_nid": "lims_test_client_test_list_projects_status_filter", "callee": "login", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L115"}, {"caller_nid": "lims_test_client_test_list_projects_status_filter", "callee": "list_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L116"}, {"caller_nid": "lims_test_client_test_list_projects_status_filter", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L119"}, {"caller_nid": "lims_test_client_test_get_project_by_uid", "callee": "make_mock_lims_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L123"}, {"caller_nid": "lims_test_client_test_get_project_by_uid", "callee": "login", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L126"}, {"caller_nid": "lims_test_client_test_get_project_by_uid", "callee": "get_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L127"}, {"caller_nid": "lims_test_client_test_get_project_by_uid", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L131"}, {"caller_nid": "lims_test_client_test_get_project_by_short_id", "callee": "make_mock_lims_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L135"}, {"caller_nid": "lims_test_client_test_get_project_by_short_id", "callee": "login", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L138"}, {"caller_nid": "lims_test_client_test_get_project_by_short_id", "callee": "get_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L139"}, {"caller_nid": "lims_test_client_test_get_project_by_short_id", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L143"}, {"caller_nid": "lims_test_client_test_get_project_404_returns_none", "callee": "make_mock_lims_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L147"}, {"caller_nid": "lims_test_client_test_get_project_404_returns_none", "callee": "login", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L150"}, {"caller_nid": "lims_test_client_test_get_project_404_returns_none", "callee": "get_project", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L151"}, {"caller_nid": "lims_test_client_test_get_project_404_returns_none", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L154"}, {"caller_nid": "lims_test_client_test_get_me", "callee": "make_mock_lims_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L158"}, {"caller_nid": "lims_test_client_test_get_me", "callee": "login", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L161"}, {"caller_nid": "lims_test_client_test_get_me", "callee": "get_me", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L162"}, {"caller_nid": "lims_test_client_test_get_me", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L166"}, {"caller_nid": "lims_test_client_test_health_check_ok", "callee": "make_mock_lims_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L170"}, {"caller_nid": "lims_test_client_test_health_check_ok", "callee": "login", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L173"}, {"caller_nid": "lims_test_client_test_health_check_ok", "callee": "health_check", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L174"}, {"caller_nid": "lims_test_client_test_health_check_ok", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L175"}, {"caller_nid": "lims_test_client_test_health_check_ok", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L179"}, {"caller_nid": "lims_test_client_test_health_check_failure_returns_status", "callee": "make_mock_lims_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L184"}, {"caller_nid": "lims_test_client_test_health_check_failure_returns_status", "callee": "health_check", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L190"}, {"caller_nid": "lims_test_client_test_health_check_failure_returns_status", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L194"}, {"caller_nid": "lims_test_client_test_relogin_after_401", "callee": "make_mock_lims_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L201"}, {"caller_nid": "lims_test_client_test_relogin_after_401", "callee": "login", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L204"}, {"caller_nid": "lims_test_client_test_relogin_after_401", "callee": "invalidate_sessions", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L206"}, {"caller_nid": "lims_test_client_test_relogin_after_401", "callee": "list_projects", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L207"}, {"caller_nid": "lims_test_client_test_relogin_after_401", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L208"}, {"caller_nid": "lims_test_client_test_relogin_after_401", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L210"}, {"caller_nid": "lims_test_client_test_health_check_returns_non200_status", "callee": "FastAPI", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L221"}, {"caller_nid": "lims_test_client_test_health_check_returns_non200_status", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L223"}, {"caller_nid": "lims_test_client_test_health_check_returns_non200_status", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L229"}, {"caller_nid": "lims_test_client_test_health_check_returns_non200_status", "callee": "login", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L235"}, {"caller_nid": "lims_test_client_test_health_check_returns_non200_status", "callee": "health_check", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L236"}, {"caller_nid": "lims_test_client_test_health_check_returns_non200_status", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L240"}, {"caller_nid": "lims_test_client_test_endpoint_strips_trailing_slash", "callee": "LIMSClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L244"}, {"caller_nid": "lims_test_client_test_endpoint_strips_trailing_slash", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py", "source_location": "L253"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/f16cad9424bc374423f67d9a2c6189e069a67d22ac1ec1855aefe401ffd848a9.json b/graphify-out/cache/ast/f16cad9424bc374423f67d9a2c6189e069a67d22ac1ec1855aefe401ffd848a9.json new file mode 100644 index 0000000..cdd34e7 --- /dev/null +++ b/graphify-out/cache/ast/f16cad9424bc374423f67d9a2c6189e069a67d22ac1ec1855aefe401ffd848a9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "label": "test_catalogue.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L1"}, {"id": "lims_test_catalogue_make_catalogue", "label": "_make_catalogue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L14"}, {"id": "lims_test_catalogue_test_round_trip_via_write_then_read", "label": "test_round_trip_via_write_then_read()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L36"}, {"id": "lims_test_catalogue_test_read_missing_file_raises", "label": "test_read_missing_file_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L48"}, {"id": "lims_test_catalogue_test_read_invalid_json_raises", "label": "test_read_invalid_json_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L53"}, {"id": "lims_test_catalogue_test_read_non_object_raises", "label": "test_read_non_object_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L60"}, {"id": "lims_test_catalogue_test_schema_version_mismatch_treated_as_absent", "label": "test_schema_version_mismatch_treated_as_absent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L67"}, {"id": "lims_test_catalogue_test_endpoint_mismatch_raises", "label": "test_endpoint_mismatch_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L85"}, {"id": "lims_test_catalogue_test_write_creates_parent_directory", "label": "test_write_creates_parent_directory()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L93"}, {"id": "lims_test_catalogue_test_write_atomic_replaces_previous_file", "label": "test_write_atomic_replaces_previous_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L100"}, {"id": "lims_test_catalogue_test_read_handles_missing_projects_array", "label": "test_read_handles_missing_projects_array()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L121"}, {"id": "lims_test_catalogue_rationale_1", "label": "Tests for the offline LIMS-project catalogue I/O. Backend Spec \u00a77.2.9.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "exlab_wizard_lims_catalogue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "exlab_wizard_lims_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "lims_test_catalogue_make_catalogue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "lims_test_catalogue_test_round_trip_via_write_then_read", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "lims_test_catalogue_test_read_missing_file_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "lims_test_catalogue_test_read_invalid_json_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "lims_test_catalogue_test_read_non_object_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "lims_test_catalogue_test_schema_version_mismatch_treated_as_absent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L67", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "lims_test_catalogue_test_endpoint_mismatch_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L85", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "lims_test_catalogue_test_write_creates_parent_directory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "lims_test_catalogue_test_write_atomic_replaces_previous_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L100", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "target": "lims_test_catalogue_test_read_handles_missing_projects_array", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L121", "weight": 1.0}, {"source": "lims_test_catalogue_test_round_trip_via_write_then_read", "target": "lims_test_catalogue_make_catalogue", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L38", "weight": 1.0}, {"source": "lims_test_catalogue_test_endpoint_mismatch_raises", "target": "lims_test_catalogue_make_catalogue", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L87", "weight": 1.0}, {"source": "lims_test_catalogue_test_write_creates_parent_directory", "target": "lims_test_catalogue_make_catalogue", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L95", "weight": 1.0}, {"source": "lims_test_catalogue_test_write_atomic_replaces_previous_file", "target": "lims_test_catalogue_make_catalogue", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L102", "weight": 1.0}, {"source": "lims_test_catalogue_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_lims_test_catalogue_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "lims_test_catalogue_make_catalogue", "callee": "OfflineCatalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L15"}, {"caller_nid": "lims_test_catalogue_make_catalogue", "callee": "LIMSProject", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L21"}, {"caller_nid": "lims_test_catalogue_test_round_trip_via_write_then_read", "callee": "write_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L39"}, {"caller_nid": "lims_test_catalogue_test_round_trip_via_write_then_read", "callee": "read_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L40"}, {"caller_nid": "lims_test_catalogue_test_round_trip_via_write_then_read", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L44"}, {"caller_nid": "lims_test_catalogue_test_read_missing_file_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L49"}, {"caller_nid": "lims_test_catalogue_test_read_missing_file_raises", "callee": "read_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L50"}, {"caller_nid": "lims_test_catalogue_test_read_invalid_json_raises", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L55"}, {"caller_nid": "lims_test_catalogue_test_read_invalid_json_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L56"}, {"caller_nid": "lims_test_catalogue_test_read_invalid_json_raises", "callee": "read_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L57"}, {"caller_nid": "lims_test_catalogue_test_read_non_object_raises", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L62"}, {"caller_nid": "lims_test_catalogue_test_read_non_object_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L63"}, {"caller_nid": "lims_test_catalogue_test_read_non_object_raises", "callee": "read_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L64"}, {"caller_nid": "lims_test_catalogue_test_schema_version_mismatch_treated_as_absent", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L78"}, {"caller_nid": "lims_test_catalogue_test_schema_version_mismatch_treated_as_absent", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L78"}, {"caller_nid": "lims_test_catalogue_test_schema_version_mismatch_treated_as_absent", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L79"}, {"caller_nid": "lims_test_catalogue_test_schema_version_mismatch_treated_as_absent", "callee": "read_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L80"}, {"caller_nid": "lims_test_catalogue_test_schema_version_mismatch_treated_as_absent", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L82"}, {"caller_nid": "lims_test_catalogue_test_endpoint_mismatch_raises", "callee": "write_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L88"}, {"caller_nid": "lims_test_catalogue_test_endpoint_mismatch_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L89"}, {"caller_nid": "lims_test_catalogue_test_endpoint_mismatch_raises", "callee": "read_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L90"}, {"caller_nid": "lims_test_catalogue_test_write_creates_parent_directory", "callee": "write_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L96"}, {"caller_nid": "lims_test_catalogue_test_write_creates_parent_directory", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L97"}, {"caller_nid": "lims_test_catalogue_test_write_atomic_replaces_previous_file", "callee": "write_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L103"}, {"caller_nid": "lims_test_catalogue_test_write_atomic_replaces_previous_file", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L104"}, {"caller_nid": "lims_test_catalogue_test_write_atomic_replaces_previous_file", "callee": "OfflineCatalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L106"}, {"caller_nid": "lims_test_catalogue_test_write_atomic_replaces_previous_file", "callee": "write_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L113"}, {"caller_nid": "lims_test_catalogue_test_write_atomic_replaces_previous_file", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L114"}, {"caller_nid": "lims_test_catalogue_test_write_atomic_replaces_previous_file", "callee": "read_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L116"}, {"caller_nid": "lims_test_catalogue_test_read_handles_missing_projects_array", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L129"}, {"caller_nid": "lims_test_catalogue_test_read_handles_missing_projects_array", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L129"}, {"caller_nid": "lims_test_catalogue_test_read_handles_missing_projects_array", "callee": "read_catalogue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py", "source_location": "L130"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/f210fb27d6c3e6e09e85a4dfd19da3964121248f96b1aff32f9223e622d1eecc.json b/graphify-out/cache/ast/f210fb27d6c3e6e09e85a4dfd19da3964121248f96b1aff32f9223e622d1eecc.json new file mode 100644 index 0000000..5da7dda --- /dev/null +++ b/graphify-out/cache/ast/f210fb27d6c3e6e09e85a4dfd19da3964121248f96b1aff32f9223e622d1eecc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_scan_py", "label": "_scan.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L1"}, {"id": "orchestrator_scan_iter_subdirs", "label": "iter_subdirs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L30"}, {"id": "orchestrator_scan_walk_equipment_run_leaves", "label": "walk_equipment_run_leaves()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L55"}, {"id": "orchestrator_scan_walk_run_leaves", "label": "walk_run_leaves()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L89"}, {"id": "orchestrator_scan_count_files_and_bytes", "label": "count_files_and_bytes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L105"}, {"id": "orchestrator_scan_rationale_1", "label": "Shared filesystem helpers for the orchestrator. Backend Spec \u00a713.2. Both :mod:`", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L1"}, {"id": "orchestrator_scan_rationale_31", "label": "Return immediate sub-directories of ``parent``. Skips ``.exlab-wizard/``, h", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L31"}, {"id": "orchestrator_scan_rationale_56", "label": "Return every ``Run_*`` / ``TestRun_*`` directory under one equipment dir. `", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L56"}, {"id": "orchestrator_scan_rationale_90", "label": "Return every ``Run_*`` / ``TestRun_*`` directory under ``staging_root``. Pe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L90"}, {"id": "orchestrator_scan_rationale_106", "label": "Sum file count + total bytes under ``run_path``. With ``exclude_cache=True`", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L106"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_scan_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_scan_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_scan_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_scan_py", "target": "exlab_wizard_paths", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_scan_py", "target": "orchestrator_scan_iter_subdirs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_scan_py", "target": "orchestrator_scan_walk_equipment_run_leaves", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L55", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_scan_py", "target": "orchestrator_scan_walk_run_leaves", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L89", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_scan_py", "target": "orchestrator_scan_count_files_and_bytes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L105", "weight": 1.0}, {"source": "orchestrator_scan_walk_equipment_run_leaves", "target": "orchestrator_scan_iter_subdirs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L71", "weight": 1.0}, {"source": "orchestrator_scan_walk_run_leaves", "target": "orchestrator_scan_iter_subdirs", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L100", "weight": 1.0}, {"source": "orchestrator_scan_walk_run_leaves", "target": "orchestrator_scan_walk_equipment_run_leaves", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L101", "weight": 1.0}, {"source": "orchestrator_scan_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_orchestrator_scan_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L1", "weight": 1.0}, {"source": "orchestrator_scan_rationale_31", "target": "orchestrator_scan_iter_subdirs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L31", "weight": 1.0}, {"source": "orchestrator_scan_rationale_56", "target": "orchestrator_scan_walk_equipment_run_leaves", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L56", "weight": 1.0}, {"source": "orchestrator_scan_rationale_90", "target": "orchestrator_scan_walk_run_leaves", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L90", "weight": 1.0}, {"source": "orchestrator_scan_rationale_106", "target": "orchestrator_scan_count_files_and_bytes", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L106", "weight": 1.0}], "raw_calls": [{"caller_nid": "orchestrator_scan_iter_subdirs", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L41"}, {"caller_nid": "orchestrator_scan_iter_subdirs", "callee": "scandir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L41"}, {"caller_nid": "orchestrator_scan_iter_subdirs", "callee": "startswith", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L45"}, {"caller_nid": "orchestrator_scan_iter_subdirs", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L48"}, {"caller_nid": "orchestrator_scan_iter_subdirs", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L49"}, {"caller_nid": "orchestrator_scan_iter_subdirs", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L49"}, {"caller_nid": "orchestrator_scan_walk_equipment_run_leaves", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L74"}, {"caller_nid": "orchestrator_scan_walk_equipment_run_leaves", "callee": "is_test_run_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L75"}, {"caller_nid": "orchestrator_scan_walk_equipment_run_leaves", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L78"}, {"caller_nid": "orchestrator_scan_walk_equipment_run_leaves", "callee": "is_run_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L79"}, {"caller_nid": "orchestrator_scan_walk_equipment_run_leaves", "callee": "is_run_dir", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L81"}, {"caller_nid": "orchestrator_scan_walk_equipment_run_leaves", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L85"}, {"caller_nid": "orchestrator_scan_walk_run_leaves", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L97"}, {"caller_nid": "orchestrator_scan_walk_run_leaves", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L101"}, {"caller_nid": "orchestrator_scan_count_files_and_bytes", "callee": "pop", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L117"}, {"caller_nid": "orchestrator_scan_count_files_and_bytes", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L119"}, {"caller_nid": "orchestrator_scan_count_files_and_bytes", "callee": "scandir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L119"}, {"caller_nid": "orchestrator_scan_count_files_and_bytes", "callee": "is_dir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L126"}, {"caller_nid": "orchestrator_scan_count_files_and_bytes", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L127"}, {"caller_nid": "orchestrator_scan_count_files_and_bytes", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L127"}, {"caller_nid": "orchestrator_scan_count_files_and_bytes", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L129"}, {"caller_nid": "orchestrator_scan_count_files_and_bytes", "callee": "stat", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py", "source_location": "L131"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/f27b822b9309b935c7ebf4e4dd0a61b6c1daa3099f470513f5de0fa7ec9c554b.json b/graphify-out/cache/ast/f27b822b9309b935c7ebf4e4dd0a61b6c1daa3099f470513f5de0fa7ec9c554b.json new file mode 100644 index 0000000..b940870 --- /dev/null +++ b/graphify-out/cache/ast/f27b822b9309b935c7ebf4e4dd0a61b6c1daa3099f470513f5de0fa7ec9c554b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "label": "logger.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L1"}, {"id": "plugins_logger_pluginlogframe", "label": "PluginLogFrame", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L46"}, {"id": "plugins_logger_pluginlogger", "label": "PluginLogger", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L59"}, {"id": "abc", "label": "ABC", "file_type": "code", "source_file": "", "source_location": ""}, {"id": "plugins_logger_debug", "label": "debug()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L69"}, {"id": "plugins_logger_info", "label": "info()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L73"}, {"id": "plugins_logger_warning", "label": "warning()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L77"}, {"id": "plugins_logger_error", "label": "error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L81"}, {"id": "plugins_logger_hostpluginlogger", "label": "HostPluginLogger", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L85"}, {"id": "plugins_logger_hostpluginlogger_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L95"}, {"id": "plugins_logger_hostpluginlogger_debug", "label": ".debug()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L98"}, {"id": "plugins_logger_hostpluginlogger_info", "label": ".info()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L101"}, {"id": "plugins_logger_hostpluginlogger_warning", "label": ".warning()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L104"}, {"id": "plugins_logger_hostpluginlogger_error", "label": ".error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L107"}, {"id": "plugins_logger_hostpluginlogger_emit", "label": "._emit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L110"}, {"id": "plugins_logger_workerpluginlogger", "label": "WorkerPluginLogger", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L121"}, {"id": "plugins_logger_workerpluginlogger_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L137"}, {"id": "plugins_logger_workerpluginlogger_debug", "label": ".debug()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L140"}, {"id": "plugins_logger_workerpluginlogger_info", "label": ".info()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L143"}, {"id": "plugins_logger_workerpluginlogger_warning", "label": ".warning()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L146"}, {"id": "plugins_logger_workerpluginlogger_error", "label": ".error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L149"}, {"id": "plugins_logger_workerpluginlogger_emit", "label": "._emit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L152"}, {"id": "plugins_logger_rationale_1", "label": "Plugin logger shim. Backend Spec \u00a76.1.4 / \u00a76.3.2. Plugins call ``ctx.log.info(.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L1"}, {"id": "plugins_logger_rationale_47", "label": "Wire format for worker-side log records. The worker subprocess emits one ``", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L47"}, {"id": "plugins_logger_rationale_60", "label": "Abstract structured-log interface plugins receive on ``ctx.log``. Implement", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L60"}, {"id": "plugins_logger_rationale_70", "label": "Emit a DEBUG-level structured log record.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L70"}, {"id": "plugins_logger_rationale_74", "label": "Emit an INFO-level structured log record.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L74"}, {"id": "plugins_logger_rationale_78", "label": "Emit a WARNING-level structured log record.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L78"}, {"id": "plugins_logger_rationale_82", "label": "Emit an ERROR-level structured log record.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L82"}, {"id": "plugins_logger_rationale_86", "label": "In-process forwarder used when plugins run without subprocess isolation. Us", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L86"}, {"id": "plugins_logger_rationale_122", "label": "Worker-side forwarder. Emits JSON frames on stderr. Used inside the plugin", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L122"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "msgspec", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "plugins_logger_pluginlogframe", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "plugins_logger_pluginlogger", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L59", "weight": 1.0}, {"source": "plugins_logger_pluginlogger", "target": "abc", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "plugins_logger_debug", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "plugins_logger_info", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L73", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "plugins_logger_warning", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L77", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "plugins_logger_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "plugins_logger_hostpluginlogger", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L85", "weight": 1.0}, {"source": "plugins_logger_hostpluginlogger", "target": "plugins_logger_pluginlogger", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L85", "weight": 1.0}, {"source": "plugins_logger_hostpluginlogger", "target": "plugins_logger_hostpluginlogger_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L95", "weight": 1.0}, {"source": "plugins_logger_hostpluginlogger", "target": "plugins_logger_hostpluginlogger_debug", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L98", "weight": 1.0}, {"source": "plugins_logger_hostpluginlogger", "target": "plugins_logger_hostpluginlogger_info", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L101", "weight": 1.0}, {"source": "plugins_logger_hostpluginlogger", "target": "plugins_logger_hostpluginlogger_warning", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L104", "weight": 1.0}, {"source": "plugins_logger_hostpluginlogger", "target": "plugins_logger_hostpluginlogger_error", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L107", "weight": 1.0}, {"source": "plugins_logger_hostpluginlogger", "target": "plugins_logger_hostpluginlogger_emit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L110", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "target": "plugins_logger_workerpluginlogger", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L121", "weight": 1.0}, {"source": "plugins_logger_workerpluginlogger", "target": "plugins_logger_pluginlogger", "relation": "inherits", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L121", "weight": 1.0}, {"source": "plugins_logger_workerpluginlogger", "target": "plugins_logger_workerpluginlogger_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L137", "weight": 1.0}, {"source": "plugins_logger_workerpluginlogger", "target": "plugins_logger_workerpluginlogger_debug", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L140", "weight": 1.0}, {"source": "plugins_logger_workerpluginlogger", "target": "plugins_logger_workerpluginlogger_info", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L143", "weight": 1.0}, {"source": "plugins_logger_workerpluginlogger", "target": "plugins_logger_workerpluginlogger_warning", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L146", "weight": 1.0}, {"source": "plugins_logger_workerpluginlogger", "target": "plugins_logger_workerpluginlogger_error", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L149", "weight": 1.0}, {"source": "plugins_logger_workerpluginlogger", "target": "plugins_logger_workerpluginlogger_emit", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L152", "weight": 1.0}, {"source": "plugins_logger_hostpluginlogger_debug", "target": "plugins_logger_workerpluginlogger_emit", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L99", "weight": 1.0}, {"source": "plugins_logger_hostpluginlogger_info", "target": "plugins_logger_workerpluginlogger_emit", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L102", "weight": 1.0}, {"source": "plugins_logger_hostpluginlogger_warning", "target": "plugins_logger_workerpluginlogger_emit", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L105", "weight": 1.0}, {"source": "plugins_logger_hostpluginlogger_error", "target": "plugins_logger_workerpluginlogger_emit", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L108", "weight": 1.0}, {"source": "plugins_logger_workerpluginlogger_debug", "target": "plugins_logger_workerpluginlogger_emit", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L141", "weight": 1.0}, {"source": "plugins_logger_workerpluginlogger_info", "target": "plugins_logger_workerpluginlogger_emit", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L144", "weight": 1.0}, {"source": "plugins_logger_workerpluginlogger_warning", "target": "plugins_logger_workerpluginlogger_emit", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L147", "weight": 1.0}, {"source": "plugins_logger_workerpluginlogger_error", "target": "plugins_logger_workerpluginlogger_emit", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L150", "weight": 1.0}, {"source": "plugins_logger_workerpluginlogger_emit", "target": "plugins_logger_pluginlogframe", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L153", "weight": 1.0}, {"source": "plugins_logger_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_plugins_logger_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L1", "weight": 1.0}, {"source": "plugins_logger_rationale_47", "target": "plugins_logger_pluginlogframe", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L47", "weight": 1.0}, {"source": "plugins_logger_rationale_60", "target": "plugins_logger_pluginlogger", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L60", "weight": 1.0}, {"source": "plugins_logger_rationale_70", "target": "plugins_logger_pluginlogger_debug", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L70", "weight": 1.0}, {"source": "plugins_logger_rationale_74", "target": "plugins_logger_pluginlogger_info", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L74", "weight": 1.0}, {"source": "plugins_logger_rationale_78", "target": "plugins_logger_pluginlogger_warning", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L78", "weight": 1.0}, {"source": "plugins_logger_rationale_82", "target": "plugins_logger_pluginlogger_error", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L82", "weight": 1.0}, {"source": "plugins_logger_rationale_86", "target": "plugins_logger_hostpluginlogger", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L86", "weight": 1.0}, {"source": "plugins_logger_rationale_122", "target": "plugins_logger_workerpluginlogger", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L122", "weight": 1.0}], "raw_calls": [{"caller_nid": "plugins_logger_hostpluginlogger_init", "callee": "get_logger", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L96"}, {"caller_nid": "plugins_logger_hostpluginlogger_emit", "callee": "log", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L116"}, {"caller_nid": "plugins_logger_hostpluginlogger_emit", "callee": "log", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L118"}, {"caller_nid": "plugins_logger_workerpluginlogger_emit", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L154"}, {"caller_nid": "plugins_logger_workerpluginlogger_emit", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L154"}, {"caller_nid": "plugins_logger_workerpluginlogger_emit", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L155"}, {"caller_nid": "plugins_logger_workerpluginlogger_emit", "callee": "flush", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py", "source_location": "L156"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/f410dc4800c6c45da92b48b7641afbd729afd7326ed8d190d04b1a2e38a73dce.json b/graphify-out/cache/ast/f410dc4800c6c45da92b48b7641afbd729afd7326ed8d190d04b1a2e38a73dce.json new file mode 100644 index 0000000..d40c8f1 --- /dev/null +++ b/graphify-out/cache/ast/f410dc4800c6c45da92b48b7641afbd729afd7326ed8d190d04b1a2e38a73dce.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "label": "test_config_router.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L1"}, {"id": "api_test_config_router_empty_config", "label": "_empty_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L19"}, {"id": "api_test_config_router_ready_config", "label": "_ready_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L23"}, {"id": "api_test_config_router_test_get_config_returns_loaded_config", "label": "test_get_config_returns_loaded_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L44"}, {"id": "api_test_config_router_test_get_config_returns_default_when_none", "label": "test_get_config_returns_default_when_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L55"}, {"id": "api_test_config_router_test_put_config_persists_and_reevaluates_state", "label": "test_put_config_persists_and_reevaluates_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L65"}, {"id": "api_test_config_router_test_put_config_invalid_body_returns_422", "label": "test_put_config_invalid_body_returns_422()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L91"}, {"id": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", "label": "test_append_equipment_persists_and_re_evaluates_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L107"}, {"id": "api_test_config_router_test_append_equipment_rejects_duplicate_id", "label": "test_append_equipment_rejects_duplicate_id()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L138"}, {"id": "api_test_config_router_rationale_1", "label": "Unit tests for the ``/config`` router.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "target": "fastapi_testclient", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "target": "exlab_wizard_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "target": "api_test_config_router_empty_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "target": "api_test_config_router_ready_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "target": "api_test_config_router_test_get_config_returns_loaded_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L44", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "target": "api_test_config_router_test_get_config_returns_default_when_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L55", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "target": "api_test_config_router_test_put_config_persists_and_reevaluates_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L65", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "target": "api_test_config_router_test_put_config_invalid_body_returns_422", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L91", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "target": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L107", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "target": "api_test_config_router_test_append_equipment_rejects_duplicate_id", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L138", "weight": 1.0}, {"source": "api_test_config_router_test_get_config_returns_loaded_config", "target": "api_test_config_router_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L45", "weight": 1.0}, {"source": "api_test_config_router_test_put_config_persists_and_reevaluates_state", "target": "api_test_config_router_empty_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L74", "weight": 1.0}, {"source": "api_test_config_router_test_put_config_persists_and_reevaluates_state", "target": "api_test_config_router_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L77", "weight": 1.0}, {"source": "api_test_config_router_test_put_config_invalid_body_returns_422", "target": "api_test_config_router_empty_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L92", "weight": 1.0}, {"source": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", "target": "api_test_config_router_empty_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L113", "weight": 1.0}, {"source": "api_test_config_router_test_append_equipment_rejects_duplicate_id", "target": "api_test_config_router_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L139", "weight": 1.0}, {"source": "api_test_config_router_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_api_test_config_router_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_test_config_router_empty_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L20"}, {"caller_nid": "api_test_config_router_ready_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L24"}, {"caller_nid": "api_test_config_router_ready_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L25"}, {"caller_nid": "api_test_config_router_ready_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L27"}, {"caller_nid": "api_test_config_router_ready_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L32"}, {"caller_nid": "api_test_config_router_ready_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L40"}, {"caller_nid": "api_test_config_router_test_get_config_returns_loaded_config", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L46"}, {"caller_nid": "api_test_config_router_test_get_config_returns_loaded_config", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L47"}, {"caller_nid": "api_test_config_router_test_get_config_returns_loaded_config", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L48"}, {"caller_nid": "api_test_config_router_test_get_config_returns_loaded_config", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L49"}, {"caller_nid": "api_test_config_router_test_get_config_returns_loaded_config", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L51"}, {"caller_nid": "api_test_config_router_test_get_config_returns_loaded_config", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L52"}, {"caller_nid": "api_test_config_router_test_get_config_returns_loaded_config", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L52"}, {"caller_nid": "api_test_config_router_test_get_config_returns_default_when_none", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L56"}, {"caller_nid": "api_test_config_router_test_get_config_returns_default_when_none", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L57"}, {"caller_nid": "api_test_config_router_test_get_config_returns_default_when_none", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L58"}, {"caller_nid": "api_test_config_router_test_get_config_returns_default_when_none", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L59"}, {"caller_nid": "api_test_config_router_test_get_config_returns_default_when_none", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L61"}, {"caller_nid": "api_test_config_router_test_put_config_persists_and_reevaluates_state", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L74"}, {"caller_nid": "api_test_config_router_test_put_config_persists_and_reevaluates_state", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L75"}, {"caller_nid": "api_test_config_router_test_put_config_persists_and_reevaluates_state", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L76"}, {"caller_nid": "api_test_config_router_test_put_config_persists_and_reevaluates_state", "callee": "put", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L78"}, {"caller_nid": "api_test_config_router_test_put_config_persists_and_reevaluates_state", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L78"}, {"caller_nid": "api_test_config_router_test_put_config_persists_and_reevaluates_state", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L80"}, {"caller_nid": "api_test_config_router_test_put_config_invalid_body_returns_422", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L92"}, {"caller_nid": "api_test_config_router_test_put_config_invalid_body_returns_422", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L93"}, {"caller_nid": "api_test_config_router_test_put_config_invalid_body_returns_422", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L94"}, {"caller_nid": "api_test_config_router_test_put_config_invalid_body_returns_422", "callee": "put", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L96"}, {"caller_nid": "api_test_config_router_test_put_config_invalid_body_returns_422", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L98"}, {"caller_nid": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L113"}, {"caller_nid": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L114"}, {"caller_nid": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L115"}, {"caller_nid": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L116"}, {"caller_nid": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L130"}, {"caller_nid": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L130"}, {"caller_nid": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L132"}, {"caller_nid": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L135"}, {"caller_nid": "api_test_config_router_test_append_equipment_rejects_duplicate_id", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L139"}, {"caller_nid": "api_test_config_router_test_append_equipment_rejects_duplicate_id", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L140"}, {"caller_nid": "api_test_config_router_test_append_equipment_rejects_duplicate_id", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L141"}, {"caller_nid": "api_test_config_router_test_append_equipment_rejects_duplicate_id", "callee": "model_validate", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L142"}, {"caller_nid": "api_test_config_router_test_append_equipment_rejects_duplicate_id", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L156"}, {"caller_nid": "api_test_config_router_test_append_equipment_rejects_duplicate_id", "callee": "model_dump", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L156"}, {"caller_nid": "api_test_config_router_test_append_equipment_rejects_duplicate_id", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py", "source_location": "L158"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/f41edf6ffee1d91b63ef2164a479d0716a5c481a699910283a4fb5b95e2105e9.json b/graphify-out/cache/ast/f41edf6ffee1d91b63ef2164a479d0716a5c481a699910283a4fb5b95e2105e9.json new file mode 100644 index 0000000..af31719 --- /dev/null +++ b/graphify-out/cache/ast/f41edf6ffee1d91b63ef2164a479d0716a5c481a699910283a4fb5b95e2105e9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_format_py", "label": "format.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L1"}, {"id": "logging_format_structuredtagformatter", "label": "StructuredTagFormatter", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L71"}, {"id": "logging_format_structuredtagformatter_format", "label": ".format()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L90"}, {"id": "logging_format_format_utc_timestamp", "label": "_format_utc_timestamp()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L104"}, {"id": "logging_format_render_tags", "label": "_render_tags()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L115"}, {"id": "logging_format_redact_secret", "label": "redact_secret()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L135"}, {"id": "logging_format_rationale_1", "label": "Structured log formatter and secret-redaction helpers. Backend Spec \u00a716.4, \u00a716.1", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L1"}, {"id": "logging_format_rationale_72", "label": "Formatter that renders the \u00a716.4 structured-tag log line. Reads the active", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L72"}, {"id": "logging_format_rationale_105", "label": "Render ``epoch_seconds`` as a UTC ISO 8601 timestamp with ``Z`` suffix. Exa", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L105"}, {"id": "logging_format_rationale_116", "label": "Render the active context as ``[host:..] [equip:..] ...``. Returns the empt", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L116"}, {"id": "logging_format_rationale_136", "label": "Mask credential-bearing substrings inside ``value``. Replaces three classes", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L136"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_format_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_format_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_format_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_format_py", "target": "exlab_wizard_logging_context", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_format_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_format_py", "target": "logging_format_structuredtagformatter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L71", "weight": 1.0}, {"source": "logging_format_structuredtagformatter", "target": "logging_format_structuredtagformatter_format", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L90", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_format_py", "target": "logging_format_format_utc_timestamp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L104", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_format_py", "target": "logging_format_render_tags", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L115", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_format_py", "target": "logging_format_redact_secret", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L135", "weight": 1.0}, {"source": "logging_format_structuredtagformatter_format", "target": "logging_format_format_utc_timestamp", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L91", "weight": 1.0}, {"source": "logging_format_structuredtagformatter_format", "target": "logging_format_render_tags", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L98", "weight": 1.0}, {"source": "logging_format_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_format_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L1", "weight": 1.0}, {"source": "logging_format_rationale_72", "target": "logging_format_structuredtagformatter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L72", "weight": 1.0}, {"source": "logging_format_rationale_105", "target": "logging_format_format_utc_timestamp", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L105", "weight": 1.0}, {"source": "logging_format_rationale_116", "target": "logging_format_render_tags", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L116", "weight": 1.0}, {"source": "logging_format_rationale_136", "target": "logging_format_redact_secret", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L136", "weight": 1.0}], "raw_calls": [{"caller_nid": "logging_format_structuredtagformatter_format", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L92"}, {"caller_nid": "logging_format_structuredtagformatter_format", "callee": "getMessage", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L94"}, {"caller_nid": "logging_format_structuredtagformatter_format", "callee": "formatException", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L97"}, {"caller_nid": "logging_format_format_utc_timestamp", "callee": "fromtimestamp", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L111"}, {"caller_nid": "logging_format_format_utc_timestamp", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L112"}, {"caller_nid": "logging_format_render_tags", "callee": "get_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L121"}, {"caller_nid": "logging_format_render_tags", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L124"}, {"caller_nid": "logging_format_render_tags", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L126"}, {"caller_nid": "logging_format_render_tags", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L127"}, {"caller_nid": "logging_format_redact_secret", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L152"}, {"caller_nid": "logging_format_redact_secret", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L155"}, {"caller_nid": "logging_format_redact_secret", "callee": "sub", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L156"}, {"caller_nid": "logging_format_redact_secret", "callee": "sub", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L160"}, {"caller_nid": "logging_format_redact_secret", "callee": "sub", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py", "source_location": "L161"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/f513469aea26f076b28281ae74f49e4da780fdee8b923ca504edfa6fce613d5c.json b/graphify-out/cache/ast/f513469aea26f076b28281ae74f49e4da780fdee8b923ca504edfa6fce613d5c.json new file mode 100644 index 0000000..daa5031 --- /dev/null +++ b/graphify-out/cache/ast/f513469aea26f076b28281ae74f49e4da780fdee8b923ca504edfa6fce613d5c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "label": "test_engine_audit.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1"}, {"id": "validator_test_engine_audit_build_creation_json_dict", "label": "_build_creation_json_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L46"}, {"id": "validator_test_engine_audit_write_creation_json", "label": "_write_creation_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L87"}, {"id": "validator_test_engine_audit_make_clean_tree", "label": "_make_clean_tree()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L96"}, {"id": "validator_test_engine_audit_make_validator", "label": "_make_validator()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L140"}, {"id": "validator_test_engine_audit_by_rule", "label": "_by_rule()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L164"}, {"id": "validator_test_engine_audit_test_audit_clean_tree_returns_empty_list", "label": "test_audit_clean_tree_returns_empty_list()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L173"}, {"id": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", "label": "test_audit_project_missing_creation_json_returns_orphan()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L181"}, {"id": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", "label": "test_audit_run_missing_creation_json_returns_orphan()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L202"}, {"id": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", "label": "test_audit_unsafe_project_name_returns_soft_finding()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L219"}, {"id": "validator_test_engine_audit_test_audit_clean_project_name_has_no_unsafe_finding", "label": "test_audit_clean_project_name_has_no_unsafe_finding()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L238"}, {"id": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", "label": "test_audit_mode_prefix_mismatch_run_with_test_kind()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L246"}, {"id": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", "label": "test_audit_unresolved_placeholder_in_directory_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L268"}, {"id": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", "label": "test_audit_override_active_flag_set_when_problem_class_overridden()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L291"}, {"id": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", "label": "test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L324"}, {"id": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", "label": "test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L348"}, {"id": "validator_test_engine_audit_test_audit_respects_content_scan_max_mib_cap", "label": "test_audit_respects_content_scan_max_mib_cap()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L374"}, {"id": "validator_test_engine_audit_test_audit_respects_extensions_allowlist", "label": "test_audit_respects_extensions_allowlist()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L398"}, {"id": "validator_test_engine_audit_test_audit_detects_binary_files_via_null_byte_sniff", "label": "test_audit_detects_binary_files_via_null_byte_sniff()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L417"}, {"id": "validator_test_engine_audit_test_audit_scans_text_file_content_when_within_limits", "label": "test_audit_scans_text_file_content_when_within_limits()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L436"}, {"id": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", "label": "test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L452"}, {"id": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", "label": "test_query_problems_is_alias_for_audit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L474"}, {"id": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", "label": "test_audit_scope_equipment_id_resolves_to_configured_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L487"}, {"id": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", "label": "test_audit_scope_project_path_walks_one_subtree()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L524"}, {"id": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", "label": "test_audit_scope_all_walks_every_configured_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L549"}, {"id": "validator_test_engine_audit_test_audit_scope_unknown_equipment_id_returns_empty", "label": "test_audit_scope_unknown_equipment_id_returns_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L584"}, {"id": "validator_test_engine_audit_test_audit_skips_cache_directory_contents", "label": "test_audit_skips_cache_directory_contents()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L591"}, {"id": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", "label": "test_audit_revoked_override_does_not_set_override_active()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L607"}, {"id": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_file_name", "label": "test_audit_unresolved_placeholder_in_file_name()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L644"}, {"id": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", "label": "test_audit_test_run_with_experimental_kind_flagged()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L660"}, {"id": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", "label": "test_audit_returns_list_of_finding_dataclass_instances()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L680"}, {"id": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", "label": "test_audit_includes_staging_root_when_orchestrator_on()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L695"}, {"id": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", "label": "test_audit_findings_carry_full_section_11_8_shape()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L722"}, {"id": "validator_test_engine_audit_test_audit_unknown_scope_kind_raises_value_error", "label": "test_audit_unknown_scope_kind_raises_value_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L760"}, {"id": "validator_test_engine_audit_test_audit_root_does_not_exist_returns_empty", "label": "test_audit_root_does_not_exist_returns_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L767"}, {"id": "validator_test_engine_audit_test_audit_root_is_a_file_returns_empty", "label": "test_audit_root_is_a_file_returns_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L775"}, {"id": "validator_test_engine_audit_test_audit_handles_unreadable_directory", "label": "test_audit_handles_unreadable_directory()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L783"}, {"id": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", "label": "test_audit_other_level_subfolder_under_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L803"}, {"id": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", "label": "test_audit_other_under_test_runs_unknown_leaf()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L819"}, {"id": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", "label": "test_audit_deeply_nested_other_subfolder()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L835"}, {"id": "validator_test_engine_audit_test_audit_creation_json_unreadable", "label": "test_audit_creation_json_unreadable()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L854"}, {"id": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", "label": "test_audit_creation_json_malformed_raw_decode()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L876"}, {"id": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", "label": "test_audit_creation_json_missing_required_struct_field()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L888"}, {"id": "validator_test_engine_audit_test_audit_readme_fields_json_decode_failure", "label": "test_audit_readme_fields_json_decode_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L908"}, {"id": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", "label": "test_audit_missing_required_field_with_required_ids()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L920"}, {"id": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", "label": "test_audit_missing_required_field_required_ids_not_a_list()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L956"}, {"id": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", "label": "test_audit_content_scan_skips_test_runs_marker_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L991"}, {"id": "validator_test_engine_audit_test_audit_content_scan_eligibility_returns_false_on_stat_failure", "label": "test_audit_content_scan_eligibility_returns_false_on_stat_failure()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1021"}, {"id": "validator_test_engine_audit_test_audit_read_text_for_scan_handles_oserror", "label": "test_audit_read_text_for_scan_handles_oserror()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1048"}, {"id": "validator_test_engine_audit_test_classify_level_value_error_returns_other", "label": "test_classify_level_value_error_returns_other()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1075"}, {"id": "validator_test_engine_audit_test_finding_sort_unknown_tier_sorts_after_committed_tiers", "label": "test_finding_sort_unknown_tier_sorts_after_committed_tiers()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1089"}, {"id": "validator_test_engine_audit_test_level_for_orphan_returns_none_for_unmapped_levels", "label": "test_level_for_orphan_returns_none_for_unmapped_levels()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1113"}, {"id": "validator_test_engine_audit_test_validator_from_config_builds_engine", "label": "test_validator_from_config_builds_engine()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1122"}, {"id": "validator_test_engine_audit_test_validator_from_config_orchestrator_disabled", "label": "test_validator_from_config_orchestrator_disabled()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1140"}, {"id": "validator_test_engine_audit_test_validator_from_config_no_orchestrator_attr", "label": "test_validator_from_config_no_orchestrator_attr()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1154"}, {"id": "validator_test_engine_audit_test_classify_level_unrelated_dir_returns_other", "label": "test_classify_level_unrelated_dir_returns_other()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1165"}, {"id": "validator_test_engine_audit_test_compute_run_path_unrelated_other_returns_input", "label": "test_compute_run_path_unrelated_other_returns_input()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1175"}, {"id": "validator_test_engine_audit_test_compute_run_path_root_other_returns_root", "label": "test_compute_run_path_root_other_returns_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1187"}, {"id": "validator_test_engine_audit_rationale_1", "label": "Unit tests for ``Validator.audit`` and ``Validator.query_problems``. Backend Sp", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1"}, {"id": "validator_test_engine_audit_rationale_56", "label": "Build the wire-form ``creation.json`` dict for a fixture tree.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L56"}, {"id": "validator_test_engine_audit_rationale_88", "label": "Write the wire-form ``creation.json`` under ``/.exlab-wizard``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L88"}, {"id": "validator_test_engine_audit_rationale_106", "label": "Build a single-equipment / single-project / single-run clean tree. Returns", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L106"}, {"id": "validator_test_engine_audit_rationale_148", "label": "Construct a :class:`Validator` for tests with a single equipment root.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L148"}, {"id": "validator_test_engine_audit_rationale_174", "label": "A well-formed equipment / project / run tree produces no findings.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L174"}, {"id": "validator_test_engine_audit_rationale_182", "label": "A project directory with no ``creation.json`` produces one orphan finding.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L182"}, {"id": "validator_test_engine_audit_rationale_203", "label": "A run directory with no ``creation.json`` produces one orphan finding.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L203"}, {"id": "validator_test_engine_audit_rationale_220", "label": "A project directory whose name is not a safe path segment (\u00a73.2) produces a", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L220"}, {"id": "validator_test_engine_audit_rationale_239", "label": "A human-readable project name (spaces and all) is a safe segment.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L239"}, {"id": "validator_test_engine_audit_rationale_247", "label": "A ``Run_*`` leaf whose creation.json says ``run_kind=\"test\"`` is flagged.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L247"}, {"id": "validator_test_engine_audit_rationale_269", "label": "A directory name containing ```` produces a finding.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L269"}, {"id": "validator_test_engine_audit_rationale_294", "label": "An active override with matching ``problem_class`` flips ``override_active``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L294"}, {"id": "validator_test_engine_audit_rationale_327", "label": "Synced run + hard finding -> ``synced_under_prior_policy=True``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L327"}, {"id": "validator_test_engine_audit_rationale_351", "label": "Cleaned run + hard finding -> ``synced_under_prior_policy=True``. A ``clean", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L351"}, {"id": "validator_test_engine_audit_rationale_375", "label": "A large file with a placeholder is NOT scanned for content.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L375"}, {"id": "validator_test_engine_audit_rationale_399", "label": "A ``.bin`` file is skipped from content scanning by the extension gate.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L399"}, {"id": "validator_test_engine_audit_rationale_418", "label": "A ``.txt`` file with a NUL byte is treated as binary and skipped.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L418"}, {"id": "validator_test_engine_audit_rationale_437", "label": "A small ``.txt`` file inside the run directory is scanned for placeholders.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L437"}, {"id": "validator_test_engine_audit_rationale_455", "label": "Hard-tier findings come first; ties break on rule then offending_path.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L455"}, {"id": "validator_test_engine_audit_rationale_475", "label": "``query_problems`` returns the same list as ``audit``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L475"}, {"id": "validator_test_engine_audit_rationale_488", "label": "``{\"kind\": \"equipment_id\", ...}`` walks only the matching subtree.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L488"}, {"id": "validator_test_engine_audit_rationale_525", "label": "``{\"kind\": \"project_path\", ...}`` walks the supplied path only.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L525"}, {"id": "validator_test_engine_audit_rationale_550", "label": "``{\"kind\": \"all\"}`` aggregates findings across every equipment root.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L550"}, {"id": "validator_test_engine_audit_rationale_585", "label": "An ``equipment_id`` not in the map produces an empty result, not an error.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L585"}, {"id": "validator_test_engine_audit_rationale_592", "label": "The walk does not apply \u00a78.1 rules to ``.exlab-wizard`` contents.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L592"}, {"id": "validator_test_engine_audit_rationale_608", "label": "A tombstone-revoked override does not flip ``override_active``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L608"}, {"id": "validator_test_engine_audit_rationale_645", "label": "A file name containing ```` produces a finding.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L645"}, {"id": "validator_test_engine_audit_rationale_661", "label": "A ``TestRun_*`` leaf with ``run_kind=\"experimental\"`` triggers mismatch.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L661"}, {"id": "validator_test_engine_audit_rationale_681", "label": "Every entry in the result is a :class:`Finding` instance.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L681"}, {"id": "validator_test_engine_audit_rationale_696", "label": "``\"all\"`` scope walks the staging root when one is configured.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L696"}, {"id": "validator_test_engine_audit_rationale_726", "label": "Every finding has the documented \u00a711.8 fields populated.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L726"}, {"id": "validator_test_engine_audit_rationale_761", "label": "An unrecognised ``scope.kind`` raises ``ValueError`` (defensive guard).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L761"}, {"id": "validator_test_engine_audit_rationale_768", "label": "Walking a missing root produces no findings (silent skip).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L768"}, {"id": "validator_test_engine_audit_rationale_776", "label": "Walking a root that is a regular file (not a directory) returns [].", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L776"}, {"id": "validator_test_engine_audit_rationale_784", "label": "A ``PermissionError`` from ``os.scandir`` does not crash the walk.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L784"}, {"id": "validator_test_engine_audit_rationale_804", "label": "A project subfolder that is not a ``Run_*`` / ``TestRuns`` is \"other\".", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L804"}, {"id": "validator_test_engine_audit_rationale_820", "label": "A non-``TestRun_`` leaf under ``TestRuns/`` is classified as \"other\".", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L820"}, {"id": "validator_test_engine_audit_rationale_836", "label": "A subfolder under a run is classified as \"other\"; rules still walk into it.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L836"}, {"id": "validator_test_engine_audit_rationale_858", "label": "A ``creation.json`` that raises ``OSError`` on read is treated as absent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L858"}, {"id": "validator_test_engine_audit_rationale_877", "label": "A ``creation.json`` with invalid JSON bytes is treated as absent.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L877"}, {"id": "validator_test_engine_audit_rationale_889", "label": "A ``creation.json`` valid as raw dict but failing CreationJson decode.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L889"}, {"id": "validator_test_engine_audit_rationale_909", "label": "A malformed ``readme_fields.json`` is silently skipped (no crash).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L909"}, {"id": "validator_test_engine_audit_rationale_921", "label": "Audit picks up missing required README fields when stamped on creation.json.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L921"}, {"id": "validator_test_engine_audit_rationale_957", "label": "``required_readme_field_ids`` that is not a list is ignored.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L957"}, {"id": "validator_test_engine_audit_rationale_992", "label": "The ``test_runs.json`` marker file is exempt from content scanning.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L992"}, {"id": "validator_test_engine_audit_rationale_1025", "label": "If ``stat()`` raises OSError, the file is skipped from content scanning.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1025"}, {"id": "validator_test_engine_audit_rationale_1052", "label": "If ``open(rb)`` raises OSError, the file is silently skipped.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1052"}, {"id": "validator_test_engine_audit_rationale_1076", "label": "A directory outside the equipment root resolves to \"other\" (defensive).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1076"}, {"id": "validator_test_engine_audit_rationale_1090", "label": "A finding with an unknown tier sorts after both hard and soft.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1090"}, {"id": "validator_test_engine_audit_rationale_1114", "label": "``_level_for_orphan`` returns None for non-project / non-run levels.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1114"}, {"id": "validator_test_engine_audit_rationale_1123", "label": "``Validator.from_config`` projects fields out of a Config-shaped object.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1123"}, {"id": "validator_test_engine_audit_rationale_1141", "label": "When ``orchestrator.enabled`` is False, no staging root is wired in.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1141"}, {"id": "validator_test_engine_audit_rationale_1155", "label": "``orchestrator`` attribute absent on the config also works (default None).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1155"}, {"id": "validator_test_engine_audit_rationale_1166", "label": "``_classify_level`` returns \"other\" for dirs outside the equipment root.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1166"}, {"id": "validator_test_engine_audit_rationale_1176", "label": "``_compute_run_path`` returns ``str(directory)`` for unrelated paths.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1176"}, {"id": "validator_test_engine_audit_rationale_1188", "label": "``_compute_run_path`` for the equipment root itself with ``other``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1188"}, {"id": "validator_test_engine_audit_rationale_187", "label": "# NOTE: deliberately no creation.json at the project level.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L187"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "json", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "exlab_wizard_validator_engine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "exlab_wizard_validator_findings", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_write_creation_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L87", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_make_clean_tree", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L96", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_make_validator", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L140", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_by_rule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L164", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_clean_tree_returns_empty_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L173", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L181", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L202", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L219", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_clean_project_name_has_no_unsafe_finding", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L238", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L246", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L268", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L291", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L324", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L348", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_respects_content_scan_max_mib_cap", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L374", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_respects_extensions_allowlist", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L398", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_detects_binary_files_via_null_byte_sniff", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L417", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_scans_text_file_content_when_within_limits", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L436", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L452", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L474", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L487", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L524", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L549", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_scope_unknown_equipment_id_returns_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L584", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_skips_cache_directory_contents", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L591", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L607", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_file_name", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L644", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L660", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L680", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L695", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L722", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_unknown_scope_kind_raises_value_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L760", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_root_does_not_exist_returns_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L767", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_root_is_a_file_returns_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L775", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_handles_unreadable_directory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L783", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L803", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L819", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L835", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_creation_json_unreadable", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L854", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L876", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L888", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_readme_fields_json_decode_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L908", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L920", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L956", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L991", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_content_scan_eligibility_returns_false_on_stat_failure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1021", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_audit_read_text_for_scan_handles_oserror", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1048", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_classify_level_value_error_returns_other", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1075", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_finding_sort_unknown_tier_sorts_after_committed_tiers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1089", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_level_for_orphan_returns_none_for_unmapped_levels", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1113", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_validator_from_config_builds_engine", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1122", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_validator_from_config_orchestrator_disabled", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1140", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_validator_from_config_no_orchestrator_attr", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1154", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_classify_level_unrelated_dir_returns_other", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1165", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_compute_run_path_unrelated_other_returns_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1175", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "target": "validator_test_engine_audit_test_compute_run_path_root_other_returns_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1187", "weight": 1.0}, {"source": "validator_test_engine_audit_make_clean_tree", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L119", "weight": 1.0}, {"source": "validator_test_engine_audit_make_clean_tree", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L121", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_clean_tree_returns_empty_list", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L175", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_clean_tree_returns_empty_list", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L176", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L188", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L190", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L193", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", "target": "validator_test_engine_audit_by_rule", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L195", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L208", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L208", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L211", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", "target": "validator_test_engine_audit_by_rule", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L213", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L227", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L227", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L230", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", "target": "validator_test_engine_audit_by_rule", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L232", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_clean_project_name_has_no_unsafe_finding", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L240", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_clean_project_name_has_no_unsafe_finding", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L241", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_clean_project_name_has_no_unsafe_finding", "target": "validator_test_engine_audit_by_rule", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L243", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L252", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L252", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L258", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", "target": "validator_test_engine_audit_by_rule", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L260", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L277", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L277", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L283", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", "target": "validator_test_engine_audit_by_rule", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L285", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L309", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L309", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L315", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", "target": "validator_test_engine_audit_by_rule", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L317", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L332", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L332", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L338", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", "target": "validator_test_engine_audit_by_rule", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L340", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L361", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L361", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L367", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", "target": "validator_test_engine_audit_by_rule", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L369", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_respects_content_scan_max_mib_cap", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L376", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_respects_content_scan_max_mib_cap", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L383", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_respects_extensions_allowlist", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L400", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_respects_extensions_allowlist", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L404", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_detects_binary_files_via_null_byte_sniff", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L419", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_detects_binary_files_via_null_byte_sniff", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L426", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_scans_text_file_content_when_within_limits", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L438", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_scans_text_file_content_when_within_limits", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L442", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L462", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L462", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L464", "weight": 1.0}, {"source": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L476", "weight": 1.0}, {"source": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L479", "weight": 1.0}, {"source": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L479", "weight": 1.0}, {"source": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L481", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L493", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L495", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L531", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L531", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L542", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L555", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L557", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_scope_unknown_equipment_id_returns_empty", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L586", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_skips_cache_directory_contents", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L593", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_skips_cache_directory_contents", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L599", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L631", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L631", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L637", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", "target": "validator_test_engine_audit_by_rule", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L639", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_file_name", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L646", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_file_name", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L650", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L667", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L667", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L673", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", "target": "validator_test_engine_audit_by_rule", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L675", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L686", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L686", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L689", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L702", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L702", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L731", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L731", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L734", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_unknown_scope_kind_raises_value_error", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L762", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_handles_unreadable_directory", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L798", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L809", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L809", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L811", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L826", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L826", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L828", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L837", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L843", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_creation_json_unreadable", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L859", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_creation_json_unreadable", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L870", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L878", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L882", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L898", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L898", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L900", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_readme_fields_json_decode_failure", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L910", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_readme_fields_json_decode_failure", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L914", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L927", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L931", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L949", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L964", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L968", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L985", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", "target": "validator_test_engine_audit_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L998", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L998", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1009", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_content_scan_eligibility_returns_false_on_stat_failure", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1026", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_content_scan_eligibility_returns_false_on_stat_failure", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1038", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_read_text_for_scan_handles_oserror", "target": "validator_test_engine_audit_make_clean_tree", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1053", "weight": 1.0}, {"source": "validator_test_engine_audit_test_audit_read_text_for_scan_handles_oserror", "target": "validator_test_engine_audit_make_validator", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1065", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_56", "target": "validator_test_engine_audit_build_creation_json_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L56", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_88", "target": "validator_test_engine_audit_write_creation_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L88", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_106", "target": "validator_test_engine_audit_make_clean_tree", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L106", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_148", "target": "validator_test_engine_audit_make_validator", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L148", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_174", "target": "validator_test_engine_audit_test_audit_clean_tree_returns_empty_list", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L174", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_182", "target": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L182", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_203", "target": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L203", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_220", "target": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L220", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_239", "target": "validator_test_engine_audit_test_audit_clean_project_name_has_no_unsafe_finding", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L239", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_247", "target": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L247", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_269", "target": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L269", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_294", "target": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L294", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_327", "target": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L327", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_351", "target": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L351", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_375", "target": "validator_test_engine_audit_test_audit_respects_content_scan_max_mib_cap", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L375", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_399", "target": "validator_test_engine_audit_test_audit_respects_extensions_allowlist", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L399", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_418", "target": "validator_test_engine_audit_test_audit_detects_binary_files_via_null_byte_sniff", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L418", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_437", "target": "validator_test_engine_audit_test_audit_scans_text_file_content_when_within_limits", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L437", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_455", "target": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L455", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_475", "target": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L475", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_488", "target": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L488", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_525", "target": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L525", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_550", "target": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L550", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_585", "target": "validator_test_engine_audit_test_audit_scope_unknown_equipment_id_returns_empty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L585", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_592", "target": "validator_test_engine_audit_test_audit_skips_cache_directory_contents", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L592", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_608", "target": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L608", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_645", "target": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_file_name", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L645", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_661", "target": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L661", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_681", "target": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L681", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_696", "target": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L696", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_726", "target": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L726", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_761", "target": "validator_test_engine_audit_test_audit_unknown_scope_kind_raises_value_error", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L761", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_768", "target": "validator_test_engine_audit_test_audit_root_does_not_exist_returns_empty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L768", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_776", "target": "validator_test_engine_audit_test_audit_root_is_a_file_returns_empty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L776", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_784", "target": "validator_test_engine_audit_test_audit_handles_unreadable_directory", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L784", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_804", "target": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L804", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_820", "target": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L820", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_836", "target": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L836", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_858", "target": "validator_test_engine_audit_test_audit_creation_json_unreadable", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L858", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_877", "target": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L877", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_889", "target": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L889", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_909", "target": "validator_test_engine_audit_test_audit_readme_fields_json_decode_failure", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L909", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_921", "target": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L921", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_957", "target": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L957", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_992", "target": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L992", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_1025", "target": "validator_test_engine_audit_test_audit_content_scan_eligibility_returns_false_on_stat_failure", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1025", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_1052", "target": "validator_test_engine_audit_test_audit_read_text_for_scan_handles_oserror", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1052", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_1076", "target": "validator_test_engine_audit_test_classify_level_value_error_returns_other", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1076", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_1090", "target": "validator_test_engine_audit_test_finding_sort_unknown_tier_sorts_after_committed_tiers", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1090", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_1114", "target": "validator_test_engine_audit_test_level_for_orphan_returns_none_for_unmapped_levels", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1114", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_1123", "target": "validator_test_engine_audit_test_validator_from_config_builds_engine", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1123", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_1141", "target": "validator_test_engine_audit_test_validator_from_config_orchestrator_disabled", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1141", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_1155", "target": "validator_test_engine_audit_test_validator_from_config_no_orchestrator_attr", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1155", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_1166", "target": "validator_test_engine_audit_test_classify_level_unrelated_dir_returns_other", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1166", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_1176", "target": "validator_test_engine_audit_test_compute_run_path_unrelated_other_returns_input", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1176", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_1188", "target": "validator_test_engine_audit_test_compute_run_path_root_other_returns_root", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1188", "weight": 1.0}, {"source": "validator_test_engine_audit_rationale_187", "target": "users_alex_projects_exlabwizard_tests_unit_validator_test_engine_audit_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L187", "weight": 1.0}], "raw_calls": [{"caller_nid": "validator_test_engine_audit_build_creation_json_dict", "callee": "update", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L83"}, {"caller_nid": "validator_test_engine_audit_write_creation_json", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L90"}, {"caller_nid": "validator_test_engine_audit_write_creation_json", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L92"}, {"caller_nid": "validator_test_engine_audit_write_creation_json", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L92"}, {"caller_nid": "validator_test_engine_audit_write_creation_json", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L92"}, {"caller_nid": "validator_test_engine_audit_make_clean_tree", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L117"}, {"caller_nid": "validator_test_engine_audit_make_validator", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L149"}, {"caller_nid": "validator_test_engine_audit_make_validator", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L157"}, {"caller_nid": "validator_test_engine_audit_test_audit_clean_tree_returns_empty_list", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L177"}, {"caller_nid": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L186"}, {"caller_nid": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L194"}, {"caller_nid": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L196"}, {"caller_nid": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L197"}, {"caller_nid": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L198"}, {"caller_nid": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L207"}, {"caller_nid": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L212"}, {"caller_nid": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L214"}, {"caller_nid": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L215"}, {"caller_nid": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L226"}, {"caller_nid": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L231"}, {"caller_nid": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L233"}, {"caller_nid": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L235"}, {"caller_nid": "validator_test_engine_audit_test_audit_clean_project_name_has_no_unsafe_finding", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L242"}, {"caller_nid": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L251"}, {"caller_nid": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L259"}, {"caller_nid": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L261"}, {"caller_nid": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L264"}, {"caller_nid": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L265"}, {"caller_nid": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L265"}, {"caller_nid": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L276"}, {"caller_nid": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L284"}, {"caller_nid": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L286"}, {"caller_nid": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L287"}, {"caller_nid": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L288"}, {"caller_nid": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L308"}, {"caller_nid": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L316"}, {"caller_nid": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L320"}, {"caller_nid": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L321"}, {"caller_nid": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L331"}, {"caller_nid": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L339"}, {"caller_nid": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L341"}, {"caller_nid": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L342"}, {"caller_nid": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L345"}, {"caller_nid": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L360"}, {"caller_nid": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L368"}, {"caller_nid": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L370"}, {"caller_nid": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L371"}, {"caller_nid": "validator_test_engine_audit_test_audit_respects_content_scan_max_mib_cap", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L380"}, {"caller_nid": "validator_test_engine_audit_test_audit_respects_content_scan_max_mib_cap", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L387"}, {"caller_nid": "validator_test_engine_audit_test_audit_respects_extensions_allowlist", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L402"}, {"caller_nid": "validator_test_engine_audit_test_audit_respects_extensions_allowlist", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L408"}, {"caller_nid": "validator_test_engine_audit_test_audit_detects_binary_files_via_null_byte_sniff", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L424"}, {"caller_nid": "validator_test_engine_audit_test_audit_detects_binary_files_via_null_byte_sniff", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L427"}, {"caller_nid": "validator_test_engine_audit_test_audit_scans_text_file_content_when_within_limits", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L440"}, {"caller_nid": "validator_test_engine_audit_test_audit_scans_text_file_content_when_within_limits", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L443"}, {"caller_nid": "validator_test_engine_audit_test_audit_scans_text_file_content_when_within_limits", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L449"}, {"caller_nid": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L459"}, {"caller_nid": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L465"}, {"caller_nid": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", "callee": "index", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L470"}, {"caller_nid": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L478"}, {"caller_nid": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L482"}, {"caller_nid": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", "callee": "query_problems", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L483"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L491"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L492"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L510"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L516"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L517"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L521"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L529"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L530"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L543"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L543"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L544"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L544"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L546"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L553"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L554"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L572"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L578"}, {"caller_nid": "validator_test_engine_audit_test_audit_scope_unknown_equipment_id_returns_empty", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L587"}, {"caller_nid": "validator_test_engine_audit_test_audit_skips_cache_directory_contents", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L597"}, {"caller_nid": "validator_test_engine_audit_test_audit_skips_cache_directory_contents", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L600"}, {"caller_nid": "validator_test_engine_audit_test_audit_skips_cache_directory_contents", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L604"}, {"caller_nid": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L630"}, {"caller_nid": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L638"}, {"caller_nid": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L640"}, {"caller_nid": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L641"}, {"caller_nid": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_file_name", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L648"}, {"caller_nid": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_file_name", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L651"}, {"caller_nid": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_file_name", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L657"}, {"caller_nid": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L666"}, {"caller_nid": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L674"}, {"caller_nid": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L676"}, {"caller_nid": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L677"}, {"caller_nid": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L685"}, {"caller_nid": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L690"}, {"caller_nid": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L692"}, {"caller_nid": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L692"}, {"caller_nid": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L698"}, {"caller_nid": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L701"}, {"caller_nid": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L704"}, {"caller_nid": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L708"}, {"caller_nid": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L730"}, {"caller_nid": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L736"}, {"caller_nid": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L738"}, {"caller_nid": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L740"}, {"caller_nid": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L740"}, {"caller_nid": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L751"}, {"caller_nid": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L752"}, {"caller_nid": "validator_test_engine_audit_test_audit_unknown_scope_kind_raises_value_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L763"}, {"caller_nid": "validator_test_engine_audit_test_audit_unknown_scope_kind_raises_value_error", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L764"}, {"caller_nid": "validator_test_engine_audit_test_audit_root_does_not_exist_returns_empty", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L769"}, {"caller_nid": "validator_test_engine_audit_test_audit_root_does_not_exist_returns_empty", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L772"}, {"caller_nid": "validator_test_engine_audit_test_audit_root_is_a_file_returns_empty", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L778"}, {"caller_nid": "validator_test_engine_audit_test_audit_root_is_a_file_returns_empty", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L779"}, {"caller_nid": "validator_test_engine_audit_test_audit_root_is_a_file_returns_empty", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L780"}, {"caller_nid": "validator_test_engine_audit_test_audit_handles_unreadable_directory", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L788"}, {"caller_nid": "validator_test_engine_audit_test_audit_handles_unreadable_directory", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L797"}, {"caller_nid": "validator_test_engine_audit_test_audit_handles_unreadable_directory", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L800"}, {"caller_nid": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L808"}, {"caller_nid": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L812"}, {"caller_nid": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L816"}, {"caller_nid": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L825"}, {"caller_nid": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L829"}, {"caller_nid": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L831"}, {"caller_nid": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L832"}, {"caller_nid": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L839"}, {"caller_nid": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L841"}, {"caller_nid": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L844"}, {"caller_nid": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L846"}, {"caller_nid": "validator_test_engine_audit_test_audit_creation_json_unreadable", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L869"}, {"caller_nid": "validator_test_engine_audit_test_audit_creation_json_unreadable", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L871"}, {"caller_nid": "validator_test_engine_audit_test_audit_creation_json_unreadable", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L873"}, {"caller_nid": "validator_test_engine_audit_test_audit_creation_json_unreadable", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L873"}, {"caller_nid": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L880"}, {"caller_nid": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L883"}, {"caller_nid": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L885"}, {"caller_nid": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L885"}, {"caller_nid": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L893"}, {"caller_nid": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L895"}, {"caller_nid": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L897"}, {"caller_nid": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L901"}, {"caller_nid": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L905"}, {"caller_nid": "validator_test_engine_audit_test_audit_readme_fields_json_decode_failure", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L912"}, {"caller_nid": "validator_test_engine_audit_test_audit_readme_fields_json_decode_failure", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L916"}, {"caller_nid": "validator_test_engine_audit_test_audit_readme_fields_json_decode_failure", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L917"}, {"caller_nid": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L925"}, {"caller_nid": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L945"}, {"caller_nid": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L946"}, {"caller_nid": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L946"}, {"caller_nid": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L950"}, {"caller_nid": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L952"}, {"caller_nid": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L953"}, {"caller_nid": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L961"}, {"caller_nid": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L981"}, {"caller_nid": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L982"}, {"caller_nid": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", "callee": "dumps", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L982"}, {"caller_nid": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L986"}, {"caller_nid": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L988"}, {"caller_nid": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L997"}, {"caller_nid": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1006"}, {"caller_nid": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1007"}, {"caller_nid": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1010"}, {"caller_nid": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1018"}, {"caller_nid": "validator_test_engine_audit_test_audit_content_scan_eligibility_returns_false_on_stat_failure", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1028"}, {"caller_nid": "validator_test_engine_audit_test_audit_content_scan_eligibility_returns_false_on_stat_failure", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1037"}, {"caller_nid": "validator_test_engine_audit_test_audit_content_scan_eligibility_returns_false_on_stat_failure", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1039"}, {"caller_nid": "validator_test_engine_audit_test_audit_read_text_for_scan_handles_oserror", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1055"}, {"caller_nid": "validator_test_engine_audit_test_audit_read_text_for_scan_handles_oserror", "callee": "setattr", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1064"}, {"caller_nid": "validator_test_engine_audit_test_audit_read_text_for_scan_handles_oserror", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1066"}, {"caller_nid": "validator_test_engine_audit_test_classify_level_value_error_returns_other", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1078"}, {"caller_nid": "validator_test_engine_audit_test_classify_level_value_error_returns_other", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1080"}, {"caller_nid": "validator_test_engine_audit_test_classify_level_value_error_returns_other", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1082"}, {"caller_nid": "validator_test_engine_audit_test_classify_level_value_error_returns_other", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1085"}, {"caller_nid": "validator_test_engine_audit_test_classify_level_value_error_returns_other", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1085"}, {"caller_nid": "validator_test_engine_audit_test_classify_level_value_error_returns_other", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1086"}, {"caller_nid": "validator_test_engine_audit_test_finding_sort_unknown_tier_sorts_after_committed_tiers", "callee": "Finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1094"}, {"caller_nid": "validator_test_engine_audit_test_finding_sort_unknown_tier_sorts_after_committed_tiers", "callee": "Finding", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1101"}, {"caller_nid": "validator_test_engine_audit_test_finding_sort_unknown_tier_sorts_after_committed_tiers", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1108"}, {"caller_nid": "validator_test_engine_audit_test_level_for_orphan_returns_none_for_unmapped_levels", "callee": "_level_for_orphan", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1117"}, {"caller_nid": "validator_test_engine_audit_test_level_for_orphan_returns_none_for_unmapped_levels", "callee": "_level_for_orphan", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1118"}, {"caller_nid": "validator_test_engine_audit_test_level_for_orphan_returns_none_for_unmapped_levels", "callee": "_level_for_orphan", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1119"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_builds_engine", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1126"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_builds_engine", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1128"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_builds_engine", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1129"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_builds_engine", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1131"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_builds_engine", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1132"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_builds_engine", "callee": "from_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1134"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_builds_engine", "callee": "ValidatorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1135"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_builds_engine", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1137"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_orchestrator_disabled", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1144"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_orchestrator_disabled", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1146"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_orchestrator_disabled", "callee": "from_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1149"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_orchestrator_disabled", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1151"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_no_orchestrator_attr", "callee": "SimpleNamespace", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1158"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_no_orchestrator_attr", "callee": "from_config", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1161"}, {"caller_nid": "validator_test_engine_audit_test_validator_from_config_no_orchestrator_attr", "callee": "audit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1162"}, {"caller_nid": "validator_test_engine_audit_test_classify_level_unrelated_dir_returns_other", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1168"}, {"caller_nid": "validator_test_engine_audit_test_classify_level_unrelated_dir_returns_other", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1170"}, {"caller_nid": "validator_test_engine_audit_test_classify_level_unrelated_dir_returns_other", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1171"}, {"caller_nid": "validator_test_engine_audit_test_classify_level_unrelated_dir_returns_other", "callee": "_classify_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1172"}, {"caller_nid": "validator_test_engine_audit_test_classify_level_unrelated_dir_returns_other", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1172"}, {"caller_nid": "validator_test_engine_audit_test_classify_level_unrelated_dir_returns_other", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1172"}, {"caller_nid": "validator_test_engine_audit_test_compute_run_path_unrelated_other_returns_input", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1178"}, {"caller_nid": "validator_test_engine_audit_test_compute_run_path_unrelated_other_returns_input", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1180"}, {"caller_nid": "validator_test_engine_audit_test_compute_run_path_unrelated_other_returns_input", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1181"}, {"caller_nid": "validator_test_engine_audit_test_compute_run_path_unrelated_other_returns_input", "callee": "_compute_run_path", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1182"}, {"caller_nid": "validator_test_engine_audit_test_compute_run_path_unrelated_other_returns_input", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1182"}, {"caller_nid": "validator_test_engine_audit_test_compute_run_path_unrelated_other_returns_input", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1182"}, {"caller_nid": "validator_test_engine_audit_test_compute_run_path_unrelated_other_returns_input", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1182"}, {"caller_nid": "validator_test_engine_audit_test_compute_run_path_root_other_returns_root", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1190"}, {"caller_nid": "validator_test_engine_audit_test_compute_run_path_root_other_returns_root", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1191"}, {"caller_nid": "validator_test_engine_audit_test_compute_run_path_root_other_returns_root", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1191"}, {"caller_nid": "validator_test_engine_audit_test_compute_run_path_root_other_returns_root", "callee": "Validator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1192"}, {"caller_nid": "validator_test_engine_audit_test_compute_run_path_root_other_returns_root", "callee": "_compute_run_path", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py", "source_location": "L1196"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/f576f78c6f63fd93a3146ecfe71733591c51b68b8f5207a197a22bd6b2bdb468.json b/graphify-out/cache/ast/f576f78c6f63fd93a3146ecfe71733591c51b68b8f5207a197a22bd6b2bdb468.json new file mode 100644 index 0000000..1f5394c --- /dev/null +++ b/graphify-out/cache/ast/f576f78c6f63fd93a3146ecfe71733591c51b68b8f5207a197a22bd6b2bdb468.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_io_json_files_py", "label": "json_files.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L1"}, {"id": "io_json_files_require_schema_major", "label": "require_schema_major()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L28"}, {"id": "io_json_files_read_msgspec_json", "label": "read_msgspec_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L53"}, {"id": "io_json_files_read_msgspec_json_raw", "label": "read_msgspec_json_raw()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L73"}, {"id": "io_json_files_peek_and_check_major", "label": "_peek_and_check_major()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L94"}, {"id": "io_json_files_rationale_1", "label": "msgspec JSON readers with optional schema-major gating. Centralizes the ``path.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L1"}, {"id": "io_json_files_rationale_29", "label": "Raise ``SchemaMajorMismatchError`` when ``version`` is a different major. B", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L29"}, {"id": "io_json_files_rationale_59", "label": "Read ``path`` and decode it as ``type_``, optionally gating on major. When", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L59"}, {"id": "io_json_files_rationale_78", "label": "Two-pass read returning the raw dict for migration-default patching. Some r", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L78"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_json_files_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_json_files_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_json_files_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_json_files_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_json_files_py", "target": "io_json_files_require_schema_major", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_json_files_py", "target": "io_json_files_read_msgspec_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L53", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_json_files_py", "target": "io_json_files_read_msgspec_json_raw", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L73", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_io_json_files_py", "target": "io_json_files_peek_and_check_major", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L94", "weight": 1.0}, {"source": "io_json_files_read_msgspec_json", "target": "io_json_files_peek_and_check_major", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L69", "weight": 1.0}, {"source": "io_json_files_read_msgspec_json_raw", "target": "io_json_files_require_schema_major", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L90", "weight": 1.0}, {"source": "io_json_files_peek_and_check_major", "target": "io_json_files_require_schema_major", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L102", "weight": 1.0}, {"source": "io_json_files_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_io_json_files_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L1", "weight": 1.0}, {"source": "io_json_files_rationale_29", "target": "io_json_files_require_schema_major", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L29", "weight": 1.0}, {"source": "io_json_files_rationale_59", "target": "io_json_files_read_msgspec_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L59", "weight": 1.0}, {"source": "io_json_files_rationale_78", "target": "io_json_files_read_msgspec_json_raw", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L78", "weight": 1.0}], "raw_calls": [{"caller_nid": "io_json_files_require_schema_major", "callee": "SchemaMajorMismatchError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L44"}, {"caller_nid": "io_json_files_require_schema_major", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L44"}, {"caller_nid": "io_json_files_require_schema_major", "callee": "int", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L46"}, {"caller_nid": "io_json_files_require_schema_major", "callee": "split", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L46"}, {"caller_nid": "io_json_files_require_schema_major", "callee": "SchemaMajorMismatchError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L48"}, {"caller_nid": "io_json_files_require_schema_major", "callee": "SchemaMajorMismatchError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L50"}, {"caller_nid": "io_json_files_read_msgspec_json", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L67"}, {"caller_nid": "io_json_files_read_msgspec_json", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L70"}, {"caller_nid": "io_json_files_read_msgspec_json_raw", "callee": "read_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L85"}, {"caller_nid": "io_json_files_read_msgspec_json_raw", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L86"}, {"caller_nid": "io_json_files_read_msgspec_json_raw", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L88"}, {"caller_nid": "io_json_files_read_msgspec_json_raw", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L88"}, {"caller_nid": "io_json_files_peek_and_check_major", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L96"}, {"caller_nid": "io_json_files_peek_and_check_major", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L99"}, {"caller_nid": "io_json_files_peek_and_check_major", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py", "source_location": "L99"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/f57822ea20ea4809ecd351af9da7028c24634ddbe5364f0e9891b8c71ae9831a.json b/graphify-out/cache/ast/f57822ea20ea4809ecd351af9da7028c24634ddbe5364f0e9891b8c71ae9831a.json new file mode 100644 index 0000000..76d7931 --- /dev/null +++ b/graphify-out/cache/ast/f57822ea20ea4809ecd351af9da7028c24634ddbe5364f0e9891b8c71ae9831a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_test_flow_23_footer_staging_py", "label": "test_flow_23_footer_staging.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L1"}, {"id": "e2e_test_flow_23_footer_staging_goto", "label": "_goto()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L10"}, {"id": "e2e_test_flow_23_footer_staging_test_flow_23_footer_staging_segment_renders", "label": "test_flow_23_footer_staging_segment_renders()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L23"}, {"id": "e2e_test_flow_23_footer_staging_test_flow_23_bulk_clear_verified_action_present", "label": "test_flow_23_bulk_clear_verified_action_present()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L28"}, {"id": "e2e_test_flow_23_footer_staging_rationale_1", "label": "E2E flow 23: footer Staging segment + bulk Clear verified (Redesign \u00a74.6). The", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_23_footer_staging_py", "target": "e2e_test_flow_23_footer_staging_goto", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_23_footer_staging_py", "target": "e2e_test_flow_23_footer_staging_test_flow_23_footer_staging_segment_renders", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_test_flow_23_footer_staging_py", "target": "e2e_test_flow_23_footer_staging_test_flow_23_bulk_clear_verified_action_present", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L28", "weight": 1.0}, {"source": "e2e_test_flow_23_footer_staging_test_flow_23_footer_staging_segment_renders", "target": "e2e_test_flow_23_footer_staging_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L24", "weight": 1.0}, {"source": "e2e_test_flow_23_footer_staging_test_flow_23_bulk_clear_verified_action_present", "target": "e2e_test_flow_23_footer_staging_goto", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L29", "weight": 1.0}, {"source": "e2e_test_flow_23_footer_staging_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_test_flow_23_footer_staging_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "e2e_test_flow_23_footer_staging_goto", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L12"}, {"caller_nid": "e2e_test_flow_23_footer_staging_goto", "callee": "goto", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L14"}, {"caller_nid": "e2e_test_flow_23_footer_staging_goto", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L15"}, {"caller_nid": "e2e_test_flow_23_footer_staging_goto", "callee": "wait_for_timeout", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L19"}, {"caller_nid": "e2e_test_flow_23_footer_staging_goto", "callee": "AssertionError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L20"}, {"caller_nid": "e2e_test_flow_23_footer_staging_test_flow_23_footer_staging_segment_renders", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L25"}, {"caller_nid": "e2e_test_flow_23_footer_staging_test_flow_23_footer_staging_segment_renders", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L25"}, {"caller_nid": "e2e_test_flow_23_footer_staging_test_flow_23_bulk_clear_verified_action_present", "callee": "locator", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L30"}, {"caller_nid": "e2e_test_flow_23_footer_staging_test_flow_23_bulk_clear_verified_action_present", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L31"}, {"caller_nid": "e2e_test_flow_23_footer_staging_test_flow_23_bulk_clear_verified_action_present", "callee": "click", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L32"}, {"caller_nid": "e2e_test_flow_23_footer_staging_test_flow_23_bulk_clear_verified_action_present", "callee": "wait_for_load_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py", "source_location": "L33"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/f5d9459d1333dd6177e4678ec4d441cc86ed0f9c5e169c55d6bfed724620198c.json b/graphify-out/cache/ast/f5d9459d1333dd6177e4678ec4d441cc86ed0f9c5e169c55d6bfed724620198c.json new file mode 100644 index 0000000..1b0397e --- /dev/null +++ b/graphify-out/cache/ast/f5d9459d1333dd6177e4678ec4d441cc86ed0f9c5e169c55d6bfed724620198c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "label": "test_handlers.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L1"}, {"id": "logging_test_handlers_reset_context", "label": "_reset_context()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L29"}, {"id": "logging_test_handlers_make_handler", "label": "_make_handler()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L34"}, {"id": "logging_test_handlers_make_record", "label": "_make_record()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L41"}, {"id": "logging_test_handlers_test_writes_to_equipment_scoped_path", "label": "test_writes_to_equipment_scoped_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L60"}, {"id": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "label": "test_writes_to_separate_files_per_equipment()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L76"}, {"id": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", "label": "test_subsequent_emits_reuse_the_same_file_descriptor()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L103"}, {"id": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", "label": "test_one_open_per_equipment_even_with_many_emits()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L129"}, {"id": "logging_test_handlers_test_emit_without_equipment_id_writes_no_file", "label": "test_emit_without_equipment_id_writes_no_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L152"}, {"id": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", "label": "test_emit_with_explicit_none_equipment_skipped()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L164"}, {"id": "logging_test_handlers_test_fsync_invoked_only_on_error_level", "label": "test_fsync_invoked_only_on_error_level()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L181"}, {"id": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", "label": "test_fsync_on_error_passes_correct_fd()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L199"}, {"id": "logging_test_handlers_test_close_drains_cached_files", "label": "test_close_drains_cached_files()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L217"}, {"id": "logging_test_handlers_test_close_is_idempotent", "label": "test_close_is_idempotent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L232"}, {"id": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", "label": "test_emit_routes_unexpected_exception_through_handle_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L247"}, {"id": "logging_test_handlers_rationale_1", "label": "Tests for ``exlab_wizard.logging.handlers``. Backend Spec \u00a716.2.4 commits the e", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L1"}, {"id": "logging_test_handlers_rationale_30", "label": "Wipe the run-context vars between cases so handler tests are isolated.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L30"}, {"id": "logging_test_handlers_rationale_35", "label": "Construct a handler with a deterministic hostname for test paths.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L35"}, {"id": "logging_test_handlers_rationale_248", "label": "The ``Exception`` branch in :meth:`emit` is the stdlib handler-error contrac", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L248"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "unittest", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "exlab_wizard_logging_context", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "exlab_wizard_logging_format", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "exlab_wizard_logging_handlers", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_reset_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_make_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_make_record", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_test_writes_to_equipment_scoped_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L60", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L76", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L103", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L129", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_test_emit_without_equipment_id_writes_no_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L152", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L164", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_test_fsync_invoked_only_on_error_level", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L181", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L199", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_test_close_drains_cached_files", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L217", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_test_close_is_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L232", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "target": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L247", "weight": 1.0}, {"source": "logging_test_handlers_test_writes_to_equipment_scoped_path", "target": "logging_test_handlers_make_handler", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L61", "weight": 1.0}, {"source": "logging_test_handlers_test_writes_to_equipment_scoped_path", "target": "logging_test_handlers_make_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L67", "weight": 1.0}, {"source": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "target": "logging_test_handlers_make_handler", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L77", "weight": 1.0}, {"source": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "target": "logging_test_handlers_make_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L86", "weight": 1.0}, {"source": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", "target": "logging_test_handlers_make_handler", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L104", "weight": 1.0}, {"source": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", "target": "logging_test_handlers_make_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L107", "weight": 1.0}, {"source": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", "target": "logging_test_handlers_make_handler", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L130", "weight": 1.0}, {"source": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", "target": "logging_test_handlers_make_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L141", "weight": 1.0}, {"source": "logging_test_handlers_test_emit_without_equipment_id_writes_no_file", "target": "logging_test_handlers_make_handler", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L153", "weight": 1.0}, {"source": "logging_test_handlers_test_emit_without_equipment_id_writes_no_file", "target": "logging_test_handlers_make_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L156", "weight": 1.0}, {"source": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", "target": "logging_test_handlers_make_handler", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L165", "weight": 1.0}, {"source": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", "target": "logging_test_handlers_make_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L170", "weight": 1.0}, {"source": "logging_test_handlers_test_fsync_invoked_only_on_error_level", "target": "logging_test_handlers_make_handler", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L182", "weight": 1.0}, {"source": "logging_test_handlers_test_fsync_invoked_only_on_error_level", "target": "logging_test_handlers_make_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L186", "weight": 1.0}, {"source": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", "target": "logging_test_handlers_make_handler", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L200", "weight": 1.0}, {"source": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", "target": "logging_test_handlers_make_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L204", "weight": 1.0}, {"source": "logging_test_handlers_test_close_drains_cached_files", "target": "logging_test_handlers_make_handler", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L218", "weight": 1.0}, {"source": "logging_test_handlers_test_close_drains_cached_files", "target": "logging_test_handlers_make_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L221", "weight": 1.0}, {"source": "logging_test_handlers_test_close_is_idempotent", "target": "logging_test_handlers_make_handler", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L233", "weight": 1.0}, {"source": "logging_test_handlers_test_close_is_idempotent", "target": "logging_test_handlers_make_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L235", "weight": 1.0}, {"source": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", "target": "logging_test_handlers_make_handler", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L252", "weight": 1.0}, {"source": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", "target": "logging_test_handlers_make_record", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L258", "weight": 1.0}, {"source": "logging_test_handlers_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_logging_test_handlers_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L1", "weight": 1.0}, {"source": "logging_test_handlers_rationale_30", "target": "logging_test_handlers_reset_context", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L30", "weight": 1.0}, {"source": "logging_test_handlers_rationale_35", "target": "logging_test_handlers_make_handler", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L35", "weight": 1.0}, {"source": "logging_test_handlers_rationale_248", "target": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L248", "weight": 1.0}], "raw_calls": [{"caller_nid": "logging_test_handlers_reset_context", "callee": "clear_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L31"}, {"caller_nid": "logging_test_handlers_make_handler", "callee": "EquipmentScopedFileHandler", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L36"}, {"caller_nid": "logging_test_handlers_make_handler", "callee": "setFormatter", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L37"}, {"caller_nid": "logging_test_handlers_make_handler", "callee": "StructuredTagFormatter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L37"}, {"caller_nid": "logging_test_handlers_make_record", "callee": "LogRecord", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L42"}, {"caller_nid": "logging_test_handlers_test_writes_to_equipment_scoped_path", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L63"}, {"caller_nid": "logging_test_handlers_test_writes_to_equipment_scoped_path", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L66"}, {"caller_nid": "logging_test_handlers_test_writes_to_equipment_scoped_path", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L67"}, {"caller_nid": "logging_test_handlers_test_writes_to_equipment_scoped_path", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L69"}, {"caller_nid": "logging_test_handlers_test_writes_to_equipment_scoped_path", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L71"}, {"caller_nid": "logging_test_handlers_test_writes_to_equipment_scoped_path", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L72"}, {"caller_nid": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L79"}, {"caller_nid": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L82"}, {"caller_nid": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L85"}, {"caller_nid": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L86"}, {"caller_nid": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L87"}, {"caller_nid": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L88"}, {"caller_nid": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L90"}, {"caller_nid": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L92"}, {"caller_nid": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L93"}, {"caller_nid": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L94"}, {"caller_nid": "logging_test_handlers_test_writes_to_separate_files_per_equipment", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L95"}, {"caller_nid": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L106"}, {"caller_nid": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L107"}, {"caller_nid": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L111"}, {"caller_nid": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L112"}, {"caller_nid": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L118"}, {"caller_nid": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", "callee": "format", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L121"}, {"caller_nid": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L123"}, {"caller_nid": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", "callee": "object", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L134"}, {"caller_nid": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L139"}, {"caller_nid": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L140"}, {"caller_nid": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L141"}, {"caller_nid": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L144"}, {"caller_nid": "logging_test_handlers_test_emit_without_equipment_id_writes_no_file", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L156"}, {"caller_nid": "logging_test_handlers_test_emit_without_equipment_id_writes_no_file", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L158"}, {"caller_nid": "logging_test_handlers_test_emit_without_equipment_id_writes_no_file", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L161"}, {"caller_nid": "logging_test_handlers_test_emit_without_equipment_id_writes_no_file", "callee": "iterdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L161"}, {"caller_nid": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L169"}, {"caller_nid": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L170"}, {"caller_nid": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L172"}, {"caller_nid": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L173"}, {"caller_nid": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", "callee": "iterdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L173"}, {"caller_nid": "logging_test_handlers_test_fsync_invoked_only_on_error_level", "callee": "patch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L184"}, {"caller_nid": "logging_test_handlers_test_fsync_invoked_only_on_error_level", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L185"}, {"caller_nid": "logging_test_handlers_test_fsync_invoked_only_on_error_level", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L186"}, {"caller_nid": "logging_test_handlers_test_fsync_invoked_only_on_error_level", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L187"}, {"caller_nid": "logging_test_handlers_test_fsync_invoked_only_on_error_level", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L188"}, {"caller_nid": "logging_test_handlers_test_fsync_invoked_only_on_error_level", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L189"}, {"caller_nid": "logging_test_handlers_test_fsync_invoked_only_on_error_level", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L190"}, {"caller_nid": "logging_test_handlers_test_fsync_invoked_only_on_error_level", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L196"}, {"caller_nid": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", "callee": "patch", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L202"}, {"caller_nid": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L203"}, {"caller_nid": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L204"}, {"caller_nid": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", "callee": "assert_called_once_with", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L207"}, {"caller_nid": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L209"}, {"caller_nid": "logging_test_handlers_test_close_drains_cached_files", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L220"}, {"caller_nid": "logging_test_handlers_test_close_drains_cached_files", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L221"}, {"caller_nid": "logging_test_handlers_test_close_drains_cached_files", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L222"}, {"caller_nid": "logging_test_handlers_test_close_drains_cached_files", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L223"}, {"caller_nid": "logging_test_handlers_test_close_drains_cached_files", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L225"}, {"caller_nid": "logging_test_handlers_test_close_drains_cached_files", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L227"}, {"caller_nid": "logging_test_handlers_test_close_is_idempotent", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L234"}, {"caller_nid": "logging_test_handlers_test_close_is_idempotent", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L235"}, {"caller_nid": "logging_test_handlers_test_close_is_idempotent", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L236"}, {"caller_nid": "logging_test_handlers_test_close_is_idempotent", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L239"}, {"caller_nid": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", "callee": "object", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L254"}, {"caller_nid": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", "callee": "object", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L255"}, {"caller_nid": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", "callee": "OSError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L255"}, {"caller_nid": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L256"}, {"caller_nid": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", "callee": "emit", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L258"}, {"caller_nid": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", "callee": "assert_called_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py", "source_location": "L259"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/f62d0573acc2e219be0f5ad8e1594591ddbad46b66e5b61193f4a9cca5bb9da4.json b/graphify-out/cache/ast/f62d0573acc2e219be0f5ad8e1594591ddbad46b66e5b61193f4a9cca5bb9da4.json new file mode 100644 index 0000000..19f9c39 --- /dev/null +++ b/graphify-out/cache/ast/f62d0573acc2e219be0f5ad8e1594591ddbad46b66e5b61193f4a9cca5bb9da4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_log_writer_py", "label": "log_writer.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L1"}, {"id": "cache_log_writer_format_log_line", "label": "format_log_line()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L72"}, {"id": "cache_log_writer_render_tags", "label": "_render_tags()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L115"}, {"id": "cache_log_writer_truncate_if_needed", "label": "_truncate_if_needed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L143"}, {"id": "cache_log_writer_append_log_line", "label": "append_log_line()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L182"}, {"id": "cache_log_writer_rationale_1", "label": "Append-only writer for ``wizard..log`` files. Backend Spec \u00a711.5, \u00a716.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L1"}, {"id": "cache_log_writer_rationale_83", "label": "Render a structured log line per Backend Spec \u00a711.5 / \u00a716.4. Tags are omitt", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L83"}, {"id": "cache_log_writer_rationale_123", "label": "Render the supplied context as ``[host:..] [equip:..] ...``. Returns the em", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L123"}, {"id": "cache_log_writer_rationale_144", "label": "Trim ``line`` so its UTF-8 byte length is at most ``LOG_LINE_MAX_BYTES``. T", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L144"}, {"id": "cache_log_writer_rationale_183", "label": "Append a single ``line`` to a ``wizard..log`` file. Creates the p", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L183"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_log_writer_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_log_writer_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_log_writer_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_log_writer_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_log_writer_py", "target": "cache_log_writer_format_log_line", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_log_writer_py", "target": "cache_log_writer_render_tags", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L115", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_log_writer_py", "target": "cache_log_writer_truncate_if_needed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L143", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_log_writer_py", "target": "cache_log_writer_append_log_line", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L182", "weight": 1.0}, {"source": "cache_log_writer_format_log_line", "target": "cache_log_writer_render_tags", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L103", "weight": 1.0}, {"source": "cache_log_writer_format_log_line", "target": "cache_log_writer_truncate_if_needed", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L112", "weight": 1.0}, {"source": "cache_log_writer_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_cache_log_writer_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L1", "weight": 1.0}, {"source": "cache_log_writer_rationale_83", "target": "cache_log_writer_format_log_line", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L83", "weight": 1.0}, {"source": "cache_log_writer_rationale_123", "target": "cache_log_writer_render_tags", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L123", "weight": 1.0}, {"source": "cache_log_writer_rationale_144", "target": "cache_log_writer_truncate_if_needed", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L144", "weight": 1.0}, {"source": "cache_log_writer_rationale_183", "target": "cache_log_writer_append_log_line", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L183", "weight": 1.0}], "raw_calls": [{"caller_nid": "cache_log_writer_format_log_line", "callee": "dt_to_iso", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L101"}, {"caller_nid": "cache_log_writer_render_tags", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L139"}, {"caller_nid": "cache_log_writer_render_tags", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L140"}, {"caller_nid": "cache_log_writer_truncate_if_needed", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L153"}, {"caller_nid": "cache_log_writer_truncate_if_needed", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L154"}, {"caller_nid": "cache_log_writer_truncate_if_needed", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L156"}, {"caller_nid": "cache_log_writer_truncate_if_needed", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L158"}, {"caller_nid": "cache_log_writer_truncate_if_needed", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L163"}, {"caller_nid": "cache_log_writer_truncate_if_needed", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L164"}, {"caller_nid": "cache_log_writer_truncate_if_needed", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L168"}, {"caller_nid": "cache_log_writer_truncate_if_needed", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L171"}, {"caller_nid": "cache_log_writer_truncate_if_needed", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L172"}, {"caller_nid": "cache_log_writer_truncate_if_needed", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L172"}, {"caller_nid": "cache_log_writer_truncate_if_needed", "callee": "decode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L173"}, {"caller_nid": "cache_log_writer_append_log_line", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L203"}, {"caller_nid": "cache_log_writer_append_log_line", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L208"}, {"caller_nid": "cache_log_writer_append_log_line", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L209"}, {"caller_nid": "cache_log_writer_append_log_line", "callee": "write", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py", "source_location": "L210"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/f7e55b1353c1e6e3f05f44cec346d272f843163fe2b540587afeedc3c87ad05b.json b/graphify-out/cache/ast/f7e55b1353c1e6e3f05f44cec346d272f843163fe2b540587afeedc3c87ad05b.json new file mode 100644 index 0000000..2c46483 --- /dev/null +++ b/graphify-out/cache/ast/f7e55b1353c1e6e3f05f44cec346d272f843163fe2b540587afeedc3c87ad05b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "label": "catalogue.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L1"}, {"id": "lims_catalogue_offlinecatalogue", "label": "OfflineCatalogue", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L51"}, {"id": "lims_catalogue_read_catalogue", "label": "read_catalogue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L72"}, {"id": "lims_catalogue_write_catalogue", "label": "write_catalogue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L135"}, {"id": "lims_catalogue_project_to_dict", "label": "_project_to_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L155"}, {"id": "lims_catalogue_rationale_1", "label": "Offline LIMS project catalogue read/write. Backend Spec \u00a77.2.9. A catalogue is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L1"}, {"id": "lims_catalogue_rationale_52", "label": "Decoded offline catalogue. Backend Spec \u00a77.2.9.1. ``schema_version`` is pin", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L52"}, {"id": "lims_catalogue_rationale_73", "label": "Read and validate the catalogue file. Returns ``None`` (and logs a WARN) wh", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L73"}, {"id": "lims_catalogue_rationale_136", "label": "Atomically write ``catalogue`` to ``path``. Backend Spec \u00a77.2.9.2. Protocol", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L136"}, {"id": "lims_catalogue_rationale_156", "label": "Re-emit a LIMSProject as a serializable dict.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L156"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L34", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "target": "msgspec", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L40", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "target": "exlab_wizard_io", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "target": "exlab_wizard_lims_schemas", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L42", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L43", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "target": "lims_catalogue_offlinecatalogue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L51", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "target": "lims_catalogue_read_catalogue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L72", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "target": "lims_catalogue_write_catalogue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "target": "lims_catalogue_project_to_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L155", "weight": 1.0}, {"source": "lims_catalogue_read_catalogue", "target": "lims_catalogue_offlinecatalogue", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L126", "weight": 1.0}, {"source": "lims_catalogue_write_catalogue", "target": "lims_catalogue_project_to_dict", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L149", "weight": 1.0}, {"source": "lims_catalogue_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_lims_catalogue_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L1", "weight": 1.0}, {"source": "lims_catalogue_rationale_52", "target": "lims_catalogue_offlinecatalogue", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L52", "weight": 1.0}, {"source": "lims_catalogue_rationale_73", "target": "lims_catalogue_read_catalogue", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L73", "weight": 1.0}, {"source": "lims_catalogue_rationale_136", "target": "lims_catalogue_write_catalogue", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L136", "weight": 1.0}, {"source": "lims_catalogue_rationale_156", "target": "lims_catalogue_project_to_dict", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L156", "weight": 1.0}], "raw_calls": [{"caller_nid": "lims_catalogue_read_catalogue", "callee": "read_msgspec_json_raw", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L93"}, {"caller_nid": "lims_catalogue_read_catalogue", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L93"}, {"caller_nid": "lims_catalogue_read_catalogue", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L96"}, {"caller_nid": "lims_catalogue_read_catalogue", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L99"}, {"caller_nid": "lims_catalogue_read_catalogue", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L104"}, {"caller_nid": "lims_catalogue_read_catalogue", "callee": "warning", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L106"}, {"caller_nid": "lims_catalogue_read_catalogue", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L115"}, {"caller_nid": "lims_catalogue_read_catalogue", "callee": "ConfigError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L121"}, {"caller_nid": "lims_catalogue_read_catalogue", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L123"}, {"caller_nid": "lims_catalogue_read_catalogue", "callee": "convert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L124"}, {"caller_nid": "lims_catalogue_read_catalogue", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L128"}, {"caller_nid": "lims_catalogue_read_catalogue", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L129"}, {"caller_nid": "lims_catalogue_write_catalogue", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L142"}, {"caller_nid": "lims_catalogue_write_catalogue", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L143"}, {"caller_nid": "lims_catalogue_write_catalogue", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L151"}, {"caller_nid": "lims_catalogue_write_catalogue", "callee": "atomic_write_bytes", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py", "source_location": "L152"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/f82fa93ced883f255e440c6a64c87b8717084fa82fdfd60a91bedc769bb9b6fe.json b/graphify-out/cache/ast/f82fa93ced883f255e440c6a64c87b8717084fa82fdfd60a91bedc769bb9b6fe.json new file mode 100644 index 0000000..198329b --- /dev/null +++ b/graphify-out/cache/ast/f82fa93ced883f255e440c6a64c87b8717084fa82fdfd60a91bedc769bb9b6fe.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "label": "test_bandwidth.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L1"}, {"id": "sync_test_bandwidth_wed_at", "label": "_wed_at()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L20"}, {"id": "sync_test_bandwidth_test_mbps_to_kibps_uses_spec_formula", "label": "test_mbps_to_kibps_uses_spec_formula()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L25"}, {"id": "sync_test_bandwidth_test_mbps_to_kibps_floor_for_tiny_input", "label": "test_mbps_to_kibps_floor_for_tiny_input()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L31"}, {"id": "sync_test_bandwidth_test_mbps_to_kibps_zero", "label": "test_mbps_to_kibps_zero()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L36"}, {"id": "sync_test_bandwidth_test_day_name_to_index_covers_all_days", "label": "test_day_name_to_index_covers_all_days()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L41"}, {"id": "sync_test_bandwidth_test_is_window_active_inside_window", "label": "test_is_window_active_inside_window()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L47"}, {"id": "sync_test_bandwidth_test_is_window_active_outside_window", "label": "test_is_window_active_outside_window()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L52"}, {"id": "sync_test_bandwidth_test_is_window_active_wrong_weekday", "label": "test_is_window_active_wrong_weekday()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L58"}, {"id": "sync_test_bandwidth_test_effective_unlimited_when_upload_mbps_none", "label": "test_effective_unlimited_when_upload_mbps_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L64"}, {"id": "sync_test_bandwidth_test_effective_unlimited_when_outside_schedule", "label": "test_effective_unlimited_when_outside_schedule()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L69"}, {"id": "sync_test_bandwidth_test_effective_throttled_inside_schedule", "label": "test_effective_throttled_inside_schedule()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L78"}, {"id": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", "label": "test_effective_throttled_when_no_schedule()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L86"}, {"id": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", "label": "test_effective_throttled_in_first_matching_window()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L92"}, {"id": "sync_test_bandwidth_rationale_1", "label": "Tests for ``exlab_wizard.sync.bandwidth``. Backend Spec \u00a77.1.7. The schedule ev", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L1"}, {"id": "sync_test_bandwidth_rationale_21", "label": "A Wednesday in 2026 (weekday 2) at the requested local time.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L21"}, {"id": "sync_test_bandwidth_rationale_26", "label": "Spec \u00a77.1.7: ``K = upload_mbps * 1024 / 8``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L26"}, {"id": "sync_test_bandwidth_rationale_32", "label": "A tiny but positive input rounds up to 1 KiB/s, not 0.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L32"}, {"id": "sync_test_bandwidth_rationale_59", "label": "Weekday filtering rejects days not in ``window.days``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L59"}, {"id": "sync_test_bandwidth_rationale_87", "label": "A cap with no schedule applies always.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L87"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "exlab_wizard_sync_bandwidth", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "sync_test_bandwidth_wed_at", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "sync_test_bandwidth_test_mbps_to_kibps_uses_spec_formula", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "sync_test_bandwidth_test_mbps_to_kibps_floor_for_tiny_input", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "sync_test_bandwidth_test_mbps_to_kibps_zero", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "sync_test_bandwidth_test_day_name_to_index_covers_all_days", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "sync_test_bandwidth_test_is_window_active_inside_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "sync_test_bandwidth_test_is_window_active_outside_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "sync_test_bandwidth_test_is_window_active_wrong_weekday", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L58", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "sync_test_bandwidth_test_effective_unlimited_when_upload_mbps_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L64", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "sync_test_bandwidth_test_effective_unlimited_when_outside_schedule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L69", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "sync_test_bandwidth_test_effective_throttled_inside_schedule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L78", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L86", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "target": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L92", "weight": 1.0}, {"source": "sync_test_bandwidth_test_is_window_active_inside_window", "target": "sync_test_bandwidth_wed_at", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L49", "weight": 1.0}, {"source": "sync_test_bandwidth_test_is_window_active_outside_window", "target": "sync_test_bandwidth_wed_at", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L54", "weight": 1.0}, {"source": "sync_test_bandwidth_test_is_window_active_wrong_weekday", "target": "sync_test_bandwidth_wed_at", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L61", "weight": 1.0}, {"source": "sync_test_bandwidth_test_effective_unlimited_when_upload_mbps_none", "target": "sync_test_bandwidth_wed_at", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L66", "weight": 1.0}, {"source": "sync_test_bandwidth_test_effective_unlimited_when_outside_schedule", "target": "sync_test_bandwidth_wed_at", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L75", "weight": 1.0}, {"source": "sync_test_bandwidth_test_effective_throttled_inside_schedule", "target": "sync_test_bandwidth_wed_at", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L83", "weight": 1.0}, {"source": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", "target": "sync_test_bandwidth_wed_at", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L89", "weight": 1.0}, {"source": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", "target": "sync_test_bandwidth_wed_at", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L100", "weight": 1.0}, {"source": "sync_test_bandwidth_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_sync_test_bandwidth_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L1", "weight": 1.0}, {"source": "sync_test_bandwidth_rationale_21", "target": "sync_test_bandwidth_wed_at", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L21", "weight": 1.0}, {"source": "sync_test_bandwidth_rationale_26", "target": "sync_test_bandwidth_test_mbps_to_kibps_uses_spec_formula", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L26", "weight": 1.0}, {"source": "sync_test_bandwidth_rationale_32", "target": "sync_test_bandwidth_test_mbps_to_kibps_floor_for_tiny_input", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L32", "weight": 1.0}, {"source": "sync_test_bandwidth_rationale_59", "target": "sync_test_bandwidth_test_is_window_active_wrong_weekday", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L59", "weight": 1.0}, {"source": "sync_test_bandwidth_rationale_87", "target": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L87", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_test_bandwidth_wed_at", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L22"}, {"caller_nid": "sync_test_bandwidth_test_mbps_to_kibps_uses_spec_formula", "callee": "mbps_to_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L27"}, {"caller_nid": "sync_test_bandwidth_test_mbps_to_kibps_uses_spec_formula", "callee": "round", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L27"}, {"caller_nid": "sync_test_bandwidth_test_mbps_to_kibps_uses_spec_formula", "callee": "mbps_to_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L28"}, {"caller_nid": "sync_test_bandwidth_test_mbps_to_kibps_floor_for_tiny_input", "callee": "mbps_to_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L33"}, {"caller_nid": "sync_test_bandwidth_test_mbps_to_kibps_zero", "callee": "mbps_to_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L37"}, {"caller_nid": "sync_test_bandwidth_test_mbps_to_kibps_zero", "callee": "mbps_to_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L38"}, {"caller_nid": "sync_test_bandwidth_test_day_name_to_index_covers_all_days", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L42"}, {"caller_nid": "sync_test_bandwidth_test_is_window_active_inside_window", "callee": "BandwidthWindow", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L48"}, {"caller_nid": "sync_test_bandwidth_test_is_window_active_inside_window", "callee": "is_window_active", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L49"}, {"caller_nid": "sync_test_bandwidth_test_is_window_active_outside_window", "callee": "BandwidthWindow", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L53"}, {"caller_nid": "sync_test_bandwidth_test_is_window_active_outside_window", "callee": "is_window_active", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L54"}, {"caller_nid": "sync_test_bandwidth_test_is_window_active_outside_window", "callee": "is_window_active", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L55"}, {"caller_nid": "sync_test_bandwidth_test_is_window_active_wrong_weekday", "callee": "BandwidthWindow", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L60"}, {"caller_nid": "sync_test_bandwidth_test_is_window_active_wrong_weekday", "callee": "is_window_active", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L61"}, {"caller_nid": "sync_test_bandwidth_test_effective_unlimited_when_upload_mbps_none", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L65"}, {"caller_nid": "sync_test_bandwidth_test_effective_unlimited_when_upload_mbps_none", "callee": "effective_bandwidth_limit_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L66"}, {"caller_nid": "sync_test_bandwidth_test_effective_unlimited_when_outside_schedule", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L70"}, {"caller_nid": "sync_test_bandwidth_test_effective_unlimited_when_outside_schedule", "callee": "BandwidthWindow", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L72"}, {"caller_nid": "sync_test_bandwidth_test_effective_unlimited_when_outside_schedule", "callee": "effective_bandwidth_limit_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L75"}, {"caller_nid": "sync_test_bandwidth_test_effective_throttled_inside_schedule", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L79"}, {"caller_nid": "sync_test_bandwidth_test_effective_throttled_inside_schedule", "callee": "BandwidthWindow", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L81"}, {"caller_nid": "sync_test_bandwidth_test_effective_throttled_inside_schedule", "callee": "effective_bandwidth_limit_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L83"}, {"caller_nid": "sync_test_bandwidth_test_effective_throttled_inside_schedule", "callee": "mbps_to_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L83"}, {"caller_nid": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L88"}, {"caller_nid": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", "callee": "effective_bandwidth_limit_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L89"}, {"caller_nid": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", "callee": "mbps_to_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L89"}, {"caller_nid": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", "callee": "BandwidthConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L93"}, {"caller_nid": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", "callee": "BandwidthWindow", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L96"}, {"caller_nid": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", "callee": "BandwidthWindow", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L97"}, {"caller_nid": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", "callee": "effective_bandwidth_limit_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L100"}, {"caller_nid": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", "callee": "mbps_to_kibps", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py", "source_location": "L100"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/f844f9fcff45d59e5ad8baa4b334dbdc5e7f82b533818441146e8c3dbda6ff66.json b/graphify-out/cache/ast/f844f9fcff45d59e5ad8baa4b334dbdc5e7f82b533818441146e8c3dbda6ff66.json new file mode 100644 index 0000000..5602402 --- /dev/null +++ b/graphify-out/cache/ast/f844f9fcff45d59e5ad8baa4b334dbdc5e7f82b533818441146e8c3dbda6ff66.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_plugin_guide_manifest_schema_md", "label": "manifest_schema.md", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L1"}, {"id": "plugin_guide_manifest_schema_manifest_schema", "label": "Manifest Schema", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L1"}, {"id": "plugin_guide_manifest_schema_required_identity_fields", "label": "Required identity fields", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L9"}, {"id": "plugin_guide_manifest_schema_codeblock_1", "label": "code:yaml (name: \"xlsx_field_filler\")", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L11"}, {"id": "plugin_guide_manifest_schema_required_dispatch_fields", "label": "Required dispatch fields", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L18"}, {"id": "plugin_guide_manifest_schema_codeblock_2", "label": "code:yaml (supported_extensions: [\".xlsx\"] # file-extension or \"readm)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L20"}, {"id": "plugin_guide_manifest_schema_optional_declaration_block", "label": "Optional declaration block", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L30"}, {"id": "plugin_guide_manifest_schema_codeblock_3", "label": "code:yaml (required_variables:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L32"}, {"id": "plugin_guide_manifest_schema_optional_execution_policy", "label": "Optional execution policy", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L48"}, {"id": "plugin_guide_manifest_schema_codeblock_4", "label": "code:yaml (isolation:)", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L50"}, {"id": "plugin_guide_manifest_schema_discovery_rules", "label": "Discovery rules", "file_type": "document", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L61"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_plugin_guide_manifest_schema_md", "target": "plugin_guide_manifest_schema_manifest_schema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L1", "weight": 1.0}, {"source": "plugin_guide_manifest_schema_manifest_schema", "target": "plugin_guide_manifest_schema_required_identity_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L9", "weight": 1.0}, {"source": "plugin_guide_manifest_schema_required_identity_fields", "target": "plugin_guide_manifest_schema_codeblock_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L11", "weight": 1.0}, {"source": "plugin_guide_manifest_schema_manifest_schema", "target": "plugin_guide_manifest_schema_required_dispatch_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L18", "weight": 1.0}, {"source": "plugin_guide_manifest_schema_required_dispatch_fields", "target": "plugin_guide_manifest_schema_codeblock_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L20", "weight": 1.0}, {"source": "plugin_guide_manifest_schema_manifest_schema", "target": "plugin_guide_manifest_schema_optional_declaration_block", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L30", "weight": 1.0}, {"source": "plugin_guide_manifest_schema_optional_declaration_block", "target": "plugin_guide_manifest_schema_codeblock_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L32", "weight": 1.0}, {"source": "plugin_guide_manifest_schema_manifest_schema", "target": "plugin_guide_manifest_schema_optional_execution_policy", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L48", "weight": 1.0}, {"source": "plugin_guide_manifest_schema_optional_execution_policy", "target": "plugin_guide_manifest_schema_codeblock_4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L50", "weight": 1.0}, {"source": "plugin_guide_manifest_schema_manifest_schema", "target": "plugin_guide_manifest_schema_discovery_rules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md", "source_location": "L61", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/graphify-out/cache/ast/f953077b6a676b48dd3f5cd0c1d8f7be5733304b1d6790941fca0dd2bd4d77f4.json b/graphify-out/cache/ast/f953077b6a676b48dd3f5cd0c1d8f7be5733304b1d6790941fca0dd2bd4d77f4.json new file mode 100644 index 0000000..3fbd24c --- /dev/null +++ b/graphify-out/cache/ast/f953077b6a676b48dd3f5cd0c1d8f7be5733304b1d6790941fca0dd2bd4d77f4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/__init__.py", "source_location": "L1"}, {"id": "logging_init_rationale_1", "label": "Canonical logger package. Backend Spec \u00a716. This package owns the runtime logge", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_init_py", "target": "exlab_wizard_logging_context", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/__init__.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_init_py", "target": "exlab_wizard_logging_manager", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/__init__.py", "source_location": "L23", "weight": 1.0}, {"source": "logging_init_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_logging_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/f980ca94bd3668c504fb48daf8156e2e4ac72c9c11f06cfc9bd67577a8638cb0.json b/graphify-out/cache/ast/f980ca94bd3668c504fb48daf8156e2e4ac72c9c11f06cfc9bd67577a8638cb0.json new file mode 100644 index 0000000..7c7022d --- /dev/null +++ b/graphify-out/cache/ast/f980ca94bd3668c504fb48daf8156e2e4ac72c9c11f06cfc9bd67577a8638cb0.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_error_plugin_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/__init__.py", "source_location": "L1"}, {"id": "error_plugin_init_rationale_1", "label": "error_plugin -- raises PluginError mid-transform.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_error_plugin_init_py", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_error_plugin_plugin_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/__init__.py", "source_location": "L3", "weight": 1.0}, {"source": "error_plugin_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_error_plugin_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/f9f26c8e4c35051adaaeb55a89e115f893de8984be2607e77d3f2d769f3050f4.json b/graphify-out/cache/ast/f9f26c8e4c35051adaaeb55a89e115f893de8984be2607e77d3f2d769f3050f4.json new file mode 100644 index 0000000..e74111d --- /dev/null +++ b/graphify-out/cache/ast/f9f26c8e4c35051adaaeb55a89e115f893de8984be2607e77d3f2d769f3050f4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_override_badge_py", "label": "override_badge.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L1"}, {"id": "components_override_badge_override_badge_props", "label": "override_badge_props()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L20"}, {"id": "components_override_badge_override_badge", "label": "override_badge()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L38"}, {"id": "components_override_badge_rationale_1", "label": "Override pill (Frontend Spec \u00a73.6.1, \u00a711). A pill that appears next to a run's", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L1"}, {"id": "components_override_badge_rationale_21", "label": "Compute styling props for the override pill.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L21"}, {"id": "components_override_badge_rationale_39", "label": "Build a clickable badge for the override state. Clicking opens the \u00a711.5 ov", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L39"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_override_badge_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_override_badge_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_override_badge_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_override_badge_py", "target": "exlab_wizard_ui", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_override_badge_py", "target": "components_override_badge_override_badge_props", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_override_badge_py", "target": "components_override_badge_override_badge", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L38", "weight": 1.0}, {"source": "components_override_badge_override_badge", "target": "components_override_badge_override_badge_props", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L45", "weight": 1.0}, {"source": "components_override_badge_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_override_badge_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L1", "weight": 1.0}, {"source": "components_override_badge_rationale_21", "target": "components_override_badge_override_badge_props", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L21", "weight": 1.0}, {"source": "components_override_badge_rationale_39", "target": "components_override_badge_override_badge", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L39", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_override_badge_override_badge", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L51"}, {"caller_nid": "components_override_badge_override_badge", "callee": "badge", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L51"}, {"caller_nid": "components_override_badge_override_badge", "callee": "on", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L65"}, {"caller_nid": "components_override_badge_override_badge", "callee": "on_click", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py", "source_location": "L65"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/fa3d6fa5423db65d7aeb93dc77fe31f673ad906d63ccfc2bb9eddf253621d32e.json b/graphify-out/cache/ast/fa3d6fa5423db65d7aeb93dc77fe31f673ad906d63ccfc2bb9eddf253621d32e.json new file mode 100644 index 0000000..4adfe95 --- /dev/null +++ b/graphify-out/cache/ast/fa3d6fa5423db65d7aeb93dc77fe31f673ad906d63ccfc2bb9eddf253621d32e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "label": "session_store.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L1"}, {"id": "controller_session_store_session", "label": "Session", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L46"}, {"id": "controller_session_store_session_is_terminal", "label": ".is_terminal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L87"}, {"id": "controller_session_store_sessionstore", "label": "SessionStore", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L92"}, {"id": "controller_session_store_sessionstore_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L99"}, {"id": "controller_session_store_sessionstore_open", "label": ".open()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L104"}, {"id": "controller_session_store_sessionstore_get", "label": ".get()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L125"}, {"id": "controller_session_store_sessionstore_iter_sorted", "label": ".iter_sorted()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L129"}, {"id": "controller_session_store_sessionstore_transition", "label": ".transition()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L138"}, {"id": "controller_session_store_sessionstore_attach_event_queue", "label": ".attach_event_queue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L159"}, {"id": "controller_session_store_sessionstore_heartbeat", "label": ".heartbeat()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L171"}, {"id": "controller_session_store_sessionstore_close", "label": ".close()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L182"}, {"id": "controller_session_store_sessionstore_abandoned_older_than", "label": ".abandoned_older_than()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L202"}, {"id": "controller_session_store_sessionstore_gc_loop", "label": ".gc_loop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L218"}, {"id": "controller_session_store_sessionstore_gc_once", "label": "._gc_once()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L236"}, {"id": "controller_session_store_on_operations_panel", "label": "on_operations_panel()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L259"}, {"id": "controller_session_store_project_identifier", "label": "project_identifier()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L270"}, {"id": "controller_session_store_rationale_1", "label": "In-memory session store + GC for creation sessions. Backend Spec \u00a74.4.7. The :c", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L1"}, {"id": "controller_session_store_rationale_47", "label": "One creation session. Backend Spec \u00a74.4.7. Attributes: session_id:", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L47"}, {"id": "controller_session_store_rationale_88", "label": "Return ``True`` if the session reached a terminal state.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L88"}, {"id": "controller_session_store_rationale_93", "label": "In-memory session store. Backend Spec \u00a74.4.7. Sessions are keyed by UUID4 s", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L93"}, {"id": "controller_session_store_rationale_105", "label": "Create a fresh session in :data:`SessionState.PENDING` state.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L105"}, {"id": "controller_session_store_rationale_126", "label": "Return the session keyed by ``session_id``, or ``None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L126"}, {"id": "controller_session_store_rationale_130", "label": "Return ``(session_id, session)`` pairs, oldest-created first. The publi", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L130"}, {"id": "controller_session_store_rationale_139", "label": "Move ``session_id`` to ``new_state``, updating ``current_phase``. Valid", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L139"}, {"id": "controller_session_store_rationale_160", "label": "Attach a WebSocket fan-out queue to the session. The controller pushes", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L160"}, {"id": "controller_session_store_rationale_172", "label": "Refresh ``last_heartbeat`` so the GC will not close this session. No-op", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L172"}, {"id": "controller_session_store_rationale_183", "label": "Stamp a terminal-state session with the outcome envelope. ``outcome`` i", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L183"}, {"id": "controller_session_store_rationale_203", "label": "Return ids of :data:`SessionState.INPUT_REQUIRED` sessions whose ``last_", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L203"}, {"id": "controller_session_store_rationale_219", "label": "Run the abandoned-session GC forever. Backend Spec \u00a74.4.7. Sleeps ``int", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L219"}, {"id": "controller_session_store_rationale_237", "label": "One GC pass: close every abandoned ``INPUT_REQUIRED`` session.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L237"}, {"id": "controller_session_store_rationale_260", "label": "Return ``True`` when ``session`` belongs on the Operations panel. Frontend", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L260"}, {"id": "controller_session_store_rationale_271", "label": "Pluck a project identifier off a project / run creation request. A project", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L271"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "uuid", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "contextlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "exlab_wizard_controller_state_machine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L36", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "controller_session_store_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L46", "weight": 1.0}, {"source": "controller_session_store_session", "target": "controller_session_store_session_is_terminal", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L87", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "controller_session_store_sessionstore", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L92", "weight": 1.0}, {"source": "controller_session_store_sessionstore", "target": "controller_session_store_sessionstore_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L99", "weight": 1.0}, {"source": "controller_session_store_sessionstore", "target": "controller_session_store_sessionstore_open", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L104", "weight": 1.0}, {"source": "controller_session_store_sessionstore", "target": "controller_session_store_sessionstore_get", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L125", "weight": 1.0}, {"source": "controller_session_store_sessionstore", "target": "controller_session_store_sessionstore_iter_sorted", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L129", "weight": 1.0}, {"source": "controller_session_store_sessionstore", "target": "controller_session_store_sessionstore_transition", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L138", "weight": 1.0}, {"source": "controller_session_store_sessionstore", "target": "controller_session_store_sessionstore_attach_event_queue", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L159", "weight": 1.0}, {"source": "controller_session_store_sessionstore", "target": "controller_session_store_sessionstore_heartbeat", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L171", "weight": 1.0}, {"source": "controller_session_store_sessionstore", "target": "controller_session_store_sessionstore_close", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L182", "weight": 1.0}, {"source": "controller_session_store_sessionstore", "target": "controller_session_store_sessionstore_abandoned_older_than", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L202", "weight": 1.0}, {"source": "controller_session_store_sessionstore", "target": "controller_session_store_sessionstore_gc_loop", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L218", "weight": 1.0}, {"source": "controller_session_store_sessionstore", "target": "controller_session_store_sessionstore_gc_once", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L236", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "controller_session_store_on_operations_panel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L259", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "target": "controller_session_store_project_identifier", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L270", "weight": 1.0}, {"source": "controller_session_store_sessionstore_open", "target": "controller_session_store_session", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L108", "weight": 1.0}, {"source": "controller_session_store_sessionstore_transition", "target": "controller_session_store_sessionstore_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L147", "weight": 1.0}, {"source": "controller_session_store_sessionstore_attach_event_queue", "target": "controller_session_store_sessionstore_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L166", "weight": 1.0}, {"source": "controller_session_store_sessionstore_heartbeat", "target": "controller_session_store_sessionstore_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L177", "weight": 1.0}, {"source": "controller_session_store_sessionstore_close", "target": "controller_session_store_sessionstore_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L192", "weight": 1.0}, {"source": "controller_session_store_sessionstore_gc_loop", "target": "controller_session_store_sessionstore_gc_once", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L232", "weight": 1.0}, {"source": "controller_session_store_sessionstore_gc_once", "target": "controller_session_store_sessionstore_abandoned_older_than", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L238", "weight": 1.0}, {"source": "controller_session_store_sessionstore_gc_once", "target": "controller_session_store_sessionstore_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L239", "weight": 1.0}, {"source": "controller_session_store_sessionstore_gc_once", "target": "controller_session_store_sessionstore_transition", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L243", "weight": 1.0}, {"source": "controller_session_store_sessionstore_gc_once", "target": "controller_session_store_sessionstore_close", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L245", "weight": 1.0}, {"source": "controller_session_store_project_identifier", "target": "controller_session_store_sessionstore_get", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L284", "weight": 1.0}, {"source": "controller_session_store_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_controller_session_store_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L1", "weight": 1.0}, {"source": "controller_session_store_rationale_47", "target": "controller_session_store_session", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L47", "weight": 1.0}, {"source": "controller_session_store_rationale_88", "target": "controller_session_store_session_is_terminal", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L88", "weight": 1.0}, {"source": "controller_session_store_rationale_93", "target": "controller_session_store_sessionstore", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L93", "weight": 1.0}, {"source": "controller_session_store_rationale_105", "target": "controller_session_store_sessionstore_open", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L105", "weight": 1.0}, {"source": "controller_session_store_rationale_126", "target": "controller_session_store_sessionstore_get", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L126", "weight": 1.0}, {"source": "controller_session_store_rationale_130", "target": "controller_session_store_sessionstore_iter_sorted", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L130", "weight": 1.0}, {"source": "controller_session_store_rationale_139", "target": "controller_session_store_sessionstore_transition", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L139", "weight": 1.0}, {"source": "controller_session_store_rationale_160", "target": "controller_session_store_sessionstore_attach_event_queue", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L160", "weight": 1.0}, {"source": "controller_session_store_rationale_172", "target": "controller_session_store_sessionstore_heartbeat", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L172", "weight": 1.0}, {"source": "controller_session_store_rationale_183", "target": "controller_session_store_sessionstore_close", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L183", "weight": 1.0}, {"source": "controller_session_store_rationale_203", "target": "controller_session_store_sessionstore_abandoned_older_than", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L203", "weight": 1.0}, {"source": "controller_session_store_rationale_219", "target": "controller_session_store_sessionstore_gc_loop", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L219", "weight": 1.0}, {"source": "controller_session_store_rationale_237", "target": "controller_session_store_sessionstore_gc_once", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L237", "weight": 1.0}, {"source": "controller_session_store_rationale_260", "target": "controller_session_store_on_operations_panel", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L260", "weight": 1.0}, {"source": "controller_session_store_rationale_271", "target": "controller_session_store_project_identifier", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L271", "weight": 1.0}], "raw_calls": [{"caller_nid": "controller_session_store_sessionstore_open", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L106"}, {"caller_nid": "controller_session_store_sessionstore_open", "callee": "uuid4", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L106"}, {"caller_nid": "controller_session_store_sessionstore_open", "callee": "utc_now", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L107"}, {"caller_nid": "controller_session_store_sessionstore_open", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L119"}, {"caller_nid": "controller_session_store_sessionstore_iter_sorted", "callee": "sorted", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L136"}, {"caller_nid": "controller_session_store_sessionstore_iter_sorted", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L136"}, {"caller_nid": "controller_session_store_sessionstore_transition", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L149"}, {"caller_nid": "controller_session_store_sessionstore_transition", "callee": "assert_transition", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L150"}, {"caller_nid": "controller_session_store_sessionstore_transition", "callee": "state_to_phase", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L152"}, {"caller_nid": "controller_session_store_sessionstore_attach_event_queue", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L168"}, {"caller_nid": "controller_session_store_sessionstore_heartbeat", "callee": "utc_now", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L180"}, {"caller_nid": "controller_session_store_sessionstore_abandoned_older_than", "callee": "utc_now", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L211"}, {"caller_nid": "controller_session_store_sessionstore_abandoned_older_than", "callee": "items", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L214"}, {"caller_nid": "controller_session_store_sessionstore_gc_loop", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L228"}, {"caller_nid": "controller_session_store_sessionstore_gc_loop", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L231"}, {"caller_nid": "controller_session_store_sessionstore_gc_once", "callee": "suppress", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L242"}, {"caller_nid": "controller_session_store_sessionstore_gc_once", "callee": "suppress", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L251"}, {"caller_nid": "controller_session_store_sessionstore_gc_once", "callee": "put_nowait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L252"}, {"caller_nid": "controller_session_store_sessionstore_gc_once", "callee": "info", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L253"}, {"caller_nid": "controller_session_store_project_identifier", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L279"}, {"caller_nid": "controller_session_store_project_identifier", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L282"}, {"caller_nid": "controller_session_store_project_identifier", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L283"}, {"caller_nid": "controller_session_store_project_identifier", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L285"}, {"caller_nid": "controller_session_store_project_identifier", "callee": "getattr", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L287"}, {"caller_nid": "controller_session_store_project_identifier", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py", "source_location": "L288"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/fa4d363bb98c39da2247bfabfa212602448f65bc0cd9aa18a4a7204952288251.json b/graphify-out/cache/ast/fa4d363bb98c39da2247bfabfa212602448f65bc0cd9aa18a4a7204952288251.json new file mode 100644 index 0000000..065381a --- /dev/null +++ b/graphify-out/cache/ast/fa4d363bb98c39da2247bfabfa212602448f65bc0cd9aa18a4a7204952288251.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_docs_source_conf_py", "label": "conf.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L1"}, {"id": "source_conf_noisefilter", "label": "_NoiseFilter", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L200"}, {"id": "source_conf_noisefilter_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L208"}, {"id": "source_conf_noisefilter_filter", "label": ".filter()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L212"}, {"id": "source_conf_setup", "label": "setup()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L271"}, {"id": "source_conf_rationale_1", "label": "Sphinx configuration for ExLab-Wizard documentation. The configuration wires th", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L1"}, {"id": "source_conf_rationale_201", "label": "Drop uncategorised warnings whose message text matches a known needle. Inse", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L201"}, {"id": "source_conf_rationale_272", "label": "Install the noise filter at the head of the warning handler chain. Sphinx w", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L272"}], "edges": [{"source": "users_alex_projects_exlabwizard_docs_source_conf_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_docs_source_conf_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_docs_source_conf_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_docs_source_conf_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_docs_source_conf_py", "target": "exlab_wizard_api", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L30", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_docs_source_conf_py", "target": "exlab_wizard", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_docs_source_conf_py", "target": "source_conf_noisefilter", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L200", "weight": 1.0}, {"source": "source_conf_noisefilter", "target": "source_conf_noisefilter_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L208", "weight": 1.0}, {"source": "source_conf_noisefilter", "target": "source_conf_noisefilter_filter", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L212", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_docs_source_conf_py", "target": "source_conf_setup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L271", "weight": 1.0}, {"source": "source_conf_setup", "target": "source_conf_noisefilter", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L289", "weight": 1.0}, {"source": "source_conf_rationale_1", "target": "users_alex_projects_exlabwizard_docs_source_conf_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L1", "weight": 1.0}, {"source": "source_conf_rationale_201", "target": "source_conf_noisefilter", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L201", "weight": 1.0}, {"source": "source_conf_rationale_272", "target": "source_conf_setup", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L272", "weight": 1.0}], "raw_calls": [{"caller_nid": "source_conf_noisefilter_init", "callee": "super", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L209"}, {"caller_nid": "source_conf_noisefilter_filter", "callee": "getMessage", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L213"}, {"caller_nid": "source_conf_noisefilter_filter", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L214"}, {"caller_nid": "source_conf_setup", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L279"}, {"caller_nid": "source_conf_setup", "callee": "extend", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L281"}, {"caller_nid": "source_conf_setup", "callee": "getLogger", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L288"}, {"caller_nid": "source_conf_setup", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L289"}, {"caller_nid": "source_conf_setup", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L291"}, {"caller_nid": "source_conf_setup", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/docs/source/conf.py", "source_location": "L294"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/fa7cb31617a7d753d74f9f7ba678580a57b9b8ffaf956d7f7c83f50efcb131a4.json b/graphify-out/cache/ast/fa7cb31617a7d753d74f9f7ba678580a57b9b8ffaf956d7f7c83f50efcb131a4.json new file mode 100644 index 0000000..c1e494c --- /dev/null +++ b/graphify-out/cache/ast/fa7cb31617a7d753d74f9f7ba678580a57b9b8ffaf956d7f7c83f50efcb131a4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_crash_plugin_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/__init__.py", "source_location": "L1"}, {"id": "crash_plugin_init_rationale_1", "label": "crash_plugin -- exercises subprocess crash containment (SIGSEGV-like).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/__init__.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_crash_plugin_init_py", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_crash_plugin_plugin_py", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/__init__.py", "source_location": "L3", "weight": 1.0}, {"source": "crash_plugin_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_crash_plugin_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/fb79b4053a0bb787e3749eeaac17b7aac34fdd5f379ce1332ad4f8ed46f8ded4.json b/graphify-out/cache/ast/fb79b4053a0bb787e3749eeaac17b7aac34fdd5f379ce1332ad4f8ed46f8ded4.json new file mode 100644 index 0000000..de588ec --- /dev/null +++ b/graphify-out/cache/ast/fb79b4053a0bb787e3749eeaac17b7aac34fdd5f379ce1332ad4f8ed46f8ded4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "label": "test_sessions.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L1"}, {"id": "api_test_sessions_ready_config", "label": "_ready_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L29"}, {"id": "api_test_sessions_stubcontroller", "label": "_StubController", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L53"}, {"id": "api_test_sessions_stubcontroller_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L56"}, {"id": "api_test_sessions_stubcontroller_create_project", "label": ".create_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L62"}, {"id": "api_test_sessions_stubcontroller_create_run", "label": ".create_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L74"}, {"id": "api_test_sessions_stubcontroller_status", "label": ".status()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L86"}, {"id": "api_test_sessions_stubcontroller_resume", "label": ".resume()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L97"}, {"id": "api_test_sessions_stubcontroller_cancel", "label": ".cancel()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L101"}, {"id": "api_test_sessions_stubcontroller_subscribe", "label": ".subscribe()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L108"}, {"id": "api_test_sessions_test_create_session_project", "label": "test_create_session_project()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L121"}, {"id": "api_test_sessions_test_create_session_run", "label": "test_create_session_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L152"}, {"id": "api_test_sessions_test_get_session_returns_snapshot", "label": "test_get_session_returns_snapshot()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L178"}, {"id": "api_test_sessions_test_get_session_404_for_unknown", "label": "test_get_session_404_for_unknown()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L205"}, {"id": "api_test_sessions_test_post_resume_invokes_controller", "label": "test_post_resume_invokes_controller()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L218"}, {"id": "api_test_sessions_test_post_cancel_invokes_controller", "label": "test_post_cancel_invokes_controller()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L239"}, {"id": "api_test_sessions_test_post_cancel_404_for_unknown", "label": "test_post_cancel_404_for_unknown()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L256"}, {"id": "api_test_sessions_test_post_resume_409_for_terminal_session", "label": "test_post_resume_409_for_terminal_session()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L267"}, {"id": "api_test_sessions_test_websocket_streams_session_events", "label": "test_websocket_streams_session_events()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L284"}, {"id": "api_test_sessions_test_websocket_unknown_session_closes", "label": "test_websocket_unknown_session_closes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L307"}, {"id": "api_test_sessions_make_request", "label": "_make_request()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L321"}, {"id": "api_test_sessions_test_create_session_validation_error_returns_422", "label": "test_create_session_validation_error_returns_422()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L338"}, {"id": "api_test_sessions_rationale_1", "label": "Unit tests for the ``/sessions`` router.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L1"}, {"id": "api_test_sessions_rationale_54", "label": "Minimal in-memory controller for routing tests.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L54"}, {"id": "api_test_sessions_rationale_339", "label": "Posting without ``kind`` discriminator must 422.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L339"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "fastapi_testclient", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "exlab_wizard_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "exlab_wizard_controller_creation", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "exlab_wizard_controller_session_store", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "exlab_wizard_controller_state_machine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_ready_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_stubcontroller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L53", "weight": 1.0}, {"source": "api_test_sessions_stubcontroller", "target": "api_test_sessions_stubcontroller_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L56", "weight": 1.0}, {"source": "api_test_sessions_stubcontroller", "target": "api_test_sessions_stubcontroller_create_project", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L62", "weight": 1.0}, {"source": "api_test_sessions_stubcontroller", "target": "api_test_sessions_stubcontroller_create_run", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L74", "weight": 1.0}, {"source": "api_test_sessions_stubcontroller", "target": "api_test_sessions_stubcontroller_status", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L86", "weight": 1.0}, {"source": "api_test_sessions_stubcontroller", "target": "api_test_sessions_stubcontroller_resume", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L97", "weight": 1.0}, {"source": "api_test_sessions_stubcontroller", "target": "api_test_sessions_stubcontroller_cancel", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L101", "weight": 1.0}, {"source": "api_test_sessions_stubcontroller", "target": "api_test_sessions_stubcontroller_subscribe", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L108", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_test_create_session_project", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L121", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_test_create_session_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L152", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_test_get_session_returns_snapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L178", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_test_get_session_404_for_unknown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L205", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_test_post_resume_invokes_controller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L218", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_test_post_cancel_invokes_controller", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L239", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_test_post_cancel_404_for_unknown", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L256", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_test_post_resume_409_for_terminal_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L267", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_test_websocket_streams_session_events", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L284", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_test_websocket_unknown_session_closes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L307", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_make_request", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L321", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "target": "api_test_sessions_test_create_session_validation_error_returns_422", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L338", "weight": 1.0}, {"source": "api_test_sessions_stubcontroller_resume", "target": "api_test_sessions_stubcontroller_status", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L99", "weight": 1.0}, {"source": "api_test_sessions_test_create_session_project", "target": "api_test_sessions_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L122", "weight": 1.0}, {"source": "api_test_sessions_test_create_session_project", "target": "api_test_sessions_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L124", "weight": 1.0}, {"source": "api_test_sessions_test_create_session_run", "target": "api_test_sessions_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L153", "weight": 1.0}, {"source": "api_test_sessions_test_create_session_run", "target": "api_test_sessions_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L155", "weight": 1.0}, {"source": "api_test_sessions_test_get_session_returns_snapshot", "target": "api_test_sessions_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L179", "weight": 1.0}, {"source": "api_test_sessions_test_get_session_returns_snapshot", "target": "api_test_sessions_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L181", "weight": 1.0}, {"source": "api_test_sessions_test_get_session_404_for_unknown", "target": "api_test_sessions_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L206", "weight": 1.0}, {"source": "api_test_sessions_test_get_session_404_for_unknown", "target": "api_test_sessions_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L208", "weight": 1.0}, {"source": "api_test_sessions_test_post_resume_invokes_controller", "target": "api_test_sessions_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L219", "weight": 1.0}, {"source": "api_test_sessions_test_post_resume_invokes_controller", "target": "api_test_sessions_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L221", "weight": 1.0}, {"source": "api_test_sessions_test_post_resume_invokes_controller", "target": "api_test_sessions_make_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L225", "weight": 1.0}, {"source": "api_test_sessions_test_post_cancel_invokes_controller", "target": "api_test_sessions_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L240", "weight": 1.0}, {"source": "api_test_sessions_test_post_cancel_invokes_controller", "target": "api_test_sessions_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L242", "weight": 1.0}, {"source": "api_test_sessions_test_post_cancel_invokes_controller", "target": "api_test_sessions_make_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L245", "weight": 1.0}, {"source": "api_test_sessions_test_post_cancel_404_for_unknown", "target": "api_test_sessions_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L257", "weight": 1.0}, {"source": "api_test_sessions_test_post_cancel_404_for_unknown", "target": "api_test_sessions_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L259", "weight": 1.0}, {"source": "api_test_sessions_test_post_resume_409_for_terminal_session", "target": "api_test_sessions_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L268", "weight": 1.0}, {"source": "api_test_sessions_test_post_resume_409_for_terminal_session", "target": "api_test_sessions_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L270", "weight": 1.0}, {"source": "api_test_sessions_test_post_resume_409_for_terminal_session", "target": "api_test_sessions_make_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L273", "weight": 1.0}, {"source": "api_test_sessions_test_websocket_streams_session_events", "target": "api_test_sessions_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L287", "weight": 1.0}, {"source": "api_test_sessions_test_websocket_streams_session_events", "target": "api_test_sessions_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L289", "weight": 1.0}, {"source": "api_test_sessions_test_websocket_streams_session_events", "target": "api_test_sessions_make_request", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L292", "weight": 1.0}, {"source": "api_test_sessions_test_websocket_unknown_session_closes", "target": "api_test_sessions_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L308", "weight": 1.0}, {"source": "api_test_sessions_test_websocket_unknown_session_closes", "target": "api_test_sessions_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L310", "weight": 1.0}, {"source": "api_test_sessions_test_create_session_validation_error_returns_422", "target": "api_test_sessions_stubcontroller", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L340", "weight": 1.0}, {"source": "api_test_sessions_test_create_session_validation_error_returns_422", "target": "api_test_sessions_ready_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L342", "weight": 1.0}, {"source": "api_test_sessions_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_api_test_sessions_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L1", "weight": 1.0}, {"source": "api_test_sessions_rationale_54", "target": "api_test_sessions_stubcontroller", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L54", "weight": 1.0}, {"source": "api_test_sessions_rationale_339", "target": "api_test_sessions_test_create_session_validation_error_returns_422", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L339", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_test_sessions_ready_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L32"}, {"caller_nid": "api_test_sessions_ready_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L33"}, {"caller_nid": "api_test_sessions_ready_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L35"}, {"caller_nid": "api_test_sessions_ready_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L40"}, {"caller_nid": "api_test_sessions_ready_config", "callee": "LIMSConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L48"}, {"caller_nid": "api_test_sessions_ready_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L49"}, {"caller_nid": "api_test_sessions_stubcontroller_init", "callee": "SessionStore", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L57"}, {"caller_nid": "api_test_sessions_stubcontroller_create_project", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L63"}, {"caller_nid": "api_test_sessions_stubcontroller_create_project", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L64"}, {"caller_nid": "api_test_sessions_stubcontroller_create_project", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L65"}, {"caller_nid": "api_test_sessions_stubcontroller_create_project", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L66"}, {"caller_nid": "api_test_sessions_stubcontroller_create_project", "callee": "SessionHandle", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L67"}, {"caller_nid": "api_test_sessions_stubcontroller_create_run", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L75"}, {"caller_nid": "api_test_sessions_stubcontroller_create_run", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L76"}, {"caller_nid": "api_test_sessions_stubcontroller_create_run", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L77"}, {"caller_nid": "api_test_sessions_stubcontroller_create_run", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L78"}, {"caller_nid": "api_test_sessions_stubcontroller_create_run", "callee": "SessionHandle", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L79"}, {"caller_nid": "api_test_sessions_stubcontroller_status", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L87"}, {"caller_nid": "api_test_sessions_stubcontroller_status", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L89"}, {"caller_nid": "api_test_sessions_stubcontroller_status", "callee": "SessionHandle", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L90"}, {"caller_nid": "api_test_sessions_stubcontroller_resume", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L98"}, {"caller_nid": "api_test_sessions_stubcontroller_resume", "callee": "dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L98"}, {"caller_nid": "api_test_sessions_stubcontroller_cancel", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L102"}, {"caller_nid": "api_test_sessions_stubcontroller_cancel", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L103"}, {"caller_nid": "api_test_sessions_stubcontroller_cancel", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L104"}, {"caller_nid": "api_test_sessions_stubcontroller_cancel", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L105"}, {"caller_nid": "api_test_sessions_stubcontroller_cancel", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L106"}, {"caller_nid": "api_test_sessions_stubcontroller_subscribe", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L109"}, {"caller_nid": "api_test_sessions_stubcontroller_subscribe", "callee": "ValueError", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L111"}, {"caller_nid": "api_test_sessions_stubcontroller_subscribe", "callee": "Queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L113"}, {"caller_nid": "api_test_sessions_stubcontroller_subscribe", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L115"}, {"caller_nid": "api_test_sessions_stubcontroller_subscribe", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L117"}, {"caller_nid": "api_test_sessions_test_create_session_project", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L123"}, {"caller_nid": "api_test_sessions_test_create_session_project", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L126"}, {"caller_nid": "api_test_sessions_test_create_session_project", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L127"}, {"caller_nid": "api_test_sessions_test_create_session_project", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L131"}, {"caller_nid": "api_test_sessions_test_create_session_project", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L143"}, {"caller_nid": "api_test_sessions_test_create_session_project", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L145"}, {"caller_nid": "api_test_sessions_test_create_session_project", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L148"}, {"caller_nid": "api_test_sessions_test_create_session_project", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L149"}, {"caller_nid": "api_test_sessions_test_create_session_run", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L154"}, {"caller_nid": "api_test_sessions_test_create_session_run", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L157"}, {"caller_nid": "api_test_sessions_test_create_session_run", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L158"}, {"caller_nid": "api_test_sessions_test_create_session_run", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L163"}, {"caller_nid": "api_test_sessions_test_create_session_run", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L172"}, {"caller_nid": "api_test_sessions_test_create_session_run", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L174"}, {"caller_nid": "api_test_sessions_test_get_session_returns_snapshot", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L180"}, {"caller_nid": "api_test_sessions_test_get_session_returns_snapshot", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L183"}, {"caller_nid": "api_test_sessions_test_get_session_returns_snapshot", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L184"}, {"caller_nid": "api_test_sessions_test_get_session_returns_snapshot", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L186"}, {"caller_nid": "api_test_sessions_test_get_session_returns_snapshot", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L200"}, {"caller_nid": "api_test_sessions_test_get_session_returns_snapshot", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L201"}, {"caller_nid": "api_test_sessions_test_get_session_404_for_unknown", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L207"}, {"caller_nid": "api_test_sessions_test_get_session_404_for_unknown", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L210"}, {"caller_nid": "api_test_sessions_test_get_session_404_for_unknown", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L211"}, {"caller_nid": "api_test_sessions_test_get_session_404_for_unknown", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L212"}, {"caller_nid": "api_test_sessions_test_get_session_404_for_unknown", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L214"}, {"caller_nid": "api_test_sessions_test_post_resume_invokes_controller", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L220"}, {"caller_nid": "api_test_sessions_test_post_resume_invokes_controller", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L223"}, {"caller_nid": "api_test_sessions_test_post_resume_invokes_controller", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L225"}, {"caller_nid": "api_test_sessions_test_post_resume_invokes_controller", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L226"}, {"caller_nid": "api_test_sessions_test_post_resume_invokes_controller", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L227"}, {"caller_nid": "api_test_sessions_test_post_resume_invokes_controller", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L228"}, {"caller_nid": "api_test_sessions_test_post_resume_invokes_controller", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L229"}, {"caller_nid": "api_test_sessions_test_post_resume_invokes_controller", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L230"}, {"caller_nid": "api_test_sessions_test_post_resume_invokes_controller", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L231"}, {"caller_nid": "api_test_sessions_test_post_cancel_invokes_controller", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L241"}, {"caller_nid": "api_test_sessions_test_post_cancel_invokes_controller", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L244"}, {"caller_nid": "api_test_sessions_test_post_cancel_invokes_controller", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L245"}, {"caller_nid": "api_test_sessions_test_post_cancel_invokes_controller", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L246"}, {"caller_nid": "api_test_sessions_test_post_cancel_invokes_controller", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L247"}, {"caller_nid": "api_test_sessions_test_post_cancel_invokes_controller", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L248"}, {"caller_nid": "api_test_sessions_test_post_cancel_404_for_unknown", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L258"}, {"caller_nid": "api_test_sessions_test_post_cancel_404_for_unknown", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L261"}, {"caller_nid": "api_test_sessions_test_post_cancel_404_for_unknown", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L262"}, {"caller_nid": "api_test_sessions_test_post_cancel_404_for_unknown", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L263"}, {"caller_nid": "api_test_sessions_test_post_resume_409_for_terminal_session", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L269"}, {"caller_nid": "api_test_sessions_test_post_resume_409_for_terminal_session", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L272"}, {"caller_nid": "api_test_sessions_test_post_resume_409_for_terminal_session", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L273"}, {"caller_nid": "api_test_sessions_test_post_resume_409_for_terminal_session", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L274"}, {"caller_nid": "api_test_sessions_test_post_resume_409_for_terminal_session", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L275"}, {"caller_nid": "api_test_sessions_test_post_resume_409_for_terminal_session", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L276"}, {"caller_nid": "api_test_sessions_test_post_resume_409_for_terminal_session", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L277"}, {"caller_nid": "api_test_sessions_test_websocket_streams_session_events", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L288"}, {"caller_nid": "api_test_sessions_test_websocket_streams_session_events", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L291"}, {"caller_nid": "api_test_sessions_test_websocket_streams_session_events", "callee": "open", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L292"}, {"caller_nid": "api_test_sessions_test_websocket_streams_session_events", "callee": "Queue", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L293"}, {"caller_nid": "api_test_sessions_test_websocket_streams_session_events", "callee": "put_nowait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L294"}, {"caller_nid": "api_test_sessions_test_websocket_streams_session_events", "callee": "put_nowait", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L297"}, {"caller_nid": "api_test_sessions_test_websocket_streams_session_events", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L299"}, {"caller_nid": "api_test_sessions_test_websocket_streams_session_events", "callee": "websocket_connect", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L300"}, {"caller_nid": "api_test_sessions_test_websocket_streams_session_events", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L301"}, {"caller_nid": "api_test_sessions_test_websocket_streams_session_events", "callee": "receive_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L301"}, {"caller_nid": "api_test_sessions_test_websocket_streams_session_events", "callee": "loads", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L303"}, {"caller_nid": "api_test_sessions_test_websocket_streams_session_events", "callee": "receive_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L303"}, {"caller_nid": "api_test_sessions_test_websocket_unknown_session_closes", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L309"}, {"caller_nid": "api_test_sessions_test_websocket_unknown_session_closes", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L312"}, {"caller_nid": "api_test_sessions_test_websocket_unknown_session_closes", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L313"}, {"caller_nid": "api_test_sessions_test_websocket_unknown_session_closes", "callee": "websocket_connect", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L315"}, {"caller_nid": "api_test_sessions_test_websocket_unknown_session_closes", "callee": "receive_json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L316"}, {"caller_nid": "api_test_sessions_make_request", "callee": "ProjectCreateRequest", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L322"}, {"caller_nid": "api_test_sessions_make_request", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L324"}, {"caller_nid": "api_test_sessions_test_create_session_validation_error_returns_422", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L341"}, {"caller_nid": "api_test_sessions_test_create_session_validation_error_returns_422", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L344"}, {"caller_nid": "api_test_sessions_test_create_session_validation_error_returns_422", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L345"}, {"caller_nid": "api_test_sessions_test_create_session_validation_error_returns_422", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L346"}, {"caller_nid": "api_test_sessions_test_create_session_validation_error_returns_422", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py", "source_location": "L348"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/fc15153bed595e5b40c77bdc0447459f8da423edeee7ce6c8697dccd0ba9e712.json b/graphify-out/cache/ast/fc15153bed595e5b40c77bdc0447459f8da423edeee7ce6c8697dccd0ba9e712.json new file mode 100644 index 0000000..8feedad --- /dev/null +++ b/graphify-out/cache/ast/fc15153bed595e5b40c77bdc0447459f8da423edeee7ce6c8697dccd0ba9e712.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_session_progress_py", "label": "session_progress.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L1"}, {"id": "components_session_progress_phaserow", "label": "PhaseRow", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L46"}, {"id": "components_session_progress_compute_phase_rows", "label": "compute_phase_rows()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L56"}, {"id": "components_session_progress_session_progress", "label": "session_progress()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L93"}, {"id": "components_session_progress_sessionprogressstate", "label": "SessionProgressState", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L171"}, {"id": "components_session_progress_apply_frame", "label": "apply_frame()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L186"}, {"id": "components_session_progress_rationale_1", "label": "Wizard session-progress bar (Frontend Spec \u00a710.1, \u00a79.3). Drives a phase indicat", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L1"}, {"id": "components_session_progress_rationale_47", "label": "One renderable row in the session-progress component.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L47"}, {"id": "components_session_progress_rationale_61", "label": "Return one :class:`PhaseRow` per phase, in canonical order. A phase is *don", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L61"}, {"id": "components_session_progress_rationale_101", "label": "Build the progress bar for the Confirm & Create step. The wizard reaches in", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L101"}, {"id": "components_session_progress_rationale_172", "label": "Mutable phase/sub-progress state folded from controller WS frames. The wiza", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L172"}, {"id": "components_session_progress_rationale_187", "label": "Fold one controller WS ``frame`` into ``state`` in place. Returns ``True``", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L187"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_session_progress_py", "target": "collections_abc", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_session_progress_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_session_progress_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_session_progress_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_session_progress_py", "target": "components_session_progress_phaserow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L46", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_session_progress_py", "target": "components_session_progress_compute_phase_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_session_progress_py", "target": "components_session_progress_session_progress", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L93", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_session_progress_py", "target": "components_session_progress_sessionprogressstate", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L171", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_session_progress_py", "target": "components_session_progress_apply_frame", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L186", "weight": 1.0}, {"source": "components_session_progress_compute_phase_rows", "target": "components_session_progress_phaserow", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L82", "weight": 1.0}, {"source": "components_session_progress_session_progress", "target": "components_session_progress_compute_phase_rows", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L108", "weight": 1.0}, {"source": "components_session_progress_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_ui_components_session_progress_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L1", "weight": 1.0}, {"source": "components_session_progress_rationale_47", "target": "components_session_progress_phaserow", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L47", "weight": 1.0}, {"source": "components_session_progress_rationale_61", "target": "components_session_progress_compute_phase_rows", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L61", "weight": 1.0}, {"source": "components_session_progress_rationale_101", "target": "components_session_progress_session_progress", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L101", "weight": 1.0}, {"source": "components_session_progress_rationale_172", "target": "components_session_progress_sessionprogressstate", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L172", "weight": 1.0}, {"source": "components_session_progress_rationale_187", "target": "components_session_progress_apply_frame", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L187", "weight": 1.0}], "raw_calls": [{"caller_nid": "components_session_progress_compute_phase_rows", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L70"}, {"caller_nid": "components_session_progress_compute_phase_rows", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L81"}, {"caller_nid": "components_session_progress_session_progress", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L130"}, {"caller_nid": "components_session_progress_session_progress", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L130"}, {"caller_nid": "components_session_progress_session_progress", "callee": "column", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L130"}, {"caller_nid": "components_session_progress_session_progress", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L133"}, {"caller_nid": "components_session_progress_session_progress", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L133"}, {"caller_nid": "components_session_progress_session_progress", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L133"}, {"caller_nid": "components_session_progress_session_progress", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L141"}, {"caller_nid": "components_session_progress_session_progress", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L141"}, {"caller_nid": "components_session_progress_session_progress", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L142"}, {"caller_nid": "components_session_progress_session_progress", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L142"}, {"caller_nid": "components_session_progress_session_progress", "callee": "linear_progress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L142"}, {"caller_nid": "components_session_progress_session_progress", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L149"}, {"caller_nid": "components_session_progress_session_progress", "callee": "classes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L149"}, {"caller_nid": "components_session_progress_session_progress", "callee": "row", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L149"}, {"caller_nid": "components_session_progress_session_progress", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L151"}, {"caller_nid": "components_session_progress_session_progress", "callee": "label", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L151"}, {"caller_nid": "components_session_progress_session_progress", "callee": "style", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L159"}, {"caller_nid": "components_session_progress_session_progress", "callee": "props", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L159"}, {"caller_nid": "components_session_progress_session_progress", "callee": "linear_progress", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L159"}, {"caller_nid": "components_session_progress_apply_frame", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L203"}, {"caller_nid": "components_session_progress_apply_frame", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L205"}, {"caller_nid": "components_session_progress_apply_frame", "callee": "_complete_through", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L210"}, {"caller_nid": "components_session_progress_apply_frame", "callee": "index", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L210"}, {"caller_nid": "components_session_progress_apply_frame", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L217"}, {"caller_nid": "components_session_progress_apply_frame", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L218"}, {"caller_nid": "components_session_progress_apply_frame", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L219"}, {"caller_nid": "components_session_progress_apply_frame", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L219"}, {"caller_nid": "components_session_progress_apply_frame", "callee": "_complete_through", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L222"}, {"caller_nid": "components_session_progress_apply_frame", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py", "source_location": "L222"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/fc8f57326f846782e2cf68ae5133d047955c030f10bd7db7c7fe43f82a2a72c9.json b/graphify-out/cache/ast/fc8f57326f846782e2cf68ae5133d047955c030f10bd7db7c7fe43f82a2a72c9.json new file mode 100644 index 0000000..0f9a84e --- /dev/null +++ b/graphify-out/cache/ast/fc8f57326f846782e2cf68ae5133d047955c030f10bd7db7c7fe43f82a2a72c9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "label": "test_queue.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L1"}, {"id": "sync_test_queue_queue", "label": "queue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L26"}, {"id": "sync_test_queue_test_insert_creates_queued_row", "label": "test_insert_creates_queued_row()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L35"}, {"id": "sync_test_queue_test_insert_unique_constraint", "label": "test_insert_unique_constraint()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L45"}, {"id": "sync_test_queue_test_files_column_round_trips", "label": "test_files_column_round_trips()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L52"}, {"id": "sync_test_queue_test_files_column_defaults_to_empty", "label": "test_files_column_defaults_to_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L62"}, {"id": "sync_test_queue_test_requeue_with_files_resets_terminal_job", "label": "test_requeue_with_files_resets_terminal_job()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L71"}, {"id": "sync_test_queue_test_get_by_id_and_run_path", "label": "test_get_by_id_and_run_path()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L83"}, {"id": "sync_test_queue_test_get_missing_returns_none", "label": "test_get_missing_returns_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L92"}, {"id": "sync_test_queue_test_transition_forward", "label": "test_transition_forward()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L97"}, {"id": "sync_test_queue_test_transition_unknown_raises", "label": "test_transition_unknown_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L106"}, {"id": "sync_test_queue_test_transition_increments_verify_passes", "label": "test_transition_increments_verify_passes()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L111"}, {"id": "sync_test_queue_test_record_failure_increments_attempts", "label": "test_record_failure_increments_attempts()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L123"}, {"id": "sync_test_queue_test_record_failure_terminal", "label": "test_record_failure_terminal()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L132"}, {"id": "sync_test_queue_test_record_failure_terminal_after_max_attempts", "label": "test_record_failure_terminal_after_max_attempts()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L139"}, {"id": "sync_test_queue_test_compute_next_attempt_at_uses_schedule", "label": "test_compute_next_attempt_at_uses_schedule()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L148"}, {"id": "sync_test_queue_test_compute_next_attempt_at_out_of_range", "label": "test_compute_next_attempt_at_out_of_range()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L158"}, {"id": "sync_test_queue_test_persistence_across_reinit", "label": "test_persistence_across_reinit()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L164"}, {"id": "sync_test_queue_test_init_replays_running_to_queued", "label": "test_init_replays_running_to_queued()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L180"}, {"id": "sync_test_queue_test_list_in_state_returns_only_matching", "label": "test_list_in_state_returns_only_matching()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L197"}, {"id": "sync_test_queue_test_list_all_orders_by_enqueued_at", "label": "test_list_all_orders_by_enqueued_at()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L207"}, {"id": "sync_test_queue_test_reset_to_queued_clears_attempts", "label": "test_reset_to_queued_clears_attempts()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L215"}, {"id": "sync_test_queue_test_reset_to_queued_unknown_raises", "label": "test_reset_to_queued_unknown_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L224"}, {"id": "sync_test_queue_test_record_failure_unknown_raises", "label": "test_record_failure_unknown_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L229"}, {"id": "sync_test_queue_test_delete_removes_row", "label": "test_delete_removes_row()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L234"}, {"id": "sync_test_queue_test_is_terminal_classifies_states", "label": "test_is_terminal_classifies_states()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L240"}, {"id": "sync_test_queue_test_init_required_before_use", "label": "test_init_required_before_use()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L247"}, {"id": "sync_test_queue_test_close_is_idempotent", "label": "test_close_is_idempotent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L254"}, {"id": "sync_test_queue_rationale_1", "label": "Tests for ``exlab_wizard.sync.queue``. Covers the durable SQLite-backed sync-jo", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L1"}, {"id": "sync_test_queue_rationale_36", "label": "``insert`` produces a QUEUED row with a generated UUID job id.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L36"}, {"id": "sync_test_queue_rationale_46", "label": "Two inserts on the same run_path violate UNIQUE.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L46"}, {"id": "sync_test_queue_rationale_53", "label": "The per-file ``files`` list round-trips through insert and read.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L53"}, {"id": "sync_test_queue_rationale_63", "label": "A job inserted without ``files`` reads back as the empty 'whole run' tuple.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L63"}, {"id": "sync_test_queue_rationale_72", "label": "``requeue_with_files`` re-arms a terminal job in QUEUED with a new subset.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L72"}, {"id": "sync_test_queue_rationale_149", "label": "The 1st through 5th attempts use the documented backoff sequence.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L149"}, {"id": "sync_test_queue_rationale_159", "label": "Attempts <1 or >MAX_ATTEMPTS yield ``None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L159"}, {"id": "sync_test_queue_rationale_165", "label": "A queue rebuilt against the same db file sees the prior rows.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L165"}, {"id": "sync_test_queue_rationale_181", "label": "A RUNNING row from a prior process is downgraded to QUEUED on restart.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L181"}, {"id": "sync_test_queue_rationale_248", "label": "Operations without init() raise a clear RuntimeError.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L248"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L10", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "aiosqlite", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "exlab_wizard_sync_queue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_queue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_insert_creates_queued_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_insert_unique_constraint", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L45", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_files_column_round_trips", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_files_column_defaults_to_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L62", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_requeue_with_files_resets_terminal_job", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L71", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_get_by_id_and_run_path", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L83", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_get_missing_returns_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L92", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_transition_forward", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L97", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_transition_unknown_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L106", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_transition_increments_verify_passes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L111", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_record_failure_increments_attempts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L123", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_record_failure_terminal", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L132", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_record_failure_terminal_after_max_attempts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L139", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_compute_next_attempt_at_uses_schedule", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L148", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_compute_next_attempt_at_out_of_range", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L158", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_persistence_across_reinit", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L164", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_init_replays_running_to_queued", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L180", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_list_in_state_returns_only_matching", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L197", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_list_all_orders_by_enqueued_at", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L207", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_reset_to_queued_clears_attempts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L215", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_reset_to_queued_unknown_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L224", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_record_failure_unknown_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L229", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_delete_removes_row", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L234", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_is_terminal_classifies_states", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L240", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_init_required_before_use", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L247", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "target": "sync_test_queue_test_close_is_idempotent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L254", "weight": 1.0}, {"source": "sync_test_queue_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_sync_test_queue_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L1", "weight": 1.0}, {"source": "sync_test_queue_rationale_36", "target": "sync_test_queue_test_insert_creates_queued_row", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L36", "weight": 1.0}, {"source": "sync_test_queue_rationale_46", "target": "sync_test_queue_test_insert_unique_constraint", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L46", "weight": 1.0}, {"source": "sync_test_queue_rationale_53", "target": "sync_test_queue_test_files_column_round_trips", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L53", "weight": 1.0}, {"source": "sync_test_queue_rationale_63", "target": "sync_test_queue_test_files_column_defaults_to_empty", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L63", "weight": 1.0}, {"source": "sync_test_queue_rationale_72", "target": "sync_test_queue_test_requeue_with_files_resets_terminal_job", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L72", "weight": 1.0}, {"source": "sync_test_queue_rationale_149", "target": "sync_test_queue_test_compute_next_attempt_at_uses_schedule", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L149", "weight": 1.0}, {"source": "sync_test_queue_rationale_159", "target": "sync_test_queue_test_compute_next_attempt_at_out_of_range", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L159", "weight": 1.0}, {"source": "sync_test_queue_rationale_165", "target": "sync_test_queue_test_persistence_across_reinit", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L165", "weight": 1.0}, {"source": "sync_test_queue_rationale_181", "target": "sync_test_queue_test_init_replays_running_to_queued", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L181", "weight": 1.0}, {"source": "sync_test_queue_rationale_248", "target": "sync_test_queue_test_init_required_before_use", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L248", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_test_queue_queue", "callee": "SyncQueue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L27"}, {"caller_nid": "sync_test_queue_queue", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L28"}, {"caller_nid": "sync_test_queue_queue", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L32"}, {"caller_nid": "sync_test_queue_test_insert_creates_queued_row", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L37"}, {"caller_nid": "sync_test_queue_test_insert_unique_constraint", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L47"}, {"caller_nid": "sync_test_queue_test_insert_unique_constraint", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L48"}, {"caller_nid": "sync_test_queue_test_insert_unique_constraint", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L49"}, {"caller_nid": "sync_test_queue_test_files_column_round_trips", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L55"}, {"caller_nid": "sync_test_queue_test_files_column_round_trips", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L56"}, {"caller_nid": "sync_test_queue_test_files_column_round_trips", "callee": "get_by_run_path", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L57"}, {"caller_nid": "sync_test_queue_test_files_column_round_trips", "callee": "tuple", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L59"}, {"caller_nid": "sync_test_queue_test_files_column_defaults_to_empty", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L64"}, {"caller_nid": "sync_test_queue_test_files_column_defaults_to_empty", "callee": "get_by_run_path", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L66"}, {"caller_nid": "sync_test_queue_test_requeue_with_files_resets_terminal_job", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L73"}, {"caller_nid": "sync_test_queue_test_requeue_with_files_resets_terminal_job", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L74"}, {"caller_nid": "sync_test_queue_test_requeue_with_files_resets_terminal_job", "callee": "requeue_with_files", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L75"}, {"caller_nid": "sync_test_queue_test_get_by_id_and_run_path", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L84"}, {"caller_nid": "sync_test_queue_test_get_by_id_and_run_path", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L85"}, {"caller_nid": "sync_test_queue_test_get_by_id_and_run_path", "callee": "get_by_run_path", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L86"}, {"caller_nid": "sync_test_queue_test_get_missing_returns_none", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L93"}, {"caller_nid": "sync_test_queue_test_get_missing_returns_none", "callee": "get_by_run_path", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L94"}, {"caller_nid": "sync_test_queue_test_transition_forward", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L98"}, {"caller_nid": "sync_test_queue_test_transition_forward", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L99"}, {"caller_nid": "sync_test_queue_test_transition_forward", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L101"}, {"caller_nid": "sync_test_queue_test_transition_unknown_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L107"}, {"caller_nid": "sync_test_queue_test_transition_unknown_raises", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L108"}, {"caller_nid": "sync_test_queue_test_transition_increments_verify_passes", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L112"}, {"caller_nid": "sync_test_queue_test_transition_increments_verify_passes", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L113"}, {"caller_nid": "sync_test_queue_test_record_failure_increments_attempts", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L124"}, {"caller_nid": "sync_test_queue_test_record_failure_increments_attempts", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L125"}, {"caller_nid": "sync_test_queue_test_record_failure_terminal", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L133"}, {"caller_nid": "sync_test_queue_test_record_failure_terminal", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L134"}, {"caller_nid": "sync_test_queue_test_record_failure_terminal_after_max_attempts", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L140"}, {"caller_nid": "sync_test_queue_test_record_failure_terminal_after_max_attempts", "callee": "range", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L142"}, {"caller_nid": "sync_test_queue_test_record_failure_terminal_after_max_attempts", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L143"}, {"caller_nid": "sync_test_queue_test_compute_next_attempt_at_uses_schedule", "callee": "datetime", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L150"}, {"caller_nid": "sync_test_queue_test_compute_next_attempt_at_uses_schedule", "callee": "list", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L151"}, {"caller_nid": "sync_test_queue_test_compute_next_attempt_at_uses_schedule", "callee": "enumerate", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L152"}, {"caller_nid": "sync_test_queue_test_compute_next_attempt_at_uses_schedule", "callee": "compute_next_attempt_at", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L153"}, {"caller_nid": "sync_test_queue_test_compute_next_attempt_at_uses_schedule", "callee": "strftime", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L154"}, {"caller_nid": "sync_test_queue_test_compute_next_attempt_at_uses_schedule", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L154"}, {"caller_nid": "sync_test_queue_test_compute_next_attempt_at_out_of_range", "callee": "compute_next_attempt_at", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L160"}, {"caller_nid": "sync_test_queue_test_compute_next_attempt_at_out_of_range", "callee": "compute_next_attempt_at", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L161"}, {"caller_nid": "sync_test_queue_test_persistence_across_reinit", "callee": "SyncQueue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L167"}, {"caller_nid": "sync_test_queue_test_persistence_across_reinit", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L168"}, {"caller_nid": "sync_test_queue_test_persistence_across_reinit", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L169"}, {"caller_nid": "sync_test_queue_test_persistence_across_reinit", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L170"}, {"caller_nid": "sync_test_queue_test_persistence_across_reinit", "callee": "SyncQueue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L172"}, {"caller_nid": "sync_test_queue_test_persistence_across_reinit", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L173"}, {"caller_nid": "sync_test_queue_test_persistence_across_reinit", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L174"}, {"caller_nid": "sync_test_queue_test_persistence_across_reinit", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L176"}, {"caller_nid": "sync_test_queue_test_persistence_across_reinit", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L177"}, {"caller_nid": "sync_test_queue_test_init_replays_running_to_queued", "callee": "SyncQueue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L183"}, {"caller_nid": "sync_test_queue_test_init_replays_running_to_queued", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L184"}, {"caller_nid": "sync_test_queue_test_init_replays_running_to_queued", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L185"}, {"caller_nid": "sync_test_queue_test_init_replays_running_to_queued", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L186"}, {"caller_nid": "sync_test_queue_test_init_replays_running_to_queued", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L187"}, {"caller_nid": "sync_test_queue_test_init_replays_running_to_queued", "callee": "SyncQueue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L189"}, {"caller_nid": "sync_test_queue_test_init_replays_running_to_queued", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L190"}, {"caller_nid": "sync_test_queue_test_init_replays_running_to_queued", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L191"}, {"caller_nid": "sync_test_queue_test_init_replays_running_to_queued", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L194"}, {"caller_nid": "sync_test_queue_test_list_in_state_returns_only_matching", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L198"}, {"caller_nid": "sync_test_queue_test_list_in_state_returns_only_matching", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L199"}, {"caller_nid": "sync_test_queue_test_list_in_state_returns_only_matching", "callee": "transition", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L200"}, {"caller_nid": "sync_test_queue_test_list_in_state_returns_only_matching", "callee": "list_in_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L201"}, {"caller_nid": "sync_test_queue_test_list_in_state_returns_only_matching", "callee": "list_in_state", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L202"}, {"caller_nid": "sync_test_queue_test_list_all_orders_by_enqueued_at", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L208"}, {"caller_nid": "sync_test_queue_test_list_all_orders_by_enqueued_at", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L209"}, {"caller_nid": "sync_test_queue_test_list_all_orders_by_enqueued_at", "callee": "list_all", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L210"}, {"caller_nid": "sync_test_queue_test_reset_to_queued_clears_attempts", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L216"}, {"caller_nid": "sync_test_queue_test_reset_to_queued_clears_attempts", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L217"}, {"caller_nid": "sync_test_queue_test_reset_to_queued_clears_attempts", "callee": "reset_to_queued", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L218"}, {"caller_nid": "sync_test_queue_test_reset_to_queued_unknown_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L225"}, {"caller_nid": "sync_test_queue_test_reset_to_queued_unknown_raises", "callee": "reset_to_queued", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L226"}, {"caller_nid": "sync_test_queue_test_record_failure_unknown_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L230"}, {"caller_nid": "sync_test_queue_test_record_failure_unknown_raises", "callee": "record_failure", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L231"}, {"caller_nid": "sync_test_queue_test_delete_removes_row", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L235"}, {"caller_nid": "sync_test_queue_test_delete_removes_row", "callee": "delete", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L236"}, {"caller_nid": "sync_test_queue_test_delete_removes_row", "callee": "get_by_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L237"}, {"caller_nid": "sync_test_queue_test_is_terminal_classifies_states", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L241"}, {"caller_nid": "sync_test_queue_test_is_terminal_classifies_states", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L242"}, {"caller_nid": "sync_test_queue_test_is_terminal_classifies_states", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L243"}, {"caller_nid": "sync_test_queue_test_is_terminal_classifies_states", "callee": "is_terminal", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L244"}, {"caller_nid": "sync_test_queue_test_init_required_before_use", "callee": "SyncQueue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L249"}, {"caller_nid": "sync_test_queue_test_init_required_before_use", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L250"}, {"caller_nid": "sync_test_queue_test_init_required_before_use", "callee": "insert", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L251"}, {"caller_nid": "sync_test_queue_test_close_is_idempotent", "callee": "SyncQueue", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L255"}, {"caller_nid": "sync_test_queue_test_close_is_idempotent", "callee": "init", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L256"}, {"caller_nid": "sync_test_queue_test_close_is_idempotent", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L257"}, {"caller_nid": "sync_test_queue_test_close_is_idempotent", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py", "source_location": "L259"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/fcd72e85bb4758dc2987f4517d81e393fe44d78e8ff643cbf78887ee3f927f4a.json b/graphify-out/cache/ast/fcd72e85bb4758dc2987f4517d81e393fe44d78e8ff643cbf78887ee3f927f4a.json new file mode 100644 index 0000000..4e2c8b7 --- /dev/null +++ b/graphify-out/cache/ast/fcd72e85bb4758dc2987f4517d81e393fe44d78e8ff643cbf78887ee3f927f4a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "label": "test_context.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L1"}, {"id": "logging_test_context_reset_context", "label": "_reset_context()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L31"}, {"id": "logging_test_context_test_set_run_context_pushes_supplied_vars", "label": "test_set_run_context_pushes_supplied_vars()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L41"}, {"id": "logging_test_context_test_unsupplied_vars_are_unchanged", "label": "test_unsupplied_vars_are_unchanged()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L56"}, {"id": "logging_test_context_test_context_exit_restores_prior_values", "label": "test_context_exit_restores_prior_values()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L70"}, {"id": "logging_test_context_test_context_exit_clears_when_no_prior_value", "label": "test_context_exit_clears_when_no_prior_value()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L81"}, {"id": "logging_test_context_test_set_run_context_with_no_args_is_noop", "label": "test_set_run_context_with_no_args_is_noop()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L88"}, {"id": "logging_test_context_test_concurrent_asyncio_tasks_have_independent_contexts", "label": "test_concurrent_asyncio_tasks_have_independent_contexts()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L101"}, {"id": "logging_test_context_test_get_run_context_returns_snapshot_dict", "label": "test_get_run_context_returns_snapshot_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L134"}, {"id": "logging_test_context_test_get_run_context_returns_all_keys_even_when_empty", "label": "test_get_run_context_returns_all_keys_even_when_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L149"}, {"id": "logging_test_context_test_clear_run_context_resets_every_var", "label": "test_clear_run_context_resets_every_var()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L163"}, {"id": "logging_test_context_rationale_1", "label": "Tests for ``exlab_wizard.logging.context``. Backend Spec \u00a716.2.3 commits the pe", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L1"}, {"id": "logging_test_context_rationale_32", "label": "Wipe context vars before each test to prevent cross-test leakage.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L32"}, {"id": "logging_test_context_rationale_102", "label": "Two ``asyncio.gather``-ed tasks must not see each other's context. This is", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L102"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "target": "exlab_wizard_logging_context", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "target": "logging_test_context_reset_context", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L31", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "target": "logging_test_context_test_set_run_context_pushes_supplied_vars", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L41", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "target": "logging_test_context_test_unsupplied_vars_are_unchanged", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "target": "logging_test_context_test_context_exit_restores_prior_values", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L70", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "target": "logging_test_context_test_context_exit_clears_when_no_prior_value", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L81", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "target": "logging_test_context_test_set_run_context_with_no_args_is_noop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L88", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "target": "logging_test_context_test_concurrent_asyncio_tasks_have_independent_contexts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L101", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "target": "logging_test_context_test_get_run_context_returns_snapshot_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L134", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "target": "logging_test_context_test_get_run_context_returns_all_keys_even_when_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L149", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "target": "logging_test_context_test_clear_run_context_resets_every_var", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L163", "weight": 1.0}, {"source": "logging_test_context_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_logging_test_context_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L1", "weight": 1.0}, {"source": "logging_test_context_rationale_32", "target": "logging_test_context_reset_context", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L32", "weight": 1.0}, {"source": "logging_test_context_rationale_102", "target": "logging_test_context_test_concurrent_asyncio_tasks_have_independent_contexts", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L102", "weight": 1.0}], "raw_calls": [{"caller_nid": "logging_test_context_reset_context", "callee": "clear_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L33"}, {"caller_nid": "logging_test_context_test_set_run_context_pushes_supplied_vars", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L42"}, {"caller_nid": "logging_test_context_test_set_run_context_pushes_supplied_vars", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L49"}, {"caller_nid": "logging_test_context_test_set_run_context_pushes_supplied_vars", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L50"}, {"caller_nid": "logging_test_context_test_set_run_context_pushes_supplied_vars", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L51"}, {"caller_nid": "logging_test_context_test_set_run_context_pushes_supplied_vars", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L52"}, {"caller_nid": "logging_test_context_test_set_run_context_pushes_supplied_vars", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L53"}, {"caller_nid": "logging_test_context_test_unsupplied_vars_are_unchanged", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L59"}, {"caller_nid": "logging_test_context_test_unsupplied_vars_are_unchanged", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L60"}, {"caller_nid": "logging_test_context_test_unsupplied_vars_are_unchanged", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L62"}, {"caller_nid": "logging_test_context_test_unsupplied_vars_are_unchanged", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L63"}, {"caller_nid": "logging_test_context_test_unsupplied_vars_are_unchanged", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L64"}, {"caller_nid": "logging_test_context_test_unsupplied_vars_are_unchanged", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L66"}, {"caller_nid": "logging_test_context_test_unsupplied_vars_are_unchanged", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L67"}, {"caller_nid": "logging_test_context_test_context_exit_restores_prior_values", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L71"}, {"caller_nid": "logging_test_context_test_context_exit_restores_prior_values", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L72"}, {"caller_nid": "logging_test_context_test_context_exit_restores_prior_values", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L73"}, {"caller_nid": "logging_test_context_test_context_exit_restores_prior_values", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L74"}, {"caller_nid": "logging_test_context_test_context_exit_restores_prior_values", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L76"}, {"caller_nid": "logging_test_context_test_context_exit_restores_prior_values", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L78"}, {"caller_nid": "logging_test_context_test_context_exit_clears_when_no_prior_value", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L82"}, {"caller_nid": "logging_test_context_test_context_exit_clears_when_no_prior_value", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L83"}, {"caller_nid": "logging_test_context_test_context_exit_clears_when_no_prior_value", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L84"}, {"caller_nid": "logging_test_context_test_context_exit_clears_when_no_prior_value", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L85"}, {"caller_nid": "logging_test_context_test_set_run_context_with_no_args_is_noop", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L90"}, {"caller_nid": "logging_test_context_test_set_run_context_with_no_args_is_noop", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L91"}, {"caller_nid": "logging_test_context_test_set_run_context_with_no_args_is_noop", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L92"}, {"caller_nid": "logging_test_context_test_set_run_context_with_no_args_is_noop", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L93"}, {"caller_nid": "logging_test_context_test_concurrent_asyncio_tasks_have_independent_contexts", "callee": "gather", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L121"}, {"caller_nid": "logging_test_context_test_concurrent_asyncio_tasks_have_independent_contexts", "callee": "task_a", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L121"}, {"caller_nid": "logging_test_context_test_concurrent_asyncio_tasks_have_independent_contexts", "callee": "task_b", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L121"}, {"caller_nid": "logging_test_context_test_get_run_context_returns_snapshot_dict", "callee": "set_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L135"}, {"caller_nid": "logging_test_context_test_get_run_context_returns_snapshot_dict", "callee": "get_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L136"}, {"caller_nid": "logging_test_context_test_get_run_context_returns_snapshot_dict", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L139"}, {"caller_nid": "logging_test_context_test_get_run_context_returns_all_keys_even_when_empty", "callee": "get_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L150"}, {"caller_nid": "logging_test_context_test_get_run_context_returns_all_keys_even_when_empty", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L153"}, {"caller_nid": "logging_test_context_test_get_run_context_returns_all_keys_even_when_empty", "callee": "keys", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L153"}, {"caller_nid": "logging_test_context_test_get_run_context_returns_all_keys_even_when_empty", "callee": "all", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L160"}, {"caller_nid": "logging_test_context_test_get_run_context_returns_all_keys_even_when_empty", "callee": "values", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L160"}, {"caller_nid": "logging_test_context_test_clear_run_context_resets_every_var", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L166"}, {"caller_nid": "logging_test_context_test_clear_run_context_resets_every_var", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L167"}, {"caller_nid": "logging_test_context_test_clear_run_context_resets_every_var", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L168"}, {"caller_nid": "logging_test_context_test_clear_run_context_resets_every_var", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L169"}, {"caller_nid": "logging_test_context_test_clear_run_context_resets_every_var", "callee": "set", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L170"}, {"caller_nid": "logging_test_context_test_clear_run_context_resets_every_var", "callee": "clear_run_context", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L172"}, {"caller_nid": "logging_test_context_test_clear_run_context_resets_every_var", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L174"}, {"caller_nid": "logging_test_context_test_clear_run_context_resets_every_var", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L175"}, {"caller_nid": "logging_test_context_test_clear_run_context_resets_every_var", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L176"}, {"caller_nid": "logging_test_context_test_clear_run_context_resets_every_var", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L177"}, {"caller_nid": "logging_test_context_test_clear_run_context_resets_every_var", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py", "source_location": "L178"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/fcff1657f2b0ba63ad207264046f03dfce7d68aacf3e111413ab33e9d99c2953.json b/graphify-out/cache/ast/fcff1657f2b0ba63ad207264046f03dfce7d68aacf3e111413ab33e9d99c2953.json new file mode 100644 index 0000000..3a4babf --- /dev/null +++ b/graphify-out/cache/ast/fcff1657f2b0ba63ad207264046f03dfce7d68aacf3e111413ab33e9d99c2953.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_sync_transports_test_run_py", "label": "test_run.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L1"}, {"id": "transports_test_run_test_run_subprocess_returns_rc_and_streams", "label": "test_run_subprocess_returns_rc_and_streams()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L19"}, {"id": "transports_test_run_test_run_subprocess_forwards_env", "label": "test_run_subprocess_forwards_env()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L28"}, {"id": "transports_test_run_test_run_subprocess_preserves_existing_environ", "label": "test_run_subprocess_preserves_existing_environ()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L38"}, {"id": "transports_test_run_test_run_subprocess_pipes_stdin_payload", "label": "test_run_subprocess_pipes_stdin_payload()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L56"}, {"id": "transports_test_run_test_run_subprocess_masks_named_env_in_debug_log", "label": "test_run_subprocess_masks_named_env_in_debug_log()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L66"}, {"id": "transports_test_run_test_run_subprocess_omits_env_log_when_env_is_none", "label": "test_run_subprocess_omits_env_log_when_env_is_none()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L86"}, {"id": "transports_test_run_rationale_1", "label": "Unit tests for ``exlab_wizard.sync.transports._run.run_subprocess``. The rclone", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L1"}, {"id": "transports_test_run_rationale_29", "label": "An env-dict entry must surface in the child process' environment.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L29"}, {"id": "transports_test_run_rationale_39", "label": "Caller-supplied env is *merged* over ``os.environ`` -- it does not replace it.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L39"}, {"id": "transports_test_run_rationale_57", "label": "A bytes payload is fed to stdin and closed.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L57"}, {"id": "transports_test_run_rationale_67", "label": "``mask_for_log`` redacts the listed env keys from the debug log line.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L67"}, {"id": "transports_test_run_rationale_87", "label": "No env block in the log when the caller passes ``env=None``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L87"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_sync_transports_test_run_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_transports_test_run_py", "target": "os", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_transports_test_run_py", "target": "sys", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_transports_test_run_py", "target": "exlab_wizard_sync_transports_run", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L16", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_transports_test_run_py", "target": "transports_test_run_test_run_subprocess_returns_rc_and_streams", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_transports_test_run_py", "target": "transports_test_run_test_run_subprocess_forwards_env", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_transports_test_run_py", "target": "transports_test_run_test_run_subprocess_preserves_existing_environ", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_transports_test_run_py", "target": "transports_test_run_test_run_subprocess_pipes_stdin_payload", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L56", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_transports_test_run_py", "target": "transports_test_run_test_run_subprocess_masks_named_env_in_debug_log", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L66", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_sync_transports_test_run_py", "target": "transports_test_run_test_run_subprocess_omits_env_log_when_env_is_none", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L86", "weight": 1.0}, {"source": "transports_test_run_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_sync_transports_test_run_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L1", "weight": 1.0}, {"source": "transports_test_run_rationale_29", "target": "transports_test_run_test_run_subprocess_forwards_env", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L29", "weight": 1.0}, {"source": "transports_test_run_rationale_39", "target": "transports_test_run_test_run_subprocess_preserves_existing_environ", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L39", "weight": 1.0}, {"source": "transports_test_run_rationale_57", "target": "transports_test_run_test_run_subprocess_pipes_stdin_payload", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L57", "weight": 1.0}, {"source": "transports_test_run_rationale_67", "target": "transports_test_run_test_run_subprocess_masks_named_env_in_debug_log", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L67", "weight": 1.0}, {"source": "transports_test_run_rationale_87", "target": "transports_test_run_test_run_subprocess_omits_env_log_when_env_is_none", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L87", "weight": 1.0}], "raw_calls": [{"caller_nid": "transports_test_run_test_run_subprocess_returns_rc_and_streams", "callee": "run_subprocess", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L20"}, {"caller_nid": "transports_test_run_test_run_subprocess_forwards_env", "callee": "run_subprocess", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L30"}, {"caller_nid": "transports_test_run_test_run_subprocess_preserves_existing_environ", "callee": "run_subprocess", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L44"}, {"caller_nid": "transports_test_run_test_run_subprocess_pipes_stdin_payload", "callee": "run_subprocess", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L58"}, {"caller_nid": "transports_test_run_test_run_subprocess_masks_named_env_in_debug_log", "callee": "set_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L68"}, {"caller_nid": "transports_test_run_test_run_subprocess_masks_named_env_in_debug_log", "callee": "run_subprocess", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L69"}, {"caller_nid": "transports_test_run_test_run_subprocess_masks_named_env_in_debug_log", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L75"}, {"caller_nid": "transports_test_run_test_run_subprocess_masks_named_env_in_debug_log", "callee": "getMessage", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L75"}, {"caller_nid": "transports_test_run_test_run_subprocess_omits_env_log_when_env_is_none", "callee": "set_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L88"}, {"caller_nid": "transports_test_run_test_run_subprocess_omits_env_log_when_env_is_none", "callee": "run_subprocess", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L89"}, {"caller_nid": "transports_test_run_test_run_subprocess_omits_env_log_when_env_is_none", "callee": "join", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L90"}, {"caller_nid": "transports_test_run_test_run_subprocess_omits_env_log_when_env_is_none", "callee": "getMessage", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py", "source_location": "L90"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/fd4af732dddaf8cf0b59809cdca3fce8ad2b3739bbd9584e2d34a837031d3a17.json b/graphify-out/cache/ast/fd4af732dddaf8cf0b59809cdca3fce8ad2b3739bbd9584e2d34a837031d3a17.json new file mode 100644 index 0000000..6fd3659 --- /dev/null +++ b/graphify-out/cache/ast/fd4af732dddaf8cf0b59809cdca3fce8ad2b3739bbd9584e2d34a837031d3a17.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/__init__.py", "source_location": "L1"}, {"id": "failures_init_rationale_1", "label": "Failure-mode plugin fixtures (timeout, error, input-required, policy, crash).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/__init__.py", "source_location": "L1"}], "edges": [{"source": "failures_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_fixtures_plugins_failures_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/cache/ast/fd5cab5574a3c5504ccb1c34cb9dc0fc02bbd8ed98ac7bc82191e753d86de7a5.json b/graphify-out/cache/ast/fd5cab5574a3c5504ccb1c34cb9dc0fc02bbd8ed98ac7bc82191e753d86de7a5.json new file mode 100644 index 0000000..6124904 --- /dev/null +++ b/graphify-out/cache/ast/fd5cab5574a3c5504ccb1c34cb9dc0fc02bbd8ed98ac7bc82191e753d86de7a5.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_e2e_page_objects_welcome_page_py", "label": "welcome_page.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L1"}, {"id": "page_objects_welcome_page_welcomepage", "label": "WelcomePage", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L11"}, {"id": "page_objects_welcome_page_welcomepage_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L14"}, {"id": "page_objects_welcome_page_card", "label": "card()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L18"}, {"id": "page_objects_welcome_page_headline", "label": "headline()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L23"}, {"id": "page_objects_welcome_page_autostart_toggle", "label": "autostart_toggle()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L28"}, {"id": "page_objects_welcome_page_get_started", "label": "get_started()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L33"}, {"id": "page_objects_welcome_page_skip_for_now", "label": "skip_for_now()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L38"}, {"id": "page_objects_welcome_page_status_marker", "label": "status_marker()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L43"}, {"id": "page_objects_welcome_page_rationale_1", "label": "Page object for the first-launch welcome card. Frontend Spec \u00a76.1.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L1"}, {"id": "page_objects_welcome_page_rationale_12", "label": "Page object for the welcome card shown on first launch. Frontend Spec \u00a76.1.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L12"}, {"id": "page_objects_welcome_page_rationale_19", "label": "The welcome card container.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L19"}, {"id": "page_objects_welcome_page_rationale_24", "label": "The welcome card headline / title element.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L24"}, {"id": "page_objects_welcome_page_rationale_29", "label": "The autostart-on-login toggle on the welcome card.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L29"}, {"id": "page_objects_welcome_page_rationale_34", "label": "The primary \"Get started\" CTA on the welcome card.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L34"}, {"id": "page_objects_welcome_page_rationale_39", "label": "The secondary \"Skip for now\" CTA on the welcome card.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L39"}, {"id": "page_objects_welcome_page_rationale_44", "label": "Hidden marker emitted by the test app to surface state.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L44"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_welcome_page_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_welcome_page_py", "target": "playwright_sync_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L8", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_welcome_page_py", "target": "page_objects_welcome_page_welcomepage", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L11", "weight": 1.0}, {"source": "page_objects_welcome_page_welcomepage", "target": "page_objects_welcome_page_welcomepage_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L14", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_welcome_page_py", "target": "page_objects_welcome_page_card", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_welcome_page_py", "target": "page_objects_welcome_page_headline", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_welcome_page_py", "target": "page_objects_welcome_page_autostart_toggle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_welcome_page_py", "target": "page_objects_welcome_page_get_started", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L33", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_welcome_page_py", "target": "page_objects_welcome_page_skip_for_now", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L38", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_e2e_page_objects_welcome_page_py", "target": "page_objects_welcome_page_status_marker", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L43", "weight": 1.0}, {"source": "page_objects_welcome_page_rationale_1", "target": "users_alex_projects_exlabwizard_tests_e2e_page_objects_welcome_page_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L1", "weight": 1.0}, {"source": "page_objects_welcome_page_rationale_12", "target": "page_objects_welcome_page_welcomepage", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L12", "weight": 1.0}, {"source": "page_objects_welcome_page_rationale_19", "target": "page_objects_welcome_page_welcomepage_card", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L19", "weight": 1.0}, {"source": "page_objects_welcome_page_rationale_24", "target": "page_objects_welcome_page_welcomepage_headline", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L24", "weight": 1.0}, {"source": "page_objects_welcome_page_rationale_29", "target": "page_objects_welcome_page_welcomepage_autostart_toggle", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L29", "weight": 1.0}, {"source": "page_objects_welcome_page_rationale_34", "target": "page_objects_welcome_page_welcomepage_get_started", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L34", "weight": 1.0}, {"source": "page_objects_welcome_page_rationale_39", "target": "page_objects_welcome_page_welcomepage_skip_for_now", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L39", "weight": 1.0}, {"source": "page_objects_welcome_page_rationale_44", "target": "page_objects_welcome_page_welcomepage_status_marker", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L44", "weight": 1.0}], "raw_calls": [{"caller_nid": "page_objects_welcome_page_card", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L20"}, {"caller_nid": "page_objects_welcome_page_headline", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L25"}, {"caller_nid": "page_objects_welcome_page_autostart_toggle", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L30"}, {"caller_nid": "page_objects_welcome_page_get_started", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L35"}, {"caller_nid": "page_objects_welcome_page_skip_for_now", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L40"}, {"caller_nid": "page_objects_welcome_page_status_marker", "callee": "get_by_test_id", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py", "source_location": "L45"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/fd9c3892cbfad2c0f6eb7f7262a2c7c0eddb39c4fefb23c395f7279f931e1406.json b/graphify-out/cache/ast/fd9c3892cbfad2c0f6eb7f7262a2c7c0eddb39c4fefb23c395f7279f931e1406.json new file mode 100644 index 0000000..ab4cef4 --- /dev/null +++ b/graphify-out/cache/ast/fd9c3892cbfad2c0f6eb7f7262a2c7c0eddb39c4fefb23c395f7279f931e1406.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "label": "test_staging_router.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L1"}, {"id": "api_test_staging_router_handle", "label": "_Handle", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L35"}, {"id": "api_test_staging_router_stubnassync", "label": "_StubNasSync", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L41"}, {"id": "api_test_staging_router_stubnassync_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L44"}, {"id": "api_test_staging_router_stubnassync_enqueue", "label": ".enqueue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L47"}, {"id": "api_test_staging_router_make_config", "label": "_make_config()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L52"}, {"id": "api_test_staging_router_seed_run", "label": "_seed_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L77"}, {"id": "api_test_staging_router_write_creation_json", "label": "_write_creation_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L90"}, {"id": "api_test_staging_router_seed_real_run", "label": "_seed_real_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L127"}, {"id": "api_test_staging_router_mark_synced", "label": "_mark_synced()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L140"}, {"id": "api_test_staging_router_test_get_staging_returns_empty_when_staging_root_unset", "label": "test_get_staging_returns_empty_when_staging_root_unset()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L155"}, {"id": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", "label": "test_force_sync_returns_no_503_when_run_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L165"}, {"id": "api_test_staging_router_test_clear_returns_no_503_when_run_missing", "label": "test_clear_returns_no_503_when_run_missing()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L174"}, {"id": "api_test_staging_router_test_get_staging_returns_run_rows", "label": "test_get_staging_returns_run_rows()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L188"}, {"id": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", "label": "test_get_staging_derives_current_state_from_sync_state_rollup()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L208"}, {"id": "api_test_staging_router_test_get_staging_returns_empty_runs_for_missing_root", "label": "test_get_staging_returns_empty_runs_for_missing_root()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L219"}, {"id": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", "label": "test_force_sync_invokes_nas_sync_enqueue()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L234"}, {"id": "api_test_staging_router_test_force_sync_returns_503_when_nas_sync_unwired", "label": "test_force_sync_returns_503_when_nas_sync_unwired()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L249"}, {"id": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "label": "test_clear_endpoint_deletes_synced_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L263"}, {"id": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", "label": "test_clear_endpoint_rejects_non_synced_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L284"}, {"id": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", "label": "test_clear_endpoint_idempotent_for_missing_run()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L296"}, {"id": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "label": "test_clear_verified_endpoint_clears_only_synced_runs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L314"}, {"id": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", "label": "test_clear_verified_endpoint_returns_empty_when_no_verified_runs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L340"}, {"id": "api_test_staging_router_test_clear_verified_endpoint_returns_503_when_config_unwired", "label": "test_clear_verified_endpoint_returns_503_when_config_unwired()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L351"}, {"id": "api_test_staging_router_test_keep_local_toggles_sync_state", "label": "test_keep_local_toggles_sync_state()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L366"}, {"id": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "label": "test_keep_local_toggle_off_round_trips()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L389"}, {"id": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", "label": "test_keep_local_returns_503_when_writer_unwired()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L407"}, {"id": "api_test_staging_router_test_keep_local_returns_503_when_config_unwired", "label": "test_keep_local_returns_503_when_config_unwired()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L421"}, {"id": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", "label": "test_keep_local_rejects_extra_body_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L433"}, {"id": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", "label": "test_keep_local_returns_404_for_path_outside_allowed_roots()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L447"}, {"id": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", "label": "test_keep_local_returns_404_when_run_has_no_creation_json()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L468"}, {"id": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", "label": "test_keep_local_creates_sync_state_when_cache_dir_absent()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L486"}, {"id": "api_test_staging_router_rationale_1", "label": "Unit tests for the ``/staging`` router. Backend Spec \u00a713.7, \u00a713.8. The operator", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L1"}, {"id": "api_test_staging_router_rationale_42", "label": "In-memory sync-queue stub recording ``enqueue`` calls (force-sync).", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L42"}, {"id": "api_test_staging_router_rationale_91", "label": "Write a minimal ``creation.json`` so a dir reads as a real run. The ``POST", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L91"}, {"id": "api_test_staging_router_rationale_134", "label": "Seed a run dir that carries a ``creation.json`` -- a real run.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L134"}, {"id": "api_test_staging_router_rationale_141", "label": "Write a fully-verified ``sync_state.json`` so the run rolls up to ``synced``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L141"}, {"id": "api_test_staging_router_rationale_297", "label": "A run with no queue job and no directory clears to zeros.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L297"}, {"id": "api_test_staging_router_rationale_315", "label": "The bulk endpoint clears every fully-``synced`` run and reports paths.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L315"}, {"id": "api_test_staging_router_rationale_341", "label": "No verified rows -> empty cleared_paths, no error.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L341"}, {"id": "api_test_staging_router_rationale_352", "label": "A deps without a config raises the standard 503.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L352"}, {"id": "api_test_staging_router_rationale_367", "label": "The endpoint flips ``keep_local`` in the run's ``sync_state.json``.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L367"}, {"id": "api_test_staging_router_rationale_390", "label": "Setting ``keep_local`` False after True clears the flag on disk.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L390"}, {"id": "api_test_staging_router_rationale_408", "label": "A deps without a ``sync_state_writer`` raises the standard 503.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L408"}, {"id": "api_test_staging_router_rationale_422", "label": "A deps without a config raises the standard 503.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L422"}, {"id": "api_test_staging_router_rationale_434", "label": "The request model forbids unknown fields.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L434"}, {"id": "api_test_staging_router_rationale_448", "label": "A path outside the configured roots is rejected before any write. Operator-", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L448"}, {"id": "api_test_staging_router_rationale_469", "label": "A dir under an allowed root but without a creation.json is not a run.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L469"}, {"id": "api_test_staging_router_rationale_487", "label": "The writer mkdir's the .exlab-wizard/ dir -- a real run with only a creation", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L487"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "dataclasses", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L12", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L13", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "fastapi_testclient", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L15", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "exlab_wizard_api", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L17", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "exlab_wizard_cache_sync_state_writer", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_handle", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L35", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_stubnassync", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L41", "weight": 1.0}, {"source": "api_test_staging_router_stubnassync", "target": "api_test_staging_router_stubnassync_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L44", "weight": 1.0}, {"source": "api_test_staging_router_stubnassync", "target": "api_test_staging_router_stubnassync_enqueue", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L47", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_make_config", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L52", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_seed_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L77", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_write_creation_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L90", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_seed_real_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L127", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_mark_synced", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L140", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_get_staging_returns_empty_when_staging_root_unset", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L155", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L165", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_clear_returns_no_503_when_run_missing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L174", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_get_staging_returns_run_rows", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L188", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L208", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_get_staging_returns_empty_runs_for_missing_root", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L219", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L234", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_force_sync_returns_503_when_nas_sync_unwired", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L249", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L263", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L284", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L296", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L314", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L340", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_clear_verified_endpoint_returns_503_when_config_unwired", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L351", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_keep_local_toggles_sync_state", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L366", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L389", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L407", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_keep_local_returns_503_when_config_unwired", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L421", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L433", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L447", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L468", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "target": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L486", "weight": 1.0}, {"source": "api_test_staging_router_stubnassync_enqueue", "target": "api_test_staging_router_handle", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L49", "weight": 1.0}, {"source": "api_test_staging_router_seed_real_run", "target": "api_test_staging_router_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L135", "weight": 1.0}, {"source": "api_test_staging_router_seed_real_run", "target": "api_test_staging_router_write_creation_json", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L136", "weight": 1.0}, {"source": "api_test_staging_router_test_get_staging_returns_empty_when_staging_root_unset", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L156", "weight": 1.0}, {"source": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L166", "weight": 1.0}, {"source": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", "target": "api_test_staging_router_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L167", "weight": 1.0}, {"source": "api_test_staging_router_test_clear_returns_no_503_when_run_missing", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L175", "weight": 1.0}, {"source": "api_test_staging_router_test_get_staging_returns_run_rows", "target": "api_test_staging_router_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L189", "weight": 1.0}, {"source": "api_test_staging_router_test_get_staging_returns_run_rows", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L190", "weight": 1.0}, {"source": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", "target": "api_test_staging_router_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L209", "weight": 1.0}, {"source": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", "target": "api_test_staging_router_mark_synced", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L210", "weight": 1.0}, {"source": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L211", "weight": 1.0}, {"source": "api_test_staging_router_test_get_staging_returns_empty_runs_for_missing_root", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L220", "weight": 1.0}, {"source": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", "target": "api_test_staging_router_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L235", "weight": 1.0}, {"source": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", "target": "api_test_staging_router_stubnassync", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L236", "weight": 1.0}, {"source": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L237", "weight": 1.0}, {"source": "api_test_staging_router_test_force_sync_returns_503_when_nas_sync_unwired", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L250", "weight": 1.0}, {"source": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "target": "api_test_staging_router_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L264", "weight": 1.0}, {"source": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "target": "api_test_staging_router_mark_synced", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L265", "weight": 1.0}, {"source": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L266", "weight": 1.0}, {"source": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", "target": "api_test_staging_router_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L285", "weight": 1.0}, {"source": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L286", "weight": 1.0}, {"source": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L298", "weight": 1.0}, {"source": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "target": "api_test_staging_router_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L316", "weight": 1.0}, {"source": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "target": "api_test_staging_router_mark_synced", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L319", "weight": 1.0}, {"source": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L323", "weight": 1.0}, {"source": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L342", "weight": 1.0}, {"source": "api_test_staging_router_test_keep_local_toggles_sync_state", "target": "api_test_staging_router_seed_real_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L368", "weight": 1.0}, {"source": "api_test_staging_router_test_keep_local_toggles_sync_state", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L370", "weight": 1.0}, {"source": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "target": "api_test_staging_router_seed_real_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L391", "weight": 1.0}, {"source": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L394", "weight": 1.0}, {"source": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", "target": "api_test_staging_router_seed_real_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L409", "weight": 1.0}, {"source": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L410", "weight": 1.0}, {"source": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", "target": "api_test_staging_router_seed_real_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L435", "weight": 1.0}, {"source": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L436", "weight": 1.0}, {"source": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L455", "weight": 1.0}, {"source": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", "target": "api_test_staging_router_seed_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L471", "weight": 1.0}, {"source": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L472", "weight": 1.0}, {"source": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", "target": "api_test_staging_router_seed_real_run", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L490", "weight": 1.0}, {"source": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", "target": "api_test_staging_router_make_config", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L491", "weight": 1.0}, {"source": "api_test_staging_router_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_api_test_staging_router_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L1", "weight": 1.0}, {"source": "api_test_staging_router_rationale_42", "target": "api_test_staging_router_stubnassync", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L42", "weight": 1.0}, {"source": "api_test_staging_router_rationale_91", "target": "api_test_staging_router_write_creation_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L91", "weight": 1.0}, {"source": "api_test_staging_router_rationale_134", "target": "api_test_staging_router_seed_real_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L134", "weight": 1.0}, {"source": "api_test_staging_router_rationale_141", "target": "api_test_staging_router_mark_synced", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L141", "weight": 1.0}, {"source": "api_test_staging_router_rationale_297", "target": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L297", "weight": 1.0}, {"source": "api_test_staging_router_rationale_315", "target": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L315", "weight": 1.0}, {"source": "api_test_staging_router_rationale_341", "target": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L341", "weight": 1.0}, {"source": "api_test_staging_router_rationale_352", "target": "api_test_staging_router_test_clear_verified_endpoint_returns_503_when_config_unwired", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L352", "weight": 1.0}, {"source": "api_test_staging_router_rationale_367", "target": "api_test_staging_router_test_keep_local_toggles_sync_state", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L367", "weight": 1.0}, {"source": "api_test_staging_router_rationale_390", "target": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L390", "weight": 1.0}, {"source": "api_test_staging_router_rationale_408", "target": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L408", "weight": 1.0}, {"source": "api_test_staging_router_rationale_422", "target": "api_test_staging_router_test_keep_local_returns_503_when_config_unwired", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L422", "weight": 1.0}, {"source": "api_test_staging_router_rationale_434", "target": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L434", "weight": 1.0}, {"source": "api_test_staging_router_rationale_448", "target": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L448", "weight": 1.0}, {"source": "api_test_staging_router_rationale_469", "target": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L469", "weight": 1.0}, {"source": "api_test_staging_router_rationale_487", "target": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L487", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_test_staging_router_stubnassync_enqueue", "callee": "append", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L48"}, {"caller_nid": "api_test_staging_router_stubnassync_enqueue", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L49"}, {"caller_nid": "api_test_staging_router_make_config", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L53"}, {"caller_nid": "api_test_staging_router_make_config", "callee": "PathsConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L54"}, {"caller_nid": "api_test_staging_router_make_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L54"}, {"caller_nid": "api_test_staging_router_make_config", "callee": "EquipmentConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L56"}, {"caller_nid": "api_test_staging_router_make_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L59"}, {"caller_nid": "api_test_staging_router_make_config", "callee": "RcloneSftpTransport", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L61"}, {"caller_nid": "api_test_staging_router_make_config", "callee": "OrchestratorConfig", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L69"}, {"caller_nid": "api_test_staging_router_make_config", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L71"}, {"caller_nid": "api_test_staging_router_make_config", "callee": "OrchestratorStagingCleanup", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L72"}, {"caller_nid": "api_test_staging_router_seed_run", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L85"}, {"caller_nid": "api_test_staging_router_seed_run", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L86"}, {"caller_nid": "api_test_staging_router_write_creation_json", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L108"}, {"caller_nid": "api_test_staging_router_write_creation_json", "callee": "CreationJson", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L109"}, {"caller_nid": "api_test_staging_router_write_creation_json", "callee": "LimsProjectBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L115"}, {"caller_nid": "api_test_staging_router_write_creation_json", "callee": "TemplateBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L118"}, {"caller_nid": "api_test_staging_router_write_creation_json", "callee": "PathsBlock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L122"}, {"caller_nid": "api_test_staging_router_write_creation_json", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L122"}, {"caller_nid": "api_test_staging_router_write_creation_json", "callee": "write_bytes", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L124"}, {"caller_nid": "api_test_staging_router_write_creation_json", "callee": "encode", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L124"}, {"caller_nid": "api_test_staging_router_mark_synced", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L142"}, {"caller_nid": "api_test_staging_router_mark_synced", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L143"}, {"caller_nid": "api_test_staging_router_mark_synced", "callee": "upsert_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L144"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_empty_when_staging_root_unset", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L157"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_empty_when_staging_root_unset", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L158"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_empty_when_staging_root_unset", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L159"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_empty_when_staging_root_unset", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L160"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_empty_when_staging_root_unset", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L162"}, {"caller_nid": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L167"}, {"caller_nid": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L168"}, {"caller_nid": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L169"}, {"caller_nid": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L170"}, {"caller_nid": "api_test_staging_router_test_clear_returns_no_503_when_run_missing", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L176"}, {"caller_nid": "api_test_staging_router_test_clear_returns_no_503_when_run_missing", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L177"}, {"caller_nid": "api_test_staging_router_test_clear_returns_no_503_when_run_missing", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L178"}, {"caller_nid": "api_test_staging_router_test_clear_returns_no_503_when_run_missing", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L179"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_run_rows", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L191"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_run_rows", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L191"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_run_rows", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L192"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_run_rows", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L193"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_run_rows", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L194"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_run_rows", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L196"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_run_rows", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L198"}, {"caller_nid": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L212"}, {"caller_nid": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L212"}, {"caller_nid": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L213"}, {"caller_nid": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L214"}, {"caller_nid": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L215"}, {"caller_nid": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L216"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_empty_runs_for_missing_root", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L221"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_empty_runs_for_missing_root", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L222"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_empty_runs_for_missing_root", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L223"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_empty_runs_for_missing_root", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L224"}, {"caller_nid": "api_test_staging_router_test_get_staging_returns_empty_runs_for_missing_root", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L226"}, {"caller_nid": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L238"}, {"caller_nid": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L239"}, {"caller_nid": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L240"}, {"caller_nid": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L241"}, {"caller_nid": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L243"}, {"caller_nid": "api_test_staging_router_test_force_sync_returns_503_when_nas_sync_unwired", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L251"}, {"caller_nid": "api_test_staging_router_test_force_sync_returns_503_when_nas_sync_unwired", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L252"}, {"caller_nid": "api_test_staging_router_test_force_sync_returns_503_when_nas_sync_unwired", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L253"}, {"caller_nid": "api_test_staging_router_test_force_sync_returns_503_when_nas_sync_unwired", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L254"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L267"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L267"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L268"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L269"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L270"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L272"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L277"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L278"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L280"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "callee": "read", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L280"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L280"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L287"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L287"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L288"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L289"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L290"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L292"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L293"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L299"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L300"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L301"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L302"}, {"caller_nid": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L304"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L324"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L324"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L325"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L326"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L327"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L330"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "callee": "set", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L331"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L331"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L331"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L333"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L334"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L335"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L337"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L343"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L344"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L345"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L346"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L348"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_returns_503_when_config_unwired", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L354"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_returns_503_when_config_unwired", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L355"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_returns_503_when_config_unwired", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L356"}, {"caller_nid": "api_test_staging_router_test_clear_verified_endpoint_returns_503_when_config_unwired", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L357"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggles_sync_state", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L369"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggles_sync_state", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L371"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggles_sync_state", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L372"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggles_sync_state", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L373"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggles_sync_state", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L374"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggles_sync_state", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L379"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggles_sync_state", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L381"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggles_sync_state", "callee": "read_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L385"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L392"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "callee": "run", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L393"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "callee": "set_keep_local", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L393"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L395"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L396"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L397"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L398"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "callee": "json", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L403"}, {"caller_nid": "api_test_staging_router_test_keep_local_toggle_off_round_trips", "callee": "read_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L404"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L411"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L412"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L413"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L414"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_503_when_config_unwired", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L423"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_503_when_config_unwired", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L424"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_503_when_config_unwired", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L425"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_503_when_config_unwired", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L426"}, {"caller_nid": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L437"}, {"caller_nid": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L437"}, {"caller_nid": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L438"}, {"caller_nid": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L439"}, {"caller_nid": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L440"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L456"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L456"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L457"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L458"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L459"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L465"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", "callee": "Path", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L465"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L473"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L474"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L475"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L476"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L477"}, {"caller_nid": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", "callee": "exists", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L483"}, {"caller_nid": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", "callee": "SyncStateWriter", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L492"}, {"caller_nid": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L493"}, {"caller_nid": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L494"}, {"caller_nid": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", "callee": "TestClient", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L495"}, {"caller_nid": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", "callee": "post", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L496"}, {"caller_nid": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", "callee": "read_sync", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py", "source_location": "L501"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/fe4903a16c864a025893cd941014f94e36514a4680b6b5704944f2c247359ed4.json b/graphify-out/cache/ast/fe4903a16c864a025893cd941014f94e36514a4680b6b5704944f2c247359ed4.json new file mode 100644 index 0000000..e735e6d --- /dev/null +++ b/graphify-out/cache/ast/fe4903a16c864a025893cd941014f94e36514a4680b6b5704944f2c247359ed4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_cleanup_py", "label": "cleanup.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L1"}, {"id": "sync_cleanup_has_recent_revocation", "label": "has_recent_revocation()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L39"}, {"id": "sync_cleanup_cleanup_interlocks_satisfied", "label": "cleanup_interlocks_satisfied()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L65"}, {"id": "sync_cleanup_rationale_1", "label": "Cleanup safety interlocks. Backend Spec \u00a77.1.6. The cleanup reaper deletes loca", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L1"}, {"id": "sync_cleanup_rationale_45", "label": "Return True if any tombstone was recorded within ``min_age_hours``. A tombs", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L45"}, {"id": "sync_cleanup_rationale_74", "label": "Evaluate every \u00a77.1.6 interlock; return True iff all pass. Logs a debug ent", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L74"}], "edges": [{"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_cleanup_py", "target": "datetime", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L23", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_cleanup_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_cleanup_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L26", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_cleanup_py", "target": "exlab_wizard_logging", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_cleanup_py", "target": "exlab_wizard_sync_queue", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_cleanup_py", "target": "exlab_wizard_utils_time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L29", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_cleanup_py", "target": "sync_cleanup_has_recent_revocation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L39", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_cleanup_py", "target": "sync_cleanup_cleanup_interlocks_satisfied", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L65", "weight": 1.0}, {"source": "sync_cleanup_cleanup_interlocks_satisfied", "target": "sync_cleanup_has_recent_revocation", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L114", "weight": 1.0}, {"source": "sync_cleanup_rationale_1", "target": "users_alex_projects_exlabwizard_src_exlab_wizard_sync_cleanup_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L1", "weight": 1.0}, {"source": "sync_cleanup_rationale_45", "target": "sync_cleanup_has_recent_revocation", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L45", "weight": 1.0}, {"source": "sync_cleanup_rationale_74", "target": "sync_cleanup_cleanup_interlocks_satisfied", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L74", "weight": 1.0}], "raw_calls": [{"caller_nid": "sync_cleanup_has_recent_revocation", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L52"}, {"caller_nid": "sync_cleanup_has_recent_revocation", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L54"}, {"caller_nid": "sync_cleanup_has_recent_revocation", "callee": "parse_utc_iso_or_none", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L56"}, {"caller_nid": "sync_cleanup_has_recent_revocation", "callee": "get", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L56"}, {"caller_nid": "sync_cleanup_cleanup_interlocks_satisfied", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L85"}, {"caller_nid": "sync_cleanup_cleanup_interlocks_satisfied", "callee": "parse_utc_iso_or_none", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L94"}, {"caller_nid": "sync_cleanup_cleanup_interlocks_satisfied", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L96"}, {"caller_nid": "sync_cleanup_cleanup_interlocks_satisfied", "callee": "timedelta", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L99"}, {"caller_nid": "sync_cleanup_cleanup_interlocks_satisfied", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L100"}, {"caller_nid": "sync_cleanup_cleanup_interlocks_satisfied", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L110"}, {"caller_nid": "sync_cleanup_cleanup_interlocks_satisfied", "callee": "debug", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py", "source_location": "L119"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/fe5f9d08eac0d2868481108c00aece0c18f8825ddb84a1c3e6aa056b2edaf31d.json b/graphify-out/cache/ast/fe5f9d08eac0d2868481108c00aece0c18f8825ddb84a1c3e6aa056b2edaf31d.json new file mode 100644 index 0000000..6ab2fb0 --- /dev/null +++ b/graphify-out/cache/ast/fe5f9d08eac0d2868481108c00aece0c18f8825ddb84a1c3e6aa056b2edaf31d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "label": "test_copier_driver.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L1"}, {"id": "template_test_copier_driver_test_core_readme_field_ids_pins_the_three_core_fields", "label": "test_core_readme_field_ids_pins_the_three_core_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L59"}, {"id": "template_test_copier_driver_test_resolve_project_basic_returns_resolved_template", "label": "test_resolve_project_basic_returns_resolved_template()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L70"}, {"id": "template_test_copier_driver_test_resolve_run_basic_experimental_sets_run_scope_experimental", "label": "test_resolve_run_basic_experimental_sets_run_scope_experimental()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L90"}, {"id": "template_test_copier_driver_test_resolve_run_basic_test_sets_run_scope_test", "label": "test_resolve_run_basic_test_sets_run_scope_test()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L100"}, {"id": "template_test_copier_driver_test_resolve_run_basic_both_sets_run_scope_both", "label": "test_resolve_run_basic_both_sets_run_scope_both()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L108"}, {"id": "template_test_copier_driver_test_resolve_missing_version_raises_template_load_error_mentioning_field", "label": "test_resolve_missing_version_raises_template_load_error_mentioning_field()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L121"}, {"id": "template_test_copier_driver_test_resolve_redeclares_core_raises_core_field_redeclared_naming_offender", "label": "test_resolve_redeclares_core_raises_core_field_redeclared_naming_offender()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L130"}, {"id": "template_test_copier_driver_test_resolve_redeclares_core_is_also_caught_as_template_load_error", "label": "test_resolve_redeclares_core_is_also_caught_as_template_load_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L138"}, {"id": "template_test_copier_driver_test_resolve_missing_copier_yml_raises_template_load_error", "label": "test_resolve_missing_copier_yml_raises_template_load_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L146"}, {"id": "template_test_copier_driver_test_resolve_scope_mismatch_raises_template_load_error", "label": "test_resolve_scope_mismatch_raises_template_load_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L156"}, {"id": "template_test_copier_driver_test_resolve_run_template_missing_run_scope_raises", "label": "test_resolve_run_template_missing_run_scope_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L165"}, {"id": "template_test_copier_driver_test_resolve_run_template_invalid_run_scope_raises", "label": "test_resolve_run_template_invalid_run_scope_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L179"}, {"id": "template_test_copier_driver_test_resolve_with_tasks_does_not_raise", "label": "test_resolve_with_tasks_does_not_raise()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L198"}, {"id": "template_test_copier_driver_test_resolve_with_tasks_emits_warning_log", "label": "test_resolve_with_tasks_emits_warning_log()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L208"}, {"id": "template_test_copier_driver_test_render_project_basic_writes_readme", "label": "test_render_project_basic_writes_readme()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L227"}, {"id": "template_test_copier_driver_test_render_project_basic_files_written_lists_the_readme", "label": "test_render_project_basic_files_written_lists_the_readme()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L245"}, {"id": "template_test_copier_driver_test_render_with_tasks_silently_ignores_tasks_and_writes_file", "label": "test_render_with_tasks_silently_ignores_tasks_and_writes_file()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L263"}, {"id": "template_test_copier_driver_test_render_into_dst_with_conflicting_files_raises", "label": "test_render_into_dst_with_conflicting_files_raises()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L288"}, {"id": "template_test_copier_driver_test_render_calls_copier_run_copy_with_spec_kwargs", "label": "test_render_calls_copier_run_copy_with_spec_kwargs()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L322"}, {"id": "template_test_copier_driver_test_resolve_unreadable_copier_yml_raises_template_load_error", "label": "test_resolve_unreadable_copier_yml_raises_template_load_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L350"}, {"id": "template_test_copier_driver_test_resolve_malformed_yaml_raises_template_load_error", "label": "test_resolve_malformed_yaml_raises_template_load_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L371"}, {"id": "template_test_copier_driver_test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type", "label": "test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L387"}, {"id": "template_test_copier_driver_test_resolve_non_mapping_yaml_raises_template_load_error", "label": "test_resolve_non_mapping_yaml_raises_template_load_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L403"}, {"id": "template_test_copier_driver_test_resolve_missing_exlab_type_raises_template_load_error", "label": "test_resolve_missing_exlab_type_raises_template_load_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L421"}, {"id": "template_test_copier_driver_test_resolve_invalid_exlab_type_value_raises_template_load_error", "label": "test_resolve_invalid_exlab_type_value_raises_template_load_error()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L436"}, {"id": "template_test_copier_driver_test_resolve_readme_fields_with_non_core_entries_passes_through", "label": "test_resolve_readme_fields_with_non_core_entries_passes_through()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L461"}, {"id": "template_test_copier_driver_test_resolve_readme_block_not_a_mapping_yields_empty_extra_fields", "label": "test_resolve_readme_block_not_a_mapping_yields_empty_extra_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L488"}, {"id": "template_test_copier_driver_test_resolve_readme_fields_not_a_list_yields_empty_extra_fields", "label": "test_resolve_readme_fields_not_a_list_yields_empty_extra_fields()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L505"}, {"id": "template_test_copier_driver_test_resolve_non_string_description_falls_back_to_empty", "label": "test_resolve_non_string_description_falls_back_to_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L532"}, {"id": "template_test_copier_driver_test_resolve_plugin_order_preserved", "label": "test_resolve_plugin_order_preserved()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L548"}, {"id": "template_test_copier_driver_test_resolve_non_list_plugin_order_falls_back_to_empty", "label": "test_resolve_non_list_plugin_order_falls_back_to_empty()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L567"}, {"id": "template_test_copier_driver_test_render_snapshots_existing_regular_file_at_dst", "label": "test_render_snapshots_existing_regular_file_at_dst()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L587"}, {"id": "template_test_copier_driver_rationale_1", "label": "Unit tests for ``exlab_wizard.template.copier_driver``. These tests pin the \u00a74.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L1"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "logging", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L19", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "pathlib", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L20", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L21", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "unittest_mock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L22", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "copier_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L25", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "exlab_wizard_constants", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L27", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "exlab_wizard_errors", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L28", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "exlab_wizard_template_copier_driver", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L32", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_core_readme_field_ids_pins_the_three_core_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L59", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_project_basic_returns_resolved_template", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L70", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_run_basic_experimental_sets_run_scope_experimental", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L90", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_run_basic_test_sets_run_scope_test", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L100", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_run_basic_both_sets_run_scope_both", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L108", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_missing_version_raises_template_load_error_mentioning_field", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L121", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_redeclares_core_raises_core_field_redeclared_naming_offender", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L130", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_redeclares_core_is_also_caught_as_template_load_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L138", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_missing_copier_yml_raises_template_load_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L146", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_scope_mismatch_raises_template_load_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L156", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_run_template_missing_run_scope_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L165", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_run_template_invalid_run_scope_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L179", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_with_tasks_does_not_raise", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L198", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_with_tasks_emits_warning_log", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L208", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_render_project_basic_writes_readme", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L227", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_render_project_basic_files_written_lists_the_readme", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L245", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_render_with_tasks_silently_ignores_tasks_and_writes_file", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L263", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_render_into_dst_with_conflicting_files_raises", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L288", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_render_calls_copier_run_copy_with_spec_kwargs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L322", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_unreadable_copier_yml_raises_template_load_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L350", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_malformed_yaml_raises_template_load_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L371", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L387", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_non_mapping_yaml_raises_template_load_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L403", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_missing_exlab_type_raises_template_load_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L421", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_invalid_exlab_type_value_raises_template_load_error", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L436", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_readme_fields_with_non_core_entries_passes_through", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L461", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_readme_block_not_a_mapping_yields_empty_extra_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L488", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_readme_fields_not_a_list_yields_empty_extra_fields", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L505", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_non_string_description_falls_back_to_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L532", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_plugin_order_preserved", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L548", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_resolve_non_list_plugin_order_falls_back_to_empty", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L567", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "target": "template_test_copier_driver_test_render_snapshots_existing_regular_file_at_dst", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L587", "weight": 1.0}, {"source": "template_test_copier_driver_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_template_test_copier_driver_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"caller_nid": "template_test_copier_driver_test_core_readme_field_ids_pins_the_three_core_fields", "callee": "frozenset", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L62"}, {"caller_nid": "template_test_copier_driver_test_resolve_project_basic_returns_resolved_template", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L71"}, {"caller_nid": "template_test_copier_driver_test_resolve_project_basic_returns_resolved_template", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L72"}, {"caller_nid": "template_test_copier_driver_test_resolve_project_basic_returns_resolved_template", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L74"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_basic_experimental_sets_run_scope_experimental", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L91"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_basic_experimental_sets_run_scope_experimental", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L92"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_basic_test_sets_run_scope_test", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L101"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_basic_test_sets_run_scope_test", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L102"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_basic_both_sets_run_scope_both", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L109"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_basic_both_sets_run_scope_both", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L110"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_version_raises_template_load_error_mentioning_field", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L124"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_version_raises_template_load_error_mentioning_field", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L125"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_version_raises_template_load_error_mentioning_field", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L126"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_version_raises_template_load_error_mentioning_field", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L127"}, {"caller_nid": "template_test_copier_driver_test_resolve_redeclares_core_raises_core_field_redeclared_naming_offender", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L131"}, {"caller_nid": "template_test_copier_driver_test_resolve_redeclares_core_raises_core_field_redeclared_naming_offender", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L132"}, {"caller_nid": "template_test_copier_driver_test_resolve_redeclares_core_raises_core_field_redeclared_naming_offender", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L133"}, {"caller_nid": "template_test_copier_driver_test_resolve_redeclares_core_raises_core_field_redeclared_naming_offender", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L135"}, {"caller_nid": "template_test_copier_driver_test_resolve_redeclares_core_is_also_caught_as_template_load_error", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L141"}, {"caller_nid": "template_test_copier_driver_test_resolve_redeclares_core_is_also_caught_as_template_load_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L142"}, {"caller_nid": "template_test_copier_driver_test_resolve_redeclares_core_is_also_caught_as_template_load_error", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L143"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_copier_yml_raises_template_load_error", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L148"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_copier_yml_raises_template_load_error", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L150"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_copier_yml_raises_template_load_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L151"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_copier_yml_raises_template_load_error", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L152"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_copier_yml_raises_template_load_error", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L153"}, {"caller_nid": "template_test_copier_driver_test_resolve_scope_mismatch_raises_template_load_error", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L158"}, {"caller_nid": "template_test_copier_driver_test_resolve_scope_mismatch_raises_template_load_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L159"}, {"caller_nid": "template_test_copier_driver_test_resolve_scope_mismatch_raises_template_load_error", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L160"}, {"caller_nid": "template_test_copier_driver_test_resolve_scope_mismatch_raises_template_load_error", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L161"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_template_missing_run_scope_raises", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L168"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_template_missing_run_scope_raises", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L169"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_template_missing_run_scope_raises", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L173"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_template_missing_run_scope_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L174"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_template_missing_run_scope_raises", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L175"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_template_missing_run_scope_raises", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L176"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_template_invalid_run_scope_raises", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L182"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_template_invalid_run_scope_raises", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L183"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_template_invalid_run_scope_raises", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L187"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_template_invalid_run_scope_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L188"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_template_invalid_run_scope_raises", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L189"}, {"caller_nid": "template_test_copier_driver_test_resolve_run_template_invalid_run_scope_raises", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L190"}, {"caller_nid": "template_test_copier_driver_test_resolve_with_tasks_does_not_raise", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L200"}, {"caller_nid": "template_test_copier_driver_test_resolve_with_tasks_does_not_raise", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L201"}, {"caller_nid": "template_test_copier_driver_test_resolve_with_tasks_emits_warning_log", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L211"}, {"caller_nid": "template_test_copier_driver_test_resolve_with_tasks_emits_warning_log", "callee": "at_level", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L212"}, {"caller_nid": "template_test_copier_driver_test_resolve_with_tasks_emits_warning_log", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L213"}, {"caller_nid": "template_test_copier_driver_test_resolve_with_tasks_emits_warning_log", "callee": "any", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L217"}, {"caller_nid": "template_test_copier_driver_test_resolve_with_tasks_emits_warning_log", "callee": "getMessage", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L217"}, {"caller_nid": "template_test_copier_driver_test_resolve_with_tasks_emits_warning_log", "callee": "getMessage", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L218"}, {"caller_nid": "template_test_copier_driver_test_render_project_basic_writes_readme", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L228"}, {"caller_nid": "template_test_copier_driver_test_render_project_basic_writes_readme", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L229"}, {"caller_nid": "template_test_copier_driver_test_render_project_basic_writes_readme", "callee": "render", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L233"}, {"caller_nid": "template_test_copier_driver_test_render_project_basic_writes_readme", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L235"}, {"caller_nid": "template_test_copier_driver_test_render_project_basic_writes_readme", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L241"}, {"caller_nid": "template_test_copier_driver_test_render_project_basic_writes_readme", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L242"}, {"caller_nid": "template_test_copier_driver_test_render_project_basic_files_written_lists_the_readme", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L248"}, {"caller_nid": "template_test_copier_driver_test_render_project_basic_files_written_lists_the_readme", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L249"}, {"caller_nid": "template_test_copier_driver_test_render_project_basic_files_written_lists_the_readme", "callee": "render", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L252"}, {"caller_nid": "template_test_copier_driver_test_render_project_basic_files_written_lists_the_readme", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L254"}, {"caller_nid": "template_test_copier_driver_test_render_project_basic_files_written_lists_the_readme", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L260"}, {"caller_nid": "template_test_copier_driver_test_render_with_tasks_silently_ignores_tasks_and_writes_file", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L272"}, {"caller_nid": "template_test_copier_driver_test_render_with_tasks_silently_ignores_tasks_and_writes_file", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L273"}, {"caller_nid": "template_test_copier_driver_test_render_with_tasks_silently_ignores_tasks_and_writes_file", "callee": "render", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L276"}, {"caller_nid": "template_test_copier_driver_test_render_with_tasks_silently_ignores_tasks_and_writes_file", "callee": "is_file", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L279"}, {"caller_nid": "template_test_copier_driver_test_render_with_tasks_silently_ignores_tasks_and_writes_file", "callee": "strip", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L280"}, {"caller_nid": "template_test_copier_driver_test_render_with_tasks_silently_ignores_tasks_and_writes_file", "callee": "read_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L280"}, {"caller_nid": "template_test_copier_driver_test_render_with_tasks_silently_ignores_tasks_and_writes_file", "callee": "isinstance", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L285"}, {"caller_nid": "template_test_copier_driver_test_render_into_dst_with_conflicting_files_raises", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L297"}, {"caller_nid": "template_test_copier_driver_test_render_into_dst_with_conflicting_files_raises", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L298"}, {"caller_nid": "template_test_copier_driver_test_render_into_dst_with_conflicting_files_raises", "callee": "render", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L302"}, {"caller_nid": "template_test_copier_driver_test_render_into_dst_with_conflicting_files_raises", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L307"}, {"caller_nid": "template_test_copier_driver_test_render_into_dst_with_conflicting_files_raises", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L313"}, {"caller_nid": "template_test_copier_driver_test_render_into_dst_with_conflicting_files_raises", "callee": "render", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L314"}, {"caller_nid": "template_test_copier_driver_test_render_calls_copier_run_copy_with_spec_kwargs", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L327"}, {"caller_nid": "template_test_copier_driver_test_render_calls_copier_run_copy_with_spec_kwargs", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L328"}, {"caller_nid": "template_test_copier_driver_test_render_calls_copier_run_copy_with_spec_kwargs", "callee": "patch", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L331"}, {"caller_nid": "template_test_copier_driver_test_render_calls_copier_run_copy_with_spec_kwargs", "callee": "render", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L332"}, {"caller_nid": "template_test_copier_driver_test_render_calls_copier_run_copy_with_spec_kwargs", "callee": "assert_called_once", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L334"}, {"caller_nid": "template_test_copier_driver_test_render_calls_copier_run_copy_with_spec_kwargs", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L336"}, {"caller_nid": "template_test_copier_driver_test_render_calls_copier_run_copy_with_spec_kwargs", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L337"}, {"caller_nid": "template_test_copier_driver_test_resolve_unreadable_copier_yml_raises_template_load_error", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L359"}, {"caller_nid": "template_test_copier_driver_test_resolve_unreadable_copier_yml_raises_template_load_error", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L360"}, {"caller_nid": "template_test_copier_driver_test_resolve_unreadable_copier_yml_raises_template_load_error", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L362"}, {"caller_nid": "template_test_copier_driver_test_resolve_unreadable_copier_yml_raises_template_load_error", "callee": "object", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L364"}, {"caller_nid": "template_test_copier_driver_test_resolve_unreadable_copier_yml_raises_template_load_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L365"}, {"caller_nid": "template_test_copier_driver_test_resolve_unreadable_copier_yml_raises_template_load_error", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L367"}, {"caller_nid": "template_test_copier_driver_test_resolve_unreadable_copier_yml_raises_template_load_error", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L368"}, {"caller_nid": "template_test_copier_driver_test_resolve_malformed_yaml_raises_template_load_error", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L375"}, {"caller_nid": "template_test_copier_driver_test_resolve_malformed_yaml_raises_template_load_error", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L376"}, {"caller_nid": "template_test_copier_driver_test_resolve_malformed_yaml_raises_template_load_error", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L381"}, {"caller_nid": "template_test_copier_driver_test_resolve_malformed_yaml_raises_template_load_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L382"}, {"caller_nid": "template_test_copier_driver_test_resolve_malformed_yaml_raises_template_load_error", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L383"}, {"caller_nid": "template_test_copier_driver_test_resolve_malformed_yaml_raises_template_load_error", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L384"}, {"caller_nid": "template_test_copier_driver_test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L394"}, {"caller_nid": "template_test_copier_driver_test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L395"}, {"caller_nid": "template_test_copier_driver_test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L397"}, {"caller_nid": "template_test_copier_driver_test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L398"}, {"caller_nid": "template_test_copier_driver_test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L399"}, {"caller_nid": "template_test_copier_driver_test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L400"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_mapping_yaml_raises_template_load_error", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L409"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_mapping_yaml_raises_template_load_error", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L410"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_mapping_yaml_raises_template_load_error", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L415"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_mapping_yaml_raises_template_load_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L416"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_mapping_yaml_raises_template_load_error", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L417"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_mapping_yaml_raises_template_load_error", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L418"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_exlab_type_raises_template_load_error", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L424"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_exlab_type_raises_template_load_error", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L425"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_exlab_type_raises_template_load_error", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L430"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_exlab_type_raises_template_load_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L431"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_exlab_type_raises_template_load_error", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L432"}, {"caller_nid": "template_test_copier_driver_test_resolve_missing_exlab_type_raises_template_load_error", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L433"}, {"caller_nid": "template_test_copier_driver_test_resolve_invalid_exlab_type_value_raises_template_load_error", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L442"}, {"caller_nid": "template_test_copier_driver_test_resolve_invalid_exlab_type_value_raises_template_load_error", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L443"}, {"caller_nid": "template_test_copier_driver_test_resolve_invalid_exlab_type_value_raises_template_load_error", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L448"}, {"caller_nid": "template_test_copier_driver_test_resolve_invalid_exlab_type_value_raises_template_load_error", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L449"}, {"caller_nid": "template_test_copier_driver_test_resolve_invalid_exlab_type_value_raises_template_load_error", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L450"}, {"caller_nid": "template_test_copier_driver_test_resolve_invalid_exlab_type_value_raises_template_load_error", "callee": "str", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L451"}, {"caller_nid": "template_test_copier_driver_test_resolve_readme_fields_with_non_core_entries_passes_through", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L468"}, {"caller_nid": "template_test_copier_driver_test_resolve_readme_fields_with_non_core_entries_passes_through", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L469"}, {"caller_nid": "template_test_copier_driver_test_resolve_readme_fields_with_non_core_entries_passes_through", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L481"}, {"caller_nid": "template_test_copier_driver_test_resolve_readme_fields_with_non_core_entries_passes_through", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L482"}, {"caller_nid": "template_test_copier_driver_test_resolve_readme_fields_with_non_core_entries_passes_through", "callee": "len", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L484"}, {"caller_nid": "template_test_copier_driver_test_resolve_readme_block_not_a_mapping_yields_empty_extra_fields", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L494"}, {"caller_nid": "template_test_copier_driver_test_resolve_readme_block_not_a_mapping_yields_empty_extra_fields", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L495"}, {"caller_nid": "template_test_copier_driver_test_resolve_readme_block_not_a_mapping_yields_empty_extra_fields", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L500"}, {"caller_nid": "template_test_copier_driver_test_resolve_readme_block_not_a_mapping_yields_empty_extra_fields", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L501"}, {"caller_nid": "template_test_copier_driver_test_resolve_readme_fields_not_a_list_yields_empty_extra_fields", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L512"}, {"caller_nid": "template_test_copier_driver_test_resolve_readme_fields_not_a_list_yields_empty_extra_fields", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L513"}, {"caller_nid": "template_test_copier_driver_test_resolve_readme_fields_not_a_list_yields_empty_extra_fields", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L522"}, {"caller_nid": "template_test_copier_driver_test_resolve_readme_fields_not_a_list_yields_empty_extra_fields", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L523"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_string_description_falls_back_to_empty", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L537"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_string_description_falls_back_to_empty", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L538"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_string_description_falls_back_to_empty", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L543"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_string_description_falls_back_to_empty", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L544"}, {"caller_nid": "template_test_copier_driver_test_resolve_plugin_order_preserved", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L552"}, {"caller_nid": "template_test_copier_driver_test_resolve_plugin_order_preserved", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L553"}, {"caller_nid": "template_test_copier_driver_test_resolve_plugin_order_preserved", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L562"}, {"caller_nid": "template_test_copier_driver_test_resolve_plugin_order_preserved", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L563"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_list_plugin_order_falls_back_to_empty", "callee": "mkdir", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L571"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_list_plugin_order_falls_back_to_empty", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L572"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_list_plugin_order_falls_back_to_empty", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L577"}, {"caller_nid": "template_test_copier_driver_test_resolve_non_list_plugin_order_falls_back_to_empty", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L578"}, {"caller_nid": "template_test_copier_driver_test_render_snapshots_existing_regular_file_at_dst", "callee": "TemplateEngine", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L592"}, {"caller_nid": "template_test_copier_driver_test_render_snapshots_existing_regular_file_at_dst", "callee": "resolve", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L593"}, {"caller_nid": "template_test_copier_driver_test_render_snapshots_existing_regular_file_at_dst", "callee": "write_text", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L595"}, {"caller_nid": "template_test_copier_driver_test_render_snapshots_existing_regular_file_at_dst", "callee": "raises", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L600"}, {"caller_nid": "template_test_copier_driver_test_render_snapshots_existing_regular_file_at_dst", "callee": "render", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py", "source_location": "L601"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/fe5ff4570021584f1a7dacd1d1fbbe6fa51699a08c1d95249821a532fe87b8ce.json b/graphify-out/cache/ast/fe5ff4570021584f1a7dacd1d1fbbe6fa51699a08c1d95249821a532fe87b8ce.json new file mode 100644 index 0000000..e26f5ac --- /dev/null +++ b/graphify-out/cache/ast/fe5ff4570021584f1a7dacd1d1fbbe6fa51699a08c1d95249821a532fe87b8ce.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "label": "test_app.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L1"}, {"id": "api_test_app_f", "label": "_F", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L21"}, {"id": "api_test_app_f_init", "label": ".__init__()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L24"}, {"id": "api_test_app_test_diff_findings_added_removed_changed", "label": "test_diff_findings_added_removed_changed()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L37"}, {"id": "api_test_app_test_finding_to_dict_handles_dataclass_and_dict", "label": "test_finding_to_dict_handles_dataclass_and_dict()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L48"}, {"id": "api_test_app_test_audit_channel_publishes_snapshot_to_subscriber", "label": "test_audit_channel_publishes_snapshot_to_subscriber()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L57"}, {"id": "api_test_app_test_audit_channel_publishes_delta", "label": "test_audit_channel_publishes_delta()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L78"}, {"id": "api_test_app_test_audit_channel_late_subscribe_receives_latest_snapshot", "label": "test_audit_channel_late_subscribe_receives_latest_snapshot()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L101"}, {"id": "api_test_app_test_audit_channel_close_signals_subscribers", "label": "test_audit_channel_close_signals_subscribers()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L119"}, {"id": "api_test_app_test_create_app_uses_supplied_dependencies", "label": "test_create_app_uses_supplied_dependencies()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L135"}, {"id": "api_test_app_test_create_app_creates_default_dependencies", "label": "test_create_app_creates_default_dependencies()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L141"}, {"id": "api_test_app_test_create_app_attaches_audit_channel", "label": "test_create_app_attaches_audit_channel()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L147"}, {"id": "api_test_app_test_lifespan_starts_and_stops_audit_task", "label": "test_lifespan_starts_and_stops_audit_task()", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L154"}, {"id": "api_test_app_rationale_1", "label": "Unit tests for ``exlab_wizard.api.app``: AuditChannel + app factory.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L1"}, {"id": "api_test_app_rationale_22", "label": "Tiny finding-shaped object for diff tests.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L22"}, {"id": "api_test_app_rationale_155", "label": "When start_audit_task=True the lifespan starts the audit task and cancels on clo", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L155"}], "edges": [{"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "asyncio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L5", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "typing", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L6", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "unittest_mock", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L7", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "pytest", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L9", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "exlab_wizard_api_app", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L11", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "exlab_wizard_config_models", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L18", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "api_test_app_f", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L21", "weight": 1.0}, {"source": "api_test_app_f", "target": "api_test_app_f_init", "relation": "method", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L24", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "api_test_app_test_diff_findings_added_removed_changed", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L37", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "api_test_app_test_finding_to_dict_handles_dataclass_and_dict", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L48", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "api_test_app_test_audit_channel_publishes_snapshot_to_subscriber", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L57", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "api_test_app_test_audit_channel_publishes_delta", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L78", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "api_test_app_test_audit_channel_late_subscribe_receives_latest_snapshot", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L101", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "api_test_app_test_audit_channel_close_signals_subscribers", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L119", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "api_test_app_test_create_app_uses_supplied_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L135", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "api_test_app_test_create_app_creates_default_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L141", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "api_test_app_test_create_app_attaches_audit_channel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L147", "weight": 1.0}, {"source": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "target": "api_test_app_test_lifespan_starts_and_stops_audit_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L154", "weight": 1.0}, {"source": "api_test_app_test_diff_findings_added_removed_changed", "target": "api_test_app_f", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L38", "weight": 1.0}, {"source": "api_test_app_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_api_test_app_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L1", "weight": 1.0}, {"source": "api_test_app_rationale_22", "target": "api_test_app_f", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L22", "weight": 1.0}, {"source": "api_test_app_rationale_155", "target": "api_test_app_test_lifespan_starts_and_stops_audit_task", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L155", "weight": 1.0}], "raw_calls": [{"caller_nid": "api_test_app_test_diff_findings_added_removed_changed", "callee": "_diff_findings", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L42"}, {"caller_nid": "api_test_app_test_finding_to_dict_handles_dataclass_and_dict", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L49"}, {"caller_nid": "api_test_app_test_finding_to_dict_handles_dataclass_and_dict", "callee": "_finding_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L51"}, {"caller_nid": "api_test_app_test_finding_to_dict_handles_dataclass_and_dict", "callee": "_finding_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L52"}, {"caller_nid": "api_test_app_test_finding_to_dict_handles_dataclass_and_dict", "callee": "_finding_to_dict", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L53"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_snapshot_to_subscriber", "callee": "AuditChannel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L58"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_snapshot_to_subscriber", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L59"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_snapshot_to_subscriber", "callee": "create_task", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L69"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_snapshot_to_subscriber", "callee": "collect", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L69"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_snapshot_to_subscriber", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L70"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_snapshot_to_subscriber", "callee": "publish_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L71"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_snapshot_to_subscriber", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L72"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_delta", "callee": "AuditChannel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L79"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_delta", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L80"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_delta", "callee": "create_task", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L90"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_delta", "callee": "collect", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L90"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_delta", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L91"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_delta", "callee": "publish_delta", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L92"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_delta", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L95"}, {"caller_nid": "api_test_app_test_audit_channel_publishes_delta", "callee": "next", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L96"}, {"caller_nid": "api_test_app_test_audit_channel_late_subscribe_receives_latest_snapshot", "callee": "AuditChannel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L102"}, {"caller_nid": "api_test_app_test_audit_channel_late_subscribe_receives_latest_snapshot", "callee": "MagicMock", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L103"}, {"caller_nid": "api_test_app_test_audit_channel_late_subscribe_receives_latest_snapshot", "callee": "publish_snapshot", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L105"}, {"caller_nid": "api_test_app_test_audit_channel_late_subscribe_receives_latest_snapshot", "callee": "create_task", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L113"}, {"caller_nid": "api_test_app_test_audit_channel_late_subscribe_receives_latest_snapshot", "callee": "collect", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L113"}, {"caller_nid": "api_test_app_test_audit_channel_late_subscribe_receives_latest_snapshot", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L114"}, {"caller_nid": "api_test_app_test_audit_channel_close_signals_subscribers", "callee": "AuditChannel", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L120"}, {"caller_nid": "api_test_app_test_audit_channel_close_signals_subscribers", "callee": "create_task", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L127"}, {"caller_nid": "api_test_app_test_audit_channel_close_signals_subscribers", "callee": "collect", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L127"}, {"caller_nid": "api_test_app_test_audit_channel_close_signals_subscribers", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L128"}, {"caller_nid": "api_test_app_test_audit_channel_close_signals_subscribers", "callee": "close", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L129"}, {"caller_nid": "api_test_app_test_audit_channel_close_signals_subscribers", "callee": "wait_for", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L130"}, {"caller_nid": "api_test_app_test_create_app_uses_supplied_dependencies", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L136"}, {"caller_nid": "api_test_app_test_create_app_uses_supplied_dependencies", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L136"}, {"caller_nid": "api_test_app_test_create_app_uses_supplied_dependencies", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L137"}, {"caller_nid": "api_test_app_test_create_app_creates_default_dependencies", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L142"}, {"caller_nid": "api_test_app_test_create_app_creates_default_dependencies", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L142"}, {"caller_nid": "api_test_app_test_create_app_attaches_audit_channel", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L148"}, {"caller_nid": "api_test_app_test_create_app_attaches_audit_channel", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L148"}, {"caller_nid": "api_test_app_test_create_app_attaches_audit_channel", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L149"}, {"caller_nid": "api_test_app_test_lifespan_starts_and_stops_audit_task", "callee": "AppDependencies", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L164"}, {"caller_nid": "api_test_app_test_lifespan_starts_and_stops_audit_task", "callee": "Config", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L164"}, {"caller_nid": "api_test_app_test_lifespan_starts_and_stops_audit_task", "callee": "StubValidator", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L164"}, {"caller_nid": "api_test_app_test_lifespan_starts_and_stops_audit_task", "callee": "create_app", "is_member_call": false, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L165"}, {"caller_nid": "api_test_app_test_lifespan_starts_and_stops_audit_task", "callee": "lifespan_context", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L167"}, {"caller_nid": "api_test_app_test_lifespan_starts_and_stops_audit_task", "callee": "sleep", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L169"}, {"caller_nid": "api_test_app_test_lifespan_starts_and_stops_audit_task", "callee": "done", "is_member_call": true, "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py", "source_location": "L171"}]} \ No newline at end of file diff --git a/graphify-out/cache/ast/ff55eca63eebf249183ade35bc04ba83e65f03b235eeed4b5db3287baefd5aa4.json b/graphify-out/cache/ast/ff55eca63eebf249183ade35bc04ba83e65f03b235eeed4b5db3287baefd5aa4.json new file mode 100644 index 0000000..175f801 --- /dev/null +++ b/graphify-out/cache/ast/ff55eca63eebf249183ade35bc04ba83e65f03b235eeed4b5db3287baefd5aa4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "users_alex_projects_exlabwizard_tests_unit_tray_init_py", "label": "__init__.py", "file_type": "code", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/__init__.py", "source_location": "L1"}, {"id": "tray_init_rationale_1", "label": "Unit tests for ``exlab_wizard.tray``. Backend Spec \u00a74.3.2.", "file_type": "rationale", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/__init__.py", "source_location": "L1"}], "edges": [{"source": "tray_init_rationale_1", "target": "users_alex_projects_exlabwizard_tests_unit_tray_init_py", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "/Users/alex/Projects/ExLabWizard/tests/unit/tray/__init__.py", "source_location": "L1", "weight": 1.0}], "raw_calls": []} \ No newline at end of file diff --git a/graphify-out/graph.json b/graphify-out/graph.json new file mode 100644 index 0000000..2e4588d --- /dev/null +++ b/graphify-out/graph.json @@ -0,0 +1,196633 @@ +{ + "directed": false, + "multigraph": false, + "graph": {}, + "nodes": [ + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/__init__.py", + "source_location": "L1", + "id": "tests_init_py", + "community": 423, + "norm_label": "__init__.py" + }, + { + "label": "test_errors.py", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L1", + "id": "tests_unit_test_errors_py", + "community": 22, + "norm_label": "test_errors.py" + }, + { + "label": "test_exlab_error_is_subclass_of_exception()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L33", + "id": "unit_test_errors_test_exlab_error_is_subclass_of_exception", + "community": 22, + "norm_label": "test_exlab_error_is_subclass_of_exception()" + }, + { + "label": "test_exlab_error_can_be_raised_and_caught()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L37", + "id": "unit_test_errors_test_exlab_error_can_be_raised_and_caught", + "community": 22, + "norm_label": "test_exlab_error_can_be_raised_and_caught()" + }, + { + "label": "test_config_error_is_subclass_of_exlab_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L48", + "id": "unit_test_errors_test_config_error_is_subclass_of_exlab_error", + "community": 22, + "norm_label": "test_config_error_is_subclass_of_exlab_error()" + }, + { + "label": "test_config_error_can_be_raised_and_caught()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L52", + "id": "unit_test_errors_test_config_error_can_be_raised_and_caught", + "community": 22, + "norm_label": "test_config_error_can_be_raised_and_caught()" + }, + { + "label": "test_validation_error_is_subclass_of_exlab_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L57", + "id": "unit_test_errors_test_validation_error_is_subclass_of_exlab_error", + "community": 22, + "norm_label": "test_validation_error_is_subclass_of_exlab_error()" + }, + { + "label": "test_validation_error_can_be_raised_and_caught()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L61", + "id": "unit_test_errors_test_validation_error_can_be_raised_and_caught", + "community": 22, + "norm_label": "test_validation_error_can_be_raised_and_caught()" + }, + { + "label": "test_template_load_error_is_subclass_of_exlab_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L66", + "id": "unit_test_errors_test_template_load_error_is_subclass_of_exlab_error", + "community": 22, + "norm_label": "test_template_load_error_is_subclass_of_exlab_error()" + }, + { + "label": "test_template_load_error_can_be_raised_and_caught()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L70", + "id": "unit_test_errors_test_template_load_error_can_be_raised_and_caught", + "community": 22, + "norm_label": "test_template_load_error_can_be_raised_and_caught()" + }, + { + "label": "test_plugin_error_is_subclass_of_exlab_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L75", + "id": "unit_test_errors_test_plugin_error_is_subclass_of_exlab_error", + "community": 22, + "norm_label": "test_plugin_error_is_subclass_of_exlab_error()" + }, + { + "label": "test_plugin_error_can_be_raised_and_caught()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L79", + "id": "unit_test_errors_test_plugin_error_can_be_raised_and_caught", + "community": 215, + "norm_label": "test_plugin_error_can_be_raised_and_caught()" + }, + { + "label": "test_keyring_unavailable_error_is_subclass_of_exlab_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L84", + "id": "unit_test_errors_test_keyring_unavailable_error_is_subclass_of_exlab_error", + "community": 22, + "norm_label": "test_keyring_unavailable_error_is_subclass_of_exlab_error()" + }, + { + "label": "test_keyring_unavailable_error_can_be_raised_and_caught()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L88", + "id": "unit_test_errors_test_keyring_unavailable_error_can_be_raised_and_caught", + "community": 22, + "norm_label": "test_keyring_unavailable_error_can_be_raised_and_caught()" + }, + { + "label": "test_setup_incomplete_error_is_subclass_of_exlab_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L93", + "id": "unit_test_errors_test_setup_incomplete_error_is_subclass_of_exlab_error", + "community": 22, + "norm_label": "test_setup_incomplete_error_is_subclass_of_exlab_error()" + }, + { + "label": "test_setup_incomplete_error_can_be_raised_and_caught()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L97", + "id": "unit_test_errors_test_setup_incomplete_error_can_be_raised_and_caught", + "community": 22, + "norm_label": "test_setup_incomplete_error_can_be_raised_and_caught()" + }, + { + "label": "test_template_core_field_redeclared_is_subclass_of_template_load_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L107", + "id": "unit_test_errors_test_template_core_field_redeclared_is_subclass_of_template_load_error", + "community": 22, + "norm_label": "test_template_core_field_redeclared_is_subclass_of_template_load_error()" + }, + { + "label": "test_template_core_field_redeclared_is_also_subclass_of_exlab_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L112", + "id": "unit_test_errors_test_template_core_field_redeclared_is_also_subclass_of_exlab_error", + "community": 22, + "norm_label": "test_template_core_field_redeclared_is_also_subclass_of_exlab_error()" + }, + { + "label": "test_template_core_field_redeclared_can_be_caught_as_template_load_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L116", + "id": "unit_test_errors_test_template_core_field_redeclared_can_be_caught_as_template_load_error", + "community": 2, + "norm_label": "test_template_core_field_redeclared_can_be_caught_as_template_load_error()" + }, + { + "label": "test_template_core_field_redeclared_can_be_caught_as_exlab_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L121", + "id": "unit_test_errors_test_template_core_field_redeclared_can_be_caught_as_exlab_error", + "community": 2, + "norm_label": "test_template_core_field_redeclared_can_be_caught_as_exlab_error()" + }, + { + "label": "test_plugin_input_required_is_subclass_of_exlab_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L131", + "id": "unit_test_errors_test_plugin_input_required_is_subclass_of_exlab_error", + "community": 22, + "norm_label": "test_plugin_input_required_is_subclass_of_exlab_error()" + }, + { + "label": "test_plugin_input_required_sets_fields_attribute()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L135", + "id": "unit_test_errors_test_plugin_input_required_sets_fields_attribute", + "community": 22, + "norm_label": "test_plugin_input_required_sets_fields_attribute()" + }, + { + "label": "test_plugin_input_required_accepts_empty_fields_list()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L141", + "id": "unit_test_errors_test_plugin_input_required_accepts_empty_fields_list", + "community": 22, + "norm_label": "test_plugin_input_required_accepts_empty_fields_list()" + }, + { + "label": "test_plugin_input_required_reason_property_returns_message_string()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L146", + "id": "unit_test_errors_test_plugin_input_required_reason_property_returns_message_string", + "community": 22, + "norm_label": "test_plugin_input_required_reason_property_returns_message_string()" + }, + { + "label": "test_plugin_input_required_str_equals_reason()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L151", + "id": "unit_test_errors_test_plugin_input_required_str_equals_reason", + "community": 22, + "norm_label": "test_plugin_input_required_str_equals_reason()" + }, + { + "label": "test_plugin_input_required_can_be_raised_and_caught()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L157", + "id": "unit_test_errors_test_plugin_input_required_can_be_raised_and_caught", + "community": 22, + "norm_label": "test_plugin_input_required_can_be_raised_and_caught()" + }, + { + "label": "test_plugin_input_required_can_be_caught_as_exlab_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L164", + "id": "unit_test_errors_test_plugin_input_required_can_be_caught_as_exlab_error", + "community": 22, + "norm_label": "test_plugin_input_required_can_be_caught_as_exlab_error()" + }, + { + "label": "test_schema_major_mismatch_is_subclass_of_exlab_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L174", + "id": "unit_test_errors_test_schema_major_mismatch_is_subclass_of_exlab_error", + "community": 22, + "norm_label": "test_schema_major_mismatch_is_subclass_of_exlab_error()" + }, + { + "label": "test_schema_major_mismatch_sets_expected_major_attribute()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L178", + "id": "unit_test_errors_test_schema_major_mismatch_sets_expected_major_attribute", + "community": 22, + "norm_label": "test_schema_major_mismatch_sets_expected_major_attribute()" + }, + { + "label": "test_schema_major_mismatch_sets_found_attribute()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L183", + "id": "unit_test_errors_test_schema_major_mismatch_sets_found_attribute", + "community": 22, + "norm_label": "test_schema_major_mismatch_sets_found_attribute()" + }, + { + "label": "test_schema_major_mismatch_str_contains_expected_and_found()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L188", + "id": "unit_test_errors_test_schema_major_mismatch_str_contains_expected_and_found", + "community": 22, + "norm_label": "test_schema_major_mismatch_str_contains_expected_and_found()" + }, + { + "label": "test_schema_major_mismatch_can_be_raised_and_caught()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L195", + "id": "unit_test_errors_test_schema_major_mismatch_can_be_raised_and_caught", + "community": 22, + "norm_label": "test_schema_major_mismatch_can_be_raised_and_caught()" + }, + { + "label": "test_schema_major_mismatch_can_be_caught_as_exlab_error()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L202", + "id": "unit_test_errors_test_schema_major_mismatch_can_be_caught_as_exlab_error", + "community": 22, + "norm_label": "test_schema_major_mismatch_can_be_caught_as_exlab_error()" + }, + { + "label": "test_all_lists_every_public_exception_class()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L212", + "id": "unit_test_errors_test_all_lists_every_public_exception_class", + "community": 22, + "norm_label": "test_all_lists_every_public_exception_class()" + }, + { + "label": "test_all_entries_resolve_to_module_attributes()", + "file_type": "code", + "source_file": "tests/unit/test_errors.py", + "source_location": "L229", + "id": "unit_test_errors_test_all_entries_resolve_to_module_attributes", + "community": 22, + "norm_label": "test_all_entries_resolve_to_module_attributes()" + }, + { + "label": "Tests for the top-level exception hierarchy in ``exlab_wizard.errors``. These t", + "file_type": "rationale", + "source_file": "tests/unit/test_errors.py", + "source_location": "L1", + "id": "unit_test_errors_rationale_1", + "community": 22, + "norm_label": "tests for the top-level exception hierarchy in ``exlab_wizard.errors``. these t" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/__init__.py", + "source_location": "L1", + "id": "tests_unit_init_py", + "community": 424, + "norm_label": "__init__.py" + }, + { + "label": "test_paths.py", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1", + "id": "tests_unit_test_paths_py", + "community": 83, + "norm_label": "test_paths.py" + }, + { + "label": "_make_equipment()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L52", + "id": "unit_test_paths_make_equipment", + "community": 1, + "norm_label": "_make_equipment()" + }, + { + "label": "_make_orchestrator()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L70", + "id": "unit_test_paths_make_orchestrator", + "community": 1, + "norm_label": "_make_orchestrator()" + }, + { + "label": "_ready_config()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L80", + "id": "unit_test_paths_ready_config", + "community": 146, + "norm_label": "_ready_config()" + }, + { + "label": "fake_home()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L105", + "id": "unit_test_paths_fake_home", + "community": 83, + "norm_label": "fake_home()" + }, + { + "label": "test_os_config_path_macos()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L128", + "id": "unit_test_paths_test_os_config_path_macos", + "community": 62, + "norm_label": "test_os_config_path_macos()" + }, + { + "label": "test_os_config_path_windows()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L134", + "id": "unit_test_paths_test_os_config_path_windows", + "community": 62, + "norm_label": "test_os_config_path_windows()" + }, + { + "label": "test_os_config_path_linux_with_xdg()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L142", + "id": "unit_test_paths_test_os_config_path_linux_with_xdg", + "community": 62, + "norm_label": "test_os_config_path_linux_with_xdg()" + }, + { + "label": "test_os_config_path_linux_without_xdg()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L150", + "id": "unit_test_paths_test_os_config_path_linux_without_xdg", + "community": 62, + "norm_label": "test_os_config_path_linux_without_xdg()" + }, + { + "label": "test_os_state_path_macos()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L161", + "id": "unit_test_paths_test_os_state_path_macos", + "community": 181, + "norm_label": "test_os_state_path_macos()" + }, + { + "label": "test_os_state_path_windows()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L167", + "id": "unit_test_paths_test_os_state_path_windows", + "community": 181, + "norm_label": "test_os_state_path_windows()" + }, + { + "label": "test_os_state_path_linux_with_xdg()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L175", + "id": "unit_test_paths_test_os_state_path_linux_with_xdg", + "community": 181, + "norm_label": "test_os_state_path_linux_with_xdg()" + }, + { + "label": "test_os_state_path_linux_without_xdg()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L183", + "id": "unit_test_paths_test_os_state_path_linux_without_xdg", + "community": 181, + "norm_label": "test_os_state_path_linux_without_xdg()" + }, + { + "label": "test_os_cache_path_macos()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L194", + "id": "unit_test_paths_test_os_cache_path_macos", + "community": 62, + "norm_label": "test_os_cache_path_macos()" + }, + { + "label": "test_os_cache_path_windows()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L200", + "id": "unit_test_paths_test_os_cache_path_windows", + "community": 62, + "norm_label": "test_os_cache_path_windows()" + }, + { + "label": "test_os_cache_path_linux_with_xdg()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L208", + "id": "unit_test_paths_test_os_cache_path_linux_with_xdg", + "community": 62, + "norm_label": "test_os_cache_path_linux_with_xdg()" + }, + { + "label": "test_os_cache_path_linux_without_xdg()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L216", + "id": "unit_test_paths_test_os_cache_path_linux_without_xdg", + "community": 62, + "norm_label": "test_os_cache_path_linux_without_xdg()" + }, + { + "label": "test_os_central_log_path_macos()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L227", + "id": "unit_test_paths_test_os_central_log_path_macos", + "community": 196, + "norm_label": "test_os_central_log_path_macos()" + }, + { + "label": "test_os_central_log_path_windows()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L233", + "id": "unit_test_paths_test_os_central_log_path_windows", + "community": 196, + "norm_label": "test_os_central_log_path_windows()" + }, + { + "label": "test_os_central_log_path_linux_with_xdg()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L241", + "id": "unit_test_paths_test_os_central_log_path_linux_with_xdg", + "community": 196, + "norm_label": "test_os_central_log_path_linux_with_xdg()" + }, + { + "label": "test_os_central_log_path_linux_without_xdg()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L251", + "id": "unit_test_paths_test_os_central_log_path_linux_without_xdg", + "community": 196, + "norm_label": "test_os_central_log_path_linux_without_xdg()" + }, + { + "label": "test_suggested_staging_root_linux_fallback()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L268", + "id": "unit_test_paths_test_suggested_staging_root_linux_fallback", + "community": 62, + "norm_label": "test_suggested_staging_root_linux_fallback()" + }, + { + "label": "test_suggested_staging_root_linux_honors_xdg_data_home()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L276", + "id": "unit_test_paths_test_suggested_staging_root_linux_honors_xdg_data_home", + "community": 62, + "norm_label": "test_suggested_staging_root_linux_honors_xdg_data_home()" + }, + { + "label": "test_suggested_staging_root_macos()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L285", + "id": "unit_test_paths_test_suggested_staging_root_macos", + "community": 62, + "norm_label": "test_suggested_staging_root_macos()" + }, + { + "label": "test_suggested_staging_root_windows()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L293", + "id": "unit_test_paths_test_suggested_staging_root_windows", + "community": 62, + "norm_label": "test_suggested_staging_root_windows()" + }, + { + "label": "test_test_mode_suffixes_os_config_path()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L316", + "id": "unit_test_paths_test_test_mode_suffixes_os_config_path", + "community": 62, + "norm_label": "test_test_mode_suffixes_os_config_path()" + }, + { + "label": "test_test_mode_suffixes_os_state_path()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L325", + "id": "unit_test_paths_test_test_mode_suffixes_os_state_path", + "community": 181, + "norm_label": "test_test_mode_suffixes_os_state_path()" + }, + { + "label": "test_test_mode_suffixes_os_cache_path()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L332", + "id": "unit_test_paths_test_test_mode_suffixes_os_cache_path", + "community": 62, + "norm_label": "test_test_mode_suffixes_os_cache_path()" + }, + { + "label": "test_test_mode_suffixes_os_central_log_path()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L339", + "id": "unit_test_paths_test_test_mode_suffixes_os_central_log_path", + "community": 196, + "norm_label": "test_test_mode_suffixes_os_central_log_path()" + }, + { + "label": "test_test_mode_suffixes_suggested_staging_root()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L348", + "id": "unit_test_paths_test_test_mode_suffixes_suggested_staging_root", + "community": 62, + "norm_label": "test_test_mode_suffixes_suggested_staging_root()" + }, + { + "label": "test_test_mode_off_does_not_suffix()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L359", + "id": "unit_test_paths_test_test_mode_off_does_not_suffix", + "community": 62, + "norm_label": "test_test_mode_off_does_not_suffix()" + }, + { + "label": "test_ensure_dir_creates_missing()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L378", + "id": "unit_test_paths_test_ensure_dir_creates_missing", + "community": 181, + "norm_label": "test_ensure_dir_creates_missing()" + }, + { + "label": "test_ensure_dir_idempotent_when_exists()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L386", + "id": "unit_test_paths_test_ensure_dir_idempotent_when_exists", + "community": 181, + "norm_label": "test_ensure_dir_idempotent_when_exists()" + }, + { + "label": "test_ensure_state_dir_creates_state_dir()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L395", + "id": "unit_test_paths_test_ensure_state_dir_creates_state_dir", + "community": 181, + "norm_label": "test_ensure_state_dir_creates_state_dir()" + }, + { + "label": "test_ensure_central_log_dir_creates_parent()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L404", + "id": "unit_test_paths_test_ensure_central_log_dir_creates_parent", + "community": 196, + "norm_label": "test_ensure_central_log_dir_creates_parent()" + }, + { + "label": "test_canonicalize_equipment_id_accepts_canonical()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L418", + "id": "unit_test_paths_test_canonicalize_equipment_id_accepts_canonical", + "community": 83, + "norm_label": "test_canonicalize_equipment_id_accepts_canonical()" + }, + { + "label": "test_canonicalize_equipment_id_accepts_other_canonical_examples()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L426", + "id": "unit_test_paths_test_canonicalize_equipment_id_accepts_other_canonical_examples", + "community": 83, + "norm_label": "test_canonicalize_equipment_id_accepts_other_canonical_examples()" + }, + { + "label": "test_canonicalize_equipment_id_rejects_lowercase()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L430", + "id": "unit_test_paths_test_canonicalize_equipment_id_rejects_lowercase", + "community": 83, + "norm_label": "test_canonicalize_equipment_id_rejects_lowercase()" + }, + { + "label": "test_canonicalize_equipment_id_rejects_hyphen()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L435", + "id": "unit_test_paths_test_canonicalize_equipment_id_rejects_hyphen", + "community": 83, + "norm_label": "test_canonicalize_equipment_id_rejects_hyphen()" + }, + { + "label": "test_canonicalize_equipment_id_rejects_leading_digit()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L440", + "id": "unit_test_paths_test_canonicalize_equipment_id_rejects_leading_digit", + "community": 83, + "norm_label": "test_canonicalize_equipment_id_rejects_leading_digit()" + }, + { + "label": "test_canonicalize_equipment_id_rejects_space()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L445", + "id": "unit_test_paths_test_canonicalize_equipment_id_rejects_space", + "community": 83, + "norm_label": "test_canonicalize_equipment_id_rejects_space()" + }, + { + "label": "test_canonicalize_equipment_id_rejects_non_ascii()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L450", + "id": "unit_test_paths_test_canonicalize_equipment_id_rejects_non_ascii", + "community": 83, + "norm_label": "test_canonicalize_equipment_id_rejects_non_ascii()" + }, + { + "label": "test_canonicalize_equipment_id_rejects_too_long()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L455", + "id": "unit_test_paths_test_canonicalize_equipment_id_rejects_too_long", + "community": 83, + "norm_label": "test_canonicalize_equipment_id_rejects_too_long()" + }, + { + "label": "test_canonicalize_equipment_id_accepts_max_length()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L463", + "id": "unit_test_paths_test_canonicalize_equipment_id_accepts_max_length", + "community": 83, + "norm_label": "test_canonicalize_equipment_id_accepts_max_length()" + }, + { + "label": "test_canonicalize_equipment_id_rejects_empty()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L468", + "id": "unit_test_paths_test_canonicalize_equipment_id_rejects_empty", + "community": 83, + "norm_label": "test_canonicalize_equipment_id_rejects_empty()" + }, + { + "label": "test_canonicalize_equipment_id_rejects_none()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L473", + "id": "unit_test_paths_test_canonicalize_equipment_id_rejects_none", + "community": 83, + "norm_label": "test_canonicalize_equipment_id_rejects_none()" + }, + { + "label": "test_canonicalize_equipment_id_rejects_int()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L480", + "id": "unit_test_paths_test_canonicalize_equipment_id_rejects_int", + "community": 83, + "norm_label": "test_canonicalize_equipment_id_rejects_int()" + }, + { + "label": "test_canonicalize_equipment_id_does_not_mutate_input()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L488", + "id": "unit_test_paths_test_canonicalize_equipment_id_does_not_mutate_input", + "community": 83, + "norm_label": "test_canonicalize_equipment_id_does_not_mutate_input()" + }, + { + "label": "test_compose_run_path_experimental()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L506", + "id": "unit_test_paths_test_compose_run_path_experimental", + "community": 162, + "norm_label": "test_compose_run_path_experimental()" + }, + { + "label": "test_compose_run_path_test()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L518", + "id": "unit_test_paths_test_compose_run_path_test", + "community": 162, + "norm_label": "test_compose_run_path_test()" + }, + { + "label": "test_compose_run_path_strftime_format()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L530", + "id": "unit_test_paths_test_compose_run_path_strftime_format", + "community": 162, + "norm_label": "test_compose_run_path_strftime_format()" + }, + { + "label": "test_compose_run_path_experimental_under_runs_subdir()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L547", + "id": "unit_test_paths_test_compose_run_path_experimental_under_runs_subdir", + "community": 162, + "norm_label": "test_compose_run_path_experimental_under_runs_subdir()" + }, + { + "label": "test_compose_run_path_same_minute_collision_returns_same_path()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L560", + "id": "unit_test_paths_test_compose_run_path_same_minute_collision_returns_same_path", + "community": 162, + "norm_label": "test_compose_run_path_same_minute_collision_returns_same_path()" + }, + { + "label": "test_compose_run_path_rejects_invalid_equipment_id()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L581", + "id": "unit_test_paths_test_compose_run_path_rejects_invalid_equipment_id", + "community": 162, + "norm_label": "test_compose_run_path_rejects_invalid_equipment_id()" + }, + { + "label": "test_compose_run_path_rejects_unsafe_project_name()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L592", + "id": "unit_test_paths_test_compose_run_path_rejects_unsafe_project_name", + "community": 162, + "norm_label": "test_compose_run_path_rejects_unsafe_project_name()" + }, + { + "label": "test_compose_project_path_basic()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L603", + "id": "unit_test_paths_test_compose_project_path_basic", + "community": 83, + "norm_label": "test_compose_project_path_basic()" + }, + { + "label": "test_compose_project_path_rejects_invalid_equipment_id()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L613", + "id": "unit_test_paths_test_compose_project_path_rejects_invalid_equipment_id", + "community": 83, + "norm_label": "test_compose_project_path_rejects_invalid_equipment_id()" + }, + { + "label": "test_compose_project_path_rejects_unsafe_project_name()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L622", + "id": "unit_test_paths_test_compose_project_path_rejects_unsafe_project_name", + "community": 83, + "norm_label": "test_compose_project_path_rejects_unsafe_project_name()" + }, + { + "label": "test_compose_run_path_rejects_non_str_project_name()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L631", + "id": "unit_test_paths_test_compose_run_path_rejects_non_str_project_name", + "community": 162, + "norm_label": "test_compose_run_path_rejects_non_str_project_name()" + }, + { + "label": "test_compose_run_path_rejects_empty_project_name()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L644", + "id": "unit_test_paths_test_compose_run_path_rejects_empty_project_name", + "community": 162, + "norm_label": "test_compose_run_path_rejects_empty_project_name()" + }, + { + "label": "test_compose_project_path_rejects_non_str_project_name()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L657", + "id": "unit_test_paths_test_compose_project_path_rejects_non_str_project_name", + "community": 83, + "norm_label": "test_compose_project_path_rejects_non_str_project_name()" + }, + { + "label": "test_validate_project_name_accepts_human_readable_names()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L672", + "id": "unit_test_paths_test_validate_project_name_accepts_human_readable_names", + "community": 221, + "norm_label": "test_validate_project_name_accepts_human_readable_names()" + }, + { + "label": "test_validate_project_name_rejects_unsafe_names()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L696", + "id": "unit_test_paths_test_validate_project_name_rejects_unsafe_names", + "community": 221, + "norm_label": "test_validate_project_name_rejects_unsafe_names()" + }, + { + "label": "test_validate_project_name_rejects_overlong_name()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L702", + "id": "unit_test_paths_test_validate_project_name_rejects_overlong_name", + "community": 221, + "norm_label": "test_validate_project_name_rejects_overlong_name()" + }, + { + "label": "test_validate_project_name_does_not_mutate_input()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L708", + "id": "unit_test_paths_test_validate_project_name_does_not_mutate_input", + "community": 221, + "norm_label": "test_validate_project_name_does_not_mutate_input()" + }, + { + "label": "test_evaluate_setup_state_no_config()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L719", + "id": "unit_test_paths_test_evaluate_setup_state_no_config", + "community": 83, + "norm_label": "test_evaluate_setup_state_no_config()" + }, + { + "label": "test_evaluate_setup_state_missing_paths()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L723", + "id": "unit_test_paths_test_evaluate_setup_state_missing_paths", + "community": 1, + "norm_label": "test_evaluate_setup_state_missing_paths()" + }, + { + "label": "test_evaluate_setup_state_missing_paths_partial()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L732", + "id": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", + "community": 1, + "norm_label": "test_evaluate_setup_state_missing_paths_partial()" + }, + { + "label": "test_evaluate_setup_state_no_equipment()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L746", + "id": "unit_test_paths_test_evaluate_setup_state_no_equipment", + "community": 1, + "norm_label": "test_evaluate_setup_state_no_equipment()" + }, + { + "label": "test_evaluate_setup_state_no_orchestrator()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L759", + "id": "unit_test_paths_test_evaluate_setup_state_no_orchestrator", + "community": 1, + "norm_label": "test_evaluate_setup_state_no_orchestrator()" + }, + { + "label": "test_evaluate_setup_state_no_orchestrator_when_only_staging_set()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L772", + "id": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", + "community": 1, + "norm_label": "test_evaluate_setup_state_no_orchestrator_when_only_staging_set()" + }, + { + "label": "test_evaluate_setup_state_blank_staging_root_is_allowed()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L788", + "id": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", + "community": 1, + "norm_label": "test_evaluate_setup_state_blank_staging_root_is_allowed()" + }, + { + "label": "test_setup_state_missing_for_no_orchestrator_lists_only_label()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L805", + "id": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", + "community": 1, + "norm_label": "test_setup_state_missing_for_no_orchestrator_lists_only_label()" + }, + { + "label": "test_evaluate_setup_state_no_lims()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L822", + "id": "unit_test_paths_test_evaluate_setup_state_no_lims", + "community": 1, + "norm_label": "test_evaluate_setup_state_no_lims()" + }, + { + "label": "test_evaluate_setup_state_lims_via_offline_catalogue()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L836", + "id": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", + "community": 1, + "norm_label": "test_evaluate_setup_state_lims_via_offline_catalogue()" + }, + { + "label": "test_evaluate_setup_state_lims_unreachable()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L856", + "id": "unit_test_paths_test_evaluate_setup_state_lims_unreachable", + "community": 146, + "norm_label": "test_evaluate_setup_state_lims_unreachable()" + }, + { + "label": "test_evaluate_setup_state_ready()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L863", + "id": "unit_test_paths_test_evaluate_setup_state_ready", + "community": 146, + "norm_label": "test_evaluate_setup_state_ready()" + }, + { + "label": "test_evaluate_setup_state_keyring_missing()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L867", + "id": "unit_test_paths_test_evaluate_setup_state_keyring_missing", + "community": 146, + "norm_label": "test_evaluate_setup_state_keyring_missing()" + }, + { + "label": "test_evaluate_setup_state_nas_keyring_missing()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L876", + "id": "unit_test_paths_test_evaluate_setup_state_nas_keyring_missing", + "community": 146, + "norm_label": "test_evaluate_setup_state_nas_keyring_missing()" + }, + { + "label": "test_evaluate_setup_state_nas_state_precedes_lims_state()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L883", + "id": "unit_test_paths_test_evaluate_setup_state_nas_state_precedes_lims_state", + "community": 146, + "norm_label": "test_evaluate_setup_state_nas_state_precedes_lims_state()" + }, + { + "label": "test_evaluate_setup_state_nas_state_resolves_once_password_added()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L895", + "id": "unit_test_paths_test_evaluate_setup_state_nas_state_resolves_once_password_added", + "community": 146, + "norm_label": "test_evaluate_setup_state_nas_state_resolves_once_password_added()" + }, + { + "label": "test_setup_state_missing_for_no_nas_credential_lists_per_equipment()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L905", + "id": "unit_test_paths_test_setup_state_missing_for_no_nas_credential_lists_per_equipment", + "community": 146, + "norm_label": "test_setup_state_missing_for_no_nas_credential_lists_per_equipment()" + }, + { + "label": "test_setup_state_next_action_for_no_nas_credential()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L919", + "id": "unit_test_paths_test_setup_state_next_action_for_no_nas_credential", + "community": 312, + "norm_label": "test_setup_state_next_action_for_no_nas_credential()" + }, + { + "label": "test_evaluate_setup_state_endpoint_only_missing_email()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L928", + "id": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", + "community": 1, + "norm_label": "test_evaluate_setup_state_endpoint_only_missing_email()" + }, + { + "label": "test_setup_state_next_action_table()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L959", + "id": "unit_test_paths_test_setup_state_next_action_table", + "community": 312, + "norm_label": "test_setup_state_next_action_table()" + }, + { + "label": "test_setup_state_missing_when_no_config()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L968", + "id": "unit_test_paths_test_setup_state_missing_when_no_config", + "community": 78, + "norm_label": "test_setup_state_missing_when_no_config()" + }, + { + "label": "test_setup_state_missing_when_ready()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L976", + "id": "unit_test_paths_test_setup_state_missing_when_ready", + "community": 146, + "norm_label": "test_setup_state_missing_when_ready()" + }, + { + "label": "test_setup_state_missing_when_lims_unreachable_returns_empty()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L980", + "id": "unit_test_paths_test_setup_state_missing_when_lims_unreachable_returns_empty", + "community": 146, + "norm_label": "test_setup_state_missing_when_lims_unreachable_returns_empty()" + }, + { + "label": "test_setup_state_missing_for_paths_lists_each_unset()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L985", + "id": "unit_test_paths_test_setup_state_missing_for_paths_lists_each_unset", + "community": 78, + "norm_label": "test_setup_state_missing_for_paths_lists_each_unset()" + }, + { + "label": "test_setup_state_missing_for_no_equipment()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L996", + "id": "unit_test_paths_test_setup_state_missing_for_no_equipment", + "community": 146, + "norm_label": "test_setup_state_missing_for_no_equipment()" + }, + { + "label": "test_setup_state_missing_for_no_lims_lists_endpoint_email()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1001", + "id": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", + "community": 1, + "norm_label": "test_setup_state_missing_for_no_lims_lists_endpoint_email()" + }, + { + "label": "test_setup_state_missing_for_missing_paths_with_none_config()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1018", + "id": "unit_test_paths_test_setup_state_missing_for_missing_paths_with_none_config", + "community": 78, + "norm_label": "test_setup_state_missing_for_missing_paths_with_none_config()" + }, + { + "label": "test_setup_state_missing_for_no_lims_with_none_config()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1029", + "id": "unit_test_paths_test_setup_state_missing_for_no_lims_with_none_config", + "community": 78, + "norm_label": "test_setup_state_missing_for_no_lims_with_none_config()" + }, + { + "label": "test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1037", + "id": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", + "community": 1, + "norm_label": "test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set()" + }, + { + "label": "test_setup_state_missing_unrecognized_state_returns_empty()", + "file_type": "code", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1063", + "id": "unit_test_paths_test_setup_state_missing_unrecognized_state_returns_empty", + "community": 78, + "norm_label": "test_setup_state_missing_unrecognized_state_returns_empty()" + }, + { + "label": "Unit tests for ``exlab_wizard.paths``. OS-aware directory helpers + equipment-i", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1", + "id": "unit_test_paths_rationale_1", + "community": 83, + "norm_label": "unit tests for ``exlab_wizard.paths``. os-aware directory helpers + equipment-i" + }, + { + "label": "Construct a minimal valid EquipmentConfig for setup-state fixtures.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L53", + "id": "unit_test_paths_rationale_53", + "community": 1, + "norm_label": "construct a minimal valid equipmentconfig for setup-state fixtures." + }, + { + "label": "Minimal orchestrator identity (Redesign \u00a73.1) for setup-state fixtures.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L71", + "id": "unit_test_paths_rationale_71", + "community": 1, + "norm_label": "minimal orchestrator identity (redesign \u00a73.1) for setup-state fixtures." + }, + { + "label": "Construct a fully READY Config (paths + equipment + LIMS endpoint+email). R", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L81", + "id": "unit_test_paths_rationale_81", + "community": 146, + "norm_label": "construct a fully ready config (paths + equipment + lims endpoint+email). r" + }, + { + "label": "Return a fake HOME under tmp_path; route ``Path.home()`` to it.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L106", + "id": "unit_test_paths_rationale_106", + "community": 83, + "norm_label": "return a fake home under tmp_path; route ``path.home()`` to it." + }, + { + "label": "The suggestion now nests under APP_NAME on every platform, so the test-mode", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L351", + "id": "unit_test_paths_rationale_351", + "community": 62, + "norm_label": "the suggestion now nests under app_name on every platform, so the test-mode" + }, + { + "label": "Unset / non-'1' values must leave the real OS dirs untouched.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L360", + "id": "unit_test_paths_rationale_360", + "community": 62, + "norm_label": "unset / non-'1' values must leave the real os dirs untouched." + }, + { + "label": "Non-str input hits the isinstance guard, not the regex.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L474", + "id": "unit_test_paths_rationale_474", + "community": 83, + "norm_label": "non-str input hits the isinstance guard, not the regex." + }, + { + "label": "Non-str input hits the isinstance guard, not the length / regex check.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L481", + "id": "unit_test_paths_rationale_481", + "community": 83, + "norm_label": "non-str input hits the isinstance guard, not the length / regex check." + }, + { + "label": "Spec contract: input must already be canonical; no silent uppercasing.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L489", + "id": "unit_test_paths_rationale_489", + "community": 83, + "norm_label": "spec contract: input must already be canonical; no silent uppercasing." + }, + { + "label": "The leaf is ISO 8601 with colons replaced by hyphens. \u00a73.1. Redesign \u00a73.4:", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L531", + "id": "unit_test_paths_rationale_531", + "community": 162, + "norm_label": "the leaf is iso 8601 with colons replaced by hyphens. \u00a73.1. redesign \u00a73.4:" + }, + { + "label": "Redesign \u00a73.4: experimental runs live under /Runs/Run_*.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L548", + "id": "unit_test_paths_rationale_548", + "community": 162, + "norm_label": "redesign \u00a73.4: experimental runs live under /runs/run_*." + }, + { + "label": "Redesign \u00a73.4: two runs in the same minute resolve to the same path (Copier", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L561", + "id": "unit_test_paths_rationale_561", + "community": 162, + "norm_label": "redesign \u00a73.4: two runs in the same minute resolve to the same path (copier" + }, + { + "label": "A non-str project_name hits the isinstance guard.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L632", + "id": "unit_test_paths_rationale_632", + "community": 162, + "norm_label": "a non-str project_name hits the isinstance guard." + }, + { + "label": "An empty-string project_name also hits the same guard.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L645", + "id": "unit_test_paths_rationale_645", + "community": 162, + "norm_label": "an empty-string project_name also hits the same guard." + }, + { + "label": "Spaces and ordinary punctuation are fine -- the name is used verbatim.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L673", + "id": "unit_test_paths_rationale_673", + "community": 221, + "norm_label": "spaces and ordinary punctuation are fine -- the name is used verbatim." + }, + { + "label": "The \u00a73.2 contract is 'used verbatim' -- no canonicalisation.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L709", + "id": "unit_test_paths_rationale_709", + "community": 221, + "norm_label": "the \u00a73.2 contract is 'used verbatim' -- no canonicalisation." + }, + { + "label": "Only one path is empty -- still INCOMPLETE_MISSING_PATHS.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L733", + "id": "unit_test_paths_rationale_733", + "community": 1, + "norm_label": "only one path is empty -- still incomplete_missing_paths." + }, + { + "label": "Only ``label`` gates orchestrator identity; a blank label trips it.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L760", + "id": "unit_test_paths_rationale_760", + "community": 1, + "norm_label": "only ``label`` gates orchestrator identity; a blank label trips it." + }, + { + "label": "A staging root without a label still trips -- staging never substitutes.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L773", + "id": "unit_test_paths_rationale_773", + "community": 1, + "norm_label": "a staging root without a label still trips -- staging never substitutes." + }, + { + "label": "staging_root is opt-in: a blank value does not block READY.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L789", + "id": "unit_test_paths_rationale_789", + "community": 1, + "norm_label": "staging_root is opt-in: a blank value does not block ready." + }, + { + "label": "The orchestrator missing-field rollup no longer mentions staging_root.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L806", + "id": "unit_test_paths_rationale_806", + "community": 1, + "norm_label": "the orchestrator missing-field rollup no longer mentions staging_root." + }, + { + "label": "Offline catalogue path satisfies the LIMS slot without endpoint+email.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L837", + "id": "unit_test_paths_rationale_837", + "community": 1, + "norm_label": "offline catalogue path satisfies the lims slot without endpoint+email." + }, + { + "label": "endpoint+email present but keyring lacks the password -> INCOMPLETE_NO_LIMS.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L868", + "id": "unit_test_paths_rationale_868", + "community": 146, + "norm_label": "endpoint+email present but keyring lacks the password -> incomplete_no_lims." + }, + { + "label": "Nas-mode equipment without its keyring entry gates with the new state.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L877", + "id": "unit_test_paths_rationale_877", + "community": 146, + "norm_label": "nas-mode equipment without its keyring entry gates with the new state." + }, + { + "label": "A configured LIMS does not mask the missing NAS credential.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L884", + "id": "unit_test_paths_rationale_884", + "community": 146, + "norm_label": "a configured lims does not mask the missing nas credential." + }, + { + "label": "Adding the keyring entry advances the state to the next gate.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L896", + "id": "unit_test_paths_rationale_896", + "community": 146, + "norm_label": "adding the keyring entry advances the state to the next gate." + }, + { + "label": "The missing list names each equipment id whose keyring entry is absent.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L906", + "id": "unit_test_paths_rationale_906", + "community": 146, + "norm_label": "the missing list names each equipment id whose keyring entry is absent." + }, + { + "label": "endpoint present but email empty -> INCOMPLETE_NO_LIMS (email is required).", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L929", + "id": "unit_test_paths_rationale_929", + "community": 1, + "norm_label": "endpoint present but email empty -> incomplete_no_lims (email is required)." + }, + { + "label": "Soft block: surfaces a banner, not a missing-field list.", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L981", + "id": "unit_test_paths_rationale_981", + "community": 146, + "norm_label": "soft block: surfaces a banner, not a missing-field list." + }, + { + "label": "When config is None but state is INCOMPLETE_MISSING_PATHS, every paths field", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1019", + "id": "unit_test_paths_rationale_1019", + "community": 78, + "norm_label": "when config is none but state is incomplete_missing_paths, every paths field" + }, + { + "label": "When config is None but state is INCOMPLETE_NO_LIMS, the whole lims block is", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1030", + "id": "unit_test_paths_rationale_1030", + "community": 78, + "norm_label": "when config is none but state is incomplete_no_lims, the whole lims block is" + }, + { + "label": "endpoint+email both filled in but no offline catalogue -> the keyring-passwo", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1038", + "id": "unit_test_paths_rationale_1038", + "community": 1, + "norm_label": "endpoint+email both filled in but no offline catalogue -> the keyring-passwo" + }, + { + "label": "Defensive fallback: any value that isn't a recognized SetupState returns an", + "file_type": "rationale", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1064", + "id": "unit_test_paths_rationale_1064", + "community": 78, + "norm_label": "defensive fallback: any value that isn't a recognized setupstate returns an" + }, + { + "label": "test_main.py", + "file_type": "code", + "source_file": "tests/unit/test_main.py", + "source_location": "L1", + "id": "tests_unit_test_main_py", + "community": 313, + "norm_label": "test_main.py" + }, + { + "label": "test_main_returns_zero()", + "file_type": "code", + "source_file": "tests/unit/test_main.py", + "source_location": "L14", + "id": "unit_test_main_test_main_returns_zero", + "community": 313, + "norm_label": "test_main_returns_zero()" + }, + { + "label": "test_main_prints_hint()", + "file_type": "code", + "source_file": "tests/unit/test_main.py", + "source_location": "L19", + "id": "unit_test_main_test_main_prints_hint", + "community": 313, + "norm_label": "test_main_prints_hint()" + }, + { + "label": "Tests for the CLI alias entry point in ``exlab_wizard.__main__``. The entry poi", + "file_type": "rationale", + "source_file": "tests/unit/test_main.py", + "source_location": "L1", + "id": "unit_test_main_rationale_1", + "community": 313, + "norm_label": "tests for the cli alias entry point in ``exlab_wizard.__main__``. the entry poi" + }, + { + "label": "test_wizard_run_page.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L1", + "id": "tests_unit_ui_test_wizard_run_page_py", + "community": 49, + "norm_label": "test_wizard_run_page.py" + }, + { + "label": "test_can_advance_template_step_requires_selection()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L34", + "id": "ui_test_wizard_run_page_test_can_advance_template_step_requires_selection", + "community": 49, + "norm_label": "test_can_advance_template_step_requires_selection()" + }, + { + "label": "test_can_advance_variables_step_always_true()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L41", + "id": "ui_test_wizard_run_page_test_can_advance_variables_step_always_true", + "community": 49, + "norm_label": "test_can_advance_variables_step_always_true()" + }, + { + "label": "test_can_advance_preview_step_blocks_on_validator_findings()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L46", + "id": "ui_test_wizard_run_page_test_can_advance_preview_step_blocks_on_validator_findings", + "community": 49, + "norm_label": "test_can_advance_preview_step_blocks_on_validator_findings()" + }, + { + "label": "test_can_advance_confirm_step_always_true()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L53", + "id": "ui_test_wizard_run_page_test_can_advance_confirm_step_always_true", + "community": 49, + "norm_label": "test_can_advance_confirm_step_always_true()" + }, + { + "label": "test_can_advance_default_step_is_project_equipment()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L58", + "id": "ui_test_wizard_run_page_test_can_advance_default_step_is_project_equipment", + "community": 49, + "norm_label": "test_can_advance_default_step_is_project_equipment()" + }, + { + "label": "test_can_advance_readme_blocks_on_partial_core_fields()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L68", + "id": "ui_test_wizard_run_page_test_can_advance_readme_blocks_on_partial_core_fields", + "community": 49, + "norm_label": "test_can_advance_readme_blocks_on_partial_core_fields()" + }, + { + "label": "test_state_run_kind_is_bound_and_drives_helpers()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L81", + "id": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", + "community": 49, + "norm_label": "test_state_run_kind_is_bound_and_drives_helpers()" + }, + { + "label": "test_preview_path_segments_experimental_uses_run_prefix()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L98", + "id": "ui_test_wizard_run_page_test_preview_path_segments_experimental_uses_run_prefix", + "community": 49, + "norm_label": "test_preview_path_segments_experimental_uses_run_prefix()" + }, + { + "label": "test_preview_path_segments_test_uses_testrun_prefix_and_folder()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L109", + "id": "ui_test_wizard_run_page_test_preview_path_segments_test_uses_testrun_prefix_and_folder", + "community": 49, + "norm_label": "test_preview_path_segments_test_uses_testrun_prefix_and_folder()" + }, + { + "label": "test_render_run_wizard_experimental_with_choices_does_not_raise()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L126", + "id": "ui_test_wizard_run_page_test_render_run_wizard_experimental_with_choices_does_not_raise", + "community": 49, + "norm_label": "test_render_run_wizard_experimental_with_choices_does_not_raise()" + }, + { + "label": "test_render_run_wizard_test_with_choices_does_not_raise()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L136", + "id": "ui_test_wizard_run_page_test_render_run_wizard_test_with_choices_does_not_raise", + "community": 49, + "norm_label": "test_render_run_wizard_test_with_choices_does_not_raise()" + }, + { + "label": "test_render_run_wizard_with_empty_choices_does_not_raise()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L146", + "id": "ui_test_wizard_run_page_test_render_run_wizard_with_empty_choices_does_not_raise", + "community": 49, + "norm_label": "test_render_run_wizard_with_empty_choices_does_not_raise()" + }, + { + "label": "test_wizard_run_step_titles_cover_every_step()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L155", + "id": "ui_test_wizard_run_page_test_wizard_run_step_titles_cover_every_step", + "community": 49, + "norm_label": "test_wizard_run_step_titles_cover_every_step()" + }, + { + "label": "Tests for the New Run Wizard helpers (gaps not covered by test_pages). ``test_p", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L1", + "id": "ui_test_wizard_run_page_rationale_1", + "community": 49, + "norm_label": "tests for the new run wizard helpers (gaps not covered by test_pages). ``test_p" + }, + { + "label": "test_components.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L1", + "id": "tests_unit_ui_test_components_py", + "community": 40, + "norm_label": "test_components.py" + }, + { + "label": "test_mode_badge_test_uses_warning_token()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L37", + "id": "ui_test_components_test_mode_badge_test_uses_warning_token", + "community": 355, + "norm_label": "test_mode_badge_test_uses_warning_token()" + }, + { + "label": "test_mode_badge_experimental_uses_navy()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L45", + "id": "ui_test_components_test_mode_badge_experimental_uses_navy", + "community": 351, + "norm_label": "test_mode_badge_experimental_uses_navy()" + }, + { + "label": "test_mode_badge_none_falls_back_to_navy_with_placeholder()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L52", + "id": "ui_test_components_test_mode_badge_none_falls_back_to_navy_with_placeholder", + "community": 357, + "norm_label": "test_mode_badge_none_falls_back_to_navy_with_placeholder()" + }, + { + "label": "test_mode_badge_accepts_label_override()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L60", + "id": "ui_test_components_test_mode_badge_accepts_label_override", + "community": 353, + "norm_label": "test_mode_badge_accepts_label_override()" + }, + { + "label": "test_test_run_badge_uses_orange_aa_text()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L72", + "id": "ui_test_components_test_test_run_badge_uses_orange_aa_text", + "community": 375, + "norm_label": "test_test_run_badge_uses_orange_aa_text()" + }, + { + "label": "test_override_badge_active_uses_sky_aa_text()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L80", + "id": "ui_test_components_test_override_badge_active_uses_sky_aa_text", + "community": 359, + "norm_label": "test_override_badge_active_uses_sky_aa_text()" + }, + { + "label": "test_override_badge_inactive_uses_muted()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L88", + "id": "ui_test_components_test_override_badge_inactive_uses_muted", + "community": 346, + "norm_label": "test_override_badge_inactive_uses_muted()" + }, + { + "label": "test_sync_status_pending_uses_muted()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L100", + "id": "ui_test_components_test_sync_status_pending_uses_muted", + "community": 40, + "norm_label": "test_sync_status_pending_uses_muted()" + }, + { + "label": "test_sync_status_synced_uses_success()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L106", + "id": "ui_test_components_test_sync_status_synced_uses_success", + "community": 40, + "norm_label": "test_sync_status_synced_uses_success()" + }, + { + "label": "test_sync_status_failed_uses_danger()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L111", + "id": "ui_test_components_test_sync_status_failed_uses_danger", + "community": 40, + "norm_label": "test_sync_status_failed_uses_danger()" + }, + { + "label": "test_sync_status_blocked_uses_warning()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L116", + "id": "ui_test_components_test_sync_status_blocked_uses_warning", + "community": 366, + "norm_label": "test_sync_status_blocked_uses_warning()" + }, + { + "label": "test_sync_status_override_uses_info()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L123", + "id": "ui_test_components_test_sync_status_override_uses_info", + "community": 40, + "norm_label": "test_sync_status_override_uses_info()" + }, + { + "label": "test_sync_status_cleaned_uses_success_with_cloud_icon()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L128", + "id": "ui_test_components_test_sync_status_cleaned_uses_success_with_cloud_icon", + "community": 356, + "norm_label": "test_sync_status_cleaned_uses_success_with_cloud_icon()" + }, + { + "label": "test_sync_status_acquiring_uses_muted()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L136", + "id": "ui_test_components_test_sync_status_acquiring_uses_muted", + "community": 347, + "norm_label": "test_sync_status_acquiring_uses_muted()" + }, + { + "label": "test_sync_status_syncing_uses_info()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L145", + "id": "ui_test_components_test_sync_status_syncing_uses_info", + "community": 361, + "norm_label": "test_sync_status_syncing_uses_info()" + }, + { + "label": "test_sync_status_on_nas_uses_muted_cloud()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L154", + "id": "ui_test_components_test_sync_status_on_nas_uses_muted_cloud", + "community": 354, + "norm_label": "test_sync_status_on_nas_uses_muted_cloud()" + }, + { + "label": "test_sync_status_retrying_with_counter()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L163", + "id": "ui_test_components_test_sync_status_retrying_with_counter", + "community": 350, + "norm_label": "test_sync_status_retrying_with_counter()" + }, + { + "label": "test_sync_status_unknown_raises()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L171", + "id": "ui_test_components_test_sync_status_unknown_raises", + "community": 369, + "norm_label": "test_sync_status_unknown_raises()" + }, + { + "label": "test_session_progress_phase_order_is_canonical()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L183", + "id": "ui_test_components_test_session_progress_phase_order_is_canonical", + "community": 352, + "norm_label": "test_session_progress_phase_order_is_canonical()" + }, + { + "label": "test_apply_frame_advances_phase_and_marks_predecessors_done()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L199", + "id": "ui_test_components_test_apply_frame_advances_phase_and_marks_predecessors_done", + "community": 40, + "norm_label": "test_apply_frame_advances_phase_and_marks_predecessors_done()" + }, + { + "label": "test_apply_frame_progress_sets_plugin_sub_row()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L207", + "id": "ui_test_components_test_apply_frame_progress_sets_plugin_sub_row", + "community": 40, + "norm_label": "test_apply_frame_progress_sets_plugin_sub_row()" + }, + { + "label": "test_apply_frame_done_completes_all_phases()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L217", + "id": "ui_test_components_test_apply_frame_done_completes_all_phases", + "community": 40, + "norm_label": "test_apply_frame_done_completes_all_phases()" + }, + { + "label": "test_apply_frame_ignores_unknown_kinds_and_phases()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L224", + "id": "ui_test_components_test_apply_frame_ignores_unknown_kinds_and_phases", + "community": 40, + "norm_label": "test_apply_frame_ignores_unknown_kinds_and_phases()" + }, + { + "label": "test_session_progress_active_phase_marked()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L231", + "id": "ui_test_components_test_session_progress_active_phase_marked", + "community": 365, + "norm_label": "test_session_progress_active_phase_marked()" + }, + { + "label": "test_session_progress_plugin_sub_row_present()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L244", + "id": "ui_test_components_test_session_progress_plugin_sub_row_present", + "community": 358, + "norm_label": "test_session_progress_plugin_sub_row_present()" + }, + { + "label": "test_credential_field_states_default_to_not_set()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L266", + "id": "ui_test_components_test_credential_field_states_default_to_not_set", + "community": 40, + "norm_label": "test_credential_field_states_default_to_not_set()" + }, + { + "label": "test_credential_field_set_state_offers_replace_and_clear()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L273", + "id": "ui_test_components_test_credential_field_set_state_offers_replace_and_clear", + "community": 40, + "norm_label": "test_credential_field_set_state_offers_replace_and_clear()" + }, + { + "label": "test_credential_field_editing_offers_save_and_cancel()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L280", + "id": "ui_test_components_test_credential_field_editing_offers_save_and_cancel", + "community": 40, + "norm_label": "test_credential_field_editing_offers_save_and_cancel()" + }, + { + "label": "test_begin_edit_from_not_set_enters_editing_remembering_not_set()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L291", + "id": "ui_test_components_test_begin_edit_from_not_set_enters_editing_remembering_not_set", + "community": 368, + "norm_label": "test_begin_edit_from_not_set_enters_editing_remembering_not_set()" + }, + { + "label": "test_begin_edit_from_set_remembers_set_as_resting()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L301", + "id": "ui_test_components_test_begin_edit_from_set_remembers_set_as_resting", + "community": 360, + "norm_label": "test_begin_edit_from_set_remembers_set_as_resting()" + }, + { + "label": "test_cancel_edit_returns_to_remembered_resting_state()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L311", + "id": "ui_test_components_test_cancel_edit_returns_to_remembered_resting_state", + "community": 40, + "norm_label": "test_cancel_edit_returns_to_remembered_resting_state()" + }, + { + "label": "test_cancel_edit_from_fresh_edit_returns_to_not_set()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L318", + "id": "ui_test_components_test_cancel_edit_from_fresh_edit_returns_to_not_set", + "community": 40, + "norm_label": "test_cancel_edit_from_fresh_edit_returns_to_not_set()" + }, + { + "label": "test_commit_edit_with_value_transitions_to_set_and_signals_save()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L325", + "id": "ui_test_components_test_commit_edit_with_value_transitions_to_set_and_signals_save", + "community": 40, + "norm_label": "test_commit_edit_with_value_transitions_to_set_and_signals_save()" + }, + { + "label": "test_commit_edit_with_empty_value_stays_editing_and_skips_save()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L333", + "id": "ui_test_components_test_commit_edit_with_empty_value_stays_editing_and_skips_save", + "community": 374, + "norm_label": "test_commit_edit_with_empty_value_stays_editing_and_skips_save()" + }, + { + "label": "test_clear_credential_returns_to_not_set()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L342", + "id": "ui_test_components_test_clear_credential_returns_to_not_set", + "community": 40, + "norm_label": "test_clear_credential_returns_to_not_set()" + }, + { + "label": "test_connection_panel_hidden_when_no_result()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L354", + "id": "ui_test_components_test_connection_panel_hidden_when_no_result", + "community": 40, + "norm_label": "test_connection_panel_hidden_when_no_result()" + }, + { + "label": "test_connection_panel_visible_after_result()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L359", + "id": "ui_test_components_test_connection_panel_visible_after_result", + "community": 40, + "norm_label": "test_connection_panel_visible_after_result()" + }, + { + "label": "test_connection_panel_failure_color_is_danger()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L371", + "id": "ui_test_components_test_connection_panel_failure_color_is_danger", + "community": 40, + "norm_label": "test_connection_panel_failure_color_is_danger()" + }, + { + "label": "test_connection_panel_stale_appends_disclaimer()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L381", + "id": "ui_test_components_test_connection_panel_stale_appends_disclaimer", + "community": 40, + "norm_label": "test_connection_panel_stale_appends_disclaimer()" + }, + { + "label": "test_filter_chips_initial_state_respects_default_on()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L393", + "id": "ui_test_components_test_filter_chips_initial_state_respects_default_on", + "community": 40, + "norm_label": "test_filter_chips_initial_state_respects_default_on()" + }, + { + "label": "test_filter_chips_toggle_flips_membership()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L403", + "id": "ui_test_components_test_filter_chips_toggle_flips_membership", + "community": 40, + "norm_label": "test_filter_chips_toggle_flips_membership()" + }, + { + "label": "test_filter_chips_list_active_preserves_definition_order()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L412", + "id": "ui_test_components_test_filter_chips_list_active_preserves_definition_order", + "community": 40, + "norm_label": "test_filter_chips_list_active_preserves_definition_order()" + }, + { + "label": "test_status_bar_segment_normal_uses_muted()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L426", + "id": "ui_test_components_test_status_bar_segment_normal_uses_muted", + "community": 40, + "norm_label": "test_status_bar_segment_normal_uses_muted()" + }, + { + "label": "test_status_bar_segment_warning_prefix_glyph()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L432", + "id": "ui_test_components_test_status_bar_segment_warning_prefix_glyph", + "community": 40, + "norm_label": "test_status_bar_segment_warning_prefix_glyph()" + }, + { + "label": "test_status_bar_segment_danger_prefix_glyph()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L440", + "id": "ui_test_components_test_status_bar_segment_danger_prefix_glyph", + "community": 40, + "norm_label": "test_status_bar_segment_danger_prefix_glyph()" + }, + { + "label": "test_banner_stack_shows_visible_and_overflow_split()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L453", + "id": "ui_test_components_test_banner_stack_shows_visible_and_overflow_split", + "community": 343, + "norm_label": "test_banner_stack_shows_visible_and_overflow_split()" + }, + { + "label": "test_operations_modal_columns_match_spec()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L489", + "id": "ui_test_components_test_operations_modal_columns_match_spec", + "community": 40, + "norm_label": "test_operations_modal_columns_match_spec()" + }, + { + "label": "test_operations_modal_sort_suspended_first_oldest_first()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L502", + "id": "ui_test_components_test_operations_modal_sort_suspended_first_oldest_first", + "community": 367, + "norm_label": "test_operations_modal_sort_suspended_first_oldest_first()" + }, + { + "label": "test_operations_modal_state_glyph_known_states()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L535", + "id": "ui_test_components_test_operations_modal_state_glyph_known_states", + "community": 40, + "norm_label": "test_operations_modal_state_glyph_known_states()" + }, + { + "label": "test_operation_row_from_session_maps_state_buckets_and_fields()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L541", + "id": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", + "community": 40, + "norm_label": "test_operation_row_from_session_maps_state_buckets_and_fields()" + }, + { + "label": "test_collect_default_values_seeds_from_declared_defaults()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L593", + "id": "ui_test_components_test_collect_default_values_seeds_from_declared_defaults", + "community": 222, + "norm_label": "test_collect_default_values_seeds_from_declared_defaults()" + }, + { + "label": "test_input_required_dialog_builds_without_raising()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L607", + "id": "ui_test_components_test_input_required_dialog_builds_without_raising", + "community": 222, + "norm_label": "test_input_required_dialog_builds_without_raising()" + }, + { + "label": "test_bandwidth_window_validates_from_before_to()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L629", + "id": "ui_test_components_test_bandwidth_window_validates_from_before_to", + "community": 40, + "norm_label": "test_bandwidth_window_validates_from_before_to()" + }, + { + "label": "test_bandwidth_window_passes_when_correct()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L636", + "id": "ui_test_components_test_bandwidth_window_passes_when_correct", + "community": 40, + "norm_label": "test_bandwidth_window_passes_when_correct()" + }, + { + "label": "test_bandwidth_overlap_detected_for_shared_day_and_time()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L643", + "id": "ui_test_components_test_bandwidth_overlap_detected_for_shared_day_and_time", + "community": 40, + "norm_label": "test_bandwidth_overlap_detected_for_shared_day_and_time()" + }, + { + "label": "test_bandwidth_no_overlap_for_disjoint_days()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L649", + "id": "ui_test_components_test_bandwidth_no_overlap_for_disjoint_days", + "community": 40, + "norm_label": "test_bandwidth_no_overlap_for_disjoint_days()" + }, + { + "label": "test_validation_summary_hard_findings_use_warning()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L660", + "id": "ui_test_components_test_validation_summary_hard_findings_use_warning", + "community": 40, + "norm_label": "test_validation_summary_hard_findings_use_warning()" + }, + { + "label": "test_validation_summary_override_takes_priority()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L667", + "id": "ui_test_components_test_validation_summary_override_takes_priority", + "community": 40, + "norm_label": "test_validation_summary_override_takes_priority()" + }, + { + "label": "test_validation_summary_first_two_excerpts_returned_in_payload()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L679", + "id": "ui_test_components_test_validation_summary_first_two_excerpts_returned_in_payload", + "community": 40, + "norm_label": "test_validation_summary_first_two_excerpts_returned_in_payload()" + }, + { + "label": "test_validation_summary_override_line_includes_attribution()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L693", + "id": "ui_test_components_test_validation_summary_override_line_includes_attribution", + "community": 40, + "norm_label": "test_validation_summary_override_line_includes_attribution()" + }, + { + "label": "test_tree_filter_archived_default_off_hides_archived()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L714", + "id": "ui_test_components_test_tree_filter_archived_default_off_hides_archived", + "community": 373, + "norm_label": "test_tree_filter_archived_default_off_hides_archived()" + }, + { + "label": "test_tree_filter_archived_chip_on_shows_archived()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L725", + "id": "ui_test_components_test_tree_filter_archived_chip_on_shows_archived", + "community": 40, + "norm_label": "test_tree_filter_archived_chip_on_shows_archived()" + }, + { + "label": "test_tree_filter_deleted_always_shown()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L734", + "id": "ui_test_components_test_tree_filter_deleted_always_shown", + "community": 348, + "norm_label": "test_tree_filter_deleted_always_shown()" + }, + { + "label": "test_tree_filter_test_runs_chip_off_hides_test_runs()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L745", + "id": "ui_test_components_test_tree_filter_test_runs_chip_off_hides_test_runs", + "community": 40, + "norm_label": "test_tree_filter_test_runs_chip_off_hides_test_runs()" + }, + { + "label": "test_tree_build_nodes_yields_canonical_kinds()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L753", + "id": "ui_test_components_test_tree_build_nodes_yields_canonical_kinds", + "community": 40, + "norm_label": "test_tree_build_nodes_yields_canonical_kinds()" + }, + { + "label": "test_tree_test_run_carries_test_badge()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L766", + "id": "ui_test_components_test_tree_test_run_carries_test_badge", + "community": 40, + "norm_label": "test_tree_test_run_carries_test_badge()" + }, + { + "label": "test_tree_run_node_propagates_sync_status()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L781", + "id": "ui_test_components_test_tree_run_node_propagates_sync_status", + "community": 344, + "norm_label": "test_tree_run_node_propagates_sync_status()" + }, + { + "label": "test_to_nicegui_nodes_cleared_run_uses_cloud_icon()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L798", + "id": "ui_test_components_test_to_nicegui_nodes_cleared_run_uses_cloud_icon", + "community": 371, + "norm_label": "test_to_nicegui_nodes_cleared_run_uses_cloud_icon()" + }, + { + "label": "test_to_nicegui_nodes_local_run_uses_local_icon()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L823", + "id": "ui_test_components_test_to_nicegui_nodes_local_run_uses_local_icon", + "community": 363, + "norm_label": "test_to_nicegui_nodes_local_run_uses_local_icon()" + }, + { + "label": "test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L849", + "id": "ui_test_components_test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon", + "community": 362, + "norm_label": "test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon()" + }, + { + "label": "test_equipment_node_relay_flag_emits_received_equipment_kind()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L871", + "id": "ui_test_components_test_equipment_node_relay_flag_emits_received_equipment_kind", + "community": 370, + "norm_label": "test_equipment_node_relay_flag_emits_received_equipment_kind()" + }, + { + "label": "test_to_nicegui_nodes_emits_testid_kind()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L885", + "id": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", + "community": 364, + "norm_label": "test_to_nicegui_nodes_emits_testid_kind()" + }, + { + "label": "test_slot_template_emits_testid_data_node_id_and_context_menus()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L909", + "id": "ui_test_components_test_slot_template_emits_testid_data_node_id_and_context_menus", + "community": 345, + "norm_label": "test_slot_template_emits_testid_data_node_id_and_context_menus()" + }, + { + "label": "test_factories_smoke_outside_nicegui()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L949", + "id": "ui_test_components_test_factories_smoke_outside_nicegui", + "community": 349, + "norm_label": "test_factories_smoke_outside_nicegui()" + }, + { + "label": "test_no_stray_ui_notify_calls_in_ui_package()", + "file_type": "code", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L982", + "id": "ui_test_components_test_no_stray_ui_notify_calls_in_ui_package", + "community": 372, + "norm_label": "test_no_stray_ui_notify_calls_in_ui_package()" + }, + { + "label": "Unit tests for the UI components. Each component exposes a pure-data ``*_props`", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L1", + "id": "ui_test_components_rationale_1", + "community": 40, + "norm_label": "unit tests for the ui components. each component exposes a pure-data ``*_props`" + }, + { + "label": "Test-mode badge maps to ``--color-warning`` (Frontend \u00a75.3).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L38", + "id": "ui_test_components_rationale_38", + "community": 355, + "norm_label": "test-mode badge maps to ``--color-warning`` (frontend \u00a75.3)." + }, + { + "label": "Experimental badge maps to ``--color-navy``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L46", + "id": "ui_test_components_rationale_46", + "community": 351, + "norm_label": "experimental badge maps to ``--color-navy``." + }, + { + "label": "A ``None`` run kind defaults to navy with a placeholder label.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L53", + "id": "ui_test_components_rationale_53", + "community": 357, + "norm_label": "a ``none`` run kind defaults to navy with a placeholder label." + }, + { + "label": "An explicit label overrides the default.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L61", + "id": "ui_test_components_rationale_61", + "community": 353, + "norm_label": "an explicit label overrides the default." + }, + { + "label": "The test-run pill uses the orange darkened-AA text variant.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L73", + "id": "ui_test_components_rationale_73", + "community": 375, + "norm_label": "the test-run pill uses the orange darkened-aa text variant." + }, + { + "label": "An active override pill uses the sky-blue AA text variant.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L81", + "id": "ui_test_components_rationale_81", + "community": 359, + "norm_label": "an active override pill uses the sky-blue aa text variant." + }, + { + "label": "An inactive override pill uses the muted gray.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L89", + "id": "ui_test_components_rationale_89", + "community": 346, + "norm_label": "an inactive override pill uses the muted gray." + }, + { + "label": "Blocked-by-validation maps to warning per Frontend \u00a72.1.4.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L117", + "id": "ui_test_components_rationale_117", + "community": 366, + "norm_label": "blocked-by-validation maps to warning per frontend \u00a72.1.4." + }, + { + "label": "Cleaned status (post-cleanup) reuses the success color with a cloud glyph.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L129", + "id": "ui_test_components_rationale_129", + "community": 356, + "norm_label": "cleaned status (post-cleanup) reuses the success color with a cloud glyph." + }, + { + "label": "``acquiring`` (new file, still settling) uses the muted token.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L137", + "id": "ui_test_components_rationale_137", + "community": 347, + "norm_label": "``acquiring`` (new file, still settling) uses the muted token." + }, + { + "label": "``syncing`` (settled, transferring) uses the info token.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L146", + "id": "ui_test_components_rationale_146", + "community": 361, + "norm_label": "``syncing`` (settled, transferring) uses the info token." + }, + { + "label": "``on_nas`` (tombstone, local copy cleared) uses a muted cloud glyph.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L155", + "id": "ui_test_components_rationale_155", + "community": 354, + "norm_label": "``on_nas`` (tombstone, local copy cleared) uses a muted cloud glyph." + }, + { + "label": "Retry counter renders as ``(N/M)`` (Frontend \u00a710.5.1).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L164", + "id": "ui_test_components_rationale_164", + "community": 350, + "norm_label": "retry counter renders as ``(n/m)`` (frontend \u00a710.5.1)." + }, + { + "label": "Unknown status values raise.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L172", + "id": "ui_test_components_rationale_172", + "community": 369, + "norm_label": "unknown status values raise." + }, + { + "label": "The phase enum order matches Frontend \u00a710.1.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L184", + "id": "ui_test_components_rationale_184", + "community": 352, + "norm_label": "the phase enum order matches frontend \u00a710.1." + }, + { + "label": "The active phase has fraction 0.5 and ``is_active``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L232", + "id": "ui_test_components_rationale_232", + "community": 365, + "norm_label": "the active phase has fraction 0.5 and ``is_active``." + }, + { + "label": "When ``running_plugins`` carries N/M, a sub-row dict is emitted. We assert", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L245", + "id": "ui_test_components_rationale_245", + "community": 358, + "norm_label": "when ``running_plugins`` carries n/m, a sub-row dict is emitted. we assert" + }, + { + "label": "Clicking *Set* opens the editor; *Cancel* must return to Not set.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L292", + "id": "ui_test_components_rationale_292", + "community": 368, + "norm_label": "clicking *set* opens the editor; *cancel* must return to not set." + }, + { + "label": "Clicking *Replace* opens the editor; *Cancel* must return to Set.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L302", + "id": "ui_test_components_rationale_302", + "community": 360, + "norm_label": "clicking *replace* opens the editor; *cancel* must return to set." + }, + { + "label": "An empty input has nothing to persist -- stay in the editor.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L334", + "id": "ui_test_components_rationale_334", + "community": 374, + "norm_label": "an empty input has nothing to persist -- stay in the editor." + }, + { + "label": "Banners exceed the 2-cap; overflow is reported.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L454", + "id": "ui_test_components_rationale_454", + "community": 343, + "norm_label": "banners exceed the 2-cap; overflow is reported." + }, + { + "label": "Suspended rows sort first, oldest started_at first (\u00a79.5).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L503", + "id": "ui_test_components_rationale_503", + "community": 367, + "norm_label": "suspended rows sort first, oldest started_at first (\u00a79.5)." + }, + { + "label": "Archived projects are hidden by default.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L715", + "id": "ui_test_components_rationale_715", + "community": 373, + "norm_label": "archived projects are hidden by default." + }, + { + "label": "Deleted-from-LIMS rows always render (Frontend \u00a73.5.3).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L735", + "id": "ui_test_components_rationale_735", + "community": 348, + "norm_label": "deleted-from-lims rows always render (frontend \u00a73.5.3)." + }, + { + "label": "``RunNode.sync_status`` flows through to the resulting ``TreeNode``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L782", + "id": "ui_test_components_rationale_782", + "community": 344, + "norm_label": "``runnode.sync_status`` flows through to the resulting ``treenode``." + }, + { + "label": "A ``cleared`` run row carries the cloud-icon URL and its sync_status. Opera", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L799", + "id": "ui_test_components_rationale_799", + "community": 371, + "norm_label": "a ``cleared`` run row carries the cloud-icon url and its sync_status. opera" + }, + { + "label": "Any non-``cleaned`` sync status (or unset) maps to the local-icon URL.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L824", + "id": "ui_test_components_rationale_824", + "community": 363, + "norm_label": "any non-``cleaned`` sync status (or unset) maps to the local-icon url." + }, + { + "label": "Equipment and project rows render without the per-row sync icon.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L850", + "id": "ui_test_components_rationale_850", + "community": 362, + "norm_label": "equipment and project rows render without the per-row sync icon." + }, + { + "label": "An ``EquipmentNode(relay=True)`` builds a ``received_equipment`` row.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L872", + "id": "ui_test_components_rationale_872", + "community": 370, + "norm_label": "an ``equipmentnode(relay=true)`` builds a ``received_equipment`` row." + }, + { + "label": "Each row carries a ``testid_kind`` matching the Playwright contract.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L886", + "id": "ui_test_components_rationale_886", + "community": 364, + "norm_label": "each row carries a ``testid_kind`` matching the playwright contract." + }, + { + "label": "The ``default-header`` template carries the per-row anchors the Playwright f", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L910", + "id": "ui_test_components_rationale_910", + "community": 345, + "norm_label": "the ``default-header`` template carries the per-row anchors the playwright f" + }, + { + "label": "Each factory emits a dict (or NiceGUI element) without crashing. The factor", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L950", + "id": "ui_test_components_rationale_950", + "community": 349, + "norm_label": "each factory emits a dict (or nicegui element) without crashing. the factor" + }, + { + "label": "The pre-commit ``no-direct-ui-notify`` rule is mirrored in tests. Any call", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L983", + "id": "ui_test_components_rationale_983", + "community": 372, + "norm_label": "the pre-commit ``no-direct-ui-notify`` rule is mirrored in tests. any call" + }, + { + "label": "test_pages.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L1", + "id": "tests_unit_ui_test_pages_py", + "community": 110, + "norm_label": "test_pages.py" + }, + { + "label": "test_welcome_card_spec_default_autostart_on()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L25", + "id": "ui_test_pages_test_welcome_card_spec_default_autostart_on", + "community": 381, + "norm_label": "test_welcome_card_spec_default_autostart_on()" + }, + { + "label": "test_welcome_card_three_bullets()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L36", + "id": "ui_test_pages_test_welcome_card_three_bullets", + "community": 378, + "norm_label": "test_welcome_card_three_bullets()" + }, + { + "label": "test_main_default_chips_match_spec()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L56", + "id": "ui_test_pages_test_main_default_chips_match_spec", + "community": 386, + "norm_label": "test_main_default_chips_match_spec()" + }, + { + "label": "test_main_chip_state_to_tree_filters_round_trip()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L66", + "id": "ui_test_pages_test_main_chip_state_to_tree_filters_round_trip", + "community": 388, + "norm_label": "test_main_chip_state_to_tree_filters_round_trip()" + }, + { + "label": "test_main_problems_badge_simple_count_when_no_soft()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L76", + "id": "ui_test_pages_test_main_problems_badge_simple_count_when_no_soft", + "community": 110, + "norm_label": "test_main_problems_badge_simple_count_when_no_soft()" + }, + { + "label": "test_main_problems_badge_compound_when_soft_present()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L81", + "id": "ui_test_pages_test_main_problems_badge_compound_when_soft_present", + "community": 110, + "norm_label": "test_main_problems_badge_compound_when_soft_present()" + }, + { + "label": "test_main_setup_incomplete_banner_uses_warning()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L86", + "id": "ui_test_pages_test_main_setup_incomplete_banner_uses_warning", + "community": 380, + "norm_label": "test_main_setup_incomplete_banner_uses_warning()" + }, + { + "label": "test_main_setup_banner_subline_tailored_for_nas_credentials()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L94", + "id": "ui_test_pages_test_main_setup_banner_subline_tailored_for_nas_credentials", + "community": 384, + "norm_label": "test_main_setup_banner_subline_tailored_for_nas_credentials()" + }, + { + "label": "test_wizard_project_seven_steps()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L109", + "id": "ui_test_pages_test_wizard_project_seven_steps", + "community": 394, + "norm_label": "test_wizard_project_seven_steps()" + }, + { + "label": "test_wizard_project_can_advance_blocks_until_lims_picked()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L117", + "id": "ui_test_pages_test_wizard_project_can_advance_blocks_until_lims_picked", + "community": 376, + "norm_label": "test_wizard_project_can_advance_blocks_until_lims_picked()" + }, + { + "label": "test_wizard_project_can_advance_blocks_until_template_picked()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L126", + "id": "ui_test_pages_test_wizard_project_can_advance_blocks_until_template_picked", + "community": 110, + "norm_label": "test_wizard_project_can_advance_blocks_until_template_picked()" + }, + { + "label": "test_wizard_project_readme_requires_core_fields()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L133", + "id": "ui_test_pages_test_wizard_project_readme_requires_core_fields", + "community": 110, + "norm_label": "test_wizard_project_readme_requires_core_fields()" + }, + { + "label": "test_wizard_project_preview_blocks_with_validator_findings()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L140", + "id": "ui_test_pages_test_wizard_project_preview_blocks_with_validator_findings", + "community": 110, + "norm_label": "test_wizard_project_preview_blocks_with_validator_findings()" + }, + { + "label": "test_wizard_project_preview_blocks_with_low_disk()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L148", + "id": "ui_test_pages_test_wizard_project_preview_blocks_with_low_disk", + "community": 385, + "norm_label": "test_wizard_project_preview_blocks_with_low_disk()" + }, + { + "label": "test_wizard_project_preview_blocks_when_plugin_host_unhealthy()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L160", + "id": "ui_test_pages_test_wizard_project_preview_blocks_when_plugin_host_unhealthy", + "community": 110, + "norm_label": "test_wizard_project_preview_blocks_when_plugin_host_unhealthy()" + }, + { + "label": "test_wizard_project_preview_passes_when_clear()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L168", + "id": "ui_test_pages_test_wizard_project_preview_passes_when_clear", + "community": 110, + "norm_label": "test_wizard_project_preview_passes_when_clear()" + }, + { + "label": "test_wizard_run_six_steps()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L182", + "id": "ui_test_pages_test_wizard_run_six_steps", + "community": 110, + "norm_label": "test_wizard_run_six_steps()" + }, + { + "label": "test_wizard_run_test_mode_title()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L186", + "id": "ui_test_pages_test_wizard_run_test_mode_title", + "community": 110, + "norm_label": "test_wizard_run_test_mode_title()" + }, + { + "label": "test_wizard_run_experimental_mode_title()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L191", + "id": "ui_test_pages_test_wizard_run_experimental_mode_title", + "community": 110, + "norm_label": "test_wizard_run_experimental_mode_title()" + }, + { + "label": "test_wizard_run_test_button_uses_warning_color()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L196", + "id": "ui_test_pages_test_wizard_run_test_button_uses_warning_color", + "community": 382, + "norm_label": "test_wizard_run_test_button_uses_warning_color()" + }, + { + "label": "test_wizard_run_experimental_button_uses_primary_color()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L204", + "id": "ui_test_pages_test_wizard_run_experimental_button_uses_primary_color", + "community": 110, + "norm_label": "test_wizard_run_experimental_button_uses_primary_color()" + }, + { + "label": "test_wizard_run_preview_test_path_highlights()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L210", + "id": "ui_test_pages_test_wizard_run_preview_test_path_highlights", + "community": 393, + "norm_label": "test_wizard_run_preview_test_path_highlights()" + }, + { + "label": "test_wizard_run_preview_experimental_no_test_marker()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L224", + "id": "ui_test_pages_test_wizard_run_preview_experimental_no_test_marker", + "community": 110, + "norm_label": "test_wizard_run_preview_experimental_no_test_marker()" + }, + { + "label": "test_wizard_run_can_advance_blocks_until_project_and_equipment()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L235", + "id": "ui_test_pages_test_wizard_run_can_advance_blocks_until_project_and_equipment", + "community": 110, + "norm_label": "test_wizard_run_can_advance_blocks_until_project_and_equipment()" + }, + { + "label": "test_wizard_run_readme_blocks_until_core_fields()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L243", + "id": "ui_test_pages_test_wizard_run_readme_blocks_until_core_fields", + "community": 110, + "norm_label": "test_wizard_run_readme_blocks_until_core_fields()" + }, + { + "label": "test_settings_nine_sections_includes_operators()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L255", + "id": "ui_test_pages_test_settings_nine_sections_includes_operators", + "community": 389, + "norm_label": "test_settings_nine_sections_includes_operators()" + }, + { + "label": "test_settings_first_incomplete_returns_canonical_first()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L268", + "id": "ui_test_pages_test_settings_first_incomplete_returns_canonical_first", + "community": 392, + "norm_label": "test_settings_first_incomplete_returns_canonical_first()" + }, + { + "label": "test_settings_first_incomplete_resolves_nas_credentials()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L275", + "id": "ui_test_pages_test_settings_first_incomplete_resolves_nas_credentials", + "community": 377, + "norm_label": "test_settings_first_incomplete_resolves_nas_credentials()" + }, + { + "label": "test_settings_save_button_label_setup_incomplete()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L283", + "id": "ui_test_pages_test_settings_save_button_label_setup_incomplete", + "community": 110, + "norm_label": "test_settings_save_button_label_setup_incomplete()" + }, + { + "label": "test_settings_save_button_label_no_changes()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L288", + "id": "ui_test_pages_test_settings_save_button_label_no_changes", + "community": 110, + "norm_label": "test_settings_save_button_label_no_changes()" + }, + { + "label": "test_settings_save_button_label_with_count_badge()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L293", + "id": "ui_test_pages_test_settings_save_button_label_with_count_badge", + "community": 110, + "norm_label": "test_settings_save_button_label_with_count_badge()" + }, + { + "label": "test_settings_section_warning_only_for_incomplete()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L298", + "id": "ui_test_pages_test_settings_section_warning_only_for_incomplete", + "community": 110, + "norm_label": "test_settings_section_warning_only_for_incomplete()" + }, + { + "label": "_sample_findings()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L309", + "id": "ui_test_pages_sample_findings", + "community": 281, + "norm_label": "_sample_findings()" + }, + { + "label": "test_problems_filter_default_shows_hard_only()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L336", + "id": "ui_test_pages_test_problems_filter_default_shows_hard_only", + "community": 281, + "norm_label": "test_problems_filter_default_shows_hard_only()" + }, + { + "label": "test_problems_filter_show_soft_when_chip_on()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L345", + "id": "ui_test_pages_test_problems_filter_show_soft_when_chip_on", + "community": 281, + "norm_label": "test_problems_filter_show_soft_when_chip_on()" + }, + { + "label": "test_problems_filter_search_path_substring()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L352", + "id": "ui_test_pages_test_problems_filter_search_path_substring", + "community": 281, + "norm_label": "test_problems_filter_search_path_substring()" + }, + { + "label": "test_problems_filter_scope_filters_by_equipment()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L358", + "id": "ui_test_pages_test_problems_filter_scope_filters_by_equipment", + "community": 281, + "norm_label": "test_problems_filter_scope_filters_by_equipment()" + }, + { + "label": "test_problems_override_reason_min_length()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L364", + "id": "ui_test_pages_test_problems_override_reason_min_length", + "community": 387, + "norm_label": "test_problems_override_reason_min_length()" + }, + { + "label": "test_problems_override_reason_max_length()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L372", + "id": "ui_test_pages_test_problems_override_reason_max_length", + "community": 390, + "norm_label": "test_problems_override_reason_max_length()" + }, + { + "label": "test_problems_override_reason_accepts_valid()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L381", + "id": "ui_test_pages_test_problems_override_reason_accepts_valid", + "community": 110, + "norm_label": "test_problems_override_reason_accepts_valid()" + }, + { + "label": "test_problems_override_reason_trims_whitespace()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L387", + "id": "ui_test_pages_test_problems_override_reason_trims_whitespace", + "community": 379, + "norm_label": "test_problems_override_reason_trims_whitespace()" + }, + { + "label": "test_problems_near_limit_flag()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L394", + "id": "ui_test_pages_test_problems_near_limit_flag", + "community": 391, + "norm_label": "test_problems_near_limit_flag()" + }, + { + "label": "test_problems_empty_state_default()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L401", + "id": "ui_test_pages_test_problems_empty_state_default", + "community": 110, + "norm_label": "test_problems_empty_state_default()" + }, + { + "label": "test_problems_empty_state_with_hidden_soft_count()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L406", + "id": "ui_test_pages_test_problems_empty_state_with_hidden_soft_count", + "community": 110, + "norm_label": "test_problems_empty_state_with_hidden_soft_count()" + }, + { + "label": "test_problems_empty_state_with_active_filter()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L412", + "id": "ui_test_pages_test_problems_empty_state_with_active_filter", + "community": 110, + "norm_label": "test_problems_empty_state_with_active_filter()" + }, + { + "label": "test_problems_chip_definitions_match_spec()", + "file_type": "code", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L418", + "id": "ui_test_pages_test_problems_chip_definitions_match_spec", + "community": 383, + "norm_label": "test_problems_chip_definitions_match_spec()" + }, + { + "label": "Unit tests for UI pages. Pages render NiceGUI elements; these tests exercise th", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L1", + "id": "ui_test_pages_rationale_1", + "community": 110, + "norm_label": "unit tests for ui pages. pages render nicegui elements; these tests exercise th" + }, + { + "label": "Welcome card defaults autostart to on (Frontend \u00a73.1.3).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L26", + "id": "ui_test_pages_rationale_26", + "community": 381, + "norm_label": "welcome card defaults autostart to on (frontend \u00a73.1.3)." + }, + { + "label": "Three bullets describing what the app does. Redesign decision 2: bullets re", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L37", + "id": "ui_test_pages_rationale_37", + "community": 378, + "norm_label": "three bullets describing what the app does. redesign decision 2: bullets re" + }, + { + "label": "Active default-on, Archived default-off, Test runs default-on.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L57", + "id": "ui_test_pages_rationale_57", + "community": 386, + "norm_label": "active default-on, archived default-off, test runs default-on." + }, + { + "label": "Translation preserves the chip state.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L67", + "id": "ui_test_pages_rationale_67", + "community": 388, + "norm_label": "translation preserves the chip state." + }, + { + "label": "Setup-incomplete banner uses ``--color-warning`` per Frontend \u00a73.1.4.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L87", + "id": "ui_test_pages_rationale_87", + "community": 380, + "norm_label": "setup-incomplete banner uses ``--color-warning`` per frontend \u00a73.1.4." + }, + { + "label": "The NAS-credential next-action points the operator at the section.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L95", + "id": "ui_test_pages_rationale_95", + "community": 384, + "norm_label": "the nas-credential next-action points the operator at the section." + }, + { + "label": "Frontend \u00a74 mandates seven steps in a fixed order.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L110", + "id": "ui_test_pages_rationale_110", + "community": 394, + "norm_label": "frontend \u00a74 mandates seven steps in a fixed order." + }, + { + "label": "Step 1 requires a LIMS short_id.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L118", + "id": "ui_test_pages_rationale_118", + "community": 376, + "norm_label": "step 1 requires a lims short_id." + }, + { + "label": "Pre-flight: less than 100 MB free aborts (Frontend \u00a710.5.4).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L149", + "id": "ui_test_pages_rationale_149", + "community": 385, + "norm_label": "pre-flight: less than 100 mb free aborts (frontend \u00a710.5.4)." + }, + { + "label": "Test-mode primary button uses ``warning`` color (Frontend \u00a75.3).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L197", + "id": "ui_test_pages_rationale_197", + "community": 382, + "norm_label": "test-mode primary button uses ``warning`` color (frontend \u00a75.3)." + }, + { + "label": "Test runs add a TestRuns/ folder and TestRun_ leaf prefix.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L211", + "id": "ui_test_pages_rationale_211", + "community": 393, + "norm_label": "test runs add a testruns/ folder and testrun_ leaf prefix." + }, + { + "label": "Settings has nine sections (Frontend \u00a77.2 + \u00a77.9 operators). The ``operator", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L256", + "id": "ui_test_pages_rationale_256", + "community": 389, + "norm_label": "settings has nine sections (frontend \u00a77.2 + \u00a77.9 operators). the ``operator" + }, + { + "label": "First incomplete section is the first per canonical order.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L269", + "id": "ui_test_pages_rationale_269", + "community": 392, + "norm_label": "first incomplete section is the first per canonical order." + }, + { + "label": "The dynamic NAS-credentials section is auto-selected when it's the gate.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L276", + "id": "ui_test_pages_rationale_276", + "community": 377, + "norm_label": "the dynamic nas-credentials section is auto-selected when it's the gate." + }, + { + "label": "Hard chip default-on; Soft default-off.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L337", + "id": "ui_test_pages_rationale_337", + "community": 281, + "norm_label": "hard chip default-on; soft default-off." + }, + { + "label": "Frontend \u00a711.5: minimum 10 chars after trim.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L365", + "id": "ui_test_pages_rationale_365", + "community": 387, + "norm_label": "frontend \u00a711.5: minimum 10 chars after trim." + }, + { + "label": "Frontend \u00a711.5: maximum 500 chars after trim.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L373", + "id": "ui_test_pages_rationale_373", + "community": 390, + "norm_label": "frontend \u00a711.5: maximum 500 chars after trim." + }, + { + "label": "Whitespace is trimmed before length check.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L388", + "id": "ui_test_pages_rationale_388", + "community": 379, + "norm_label": "whitespace is trimmed before length check." + }, + { + "label": "Within 10 of the maximum -> near-limit warning.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L395", + "id": "ui_test_pages_rationale_395", + "community": 391, + "norm_label": "within 10 of the maximum -> near-limit warning." + }, + { + "label": "Five problem-class chips per Backend \u00a78.1.1-\u00a78.1.5.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L419", + "id": "ui_test_pages_rationale_419", + "community": 383, + "norm_label": "five problem-class chips per backend \u00a78.1.1-\u00a78.1.5." + }, + { + "label": "test_mount.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1", + "id": "tests_unit_ui_test_mount_py", + "community": 51, + "norm_label": "test_mount.py" + }, + { + "label": "_deps()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L29", + "id": "ui_test_mount_deps", + "community": 45, + "norm_label": "_deps()" + }, + { + "label": "_config()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L43", + "id": "ui_test_mount_config", + "community": 42, + "norm_label": "_config()" + }, + { + "label": "_Fluent", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L79", + "id": "ui_test_mount_fluent", + "community": 1, + "norm_label": "_fluent" + }, + { + "label": ".props()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L82", + "id": "ui_test_mount_fluent_props", + "community": 1, + "norm_label": ".props()" + }, + { + "label": ".style()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L85", + "id": "ui_test_mount_fluent_style", + "community": 1, + "norm_label": ".style()" + }, + { + "label": ".classes()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L88", + "id": "ui_test_mount_fluent_classes", + "community": 1, + "norm_label": ".classes()" + }, + { + "label": ".__enter__()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L91", + "id": "ui_test_mount_fluent_enter", + "community": 1, + "norm_label": ".__enter__()" + }, + { + "label": ".__exit__()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L94", + "id": "ui_test_mount_fluent_exit", + "community": 1, + "norm_label": ".__exit__()" + }, + { + "label": "_FakeUI", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L98", + "id": "ui_test_mount_fakeui", + "community": 1, + "norm_label": "_fakeui" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L101", + "id": "ui_test_mount_fakeui_init", + "community": 1, + "norm_label": ".__init__()" + }, + { + "label": ".card()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L107", + "id": "ui_test_mount_fakeui_card", + "community": 1, + "norm_label": ".card()" + }, + { + "label": ".label()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L111", + "id": "ui_test_mount_fakeui_label", + "community": 1, + "norm_label": ".label()" + }, + { + "label": "_BoomUI", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L116", + "id": "ui_test_mount_boomui", + "community": 1, + "norm_label": "_boomui" + }, + { + "label": ".card()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L119", + "id": "ui_test_mount_boomui_card", + "community": 1, + "norm_label": ".card()" + }, + { + "label": ".label()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L123", + "id": "ui_test_mount_boomui_label", + "community": 1, + "norm_label": ".label()" + }, + { + "label": "_FakeController", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L128", + "id": "ui_test_mount_fakecontroller", + "community": 79, + "norm_label": "_fakecontroller" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L131", + "id": "ui_test_mount_fakecontroller_init", + "community": 79, + "norm_label": ".__init__()" + }, + { + "label": ".status()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L147", + "id": "ui_test_mount_fakecontroller_status", + "community": 79, + "norm_label": ".status()" + }, + { + "label": ".create_project()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L150", + "id": "ui_test_mount_fakecontroller_create_project", + "community": 79, + "norm_label": ".create_project()" + }, + { + "label": ".create_run()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L157", + "id": "ui_test_mount_fakecontroller_create_run", + "community": 79, + "norm_label": ".create_run()" + }, + { + "label": "test_is_setup_ready_false_when_deps_none()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L175", + "id": "ui_test_mount_test_is_setup_ready_false_when_deps_none", + "community": 51, + "norm_label": "test_is_setup_ready_false_when_deps_none()" + }, + { + "label": "test_is_setup_ready_false_when_config_missing()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L179", + "id": "ui_test_mount_test_is_setup_ready_false_when_config_missing", + "community": 45, + "norm_label": "test_is_setup_ready_false_when_config_missing()" + }, + { + "label": "test_is_setup_ready_false_when_keyring_missing()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L183", + "id": "ui_test_mount_test_is_setup_ready_false_when_keyring_missing", + "community": 198, + "norm_label": "test_is_setup_ready_false_when_keyring_missing()" + }, + { + "label": "test_is_setup_ready_false_when_lims_unreachable()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L194", + "id": "ui_test_mount_test_is_setup_ready_false_when_lims_unreachable", + "community": 198, + "norm_label": "test_is_setup_ready_false_when_lims_unreachable()" + }, + { + "label": "test_is_setup_ready_true_when_all_satisfied()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L204", + "id": "ui_test_mount_test_is_setup_ready_true_when_all_satisfied", + "community": 198, + "norm_label": "test_is_setup_ready_true_when_all_satisfied()" + }, + { + "label": "test_is_setup_ready_false_when_nas_credential_missing()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L214", + "id": "ui_test_mount_test_is_setup_ready_false_when_nas_credential_missing", + "community": 198, + "norm_label": "test_is_setup_ready_false_when_nas_credential_missing()" + }, + { + "label": "test_is_setup_ready_true_with_offline_catalogue_lims()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L225", + "id": "ui_test_mount_test_is_setup_ready_true_with_offline_catalogue_lims", + "community": 198, + "norm_label": "test_is_setup_ready_true_with_offline_catalogue_lims()" + }, + { + "label": "test_build_main_state_marks_incomplete_without_config()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L246", + "id": "ui_test_mount_test_build_main_state_marks_incomplete_without_config", + "community": 45, + "norm_label": "test_build_main_state_marks_incomplete_without_config()" + }, + { + "label": "test_build_main_state_sources_problems_counts_from_audit()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L255", + "id": "ui_test_mount_test_build_main_state_sources_problems_counts_from_audit", + "community": 45, + "norm_label": "test_build_main_state_sources_problems_counts_from_audit()" + }, + { + "label": "test_build_main_state_always_on_orchestrator()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L263", + "id": "ui_test_mount_test_build_main_state_always_on_orchestrator", + "community": 42, + "norm_label": "test_build_main_state_always_on_orchestrator()" + }, + { + "label": "test_operation_counts_distinguishes_panel_active_and_input_required()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L281", + "id": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", + "community": 11, + "norm_label": "test_operation_counts_distinguishes_panel_active_and_input_required()" + }, + { + "label": "test_operation_counts_zero_without_controller()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L302", + "id": "ui_test_mount_test_operation_counts_zero_without_controller", + "community": 51, + "norm_label": "test_operation_counts_zero_without_controller()" + }, + { + "label": "test_missing_sections_when_deps_none()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L311", + "id": "ui_test_mount_test_missing_sections_when_deps_none", + "community": 51, + "norm_label": "test_missing_sections_when_deps_none()" + }, + { + "label": "test_missing_sections_when_config_none()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L315", + "id": "ui_test_mount_test_missing_sections_when_config_none", + "community": 45, + "norm_label": "test_missing_sections_when_config_none()" + }, + { + "label": "test_missing_sections_with_paths_unset()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L322", + "id": "ui_test_mount_test_missing_sections_with_paths_unset", + "community": 42, + "norm_label": "test_missing_sections_with_paths_unset()" + }, + { + "label": "test_missing_sections_with_keyring_absent_reports_lims()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L331", + "id": "ui_test_mount_test_missing_sections_with_keyring_absent_reports_lims", + "community": 42, + "norm_label": "test_missing_sections_with_keyring_absent_reports_lims()" + }, + { + "label": "test_missing_sections_empty_when_fully_configured()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L336", + "id": "ui_test_mount_test_missing_sections_empty_when_fully_configured", + "community": 42, + "norm_label": "test_missing_sections_empty_when_fully_configured()" + }, + { + "label": "_nas_config()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L341", + "id": "ui_test_mount_nas_config", + "community": 198, + "norm_label": "_nas_config()" + }, + { + "label": "test_missing_sections_includes_nas_credentials_when_password_absent()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L385", + "id": "ui_test_mount_test_missing_sections_includes_nas_credentials_when_password_absent", + "community": 198, + "norm_label": "test_missing_sections_includes_nas_credentials_when_password_absent()" + }, + { + "label": "test_missing_sections_excludes_nas_credentials_when_password_present()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L394", + "id": "ui_test_mount_test_missing_sections_excludes_nas_credentials_when_password_present", + "community": 198, + "norm_label": "test_missing_sections_excludes_nas_credentials_when_password_present()" + }, + { + "label": "_RaisingValidator", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L408", + "id": "ui_test_mount_raisingvalidator", + "community": 1, + "norm_label": "_raisingvalidator" + }, + { + "label": ".audit()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L409", + "id": "ui_test_mount_raisingvalidator_audit", + "community": 1, + "norm_label": ".audit()" + }, + { + "label": "_OkValidator", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L414", + "id": "ui_test_mount_okvalidator", + "community": 1, + "norm_label": "_okvalidator" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L415", + "id": "ui_test_mount_okvalidator_init", + "community": 1, + "norm_label": ".__init__()" + }, + { + "label": ".audit()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L418", + "id": "ui_test_mount_okvalidator_audit", + "community": 1, + "norm_label": ".audit()" + }, + { + "label": "test_safe_audit_returns_empty_list_when_validator_missing()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L422", + "id": "ui_test_mount_test_safe_audit_returns_empty_list_when_validator_missing", + "community": 45, + "norm_label": "test_safe_audit_returns_empty_list_when_validator_missing()" + }, + { + "label": "test_safe_audit_swallows_validator_exception()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L426", + "id": "ui_test_mount_test_safe_audit_swallows_validator_exception", + "community": 45, + "norm_label": "test_safe_audit_swallows_validator_exception()" + }, + { + "label": "test_safe_audit_forwards_validator_output()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L434", + "id": "ui_test_mount_test_safe_audit_forwards_validator_output", + "community": 45, + "norm_label": "test_safe_audit_forwards_validator_output()" + }, + { + "label": "test_staging_state_when_staging_root_missing()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L445", + "id": "ui_test_mount_test_staging_state_when_staging_root_missing", + "community": 42, + "norm_label": "test_staging_state_when_staging_root_missing()" + }, + { + "label": "test_staging_state_none_when_no_config()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L460", + "id": "ui_test_mount_test_staging_state_none_when_no_config", + "community": 45, + "norm_label": "test_staging_state_none_when_no_config()" + }, + { + "label": "test_staging_state_returns_empty_rows_on_query_failure()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L464", + "id": "ui_test_mount_test_staging_state_returns_empty_rows_on_query_failure", + "community": 42, + "norm_label": "test_staging_state_returns_empty_rows_on_query_failure()" + }, + { + "label": "_NavSpy", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L492", + "id": "ui_test_mount_navspy", + "community": 79, + "norm_label": "_navspy" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L495", + "id": "ui_test_mount_navspy_init", + "community": 79, + "norm_label": ".__init__()" + }, + { + "label": "test_persist_config_writes_and_applies_live()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L500", + "id": "ui_test_mount_test_persist_config_writes_and_applies_live", + "community": 79, + "norm_label": "test_persist_config_writes_and_applies_live()" + }, + { + "label": "test_persist_config_returns_false_when_no_saver()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L523", + "id": "ui_test_mount_test_persist_config_returns_false_when_no_saver", + "community": 79, + "norm_label": "test_persist_config_returns_false_when_no_saver()" + }, + { + "label": "test_persist_config_returns_false_when_saver_raises()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L535", + "id": "ui_test_mount_test_persist_config_returns_false_when_saver_raises", + "community": 79, + "norm_label": "test_persist_config_returns_false_when_saver_raises()" + }, + { + "label": "test_persist_config_warns_when_saver_returns_awaitable()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L552", + "id": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", + "community": 79, + "norm_label": "test_persist_config_warns_when_saver_returns_awaitable()" + }, + { + "label": "test_persist_config_creates_staging_root_when_set()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L575", + "id": "ui_test_mount_test_persist_config_creates_staging_root_when_set", + "community": 79, + "norm_label": "test_persist_config_creates_staging_root_when_set()" + }, + { + "label": "test_persist_config_does_not_create_staging_root_when_blank()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L590", + "id": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", + "community": 79, + "norm_label": "test_persist_config_does_not_create_staging_root_when_blank()" + }, + { + "label": "test_persist_config_staging_dir_failure_is_non_fatal()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L604", + "id": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", + "community": 79, + "norm_label": "test_persist_config_staging_dir_failure_is_non_fatal()" + }, + { + "label": "test_apply_live_config_falls_back_to_setting_config()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L630", + "id": "ui_test_mount_test_apply_live_config_falls_back_to_setting_config", + "community": 45, + "norm_label": "test_apply_live_config_falls_back_to_setting_config()" + }, + { + "label": "test_render_unavailable_renders_headline_and_subline()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L656", + "id": "ui_test_mount_test_render_unavailable_renders_headline_and_subline", + "community": 51, + "norm_label": "test_render_unavailable_renders_headline_and_subline()" + }, + { + "label": "test_render_unavailable_swallows_failure()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L663", + "id": "ui_test_mount_test_render_unavailable_swallows_failure", + "community": 51, + "norm_label": "test_render_unavailable_swallows_failure()" + }, + { + "label": "test_show_toast_positive_and_negative_never_raise()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L674", + "id": "ui_test_mount_test_show_toast_positive_and_negative_never_raise", + "community": 51, + "norm_label": "test_show_toast_positive_and_negative_never_raise()" + }, + { + "label": "test_show_toast_swallows_notification_failure()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L681", + "id": "ui_test_mount_test_show_toast_swallows_notification_failure", + "community": 51, + "norm_label": "test_show_toast_swallows_notification_failure()" + }, + { + "label": "_RecordingKeyringStore", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L700", + "id": "ui_test_mount_recordingkeyringstore", + "community": 197, + "norm_label": "_recordingkeyringstore" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L703", + "id": "ui_test_mount_recordingkeyringstore_init", + "community": 197, + "norm_label": ".__init__()" + }, + { + "label": ".set_password()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L708", + "id": "ui_test_mount_recordingkeyringstore_set_password", + "community": 197, + "norm_label": ".set_password()" + }, + { + "label": ".delete_password()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L714", + "id": "ui_test_mount_recordingkeyringstore_delete_password", + "community": 197, + "norm_label": ".delete_password()" + }, + { + "label": "test_lims_credential_handlers_save_writes_under_lims_username()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L721", + "id": "ui_test_mount_test_lims_credential_handlers_save_writes_under_lims_username", + "community": 197, + "norm_label": "test_lims_credential_handlers_save_writes_under_lims_username()" + }, + { + "label": "test_lims_credential_handlers_clear_deletes_under_lims_username()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L730", + "id": "ui_test_mount_test_lims_credential_handlers_clear_deletes_under_lims_username", + "community": 197, + "norm_label": "test_lims_credential_handlers_clear_deletes_under_lims_username()" + }, + { + "label": "test_lims_credential_handlers_tolerate_missing_keyring_store()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L739", + "id": "ui_test_mount_test_lims_credential_handlers_tolerate_missing_keyring_store", + "community": 45, + "norm_label": "test_lims_credential_handlers_tolerate_missing_keyring_store()" + }, + { + "label": "test_lims_credential_handlers_swallow_backend_errors()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L748", + "id": "ui_test_mount_test_lims_credential_handlers_swallow_backend_errors", + "community": 197, + "norm_label": "test_lims_credential_handlers_swallow_backend_errors()" + }, + { + "label": "test_nas_credential_handlers_save_writes_under_nas_username()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L763", + "id": "ui_test_mount_test_nas_credential_handlers_save_writes_under_nas_username", + "community": 197, + "norm_label": "test_nas_credential_handlers_save_writes_under_nas_username()" + }, + { + "label": "test_nas_credential_handlers_clear_deletes_and_discards()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L779", + "id": "ui_test_mount_test_nas_credential_handlers_clear_deletes_and_discards", + "community": 197, + "norm_label": "test_nas_credential_handlers_clear_deletes_and_discards()" + }, + { + "label": "test_nas_credential_handlers_isolate_per_equipment_id()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L793", + "id": "ui_test_mount_test_nas_credential_handlers_isolate_per_equipment_id", + "community": 197, + "norm_label": "test_nas_credential_handlers_isolate_per_equipment_id()" + }, + { + "label": "test_nas_credential_handlers_tolerate_missing_keyring_store()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L806", + "id": "ui_test_mount_test_nas_credential_handlers_tolerate_missing_keyring_store", + "community": 45, + "norm_label": "test_nas_credential_handlers_tolerate_missing_keyring_store()" + }, + { + "label": "test_apply_autostart_noop_when_deps_none()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L819", + "id": "ui_test_mount_test_apply_autostart_noop_when_deps_none", + "community": 51, + "norm_label": "test_apply_autostart_noop_when_deps_none()" + }, + { + "label": "test_apply_autostart_noop_when_toggle_missing()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L823", + "id": "ui_test_mount_test_apply_autostart_noop_when_toggle_missing", + "community": 45, + "norm_label": "test_apply_autostart_noop_when_toggle_missing()" + }, + { + "label": "test_apply_autostart_invokes_toggle()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L827", + "id": "ui_test_mount_test_apply_autostart_invokes_toggle", + "community": 45, + "norm_label": "test_apply_autostart_invokes_toggle()" + }, + { + "label": "test_apply_autostart_returns_real_registration_state()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L834", + "id": "ui_test_mount_test_apply_autostart_returns_real_registration_state", + "community": 45, + "norm_label": "test_apply_autostart_returns_real_registration_state()" + }, + { + "label": "test_apply_autostart_swallows_toggle_failure()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L843", + "id": "ui_test_mount_test_apply_autostart_swallows_toggle_failure", + "community": 45, + "norm_label": "test_apply_autostart_swallows_toggle_failure()" + }, + { + "label": "test_templates_dir_none_when_deps_none()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L860", + "id": "ui_test_mount_test_templates_dir_none_when_deps_none", + "community": 51, + "norm_label": "test_templates_dir_none_when_deps_none()" + }, + { + "label": "test_templates_dir_none_when_config_none()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L864", + "id": "ui_test_mount_test_templates_dir_none_when_config_none", + "community": 45, + "norm_label": "test_templates_dir_none_when_config_none()" + }, + { + "label": "test_templates_dir_none_when_unset()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L868", + "id": "ui_test_mount_test_templates_dir_none_when_unset", + "community": 42, + "norm_label": "test_templates_dir_none_when_unset()" + }, + { + "label": "test_templates_dir_returns_path()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L872", + "id": "ui_test_mount_test_templates_dir_returns_path", + "community": 42, + "norm_label": "test_templates_dir_returns_path()" + }, + { + "label": "test_equipment_ids_empty_without_config()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L877", + "id": "ui_test_mount_test_equipment_ids_empty_without_config", + "community": 45, + "norm_label": "test_equipment_ids_empty_without_config()" + }, + { + "label": "test_equipment_ids_lists_configured_ids()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L881", + "id": "ui_test_mount_test_equipment_ids_lists_configured_ids", + "community": 42, + "norm_label": "test_equipment_ids_lists_configured_ids()" + }, + { + "label": "test_template_names_empty_without_templates_dir()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L893", + "id": "ui_test_mount_test_template_names_empty_without_templates_dir", + "community": 45, + "norm_label": "test_template_names_empty_without_templates_dir()" + }, + { + "label": "test_template_names_lists_summary_names()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L897", + "id": "ui_test_mount_test_template_names_lists_summary_names", + "community": 42, + "norm_label": "test_template_names_lists_summary_names()" + }, + { + "label": "test_template_names_swallows_scan_failure()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L909", + "id": "ui_test_mount_test_template_names_swallows_scan_failure", + "community": 42, + "norm_label": "test_template_names_swallows_scan_failure()" + }, + { + "label": "test_lims_projects_empty_without_config()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L929", + "id": "ui_test_mount_test_lims_projects_empty_without_config", + "community": 45, + "norm_label": "test_lims_projects_empty_without_config()" + }, + { + "label": "test_lims_projects_empty_without_catalogue_path()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L933", + "id": "ui_test_mount_test_lims_projects_empty_without_catalogue_path", + "community": 42, + "norm_label": "test_lims_projects_empty_without_catalogue_path()" + }, + { + "label": "test_lims_projects_empty_when_catalogue_missing()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L937", + "id": "ui_test_mount_test_lims_projects_empty_when_catalogue_missing", + "community": 42, + "norm_label": "test_lims_projects_empty_when_catalogue_missing()" + }, + { + "label": "test_lims_projects_reads_offline_catalogue()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L942", + "id": "ui_test_mount_test_lims_projects_reads_offline_catalogue", + "community": 42, + "norm_label": "test_lims_projects_reads_offline_catalogue()" + }, + { + "label": "test_lims_projects_swallows_read_failure()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L963", + "id": "ui_test_mount_test_lims_projects_swallows_read_failure", + "community": 42, + "norm_label": "test_lims_projects_swallows_read_failure()" + }, + { + "label": "_FakeLimsClient", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L980", + "id": "ui_test_mount_fakelimsclient", + "community": 1, + "norm_label": "_fakelimsclient" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L983", + "id": "ui_test_mount_fakelimsclient_init", + "community": 1, + "norm_label": ".__init__()" + }, + { + "label": ".list_projects()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L988", + "id": "ui_test_mount_fakelimsclient_list_projects", + "community": 1, + "norm_label": ".list_projects()" + }, + { + "label": "test_lims_projects_uses_live_lims()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L996", + "id": "ui_test_mount_test_lims_projects_uses_live_lims", + "community": 42, + "norm_label": "test_lims_projects_uses_live_lims()" + }, + { + "label": "test_lims_projects_skips_live_lims_when_unreachable()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1010", + "id": "ui_test_mount_test_lims_projects_skips_live_lims_when_unreachable", + "community": 42, + "norm_label": "test_lims_projects_skips_live_lims_when_unreachable()" + }, + { + "label": "test_lims_projects_falls_back_to_catalogue_on_live_failure()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1017", + "id": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", + "community": 42, + "norm_label": "test_lims_projects_falls_back_to_catalogue_on_live_failure()" + }, + { + "label": "test_template_questions_map_empty_without_templates_dir()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1052", + "id": "ui_test_mount_test_template_questions_map_empty_without_templates_dir", + "community": 45, + "norm_label": "test_template_questions_map_empty_without_templates_dir()" + }, + { + "label": "test_template_questions_map_resolves_questions()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1056", + "id": "ui_test_mount_test_template_questions_map_resolves_questions", + "community": 42, + "norm_label": "test_template_questions_map_resolves_questions()" + }, + { + "label": "test_template_questions_map_skips_unresolvable_template()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1077", + "id": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", + "community": 42, + "norm_label": "test_template_questions_map_skips_unresolvable_template()" + }, + { + "label": "test_await_session_awaits_pending_task()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1102", + "id": "ui_test_mount_test_await_session_awaits_pending_task", + "community": 79, + "norm_label": "test_await_session_awaits_pending_task()" + }, + { + "label": "test_await_session_without_pending_task()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1115", + "id": "ui_test_mount_test_await_session_without_pending_task", + "community": 79, + "norm_label": "test_await_session_without_pending_task()" + }, + { + "label": "test_run_creation_navigates_home_on_done()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1127", + "id": "ui_test_mount_test_run_creation_navigates_home_on_done", + "community": 79, + "norm_label": "test_run_creation_navigates_home_on_done()" + }, + { + "label": "test_run_creation_reports_failure_state()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1134", + "id": "ui_test_mount_test_run_creation_reports_failure_state", + "community": 79, + "norm_label": "test_run_creation_reports_failure_state()" + }, + { + "label": "test_run_creation_swallows_create_exception()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1142", + "id": "ui_test_mount_test_run_creation_swallows_create_exception", + "community": 79, + "norm_label": "test_run_creation_swallows_create_exception()" + }, + { + "label": "test_submit_project_toasts_when_controller_missing()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1160", + "id": "ui_test_mount_test_submit_project_toasts_when_controller_missing", + "community": 79, + "norm_label": "test_submit_project_toasts_when_controller_missing()" + }, + { + "label": "test_submit_project_toasts_without_template()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1166", + "id": "ui_test_mount_test_submit_project_toasts_without_template", + "community": 79, + "norm_label": "test_submit_project_toasts_without_template()" + }, + { + "label": "test_submit_project_builds_request_and_runs()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1174", + "id": "ui_test_mount_test_submit_project_builds_request_and_runs", + "community": 79, + "norm_label": "test_submit_project_builds_request_and_runs()" + }, + { + "label": "test_submit_run_toasts_when_controller_missing()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1195", + "id": "ui_test_mount_test_submit_run_toasts_when_controller_missing", + "community": 79, + "norm_label": "test_submit_run_toasts_when_controller_missing()" + }, + { + "label": "test_submit_run_builds_request_and_runs()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1201", + "id": "ui_test_mount_test_submit_run_builds_request_and_runs", + "community": 79, + "norm_label": "test_submit_run_builds_request_and_runs()" + }, + { + "label": "test_build_main_query_omits_empty_params()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1226", + "id": "ui_test_mount_test_build_main_query_omits_empty_params", + "community": 51, + "norm_label": "test_build_main_query_omits_empty_params()" + }, + { + "label": "test_build_main_query_url_encodes_special_chars()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1234", + "id": "ui_test_mount_test_build_main_query_url_encodes_special_chars", + "community": 51, + "norm_label": "test_build_main_query_url_encodes_special_chars()" + }, + { + "label": "test_classify_node_returns_none_for_empty_selection()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1246", + "id": "ui_test_mount_test_classify_node_returns_none_for_empty_selection", + "community": 51, + "norm_label": "test_classify_node_returns_none_for_empty_selection()" + }, + { + "label": "test_classify_node_discriminates_kinds()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1251", + "id": "ui_test_mount_test_classify_node_discriminates_kinds", + "community": 51, + "norm_label": "test_classify_node_discriminates_kinds()" + }, + { + "label": "test_classify_node_rejects_unknown_root()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1272", + "id": "ui_test_mount_test_classify_node_rejects_unknown_root", + "community": 51, + "norm_label": "test_classify_node_rejects_unknown_root()" + }, + { + "label": "test_build_metadata_payload_returns_empty_when_node_missing()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1288", + "id": "ui_test_mount_test_build_metadata_payload_returns_empty_when_node_missing", + "community": 45, + "norm_label": "test_build_metadata_payload_returns_empty_when_node_missing()" + }, + { + "label": "test_build_metadata_payload_owned_equipment_reads_config()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1294", + "id": "ui_test_mount_test_build_metadata_payload_owned_equipment_reads_config", + "community": 42, + "norm_label": "test_build_metadata_payload_owned_equipment_reads_config()" + }, + { + "label": "test_build_metadata_payload_unknown_equipment_id_returns_empty()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1312", + "id": "ui_test_mount_test_build_metadata_payload_unknown_equipment_id_returns_empty", + "community": 42, + "norm_label": "test_build_metadata_payload_unknown_equipment_id_returns_empty()" + }, + { + "label": "test_build_metadata_payload_project_scans_run_counts()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1319", + "id": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", + "community": 42, + "norm_label": "test_build_metadata_payload_project_scans_run_counts()" + }, + { + "label": "test_build_metadata_payload_run_parses_creation_json()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1338", + "id": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", + "community": 42, + "norm_label": "test_build_metadata_payload_run_parses_creation_json()" + }, + { + "label": "test_build_metadata_payload_run_missing_creation_returns_path_only()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1383", + "id": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", + "community": 42, + "norm_label": "test_build_metadata_payload_run_missing_creation_returns_path_only()" + }, + { + "label": "test_build_main_state_threads_selection_into_state()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1392", + "id": "ui_test_mount_test_build_main_state_threads_selection_into_state", + "community": 45, + "norm_label": "test_build_main_state_threads_selection_into_state()" + }, + { + "label": "test_open_in_os_returns_false_on_unhandled_platform()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1408", + "id": "ui_test_mount_test_open_in_os_returns_false_on_unhandled_platform", + "community": 51, + "norm_label": "test_open_in_os_returns_false_on_unhandled_platform()" + }, + { + "label": "test_open_in_os_linux_invokes_xdg_open()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1416", + "id": "ui_test_mount_test_open_in_os_linux_invokes_xdg_open", + "community": 51, + "norm_label": "test_open_in_os_linux_invokes_xdg_open()" + }, + { + "label": "test_open_in_os_darwin_invokes_open()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1430", + "id": "ui_test_mount_test_open_in_os_darwin_invokes_open", + "community": 51, + "norm_label": "test_open_in_os_darwin_invokes_open()" + }, + { + "label": "test_open_in_os_returns_false_when_popen_raises()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1439", + "id": "ui_test_mount_test_open_in_os_returns_false_when_popen_raises", + "community": 51, + "norm_label": "test_open_in_os_returns_false_when_popen_raises()" + }, + { + "label": "_ClipboardSpy", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1455", + "id": "ui_test_mount_clipboardspy", + "community": 1, + "norm_label": "_clipboardspy" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1456", + "id": "ui_test_mount_clipboardspy_init", + "community": 1, + "norm_label": ".__init__()" + }, + { + "label": ".write()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1459", + "id": "ui_test_mount_clipboardspy_write", + "community": 1, + "norm_label": ".write()" + }, + { + "label": "_UiSpy", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1463", + "id": "ui_test_mount_uispy", + "community": 33, + "norm_label": "_uispy" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1466", + "id": "ui_test_mount_uispy_init", + "community": 33, + "norm_label": ".__init__()" + }, + { + "label": ".__getattr__()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1479", + "id": "ui_test_mount_uispy_getattr", + "community": 33, + "norm_label": ".__getattr__()" + }, + { + "label": "test_file_context_action_open_in_os_dispatches_to_helper()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1486", + "id": "ui_test_mount_test_file_context_action_open_in_os_dispatches_to_helper", + "community": 33, + "norm_label": "test_file_context_action_open_in_os_dispatches_to_helper()" + }, + { + "label": "test_file_context_action_open_in_os_failure_toasts_negative()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1498", + "id": "ui_test_mount_test_file_context_action_open_in_os_failure_toasts_negative", + "community": 33, + "norm_label": "test_file_context_action_open_in_os_failure_toasts_negative()" + }, + { + "label": "test_file_context_action_copy_path_writes_clipboard()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1509", + "id": "ui_test_mount_test_file_context_action_copy_path_writes_clipboard", + "community": 33, + "norm_label": "test_file_context_action_copy_path_writes_clipboard()" + }, + { + "label": "test_file_context_action_unknown_action_no_raise()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1517", + "id": "ui_test_mount_test_file_context_action_unknown_action_no_raise", + "community": 33, + "norm_label": "test_file_context_action_unknown_action_no_raise()" + }, + { + "label": "test_file_context_action_empty_path_toasts_negative()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1524", + "id": "ui_test_mount_test_file_context_action_empty_path_toasts_negative", + "community": 33, + "norm_label": "test_file_context_action_empty_path_toasts_negative()" + }, + { + "label": "_StubNasSync", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1535", + "id": "ui_test_mount_stubnassync", + "community": 1, + "norm_label": "_stubnassync" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1536", + "id": "ui_test_mount_stubnassync_init", + "community": 1, + "norm_label": ".__init__()" + }, + { + "label": ".enqueue()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1539", + "id": "ui_test_mount_stubnassync_enqueue", + "community": 1, + "norm_label": ".enqueue()" + }, + { + "label": "_drain_background()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1544", + "id": "ui_test_mount_drain_background", + "community": 51, + "norm_label": "_drain_background()" + }, + { + "label": "test_run_staging_action_force_sync_invokes_nas_sync_enqueue()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1559", + "id": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", + "community": 33, + "norm_label": "test_run_staging_action_force_sync_invokes_nas_sync_enqueue()" + }, + { + "label": "test_run_staging_action_force_sync_missing_nas_sync_toasts()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1572", + "id": "ui_test_mount_test_run_staging_action_force_sync_missing_nas_sync_toasts", + "community": 33, + "norm_label": "test_run_staging_action_force_sync_missing_nas_sync_toasts()" + }, + { + "label": "test_run_staging_action_no_config_toasts_negative()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1579", + "id": "ui_test_mount_test_run_staging_action_no_config_toasts_negative", + "community": 33, + "norm_label": "test_run_staging_action_no_config_toasts_negative()" + }, + { + "label": "test_run_staging_action_view_log_invokes_log_dialog()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1586", + "id": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", + "community": 33, + "norm_label": "test_run_staging_action_view_log_invokes_log_dialog()" + }, + { + "label": "test_run_staging_action_unknown_action_no_raise()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1598", + "id": "ui_test_mount_test_run_staging_action_unknown_action_no_raise", + "community": 33, + "norm_label": "test_run_staging_action_unknown_action_no_raise()" + }, + { + "label": "test_run_staging_action_clear_verified_invokes_clear()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1605", + "id": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", + "community": 33, + "norm_label": "test_run_staging_action_clear_verified_invokes_clear()" + }, + { + "label": "test_bulk_clear_verified_clears_verified_rows()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1630", + "id": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", + "community": 33, + "norm_label": "test_bulk_clear_verified_clears_verified_rows()" + }, + { + "label": "test_bulk_clear_verified_no_config_toasts_and_returns()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1659", + "id": "ui_test_mount_test_bulk_clear_verified_no_config_toasts_and_returns", + "community": 33, + "norm_label": "test_bulk_clear_verified_no_config_toasts_and_returns()" + }, + { + "label": "test_bulk_clear_verified_logs_helper_exception()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1666", + "id": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", + "community": 33, + "norm_label": "test_bulk_clear_verified_logs_helper_exception()" + }, + { + "label": "_StubTabStorage", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1688", + "id": "ui_test_mount_stubtabstorage", + "community": 1, + "norm_label": "_stubtabstorage" + }, + { + "label": "dict", + "file_type": "code", + "source_file": "", + "source_location": "", + "id": "dict", + "community": 135, + "norm_label": "dict" + }, + { + "label": "_StubApp", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1692", + "id": "ui_test_mount_stubapp", + "community": 1, + "norm_label": "_stubapp" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1695", + "id": "ui_test_mount_stubapp_init", + "community": 1, + "norm_label": ".__init__()" + }, + { + "label": "test_drive_folder_feed_returns_empty_when_no_selection()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1703", + "id": "ui_test_mount_test_drive_folder_feed_returns_empty_when_no_selection", + "community": 45, + "norm_label": "test_drive_folder_feed_returns_empty_when_no_selection()" + }, + { + "label": "test_drive_folder_feed_creates_feed_on_first_render()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1711", + "id": "ui_test_mount_test_drive_folder_feed_creates_feed_on_first_render", + "community": 45, + "norm_label": "test_drive_folder_feed_creates_feed_on_first_render()" + }, + { + "label": "test_drive_folder_feed_converts_cached_payload_to_entries()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1724", + "id": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", + "community": 45, + "norm_label": "test_drive_folder_feed_converts_cached_payload_to_entries()" + }, + { + "label": "test_fetch_folder_async_skips_when_coord_says_skip()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1766", + "id": "ui_test_mount_test_fetch_folder_async_skips_when_coord_says_skip", + "community": 45, + "norm_label": "test_fetch_folder_async_skips_when_coord_says_skip()" + }, + { + "label": "test_fetch_folder_async_records_refresh_on_success()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1783", + "id": "ui_test_mount_test_fetch_folder_async_records_refresh_on_success", + "community": 45, + "norm_label": "test_fetch_folder_async_records_refresh_on_success()" + }, + { + "label": "test_fetch_folder_async_swallows_helper_exceptions()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1802", + "id": "ui_test_mount_test_fetch_folder_async_swallows_helper_exceptions", + "community": 45, + "norm_label": "test_fetch_folder_async_swallows_helper_exceptions()" + }, + { + "label": "test_open_log_dialog_no_queue_job_renders_dialog()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1820", + "id": "ui_test_mount_test_open_log_dialog_no_queue_job_renders_dialog", + "community": 33, + "norm_label": "test_open_log_dialog_no_queue_job_renders_dialog()" + }, + { + "label": "test_open_log_dialog_with_queue_job_renders_dialog()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1829", + "id": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", + "community": 33, + "norm_label": "test_open_log_dialog_with_queue_job_renders_dialog()" + }, + { + "label": "test_build_metadata_payload_returns_empty_on_builder_exception()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1855", + "id": "ui_test_mount_test_build_metadata_payload_returns_empty_on_builder_exception", + "community": 42, + "norm_label": "test_build_metadata_payload_returns_empty_on_builder_exception()" + }, + { + "label": "test_metadata_for_relay_equipment_emits_id_label_source_host()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1868", + "id": "ui_test_mount_test_metadata_for_relay_equipment_emits_id_label_source_host", + "community": 42, + "norm_label": "test_metadata_for_relay_equipment_emits_id_label_source_host()" + }, + { + "label": "test_metadata_for_relay_equipment_unknown_id_falls_back()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1886", + "id": "ui_test_mount_test_metadata_for_relay_equipment_unknown_id_falls_back", + "community": 42, + "norm_label": "test_metadata_for_relay_equipment_unknown_id_falls_back()" + }, + { + "label": "test_metadata_for_project_returns_empty_for_single_segment_id()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1893", + "id": "ui_test_mount_test_metadata_for_project_returns_empty_for_single_segment_id", + "community": 42, + "norm_label": "test_metadata_for_project_returns_empty_for_single_segment_id()" + }, + { + "label": "test_count_dir_children_returns_zero_for_missing_dir()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1899", + "id": "ui_test_mount_test_count_dir_children_returns_zero_for_missing_dir", + "community": 51, + "norm_label": "test_count_dir_children_returns_zero_for_missing_dir()" + }, + { + "label": "test_count_dir_children_filters_by_prefix()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1904", + "id": "ui_test_mount_test_count_dir_children_filters_by_prefix", + "community": 51, + "norm_label": "test_count_dir_children_filters_by_prefix()" + }, + { + "label": "test_metadata_for_run_returns_partial_on_decode_failure()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1913", + "id": "ui_test_mount_test_metadata_for_run_returns_partial_on_decode_failure", + "community": 51, + "norm_label": "test_metadata_for_run_returns_partial_on_decode_failure()" + }, + { + "label": "test_run_staging_action_force_sync_exception_path_no_raise()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1924", + "id": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", + "community": 33, + "norm_label": "test_run_staging_action_force_sync_exception_path_no_raise()" + }, + { + "label": "test_run_staging_action_clear_verified_exception_path_no_raise()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1940", + "id": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", + "community": 33, + "norm_label": "test_run_staging_action_clear_verified_exception_path_no_raise()" + }, + { + "label": "test_run_staging_action_clear_verified_zero_files_branch()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1956", + "id": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", + "community": 33, + "norm_label": "test_run_staging_action_clear_verified_zero_files_branch()" + }, + { + "label": "test_file_context_action_clipboard_failure_toasts()", + "file_type": "code", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1969", + "id": "ui_test_mount_test_file_context_action_clipboard_failure_toasts", + "community": 33, + "norm_label": "test_file_context_action_clipboard_failure_toasts()" + }, + { + "label": "Tests for ``exlab_wizard.ui.mount`` helpers. The ``@ui.page(...)`` decorators i", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1", + "id": "ui_test_mount_rationale_1", + "community": 51, + "norm_label": "tests for ``exlab_wizard.ui.mount`` helpers. the ``@ui.page(...)`` decorators i" + }, + { + "label": "Build a minimal duck-typed AppDependencies stand-in.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L30", + "id": "ui_test_mount_rationale_30", + "community": 45, + "norm_label": "build a minimal duck-typed appdependencies stand-in." + }, + { + "label": "Chainable no-op stand-in for a NiceGUI element.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L80", + "id": "ui_test_mount_rationale_80", + "community": 1, + "norm_label": "chainable no-op stand-in for a nicegui element." + }, + { + "label": "Records cards / labels and exposes a ``navigate.to`` spy.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L99", + "id": "ui_test_mount_rationale_99", + "community": 1, + "norm_label": "records cards / labels and exposes a ``navigate.to`` spy." + }, + { + "label": "A ``ui`` whose element factories raise -- exercises render except paths.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L117", + "id": "ui_test_mount_rationale_117", + "community": 1, + "norm_label": "a ``ui`` whose element factories raise -- exercises render except paths." + }, + { + "label": "Duck-typed CreationController for the create-flow helpers.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L129", + "id": "ui_test_mount_rationale_129", + "community": 79, + "norm_label": "duck-typed creationcontroller for the create-flow helpers." + }, + { + "label": "Live-LIMS branch with the keyring password absent -> not ready.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L184", + "id": "ui_test_mount_rationale_184", + "community": 198, + "norm_label": "live-lims branch with the keyring password absent -> not ready." + }, + { + "label": "A registered nas-mode equipment without its keyring password blocks ready.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L215", + "id": "ui_test_mount_rationale_215", + "community": 198, + "norm_label": "a registered nas-mode equipment without its keyring password blocks ready." + }, + { + "label": "Regression: LIMS satisfied via the offline catalogue (no keyring password) m", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L226", + "id": "ui_test_mount_rationale_226", + "community": 198, + "norm_label": "regression: lims satisfied via the offline catalogue (no keyring password) m" + }, + { + "label": "Redesign \u00a73.1: the orchestrator pipeline is unconditional.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L264", + "id": "ui_test_mount_rationale_264", + "community": 42, + "norm_label": "redesign \u00a73.1: the orchestrator pipeline is unconditional." + }, + { + "label": "Real Config with one password-requiring nas-mode equipment. ``offline_catal", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L342", + "id": "ui_test_mount_rationale_342", + "community": 198, + "norm_label": "real config with one password-requiring nas-mode equipment. ``offline_catal" + }, + { + "label": "Redesign \u00a73.1: orchestrator pipeline is always on, but a missing staging_roo", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L446", + "id": "ui_test_mount_rationale_446", + "community": 42, + "norm_label": "redesign \u00a73.1: orchestrator pipeline is always on, but a missing staging_roo" + }, + { + "label": "Minimal stand-in for the NiceGUI ``ui`` object's navigate surface.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L493", + "id": "ui_test_mount_rationale_493", + "community": 79, + "norm_label": "minimal stand-in for the nicegui ``ui`` object's navigate surface." + }, + { + "label": "A successful save persists, then hot-reloads the live components. The old b", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L501", + "id": "ui_test_mount_rationale_501", + "community": 79, + "norm_label": "a successful save persists, then hot-reloads the live components. the old b" + }, + { + "label": "Opt-in: a saved non-empty staging_root is created on save.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L578", + "id": "ui_test_mount_rationale_578", + "community": 79, + "norm_label": "opt-in: a saved non-empty staging_root is created on save." + }, + { + "label": "Blank staging_root creates nothing -- the device is not a staging PC.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L593", + "id": "ui_test_mount_rationale_593", + "community": 79, + "norm_label": "blank staging_root creates nothing -- the device is not a staging pc." + }, + { + "label": "An ensure_dir failure warns but keeps the persisted config.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L607", + "id": "ui_test_mount_rationale_607", + "community": 79, + "norm_label": "an ensure_dir failure warns but keeps the persisted config." + }, + { + "label": "If the coordinator raises wholesale, the live config is still kept.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L634", + "id": "ui_test_mount_rationale_634", + "community": 45, + "norm_label": "if the coordinator raises wholesale, the live config is still kept." + }, + { + "label": "Keyring-store stand-in that records the calls the handlers make.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L701", + "id": "ui_test_mount_rationale_701", + "community": 197, + "norm_label": "keyring-store stand-in that records the calls the handlers make." + }, + { + "label": "A best-effort keyring build can fail; the handlers must not crash.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L740", + "id": "ui_test_mount_rationale_740", + "community": 45, + "norm_label": "a best-effort keyring build can fail; the handlers must not crash." + }, + { + "label": "A raising keyring backend surfaces a toast, not an unhandled crash.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L749", + "id": "ui_test_mount_rationale_749", + "community": 197, + "norm_label": "a raising keyring backend surfaces a toast, not an unhandled crash." + }, + { + "label": "Async ``list_projects`` stub for the live-LIMS picker path.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L981", + "id": "ui_test_mount_rationale_981", + "community": 1, + "norm_label": "async ``list_projects`` stub for the live-lims picker path." + }, + { + "label": "Both empty -> empty string. One present -> single param.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1227", + "id": "ui_test_mount_rationale_1227", + "community": 51, + "norm_label": "both empty -> empty string. one present -> single param." + }, + { + "label": "Project names with spaces / special chars survive the round trip.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1235", + "id": "ui_test_mount_rationale_1235", + "community": 51, + "norm_label": "project names with spaces / special chars survive the round trip." + }, + { + "label": "Equipment / project / run / received_equipment all classify correctly.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1252", + "id": "ui_test_mount_rationale_1252", + "community": 51, + "norm_label": "equipment / project / run / received_equipment all classify correctly." + }, + { + "label": "A node id whose root is not in the hierarchy returns ``(None, False)``. Gua", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1273", + "id": "ui_test_mount_rationale_1273", + "community": 51, + "norm_label": "a node id whose root is not in the hierarchy returns ``(none, false)``. gua" + }, + { + "label": "An equipment node payload pulls fields from config.equipment[id].", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1295", + "id": "ui_test_mount_rationale_1295", + "community": 42, + "norm_label": "an equipment node payload pulls fields from config.equipment[id]." + }, + { + "label": "Asking for a node that isn't in config.equipment returns ``{}``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1313", + "id": "ui_test_mount_rationale_1313", + "community": 42, + "norm_label": "asking for a node that isn't in config.equipment returns ``{}``." + }, + { + "label": "The project payload counts Run_* and TestRun_* directories.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1320", + "id": "ui_test_mount_rationale_1320", + "community": 42, + "norm_label": "the project payload counts run_* and testrun_* directories." + }, + { + "label": "The run payload decodes creation.json into the metadata fields.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1339", + "id": "ui_test_mount_rationale_1339", + "community": 42, + "norm_label": "the run payload decodes creation.json into the metadata fields." + }, + { + "label": "A run dir without a creation.json yields {path, name}, not crash.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1384", + "id": "ui_test_mount_rationale_1384", + "community": 42, + "norm_label": "a run dir without a creation.json yields {path, name}, not crash." + }, + { + "label": "The selected-node fields end up on MainPageState for the renderer.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1393", + "id": "ui_test_mount_rationale_1393", + "community": 45, + "norm_label": "the selected-node fields end up on mainpagestate for the renderer." + }, + { + "label": "An unknown sys.platform falls through to False so the toast can warn.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1411", + "id": "ui_test_mount_rationale_1411", + "community": 51, + "norm_label": "an unknown sys.platform falls through to false so the toast can warn." + }, + { + "label": "Linux dispatches to xdg-open via subprocess.Popen.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1417", + "id": "ui_test_mount_rationale_1417", + "community": 51, + "norm_label": "linux dispatches to xdg-open via subprocess.popen." + }, + { + "label": "macOS dispatches to the ``open`` command.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1431", + "id": "ui_test_mount_rationale_1431", + "community": 51, + "norm_label": "macos dispatches to the ``open`` command." + }, + { + "label": "A subprocess failure is caught and surfaces False so the caller can toast.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1440", + "id": "ui_test_mount_rationale_1440", + "community": 51, + "norm_label": "a subprocess failure is caught and surfaces false so the caller can toast." + }, + { + "label": "Minimal NiceGUI surface stand-in: clipboard + navigate.to + notify.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1464", + "id": "ui_test_mount_rationale_1464", + "community": 33, + "norm_label": "minimal nicegui surface stand-in: clipboard + navigate.to + notify." + }, + { + "label": "``open_in_os`` action calls the platform opener and reports success.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1489", + "id": "ui_test_mount_rationale_1489", + "community": 33, + "norm_label": "``open_in_os`` action calls the platform opener and reports success." + }, + { + "label": "When the opener returns False the action surfaces a negative toast.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1501", + "id": "ui_test_mount_rationale_1501", + "community": 33, + "norm_label": "when the opener returns false the action surfaces a negative toast." + }, + { + "label": "``copy_path`` writes the entry path to the NiceGUI clipboard.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1510", + "id": "ui_test_mount_rationale_1510", + "community": 33, + "norm_label": "``copy_path`` writes the entry path to the nicegui clipboard." + }, + { + "label": "An unknown action verb is logged + toasted without raising.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1518", + "id": "ui_test_mount_rationale_1518", + "community": 33, + "norm_label": "an unknown action verb is logged + toasted without raising." + }, + { + "label": "An entry with no path triggers the early-return toast.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1525", + "id": "ui_test_mount_rationale_1525", + "community": 33, + "norm_label": "an entry with no path triggers the early-return toast." + }, + { + "label": "Run any pending mount background tasks to completion.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1545", + "id": "ui_test_mount_rationale_1545", + "community": 51, + "norm_label": "run any pending mount background tasks to completion." + }, + { + "label": "Force-sync routes to ``deps.nas_sync.enqueue`` with the run path.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1560", + "id": "ui_test_mount_rationale_1560", + "community": 33, + "norm_label": "force-sync routes to ``deps.nas_sync.enqueue`` with the run path." + }, + { + "label": "Force-sync without a wired NAS sync surfaces a negative toast (no raise).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1573", + "id": "ui_test_mount_rationale_1573", + "community": 33, + "norm_label": "force-sync without a wired nas sync surfaces a negative toast (no raise)." + }, + { + "label": "The early-exit when config is missing keeps the action a no-op.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1580", + "id": "ui_test_mount_rationale_1580", + "community": 33, + "norm_label": "the early-exit when config is missing keeps the action a no-op." + }, + { + "label": "``view_log`` dispatches to the dialog opener helper.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1589", + "id": "ui_test_mount_rationale_1589", + "community": 33, + "norm_label": "``view_log`` dispatches to the dialog opener helper." + }, + { + "label": "An unknown action verb is reported but doesn't raise.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1599", + "id": "ui_test_mount_rationale_1599", + "community": 33, + "norm_label": "an unknown action verb is reported but doesn't raise." + }, + { + "label": "``clear_verified`` deletes the run directory via the local helper.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1608", + "id": "ui_test_mount_rationale_1608", + "community": 33, + "norm_label": "``clear_verified`` deletes the run directory via the local helper." + }, + { + "label": "The bulk action clears every ``synced`` row and toasts the count.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1633", + "id": "ui_test_mount_rationale_1633", + "community": 33, + "norm_label": "the bulk action clears every ``synced`` row and toasts the count." + }, + { + "label": "The early-exit when config is missing produces a toast, no task.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1660", + "id": "ui_test_mount_rationale_1660", + "community": 33, + "norm_label": "the early-exit when config is missing produces a toast, no task." + }, + { + "label": "An exception from the clear sweep is caught + toasted.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1669", + "id": "ui_test_mount_rationale_1669", + "community": 33, + "norm_label": "an exception from the clear sweep is caught + toasted." + }, + { + "label": "Lightweight ``app`` stand-in carrying ``storage.tab``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1693", + "id": "ui_test_mount_rationale_1693", + "community": 1, + "norm_label": "lightweight ``app`` stand-in carrying ``storage.tab``." + }, + { + "label": "Without a selected node the feed isn't started and returns ``[]``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1704", + "id": "ui_test_mount_rationale_1704", + "community": 45, + "norm_label": "without a selected node the feed isn't started and returns ``[]``." + }, + { + "label": "The first call mounts a FolderFeed + RefreshCoordinator on tab storage.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1714", + "id": "ui_test_mount_rationale_1714", + "community": 45, + "norm_label": "the first call mounts a folderfeed + refreshcoordinator on tab storage." + }, + { + "label": "When the feed's last_payload is set, entries are projected into FileListEntr", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1727", + "id": "ui_test_mount_rationale_1727", + "community": 45, + "norm_label": "when the feed's last_payload is set, entries are projected into filelistentr" + }, + { + "label": "The fetch is a no-op when RefreshCoordinator just walked the tree.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1769", + "id": "ui_test_mount_rationale_1769", + "community": 45, + "norm_label": "the fetch is a no-op when refreshcoordinator just walked the tree." + }, + { + "label": "A successful scan records the refresh on the coordinator.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1786", + "id": "ui_test_mount_rationale_1786", + "community": 45, + "norm_label": "a successful scan records the refresh on the coordinator." + }, + { + "label": "A scan failure returns ``None`` so the feed keeps polling.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1805", + "id": "ui_test_mount_rationale_1805", + "community": 45, + "norm_label": "a scan failure returns ``none`` so the feed keeps polling." + }, + { + "label": "A run with no sync-queue job still renders a dialog without raising.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1821", + "id": "ui_test_mount_rationale_1821", + "community": 33, + "norm_label": "a run with no sync-queue job still renders a dialog without raising." + }, + { + "label": "A run with a sync-queue job renders its state without raising.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1830", + "id": "ui_test_mount_rationale_1830", + "community": 33, + "norm_label": "a run with a sync-queue job renders its state without raising." + }, + { + "label": "Any exception raised by a per-kind builder is logged + swallowed.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1858", + "id": "ui_test_mount_rationale_1858", + "community": 42, + "norm_label": "any exception raised by a per-kind builder is logged + swallowed." + }, + { + "label": "The relay payload pulls id+label from build_received_equipment_nodes.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1871", + "id": "ui_test_mount_rationale_1871", + "community": 42, + "norm_label": "the relay payload pulls id+label from build_received_equipment_nodes." + }, + { + "label": "An unknown relay id still produces a payload (best-effort label).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1887", + "id": "ui_test_mount_rationale_1887", + "community": 42, + "norm_label": "an unknown relay id still produces a payload (best-effort label)." + }, + { + "label": "A node id without an equipment/project split returns ``{}``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1894", + "id": "ui_test_mount_rationale_1894", + "community": 42, + "norm_label": "a node id without an equipment/project split returns ``{}``." + }, + { + "label": "A missing parent dir returns 0 (no FS pre-check needed).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1900", + "id": "ui_test_mount_rationale_1900", + "community": 51, + "norm_label": "a missing parent dir returns 0 (no fs pre-check needed)." + }, + { + "label": "Only directory children whose names start with the prefix are counted.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1905", + "id": "ui_test_mount_rationale_1905", + "community": 51, + "norm_label": "only directory children whose names start with the prefix are counted." + }, + { + "label": "A corrupt creation.json yields {path, name}, never crashes.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1914", + "id": "ui_test_mount_rationale_1914", + "community": 51, + "norm_label": "a corrupt creation.json yields {path, name}, never crashes." + }, + { + "label": "When nas_sync.enqueue raises, the background task swallows + toasts.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1927", + "id": "ui_test_mount_rationale_1927", + "community": 33, + "norm_label": "when nas_sync.enqueue raises, the background task swallows + toasts." + }, + { + "label": "When the clear helper raises, the background task swallows + toasts.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1943", + "id": "ui_test_mount_rationale_1943", + "community": 33, + "norm_label": "when the clear helper raises, the background task swallows + toasts." + }, + { + "label": "The 0-file path reports ``already cleared`` rather than ``cleared N``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1959", + "id": "ui_test_mount_rationale_1959", + "community": 33, + "norm_label": "the 0-file path reports ``already cleared`` rather than ``cleared n``." + }, + { + "label": "A clipboard write failure is caught and reported as a negative toast.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1972", + "id": "ui_test_mount_rationale_1972", + "community": 33, + "norm_label": "a clipboard write failure is caught and reported as a negative toast." + }, + { + "label": "test_settings_page.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L1", + "id": "tests_unit_ui_test_settings_page_py", + "community": 30, + "norm_label": "test_settings_page.py" + }, + { + "label": "test_build_draft_from_none_yields_defaults()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L27", + "id": "ui_test_settings_page_test_build_draft_from_none_yields_defaults", + "community": 30, + "norm_label": "test_build_draft_from_none_yields_defaults()" + }, + { + "label": "test_build_draft_copies_existing_config()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L36", + "id": "ui_test_settings_page_test_build_draft_copies_existing_config", + "community": 30, + "norm_label": "test_build_draft_copies_existing_config()" + }, + { + "label": "test_draft_edits_do_not_leak_into_source()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L49", + "id": "ui_test_settings_page_test_draft_edits_do_not_leak_into_source", + "community": 30, + "norm_label": "test_draft_edits_do_not_leak_into_source()" + }, + { + "label": "test_finalize_coerces_widget_floats_back_to_int()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L60", + "id": "ui_test_settings_page_test_finalize_coerces_widget_floats_back_to_int", + "community": 30, + "norm_label": "test_finalize_coerces_widget_floats_back_to_int()" + }, + { + "label": "test_finalize_round_trips_edited_scalar_fields()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L73", + "id": "ui_test_settings_page_test_finalize_round_trips_edited_scalar_fields", + "community": 30, + "norm_label": "test_finalize_round_trips_edited_scalar_fields()" + }, + { + "label": "test_finalize_allows_blank_staging_root()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L90", + "id": "ui_test_settings_page_test_finalize_allows_blank_staging_root", + "community": 30, + "norm_label": "test_finalize_allows_blank_staging_root()" + }, + { + "label": "test_finalize_raises_on_invalid_edit()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L104", + "id": "ui_test_settings_page_test_finalize_raises_on_invalid_edit", + "community": 30, + "norm_label": "test_finalize_raises_on_invalid_edit()" + }, + { + "label": "test_lims_credential_initial_state_not_set_when_keyring_empty()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L113", + "id": "ui_test_settings_page_test_lims_credential_initial_state_not_set_when_keyring_empty", + "community": 30, + "norm_label": "test_lims_credential_initial_state_not_set_when_keyring_empty()" + }, + { + "label": "test_lims_credential_initial_state_set_when_keyring_has_password()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L118", + "id": "ui_test_settings_page_test_lims_credential_initial_state_set_when_keyring_has_password", + "community": 30, + "norm_label": "test_lims_credential_initial_state_set_when_keyring_has_password()" + }, + { + "label": "Tests for the settings-page config binding helpers. ``render_settings_page`` it", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L1", + "id": "ui_test_settings_page_rationale_1", + "community": 30, + "norm_label": "tests for the settings-page config binding helpers. ``render_settings_page`` it" + }, + { + "label": "staging_root is opt-in: a blank value finalizes cleanly (the field is option", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L91", + "id": "ui_test_settings_page_rationale_91", + "community": 30, + "norm_label": "staging_root is opt-in: a blank value finalizes cleanly (the field is option" + }, + { + "label": "A password already in the OS keyring opens the row in *Set*.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L119", + "id": "ui_test_settings_page_rationale_119", + "community": 30, + "norm_label": "a password already in the os keyring opens the row in *set*." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/ui/__init__.py", + "source_location": "L1", + "id": "tests_unit_ui_init_py", + "community": 324, + "norm_label": "__init__.py" + }, + { + "label": "UI package re-exports (Backend Spec \u00a74.3, Frontend Spec \u00a72). Public surface: *", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/__init__.py", + "source_location": "L1", + "id": "ui_init_rationale_1", + "community": 324, + "norm_label": "ui package re-exports (backend spec \u00a74.3, frontend spec \u00a72). public surface: *" + }, + { + "label": "test_wizard_equipment.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L1", + "id": "tests_unit_ui_test_wizard_equipment_py", + "community": 89, + "norm_label": "test_wizard_equipment.py" + }, + { + "label": "test_wizard_has_four_steps_without_signal_step()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L17", + "id": "ui_test_wizard_equipment_test_wizard_has_four_steps_without_signal_step", + "community": 89, + "norm_label": "test_wizard_has_four_steps_without_signal_step()" + }, + { + "label": "_state_filled_for()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L24", + "id": "ui_test_wizard_equipment_state_filled_for", + "community": 89, + "norm_label": "_state_filled_for()" + }, + { + "label": "test_can_advance_identity_requires_id_and_label()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L39", + "id": "ui_test_wizard_equipment_test_can_advance_identity_requires_id_and_label", + "community": 89, + "norm_label": "test_can_advance_identity_requires_id_and_label()" + }, + { + "label": "test_can_advance_identity_rejects_invalid_id()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L48", + "id": "ui_test_wizard_equipment_test_can_advance_identity_rejects_invalid_id", + "community": 89, + "norm_label": "test_can_advance_identity_rejects_invalid_id()" + }, + { + "label": "test_can_advance_paths_requires_both_roots()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L55", + "id": "ui_test_wizard_equipment_test_can_advance_paths_requires_both_roots", + "community": 89, + "norm_label": "test_can_advance_paths_requires_both_roots()" + }, + { + "label": "test_can_advance_sync_mode_nas_requires_rclone_fields()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L62", + "id": "ui_test_wizard_equipment_test_can_advance_sync_mode_nas_requires_rclone_fields", + "community": 89, + "norm_label": "test_can_advance_sync_mode_nas_requires_rclone_fields()" + }, + { + "label": "test_can_advance_sync_mode_stage_requires_staging_fields()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L69", + "id": "ui_test_wizard_equipment_test_can_advance_sync_mode_stage_requires_staging_fields", + "community": 89, + "norm_label": "test_can_advance_sync_mode_stage_requires_staging_fields()" + }, + { + "label": "test_assemble_round_trips_to_valid_equipment_config_nas()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L78", + "id": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_nas", + "community": 89, + "norm_label": "test_assemble_round_trips_to_valid_equipment_config_nas()" + }, + { + "label": "test_assemble_round_trips_to_valid_equipment_config_stage()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L86", + "id": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_stage", + "community": 89, + "norm_label": "test_assemble_round_trips_to_valid_equipment_config_stage()" + }, + { + "label": "test_assemble_rejects_invalid_input()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L97", + "id": "ui_test_wizard_equipment_test_assemble_rejects_invalid_input", + "community": 89, + "norm_label": "test_assemble_rejects_invalid_input()" + }, + { + "label": "Unit tests for the Add-Equipment wizard. Redesign \u00a76.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L1", + "id": "ui_test_wizard_equipment_rationale_1", + "community": 89, + "norm_label": "unit tests for the add-equipment wizard. redesign \u00a76." + }, + { + "label": "The completeness-signal step is removed by the quiescence redesign.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L18", + "id": "ui_test_wizard_equipment_rationale_18", + "community": 89, + "norm_label": "the completeness-signal step is removed by the quiescence redesign." + }, + { + "label": "test_staging_page.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L1", + "id": "tests_unit_ui_test_staging_page_py", + "community": 85, + "norm_label": "test_staging_page.py" + }, + { + "label": "test_staging_dock_height_is_120_px()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L29", + "id": "ui_test_staging_page_test_staging_dock_height_is_120_px", + "community": 85, + "norm_label": "test_staging_dock_height_is_120_px()" + }, + { + "label": "test_staging_table_columns_match_brief_order()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L33", + "id": "ui_test_staging_page_test_staging_table_columns_match_brief_order", + "community": 85, + "norm_label": "test_staging_table_columns_match_brief_order()" + }, + { + "label": "test_format_bytes_handles_negative_values()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L50", + "id": "ui_test_staging_page_test_format_bytes_handles_negative_values", + "community": 85, + "norm_label": "test_format_bytes_handles_negative_values()" + }, + { + "label": "test_format_bytes_renders_sub_kib_in_bytes()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L54", + "id": "ui_test_staging_page_test_format_bytes_renders_sub_kib_in_bytes", + "community": 85, + "norm_label": "test_format_bytes_renders_sub_kib_in_bytes()" + }, + { + "label": "test_format_bytes_renders_kib_with_one_decimal()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L59", + "id": "ui_test_staging_page_test_format_bytes_renders_kib_with_one_decimal", + "community": 85, + "norm_label": "test_format_bytes_renders_kib_with_one_decimal()" + }, + { + "label": "test_format_bytes_renders_mib_and_gib()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L64", + "id": "ui_test_staging_page_test_format_bytes_renders_mib_and_gib", + "community": 85, + "norm_label": "test_format_bytes_renders_mib_and_gib()" + }, + { + "label": "test_format_elapsed_seconds_only()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L74", + "id": "ui_test_staging_page_test_format_elapsed_seconds_only", + "community": 85, + "norm_label": "test_format_elapsed_seconds_only()" + }, + { + "label": "test_format_elapsed_minutes_and_seconds()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L79", + "id": "ui_test_staging_page_test_format_elapsed_minutes_and_seconds", + "community": 85, + "norm_label": "test_format_elapsed_minutes_and_seconds()" + }, + { + "label": "test_format_elapsed_hours_and_minutes()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L83", + "id": "ui_test_staging_page_test_format_elapsed_hours_and_minutes", + "community": 85, + "norm_label": "test_format_elapsed_hours_and_minutes()" + }, + { + "label": "test_format_elapsed_days_and_hours()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L87", + "id": "ui_test_staging_page_test_format_elapsed_days_and_hours", + "community": 85, + "norm_label": "test_format_elapsed_days_and_hours()" + }, + { + "label": "test_format_elapsed_handles_negative()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L91", + "id": "ui_test_staging_page_test_format_elapsed_handles_negative", + "community": 85, + "norm_label": "test_format_elapsed_handles_negative()" + }, + { + "label": "test_state_pill_props_returns_label_and_color_for_each_state()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L100", + "id": "ui_test_staging_page_test_state_pill_props_returns_label_and_color_for_each_state", + "community": 85, + "norm_label": "test_state_pill_props_returns_label_and_color_for_each_state()" + }, + { + "label": "test_state_pill_props_falls_back_for_unknown_state()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L112", + "id": "ui_test_staging_page_test_state_pill_props_falls_back_for_unknown_state", + "community": 85, + "norm_label": "test_state_pill_props_falls_back_for_unknown_state()" + }, + { + "label": "_make_row()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L123", + "id": "ui_test_staging_page_make_row", + "community": 85, + "norm_label": "_make_row()" + }, + { + "label": "test_row_props_emits_run_label_as_leaf()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L144", + "id": "ui_test_staging_page_test_row_props_emits_run_label_as_leaf", + "community": 85, + "norm_label": "test_row_props_emits_run_label_as_leaf()" + }, + { + "label": "test_row_props_marks_synced_rollup_as_clearable()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L149", + "id": "ui_test_staging_page_test_row_props_marks_synced_rollup_as_clearable", + "community": 85, + "norm_label": "test_row_props_marks_synced_rollup_as_clearable()" + }, + { + "label": "test_row_props_does_not_mark_other_rollups_as_clearable()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L155", + "id": "ui_test_staging_page_test_row_props_does_not_mark_other_rollups_as_clearable", + "community": 85, + "norm_label": "test_row_props_does_not_mark_other_rollups_as_clearable()" + }, + { + "label": "test_row_props_formats_bytes_and_elapsed()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L163", + "id": "ui_test_staging_page_test_row_props_formats_bytes_and_elapsed", + "community": 85, + "norm_label": "test_row_props_formats_bytes_and_elapsed()" + }, + { + "label": "test_render_staging_dock_returns_dict_when_nicegui_unavailable()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L174", + "id": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", + "community": 185, + "norm_label": "test_render_staging_dock_returns_dict_when_nicegui_unavailable()" + }, + { + "label": "test_staging_dock_state_defaults()", + "file_type": "code", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L191", + "id": "ui_test_staging_page_test_staging_dock_state_defaults", + "community": 185, + "norm_label": "test_staging_dock_state_defaults()" + }, + { + "label": "Unit tests for the staging UI page. The page renders NiceGUI elements when the", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L1", + "id": "ui_test_staging_page_rationale_1", + "community": 85, + "norm_label": "unit tests for the staging ui page. the page renders nicegui elements when the" + }, + { + "label": "Only a fully-``synced`` run rollup is clearable.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L150", + "id": "ui_test_staging_page_rationale_150", + "community": 85, + "norm_label": "only a fully-``synced`` run rollup is clearable." + }, + { + "label": "When NiceGUI isn't importable the renderer returns a debug dict. This is th", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L175", + "id": "ui_test_staging_page_rationale_175", + "community": 185, + "norm_label": "when nicegui isn't importable the renderer returns a debug dict. this is th" + }, + { + "label": "An empty dock state initializes without errors.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L192", + "id": "ui_test_staging_page_rationale_192", + "community": 185, + "norm_label": "an empty dock state initializes without errors." + }, + { + "label": "test_notifications.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L1", + "id": "tests_unit_ui_test_notifications_py", + "community": 52, + "norm_label": "test_notifications.py" + }, + { + "label": "_reset_state()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L25", + "id": "ui_test_notifications_reset_state", + "community": 52, + "norm_label": "_reset_state()" + }, + { + "label": "test_notify_success_uses_positive_type()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L33", + "id": "ui_test_notifications_test_notify_success_uses_positive_type", + "community": 52, + "norm_label": "test_notify_success_uses_positive_type()" + }, + { + "label": "test_notify_info_default_timeout()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L45", + "id": "ui_test_notifications_test_notify_info_default_timeout", + "community": 52, + "norm_label": "test_notify_info_default_timeout()" + }, + { + "label": "test_notify_warning_extended_timeout()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L54", + "id": "ui_test_notifications_test_notify_warning_extended_timeout", + "community": 52, + "norm_label": "test_notify_warning_extended_timeout()" + }, + { + "label": "test_notify_error_extended_timeout()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L63", + "id": "ui_test_notifications_test_notify_error_extended_timeout", + "community": 52, + "norm_label": "test_notify_error_extended_timeout()" + }, + { + "label": "test_notify_with_action_extends_to_12_seconds()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L72", + "id": "ui_test_notifications_test_notify_with_action_extends_to_12_seconds", + "community": 52, + "norm_label": "test_notify_with_action_extends_to_12_seconds()" + }, + { + "label": "test_show_banner_rejects_unknown_id()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L85", + "id": "ui_test_notifications_test_show_banner_rejects_unknown_id", + "community": 52, + "norm_label": "test_show_banner_rejects_unknown_id()" + }, + { + "label": "test_show_banner_records_active()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L97", + "id": "ui_test_notifications_test_show_banner_records_active", + "community": 52, + "norm_label": "test_show_banner_records_active()" + }, + { + "label": "test_clear_banner_removes_record()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L111", + "id": "ui_test_notifications_test_clear_banner_removes_record", + "community": 52, + "norm_label": "test_clear_banner_removes_record()" + }, + { + "label": "test_banner_overflow_count_when_exceeding_two()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L124", + "id": "ui_test_notifications_test_banner_overflow_count_when_exceeding_two", + "community": 52, + "norm_label": "test_banner_overflow_count_when_exceeding_two()" + }, + { + "label": "test_field_errors_round_trip()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L148", + "id": "ui_test_notifications_test_field_errors_round_trip", + "community": 52, + "norm_label": "test_field_errors_round_trip()" + }, + { + "label": "test_form_errors_round_trip()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L157", + "id": "ui_test_notifications_test_form_errors_round_trip", + "community": 52, + "norm_label": "test_form_errors_round_trip()" + }, + { + "label": "test_banner_id_closed_set_matches_spec()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L166", + "id": "ui_test_notifications_test_banner_id_closed_set_matches_spec", + "community": 52, + "norm_label": "test_banner_id_closed_set_matches_spec()" + }, + { + "label": "test_severity_closed_set_matches_spec()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L178", + "id": "ui_test_notifications_test_severity_closed_set_matches_spec", + "community": 52, + "norm_label": "test_severity_closed_set_matches_spec()" + }, + { + "label": "test_container_id_closed_set_matches_spec()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L189", + "id": "ui_test_notifications_test_container_id_closed_set_matches_spec", + "community": 52, + "norm_label": "test_container_id_closed_set_matches_spec()" + }, + { + "label": "test_action_spec_is_frozen()", + "file_type": "code", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L199", + "id": "ui_test_notifications_test_action_spec_is_frozen", + "community": 52, + "norm_label": "test_action_spec_is_frozen()" + }, + { + "label": "Unit tests for :mod:`exlab_wizard.ui.notifications`. The helpers all delegate t", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L1", + "id": "ui_test_notifications_rationale_1", + "community": 52, + "norm_label": "unit tests for :mod:`exlab_wizard.ui.notifications`. the helpers all delegate t" + }, + { + "label": "Clear in-memory banner / inline state between tests.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L26", + "id": "ui_test_notifications_rationale_26", + "community": 52, + "norm_label": "clear in-memory banner / inline state between tests." + }, + { + "label": "``notify_success`` calls ``ui.notify(... type=\"positive\")``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L34", + "id": "ui_test_notifications_rationale_34", + "community": 52, + "norm_label": "``notify_success`` calls ``ui.notify(... type=\"positive\")``." + }, + { + "label": "``notify_info`` uses the 4 s default.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L46", + "id": "ui_test_notifications_rationale_46", + "community": 52, + "norm_label": "``notify_info`` uses the 4 s default." + }, + { + "label": "``notify_warning`` uses the 8 s default.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L55", + "id": "ui_test_notifications_rationale_55", + "community": 52, + "norm_label": "``notify_warning`` uses the 8 s default." + }, + { + "label": "``notify_error`` uses the 8 s default.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L64", + "id": "ui_test_notifications_rationale_64", + "community": 52, + "norm_label": "``notify_error`` uses the 8 s default." + }, + { + "label": "When an action is attached, the timeout extends to 12 s.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L73", + "id": "ui_test_notifications_rationale_73", + "community": 52, + "norm_label": "when an action is attached, the timeout extends to 12 s." + }, + { + "label": "An out-of-set banner id raises ``ValueError``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L86", + "id": "ui_test_notifications_rationale_86", + "community": 52, + "norm_label": "an out-of-set banner id raises ``valueerror``." + }, + { + "label": "``show_banner`` records the banner under the right container.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L98", + "id": "ui_test_notifications_rationale_98", + "community": 52, + "norm_label": "``show_banner`` records the banner under the right container." + }, + { + "label": "``clear_banner`` removes the active record.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L112", + "id": "ui_test_notifications_rationale_112", + "community": 52, + "norm_label": "``clear_banner`` removes the active record." + }, + { + "label": "Frontend \u00a72.2.3: max 2 banners; 3rd collapses into a count.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L125", + "id": "ui_test_notifications_rationale_125", + "community": 52, + "norm_label": "frontend \u00a72.2.3: max 2 banners; 3rd collapses into a count." + }, + { + "label": "Inline field errors round-trip through register / get / clear.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L149", + "id": "ui_test_notifications_rationale_149", + "community": 52, + "norm_label": "inline field errors round-trip through register / get / clear." + }, + { + "label": "Inline form errors round-trip through register / get / clear.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L158", + "id": "ui_test_notifications_rationale_158", + "community": 52, + "norm_label": "inline form errors round-trip through register / get / clear." + }, + { + "label": "Frontend \u00a72.2.3: exactly five canonical banner ids.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L167", + "id": "ui_test_notifications_rationale_167", + "community": 52, + "norm_label": "frontend \u00a72.2.3: exactly five canonical banner ids." + }, + { + "label": "Severity matches DESIGN.md alerts table.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L179", + "id": "ui_test_notifications_rationale_179", + "community": 52, + "norm_label": "severity matches design.md alerts table." + }, + { + "label": "ContainerId enumerates the three banner placement scopes.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L190", + "id": "ui_test_notifications_rationale_190", + "community": 52, + "norm_label": "containerid enumerates the three banner placement scopes." + }, + { + "label": "``ActionSpec`` is immutable so callbacks can't be swapped post-hoc.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L200", + "id": "ui_test_notifications_rationale_200", + "community": 52, + "norm_label": "``actionspec`` is immutable so callbacks can't be swapped post-hoc." + }, + { + "label": "test_templates_page.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L1", + "id": "tests_unit_ui_test_templates_page_py", + "community": 102, + "norm_label": "test_templates_page.py" + }, + { + "label": "test_create_template_scaffolds_dir_with_manifest_and_content()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L35", + "id": "ui_test_templates_page_test_create_template_scaffolds_dir_with_manifest_and_content", + "community": 102, + "norm_label": "test_create_template_scaffolds_dir_with_manifest_and_content()" + }, + { + "label": "test_create_template_strips_whitespace_from_name()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L50", + "id": "ui_test_templates_page_test_create_template_strips_whitespace_from_name", + "community": 102, + "norm_label": "test_create_template_strips_whitespace_from_name()" + }, + { + "label": "test_create_template_writes_description_into_manifest()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L55", + "id": "ui_test_templates_page_test_create_template_writes_description_into_manifest", + "community": 102, + "norm_label": "test_create_template_writes_description_into_manifest()" + }, + { + "label": "test_create_run_template_records_run_scope()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L69", + "id": "ui_test_templates_page_test_create_run_template_records_run_scope", + "community": 102, + "norm_label": "test_create_run_template_records_run_scope()" + }, + { + "label": "test_create_project_template_omits_run_scope_key()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L81", + "id": "ui_test_templates_page_test_create_project_template_omits_run_scope_key", + "community": 102, + "norm_label": "test_create_project_template_omits_run_scope_key()" + }, + { + "label": "test_create_template_rejects_empty_name()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L92", + "id": "ui_test_templates_page_test_create_template_rejects_empty_name", + "community": 102, + "norm_label": "test_create_template_rejects_empty_name()" + }, + { + "label": "test_create_template_rejects_unknown_type()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L97", + "id": "ui_test_templates_page_test_create_template_rejects_unknown_type", + "community": 102, + "norm_label": "test_create_template_rejects_unknown_type()" + }, + { + "label": "test_create_run_template_requires_run_scope()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L102", + "id": "ui_test_templates_page_test_create_run_template_requires_run_scope", + "community": 102, + "norm_label": "test_create_run_template_requires_run_scope()" + }, + { + "label": "test_create_run_template_rejects_invalid_run_scope()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L107", + "id": "ui_test_templates_page_test_create_run_template_rejects_invalid_run_scope", + "community": 102, + "norm_label": "test_create_run_template_rejects_invalid_run_scope()" + }, + { + "label": "test_create_template_rejects_duplicate_name()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L112", + "id": "ui_test_templates_page_test_create_template_rejects_duplicate_name", + "community": 102, + "norm_label": "test_create_template_rejects_duplicate_name()" + }, + { + "label": "test_scaffolded_project_template_resolves_with_engine()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L123", + "id": "ui_test_templates_page_test_scaffolded_project_template_resolves_with_engine", + "community": 102, + "norm_label": "test_scaffolded_project_template_resolves_with_engine()" + }, + { + "label": "test_scaffolded_run_template_resolves_with_engine()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L139", + "id": "ui_test_templates_page_test_scaffolded_run_template_resolves_with_engine", + "community": 102, + "norm_label": "test_scaffolded_run_template_resolves_with_engine()" + }, + { + "label": "test_list_templates_returns_empty_for_missing_dir()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L156", + "id": "ui_test_templates_page_test_list_templates_returns_empty_for_missing_dir", + "community": 102, + "norm_label": "test_list_templates_returns_empty_for_missing_dir()" + }, + { + "label": "test_list_templates_returns_empty_for_dir_with_no_templates()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L160", + "id": "ui_test_templates_page_test_list_templates_returns_empty_for_dir_with_no_templates", + "community": 102, + "norm_label": "test_list_templates_returns_empty_for_dir_with_no_templates()" + }, + { + "label": "test_list_templates_summarizes_each_template()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L166", + "id": "ui_test_templates_page_test_list_templates_summarizes_each_template", + "community": 102, + "norm_label": "test_list_templates_summarizes_each_template()" + }, + { + "label": "test_list_templates_is_sorted()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L189", + "id": "ui_test_templates_page_test_list_templates_is_sorted", + "community": 102, + "norm_label": "test_list_templates_is_sorted()" + }, + { + "label": "test_list_templates_skips_dirs_without_manifest()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L199", + "id": "ui_test_templates_page_test_list_templates_skips_dirs_without_manifest", + "community": 102, + "norm_label": "test_list_templates_skips_dirs_without_manifest()" + }, + { + "label": "test_list_templates_filters_by_template_type()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L209", + "id": "ui_test_templates_page_test_list_templates_filters_by_template_type", + "community": 102, + "norm_label": "test_list_templates_filters_by_template_type()" + }, + { + "label": "test_list_templates_skips_malformed_manifest()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L225", + "id": "ui_test_templates_page_test_list_templates_skips_malformed_manifest", + "community": 102, + "norm_label": "test_list_templates_skips_malformed_manifest()" + }, + { + "label": "test_list_templates_skips_non_mapping_manifest()", + "file_type": "code", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L237", + "id": "ui_test_templates_page_test_list_templates_skips_non_mapping_manifest", + "community": 102, + "norm_label": "test_list_templates_skips_non_mapping_manifest()" + }, + { + "label": "Tests for the template-manager page helpers. ``render_template_manager`` render", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L1", + "id": "ui_test_templates_page_rationale_1", + "community": 102, + "norm_label": "tests for the template-manager page helpers. ``render_template_manager`` render" + }, + { + "label": "test_keyboard.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L1", + "id": "tests_unit_ui_test_keyboard_py", + "community": 204, + "norm_label": "test_keyboard.py" + }, + { + "label": "test_all_documented_shortcuts_in_registry()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L26", + "id": "ui_test_keyboard_test_all_documented_shortcuts_in_registry", + "community": 289, + "norm_label": "test_all_documented_shortcuts_in_registry()" + }, + { + "label": "test_new_project_combo_macos_and_other()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L43", + "id": "ui_test_keyboard_test_new_project_combo_macos_and_other", + "community": 116, + "norm_label": "test_new_project_combo_macos_and_other()" + }, + { + "label": "test_new_run_combo_macos_and_other()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L51", + "id": "ui_test_keyboard_test_new_run_combo_macos_and_other", + "community": 116, + "norm_label": "test_new_run_combo_macos_and_other()" + }, + { + "label": "test_new_test_run_combo_macos_and_other()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L59", + "id": "ui_test_keyboard_test_new_test_run_combo_macos_and_other", + "community": 116, + "norm_label": "test_new_test_run_combo_macos_and_other()" + }, + { + "label": "test_open_settings_uses_comma_key()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L67", + "id": "ui_test_keyboard_test_open_settings_uses_comma_key", + "community": 116, + "norm_label": "test_open_settings_uses_comma_key()" + }, + { + "label": "test_refresh_tree_combo()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L75", + "id": "ui_test_keyboard_test_refresh_tree_combo", + "community": 116, + "norm_label": "test_refresh_tree_combo()" + }, + { + "label": "test_open_problems_combo()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L83", + "id": "ui_test_keyboard_test_open_problems_combo", + "community": 116, + "norm_label": "test_open_problems_combo()" + }, + { + "label": "test_focus_tree_search_is_unmodified_slash()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L91", + "id": "ui_test_keyboard_test_focus_tree_search_is_unmodified_slash", + "community": 116, + "norm_label": "test_focus_tree_search_is_unmodified_slash()" + }, + { + "label": "test_wizard_next_uses_enter_with_modifier()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L99", + "id": "ui_test_keyboard_test_wizard_next_uses_enter_with_modifier", + "community": 116, + "norm_label": "test_wizard_next_uses_enter_with_modifier()" + }, + { + "label": "test_wizard_cancel_uses_escape()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L107", + "id": "ui_test_keyboard_test_wizard_cancel_uses_escape", + "community": 116, + "norm_label": "test_wizard_cancel_uses_escape()" + }, + { + "label": "test_combo_for_current_os_returns_other_on_linux()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L115", + "id": "ui_test_keyboard_test_combo_for_current_os_returns_other_on_linux", + "community": 204, + "norm_label": "test_combo_for_current_os_returns_other_on_linux()" + }, + { + "label": "test_combo_for_current_os_returns_macos_on_darwin()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L123", + "id": "ui_test_keyboard_test_combo_for_current_os_returns_macos_on_darwin", + "community": 204, + "norm_label": "test_combo_for_current_os_returns_macos_on_darwin()" + }, + { + "label": "test_resolve_finds_known_combo_on_linux()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L131", + "id": "ui_test_keyboard_test_resolve_finds_known_combo_on_linux", + "community": 204, + "norm_label": "test_resolve_finds_known_combo_on_linux()" + }, + { + "label": "test_resolve_returns_none_for_unknown_combo()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L139", + "id": "ui_test_keyboard_test_resolve_returns_none_for_unknown_combo", + "community": 204, + "norm_label": "test_resolve_returns_none_for_unknown_combo()" + }, + { + "label": "test_get_binding_raises_for_unknown()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L145", + "id": "ui_test_keyboard_test_get_binding_raises_for_unknown", + "community": 204, + "norm_label": "test_get_binding_raises_for_unknown()" + }, + { + "label": "test_registry_register_and_dispatch()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L155", + "id": "ui_test_keyboard_test_registry_register_and_dispatch", + "community": 203, + "norm_label": "test_registry_register_and_dispatch()" + }, + { + "label": "test_registry_dispatch_returns_false_when_unbound()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L165", + "id": "ui_test_keyboard_test_registry_dispatch_returns_false_when_unbound", + "community": 203, + "norm_label": "test_registry_dispatch_returns_false_when_unbound()" + }, + { + "label": "test_registry_double_register_raises()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L172", + "id": "ui_test_keyboard_test_registry_double_register_raises", + "community": 203, + "norm_label": "test_registry_double_register_raises()" + }, + { + "label": "test_keycombo_matches_returns_true_for_same_modifiers()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L181", + "id": "ui_test_keyboard_test_keycombo_matches_returns_true_for_same_modifiers", + "community": 116, + "norm_label": "test_keycombo_matches_returns_true_for_same_modifiers()" + }, + { + "label": "test_descriptions_match_spec()", + "file_type": "code", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L189", + "id": "ui_test_keyboard_test_descriptions_match_spec", + "community": 289, + "norm_label": "test_descriptions_match_spec()" + }, + { + "label": "Unit tests for :mod:`exlab_wizard.ui.keyboard`. The registry is intentionally s", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L1", + "id": "ui_test_keyboard_rationale_1", + "community": 204, + "norm_label": "unit tests for :mod:`exlab_wizard.ui.keyboard`. the registry is intentionally s" + }, + { + "label": "Every Frontend \u00a73.7 row has a ShortcutBinding.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L27", + "id": "ui_test_keyboard_rationale_27", + "community": 289, + "norm_label": "every frontend \u00a73.7 row has a shortcutbinding." + }, + { + "label": "``Cmd+N`` on macOS, ``Ctrl+N`` elsewhere.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L44", + "id": "ui_test_keyboard_rationale_44", + "community": 116, + "norm_label": "``cmd+n`` on macos, ``ctrl+n`` elsewhere." + }, + { + "label": "``Cmd+Shift+N`` / ``Ctrl+Shift+N``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L52", + "id": "ui_test_keyboard_rationale_52", + "community": 116, + "norm_label": "``cmd+shift+n`` / ``ctrl+shift+n``." + }, + { + "label": "``Cmd+Shift+T`` / ``Ctrl+Shift+T``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L60", + "id": "ui_test_keyboard_rationale_60", + "community": 116, + "norm_label": "``cmd+shift+t`` / ``ctrl+shift+t``." + }, + { + "label": "``Cmd+,`` / ``Ctrl+,``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L68", + "id": "ui_test_keyboard_rationale_68", + "community": 116, + "norm_label": "``cmd+,`` / ``ctrl+,``." + }, + { + "label": "``Cmd+R`` / ``Ctrl+R``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L76", + "id": "ui_test_keyboard_rationale_76", + "community": 116, + "norm_label": "``cmd+r`` / ``ctrl+r``." + }, + { + "label": "``Cmd+Shift+P`` / ``Ctrl+Shift+P``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L84", + "id": "ui_test_keyboard_rationale_84", + "community": 116, + "norm_label": "``cmd+shift+p`` / ``ctrl+shift+p``." + }, + { + "label": "``/`` focuses the tree search box.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L92", + "id": "ui_test_keyboard_rationale_92", + "community": 116, + "norm_label": "``/`` focuses the tree search box." + }, + { + "label": "``Cmd+Enter`` / ``Ctrl+Enter`` advances the wizard.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L100", + "id": "ui_test_keyboard_rationale_100", + "community": 116, + "norm_label": "``cmd+enter`` / ``ctrl+enter`` advances the wizard." + }, + { + "label": "Esc cancels the wizard.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L108", + "id": "ui_test_keyboard_rationale_108", + "community": 116, + "norm_label": "esc cancels the wizard." + }, + { + "label": "On non-darwin we return ``other``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L116", + "id": "ui_test_keyboard_rationale_116", + "community": 204, + "norm_label": "on non-darwin we return ``other``." + }, + { + "label": "On darwin we return ``macos``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L124", + "id": "ui_test_keyboard_rationale_124", + "community": 204, + "norm_label": "on darwin we return ``macos``." + }, + { + "label": "Resolver returns the right shortcut id on non-darwin.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L132", + "id": "ui_test_keyboard_rationale_132", + "community": 204, + "norm_label": "resolver returns the right shortcut id on non-darwin." + }, + { + "label": "Unknown combos resolve to ``None``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L140", + "id": "ui_test_keyboard_rationale_140", + "community": 204, + "norm_label": "unknown combos resolve to ``none``." + }, + { + "label": "``get_binding`` raises ``KeyError`` for an unknown shortcut id.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L146", + "id": "ui_test_keyboard_rationale_146", + "community": 204, + "norm_label": "``get_binding`` raises ``keyerror`` for an unknown shortcut id." + }, + { + "label": "``ShortcutRegistry`` dispatches the registered handler exactly once.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L156", + "id": "ui_test_keyboard_rationale_156", + "community": 203, + "norm_label": "``shortcutregistry`` dispatches the registered handler exactly once." + }, + { + "label": "Dispatching an unbound shortcut returns ``False`` and runs no handler.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L166", + "id": "ui_test_keyboard_rationale_166", + "community": 203, + "norm_label": "dispatching an unbound shortcut returns ``false`` and runs no handler." + }, + { + "label": "Two handlers per shortcut is forbidden.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L173", + "id": "ui_test_keyboard_rationale_173", + "community": 203, + "norm_label": "two handlers per shortcut is forbidden." + }, + { + "label": "``KeyCombo.matches`` is exact-match across modifiers and key.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L182", + "id": "ui_test_keyboard_rationale_182", + "community": 116, + "norm_label": "``keycombo.matches`` is exact-match across modifiers and key." + }, + { + "label": "Each binding has a non-empty description (Frontend \u00a73.7).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L190", + "id": "ui_test_keyboard_rationale_190", + "community": 289, + "norm_label": "each binding has a non-empty description (frontend \u00a73.7)." + }, + { + "label": "test_dynamic_form.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L1", + "id": "tests_unit_ui_test_dynamic_form_py", + "community": 169, + "norm_label": "test_dynamic_form.py" + }, + { + "label": "test_template_questions_skips_underscore_keys()", + "file_type": "code", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L33", + "id": "ui_test_dynamic_form_test_template_questions_skips_underscore_keys", + "community": 169, + "norm_label": "test_template_questions_skips_underscore_keys()" + }, + { + "label": "test_template_questions_long_form_types()", + "file_type": "code", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L42", + "id": "ui_test_dynamic_form_test_template_questions_long_form_types", + "community": 169, + "norm_label": "test_template_questions_long_form_types()" + }, + { + "label": "test_template_questions_choice_from_list_and_dict()", + "file_type": "code", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L60", + "id": "ui_test_dynamic_form_test_template_questions_choice_from_list_and_dict", + "community": 169, + "norm_label": "test_template_questions_choice_from_list_and_dict()" + }, + { + "label": "test_template_questions_short_form_infers_kind()", + "file_type": "code", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L73", + "id": "ui_test_dynamic_form_test_template_questions_short_form_infers_kind", + "community": 169, + "norm_label": "test_template_questions_short_form_infers_kind()" + }, + { + "label": "test_render_question_field_seeds_default_into_answers()", + "file_type": "code", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L94", + "id": "ui_test_dynamic_form_test_render_question_field_seeds_default_into_answers", + "community": 208, + "norm_label": "test_render_question_field_seeds_default_into_answers()" + }, + { + "label": "test_render_question_field_preserves_existing_answer()", + "file_type": "code", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L104", + "id": "ui_test_dynamic_form_test_render_question_field_preserves_existing_answer", + "community": 208, + "norm_label": "test_render_question_field_preserves_existing_answer()" + }, + { + "label": "_equipment_kwargs()", + "file_type": "code", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L119", + "id": "ui_test_dynamic_form_equipment_kwargs", + "community": 169, + "norm_label": "_equipment_kwargs()" + }, + { + "label": "test_build_equipment_sftp()", + "file_type": "code", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L140", + "id": "ui_test_dynamic_form_test_build_equipment_sftp", + "community": 169, + "norm_label": "test_build_equipment_sftp()" + }, + { + "label": "test_build_equipment_smb()", + "file_type": "code", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L147", + "id": "ui_test_dynamic_form_test_build_equipment_smb", + "community": 169, + "norm_label": "test_build_equipment_smb()" + }, + { + "label": "test_build_equipment_rejects_bad_id()", + "file_type": "code", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L168", + "id": "ui_test_dynamic_form_test_build_equipment_rejects_bad_id", + "community": 169, + "norm_label": "test_build_equipment_rejects_bad_id()" + }, + { + "label": "Unit tests for the frontend-polish helpers. Covers the pure logic behind the th", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L1", + "id": "ui_test_dynamic_form_rationale_1", + "community": 169, + "norm_label": "unit tests for the frontend-polish helpers. covers the pure logic behind the th" + }, + { + "label": "test_file_list.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L1", + "id": "tests_unit_ui_test_file_list_py", + "community": 130, + "norm_label": "test_file_list.py" + }, + { + "label": "_entry()", + "file_type": "code", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L14", + "id": "ui_test_file_list_entry", + "community": 130, + "norm_label": "_entry()" + }, + { + "label": "test_diff_detects_additions()", + "file_type": "code", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L27", + "id": "ui_test_file_list_test_diff_detects_additions", + "community": 130, + "norm_label": "test_diff_detects_additions()" + }, + { + "label": "test_diff_detects_removals()", + "file_type": "code", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L37", + "id": "ui_test_file_list_test_diff_detects_removals", + "community": 130, + "norm_label": "test_diff_detects_removals()" + }, + { + "label": "test_diff_detects_size_change_as_modification()", + "file_type": "code", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L47", + "id": "ui_test_file_list_test_diff_detects_size_change_as_modification", + "community": 130, + "norm_label": "test_diff_detects_size_change_as_modification()" + }, + { + "label": "test_diff_detects_sync_status_change_as_modification()", + "file_type": "code", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L57", + "id": "ui_test_file_list_test_diff_detects_sync_status_change_as_modification", + "community": 130, + "norm_label": "test_diff_detects_sync_status_change_as_modification()" + }, + { + "label": "test_diff_unchanged_is_empty()", + "file_type": "code", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L65", + "id": "ui_test_file_list_test_diff_unchanged_is_empty", + "community": 130, + "norm_label": "test_diff_unchanged_is_empty()" + }, + { + "label": "test_file_list_entry_defaults_keep_local_and_tombstone_false()", + "file_type": "code", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L78", + "id": "ui_test_file_list_test_file_list_entry_defaults_keep_local_and_tombstone_false", + "community": 130, + "norm_label": "test_file_list_entry_defaults_keep_local_and_tombstone_false()" + }, + { + "label": "test_diff_detects_keep_local_change_as_modification()", + "file_type": "code", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L85", + "id": "ui_test_file_list_test_diff_detects_keep_local_change_as_modification", + "community": 130, + "norm_label": "test_diff_detects_keep_local_change_as_modification()" + }, + { + "label": "test_diff_detects_tombstone_change_as_modification()", + "file_type": "code", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L93", + "id": "ui_test_file_list_test_diff_detects_tombstone_change_as_modification", + "community": 130, + "norm_label": "test_diff_detects_tombstone_change_as_modification()" + }, + { + "label": "test_keep_local_action_constant_is_distinct()", + "file_type": "code", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L101", + "id": "ui_test_file_list_test_keep_local_action_constant_is_distinct", + "community": 130, + "norm_label": "test_keep_local_action_constant_is_distinct()" + }, + { + "label": "test_render_file_list_keep_local_menu_and_tombstone()", + "file_type": "code", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L106", + "id": "ui_test_file_list_test_render_file_list_keep_local_menu_and_tombstone", + "community": 130, + "norm_label": "test_render_file_list_keep_local_menu_and_tombstone()" + }, + { + "label": "Unit tests for ``ui/components/file_list``. Redesign \u00a74.3, \u00a75.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L1", + "id": "ui_test_file_list_rationale_1", + "community": 130, + "norm_label": "unit tests for ``ui/components/file_list``. redesign \u00a74.3, \u00a75." + }, + { + "label": "A bare entry defaults ``keep_local`` and ``tombstone`` to False.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L79", + "id": "ui_test_file_list_rationale_79", + "community": 130, + "norm_label": "a bare entry defaults ``keep_local`` and ``tombstone`` to false." + }, + { + "label": "Flipping ``keep_local`` is a modification (drives a re-render).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L86", + "id": "ui_test_file_list_rationale_86", + "community": 130, + "norm_label": "flipping ``keep_local`` is a modification (drives a re-render)." + }, + { + "label": "A file transitioning to a tombstone is a modification.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L94", + "id": "ui_test_file_list_rationale_94", + "community": 130, + "norm_label": "a file transitioning to a tombstone is a modification." + }, + { + "label": "``FILE_CONTEXT_KEEP_LOCAL`` is a distinct discriminator value.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L102", + "id": "ui_test_file_list_rationale_102", + "community": 130, + "norm_label": "``file_context_keep_local`` is a distinct discriminator value." + }, + { + "label": "The renderer wires the keep-local menu item and tombstone row. Exercises th", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L107", + "id": "ui_test_file_list_rationale_107", + "community": 130, + "norm_label": "the renderer wires the keep-local menu item and tombstone row. exercises th" + }, + { + "label": "test_theme.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L1", + "id": "tests_unit_ui_test_theme_py", + "community": 147, + "norm_label": "test_theme.py" + }, + { + "label": "test_root_css_contains_primary_palette()", + "file_type": "code", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L13", + "id": "ui_test_theme_test_root_css_contains_primary_palette", + "community": 147, + "norm_label": "test_root_css_contains_primary_palette()" + }, + { + "label": "test_root_css_contains_okabe_ito_palette()", + "file_type": "code", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L28", + "id": "ui_test_theme_test_root_css_contains_okabe_ito_palette", + "community": 147, + "norm_label": "test_root_css_contains_okabe_ito_palette()" + }, + { + "label": "test_root_css_contains_semantic_aliases()", + "file_type": "code", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L43", + "id": "ui_test_theme_test_root_css_contains_semantic_aliases", + "community": 147, + "norm_label": "test_root_css_contains_semantic_aliases()" + }, + { + "label": "test_root_css_contains_typography_tokens()", + "file_type": "code", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L51", + "id": "ui_test_theme_test_root_css_contains_typography_tokens", + "community": 147, + "norm_label": "test_root_css_contains_typography_tokens()" + }, + { + "label": "test_root_css_contains_spacing_scale()", + "file_type": "code", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L59", + "id": "ui_test_theme_test_root_css_contains_spacing_scale", + "community": 147, + "norm_label": "test_root_css_contains_spacing_scale()" + }, + { + "label": "test_root_css_contains_radius_tokens()", + "file_type": "code", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L65", + "id": "ui_test_theme_test_root_css_contains_radius_tokens", + "community": 147, + "norm_label": "test_root_css_contains_radius_tokens()" + }, + { + "label": "test_root_css_contains_shadow_tokens()", + "file_type": "code", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L72", + "id": "ui_test_theme_test_root_css_contains_shadow_tokens", + "community": 147, + "norm_label": "test_root_css_contains_shadow_tokens()" + }, + { + "label": "test_root_css_navy_tinted_shadows()", + "file_type": "code", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L81", + "id": "ui_test_theme_test_root_css_navy_tinted_shadows", + "community": 147, + "norm_label": "test_root_css_navy_tinted_shadows()" + }, + { + "label": "test_root_css_motion_tokens()", + "file_type": "code", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L88", + "id": "ui_test_theme_test_root_css_motion_tokens", + "community": 147, + "norm_label": "test_root_css_motion_tokens()" + }, + { + "label": "test_root_css_starts_with_root_block()", + "file_type": "code", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L94", + "id": "ui_test_theme_test_root_css_starts_with_root_block", + "community": 147, + "norm_label": "test_root_css_starts_with_root_block()" + }, + { + "label": "test_root_css_includes_body_resets()", + "file_type": "code", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L101", + "id": "ui_test_theme_test_root_css_includes_body_resets", + "community": 147, + "norm_label": "test_root_css_includes_body_resets()" + }, + { + "label": "test_resolve_assets_dir_points_at_repo_assets_in_source_layout()", + "file_type": "code", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L110", + "id": "ui_test_theme_test_resolve_assets_dir_points_at_repo_assets_in_source_layout", + "community": 147, + "norm_label": "test_resolve_assets_dir_points_at_repo_assets_in_source_layout()" + }, + { + "label": "Unit tests for :mod:`exlab_wizard.ui.theme`. The theme module renders the ``:ro", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L1", + "id": "ui_test_theme_rationale_1", + "community": 147, + "norm_label": "unit tests for :mod:`exlab_wizard.ui.theme`. the theme module renders the ``:ro" + }, + { + "label": "All shadows are navy-tinted (DESIGN.md \u00a704).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L82", + "id": "ui_test_theme_rationale_82", + "community": 147, + "norm_label": "all shadows are navy-tinted (design.md \u00a704)." + }, + { + "label": "The block opens with ``:root {`` per DESIGN.md \u00a707.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L95", + "id": "ui_test_theme_rationale_95", + "community": 147, + "norm_label": "the block opens with ``:root {`` per design.md \u00a707." + }, + { + "label": "A body / heading / mono reset block follows the ``:root {}``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L102", + "id": "ui_test_theme_rationale_102", + "community": 147, + "norm_label": "a body / heading / mono reset block follows the ``:root {}``." + }, + { + "label": "In source layout, the resolver returns ``/assets/``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L111", + "id": "ui_test_theme_rationale_111", + "community": 147, + "norm_label": "in source layout, the resolver returns ``/assets/``." + }, + { + "label": "test_breadcrumb.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L1", + "id": "tests_unit_ui_test_breadcrumb_py", + "community": 177, + "norm_label": "test_breadcrumb.py" + }, + { + "label": "test_segments_from_none_returns_empty()", + "file_type": "code", + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L11", + "id": "ui_test_breadcrumb_test_segments_from_none_returns_empty", + "community": 177, + "norm_label": "test_segments_from_none_returns_empty()" + }, + { + "label": "test_segments_from_empty_returns_empty()", + "file_type": "code", + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L15", + "id": "ui_test_breadcrumb_test_segments_from_empty_returns_empty", + "community": 177, + "norm_label": "test_segments_from_empty_returns_empty()" + }, + { + "label": "test_segments_for_run_node()", + "file_type": "code", + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L19", + "id": "ui_test_breadcrumb_test_segments_for_run_node", + "community": 177, + "norm_label": "test_segments_for_run_node()" + }, + { + "label": "test_segments_strip_empty_components()", + "file_type": "code", + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L32", + "id": "ui_test_breadcrumb_test_segments_strip_empty_components", + "community": 177, + "norm_label": "test_segments_strip_empty_components()" + }, + { + "label": "Unit tests for ``ui/components/breadcrumb``. Redesign \u00a74.7 / decision 7A.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L1", + "id": "ui_test_breadcrumb_rationale_1", + "community": 177, + "norm_label": "unit tests for ``ui/components/breadcrumb``. redesign \u00a74.7 / decision 7a." + }, + { + "label": "A double-slash or trailing slash doesn't produce empty segments.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L33", + "id": "ui_test_breadcrumb_rationale_33", + "community": 177, + "norm_label": "a double-slash or trailing slash doesn't produce empty segments." + }, + { + "label": "test_settings_nas_credentials.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L1", + "id": "tests_unit_ui_test_settings_nas_credentials_py", + "community": 191, + "norm_label": "test_settings_nas_credentials.py" + }, + { + "label": "_nas_equipment()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L25", + "id": "ui_test_settings_nas_credentials_nas_equipment", + "community": 191, + "norm_label": "_nas_equipment()" + }, + { + "label": "_stage_equipment()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L41", + "id": "ui_test_settings_nas_credentials_stage_equipment", + "community": 191, + "norm_label": "_stage_equipment()" + }, + { + "label": "_config_with()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L56", + "id": "ui_test_settings_nas_credentials_config_with", + "community": 191, + "norm_label": "_config_with()" + }, + { + "label": "_testids()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L64", + "id": "ui_test_settings_nas_credentials_testids", + "community": 191, + "norm_label": "_testids()" + }, + { + "label": "test_sections_omit_nas_credentials_without_password_equipment()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L77", + "id": "ui_test_settings_nas_credentials_test_sections_omit_nas_credentials_without_password_equipment", + "community": 191, + "norm_label": "test_sections_omit_nas_credentials_without_password_equipment()" + }, + { + "label": "test_sections_insert_nas_credentials_after_equipment()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L85", + "id": "ui_test_settings_nas_credentials_test_sections_insert_nas_credentials_after_equipment", + "community": 191, + "norm_label": "test_sections_insert_nas_credentials_after_equipment()" + }, + { + "label": "test_section_renders_one_row_per_password_equipment()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L99", + "id": "ui_test_settings_nas_credentials_test_section_renders_one_row_per_password_equipment", + "community": 191, + "norm_label": "test_section_renders_one_row_per_password_equipment()" + }, + { + "label": "test_section_nav_entry_present_when_password_equipment_exists()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L118", + "id": "ui_test_settings_nas_credentials_test_section_nav_entry_present_when_password_equipment_exists", + "community": 191, + "norm_label": "test_section_nav_entry_present_when_password_equipment_exists()" + }, + { + "label": "test_section_nav_entry_absent_for_stage_only_config()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L130", + "id": "ui_test_settings_nas_credentials_test_section_nav_entry_absent_for_stage_only_config", + "community": 191, + "norm_label": "test_section_nav_entry_absent_for_stage_only_config()" + }, + { + "label": "test_present_password_opens_set_state_with_clear_action()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L141", + "id": "ui_test_settings_nas_credentials_test_present_password_opens_set_state_with_clear_action", + "community": 191, + "norm_label": "test_present_password_opens_set_state_with_clear_action()" + }, + { + "label": "test_handlers_factory_called_per_equipment_id()", + "file_type": "code", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L155", + "id": "ui_test_settings_nas_credentials_test_handlers_factory_called_per_equipment_id", + "community": 191, + "norm_label": "test_handlers_factory_called_per_equipment_id()" + }, + { + "label": "Tests for the Settings NAS-credentials section (rclone-only migration). The sec", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L1", + "id": "ui_test_settings_nas_credentials_rationale_1", + "community": 191, + "norm_label": "tests for the settings nas-credentials section (rclone-only migration). the sec" + }, + { + "label": "test_factories_smoke.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L1", + "id": "tests_unit_ui_test_factories_smoke_py", + "community": 34, + "norm_label": "test_factories_smoke.py" + }, + { + "label": "_slot()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L50", + "id": "ui_test_factories_smoke_slot", + "community": 34, + "norm_label": "_slot()" + }, + { + "label": "test_smoke_mode_badge_renders_in_slot()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L56", + "id": "ui_test_factories_smoke_test_smoke_mode_badge_renders_in_slot", + "community": 34, + "norm_label": "test_smoke_mode_badge_renders_in_slot()" + }, + { + "label": "test_smoke_test_run_badge_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L65", + "id": "ui_test_factories_smoke_test_smoke_test_run_badge_renders", + "community": 34, + "norm_label": "test_smoke_test_run_badge_renders()" + }, + { + "label": "test_smoke_override_badge_renders_with_callback()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L71", + "id": "ui_test_factories_smoke_test_smoke_override_badge_renders_with_callback", + "community": 34, + "norm_label": "test_smoke_override_badge_renders_with_callback()" + }, + { + "label": "test_smoke_sync_status_icon_renders_each_state()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L81", + "id": "ui_test_factories_smoke_test_smoke_sync_status_icon_renders_each_state", + "community": 34, + "norm_label": "test_smoke_sync_status_icon_renders_each_state()" + }, + { + "label": "test_smoke_session_progress_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L97", + "id": "ui_test_factories_smoke_test_smoke_session_progress_renders", + "community": 34, + "norm_label": "test_smoke_session_progress_renders()" + }, + { + "label": "test_smoke_credential_field_renders_each_state()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L112", + "id": "ui_test_factories_smoke_test_smoke_credential_field_renders_each_state", + "community": 34, + "norm_label": "test_smoke_credential_field_renders_each_state()" + }, + { + "label": "_credential_testids()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L128", + "id": "ui_test_factories_smoke_credential_testids", + "community": 34, + "norm_label": "_credential_testids()" + }, + { + "label": "test_credential_field_editing_state_renders_a_password_input()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L138", + "id": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", + "community": 34, + "norm_label": "test_credential_field_editing_state_renders_a_password_input()" + }, + { + "label": "test_credential_field_not_set_state_renders_set_button_without_input()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L160", + "id": "ui_test_factories_smoke_test_credential_field_not_set_state_renders_set_button_without_input", + "community": 34, + "norm_label": "test_credential_field_not_set_state_renders_set_button_without_input()" + }, + { + "label": "test_credential_field_set_state_renders_replace_and_clear_buttons()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L174", + "id": "ui_test_factories_smoke_test_credential_field_set_state_renders_replace_and_clear_buttons", + "community": 34, + "norm_label": "test_credential_field_set_state_renders_replace_and_clear_buttons()" + }, + { + "label": "test_smoke_test_connection_panel_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L188", + "id": "ui_test_factories_smoke_test_smoke_test_connection_panel_renders", + "community": 34, + "norm_label": "test_smoke_test_connection_panel_renders()" + }, + { + "label": "test_smoke_filter_chips_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L204", + "id": "ui_test_factories_smoke_test_smoke_filter_chips_renders", + "community": 34, + "norm_label": "test_smoke_filter_chips_renders()" + }, + { + "label": "test_smoke_status_bar_segment_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L214", + "id": "ui_test_factories_smoke_test_smoke_status_bar_segment_renders", + "community": 34, + "norm_label": "test_smoke_status_bar_segment_renders()" + }, + { + "label": "test_smoke_banner_stack_renders_with_active_banners()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L233", + "id": "ui_test_factories_smoke_test_smoke_banner_stack_renders_with_active_banners", + "community": 34, + "norm_label": "test_smoke_banner_stack_renders_with_active_banners()" + }, + { + "label": "test_smoke_operations_modal_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L247", + "id": "ui_test_factories_smoke_test_smoke_operations_modal_renders", + "community": 34, + "norm_label": "test_smoke_operations_modal_renders()" + }, + { + "label": "test_smoke_bandwidth_schedule_editor_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L277", + "id": "ui_test_factories_smoke_test_smoke_bandwidth_schedule_editor_renders", + "community": 34, + "norm_label": "test_smoke_bandwidth_schedule_editor_renders()" + }, + { + "label": "test_smoke_validation_summary_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L301", + "id": "ui_test_factories_smoke_test_smoke_validation_summary_renders", + "community": 34, + "norm_label": "test_smoke_validation_summary_renders()" + }, + { + "label": "test_smoke_tree_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L326", + "id": "ui_test_factories_smoke_test_smoke_tree_renders", + "community": 34, + "norm_label": "test_smoke_tree_renders()" + }, + { + "label": "test_smoke_welcome_page_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L348", + "id": "ui_test_factories_smoke_test_smoke_welcome_page_renders", + "community": 34, + "norm_label": "test_smoke_welcome_page_renders()" + }, + { + "label": "test_smoke_file_explorer_page_renders_setup_complete()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L356", + "id": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_complete", + "community": 34, + "norm_label": "test_smoke_file_explorer_page_renders_setup_complete()" + }, + { + "label": "test_smoke_file_explorer_page_renders_setup_incomplete()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L373", + "id": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_incomplete", + "community": 34, + "norm_label": "test_smoke_file_explorer_page_renders_setup_incomplete()" + }, + { + "label": "test_smoke_wizard_project_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L389", + "id": "ui_test_factories_smoke_test_smoke_wizard_project_renders", + "community": 34, + "norm_label": "test_smoke_wizard_project_renders()" + }, + { + "label": "test_smoke_wizard_run_renders_test_mode()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L397", + "id": "ui_test_factories_smoke_test_smoke_wizard_run_renders_test_mode", + "community": 34, + "norm_label": "test_smoke_wizard_run_renders_test_mode()" + }, + { + "label": "test_smoke_wizard_run_renders_experimental_mode()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L405", + "id": "ui_test_factories_smoke_test_smoke_wizard_run_renders_experimental_mode", + "community": 34, + "norm_label": "test_smoke_wizard_run_renders_experimental_mode()" + }, + { + "label": "test_smoke_settings_page_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L413", + "id": "ui_test_factories_smoke_test_smoke_settings_page_renders", + "community": 34, + "norm_label": "test_smoke_settings_page_renders()" + }, + { + "label": "test_smoke_settings_page_each_section_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L422", + "id": "ui_test_factories_smoke_test_smoke_settings_page_each_section_renders", + "community": 34, + "norm_label": "test_smoke_settings_page_each_section_renders()" + }, + { + "label": "test_smoke_settings_page_setup_incomplete_auto_selects_first()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L432", + "id": "ui_test_factories_smoke_test_smoke_settings_page_setup_incomplete_auto_selects_first", + "community": 34, + "norm_label": "test_smoke_settings_page_setup_incomplete_auto_selects_first()" + }, + { + "label": "test_settings_lims_section_renders_credential_field_with_e2e_hooks()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L446", + "id": "ui_test_factories_smoke_test_settings_lims_section_renders_credential_field_with_e2e_hooks", + "community": 34, + "norm_label": "test_settings_lims_section_renders_credential_field_with_e2e_hooks()" + }, + { + "label": "test_settings_lims_section_credential_field_opens_set_when_password_present()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L461", + "id": "ui_test_factories_smoke_test_settings_lims_section_credential_field_opens_set_when_password_present", + "community": 34, + "norm_label": "test_settings_lims_section_credential_field_opens_set_when_password_present()" + }, + { + "label": "test_smoke_problems_page_renders()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L475", + "id": "ui_test_factories_smoke_test_smoke_problems_page_renders", + "community": 34, + "norm_label": "test_smoke_problems_page_renders()" + }, + { + "label": "test_smoke_problems_page_renders_empty_state()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L507", + "id": "ui_test_factories_smoke_test_smoke_problems_page_renders_empty_state", + "community": 34, + "norm_label": "test_smoke_problems_page_renders_empty_state()" + }, + { + "label": "test_smoke_register_theme_returns_css()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L520", + "id": "ui_test_factories_smoke_test_smoke_register_theme_returns_css", + "community": 34, + "norm_label": "test_smoke_register_theme_returns_css()" + }, + { + "label": "test_smoke_bind_global_shortcuts_does_not_raise()", + "file_type": "code", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L525", + "id": "ui_test_factories_smoke_test_smoke_bind_global_shortcuts_does_not_raise", + "community": 34, + "norm_label": "test_smoke_bind_global_shortcuts_does_not_raise()" + }, + { + "label": "Smoke tests that invoke the NiceGUI factory functions. The factory functions cr", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L1", + "id": "ui_test_factories_smoke_rationale_1", + "community": 34, + "norm_label": "smoke tests that invoke the nicegui factory functions. the factory functions cr" + }, + { + "label": "Return a NiceGUI slot we can use as a parent for factory calls.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L51", + "id": "ui_test_factories_smoke_rationale_51", + "community": 34, + "norm_label": "return a nicegui slot we can use as a parent for factory calls." + }, + { + "label": "Collect every ``data-testid`` in an element's subtree.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L129", + "id": "ui_test_factories_smoke_rationale_129", + "community": 34, + "norm_label": "collect every ``data-testid`` in an element's subtree." + }, + { + "label": "Regression: the editing state must expose an inline password input.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L139", + "id": "ui_test_factories_smoke_rationale_139", + "community": 34, + "norm_label": "regression: the editing state must expose an inline password input." + }, + { + "label": "The LIMS section must expose the password credential row.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L447", + "id": "ui_test_factories_smoke_rationale_447", + "community": 34, + "norm_label": "the lims section must expose the password credential row." + }, + { + "label": "test_design.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L1", + "id": "tests_unit_ui_test_design_py", + "community": 56, + "norm_label": "test_design.py" + }, + { + "label": "test_primary_palette_matches_designmd()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L14", + "id": "ui_test_design_test_primary_palette_matches_designmd", + "community": 56, + "norm_label": "test_primary_palette_matches_designmd()" + }, + { + "label": "test_okabe_ito_palette_matches_designmd()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L29", + "id": "ui_test_design_test_okabe_ito_palette_matches_designmd", + "community": 56, + "norm_label": "test_okabe_ito_palette_matches_designmd()" + }, + { + "label": "test_semantic_aliases_are_okabe_ito()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L42", + "id": "ui_test_design_test_semantic_aliases_are_okabe_ito", + "community": 56, + "norm_label": "test_semantic_aliases_are_okabe_ito()" + }, + { + "label": "test_warning_token_is_oi_orange()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L51", + "id": "ui_test_design_test_warning_token_is_oi_orange", + "community": 56, + "norm_label": "test_warning_token_is_oi_orange()" + }, + { + "label": "test_typography_uses_frontend_override()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L57", + "id": "ui_test_design_test_typography_uses_frontend_override", + "community": 56, + "norm_label": "test_typography_uses_frontend_override()" + }, + { + "label": "test_type_scale_matches_designmd()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L67", + "id": "ui_test_design_test_type_scale_matches_designmd", + "community": 56, + "norm_label": "test_type_scale_matches_designmd()" + }, + { + "label": "test_spacing_scale_4px_grid()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L81", + "id": "ui_test_design_test_spacing_scale_4px_grid", + "community": 56, + "norm_label": "test_spacing_scale_4px_grid()" + }, + { + "label": "test_radius_tokens_match_designmd()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L98", + "id": "ui_test_design_test_radius_tokens_match_designmd", + "community": 56, + "norm_label": "test_radius_tokens_match_designmd()" + }, + { + "label": "test_shadows_are_navy_tinted()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L107", + "id": "ui_test_design_test_shadows_are_navy_tinted", + "community": 56, + "norm_label": "test_shadows_are_navy_tinted()" + }, + { + "label": "test_motion_tokens_match_designmd()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L114", + "id": "ui_test_design_test_motion_tokens_match_designmd", + "community": 56, + "norm_label": "test_motion_tokens_match_designmd()" + }, + { + "label": "test_okabe_ito_series_order_is_fixed()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L121", + "id": "ui_test_design_test_okabe_ito_series_order_is_fixed", + "community": 56, + "norm_label": "test_okabe_ito_series_order_is_fixed()" + }, + { + "label": "test_vermilion_is_last_in_series()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L135", + "id": "ui_test_design_test_vermilion_is_last_in_series", + "community": 56, + "norm_label": "test_vermilion_is_last_in_series()" + }, + { + "label": "test_no_blue_collision_in_series_first_six()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L141", + "id": "ui_test_design_test_no_blue_collision_in_series_first_six", + "community": 56, + "norm_label": "test_no_blue_collision_in_series_first_six()" + }, + { + "label": "test_badge_text_variants_are_wcag_aa()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L152", + "id": "ui_test_design_test_badge_text_variants_are_wcag_aa", + "community": 56, + "norm_label": "test_badge_text_variants_are_wcag_aa()" + }, + { + "label": "test_alert_text_variants_match_designmd()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L164", + "id": "ui_test_design_test_alert_text_variants_match_designmd", + "community": 56, + "norm_label": "test_alert_text_variants_match_designmd()" + }, + { + "label": "test_yellow_is_present_but_only_for_fills()", + "file_type": "code", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L175", + "id": "ui_test_design_test_yellow_is_present_but_only_for_fills", + "community": 56, + "norm_label": "test_yellow_is_present_but_only_for_fills()" + }, + { + "label": "Token-equality tests for :mod:`exlab_wizard.ui.design`. The tests assert each c", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L1", + "id": "ui_test_design_rationale_1", + "community": 56, + "norm_label": "token-equality tests for :mod:`exlab_wizard.ui.design`. the tests assert each c" + }, + { + "label": "Primary palette hexes are verbatim from DESIGN.md \u00a701.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L15", + "id": "ui_test_design_rationale_15", + "community": 56, + "norm_label": "primary palette hexes are verbatim from design.md \u00a701." + }, + { + "label": "Okabe-Ito hexes are verbatim from DESIGN.md \u00a701.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L30", + "id": "ui_test_design_rationale_30", + "community": 56, + "norm_label": "okabe-ito hexes are verbatim from design.md \u00a701." + }, + { + "label": "Semantic tokens alias the Okabe-Ito palette per DESIGN.md \u00a701.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L43", + "id": "ui_test_design_rationale_43", + "community": 56, + "norm_label": "semantic tokens alias the okabe-ito palette per design.md \u00a701." + }, + { + "label": "Frontend \u00a72.1.4: warning is canonically ``--oi-orange``.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L52", + "id": "ui_test_design_rationale_52", + "community": 56, + "norm_label": "frontend \u00a72.1.4: warning is canonically ``--oi-orange``." + }, + { + "label": "Frontend \u00a72.1.3 overrides DM Sans / DM Mono with IBM Plex / system mono.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L58", + "id": "ui_test_design_rationale_58", + "community": 56, + "norm_label": "frontend \u00a72.1.3 overrides dm sans / dm mono with ibm plex / system mono." + }, + { + "label": "Type scale tokens are verbatim from DESIGN.md \u00a702.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L68", + "id": "ui_test_design_rationale_68", + "community": 56, + "norm_label": "type scale tokens are verbatim from design.md \u00a702." + }, + { + "label": "Spacing tokens follow the 4px grid (DESIGN.md \u00a703).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L82", + "id": "ui_test_design_rationale_82", + "community": 56, + "norm_label": "spacing tokens follow the 4px grid (design.md \u00a703)." + }, + { + "label": "Border radius tokens (DESIGN.md \u00a704).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L99", + "id": "ui_test_design_rationale_99", + "community": 56, + "norm_label": "border radius tokens (design.md \u00a704)." + }, + { + "label": "All shadow definitions use ``rgba(0,54,96,...)`` (DESIGN.md \u00a704).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L108", + "id": "ui_test_design_rationale_108", + "community": 56, + "norm_label": "all shadow definitions use ``rgba(0,54,96,...)`` (design.md \u00a704)." + }, + { + "label": "Motion tokens (DESIGN.md \u00a707).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L115", + "id": "ui_test_design_rationale_115", + "community": 56, + "norm_label": "motion tokens (design.md \u00a707)." + }, + { + "label": "Series order is fixed (DESIGN.md absolute constraint).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L122", + "id": "ui_test_design_rationale_122", + "community": 56, + "norm_label": "series order is fixed (design.md absolute constraint)." + }, + { + "label": "Vermilion is reserved for the error / alert series (DESIGN.md \u00a706).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L136", + "id": "ui_test_design_rationale_136", + "community": 56, + "norm_label": "vermilion is reserved for the error / alert series (design.md \u00a706)." + }, + { + "label": "Frontend rules (DESIGN.md): series 5 is OI_BLUE but only after 4 prior series.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L142", + "id": "ui_test_design_rationale_142", + "community": 56, + "norm_label": "frontend rules (design.md): series 5 is oi_blue but only after 4 prior series." + }, + { + "label": "Badge text variants are the documented darkened hexes (DESIGN.md \u00a705).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L153", + "id": "ui_test_design_rationale_153", + "community": 56, + "norm_label": "badge text variants are the documented darkened hexes (design.md \u00a705)." + }, + { + "label": "Alert text variants are the documented hexes (DESIGN.md \u00a705).", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L165", + "id": "ui_test_design_rationale_165", + "community": 56, + "norm_label": "alert text variants are the documented hexes (design.md \u00a705)." + }, + { + "label": "``#F0E442`` is exposed as a token but never used for chrome. The chip strip", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L176", + "id": "ui_test_design_rationale_176", + "community": 56, + "norm_label": "``#f0e442`` is exposed as a token but never used for chrome. the chip strip" + }, + { + "label": "test_travelling_badge.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L1", + "id": "tests_unit_ui_test_travelling_badge_py", + "community": 115, + "norm_label": "test_travelling_badge.py" + }, + { + "label": "_hard()", + "file_type": "code", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L17", + "id": "ui_test_travelling_badge_hard", + "community": 115, + "norm_label": "_hard()" + }, + { + "label": "_soft()", + "file_type": "code", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L21", + "id": "ui_test_travelling_badge_soft", + "community": 115, + "norm_label": "_soft()" + }, + { + "label": "test_badge_on_root_when_all_collapsed()", + "file_type": "code", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L25", + "id": "ui_test_travelling_badge_test_badge_on_root_when_all_collapsed", + "community": 115, + "norm_label": "test_badge_on_root_when_all_collapsed()" + }, + { + "label": "test_badge_travels_inward_as_nodes_expand()", + "file_type": "code", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L34", + "id": "ui_test_travelling_badge_test_badge_travels_inward_as_nodes_expand", + "community": 115, + "norm_label": "test_badge_travels_inward_as_nodes_expand()" + }, + { + "label": "test_badge_lands_on_leaf_when_fully_expanded()", + "file_type": "code", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L41", + "id": "ui_test_travelling_badge_test_badge_lands_on_leaf_when_fully_expanded", + "community": 115, + "norm_label": "test_badge_lands_on_leaf_when_fully_expanded()" + }, + { + "label": "test_red_beats_amber_when_aggregated_on_same_node()", + "file_type": "code", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L52", + "id": "ui_test_travelling_badge_test_red_beats_amber_when_aggregated_on_same_node", + "community": 115, + "norm_label": "test_red_beats_amber_when_aggregated_on_same_node()" + }, + { + "label": "test_amber_only_when_no_hard_findings()", + "file_type": "code", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L62", + "id": "ui_test_travelling_badge_test_amber_only_when_no_hard_findings", + "community": 115, + "norm_label": "test_amber_only_when_no_hard_findings()" + }, + { + "label": "test_two_equipment_get_independent_badges()", + "file_type": "code", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L68", + "id": "ui_test_travelling_badge_test_two_equipment_get_independent_badges", + "community": 115, + "norm_label": "test_two_equipment_get_independent_badges()" + }, + { + "label": "Unit tests for the travelling problem-badge pure function. GUI/Orchestrator Red", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L1", + "id": "ui_test_travelling_badge_rationale_1", + "community": 115, + "norm_label": "unit tests for the travelling problem-badge pure function. gui/orchestrator red" + }, + { + "label": "All collapsed: the badge lives on the shallowest collapsed ancestor \u2014 the ro", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L26", + "id": "ui_test_travelling_badge_rationale_26", + "community": 115, + "norm_label": "all collapsed: the badge lives on the shallowest collapsed ancestor \u2014 the ro" + }, + { + "label": "Expanding the equipment node moves the badge to the project.", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L35", + "id": "ui_test_travelling_badge_rationale_35", + "community": 115, + "norm_label": "expanding the equipment node moves the badge to the project." + }, + { + "label": "test_wizard_project_page.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L1", + "id": "tests_unit_ui_test_wizard_project_page_py", + "community": 77, + "norm_label": "test_wizard_project_page.py" + }, + { + "label": "test_can_advance_equipment_step_requires_selection()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L30", + "id": "ui_test_wizard_project_page_test_can_advance_equipment_step_requires_selection", + "community": 77, + "norm_label": "test_can_advance_equipment_step_requires_selection()" + }, + { + "label": "test_can_advance_variables_step_always_true()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L37", + "id": "ui_test_wizard_project_page_test_can_advance_variables_step_always_true", + "community": 77, + "norm_label": "test_can_advance_variables_step_always_true()" + }, + { + "label": "test_can_advance_confirm_step_always_true()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L45", + "id": "ui_test_wizard_project_page_test_can_advance_confirm_step_always_true", + "community": 77, + "norm_label": "test_can_advance_confirm_step_always_true()" + }, + { + "label": "test_can_advance_default_step_is_lims_project()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L49", + "id": "ui_test_wizard_project_page_test_can_advance_default_step_is_lims_project", + "community": 77, + "norm_label": "test_can_advance_default_step_is_lims_project()" + }, + { + "label": "test_can_advance_readme_blocks_on_partial_core_fields()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L58", + "id": "ui_test_wizard_project_page_test_can_advance_readme_blocks_on_partial_core_fields", + "community": 77, + "norm_label": "test_can_advance_readme_blocks_on_partial_core_fields()" + }, + { + "label": "test_disk_space_message_none_when_unknown()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L71", + "id": "ui_test_wizard_project_page_test_disk_space_message_none_when_unknown", + "community": 77, + "norm_label": "test_disk_space_message_none_when_unknown()" + }, + { + "label": "test_disk_space_message_none_when_ample()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L76", + "id": "ui_test_wizard_project_page_test_disk_space_message_none_when_ample", + "community": 77, + "norm_label": "test_disk_space_message_none_when_ample()" + }, + { + "label": "test_disk_space_message_present_just_below_threshold()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L81", + "id": "ui_test_wizard_project_page_test_disk_space_message_present_just_below_threshold", + "community": 77, + "norm_label": "test_disk_space_message_present_just_below_threshold()" + }, + { + "label": "test_state_lims_project_name_defaults_empty_and_is_settable()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L92", + "id": "ui_test_wizard_project_page_test_state_lims_project_name_defaults_empty_and_is_settable", + "community": 77, + "norm_label": "test_state_lims_project_name_defaults_empty_and_is_settable()" + }, + { + "label": "test_render_project_wizard_with_choices_does_not_raise()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L104", + "id": "ui_test_wizard_project_page_test_render_project_wizard_with_choices_does_not_raise", + "community": 77, + "norm_label": "test_render_project_wizard_with_choices_does_not_raise()" + }, + { + "label": "test_render_project_wizard_with_empty_choices_does_not_raise()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L114", + "id": "ui_test_wizard_project_page_test_render_project_wizard_with_empty_choices_does_not_raise", + "community": 77, + "norm_label": "test_render_project_wizard_with_empty_choices_does_not_raise()" + }, + { + "label": "test_render_project_wizard_defaults_state_when_omitted()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L123", + "id": "ui_test_wizard_project_page_test_render_project_wizard_defaults_state_when_omitted", + "community": 77, + "norm_label": "test_render_project_wizard_defaults_state_when_omitted()" + }, + { + "label": "test_wizard_project_step_titles_cover_every_step()", + "file_type": "code", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L128", + "id": "ui_test_wizard_project_page_test_wizard_project_step_titles_cover_every_step", + "community": 77, + "norm_label": "test_wizard_project_step_titles_cover_every_step()" + }, + { + "label": "Tests for the New Project Wizard helpers (gaps not covered by test_pages). ``te", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L1", + "id": "ui_test_wizard_project_page_rationale_1", + "community": 77, + "norm_label": "tests for the new project wizard helpers (gaps not covered by test_pages). ``te" + }, + { + "label": "test_folder_feed.py", + "file_type": "code", + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L1", + "id": "tests_unit_ui_test_folder_feed_py", + "community": 71, + "norm_label": "test_folder_feed.py" + }, + { + "label": "test_folder_feed_start_then_stop_calls_fetch_at_least_once()", + "file_type": "code", + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L18", + "id": "ui_test_folder_feed_test_folder_feed_start_then_stop_calls_fetch_at_least_once", + "community": 71, + "norm_label": "test_folder_feed_start_then_stop_calls_fetch_at_least_once()" + }, + { + "label": "test_folder_feed_switching_paths_stops_previous()", + "file_type": "code", + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L34", + "id": "ui_test_folder_feed_test_folder_feed_switching_paths_stops_previous", + "community": 71, + "norm_label": "test_folder_feed_switching_paths_stops_previous()" + }, + { + "label": "test_folder_feed_pause_skips_fetch()", + "file_type": "code", + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L53", + "id": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", + "community": 71, + "norm_label": "test_folder_feed_pause_skips_fetch()" + }, + { + "label": "test_refresh_coordinator_coalesces_within_window()", + "file_type": "code", + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L73", + "id": "ui_test_folder_feed_test_refresh_coordinator_coalesces_within_window", + "community": 71, + "norm_label": "test_refresh_coordinator_coalesces_within_window()" + }, + { + "label": "Unit tests for the folder-feed + refresh-coordinator client modules. GUI/Orches", + "file_type": "rationale", + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L1", + "id": "ui_test_folder_feed_rationale_1", + "community": 71, + "norm_label": "unit tests for the folder-feed + refresh-coordinator client modules. gui/orches" + }, + { + "label": "test_catalogue.py", + "file_type": "code", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L1", + "id": "tests_unit_lims_test_catalogue_py", + "community": 113, + "norm_label": "test_catalogue.py" + }, + { + "label": "_make_catalogue()", + "file_type": "code", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L14", + "id": "lims_test_catalogue_make_catalogue", + "community": 113, + "norm_label": "_make_catalogue()" + }, + { + "label": "test_round_trip_via_write_then_read()", + "file_type": "code", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L36", + "id": "lims_test_catalogue_test_round_trip_via_write_then_read", + "community": 113, + "norm_label": "test_round_trip_via_write_then_read()" + }, + { + "label": "test_read_missing_file_raises()", + "file_type": "code", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L48", + "id": "lims_test_catalogue_test_read_missing_file_raises", + "community": 113, + "norm_label": "test_read_missing_file_raises()" + }, + { + "label": "test_read_invalid_json_raises()", + "file_type": "code", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L53", + "id": "lims_test_catalogue_test_read_invalid_json_raises", + "community": 113, + "norm_label": "test_read_invalid_json_raises()" + }, + { + "label": "test_read_non_object_raises()", + "file_type": "code", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L60", + "id": "lims_test_catalogue_test_read_non_object_raises", + "community": 113, + "norm_label": "test_read_non_object_raises()" + }, + { + "label": "test_schema_version_mismatch_treated_as_absent()", + "file_type": "code", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L67", + "id": "lims_test_catalogue_test_schema_version_mismatch_treated_as_absent", + "community": 113, + "norm_label": "test_schema_version_mismatch_treated_as_absent()" + }, + { + "label": "test_endpoint_mismatch_raises()", + "file_type": "code", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L85", + "id": "lims_test_catalogue_test_endpoint_mismatch_raises", + "community": 113, + "norm_label": "test_endpoint_mismatch_raises()" + }, + { + "label": "test_write_creates_parent_directory()", + "file_type": "code", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L93", + "id": "lims_test_catalogue_test_write_creates_parent_directory", + "community": 113, + "norm_label": "test_write_creates_parent_directory()" + }, + { + "label": "test_write_atomic_replaces_previous_file()", + "file_type": "code", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L100", + "id": "lims_test_catalogue_test_write_atomic_replaces_previous_file", + "community": 113, + "norm_label": "test_write_atomic_replaces_previous_file()" + }, + { + "label": "test_read_handles_missing_projects_array()", + "file_type": "code", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L121", + "id": "lims_test_catalogue_test_read_handles_missing_projects_array", + "community": 113, + "norm_label": "test_read_handles_missing_projects_array()" + }, + { + "label": "Tests for the offline LIMS-project catalogue I/O. Backend Spec \u00a77.2.9.", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L1", + "id": "lims_test_catalogue_rationale_1", + "community": 113, + "norm_label": "tests for the offline lims-project catalogue i/o. backend spec \u00a77.2.9." + }, + { + "label": "test_keyring_store.py", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L1", + "id": "tests_unit_lims_test_keyring_store_py", + "community": 26, + "norm_label": "test_keyring_store.py" + }, + { + "label": "_InMemoryKeyring", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L25", + "id": "lims_test_keyring_store_inmemorykeyring", + "community": 282, + "norm_label": "_inmemorykeyring" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L30", + "id": "lims_test_keyring_store_inmemorykeyring_init", + "community": 282, + "norm_label": ".__init__()" + }, + { + "label": ".get_password()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L33", + "id": "lims_test_keyring_store_inmemorykeyring_get_password", + "community": 282, + "norm_label": ".get_password()" + }, + { + "label": ".set_password()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L36", + "id": "lims_test_keyring_store_inmemorykeyring_set_password", + "community": 282, + "norm_label": ".set_password()" + }, + { + "label": ".delete_password()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L39", + "id": "lims_test_keyring_store_inmemorykeyring_delete_password", + "community": 282, + "norm_label": ".delete_password()" + }, + { + "label": "_BrokenKeyring", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L45", + "id": "lims_test_keyring_store_brokenkeyring", + "community": 26, + "norm_label": "_brokenkeyring" + }, + { + "label": ".get_password()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L50", + "id": "lims_test_keyring_store_brokenkeyring_get_password", + "community": 26, + "norm_label": ".get_password()" + }, + { + "label": ".set_password()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L53", + "id": "lims_test_keyring_store_brokenkeyring_set_password", + "community": 26, + "norm_label": ".set_password()" + }, + { + "label": ".delete_password()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L56", + "id": "lims_test_keyring_store_brokenkeyring_delete_password", + "community": 26, + "norm_label": ".delete_password()" + }, + { + "label": "_swap_keyring()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L61", + "id": "lims_test_keyring_store_swap_keyring", + "community": 26, + "norm_label": "_swap_keyring()" + }, + { + "label": "test_set_get_delete_via_os_keyring()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L70", + "id": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", + "community": 26, + "norm_label": "test_set_get_delete_via_os_keyring()" + }, + { + "label": "test_get_returns_none_for_missing()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L79", + "id": "lims_test_keyring_store_test_get_returns_none_for_missing", + "community": 26, + "norm_label": "test_get_returns_none_for_missing()" + }, + { + "label": "test_delete_missing_is_silent()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L85", + "id": "lims_test_keyring_store_test_delete_missing_is_silent", + "community": 26, + "norm_label": "test_delete_missing_is_silent()" + }, + { + "label": "test_is_keyring_available_true()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L93", + "id": "lims_test_keyring_store_test_is_keyring_available_true", + "community": 26, + "norm_label": "test_is_keyring_available_true()" + }, + { + "label": "test_is_keyring_available_false_on_broken_backend()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L99", + "id": "lims_test_keyring_store_test_is_keyring_available_false_on_broken_backend", + "community": 26, + "norm_label": "test_is_keyring_available_false_on_broken_backend()" + }, + { + "label": "test_fallback_round_trip()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L105", + "id": "lims_test_keyring_store_test_fallback_round_trip", + "community": 26, + "norm_label": "test_fallback_round_trip()" + }, + { + "label": "test_fallback_delete()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L122", + "id": "lims_test_keyring_store_test_fallback_delete", + "community": 26, + "norm_label": "test_fallback_delete()" + }, + { + "label": "test_fallback_wrong_passphrase_raises()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L138", + "id": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", + "community": 26, + "norm_label": "test_fallback_wrong_passphrase_raises()" + }, + { + "label": "test_fallback_no_passphrase_raises()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L155", + "id": "lims_test_keyring_store_test_fallback_no_passphrase_raises", + "community": 26, + "norm_label": "test_fallback_no_passphrase_raises()" + }, + { + "label": "test_fallback_empty_passphrase_raises()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L162", + "id": "lims_test_keyring_store_test_fallback_empty_passphrase_raises", + "community": 26, + "norm_label": "test_fallback_empty_passphrase_raises()" + }, + { + "label": "test_fallback_file_format_integrity()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L169", + "id": "lims_test_keyring_store_test_fallback_file_format_integrity", + "community": 26, + "norm_label": "test_fallback_file_format_integrity()" + }, + { + "label": "test_fallback_corrupt_file_raises()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L185", + "id": "lims_test_keyring_store_test_fallback_corrupt_file_raises", + "community": 26, + "norm_label": "test_fallback_corrupt_file_raises()" + }, + { + "label": "test_fallback_unsupported_version_raises()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L198", + "id": "lims_test_keyring_store_test_fallback_unsupported_version_raises", + "community": 26, + "norm_label": "test_fallback_unsupported_version_raises()" + }, + { + "label": "test_fallback_missing_fields_raises()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L212", + "id": "lims_test_keyring_store_test_fallback_missing_fields_raises", + "community": 26, + "norm_label": "test_fallback_missing_fields_raises()" + }, + { + "label": "test_fallback_set_then_overwrite()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L224", + "id": "lims_test_keyring_store_test_fallback_set_then_overwrite", + "community": 26, + "norm_label": "test_fallback_set_then_overwrite()" + }, + { + "label": "test_keyring_set_failure_falls_back()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L236", + "id": "lims_test_keyring_store_test_keyring_set_failure_falls_back", + "community": 26, + "norm_label": "test_keyring_set_failure_falls_back()" + }, + { + "label": "test_is_keyring_available_false_on_unexpected_exception()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L249", + "id": "lims_test_keyring_store_test_is_keyring_available_false_on_unexpected_exception", + "community": 26, + "norm_label": "test_is_keyring_available_false_on_unexpected_exception()" + }, + { + "label": "test_fallback_get_when_no_secrets_file()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L269", + "id": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", + "community": 26, + "norm_label": "test_fallback_get_when_no_secrets_file()" + }, + { + "label": "test_fallback_delete_when_no_file()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L281", + "id": "lims_test_keyring_store_test_fallback_delete_when_no_file", + "community": 26, + "norm_label": "test_fallback_delete_when_no_file()" + }, + { + "label": "test_fallback_delete_when_username_absent()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L292", + "id": "lims_test_keyring_store_test_fallback_delete_when_username_absent", + "community": 26, + "norm_label": "test_fallback_delete_when_username_absent()" + }, + { + "label": "test_load_fallback_unreadable_path_raises()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L306", + "id": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", + "community": 26, + "norm_label": "test_load_fallback_unreadable_path_raises()" + }, + { + "label": "test_fallback_plaintext_must_be_object()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L324", + "id": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", + "community": 26, + "norm_label": "test_fallback_plaintext_must_be_object()" + }, + { + "label": "test_envelope_must_be_object()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L360", + "id": "lims_test_keyring_store_test_envelope_must_be_object", + "community": 26, + "norm_label": "test_envelope_must_be_object()" + }, + { + "label": "test_get_consults_fallback_when_keyring_missing()", + "file_type": "code", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L373", + "id": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", + "community": 26, + "norm_label": "test_get_consults_fallback_when_keyring_missing()" + }, + { + "label": "Tests for :class:`exlab_wizard.lims.keyring_store.KeyringStore`. The OS-keyring", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L1", + "id": "lims_test_keyring_store_rationale_1", + "community": 26, + "norm_label": "tests for :class:`exlab_wizard.lims.keyring_store.keyringstore`. the os-keyring" + }, + { + "label": "Trivial in-memory keyring backend used to drive the OS-keyring path.", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L26", + "id": "lims_test_keyring_store_rationale_26", + "community": 282, + "norm_label": "trivial in-memory keyring backend used to drive the os-keyring path." + }, + { + "label": "Keyring backend that raises on every operation.", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L46", + "id": "lims_test_keyring_store_rationale_46", + "community": 26, + "norm_label": "keyring backend that raises on every operation." + }, + { + "label": "Set + get via the encrypted fallback (no OS keyring).", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L106", + "id": "lims_test_keyring_store_rationale_106", + "community": 26, + "norm_label": "set + get via the encrypted fallback (no os keyring)." + }, + { + "label": "The fallback file is a JSON envelope with version, salt, ciphertext.", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L170", + "id": "lims_test_keyring_store_rationale_170", + "community": 26, + "norm_label": "the fallback file is a json envelope with version, salt, ciphertext." + }, + { + "label": "A second ``set_password`` overwrites the prior secret.", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L225", + "id": "lims_test_keyring_store_rationale_225", + "community": 26, + "norm_label": "a second ``set_password`` overwrites the prior secret." + }, + { + "label": "When the OS keyring set fails, the encrypted-at-rest write is used and a sub", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L237", + "id": "lims_test_keyring_store_rationale_237", + "community": 26, + "norm_label": "when the os keyring set fails, the encrypted-at-rest write is used and a sub" + }, + { + "label": "A backend raising a non-KeyringError is also treated as unavailable.", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L250", + "id": "lims_test_keyring_store_rationale_250", + "community": 26, + "norm_label": "a backend raising a non-keyringerror is also treated as unavailable." + }, + { + "label": "``get_password`` returns None (not error) when keyring is broken and the fal", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L270", + "id": "lims_test_keyring_store_rationale_270", + "community": 26, + "norm_label": "``get_password`` returns none (not error) when keyring is broken and the fal" + }, + { + "label": "Deleting against a broken keyring with no fallback file is silent.", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L282", + "id": "lims_test_keyring_store_rationale_282", + "community": 26, + "norm_label": "deleting against a broken keyring with no fallback file is silent." + }, + { + "label": "Deleting a missing username in the fallback file is silent.", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L293", + "id": "lims_test_keyring_store_rationale_293", + "community": 26, + "norm_label": "deleting a missing username in the fallback file is silent." + }, + { + "label": "An OSError during fallback read surfaces as KeyringUnavailableError.", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L307", + "id": "lims_test_keyring_store_rationale_307", + "community": 26, + "norm_label": "an oserror during fallback read surfaces as keyringunavailableerror." + }, + { + "label": "If the decrypted plaintext is a non-object JSON value, the read raises.", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L325", + "id": "lims_test_keyring_store_rationale_325", + "community": 26, + "norm_label": "if the decrypted plaintext is a non-object json value, the read raises." + }, + { + "label": "A JSON list at the envelope layer is rejected as malformed.", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L361", + "id": "lims_test_keyring_store_rationale_361", + "community": 26, + "norm_label": "a json list at the envelope layer is rejected as malformed." + }, + { + "label": "If the OS keyring returns None but the fallback file exists, the fallback is", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L374", + "id": "lims_test_keyring_store_rationale_374", + "community": 26, + "norm_label": "if the os keyring returns none but the fallback file exists, the fallback is" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/lims/__init__.py", + "source_location": "L1", + "id": "tests_unit_lims_init_py", + "community": 325, + "norm_label": "__init__.py" + }, + { + "label": "LIMS integration package. Backend Spec \u00a77.2 + \u00a77.4. Public surface: - :class:`", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/__init__.py", + "source_location": "L1", + "id": "lims_init_rationale_1", + "community": 325, + "norm_label": "lims integration package. backend spec \u00a77.2 + \u00a77.4. public surface: - :class:`" + }, + { + "label": "test_client.py", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L1", + "id": "tests_unit_lims_test_client_py", + "community": 99, + "norm_label": "test_client.py" + }, + { + "label": "_make_client()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L22", + "id": "lims_test_client_make_client", + "community": 99, + "norm_label": "_make_client()" + }, + { + "label": "test_login_happy_path()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L35", + "id": "lims_test_client_test_login_happy_path", + "community": 99, + "norm_label": "test_login_happy_path()" + }, + { + "label": "test_login_uses_explicit_password_over_provider()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L48", + "id": "lims_test_client_test_login_uses_explicit_password_over_provider", + "community": 99, + "norm_label": "test_login_uses_explicit_password_over_provider()" + }, + { + "label": "test_login_wrong_password_raises()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L59", + "id": "lims_test_client_test_login_wrong_password_raises", + "community": 99, + "norm_label": "test_login_wrong_password_raises()" + }, + { + "label": "test_login_with_no_password_raises_config_error()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L69", + "id": "lims_test_client_test_login_with_no_password_raises_config_error", + "community": 99, + "norm_label": "test_login_with_no_password_raises_config_error()" + }, + { + "label": "test_list_projects_returns_typed_rows()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L79", + "id": "lims_test_client_test_list_projects_returns_typed_rows", + "community": 99, + "norm_label": "test_list_projects_returns_typed_rows()" + }, + { + "label": "test_list_projects_status_filter()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L93", + "id": "lims_test_client_test_list_projects_status_filter", + "community": 99, + "norm_label": "test_list_projects_status_filter()" + }, + { + "label": "test_get_project_by_uid()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L122", + "id": "lims_test_client_test_get_project_by_uid", + "community": 99, + "norm_label": "test_get_project_by_uid()" + }, + { + "label": "test_get_project_by_short_id()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L134", + "id": "lims_test_client_test_get_project_by_short_id", + "community": 99, + "norm_label": "test_get_project_by_short_id()" + }, + { + "label": "test_get_project_404_returns_none()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L146", + "id": "lims_test_client_test_get_project_404_returns_none", + "community": 99, + "norm_label": "test_get_project_404_returns_none()" + }, + { + "label": "test_get_me()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L157", + "id": "lims_test_client_test_get_me", + "community": 99, + "norm_label": "test_get_me()" + }, + { + "label": "test_health_check_ok()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L169", + "id": "lims_test_client_test_health_check_ok", + "community": 99, + "norm_label": "test_health_check_ok()" + }, + { + "label": "test_health_check_failure_returns_status()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L182", + "id": "lims_test_client_test_health_check_failure_returns_status", + "community": 99, + "norm_label": "test_health_check_failure_returns_status()" + }, + { + "label": "test_relogin_after_401()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L197", + "id": "lims_test_client_test_relogin_after_401", + "community": 99, + "norm_label": "test_relogin_after_401()" + }, + { + "label": "test_health_check_returns_non200_status()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L213", + "id": "lims_test_client_test_health_check_returns_non200_status", + "community": 99, + "norm_label": "test_health_check_returns_non200_status()" + }, + { + "label": "test_endpoint_strips_trailing_slash()", + "file_type": "code", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L243", + "id": "lims_test_client_test_endpoint_strips_trailing_slash", + "community": 76, + "norm_label": "test_endpoint_strips_trailing_slash()" + }, + { + "label": "Tests for :class:`exlab_wizard.lims.client.LIMSClient`. Each test wires the cli", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L1", + "id": "lims_test_client_rationale_1", + "community": 99, + "norm_label": "tests for :class:`exlab_wizard.lims.client.limsclient`. each test wires the cli" + }, + { + "label": "``health_check`` MUST NOT raise. Per Backend Spec \u00a77.2.3.", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L183", + "id": "lims_test_client_rationale_183", + "community": 99, + "norm_label": "``health_check`` must not raise. per backend spec \u00a77.2.3." + }, + { + "label": "When the LIMS invalidates the cookie mid-flight, the client transparently re", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L198", + "id": "lims_test_client_rationale_198", + "community": 99, + "norm_label": "when the lims invalidates the cookie mid-flight, the client transparently re" + }, + { + "label": "When the LIMS returns a non-2xx status, ``health_check`` returns ``ok=False`", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L214", + "id": "lims_test_client_rationale_214", + "community": 99, + "norm_label": "when the lims returns a non-2xx status, ``health_check`` returns ``ok=false`" + }, + { + "label": "test_cache.py", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L1", + "id": "tests_unit_lims_test_cache_py", + "community": 100, + "norm_label": "test_cache.py" + }, + { + "label": "_project()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L19", + "id": "lims_test_cache_project", + "community": 100, + "norm_label": "_project()" + }, + { + "label": "test_init_creates_table_idempotent()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L39", + "id": "lims_test_cache_test_init_creates_table_idempotent", + "community": 100, + "norm_label": "test_init_creates_table_idempotent()" + }, + { + "label": "test_upsert_many_then_list()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L47", + "id": "lims_test_cache_test_upsert_many_then_list", + "community": 100, + "norm_label": "test_upsert_many_then_list()" + }, + { + "label": "test_upsert_many_empty_is_noop()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L59", + "id": "lims_test_cache_test_upsert_many_empty_is_noop", + "community": 100, + "norm_label": "test_upsert_many_empty_is_noop()" + }, + { + "label": "test_upsert_updates_existing_row()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L70", + "id": "lims_test_cache_test_upsert_updates_existing_row", + "community": 100, + "norm_label": "test_upsert_updates_existing_row()" + }, + { + "label": "test_get_project_by_uid_or_short_id()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L95", + "id": "lims_test_cache_test_get_project_by_uid_or_short_id", + "community": 100, + "norm_label": "test_get_project_by_uid_or_short_id()" + }, + { + "label": "test_get_project_missing_returns_none()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L108", + "id": "lims_test_cache_test_get_project_missing_returns_none", + "community": 100, + "norm_label": "test_get_project_missing_returns_none()" + }, + { + "label": "test_list_projects_status_filter()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L118", + "id": "lims_test_cache_test_list_projects_status_filter", + "community": 100, + "norm_label": "test_list_projects_status_filter()" + }, + { + "label": "test_is_fresh_true_when_within_ttl()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L135", + "id": "lims_test_cache_test_is_fresh_true_when_within_ttl", + "community": 100, + "norm_label": "test_is_fresh_true_when_within_ttl()" + }, + { + "label": "test_is_fresh_false_when_stale()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L145", + "id": "lims_test_cache_test_is_fresh_false_when_stale", + "community": 100, + "norm_label": "test_is_fresh_false_when_stale()" + }, + { + "label": "test_is_fresh_false_when_empty()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L156", + "id": "lims_test_cache_test_is_fresh_false_when_empty", + "community": 100, + "norm_label": "test_is_fresh_false_when_empty()" + }, + { + "label": "test_is_fresh_handles_zulu_suffix()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L165", + "id": "lims_test_cache_test_is_fresh_handles_zulu_suffix", + "community": 100, + "norm_label": "test_is_fresh_handles_zulu_suffix()" + }, + { + "label": "test_is_fresh_ignores_invalid_timestamp()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L179", + "id": "lims_test_cache_test_is_fresh_ignores_invalid_timestamp", + "community": 100, + "norm_label": "test_is_fresh_ignores_invalid_timestamp()" + }, + { + "label": "test_endpoint_isolates_rows()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L192", + "id": "lims_test_cache_test_endpoint_isolates_rows", + "community": 100, + "norm_label": "test_endpoint_isolates_rows()" + }, + { + "label": "test_require_conn_before_init_raises()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L206", + "id": "lims_test_cache_test_require_conn_before_init_raises", + "community": 100, + "norm_label": "test_require_conn_before_init_raises()" + }, + { + "label": "test_close_is_idempotent()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L212", + "id": "lims_test_cache_test_close_is_idempotent", + "community": 100, + "norm_label": "test_close_is_idempotent()" + }, + { + "label": "test_is_fresh_handles_naive_timestamp()", + "file_type": "code", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L220", + "id": "lims_test_cache_test_is_fresh_handles_naive_timestamp", + "community": 100, + "norm_label": "test_is_fresh_handles_naive_timestamp()" + }, + { + "label": "Tests for :class:`exlab_wizard.lims.cache.LIMSCache`. The cache is the \u00a77.2.4 S", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L1", + "id": "lims_test_cache_rationale_1", + "community": 100, + "norm_label": "tests for :class:`exlab_wizard.lims.cache.limscache`. the cache is the \u00a77.2.4 s" + }, + { + "label": "A naive ISO timestamp (no offset) is treated as UTC by the cache.", + "file_type": "rationale", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L221", + "id": "lims_test_cache_rationale_221", + "community": 100, + "norm_label": "a naive iso timestamp (no offset) is treated as utc by the cache." + }, + { + "label": "test_engine_creation.py", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L1", + "id": "tests_unit_validator_test_engine_creation_py", + "community": 19, + "norm_label": "test_engine_creation.py" + }, + { + "label": "_clean_input()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L38", + "id": "validator_test_engine_creation_clean_input", + "community": 19, + "norm_label": "_clean_input()" + }, + { + "label": "test_split_path_segments_posix_path()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L85", + "id": "validator_test_engine_creation_test_split_path_segments_posix_path", + "community": 19, + "norm_label": "test_split_path_segments_posix_path()" + }, + { + "label": "test_split_path_segments_windows_path()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L90", + "id": "validator_test_engine_creation_test_split_path_segments_windows_path", + "community": 19, + "norm_label": "test_split_path_segments_windows_path()" + }, + { + "label": "test_split_path_segments_empty_string()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L96", + "id": "validator_test_engine_creation_test_split_path_segments_empty_string", + "community": 19, + "norm_label": "test_split_path_segments_empty_string()" + }, + { + "label": "test_split_path_segments_drops_trailing_slash()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L100", + "id": "validator_test_engine_creation_test_split_path_segments_drops_trailing_slash", + "community": 19, + "norm_label": "test_split_path_segments_drops_trailing_slash()" + }, + { + "label": "test_validator_default_config_uses_spec_defaults()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L110", + "id": "validator_test_engine_creation_test_validator_default_config_uses_spec_defaults", + "community": 19, + "norm_label": "test_validator_default_config_uses_spec_defaults()" + }, + { + "label": "test_validator_accepts_explicit_config()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L119", + "id": "validator_test_engine_creation_test_validator_accepts_explicit_config", + "community": 120, + "norm_label": "test_validator_accepts_explicit_config()" + }, + { + "label": "test_clean_input_returns_empty_list()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L131", + "id": "validator_test_engine_creation_test_clean_input_returns_empty_list", + "community": 19, + "norm_label": "test_clean_input_returns_empty_list()" + }, + { + "label": "test_clean_input_with_test_run_returns_empty_list()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L136", + "id": "validator_test_engine_creation_test_clean_input_with_test_run_returns_empty_list", + "community": 19, + "norm_label": "test_clean_input_with_test_run_returns_empty_list()" + }, + { + "label": "test_unresolved_placeholder_in_path_segment_triggers_finding()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L152", + "id": "validator_test_engine_creation_test_unresolved_placeholder_in_path_segment_triggers_finding", + "community": 19, + "norm_label": "test_unresolved_placeholder_in_path_segment_triggers_finding()" + }, + { + "label": "test_unresolved_placeholder_in_file_name_triggers_finding()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L167", + "id": "validator_test_engine_creation_test_unresolved_placeholder_in_file_name_triggers_finding", + "community": 19, + "norm_label": "test_unresolved_placeholder_in_file_name_triggers_finding()" + }, + { + "label": "test_leftover_jinja_marker_in_file_content_triggers_finding()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L183", + "id": "validator_test_engine_creation_test_leftover_jinja_marker_in_file_content_triggers_finding", + "community": 19, + "norm_label": "test_leftover_jinja_marker_in_file_content_triggers_finding()" + }, + { + "label": "test_illegal_filesystem_character_in_file_name_triggers_finding()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L195", + "id": "validator_test_engine_creation_test_illegal_filesystem_character_in_file_name_triggers_finding", + "community": 19, + "norm_label": "test_illegal_filesystem_character_in_file_name_triggers_finding()" + }, + { + "label": "test_reserved_filesystem_name_triggers_finding()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L211", + "id": "validator_test_engine_creation_test_reserved_filesystem_name_triggers_finding", + "community": 19, + "norm_label": "test_reserved_filesystem_name_triggers_finding()" + }, + { + "label": "test_run_leaf_with_test_run_kind_triggers_mode_prefix_mismatch()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L225", + "id": "validator_test_engine_creation_test_run_leaf_with_test_run_kind_triggers_mode_prefix_mismatch", + "community": 19, + "norm_label": "test_run_leaf_with_test_run_kind_triggers_mode_prefix_mismatch()" + }, + { + "label": "test_test_run_leaf_with_experimental_run_kind_triggers_mode_prefix_mismatch()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L238", + "id": "validator_test_engine_creation_test_test_run_leaf_with_experimental_run_kind_triggers_mode_prefix_mismatch", + "community": 19, + "norm_label": "test_test_run_leaf_with_experimental_run_kind_triggers_mode_prefix_mismatch()" + }, + { + "label": "test_missing_required_field_triggers_soft_tier_finding()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L254", + "id": "validator_test_engine_creation_test_missing_required_field_triggers_soft_tier_finding", + "community": 19, + "norm_label": "test_missing_required_field_triggers_soft_tier_finding()" + }, + { + "label": "test_required_field_present_does_not_trigger_finding()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L272", + "id": "validator_test_engine_creation_test_required_field_present_does_not_trigger_finding", + "community": 19, + "norm_label": "test_required_field_present_does_not_trigger_finding()" + }, + { + "label": "test_malformed_yaml_front_matter_triggers_soft_tier_finding()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L288", + "id": "validator_test_engine_creation_test_malformed_yaml_front_matter_triggers_soft_tier_finding", + "community": 19, + "norm_label": "test_malformed_yaml_front_matter_triggers_soft_tier_finding()" + }, + { + "label": "test_no_readme_md_skips_front_matter_rule()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L304", + "id": "validator_test_engine_creation_test_no_readme_md_skips_front_matter_rule", + "community": 19, + "norm_label": "test_no_readme_md_skips_front_matter_rule()" + }, + { + "label": "test_multiple_findings_aggregate_in_one_call()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L320", + "id": "validator_test_engine_creation_test_multiple_findings_aggregate_in_one_call", + "community": 19, + "norm_label": "test_multiple_findings_aggregate_in_one_call()" + }, + { + "label": "test_findings_are_sorted_with_hard_tier_first()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L342", + "id": "validator_test_engine_creation_test_findings_are_sorted_with_hard_tier_first", + "community": 19, + "norm_label": "test_findings_are_sorted_with_hard_tier_first()" + }, + { + "label": "test_findings_sorted_lexicographically_within_same_tier()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L366", + "id": "validator_test_engine_creation_test_findings_sorted_lexicographically_within_same_tier", + "community": 19, + "norm_label": "test_findings_sorted_lexicographically_within_same_tier()" + }, + { + "label": "test_findings_carry_run_path_from_proposed_path()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L386", + "id": "validator_test_engine_creation_test_findings_carry_run_path_from_proposed_path", + "community": 19, + "norm_label": "test_findings_carry_run_path_from_proposed_path()" + }, + { + "label": "test_findings_default_audit_flags_to_false()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L395", + "id": "validator_test_engine_creation_test_findings_default_audit_flags_to_false", + "community": 19, + "norm_label": "test_findings_default_audit_flags_to_false()" + }, + { + "label": "test_findings_are_finding_instances()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L408", + "id": "validator_test_engine_creation_test_findings_are_finding_instances", + "community": 19, + "norm_label": "test_findings_are_finding_instances()" + }, + { + "label": "test_creation_validation_input_is_frozen()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L424", + "id": "validator_test_engine_creation_test_creation_validation_input_is_frozen", + "community": 19, + "norm_label": "test_creation_validation_input_is_frozen()" + }, + { + "label": "test_creation_validation_input_defaults()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L431", + "id": "validator_test_engine_creation_test_creation_validation_input_defaults", + "community": 19, + "norm_label": "test_creation_validation_input_defaults()" + }, + { + "label": "Unit tests for ``exlab_wizard.validator.engine`` -- creation-time mode. The eng", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L1", + "id": "validator_test_engine_creation_rationale_1", + "community": 19, + "norm_label": "unit tests for ``exlab_wizard.validator.engine`` -- creation-time mode. the eng" + }, + { + "label": "A creation-time input that should produce zero findings. The proposed path", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L39", + "id": "validator_test_engine_creation_rationale_39", + "community": 19, + "norm_label": "a creation-time input that should produce zero findings. the proposed path" + }, + { + "label": "Default ValidatorConfig matches the \u00a79 documented defaults.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L111", + "id": "validator_test_engine_creation_rationale_111", + "community": 19, + "norm_label": "default validatorconfig matches the \u00a79 documented defaults." + }, + { + "label": "Test-mode input with TestRuns/ parent and TestRun_ leaf passes.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L137", + "id": "validator_test_engine_creation_rationale_137", + "community": 19, + "norm_label": "test-mode input with testruns/ parent and testrun_ leaf passes." + }, + { + "label": "An angle-bracket identifier in a path segment fires \u00a78.1.1.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L153", + "id": "validator_test_engine_creation_rationale_153", + "community": 19, + "norm_label": "an angle-bracket identifier in a path segment fires \u00a78.1.1." + }, + { + "label": "A Windows-illegal char in a file name fires \u00a78.1.2.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L196", + "id": "validator_test_engine_creation_rationale_196", + "community": 19, + "norm_label": "a windows-illegal char in a file name fires \u00a78.1.2." + }, + { + "label": "A Windows-reserved file base name (CON, NUL, ...) fires \u00a78.1.2.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L212", + "id": "validator_test_engine_creation_rationale_212", + "community": 19, + "norm_label": "a windows-reserved file base name (con, nul, ...) fires \u00a78.1.2." + }, + { + "label": "A ``Run_`` leaf paired with ``run_kind='test'`` fires \u00a78.1.3.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L226", + "id": "validator_test_engine_creation_rationale_226", + "community": 19, + "norm_label": "a ``run_`` leaf paired with ``run_kind='test'`` fires \u00a78.1.3." + }, + { + "label": "A ``TestRun_`` leaf with ``run_kind='experimental'`` fires \u00a78.1.3.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L239", + "id": "validator_test_engine_creation_rationale_239", + "community": 19, + "norm_label": "a ``testrun_`` leaf with ``run_kind='experimental'`` fires \u00a78.1.3." + }, + { + "label": "A required field absent from readme_fields fires \u00a78.1.5.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L255", + "id": "validator_test_engine_creation_rationale_255", + "community": 19, + "norm_label": "a required field absent from readme_fields fires \u00a78.1.5." + }, + { + "label": "When the required field IS present in readme_fields, no finding.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L273", + "id": "validator_test_engine_creation_rationale_273", + "community": 19, + "norm_label": "when the required field is present in readme_fields, no finding." + }, + { + "label": "An unterminated front-matter block fires \u00a78.1.1's malformed soft rule.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L289", + "id": "validator_test_engine_creation_rationale_289", + "community": 19, + "norm_label": "an unterminated front-matter block fires \u00a78.1.1's malformed soft rule." + }, + { + "label": "Front-matter rule does not run if README.md is absent from inputs.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L305", + "id": "validator_test_engine_creation_rationale_305", + "community": 19, + "norm_label": "front-matter rule does not run if readme.md is absent from inputs." + }, + { + "label": "A single bundle that trips multiple rules surfaces all findings.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L321", + "id": "validator_test_engine_creation_rationale_321", + "community": 19, + "norm_label": "a single bundle that trips multiple rules surfaces all findings." + }, + { + "label": "The output is sorted with hard-tier findings before soft.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L343", + "id": "validator_test_engine_creation_rationale_343", + "community": 19, + "norm_label": "the output is sorted with hard-tier findings before soft." + }, + { + "label": "Within one tier, findings sort by (rule, offending_path).", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L367", + "id": "validator_test_engine_creation_rationale_367", + "community": 19, + "norm_label": "within one tier, findings sort by (rule, offending_path)." + }, + { + "label": "Engine stamps run_path on every finding from the input.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L387", + "id": "validator_test_engine_creation_rationale_387", + "community": 19, + "norm_label": "engine stamps run_path on every finding from the input." + }, + { + "label": "Audit-only flags default to False at creation time.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L396", + "id": "validator_test_engine_creation_rationale_396", + "community": 19, + "norm_label": "audit-only flags default to false at creation time." + }, + { + "label": "The engine returns :class:`Finding` instances (not dicts).", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L409", + "id": "validator_test_engine_creation_rationale_409", + "community": 19, + "norm_label": "the engine returns :class:`finding` instances (not dicts)." + }, + { + "label": "The input bundle is a frozen dataclass for determinism.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L425", + "id": "validator_test_engine_creation_rationale_425", + "community": 19, + "norm_label": "the input bundle is a frozen dataclass for determinism." + }, + { + "label": "Every field except proposed_path is optional with a safe default.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L432", + "id": "validator_test_engine_creation_rationale_432", + "community": 19, + "norm_label": "every field except proposed_path is optional with a safe default." + }, + { + "label": "test_engine_reconfigure.py", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_reconfigure.py", + "source_location": "L1", + "id": "tests_unit_validator_test_engine_reconfigure_py", + "community": 120, + "norm_label": "test_engine_reconfigure.py" + }, + { + "label": "test_reconfigure_refreshes_scan_limits_and_roots()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_reconfigure.py", + "source_location": "L16", + "id": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", + "community": 120, + "norm_label": "test_reconfigure_refreshes_scan_limits_and_roots()" + }, + { + "label": "test_reconfigure_defaults_to_empty_roots()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_reconfigure.py", + "source_location": "L37", + "id": "validator_test_engine_reconfigure_test_reconfigure_defaults_to_empty_roots", + "community": 120, + "norm_label": "test_reconfigure_defaults_to_empty_roots()" + }, + { + "label": "Unit tests for ``Validator.reconfigure`` (live config reload). The settings dia", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_reconfigure.py", + "source_location": "L1", + "id": "validator_test_engine_reconfigure_rationale_1", + "community": 120, + "norm_label": "unit tests for ``validator.reconfigure`` (live config reload). the settings dia" + }, + { + "label": "test_findings.py", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L1", + "id": "tests_unit_validator_test_findings_py", + "community": 72, + "norm_label": "test_findings.py" + }, + { + "label": "_make_finding()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L23", + "id": "validator_test_findings_make_finding", + "community": 72, + "norm_label": "_make_finding()" + }, + { + "label": "test_finding_instantiation_with_all_fields()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L45", + "id": "validator_test_findings_test_finding_instantiation_with_all_fields", + "community": 72, + "norm_label": "test_finding_instantiation_with_all_fields()" + }, + { + "label": "test_finding_minimum_required_fields()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L58", + "id": "validator_test_findings_test_finding_minimum_required_fields", + "community": 72, + "norm_label": "test_finding_minimum_required_fields()" + }, + { + "label": "test_finding_is_frozen()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L74", + "id": "validator_test_findings_test_finding_is_frozen", + "community": 72, + "norm_label": "test_finding_is_frozen()" + }, + { + "label": "test_to_dict_contains_all_spec_keys()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L86", + "id": "validator_test_findings_test_to_dict_contains_all_spec_keys", + "community": 72, + "norm_label": "test_to_dict_contains_all_spec_keys()" + }, + { + "label": "test_to_dict_values_match_field_values()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L103", + "id": "validator_test_findings_test_to_dict_values_match_field_values", + "community": 72, + "norm_label": "test_to_dict_values_match_field_values()" + }, + { + "label": "test_to_dict_from_dict_round_trip_identity()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L113", + "id": "validator_test_findings_test_to_dict_from_dict_round_trip_identity", + "community": 72, + "norm_label": "test_to_dict_from_dict_round_trip_identity()" + }, + { + "label": "test_from_dict_accepts_minimal_payload()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L119", + "id": "validator_test_findings_test_from_dict_accepts_minimal_payload", + "community": 72, + "norm_label": "test_from_dict_accepts_minimal_payload()" + }, + { + "label": "test_from_dict_ignores_unknown_keys()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L135", + "id": "validator_test_findings_test_from_dict_ignores_unknown_keys", + "community": 72, + "norm_label": "test_from_dict_ignores_unknown_keys()" + }, + { + "label": "test_to_dict_preserves_none_matched_token()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L149", + "id": "validator_test_findings_test_to_dict_preserves_none_matched_token", + "community": 72, + "norm_label": "test_to_dict_preserves_none_matched_token()" + }, + { + "label": "test_finding_is_hashable()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L169", + "id": "validator_test_findings_test_finding_is_hashable", + "community": 72, + "norm_label": "test_finding_is_hashable()" + }, + { + "label": "test_findings_in_set_dedupe_by_value()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L176", + "id": "validator_test_findings_test_findings_in_set_dedupe_by_value", + "community": 72, + "norm_label": "test_findings_in_set_dedupe_by_value()" + }, + { + "label": "test_findings_in_set_distinguish_by_value()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L184", + "id": "validator_test_findings_test_findings_in_set_distinguish_by_value", + "community": 72, + "norm_label": "test_findings_in_set_distinguish_by_value()" + }, + { + "label": "test_findings_can_be_sorted_by_to_dict_key()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L198", + "id": "validator_test_findings_test_findings_can_be_sorted_by_to_dict_key", + "community": 72, + "norm_label": "test_findings_can_be_sorted_by_to_dict_key()" + }, + { + "label": "test_findings_sort_by_tier_then_rule_then_path()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L206", + "id": "validator_test_findings_test_findings_sort_by_tier_then_rule_then_path", + "community": 72, + "norm_label": "test_findings_sort_by_tier_then_rule_then_path()" + }, + { + "label": "test_equality_with_same_field_values()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L224", + "id": "validator_test_findings_test_equality_with_same_field_values", + "community": 72, + "norm_label": "test_equality_with_same_field_values()" + }, + { + "label": "test_inequality_when_one_field_differs()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L230", + "id": "validator_test_findings_test_inequality_when_one_field_differs", + "community": 72, + "norm_label": "test_inequality_when_one_field_differs()" + }, + { + "label": "test_finding_equality_is_not_identity()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L236", + "id": "validator_test_findings_test_finding_equality_is_not_identity", + "community": 72, + "norm_label": "test_finding_equality_is_not_identity()" + }, + { + "label": "test_audit_mode_flags_round_trip()", + "file_type": "code", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L243", + "id": "validator_test_findings_test_audit_mode_flags_round_trip", + "community": 72, + "norm_label": "test_audit_mode_flags_round_trip()" + }, + { + "label": "Unit tests for ``exlab_wizard.validator.findings``. The :class:`Finding` datacl", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L1", + "id": "validator_test_findings_rationale_1", + "community": 72, + "norm_label": "unit tests for ``exlab_wizard.validator.findings``. the :class:`finding` datacl" + }, + { + "label": "Return a canonical Finding matching the \u00a711.8 example payload.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L24", + "id": "validator_test_findings_rationale_24", + "community": 72, + "norm_label": "return a canonical finding matching the \u00a711.8 example payload." + }, + { + "label": "The five non-default fields are required; the rest default.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L59", + "id": "validator_test_findings_rationale_59", + "community": 72, + "norm_label": "the five non-default fields are required; the rest default." + }, + { + "label": "Findings are frozen so they can be hashed / put in sets.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L75", + "id": "validator_test_findings_rationale_75", + "community": 72, + "norm_label": "findings are frozen so they can be hashed / put in sets." + }, + { + "label": "Optional fields default if missing from the payload.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L120", + "id": "validator_test_findings_rationale_120", + "community": 72, + "norm_label": "optional fields default if missing from the payload." + }, + { + "label": "Unknown keys in a future-minor payload are not lethal.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L136", + "id": "validator_test_findings_rationale_136", + "community": 72, + "norm_label": "unknown keys in a future-minor payload are not lethal." + }, + { + "label": "``matched_token`` of ``None`` survives the round-trip as ``None``.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L150", + "id": "validator_test_findings_rationale_150", + "community": 72, + "norm_label": "``matched_token`` of ``none`` survives the round-trip as ``none``." + }, + { + "label": "Two findings with identical field values collapse in a set.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L177", + "id": "validator_test_findings_rationale_177", + "community": 72, + "norm_label": "two findings with identical field values collapse in a set." + }, + { + "label": "Different field values produce distinct set entries.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L185", + "id": "validator_test_findings_rationale_185", + "community": 72, + "norm_label": "different field values produce distinct set entries." + }, + { + "label": "Findings sort lexicographically when keyed by their dict shape.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L199", + "id": "validator_test_findings_rationale_199", + "community": 72, + "norm_label": "findings sort lexicographically when keyed by their dict shape." + }, + { + "label": "The expected three-key sort produces hard-first ordering.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L207", + "id": "validator_test_findings_rationale_207", + "community": 72, + "norm_label": "the expected three-key sort produces hard-first ordering." + }, + { + "label": "The audit-mode-only flags (synced_under_prior_policy / override_active) surv", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L244", + "id": "validator_test_findings_rationale_244", + "community": 72, + "norm_label": "the audit-mode-only flags (synced_under_prior_policy / override_active) surv" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/validator/__init__.py", + "source_location": "L1", + "id": "tests_unit_validator_init_py", + "community": 326, + "norm_label": "__init__.py" + }, + { + "label": "Validator engine package. Backend Spec \u00a78.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/__init__.py", + "source_location": "L1", + "id": "validator_init_rationale_1", + "community": 326, + "norm_label": "validator engine package. backend spec \u00a78." + }, + { + "label": "test_rules.py", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L1", + "id": "tests_unit_validator_test_rules_py", + "community": 121, + "norm_label": "test_rules.py" + }, + { + "label": "test_angle_bracket_token_in_segment_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L37", + "id": "validator_test_rules_test_angle_bracket_token_in_segment_fires", + "community": 121, + "norm_label": "test_angle_bracket_token_in_segment_fires()" + }, + { + "label": "test_non_token_angle_brackets_pass()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L64", + "id": "validator_test_rules_test_non_token_angle_brackets_pass", + "community": 121, + "norm_label": "test_non_token_angle_brackets_pass()" + }, + { + "label": "test_jinja_var_marker_in_filename_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L75", + "id": "validator_test_rules_test_jinja_var_marker_in_filename_fires", + "community": 121, + "norm_label": "test_jinja_var_marker_in_filename_fires()" + }, + { + "label": "test_jinja_block_marker_in_content_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L88", + "id": "validator_test_rules_test_jinja_block_marker_in_content_fires", + "community": 121, + "norm_label": "test_jinja_block_marker_in_content_fires()" + }, + { + "label": "test_unresolved_placeholder_in_content_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L101", + "id": "validator_test_rules_test_unresolved_placeholder_in_content_fires", + "community": 121, + "norm_label": "test_unresolved_placeholder_in_content_fires()" + }, + { + "label": "test_no_findings_on_clean_inputs()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L110", + "id": "validator_test_rules_test_no_findings_on_clean_inputs", + "community": 121, + "norm_label": "test_no_findings_on_clean_inputs()" + }, + { + "label": "test_large_text_file_skipped_from_content_scan()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L119", + "id": "validator_test_rules_test_large_text_file_skipped_from_content_scan", + "community": 121, + "norm_label": "test_large_text_file_skipped_from_content_scan()" + }, + { + "label": "test_under_size_cap_content_is_scanned()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L131", + "id": "validator_test_rules_test_under_size_cap_content_is_scanned", + "community": 121, + "norm_label": "test_under_size_cap_content_is_scanned()" + }, + { + "label": "test_multiple_matches_in_same_input_each_yield_finding()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L142", + "id": "validator_test_rules_test_multiple_matches_in_same_input_each_yield_finding", + "community": 121, + "norm_label": "test_multiple_matches_in_same_input_each_yield_finding()" + }, + { + "label": "test_empty_file_contents_dict_is_path_only_scan()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L152", + "id": "validator_test_rules_test_empty_file_contents_dict_is_path_only_scan", + "community": 121, + "norm_label": "test_empty_file_contents_dict_is_path_only_scan()" + }, + { + "label": "test_windows_illegal_char_in_segment_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L180", + "id": "validator_test_rules_test_windows_illegal_char_in_segment_fires", + "community": 121, + "norm_label": "test_windows_illegal_char_in_segment_fires()" + }, + { + "label": "test_nul_byte_in_name_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L191", + "id": "validator_test_rules_test_nul_byte_in_name_fires", + "community": 121, + "norm_label": "test_nul_byte_in_name_fires()" + }, + { + "label": "test_low_ascii_control_char_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L200", + "id": "validator_test_rules_test_low_ascii_control_char_fires", + "community": 121, + "norm_label": "test_low_ascii_control_char_fires()" + }, + { + "label": "test_trailing_dot_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L210", + "id": "validator_test_rules_test_trailing_dot_fires", + "community": 121, + "norm_label": "test_trailing_dot_fires()" + }, + { + "label": "test_trailing_space_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L218", + "id": "validator_test_rules_test_trailing_space_fires", + "community": 121, + "norm_label": "test_trailing_space_fires()" + }, + { + "label": "test_normal_names_pass()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L237", + "id": "validator_test_rules_test_normal_names_pass", + "community": 121, + "norm_label": "test_normal_names_pass()" + }, + { + "label": "test_findings_have_hard_tier()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L245", + "id": "validator_test_rules_test_findings_have_hard_tier", + "community": 121, + "norm_label": "test_findings_have_hard_tier()" + }, + { + "label": "test_reserved_name_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L276", + "id": "validator_test_rules_test_reserved_name_fires", + "community": 186, + "norm_label": "test_reserved_name_fires()" + }, + { + "label": "test_non_reserved_name_passes()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L297", + "id": "validator_test_rules_test_non_reserved_name_passes", + "community": 186, + "norm_label": "test_non_reserved_name_passes()" + }, + { + "label": "test_unsafe_project_name_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L320", + "id": "validator_test_rules_test_unsafe_project_name_fires", + "community": 186, + "norm_label": "test_unsafe_project_name_fires()" + }, + { + "label": "test_safe_project_name_passes()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L340", + "id": "validator_test_rules_test_safe_project_name_passes", + "community": 186, + "norm_label": "test_safe_project_name_passes()" + }, + { + "label": "test_experimental_with_run_prefix_under_runs_parent_passes()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L349", + "id": "validator_test_rules_test_experimental_with_run_prefix_under_runs_parent_passes", + "community": 209, + "norm_label": "test_experimental_with_run_prefix_under_runs_parent_passes()" + }, + { + "label": "test_experimental_with_run_prefix_at_project_level_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L359", + "id": "validator_test_rules_test_experimental_with_run_prefix_at_project_level_fires", + "community": 209, + "norm_label": "test_experimental_with_run_prefix_at_project_level_fires()" + }, + { + "label": "test_experimental_with_test_run_prefix_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L372", + "id": "validator_test_rules_test_experimental_with_test_run_prefix_fires", + "community": 209, + "norm_label": "test_experimental_with_test_run_prefix_fires()" + }, + { + "label": "test_experimental_under_test_runs_parent_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L382", + "id": "validator_test_rules_test_experimental_under_test_runs_parent_fires", + "community": 209, + "norm_label": "test_experimental_under_test_runs_parent_fires()" + }, + { + "label": "test_test_with_test_run_prefix_under_test_runs_passes()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L391", + "id": "validator_test_rules_test_test_with_test_run_prefix_under_test_runs_passes", + "community": 209, + "norm_label": "test_test_with_test_run_prefix_under_test_runs_passes()" + }, + { + "label": "test_test_with_run_prefix_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L400", + "id": "validator_test_rules_test_test_with_run_prefix_fires", + "community": 209, + "norm_label": "test_test_with_run_prefix_fires()" + }, + { + "label": "test_test_with_test_run_prefix_but_wrong_parent_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L409", + "id": "validator_test_rules_test_test_with_test_run_prefix_but_wrong_parent_fires", + "community": 209, + "norm_label": "test_test_with_test_run_prefix_but_wrong_parent_fires()" + }, + { + "label": "test_run_kind_none_returns_no_findings()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L418", + "id": "validator_test_rules_test_run_kind_none_returns_no_findings", + "community": 209, + "norm_label": "test_run_kind_none_returns_no_findings()" + }, + { + "label": "test_project_without_creation_json_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L432", + "id": "validator_test_rules_test_project_without_creation_json_fires", + "community": 268, + "norm_label": "test_project_without_creation_json_fires()" + }, + { + "label": "test_run_without_creation_json_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L439", + "id": "validator_test_rules_test_run_without_creation_json_fires", + "community": 268, + "norm_label": "test_run_without_creation_json_fires()" + }, + { + "label": "test_equipment_without_creation_json_does_not_fire()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L445", + "id": "validator_test_rules_test_equipment_without_creation_json_does_not_fire", + "community": 268, + "norm_label": "test_equipment_without_creation_json_does_not_fire()" + }, + { + "label": "test_project_with_creation_json_passes()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L450", + "id": "validator_test_rules_test_project_with_creation_json_passes", + "community": 268, + "norm_label": "test_project_with_creation_json_passes()" + }, + { + "label": "test_run_with_creation_json_passes()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L455", + "id": "validator_test_rules_test_run_with_creation_json_passes", + "community": 268, + "norm_label": "test_run_with_creation_json_passes()" + }, + { + "label": "test_missing_id_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L465", + "id": "validator_test_rules_test_missing_id_fires", + "community": 227, + "norm_label": "test_missing_id_fires()" + }, + { + "label": "test_empty_string_value_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L479", + "id": "validator_test_rules_test_empty_string_value_fires", + "community": 227, + "norm_label": "test_empty_string_value_fires()" + }, + { + "label": "test_present_id_with_non_empty_value_passes()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L492", + "id": "validator_test_rules_test_present_id_with_non_empty_value_passes", + "community": 227, + "norm_label": "test_present_id_with_non_empty_value_passes()" + }, + { + "label": "test_field_present_in_template_fields_layer_passes()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L504", + "id": "validator_test_rules_test_field_present_in_template_fields_layer_passes", + "community": 227, + "norm_label": "test_field_present_in_template_fields_layer_passes()" + }, + { + "label": "test_none_readme_fields_treats_all_required_as_missing()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L516", + "id": "validator_test_rules_test_none_readme_fields_treats_all_required_as_missing", + "community": 227, + "norm_label": "test_none_readme_fields_treats_all_required_as_missing()" + }, + { + "label": "test_value_explicit_none_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L524", + "id": "validator_test_rules_test_value_explicit_none_fires", + "community": 227, + "norm_label": "test_value_explicit_none_fires()" + }, + { + "label": "test_well_formed_front_matter_passes()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L541", + "id": "validator_test_rules_test_well_formed_front_matter_passes", + "community": 253, + "norm_label": "test_well_formed_front_matter_passes()" + }, + { + "label": "test_unterminated_front_matter_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L546", + "id": "validator_test_rules_test_unterminated_front_matter_fires", + "community": 253, + "norm_label": "test_unterminated_front_matter_fires()" + }, + { + "label": "test_malformed_yaml_in_block_fires()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L554", + "id": "validator_test_rules_test_malformed_yaml_in_block_fires", + "community": 253, + "norm_label": "test_malformed_yaml_in_block_fires()" + }, + { + "label": "test_no_front_matter_passes()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L562", + "id": "validator_test_rules_test_no_front_matter_passes", + "community": 253, + "norm_label": "test_no_front_matter_passes()" + }, + { + "label": "test_empty_content_passes()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L567", + "id": "validator_test_rules_test_empty_content_passes", + "community": 253, + "norm_label": "test_empty_content_passes()" + }, + { + "label": "test_front_matter_with_nested_yaml_passes()", + "file_type": "code", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L571", + "id": "validator_test_rules_test_front_matter_with_nested_yaml_passes", + "community": 253, + "norm_label": "test_front_matter_with_nested_yaml_passes()" + }, + { + "label": "Tests for ``exlab_wizard.validator.rules``. Backend Spec \u00a78.1. Covers each \u00a78.1", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L1", + "id": "validator_test_rules_rationale_1", + "community": 121, + "norm_label": "tests for ``exlab_wizard.validator.rules``. backend spec \u00a78.1. covers each \u00a78.1" + }, + { + "label": "Redesign \u00a73.4: experimental run leaf parented by ``Runs`` is valid.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L350", + "id": "validator_test_rules_rationale_350", + "community": 209, + "norm_label": "redesign \u00a73.4: experimental run leaf parented by ``runs`` is valid." + }, + { + "label": "Redesign \u00a73.4: a misplaced ``Run_*`` directly under the project (not under `", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L360", + "id": "validator_test_rules_rationale_360", + "community": 209, + "norm_label": "redesign \u00a73.4: a misplaced ``run_*`` directly under the project (not under `" + }, + { + "label": "test_engine_audit.py", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1", + "id": "tests_unit_validator_test_engine_audit_py", + "community": 105, + "norm_label": "test_engine_audit.py" + }, + { + "label": "_build_creation_json_dict()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L46", + "id": "validator_test_engine_audit_build_creation_json_dict", + "community": 57, + "norm_label": "_build_creation_json_dict()" + }, + { + "label": "_write_creation_json()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L87", + "id": "validator_test_engine_audit_write_creation_json", + "community": 57, + "norm_label": "_write_creation_json()" + }, + { + "label": "_make_clean_tree()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L96", + "id": "validator_test_engine_audit_make_clean_tree", + "community": 47, + "norm_label": "_make_clean_tree()" + }, + { + "label": "_make_validator()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L140", + "id": "validator_test_engine_audit_make_validator", + "community": 47, + "norm_label": "_make_validator()" + }, + { + "label": "_by_rule()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L164", + "id": "validator_test_engine_audit_by_rule", + "community": 141, + "norm_label": "_by_rule()" + }, + { + "label": "test_audit_clean_tree_returns_empty_list()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L173", + "id": "validator_test_engine_audit_test_audit_clean_tree_returns_empty_list", + "community": 47, + "norm_label": "test_audit_clean_tree_returns_empty_list()" + }, + { + "label": "test_audit_project_missing_creation_json_returns_orphan()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L181", + "id": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", + "community": 141, + "norm_label": "test_audit_project_missing_creation_json_returns_orphan()" + }, + { + "label": "test_audit_run_missing_creation_json_returns_orphan()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L202", + "id": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", + "community": 141, + "norm_label": "test_audit_run_missing_creation_json_returns_orphan()" + }, + { + "label": "test_audit_unsafe_project_name_returns_soft_finding()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L219", + "id": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", + "community": 141, + "norm_label": "test_audit_unsafe_project_name_returns_soft_finding()" + }, + { + "label": "test_audit_clean_project_name_has_no_unsafe_finding()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L238", + "id": "validator_test_engine_audit_test_audit_clean_project_name_has_no_unsafe_finding", + "community": 141, + "norm_label": "test_audit_clean_project_name_has_no_unsafe_finding()" + }, + { + "label": "test_audit_mode_prefix_mismatch_run_with_test_kind()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L246", + "id": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", + "community": 57, + "norm_label": "test_audit_mode_prefix_mismatch_run_with_test_kind()" + }, + { + "label": "test_audit_unresolved_placeholder_in_directory_name()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L268", + "id": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", + "community": 141, + "norm_label": "test_audit_unresolved_placeholder_in_directory_name()" + }, + { + "label": "test_audit_override_active_flag_set_when_problem_class_overridden()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L291", + "id": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", + "community": 141, + "norm_label": "test_audit_override_active_flag_set_when_problem_class_overridden()" + }, + { + "label": "test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L324", + "id": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", + "community": 57, + "norm_label": "test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run()" + }, + { + "label": "test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L348", + "id": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", + "community": 141, + "norm_label": "test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run()" + }, + { + "label": "test_audit_respects_content_scan_max_mib_cap()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L374", + "id": "validator_test_engine_audit_test_audit_respects_content_scan_max_mib_cap", + "community": 47, + "norm_label": "test_audit_respects_content_scan_max_mib_cap()" + }, + { + "label": "test_audit_respects_extensions_allowlist()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L398", + "id": "validator_test_engine_audit_test_audit_respects_extensions_allowlist", + "community": 47, + "norm_label": "test_audit_respects_extensions_allowlist()" + }, + { + "label": "test_audit_detects_binary_files_via_null_byte_sniff()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L417", + "id": "validator_test_engine_audit_test_audit_detects_binary_files_via_null_byte_sniff", + "community": 47, + "norm_label": "test_audit_detects_binary_files_via_null_byte_sniff()" + }, + { + "label": "test_audit_scans_text_file_content_when_within_limits()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L436", + "id": "validator_test_engine_audit_test_audit_scans_text_file_content_when_within_limits", + "community": 47, + "norm_label": "test_audit_scans_text_file_content_when_within_limits()" + }, + { + "label": "test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L452", + "id": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", + "community": 47, + "norm_label": "test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path()" + }, + { + "label": "test_query_problems_is_alias_for_audit()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L474", + "id": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", + "community": 57, + "norm_label": "test_query_problems_is_alias_for_audit()" + }, + { + "label": "test_audit_scope_equipment_id_resolves_to_configured_root()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L487", + "id": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", + "community": 57, + "norm_label": "test_audit_scope_equipment_id_resolves_to_configured_root()" + }, + { + "label": "test_audit_scope_project_path_walks_one_subtree()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L524", + "id": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", + "community": 57, + "norm_label": "test_audit_scope_project_path_walks_one_subtree()" + }, + { + "label": "test_audit_scope_all_walks_every_configured_equipment()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L549", + "id": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", + "community": 57, + "norm_label": "test_audit_scope_all_walks_every_configured_equipment()" + }, + { + "label": "test_audit_scope_unknown_equipment_id_returns_empty()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L584", + "id": "validator_test_engine_audit_test_audit_scope_unknown_equipment_id_returns_empty", + "community": 47, + "norm_label": "test_audit_scope_unknown_equipment_id_returns_empty()" + }, + { + "label": "test_audit_skips_cache_directory_contents()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L591", + "id": "validator_test_engine_audit_test_audit_skips_cache_directory_contents", + "community": 47, + "norm_label": "test_audit_skips_cache_directory_contents()" + }, + { + "label": "test_audit_revoked_override_does_not_set_override_active()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L607", + "id": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", + "community": 141, + "norm_label": "test_audit_revoked_override_does_not_set_override_active()" + }, + { + "label": "test_audit_unresolved_placeholder_in_file_name()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L644", + "id": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_file_name", + "community": 47, + "norm_label": "test_audit_unresolved_placeholder_in_file_name()" + }, + { + "label": "test_audit_test_run_with_experimental_kind_flagged()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L660", + "id": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", + "community": 141, + "norm_label": "test_audit_test_run_with_experimental_kind_flagged()" + }, + { + "label": "test_audit_returns_list_of_finding_dataclass_instances()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L680", + "id": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", + "community": 57, + "norm_label": "test_audit_returns_list_of_finding_dataclass_instances()" + }, + { + "label": "test_audit_includes_staging_root_when_orchestrator_on()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L695", + "id": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", + "community": 57, + "norm_label": "test_audit_includes_staging_root_when_orchestrator_on()" + }, + { + "label": "test_audit_findings_carry_full_section_11_8_shape()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L722", + "id": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", + "community": 57, + "norm_label": "test_audit_findings_carry_full_section_11_8_shape()" + }, + { + "label": "test_audit_unknown_scope_kind_raises_value_error()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L760", + "id": "validator_test_engine_audit_test_audit_unknown_scope_kind_raises_value_error", + "community": 47, + "norm_label": "test_audit_unknown_scope_kind_raises_value_error()" + }, + { + "label": "test_audit_root_does_not_exist_returns_empty()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L767", + "id": "validator_test_engine_audit_test_audit_root_does_not_exist_returns_empty", + "community": 105, + "norm_label": "test_audit_root_does_not_exist_returns_empty()" + }, + { + "label": "test_audit_root_is_a_file_returns_empty()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L775", + "id": "validator_test_engine_audit_test_audit_root_is_a_file_returns_empty", + "community": 105, + "norm_label": "test_audit_root_is_a_file_returns_empty()" + }, + { + "label": "test_audit_handles_unreadable_directory()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L783", + "id": "validator_test_engine_audit_test_audit_handles_unreadable_directory", + "community": 47, + "norm_label": "test_audit_handles_unreadable_directory()" + }, + { + "label": "test_audit_other_level_subfolder_under_project()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L803", + "id": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", + "community": 57, + "norm_label": "test_audit_other_level_subfolder_under_project()" + }, + { + "label": "test_audit_other_under_test_runs_unknown_leaf()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L819", + "id": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", + "community": 57, + "norm_label": "test_audit_other_under_test_runs_unknown_leaf()" + }, + { + "label": "test_audit_deeply_nested_other_subfolder()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L835", + "id": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", + "community": 47, + "norm_label": "test_audit_deeply_nested_other_subfolder()" + }, + { + "label": "test_audit_creation_json_unreadable()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L854", + "id": "validator_test_engine_audit_test_audit_creation_json_unreadable", + "community": 47, + "norm_label": "test_audit_creation_json_unreadable()" + }, + { + "label": "test_audit_creation_json_malformed_raw_decode()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L876", + "id": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", + "community": 47, + "norm_label": "test_audit_creation_json_malformed_raw_decode()" + }, + { + "label": "test_audit_creation_json_missing_required_struct_field()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L888", + "id": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", + "community": 57, + "norm_label": "test_audit_creation_json_missing_required_struct_field()" + }, + { + "label": "test_audit_readme_fields_json_decode_failure()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L908", + "id": "validator_test_engine_audit_test_audit_readme_fields_json_decode_failure", + "community": 47, + "norm_label": "test_audit_readme_fields_json_decode_failure()" + }, + { + "label": "test_audit_missing_required_field_with_required_ids()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L920", + "id": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", + "community": 57, + "norm_label": "test_audit_missing_required_field_with_required_ids()" + }, + { + "label": "test_audit_missing_required_field_required_ids_not_a_list()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L956", + "id": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", + "community": 57, + "norm_label": "test_audit_missing_required_field_required_ids_not_a_list()" + }, + { + "label": "test_audit_content_scan_skips_test_runs_marker_file()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L991", + "id": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", + "community": 57, + "norm_label": "test_audit_content_scan_skips_test_runs_marker_file()" + }, + { + "label": "test_audit_content_scan_eligibility_returns_false_on_stat_failure()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1021", + "id": "validator_test_engine_audit_test_audit_content_scan_eligibility_returns_false_on_stat_failure", + "community": 47, + "norm_label": "test_audit_content_scan_eligibility_returns_false_on_stat_failure()" + }, + { + "label": "test_audit_read_text_for_scan_handles_oserror()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1048", + "id": "validator_test_engine_audit_test_audit_read_text_for_scan_handles_oserror", + "community": 47, + "norm_label": "test_audit_read_text_for_scan_handles_oserror()" + }, + { + "label": "test_classify_level_value_error_returns_other()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1075", + "id": "validator_test_engine_audit_test_classify_level_value_error_returns_other", + "community": 105, + "norm_label": "test_classify_level_value_error_returns_other()" + }, + { + "label": "test_finding_sort_unknown_tier_sorts_after_committed_tiers()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1089", + "id": "validator_test_engine_audit_test_finding_sort_unknown_tier_sorts_after_committed_tiers", + "community": 105, + "norm_label": "test_finding_sort_unknown_tier_sorts_after_committed_tiers()" + }, + { + "label": "test_level_for_orphan_returns_none_for_unmapped_levels()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1113", + "id": "validator_test_engine_audit_test_level_for_orphan_returns_none_for_unmapped_levels", + "community": 105, + "norm_label": "test_level_for_orphan_returns_none_for_unmapped_levels()" + }, + { + "label": "test_validator_from_config_builds_engine()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1122", + "id": "validator_test_engine_audit_test_validator_from_config_builds_engine", + "community": 105, + "norm_label": "test_validator_from_config_builds_engine()" + }, + { + "label": "test_validator_from_config_orchestrator_disabled()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1140", + "id": "validator_test_engine_audit_test_validator_from_config_orchestrator_disabled", + "community": 105, + "norm_label": "test_validator_from_config_orchestrator_disabled()" + }, + { + "label": "test_validator_from_config_no_orchestrator_attr()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1154", + "id": "validator_test_engine_audit_test_validator_from_config_no_orchestrator_attr", + "community": 105, + "norm_label": "test_validator_from_config_no_orchestrator_attr()" + }, + { + "label": "test_classify_level_unrelated_dir_returns_other()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1165", + "id": "validator_test_engine_audit_test_classify_level_unrelated_dir_returns_other", + "community": 105, + "norm_label": "test_classify_level_unrelated_dir_returns_other()" + }, + { + "label": "test_compute_run_path_unrelated_other_returns_input()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1175", + "id": "validator_test_engine_audit_test_compute_run_path_unrelated_other_returns_input", + "community": 105, + "norm_label": "test_compute_run_path_unrelated_other_returns_input()" + }, + { + "label": "test_compute_run_path_root_other_returns_root()", + "file_type": "code", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1187", + "id": "validator_test_engine_audit_test_compute_run_path_root_other_returns_root", + "community": 105, + "norm_label": "test_compute_run_path_root_other_returns_root()" + }, + { + "label": "Unit tests for ``Validator.audit`` and ``Validator.query_problems``. Backend Sp", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1", + "id": "validator_test_engine_audit_rationale_1", + "community": 105, + "norm_label": "unit tests for ``validator.audit`` and ``validator.query_problems``. backend sp" + }, + { + "label": "Build the wire-form ``creation.json`` dict for a fixture tree.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L56", + "id": "validator_test_engine_audit_rationale_56", + "community": 57, + "norm_label": "build the wire-form ``creation.json`` dict for a fixture tree." + }, + { + "label": "Write the wire-form ``creation.json`` under ``/.exlab-wizard``.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L88", + "id": "validator_test_engine_audit_rationale_88", + "community": 57, + "norm_label": "write the wire-form ``creation.json`` under ``/.exlab-wizard``." + }, + { + "label": "Build a single-equipment / single-project / single-run clean tree. Returns", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L106", + "id": "validator_test_engine_audit_rationale_106", + "community": 47, + "norm_label": "build a single-equipment / single-project / single-run clean tree. returns" + }, + { + "label": "Construct a :class:`Validator` for tests with a single equipment root.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L148", + "id": "validator_test_engine_audit_rationale_148", + "community": 47, + "norm_label": "construct a :class:`validator` for tests with a single equipment root." + }, + { + "label": "A well-formed equipment / project / run tree produces no findings.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L174", + "id": "validator_test_engine_audit_rationale_174", + "community": 47, + "norm_label": "a well-formed equipment / project / run tree produces no findings." + }, + { + "label": "A project directory with no ``creation.json`` produces one orphan finding.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L182", + "id": "validator_test_engine_audit_rationale_182", + "community": 141, + "norm_label": "a project directory with no ``creation.json`` produces one orphan finding." + }, + { + "label": "A run directory with no ``creation.json`` produces one orphan finding.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L203", + "id": "validator_test_engine_audit_rationale_203", + "community": 141, + "norm_label": "a run directory with no ``creation.json`` produces one orphan finding." + }, + { + "label": "A project directory whose name is not a safe path segment (\u00a73.2) produces a", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L220", + "id": "validator_test_engine_audit_rationale_220", + "community": 141, + "norm_label": "a project directory whose name is not a safe path segment (\u00a73.2) produces a" + }, + { + "label": "A human-readable project name (spaces and all) is a safe segment.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L239", + "id": "validator_test_engine_audit_rationale_239", + "community": 141, + "norm_label": "a human-readable project name (spaces and all) is a safe segment." + }, + { + "label": "A ``Run_*`` leaf whose creation.json says ``run_kind=\"test\"`` is flagged.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L247", + "id": "validator_test_engine_audit_rationale_247", + "community": 57, + "norm_label": "a ``run_*`` leaf whose creation.json says ``run_kind=\"test\"`` is flagged." + }, + { + "label": "A directory name containing ```` produces a finding.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L269", + "id": "validator_test_engine_audit_rationale_269", + "community": 141, + "norm_label": "a directory name containing ```` produces a finding." + }, + { + "label": "An active override with matching ``problem_class`` flips ``override_active``.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L294", + "id": "validator_test_engine_audit_rationale_294", + "community": 141, + "norm_label": "an active override with matching ``problem_class`` flips ``override_active``." + }, + { + "label": "Synced run + hard finding -> ``synced_under_prior_policy=True``.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L327", + "id": "validator_test_engine_audit_rationale_327", + "community": 57, + "norm_label": "synced run + hard finding -> ``synced_under_prior_policy=true``." + }, + { + "label": "Cleaned run + hard finding -> ``synced_under_prior_policy=True``. A ``clean", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L351", + "id": "validator_test_engine_audit_rationale_351", + "community": 141, + "norm_label": "cleaned run + hard finding -> ``synced_under_prior_policy=true``. a ``clean" + }, + { + "label": "A large file with a placeholder is NOT scanned for content.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L375", + "id": "validator_test_engine_audit_rationale_375", + "community": 47, + "norm_label": "a large file with a placeholder is not scanned for content." + }, + { + "label": "A ``.bin`` file is skipped from content scanning by the extension gate.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L399", + "id": "validator_test_engine_audit_rationale_399", + "community": 47, + "norm_label": "a ``.bin`` file is skipped from content scanning by the extension gate." + }, + { + "label": "A ``.txt`` file with a NUL byte is treated as binary and skipped.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L418", + "id": "validator_test_engine_audit_rationale_418", + "community": 47, + "norm_label": "a ``.txt`` file with a nul byte is treated as binary and skipped." + }, + { + "label": "A small ``.txt`` file inside the run directory is scanned for placeholders.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L437", + "id": "validator_test_engine_audit_rationale_437", + "community": 47, + "norm_label": "a small ``.txt`` file inside the run directory is scanned for placeholders." + }, + { + "label": "Hard-tier findings come first; ties break on rule then offending_path.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L455", + "id": "validator_test_engine_audit_rationale_455", + "community": 47, + "norm_label": "hard-tier findings come first; ties break on rule then offending_path." + }, + { + "label": "``query_problems`` returns the same list as ``audit``.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L475", + "id": "validator_test_engine_audit_rationale_475", + "community": 57, + "norm_label": "``query_problems`` returns the same list as ``audit``." + }, + { + "label": "``{\"kind\": \"equipment_id\", ...}`` walks only the matching subtree.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L488", + "id": "validator_test_engine_audit_rationale_488", + "community": 57, + "norm_label": "``{\"kind\": \"equipment_id\", ...}`` walks only the matching subtree." + }, + { + "label": "``{\"kind\": \"project_path\", ...}`` walks the supplied path only.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L525", + "id": "validator_test_engine_audit_rationale_525", + "community": 57, + "norm_label": "``{\"kind\": \"project_path\", ...}`` walks the supplied path only." + }, + { + "label": "``{\"kind\": \"all\"}`` aggregates findings across every equipment root.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L550", + "id": "validator_test_engine_audit_rationale_550", + "community": 57, + "norm_label": "``{\"kind\": \"all\"}`` aggregates findings across every equipment root." + }, + { + "label": "An ``equipment_id`` not in the map produces an empty result, not an error.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L585", + "id": "validator_test_engine_audit_rationale_585", + "community": 47, + "norm_label": "an ``equipment_id`` not in the map produces an empty result, not an error." + }, + { + "label": "The walk does not apply \u00a78.1 rules to ``.exlab-wizard`` contents.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L592", + "id": "validator_test_engine_audit_rationale_592", + "community": 47, + "norm_label": "the walk does not apply \u00a78.1 rules to ``.exlab-wizard`` contents." + }, + { + "label": "A tombstone-revoked override does not flip ``override_active``.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L608", + "id": "validator_test_engine_audit_rationale_608", + "community": 141, + "norm_label": "a tombstone-revoked override does not flip ``override_active``." + }, + { + "label": "A file name containing ```` produces a finding.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L645", + "id": "validator_test_engine_audit_rationale_645", + "community": 47, + "norm_label": "a file name containing ```` produces a finding." + }, + { + "label": "A ``TestRun_*`` leaf with ``run_kind=\"experimental\"`` triggers mismatch.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L661", + "id": "validator_test_engine_audit_rationale_661", + "community": 141, + "norm_label": "a ``testrun_*`` leaf with ``run_kind=\"experimental\"`` triggers mismatch." + }, + { + "label": "Every entry in the result is a :class:`Finding` instance.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L681", + "id": "validator_test_engine_audit_rationale_681", + "community": 57, + "norm_label": "every entry in the result is a :class:`finding` instance." + }, + { + "label": "``\"all\"`` scope walks the staging root when one is configured.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L696", + "id": "validator_test_engine_audit_rationale_696", + "community": 57, + "norm_label": "``\"all\"`` scope walks the staging root when one is configured." + }, + { + "label": "Every finding has the documented \u00a711.8 fields populated.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L726", + "id": "validator_test_engine_audit_rationale_726", + "community": 57, + "norm_label": "every finding has the documented \u00a711.8 fields populated." + }, + { + "label": "An unrecognised ``scope.kind`` raises ``ValueError`` (defensive guard).", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L761", + "id": "validator_test_engine_audit_rationale_761", + "community": 47, + "norm_label": "an unrecognised ``scope.kind`` raises ``valueerror`` (defensive guard)." + }, + { + "label": "Walking a missing root produces no findings (silent skip).", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L768", + "id": "validator_test_engine_audit_rationale_768", + "community": 105, + "norm_label": "walking a missing root produces no findings (silent skip)." + }, + { + "label": "Walking a root that is a regular file (not a directory) returns [].", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L776", + "id": "validator_test_engine_audit_rationale_776", + "community": 105, + "norm_label": "walking a root that is a regular file (not a directory) returns []." + }, + { + "label": "A ``PermissionError`` from ``os.scandir`` does not crash the walk.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L784", + "id": "validator_test_engine_audit_rationale_784", + "community": 47, + "norm_label": "a ``permissionerror`` from ``os.scandir`` does not crash the walk." + }, + { + "label": "A project subfolder that is not a ``Run_*`` / ``TestRuns`` is \"other\".", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L804", + "id": "validator_test_engine_audit_rationale_804", + "community": 57, + "norm_label": "a project subfolder that is not a ``run_*`` / ``testruns`` is \"other\"." + }, + { + "label": "A non-``TestRun_`` leaf under ``TestRuns/`` is classified as \"other\".", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L820", + "id": "validator_test_engine_audit_rationale_820", + "community": 57, + "norm_label": "a non-``testrun_`` leaf under ``testruns/`` is classified as \"other\"." + }, + { + "label": "A subfolder under a run is classified as \"other\"; rules still walk into it.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L836", + "id": "validator_test_engine_audit_rationale_836", + "community": 47, + "norm_label": "a subfolder under a run is classified as \"other\"; rules still walk into it." + }, + { + "label": "A ``creation.json`` that raises ``OSError`` on read is treated as absent.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L858", + "id": "validator_test_engine_audit_rationale_858", + "community": 47, + "norm_label": "a ``creation.json`` that raises ``oserror`` on read is treated as absent." + }, + { + "label": "A ``creation.json`` with invalid JSON bytes is treated as absent.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L877", + "id": "validator_test_engine_audit_rationale_877", + "community": 47, + "norm_label": "a ``creation.json`` with invalid json bytes is treated as absent." + }, + { + "label": "A ``creation.json`` valid as raw dict but failing CreationJson decode.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L889", + "id": "validator_test_engine_audit_rationale_889", + "community": 57, + "norm_label": "a ``creation.json`` valid as raw dict but failing creationjson decode." + }, + { + "label": "A malformed ``readme_fields.json`` is silently skipped (no crash).", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L909", + "id": "validator_test_engine_audit_rationale_909", + "community": 47, + "norm_label": "a malformed ``readme_fields.json`` is silently skipped (no crash)." + }, + { + "label": "Audit picks up missing required README fields when stamped on creation.json.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L921", + "id": "validator_test_engine_audit_rationale_921", + "community": 57, + "norm_label": "audit picks up missing required readme fields when stamped on creation.json." + }, + { + "label": "``required_readme_field_ids`` that is not a list is ignored.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L957", + "id": "validator_test_engine_audit_rationale_957", + "community": 57, + "norm_label": "``required_readme_field_ids`` that is not a list is ignored." + }, + { + "label": "The ``test_runs.json`` marker file is exempt from content scanning.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L992", + "id": "validator_test_engine_audit_rationale_992", + "community": 57, + "norm_label": "the ``test_runs.json`` marker file is exempt from content scanning." + }, + { + "label": "If ``stat()`` raises OSError, the file is skipped from content scanning.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1025", + "id": "validator_test_engine_audit_rationale_1025", + "community": 47, + "norm_label": "if ``stat()`` raises oserror, the file is skipped from content scanning." + }, + { + "label": "If ``open(rb)`` raises OSError, the file is silently skipped.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1052", + "id": "validator_test_engine_audit_rationale_1052", + "community": 47, + "norm_label": "if ``open(rb)`` raises oserror, the file is silently skipped." + }, + { + "label": "A directory outside the equipment root resolves to \"other\" (defensive).", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1076", + "id": "validator_test_engine_audit_rationale_1076", + "community": 105, + "norm_label": "a directory outside the equipment root resolves to \"other\" (defensive)." + }, + { + "label": "A finding with an unknown tier sorts after both hard and soft.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1090", + "id": "validator_test_engine_audit_rationale_1090", + "community": 105, + "norm_label": "a finding with an unknown tier sorts after both hard and soft." + }, + { + "label": "``_level_for_orphan`` returns None for non-project / non-run levels.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1114", + "id": "validator_test_engine_audit_rationale_1114", + "community": 105, + "norm_label": "``_level_for_orphan`` returns none for non-project / non-run levels." + }, + { + "label": "``Validator.from_config`` projects fields out of a Config-shaped object.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1123", + "id": "validator_test_engine_audit_rationale_1123", + "community": 105, + "norm_label": "``validator.from_config`` projects fields out of a config-shaped object." + }, + { + "label": "When ``orchestrator.enabled`` is False, no staging root is wired in.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1141", + "id": "validator_test_engine_audit_rationale_1141", + "community": 105, + "norm_label": "when ``orchestrator.enabled`` is false, no staging root is wired in." + }, + { + "label": "``orchestrator`` attribute absent on the config also works (default None).", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1155", + "id": "validator_test_engine_audit_rationale_1155", + "community": 105, + "norm_label": "``orchestrator`` attribute absent on the config also works (default none)." + }, + { + "label": "``_classify_level`` returns \"other\" for dirs outside the equipment root.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1166", + "id": "validator_test_engine_audit_rationale_1166", + "community": 105, + "norm_label": "``_classify_level`` returns \"other\" for dirs outside the equipment root." + }, + { + "label": "``_compute_run_path`` returns ``str(directory)`` for unrelated paths.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1176", + "id": "validator_test_engine_audit_rationale_1176", + "community": 105, + "norm_label": "``_compute_run_path`` returns ``str(directory)`` for unrelated paths." + }, + { + "label": "``_compute_run_path`` for the equipment root itself with ``other``.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1188", + "id": "validator_test_engine_audit_rationale_1188", + "community": 105, + "norm_label": "``_compute_run_path`` for the equipment root itself with ``other``." + }, + { + "label": "# NOTE: deliberately no creation.json at the project level.", + "file_type": "rationale", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L187", + "id": "validator_test_engine_audit_rationale_187", + "community": 105, + "norm_label": "# note: deliberately no creation.json at the project level." + }, + { + "label": "test_log_writer.py", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L1", + "id": "tests_unit_cache_test_log_writer_py", + "community": 21, + "norm_label": "test_log_writer.py" + }, + { + "label": "test_format_log_line_with_all_tags_matches_spec_example()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L33", + "id": "cache_test_log_writer_test_format_log_line_with_all_tags_matches_spec_example", + "community": 21, + "norm_label": "test_format_log_line_with_all_tags_matches_spec_example()" + }, + { + "label": "test_format_log_line_with_run_id_includes_run_tag()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L52", + "id": "cache_test_log_writer_test_format_log_line_with_run_id_includes_run_tag", + "community": 21, + "norm_label": "test_format_log_line_with_run_id_includes_run_tag()" + }, + { + "label": "test_format_log_line_omits_unset_tags()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L70", + "id": "cache_test_log_writer_test_format_log_line_omits_unset_tags", + "community": 21, + "norm_label": "test_format_log_line_omits_unset_tags()" + }, + { + "label": "test_format_log_line_partial_tags_skipped_individually()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L86", + "id": "cache_test_log_writer_test_format_log_line_partial_tags_skipped_individually", + "community": 21, + "norm_label": "test_format_log_line_partial_tags_skipped_individually()" + }, + { + "label": "test_format_log_line_level_is_padded_to_five_chars()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L102", + "id": "cache_test_log_writer_test_format_log_line_level_is_padded_to_five_chars", + "community": 21, + "norm_label": "test_format_log_line_level_is_padded_to_five_chars()" + }, + { + "label": "test_format_log_line_timestamp_is_zero_padded_iso_with_z()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L115", + "id": "cache_test_log_writer_test_format_log_line_timestamp_is_zero_padded_iso_with_z", + "community": 21, + "norm_label": "test_format_log_line_timestamp_is_zero_padded_iso_with_z()" + }, + { + "label": "test_format_log_line_naive_datetime_treated_as_utc()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L123", + "id": "cache_test_log_writer_test_format_log_line_naive_datetime_treated_as_utc", + "community": 21, + "norm_label": "test_format_log_line_naive_datetime_treated_as_utc()" + }, + { + "label": "test_format_log_line_aware_non_utc_datetime_converts_to_utc()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L130", + "id": "cache_test_log_writer_test_format_log_line_aware_non_utc_datetime_converts_to_utc", + "community": 21, + "norm_label": "test_format_log_line_aware_non_utc_datetime_converts_to_utc()" + }, + { + "label": "test_format_log_line_short_message_unchanged()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L142", + "id": "cache_test_log_writer_test_format_log_line_short_message_unchanged", + "community": 21, + "norm_label": "test_format_log_line_short_message_unchanged()" + }, + { + "label": "test_format_log_line_truncates_long_messages_with_marker()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L152", + "id": "cache_test_log_writer_test_format_log_line_truncates_long_messages_with_marker", + "community": 21, + "norm_label": "test_format_log_line_truncates_long_messages_with_marker()" + }, + { + "label": "test_format_log_line_truncation_preserves_prefix_and_tags()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L165", + "id": "cache_test_log_writer_test_format_log_line_truncation_preserves_prefix_and_tags", + "community": 21, + "norm_label": "test_format_log_line_truncation_preserves_prefix_and_tags()" + }, + { + "label": "test_format_log_line_truncation_at_exact_boundary()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L179", + "id": "cache_test_log_writer_test_format_log_line_truncation_at_exact_boundary", + "community": 21, + "norm_label": "test_format_log_line_truncation_at_exact_boundary()" + }, + { + "label": "test_append_log_line_creates_parent_cache_dir()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L199", + "id": "cache_test_log_writer_test_append_log_line_creates_parent_cache_dir", + "community": 21, + "norm_label": "test_append_log_line_creates_parent_cache_dir()" + }, + { + "label": "test_append_log_line_writes_single_line_with_newline()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L208", + "id": "cache_test_log_writer_test_append_log_line_writes_single_line_with_newline", + "community": 21, + "norm_label": "test_append_log_line_writes_single_line_with_newline()" + }, + { + "label": "test_append_log_line_appends_to_existing_file()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L215", + "id": "cache_test_log_writer_test_append_log_line_appends_to_existing_file", + "community": 21, + "norm_label": "test_append_log_line_appends_to_existing_file()" + }, + { + "label": "test_append_log_line_concurrent_writes_do_not_interleave()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L225", + "id": "cache_test_log_writer_test_append_log_line_concurrent_writes_do_not_interleave", + "community": 21, + "norm_label": "test_append_log_line_concurrent_writes_do_not_interleave()" + }, + { + "label": "test_append_log_line_idempotent_directory_creation()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L255", + "id": "cache_test_log_writer_test_append_log_line_idempotent_directory_creation", + "community": 21, + "norm_label": "test_append_log_line_idempotent_directory_creation()" + }, + { + "label": "test_format_log_line_truncation_prefix_alone_too_big_emits_marker_only()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L268", + "id": "cache_test_log_writer_test_format_log_line_truncation_prefix_alone_too_big_emits_marker_only", + "community": 21, + "norm_label": "test_format_log_line_truncation_prefix_alone_too_big_emits_marker_only()" + }, + { + "label": "test_format_log_line_truncation_prefix_alone_exhausts_budget()", + "file_type": "code", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L286", + "id": "cache_test_log_writer_test_format_log_line_truncation_prefix_alone_exhausts_budget", + "community": 21, + "norm_label": "test_format_log_line_truncation_prefix_alone_exhausts_budget()" + }, + { + "label": "Unit tests for ``exlab_wizard.cache.log_writer``. The line shape is committed b", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L1", + "id": "cache_test_log_writer_rationale_1", + "community": 21, + "norm_label": "unit tests for ``exlab_wizard.cache.log_writer``. the line shape is committed b" + }, + { + "label": "The rendered line must match the \u00a711.5 example shape verbatim.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L34", + "id": "cache_test_log_writer_rationale_34", + "community": 21, + "norm_label": "the rendered line must match the \u00a711.5 example shape verbatim." + }, + { + "label": "When ``run_id`` is set the ``[run:..]`` tag appears after ``[kind:..]``.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L53", + "id": "cache_test_log_writer_rationale_53", + "community": 21, + "norm_label": "when ``run_id`` is set the ``[run:..]`` tag appears after ``[kind:..]``." + }, + { + "label": "Tags whose argument is ``None`` are absent from the output entirely.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L71", + "id": "cache_test_log_writer_rationale_71", + "community": 21, + "norm_label": "tags whose argument is ``none`` are absent from the output entirely." + }, + { + "label": "Only the tags whose values are supplied appear; others are skipped.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L87", + "id": "cache_test_log_writer_rationale_87", + "community": 21, + "norm_label": "only the tags whose values are supplied appear; others are skipped." + }, + { + "label": "Levels shorter than 5 chars are padded with trailing spaces.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L103", + "id": "cache_test_log_writer_rationale_103", + "community": 21, + "norm_label": "levels shorter than 5 chars are padded with trailing spaces." + }, + { + "label": "Single-digit fields render as ``04`` etc. and end in ``Z``.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L116", + "id": "cache_test_log_writer_rationale_116", + "community": 21, + "norm_label": "single-digit fields render as ``04`` etc. and end in ``z``." + }, + { + "label": "A naive datetime is assumed already-UTC and rendered with ``Z``.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L124", + "id": "cache_test_log_writer_rationale_124", + "community": 21, + "norm_label": "a naive datetime is assumed already-utc and rendered with ``z``." + }, + { + "label": "Aware datetimes in non-UTC zones are converted to UTC before rendering.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L131", + "id": "cache_test_log_writer_rationale_131", + "community": 21, + "norm_label": "aware datetimes in non-utc zones are converted to utc before rendering." + }, + { + "label": "Lines well under the cap are returned without a truncation marker.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L143", + "id": "cache_test_log_writer_rationale_143", + "community": 21, + "norm_label": "lines well under the cap are returned without a truncation marker." + }, + { + "label": "A message that pushes the line past LOG_LINE_MAX_BYTES is truncated.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L153", + "id": "cache_test_log_writer_rationale_153", + "community": 21, + "norm_label": "a message that pushes the line past log_line_max_bytes is truncated." + }, + { + "label": "Truncation trims the message body, never the prefix or tags.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L166", + "id": "cache_test_log_writer_rationale_166", + "community": 21, + "norm_label": "truncation trims the message body, never the prefix or tags." + }, + { + "label": "A line whose UTF-8 length equals LOG_LINE_MAX_BYTES is NOT truncated.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L180", + "id": "cache_test_log_writer_rationale_180", + "community": 21, + "norm_label": "a line whose utf-8 length equals log_line_max_bytes is not truncated." + }, + { + "label": "Parent ``.exlab-wizard`` directory is created if missing.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L200", + "id": "cache_test_log_writer_rationale_200", + "community": 21, + "norm_label": "parent ``.exlab-wizard`` directory is created if missing." + }, + { + "label": "Multi-write: each call appends after prior content.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L216", + "id": "cache_test_log_writer_rationale_216", + "community": 21, + "norm_label": "multi-write: each call appends after prior content." + }, + { + "label": "N concurrent threads each writing one short line must produce N intact lines", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L226", + "id": "cache_test_log_writer_rationale_226", + "community": 21, + "norm_label": "n concurrent threads each writing one short line must produce n intact lines" + }, + { + "label": "Calling append twice does not fail even though the dir already exists.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L256", + "id": "cache_test_log_writer_rationale_256", + "community": 21, + "norm_label": "calling append twice does not fail even though the dir already exists." + }, + { + "label": "When the cap is so small that even the truncation marker alone exceeds it, t", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L271", + "id": "cache_test_log_writer_rationale_271", + "community": 21, + "norm_label": "when the cap is so small that even the truncation marker alone exceeds it, t" + }, + { + "label": "When the prefix itself is longer than the budget but smaller than the cap (i", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L289", + "id": "cache_test_log_writer_rationale_289", + "community": 21, + "norm_label": "when the prefix itself is longer than the budget but smaller than the cap (i" + }, + { + "label": "test_creation_writer.py", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L1", + "id": "tests_unit_cache_test_creation_writer_py", + "community": 60, + "norm_label": "test_creation_writer.py" + }, + { + "label": "_build_minimal_payload()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L48", + "id": "cache_test_creation_writer_build_minimal_payload", + "community": 60, + "norm_label": "_build_minimal_payload()" + }, + { + "label": "writer()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L74", + "id": "cache_test_creation_writer_writer", + "community": 60, + "norm_label": "writer()" + }, + { + "label": "creation_path()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L79", + "id": "cache_test_creation_writer_creation_path", + "community": 60, + "norm_label": "creation_path()" + }, + { + "label": "test_write_creation_emits_valid_current_version_file()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L89", + "id": "cache_test_creation_writer_test_write_creation_emits_valid_current_version_file", + "community": 60, + "norm_label": "test_write_creation_emits_valid_current_version_file()" + }, + { + "label": "test_write_creation_pins_schema_version_to_writer_default()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L101", + "id": "cache_test_creation_writer_test_write_creation_pins_schema_version_to_writer_default", + "community": 60, + "norm_label": "test_write_creation_pins_schema_version_to_writer_default()" + }, + { + "label": "test_update_creation_atomic_mutates_target_field()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L117", + "id": "cache_test_creation_writer_test_update_creation_atomic_mutates_target_field", + "community": 60, + "norm_label": "test_update_creation_atomic_mutates_target_field()" + }, + { + "label": "test_update_creation_atomic_preserves_unknown_top_level_fields()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L133", + "id": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", + "community": 60, + "norm_label": "test_update_creation_atomic_preserves_unknown_top_level_fields()" + }, + { + "label": "test_update_creation_atomic_appends_validation_override()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L152", + "id": "cache_test_creation_writer_test_update_creation_atomic_appends_validation_override", + "community": 60, + "norm_label": "test_update_creation_atomic_appends_validation_override()" + }, + { + "label": "test_update_creation_atomic_serializes_concurrent_calls()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L178", + "id": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", + "community": 60, + "norm_label": "test_update_creation_atomic_serializes_concurrent_calls()" + }, + { + "label": "test_read_creation_snapshot_returns_typed_struct()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L219", + "id": "cache_test_creation_writer_test_read_creation_snapshot_returns_typed_struct", + "community": 60, + "norm_label": "test_read_creation_snapshot_returns_typed_struct()" + }, + { + "label": "test_read_creation_snapshot_supports_concurrent_readers()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L229", + "id": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", + "community": 60, + "norm_label": "test_read_creation_snapshot_supports_concurrent_readers()" + }, + { + "label": "test_reading_2_0_file_raises_schema_major_mismatch()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L247", + "id": "cache_test_creation_writer_test_reading_2_0_file_raises_schema_major_mismatch", + "community": 60, + "norm_label": "test_reading_2_0_file_raises_schema_major_mismatch()" + }, + { + "label": "test_reading_malformed_schema_version_raises_schema_major_mismatch()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L260", + "id": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", + "community": 60, + "norm_label": "test_reading_malformed_schema_version_raises_schema_major_mismatch()" + }, + { + "label": "test_reading_1_0_file_applies_documented_defaults()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L273", + "id": "cache_test_creation_writer_test_reading_1_0_file_applies_documented_defaults", + "community": 60, + "norm_label": "test_reading_1_0_file_applies_documented_defaults()" + }, + { + "label": "test_reading_1_7_file_backfills_lims_project_subfields()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L312", + "id": "cache_test_creation_writer_test_reading_1_7_file_backfills_lims_project_subfields", + "community": 60, + "norm_label": "test_reading_1_7_file_backfills_lims_project_subfields()" + }, + { + "label": "test_writer_bumps_schema_version_on_mutation_of_old_minor()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L345", + "id": "cache_test_creation_writer_test_writer_bumps_schema_version_on_mutation_of_old_minor", + "community": 60, + "norm_label": "test_writer_bumps_schema_version_on_mutation_of_old_minor()" + }, + { + "label": "test_writing_always_emits_current_schema_version()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L382", + "id": "cache_test_creation_writer_test_writing_always_emits_current_schema_version", + "community": 60, + "norm_label": "test_writing_always_emits_current_schema_version()" + }, + { + "label": "test_select_active_overrides_returns_empty_for_empty_input()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L397", + "id": "cache_test_creation_writer_test_select_active_overrides_returns_empty_for_empty_input", + "community": 122, + "norm_label": "test_select_active_overrides_returns_empty_for_empty_input()" + }, + { + "label": "test_select_active_overrides_keeps_unrevoked_unexpired_entries()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L401", + "id": "cache_test_creation_writer_test_select_active_overrides_keeps_unrevoked_unexpired_entries", + "community": 122, + "norm_label": "test_select_active_overrides_keeps_unrevoked_unexpired_entries()" + }, + { + "label": "test_select_active_overrides_drops_revoked_entry()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L418", + "id": "cache_test_creation_writer_test_select_active_overrides_drops_revoked_entry", + "community": 122, + "norm_label": "test_select_active_overrides_drops_revoked_entry()" + }, + { + "label": "test_select_active_overrides_drops_expired_entry()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L443", + "id": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", + "community": 122, + "norm_label": "test_select_active_overrides_drops_expired_entry()" + }, + { + "label": "test_select_active_overrides_uses_explicit_now_for_determinism()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L473", + "id": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", + "community": 122, + "norm_label": "test_select_active_overrides_uses_explicit_now_for_determinism()" + }, + { + "label": "test_select_active_overrides_ignores_tombstone_for_unknown_id()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L493", + "id": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", + "community": 122, + "norm_label": "test_select_active_overrides_ignores_tombstone_for_unknown_id()" + }, + { + "label": "test_select_active_overrides_treats_malformed_expires_at_as_expired()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L519", + "id": "cache_test_creation_writer_test_select_active_overrides_treats_malformed_expires_at_as_expired", + "community": 420, + "norm_label": "test_select_active_overrides_treats_malformed_expires_at_as_expired()" + }, + { + "label": "test_round_trip_preserves_plugins_applied_with_isolation()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L539", + "id": "cache_test_creation_writer_test_round_trip_preserves_plugins_applied_with_isolation", + "community": 60, + "norm_label": "test_round_trip_preserves_plugins_applied_with_isolation()" + }, + { + "label": "test_reading_file_with_missing_required_field_raises_validation_error()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L566", + "id": "cache_test_creation_writer_test_reading_file_with_missing_required_field_raises_validation_error", + "community": 60, + "norm_label": "test_reading_file_with_missing_required_field_raises_validation_error()" + }, + { + "label": "test_select_active_overrides_skips_tombstone_with_null_revokes_target()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L579", + "id": "cache_test_creation_writer_test_select_active_overrides_skips_tombstone_with_null_revokes_target", + "community": 122, + "norm_label": "test_select_active_overrides_skips_tombstone_with_null_revokes_target()" + }, + { + "label": "test_select_active_overrides_naive_expires_at_is_treated_as_utc()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L609", + "id": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", + "community": 122, + "norm_label": "test_select_active_overrides_naive_expires_at_is_treated_as_utc()" + }, + { + "label": "test_reading_file_missing_schema_version_raises_schema_major_mismatch()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L629", + "id": "cache_test_creation_writer_test_reading_file_missing_schema_version_raises_schema_major_mismatch", + "community": 60, + "norm_label": "test_reading_file_missing_schema_version_raises_schema_major_mismatch()" + }, + { + "label": "test_update_creation_atomic_backfills_missing_override_id()", + "file_type": "code", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L640", + "id": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", + "community": 60, + "norm_label": "test_update_creation_atomic_backfills_missing_override_id()" + }, + { + "label": "Tests for the atomic ``creation.json`` writer in ``exlab_wizard.cache.creation_w", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L1", + "id": "cache_test_creation_writer_rationale_1", + "community": 60, + "norm_label": "tests for the atomic ``creation.json`` writer in ``exlab_wizard.cache.creation_w" + }, + { + "label": "Even if the caller hands us an old version, the writer pins to current.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L104", + "id": "cache_test_creation_writer_rationale_104", + "community": 60, + "norm_label": "even if the caller hands us an old version, the writer pins to current." + }, + { + "label": "Forward-compat: a v0.7 writer must not drop fields a v0.8 writer added.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L136", + "id": "cache_test_creation_writer_rationale_136", + "community": 60, + "norm_label": "forward-compat: a v0.7 writer must not drop fields a v0.8 writer added." + }, + { + "label": "Two simultaneous mutators on the same path must serialize. This is a small-", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L181", + "id": "cache_test_creation_writer_rationale_181", + "community": 60, + "norm_label": "two simultaneous mutators on the same path must serialize. this is a small-" + }, + { + "label": "Multiple LOCK_SH readers must not block each other.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L232", + "id": "cache_test_creation_writer_rationale_232", + "community": 60, + "norm_label": "multiple lock_sh readers must not block each other." + }, + { + "label": "A non-MAJOR.MINOR string must surface as the same structured error rather th", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L263", + "id": "cache_test_creation_writer_rationale_263", + "community": 60, + "norm_label": "a non-major.minor string must surface as the same structured error rather th" + }, + { + "label": "Spec \u00a711.3 history: a 1.0 file predates ``run_kind``, ``validation_overrides", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L276", + "id": "cache_test_creation_writer_rationale_276", + "community": 60, + "norm_label": "spec \u00a711.3 history: a 1.0 file predates ``run_kind``, ``validation_overrides" + }, + { + "label": "1.7 -> 1.8 added ``lims_project.source`` and ``lims_project.cache_freshness_", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L315", + "id": "cache_test_creation_writer_rationale_315", + "community": 60, + "norm_label": "1.7 -> 1.8 added ``lims_project.source`` and ``lims_project.cache_freshness_" + }, + { + "label": "Spec \u00a711.9.3 rule 3: on mutation, an older-minor file is rewritten at the wr", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L348", + "id": "cache_test_creation_writer_rationale_348", + "community": 60, + "norm_label": "spec \u00a711.9.3 rule 3: on mutation, an older-minor file is rewritten at the wr" + }, + { + "label": "Spec \u00a711.9.3 rule 1: a writer at version R always writes R for new files.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L385", + "id": "cache_test_creation_writer_rationale_385", + "community": 60, + "norm_label": "spec \u00a711.9.3 rule 1: a writer at version r always writes r for new files." + }, + { + "label": "The matching algorithm uses ``now=`` for deterministic tests; the same fixtu", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L474", + "id": "cache_test_creation_writer_rationale_474", + "community": 122, + "norm_label": "the matching algorithm uses ``now=`` for deterministic tests; the same fixtu" + }, + { + "label": "Spec \u00a711.3: orphan tombstones are logged WARN but have no effect.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L494", + "id": "cache_test_creation_writer_rationale_494", + "community": 122, + "norm_label": "spec \u00a711.3: orphan tombstones are logged warn but have no effect." + }, + { + "label": "Fail-safe: a malformed ``expires_at`` re-engages the gate.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L520", + "id": "cache_test_creation_writer_rationale_520", + "community": 420, + "norm_label": "fail-safe: a malformed ``expires_at`` re-engages the gate." + }, + { + "label": "A tombstone with no ``revokes`` key is silently skipped (no-op). Spec \u00a711.3", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L580", + "id": "cache_test_creation_writer_rationale_580", + "community": 122, + "norm_label": "a tombstone with no ``revokes`` key is silently skipped (no-op). spec \u00a711.3" + }, + { + "label": "``_is_future``'s naive-datetime branch attaches UTC and compares against ``n", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L610", + "id": "cache_test_creation_writer_rationale_610", + "community": 122, + "norm_label": "``_is_future``'s naive-datetime branch attaches utc and compares against ``n" + }, + { + "label": "A file without a ``schema_version`` field is treated as a major mismatch --", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L632", + "id": "cache_test_creation_writer_rationale_632", + "community": 60, + "norm_label": "a file without a ``schema_version`` field is treated as a major mismatch --" + }, + { + "label": "Pre-1.6 files may carry override entries without an ``id``. The migration he", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L643", + "id": "cache_test_creation_writer_rationale_643", + "community": 60, + "norm_label": "pre-1.6 files may carry override entries without an ``id``. the migration he" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/cache/__init__.py", + "source_location": "L1", + "id": "tests_unit_cache_init_py", + "community": 194, + "norm_label": "__init__.py" + }, + { + "label": "Cache package. Backend Spec \u00a711.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/__init__.py", + "source_location": "L1", + "id": "cache_init_rationale_1", + "community": 194, + "norm_label": "cache package. backend spec \u00a711." + }, + { + "label": "test_equipment.py", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L1", + "id": "tests_unit_cache_test_equipment_py", + "community": 25, + "norm_label": "test_equipment.py" + }, + { + "label": "_make_equipment_payload()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L35", + "id": "cache_test_equipment_make_equipment_payload", + "community": 25, + "norm_label": "_make_equipment_payload()" + }, + { + "label": "_make_test_runs_payload()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L62", + "id": "cache_test_equipment_make_test_runs_payload", + "community": 25, + "norm_label": "_make_test_runs_payload()" + }, + { + "label": "test_write_equipment_produces_valid_v1_file()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L83", + "id": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", + "community": 25, + "norm_label": "test_write_equipment_produces_valid_v1_file()" + }, + { + "label": "test_write_equipment_creates_parent_cache_dir()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L104", + "id": "cache_test_equipment_test_write_equipment_creates_parent_cache_dir", + "community": 25, + "norm_label": "test_write_equipment_creates_parent_cache_dir()" + }, + { + "label": "test_write_equipment_preserves_first_seen_at_on_rewrite()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L114", + "id": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", + "community": 25, + "norm_label": "test_write_equipment_preserves_first_seen_at_on_rewrite()" + }, + { + "label": "test_write_equipment_updates_last_modified_at_on_rewrite()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L131", + "id": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", + "community": 25, + "norm_label": "test_write_equipment_updates_last_modified_at_on_rewrite()" + }, + { + "label": "test_read_equipment_round_trips()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L146", + "id": "cache_test_equipment_test_read_equipment_round_trips", + "community": 25, + "norm_label": "test_read_equipment_round_trips()" + }, + { + "label": "test_read_equipment_raises_when_file_missing()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L163", + "id": "cache_test_equipment_test_read_equipment_raises_when_file_missing", + "community": 25, + "norm_label": "test_read_equipment_raises_when_file_missing()" + }, + { + "label": "test_write_equipment_corrupt_existing_file_recovers()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L171", + "id": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", + "community": 25, + "norm_label": "test_write_equipment_corrupt_existing_file_recovers()" + }, + { + "label": "test_write_test_runs_marker_creates_v1_file()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L193", + "id": "cache_test_equipment_test_write_test_runs_marker_creates_v1_file", + "community": 25, + "norm_label": "test_write_test_runs_marker_creates_v1_file()" + }, + { + "label": "test_write_test_runs_marker_creates_parent_dir()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L206", + "id": "cache_test_equipment_test_write_test_runs_marker_creates_parent_dir", + "community": 25, + "norm_label": "test_write_test_runs_marker_creates_parent_dir()" + }, + { + "label": "test_write_test_runs_marker_is_idempotent()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L215", + "id": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", + "community": 25, + "norm_label": "test_write_test_runs_marker_is_idempotent()" + }, + { + "label": "test_write_test_runs_marker_concurrent_first_writes_safe()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L239", + "id": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", + "community": 25, + "norm_label": "test_write_test_runs_marker_concurrent_first_writes_safe()" + }, + { + "label": "test_read_test_runs_marker_round_trips()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L266", + "id": "cache_test_equipment_test_read_test_runs_marker_round_trips", + "community": 25, + "norm_label": "test_read_test_runs_marker_round_trips()" + }, + { + "label": "test_require_schema_major_raises_on_none_version()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L282", + "id": "cache_test_equipment_test_require_schema_major_raises_on_none_version", + "community": 25, + "norm_label": "test_require_schema_major_raises_on_none_version()" + }, + { + "label": "test_require_schema_major_raises_on_empty_version()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L291", + "id": "cache_test_equipment_test_require_schema_major_raises_on_empty_version", + "community": 25, + "norm_label": "test_require_schema_major_raises_on_empty_version()" + }, + { + "label": "test_require_schema_major_raises_on_garbage_version()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L300", + "id": "cache_test_equipment_test_require_schema_major_raises_on_garbage_version", + "community": 25, + "norm_label": "test_require_schema_major_raises_on_garbage_version()" + }, + { + "label": "test_require_schema_major_passes_on_same_major()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L309", + "id": "cache_test_equipment_test_require_schema_major_passes_on_same_major", + "community": 25, + "norm_label": "test_require_schema_major_passes_on_same_major()" + }, + { + "label": "test_read_equipment_skips_check_for_malformed_json()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L319", + "id": "cache_test_equipment_test_read_equipment_skips_check_for_malformed_json", + "community": 25, + "norm_label": "test_read_equipment_skips_check_for_malformed_json()" + }, + { + "label": "test_read_equipment_skips_check_when_schema_version_missing()", + "file_type": "code", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L332", + "id": "cache_test_equipment_test_read_equipment_skips_check_when_schema_version_missing", + "community": 25, + "norm_label": "test_read_equipment_skips_check_when_schema_version_missing()" + }, + { + "label": "Unit tests for ``exlab_wizard.cache.equipment``. The schemas come from ``exlab_", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L1", + "id": "cache_test_equipment_rationale_1", + "community": 25, + "norm_label": "unit tests for ``exlab_wizard.cache.equipment``. the schemas come from ``exlab_" + }, + { + "label": "Build a :class:`EquipmentJson` payload for tests. Timestamps are stamped by", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L44", + "id": "cache_test_equipment_rationale_44", + "community": 25, + "norm_label": "build a :class:`equipmentjson` payload for tests. timestamps are stamped by" + }, + { + "label": "First write produces a parseable v1.0 file with both timestamps stamped.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L84", + "id": "cache_test_equipment_rationale_84", + "community": 25, + "norm_label": "first write produces a parseable v1.0 file with both timestamps stamped." + }, + { + "label": "Parent ``.exlab-wizard`` is auto-created if missing.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L105", + "id": "cache_test_equipment_rationale_105", + "community": 25, + "norm_label": "parent ``.exlab-wizard`` is auto-created if missing." + }, + { + "label": "Re-writing an existing file keeps the original ``first_seen_at``.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L115", + "id": "cache_test_equipment_rationale_115", + "community": 25, + "norm_label": "re-writing an existing file keeps the original ``first_seen_at``." + }, + { + "label": "``last_modified_at`` advances on every write; ``first_seen_at`` is frozen.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L132", + "id": "cache_test_equipment_rationale_132", + "community": 25, + "norm_label": "``last_modified_at`` advances on every write; ``first_seen_at`` is frozen." + }, + { + "label": "A round-trip write \u2192 read returns an equivalent payload.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L147", + "id": "cache_test_equipment_rationale_147", + "community": 25, + "norm_label": "a round-trip write \u2192 read returns an equivalent payload." + }, + { + "label": "A corrupt existing file is rewritten cleanly; first_seen_at is fresh. The \u00a7", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L172", + "id": "cache_test_equipment_rationale_172", + "community": 25, + "norm_label": "a corrupt existing file is rewritten cleanly; first_seen_at is fresh. the \u00a7" + }, + { + "label": "Second write is a no-op even when the input payload differs. Per \u00a711.4.2: s", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L216", + "id": "cache_test_equipment_rationale_216", + "community": 25, + "norm_label": "second write is a no-op even when the input payload differs. per \u00a711.4.2: s" + }, + { + "label": "Concurrent first-time writes do not corrupt the file. Two coroutines race t", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L240", + "id": "cache_test_equipment_rationale_240", + "community": 25, + "norm_label": "concurrent first-time writes do not corrupt the file. two coroutines race t" + }, + { + "label": "Round-trip: write -> read returns an equivalent payload.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L267", + "id": "cache_test_equipment_rationale_267", + "community": 25, + "norm_label": "round-trip: write -> read returns an equivalent payload." + }, + { + "label": "An absent or ``None`` ``schema_version`` is a major-mismatch case.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L283", + "id": "cache_test_equipment_rationale_283", + "community": 25, + "norm_label": "an absent or ``none`` ``schema_version`` is a major-mismatch case." + }, + { + "label": "Empty string is treated like ``None`` (no parseable major).", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L292", + "id": "cache_test_equipment_rationale_292", + "community": 25, + "norm_label": "empty string is treated like ``none`` (no parseable major)." + }, + { + "label": "A non-``MAJOR.MINOR`` string is treated as a major-mismatch case.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L301", + "id": "cache_test_equipment_rationale_301", + "community": 25, + "norm_label": "a non-``major.minor`` string is treated as a major-mismatch case." + }, + { + "label": "Same major (different minor) is allowed.", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L310", + "id": "cache_test_equipment_rationale_310", + "community": 25, + "norm_label": "same major (different minor) is allowed." + }, + { + "label": "The ``_check_schema_major_from_bytes`` helper silently ignores malformed JSO", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L320", + "id": "cache_test_equipment_rationale_320", + "community": 25, + "norm_label": "the ``_check_schema_major_from_bytes`` helper silently ignores malformed jso" + }, + { + "label": "A file with no ``schema_version`` falls through to the typed decoder (which", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L335", + "id": "cache_test_equipment_rationale_335", + "community": 25, + "norm_label": "a file with no ``schema_version`` falls through to the typed decoder (which" + }, + { + "label": "test_sync_state_writer.py", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L1", + "id": "tests_unit_cache_test_sync_state_writer_py", + "community": 98, + "norm_label": "test_sync_state_writer.py" + }, + { + "label": "_state_path()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L25", + "id": "cache_test_sync_state_writer_state_path", + "community": 98, + "norm_label": "_state_path()" + }, + { + "label": "test_read_when_absent_returns_empty_state()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L34", + "id": "cache_test_sync_state_writer_test_read_when_absent_returns_empty_state", + "community": 98, + "norm_label": "test_read_when_absent_returns_empty_state()" + }, + { + "label": "test_upsert_file_creates_a_record()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L52", + "id": "cache_test_sync_state_writer_test_upsert_file_creates_a_record", + "community": 98, + "norm_label": "test_upsert_file_creates_a_record()" + }, + { + "label": "test_upsert_file_updates_existing_record()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L72", + "id": "cache_test_sync_state_writer_test_upsert_file_updates_existing_record", + "community": 98, + "norm_label": "test_upsert_file_updates_existing_record()" + }, + { + "label": "test_upsert_file_preserves_keep_local()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L90", + "id": "cache_test_sync_state_writer_test_upsert_file_preserves_keep_local", + "community": 98, + "norm_label": "test_upsert_file_preserves_keep_local()" + }, + { + "label": "test_set_keep_local_creates_record_if_absent()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L112", + "id": "cache_test_sync_state_writer_test_set_keep_local_creates_record_if_absent", + "community": 98, + "norm_label": "test_set_keep_local_creates_record_if_absent()" + }, + { + "label": "test_set_keep_local_toggles_and_preserves_sync_fields()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L123", + "id": "cache_test_sync_state_writer_test_set_keep_local_toggles_and_preserves_sync_fields", + "community": 98, + "norm_label": "test_set_keep_local_toggles_and_preserves_sync_fields()" + }, + { + "label": "test_mark_cleared_sets_cleared_at()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L148", + "id": "cache_test_sync_state_writer_test_mark_cleared_sets_cleared_at", + "community": 98, + "norm_label": "test_mark_cleared_sets_cleared_at()" + }, + { + "label": "test_mark_cleared_on_absent_file_creates_state()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L163", + "id": "cache_test_sync_state_writer_test_mark_cleared_on_absent_file_creates_state", + "community": 98, + "norm_label": "test_mark_cleared_on_absent_file_creates_state()" + }, + { + "label": "test_mutators_create_missing_exlab_wizard_dir()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L172", + "id": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", + "community": 98, + "norm_label": "test_mutators_create_missing_exlab_wizard_dir()" + }, + { + "label": "test_rollup_state_syncing_when_empty()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L203", + "id": "cache_test_sync_state_writer_test_rollup_state_syncing_when_empty", + "community": 98, + "norm_label": "test_rollup_state_syncing_when_empty()" + }, + { + "label": "test_rollup_state_syncing_when_some_unverified()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L208", + "id": "cache_test_sync_state_writer_test_rollup_state_syncing_when_some_unverified", + "community": 0, + "norm_label": "test_rollup_state_syncing_when_some_unverified()" + }, + { + "label": "test_rollup_state_synced_when_all_verified()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L219", + "id": "cache_test_sync_state_writer_test_rollup_state_synced_when_all_verified", + "community": 0, + "norm_label": "test_rollup_state_synced_when_all_verified()" + }, + { + "label": "test_rollup_state_cleared_takes_precedence_over_unverified()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L230", + "id": "cache_test_sync_state_writer_test_rollup_state_cleared_takes_precedence_over_unverified", + "community": 0, + "norm_label": "test_rollup_state_cleared_takes_precedence_over_unverified()" + }, + { + "label": "test_sync_state_json_round_trips_through_msgspec()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L244", + "id": "cache_test_sync_state_writer_test_sync_state_json_round_trips_through_msgspec", + "community": 0, + "norm_label": "test_sync_state_json_round_trips_through_msgspec()" + }, + { + "label": "test_read_raises_on_schema_major_mismatch()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L272", + "id": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", + "community": 98, + "norm_label": "test_read_raises_on_schema_major_mismatch()" + }, + { + "label": "test_concurrent_upserts_on_distinct_files_both_survive()", + "file_type": "code", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L302", + "id": "cache_test_sync_state_writer_test_concurrent_upserts_on_distinct_files_both_survive", + "community": 98, + "norm_label": "test_concurrent_upserts_on_distinct_files_both_survive()" + }, + { + "label": "Unit tests for ``exlab_wizard.cache.sync_state_writer``. Covers the operator-fr", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L1", + "id": "cache_test_sync_state_writer_rationale_1", + "community": 98, + "norm_label": "unit tests for ``exlab_wizard.cache.sync_state_writer``. covers the operator-fr" + }, + { + "label": "Each blocking mutator mkdir's the run's ``.exlab-wizard/`` cache dir. S2 ro", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L173", + "id": "cache_test_sync_state_writer_rationale_173", + "community": 98, + "norm_label": "each blocking mutator mkdir's the run's ``.exlab-wizard/`` cache dir. s2 ro" + }, + { + "label": "A file at a different schema major than the writer is rejected. The writer", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L273", + "id": "cache_test_sync_state_writer_rationale_273", + "community": 98, + "norm_label": "a file at a different schema major than the writer is rejected. the writer" + }, + { + "label": "Two concurrent ``upsert_file`` calls on the same run, distinct paths. The `", + "file_type": "rationale", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L303", + "id": "cache_test_sync_state_writer_rationale_303", + "community": 98, + "norm_label": "two concurrent ``upsert_file`` calls on the same run, distinct paths. the `" + }, + { + "label": "test_loader.py", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L1", + "id": "tests_unit_config_test_loader_py", + "community": 17, + "norm_label": "test_loader.py" + }, + { + "label": "test_load_config_complete_yaml()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L46", + "id": "config_test_loader_test_load_config_complete_yaml", + "community": 17, + "norm_label": "test_load_config_complete_yaml()" + }, + { + "label": "test_load_config_missing_file_raises()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L83", + "id": "config_test_loader_test_load_config_missing_file_raises", + "community": 17, + "norm_label": "test_load_config_missing_file_raises()" + }, + { + "label": "test_load_config_invalid_yaml_raises()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L91", + "id": "config_test_loader_test_load_config_invalid_yaml_raises", + "community": 17, + "norm_label": "test_load_config_invalid_yaml_raises()" + }, + { + "label": "test_load_config_top_level_not_mapping_raises()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L100", + "id": "config_test_loader_test_load_config_top_level_not_mapping_raises", + "community": 17, + "norm_label": "test_load_config_top_level_not_mapping_raises()" + }, + { + "label": "test_load_config_validation_error_raises_config_error()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L108", + "id": "config_test_loader_test_load_config_validation_error_raises_config_error", + "community": 17, + "norm_label": "test_load_config_validation_error_raises_config_error()" + }, + { + "label": "test_load_config_from_text_empty_returns_empty_config()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L132", + "id": "config_test_loader_test_load_config_from_text_empty_returns_empty_config", + "community": 17, + "norm_label": "test_load_config_from_text_empty_returns_empty_config()" + }, + { + "label": "test_load_config_unreadable_path_raises_config_error()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L141", + "id": "config_test_loader_test_load_config_unreadable_path_raises_config_error", + "community": 17, + "norm_label": "test_load_config_unreadable_path_raises_config_error()" + }, + { + "label": "test_save_config_atomic()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L163", + "id": "config_test_loader_test_save_config_atomic", + "community": 17, + "norm_label": "test_save_config_atomic()" + }, + { + "label": "test_save_config_preserves_comments_round_trip()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L175", + "id": "config_test_loader_test_save_config_preserves_comments_round_trip", + "community": 17, + "norm_label": "test_save_config_preserves_comments_round_trip()" + }, + { + "label": "test_save_config_preserves_key_order()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L189", + "id": "config_test_loader_test_save_config_preserves_key_order", + "community": 17, + "norm_label": "test_save_config_preserves_key_order()" + }, + { + "label": "test_save_config_creates_parent_dirs()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L205", + "id": "config_test_loader_test_save_config_creates_parent_dirs", + "community": 17, + "norm_label": "test_save_config_creates_parent_dirs()" + }, + { + "label": "test_save_config_without_original_text_writes_fresh()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L215", + "id": "config_test_loader_test_save_config_without_original_text_writes_fresh", + "community": 17, + "norm_label": "test_save_config_without_original_text_writes_fresh()" + }, + { + "label": "test_dump_config_round_trip()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L234", + "id": "config_test_loader_test_dump_config_round_trip", + "community": 17, + "norm_label": "test_dump_config_round_trip()" + }, + { + "label": "test_test_mode_unset_leaves_equipment_ids_unchanged()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L306", + "id": "config_test_loader_test_test_mode_unset_leaves_equipment_ids_unchanged", + "community": 17, + "norm_label": "test_test_mode_unset_leaves_equipment_ids_unchanged()" + }, + { + "label": "test_test_mode_enabled_prefixes_every_equipment_id()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L313", + "id": "config_test_loader_test_test_mode_enabled_prefixes_every_equipment_id", + "community": 17, + "norm_label": "test_test_mode_enabled_prefixes_every_equipment_id()" + }, + { + "label": "test_test_mode_is_idempotent_on_already_prefixed_ids()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L326", + "id": "config_test_loader_test_test_mode_is_idempotent_on_already_prefixed_ids", + "community": 17, + "norm_label": "test_test_mode_is_idempotent_on_already_prefixed_ids()" + }, + { + "label": "test_test_mode_preserves_unique_id_invariant()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L358", + "id": "config_test_loader_test_test_mode_preserves_unique_id_invariant", + "community": 17, + "norm_label": "test_test_mode_preserves_unique_id_invariant()" + }, + { + "label": "test_test_mode_truthy_values_trigger_prefix()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L374", + "id": "config_test_loader_test_test_mode_truthy_values_trigger_prefix", + "community": 17, + "norm_label": "test_test_mode_truthy_values_trigger_prefix()" + }, + { + "label": "test_test_mode_falsy_values_do_not_trigger_prefix()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L386", + "id": "config_test_loader_test_test_mode_falsy_values_do_not_trigger_prefix", + "community": 17, + "norm_label": "test_test_mode_falsy_values_do_not_trigger_prefix()" + }, + { + "label": "test_test_mode_unset_via_delenv_does_not_trigger_prefix()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L395", + "id": "config_test_loader_test_test_mode_unset_via_delenv_does_not_trigger_prefix", + "community": 17, + "norm_label": "test_test_mode_unset_via_delenv_does_not_trigger_prefix()" + }, + { + "label": "test_apply_test_mode_prefix_helper_is_a_pure_function()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L404", + "id": "config_test_loader_test_apply_test_mode_prefix_helper_is_a_pure_function", + "community": 17, + "norm_label": "test_apply_test_mode_prefix_helper_is_a_pure_function()" + }, + { + "label": "test_load_config_uses_ruamel_round_trip()", + "file_type": "code", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L423", + "id": "config_test_loader_test_load_config_uses_ruamel_round_trip", + "community": 17, + "norm_label": "test_load_config_uses_ruamel_round_trip()" + }, + { + "label": "Tests for ``exlab_wizard.config.loader``. Backend Spec \u00a79. The loader is the si", + "file_type": "rationale", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L1", + "id": "config_test_loader_rationale_1", + "community": 17, + "norm_label": "tests for ``exlab_wizard.config.loader``. backend spec \u00a79. the loader is the si" + }, + { + "label": "The default code path is a no-op: no env var, no rewrite.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L307", + "id": "config_test_loader_rationale_307", + "community": 17, + "norm_label": "the default code path is a no-op: no env var, no rewrite." + }, + { + "label": "A truthy env value rewrites every id with the canonical prefix.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L314", + "id": "config_test_loader_rationale_314", + "community": 17, + "norm_label": "a truthy env value rewrites every id with the canonical prefix." + }, + { + "label": "An already-``TEST_``-prefixed id must NOT be re-prefixed.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L329", + "id": "config_test_loader_rationale_329", + "community": 17, + "norm_label": "an already-``test_``-prefixed id must not be re-prefixed." + }, + { + "label": "The transformed config still passes Config.model_validate.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L359", + "id": "config_test_loader_rationale_359", + "community": 17, + "norm_label": "the transformed config still passes config.model_validate." + }, + { + "label": "Every accepted spelling flips the loader on (case-insensitive).", + "file_type": "rationale", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L377", + "id": "config_test_loader_rationale_377", + "community": 17, + "norm_label": "every accepted spelling flips the loader on (case-insensitive)." + }, + { + "label": "Falsy / unrecognized values leave the loaded config untouched.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L389", + "id": "config_test_loader_rationale_389", + "community": 17, + "norm_label": "falsy / unrecognized values leave the loaded config untouched." + }, + { + "label": "An absent env var (not just empty) leaves the config untouched.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L398", + "id": "config_test_loader_rationale_398", + "community": 17, + "norm_label": "an absent env var (not just empty) leaves the config untouched." + }, + { + "label": "``apply_test_mode_prefix`` itself ignores the env var. The env-var check is", + "file_type": "rationale", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L407", + "id": "config_test_loader_rationale_407", + "community": 17, + "norm_label": "``apply_test_mode_prefix`` itself ignores the env var. the env-var check is" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/config/__init__.py", + "source_location": "L1", + "id": "tests_unit_config_init_py", + "community": 327, + "norm_label": "__init__.py" + }, + { + "label": "Config package. Backend Spec \u00a79.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/__init__.py", + "source_location": "L1", + "id": "config_init_rationale_1", + "community": 327, + "norm_label": "config package. backend spec \u00a79." + }, + { + "label": "test_models.py", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1", + "id": "tests_unit_config_test_models_py", + "community": 8, + "norm_label": "test_models.py" + }, + { + "label": "_sftp_transport_dict()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L48", + "id": "config_test_models_sftp_transport_dict", + "community": 135, + "norm_label": "_sftp_transport_dict()" + }, + { + "label": "_smb_transport_dict()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L59", + "id": "config_test_models_smb_transport_dict", + "community": 135, + "norm_label": "_smb_transport_dict()" + }, + { + "label": "_equipment_dict()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L69", + "id": "config_test_models_equipment_dict", + "community": 8, + "norm_label": "_equipment_dict()" + }, + { + "label": "_full_config_dict()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L84", + "id": "config_test_models_full_config_dict", + "community": 305, + "norm_label": "_full_config_dict()" + }, + { + "label": "test_paths_config_defaults_are_empty_strings()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L208", + "id": "config_test_models_test_paths_config_defaults_are_empty_strings", + "community": 8, + "norm_label": "test_paths_config_defaults_are_empty_strings()" + }, + { + "label": "test_paths_config_rejects_unknown_keys()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L215", + "id": "config_test_models_test_paths_config_rejects_unknown_keys", + "community": 8, + "norm_label": "test_paths_config_rejects_unknown_keys()" + }, + { + "label": "test_lims_config_defaults()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L225", + "id": "config_test_models_test_lims_config_defaults", + "community": 8, + "norm_label": "test_lims_config_defaults()" + }, + { + "label": "test_lims_config_rejects_negative_cache_ttl_hours()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L233", + "id": "config_test_models_test_lims_config_rejects_negative_cache_ttl_hours", + "community": 8, + "norm_label": "test_lims_config_rejects_negative_cache_ttl_hours()" + }, + { + "label": "test_lims_config_zero_cache_ttl_is_allowed()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L238", + "id": "config_test_models_test_lims_config_zero_cache_ttl_is_allowed", + "community": 8, + "norm_label": "test_lims_config_zero_cache_ttl_is_allowed()" + }, + { + "label": "test_readme_default_field_minimal_string_field()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L249", + "id": "config_test_models_test_readme_default_field_minimal_string_field", + "community": 8, + "norm_label": "test_readme_default_field_minimal_string_field()" + }, + { + "label": "test_readme_default_field_id_must_match_template_question_id_pattern()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L256", + "id": "config_test_models_test_readme_default_field_id_must_match_template_question_id_pattern", + "community": 8, + "norm_label": "test_readme_default_field_id_must_match_template_question_id_pattern()" + }, + { + "label": "test_readme_default_field_id_rejects_leading_digit()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L261", + "id": "config_test_models_test_readme_default_field_id_rejects_leading_digit", + "community": 8, + "norm_label": "test_readme_default_field_id_rejects_leading_digit()" + }, + { + "label": "test_readme_default_field_label_must_be_non_empty()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L266", + "id": "config_test_models_test_readme_default_field_label_must_be_non_empty", + "community": 8, + "norm_label": "test_readme_default_field_label_must_be_non_empty()" + }, + { + "label": "test_readme_default_field_rejects_unknown_type()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L271", + "id": "config_test_models_test_readme_default_field_rejects_unknown_type", + "community": 8, + "norm_label": "test_readme_default_field_rejects_unknown_type()" + }, + { + "label": "test_readme_choice_field_requires_options()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L276", + "id": "config_test_models_test_readme_choice_field_requires_options", + "community": 8, + "norm_label": "test_readme_choice_field_requires_options()" + }, + { + "label": "test_readme_choice_field_rejects_empty_options_list()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L282", + "id": "config_test_models_test_readme_choice_field_rejects_empty_options_list", + "community": 8, + "norm_label": "test_readme_choice_field_rejects_empty_options_list()" + }, + { + "label": "test_readme_choice_field_accepts_non_empty_options()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L287", + "id": "config_test_models_test_readme_choice_field_accepts_non_empty_options", + "community": 8, + "norm_label": "test_readme_choice_field_accepts_non_empty_options()" + }, + { + "label": "test_readme_non_choice_field_does_not_require_options()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L292", + "id": "config_test_models_test_readme_non_choice_field_does_not_require_options", + "community": 8, + "norm_label": "test_readme_non_choice_field_does_not_require_options()" + }, + { + "label": "test_readme_config_default_is_empty_list()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L304", + "id": "config_test_models_test_readme_config_default_is_empty_list", + "community": 8, + "norm_label": "test_readme_config_default_is_empty_list()" + }, + { + "label": "test_bandwidth_window_happy_path()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L314", + "id": "config_test_models_test_bandwidth_window_happy_path", + "community": 8, + "norm_label": "test_bandwidth_window_happy_path()" + }, + { + "label": "test_bandwidth_window_rejects_empty_days_list()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L321", + "id": "config_test_models_test_bandwidth_window_rejects_empty_days_list", + "community": 8, + "norm_label": "test_bandwidth_window_rejects_empty_days_list()" + }, + { + "label": "test_bandwidth_window_rejects_invalid_day()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L326", + "id": "config_test_models_test_bandwidth_window_rejects_invalid_day", + "community": 8, + "norm_label": "test_bandwidth_window_rejects_invalid_day()" + }, + { + "label": "test_bandwidth_window_from_must_be_before_to()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L331", + "id": "config_test_models_test_bandwidth_window_from_must_be_before_to", + "community": 8, + "norm_label": "test_bandwidth_window_from_must_be_before_to()" + }, + { + "label": "test_bandwidth_window_equal_from_and_to_is_invalid()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L336", + "id": "config_test_models_test_bandwidth_window_equal_from_and_to_is_invalid", + "community": 8, + "norm_label": "test_bandwidth_window_equal_from_and_to_is_invalid()" + }, + { + "label": "test_bandwidth_window_rejects_non_hhmm_time()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L342", + "id": "config_test_models_test_bandwidth_window_rejects_non_hhmm_time", + "community": 8, + "norm_label": "test_bandwidth_window_rejects_non_hhmm_time()" + }, + { + "label": "test_bandwidth_window_rejects_invalid_hour()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L347", + "id": "config_test_models_test_bandwidth_window_rejects_invalid_hour", + "community": 8, + "norm_label": "test_bandwidth_window_rejects_invalid_hour()" + }, + { + "label": "test_bandwidth_window_rejects_invalid_minute()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L352", + "id": "config_test_models_test_bandwidth_window_rejects_invalid_minute", + "community": 8, + "norm_label": "test_bandwidth_window_rejects_invalid_minute()" + }, + { + "label": "test_bandwidth_config_defaults()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L362", + "id": "config_test_models_test_bandwidth_config_defaults", + "community": 8, + "norm_label": "test_bandwidth_config_defaults()" + }, + { + "label": "test_bandwidth_config_rejects_zero_upload_mbps()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L368", + "id": "config_test_models_test_bandwidth_config_rejects_zero_upload_mbps", + "community": 8, + "norm_label": "test_bandwidth_config_rejects_zero_upload_mbps()" + }, + { + "label": "test_bandwidth_config_rejects_negative_upload_mbps()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L373", + "id": "config_test_models_test_bandwidth_config_rejects_negative_upload_mbps", + "community": 8, + "norm_label": "test_bandwidth_config_rejects_negative_upload_mbps()" + }, + { + "label": "test_bandwidth_config_accepts_positive_upload_mbps()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L378", + "id": "config_test_models_test_bandwidth_config_accepts_positive_upload_mbps", + "community": 8, + "norm_label": "test_bandwidth_config_accepts_positive_upload_mbps()" + }, + { + "label": "test_sftp_transport_minimal()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L388", + "id": "config_test_models_test_sftp_transport_minimal", + "community": 135, + "norm_label": "test_sftp_transport_minimal()" + }, + { + "label": "test_sftp_transport_rejects_missing_host()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L395", + "id": "config_test_models_test_sftp_transport_rejects_missing_host", + "community": 135, + "norm_label": "test_sftp_transport_rejects_missing_host()" + }, + { + "label": "test_sftp_transport_rejects_empty_user()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L402", + "id": "config_test_models_test_sftp_transport_rejects_empty_user", + "community": 135, + "norm_label": "test_sftp_transport_rejects_empty_user()" + }, + { + "label": "test_sftp_transport_rejects_empty_remote_path()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L409", + "id": "config_test_models_test_sftp_transport_rejects_empty_remote_path", + "community": 135, + "norm_label": "test_sftp_transport_rejects_empty_remote_path()" + }, + { + "label": "test_sftp_transport_rejects_out_of_range_port()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L416", + "id": "config_test_models_test_sftp_transport_rejects_out_of_range_port", + "community": 135, + "norm_label": "test_sftp_transport_rejects_out_of_range_port()" + }, + { + "label": "test_sftp_transport_rejects_wrong_type_tag()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L423", + "id": "config_test_models_test_sftp_transport_rejects_wrong_type_tag", + "community": 135, + "norm_label": "test_sftp_transport_rejects_wrong_type_tag()" + }, + { + "label": "test_smb_transport_minimal()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L435", + "id": "config_test_models_test_smb_transport_minimal", + "community": 135, + "norm_label": "test_smb_transport_minimal()" + }, + { + "label": "test_smb_transport_accepts_optional_domain_and_subpath()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L443", + "id": "config_test_models_test_smb_transport_accepts_optional_domain_and_subpath", + "community": 135, + "norm_label": "test_smb_transport_accepts_optional_domain_and_subpath()" + }, + { + "label": "test_smb_transport_rejects_missing_share()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L452", + "id": "config_test_models_test_smb_transport_rejects_missing_share", + "community": 135, + "norm_label": "test_smb_transport_rejects_missing_share()" + }, + { + "label": "test_requires_keyring_password_true_for_sftp_and_smb()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L464", + "id": "config_test_models_test_requires_keyring_password_true_for_sftp_and_smb", + "community": 135, + "norm_label": "test_requires_keyring_password_true_for_sftp_and_smb()" + }, + { + "label": "test_requires_keyring_password_false_for_none()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L471", + "id": "config_test_models_test_requires_keyring_password_false_for_none", + "community": 135, + "norm_label": "test_requires_keyring_password_false_for_none()" + }, + { + "label": "test_equipment_transport_discriminates_on_type_sftp()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L480", + "id": "config_test_models_test_equipment_transport_discriminates_on_type_sftp", + "community": 8, + "norm_label": "test_equipment_transport_discriminates_on_type_sftp()" + }, + { + "label": "test_equipment_transport_discriminates_on_type_smb()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L485", + "id": "config_test_models_test_equipment_transport_discriminates_on_type_smb", + "community": 135, + "norm_label": "test_equipment_transport_discriminates_on_type_smb()" + }, + { + "label": "test_equipment_transport_rejects_unknown_type()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L495", + "id": "config_test_models_test_equipment_transport_rejects_unknown_type", + "community": 8, + "norm_label": "test_equipment_transport_rejects_unknown_type()" + }, + { + "label": "test_orchestrator_staging_transport_smb_mount()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L507", + "id": "config_test_models_test_orchestrator_staging_transport_smb_mount", + "community": 55, + "norm_label": "test_orchestrator_staging_transport_smb_mount()" + }, + { + "label": "test_orchestrator_staging_transport_file_transfer()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L514", + "id": "config_test_models_test_orchestrator_staging_transport_file_transfer", + "community": 55, + "norm_label": "test_orchestrator_staging_transport_file_transfer()" + }, + { + "label": "test_orchestrator_staging_transport_rejects_unknown_type()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L521", + "id": "config_test_models_test_orchestrator_staging_transport_rejects_unknown_type", + "community": 55, + "norm_label": "test_orchestrator_staging_transport_rejects_unknown_type()" + }, + { + "label": "test_equipment_id_regex_accepts_canonical_form()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L535", + "id": "config_test_models_test_equipment_id_regex_accepts_canonical_form", + "community": 8, + "norm_label": "test_equipment_id_regex_accepts_canonical_form()" + }, + { + "label": "test_equipment_id_rejects_lowercase()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L540", + "id": "config_test_models_test_equipment_id_rejects_lowercase", + "community": 8, + "norm_label": "test_equipment_id_rejects_lowercase()" + }, + { + "label": "test_equipment_id_rejects_hyphen()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L545", + "id": "config_test_models_test_equipment_id_rejects_hyphen", + "community": 8, + "norm_label": "test_equipment_id_rejects_hyphen()" + }, + { + "label": "test_equipment_id_rejects_leading_digit()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L550", + "id": "config_test_models_test_equipment_id_rejects_leading_digit", + "community": 8, + "norm_label": "test_equipment_id_rejects_leading_digit()" + }, + { + "label": "test_equipment_id_rejects_too_long()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L555", + "id": "config_test_models_test_equipment_id_rejects_too_long", + "community": 8, + "norm_label": "test_equipment_id_rejects_too_long()" + }, + { + "label": "test_equipment_id_accepts_max_length()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L561", + "id": "config_test_models_test_equipment_id_accepts_max_length", + "community": 8, + "norm_label": "test_equipment_id_accepts_max_length()" + }, + { + "label": "test_equipment_config_rejects_removed_completeness_fields()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L567", + "id": "config_test_models_test_equipment_config_rejects_removed_completeness_fields", + "community": 8, + "norm_label": "test_equipment_config_rejects_removed_completeness_fields()" + }, + { + "label": "test_equipment_label_must_be_non_empty()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L578", + "id": "config_test_models_test_equipment_label_must_be_non_empty", + "community": 8, + "norm_label": "test_equipment_label_must_be_non_empty()" + }, + { + "label": "test_equipment_local_root_must_be_non_empty()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L585", + "id": "config_test_models_test_equipment_local_root_must_be_non_empty", + "community": 8, + "norm_label": "test_equipment_local_root_must_be_non_empty()" + }, + { + "label": "test_equipment_nas_root_must_be_non_empty()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L592", + "id": "config_test_models_test_equipment_nas_root_must_be_non_empty", + "community": 8, + "norm_label": "test_equipment_nas_root_must_be_non_empty()" + }, + { + "label": "test_equipment_orchestrator_staging_transport_optional()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L599", + "id": "config_test_models_test_equipment_orchestrator_staging_transport_optional", + "community": 8, + "norm_label": "test_equipment_orchestrator_staging_transport_optional()" + }, + { + "label": "_orch_staging_transport_dict()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L609", + "id": "config_test_models_orch_staging_transport_dict", + "community": 8, + "norm_label": "_orch_staging_transport_dict()" + }, + { + "label": "test_sync_mode_defaults_to_nas_when_absent()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L617", + "id": "config_test_models_test_sync_mode_defaults_to_nas_when_absent", + "community": 8, + "norm_label": "test_sync_mode_defaults_to_nas_when_absent()" + }, + { + "label": "test_sync_mode_nas_requires_transport_block()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L622", + "id": "config_test_models_test_sync_mode_nas_requires_transport_block", + "community": 8, + "norm_label": "test_sync_mode_nas_requires_transport_block()" + }, + { + "label": "test_sync_mode_nas_forbids_orchestrator_staging_transport()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L631", + "id": "config_test_models_test_sync_mode_nas_forbids_orchestrator_staging_transport", + "community": 8, + "norm_label": "test_sync_mode_nas_forbids_orchestrator_staging_transport()" + }, + { + "label": "test_sync_mode_stage_requires_orchestrator_staging_transport()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L640", + "id": "config_test_models_test_sync_mode_stage_requires_orchestrator_staging_transport", + "community": 8, + "norm_label": "test_sync_mode_stage_requires_orchestrator_staging_transport()" + }, + { + "label": "test_sync_mode_stage_forbids_transport_block()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L649", + "id": "config_test_models_test_sync_mode_stage_forbids_transport_block", + "community": 8, + "norm_label": "test_sync_mode_stage_forbids_transport_block()" + }, + { + "label": "test_sync_mode_stage_with_only_orchestrator_transport_is_valid()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L659", + "id": "config_test_models_test_sync_mode_stage_with_only_orchestrator_transport_is_valid", + "community": 8, + "norm_label": "test_sync_mode_stage_with_only_orchestrator_transport_is_valid()" + }, + { + "label": "test_sync_mode_serializes_to_string()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L670", + "id": "config_test_models_test_sync_mode_serializes_to_string", + "community": 8, + "norm_label": "test_sync_mode_serializes_to_string()" + }, + { + "label": "test_sync_mode_rejects_unknown_value()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L678", + "id": "config_test_models_test_sync_mode_rejects_unknown_value", + "community": 8, + "norm_label": "test_sync_mode_rejects_unknown_value()" + }, + { + "label": "test_sync_mode_stage_round_trip_via_dict()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L685", + "id": "config_test_models_test_sync_mode_stage_round_trip_via_dict", + "community": 8, + "norm_label": "test_sync_mode_stage_round_trip_via_dict()" + }, + { + "label": "test_nas_cleanup_defaults()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L704", + "id": "config_test_models_test_nas_cleanup_defaults", + "community": 304, + "norm_label": "test_nas_cleanup_defaults()" + }, + { + "label": "test_nas_cleanup_min_verify_passes_at_least_one()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L712", + "id": "config_test_models_test_nas_cleanup_min_verify_passes_at_least_one", + "community": 304, + "norm_label": "test_nas_cleanup_min_verify_passes_at_least_one()" + }, + { + "label": "test_nas_cleanup_min_age_hours_non_negative()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L717", + "id": "config_test_models_test_nas_cleanup_min_age_hours_non_negative", + "community": 304, + "norm_label": "test_nas_cleanup_min_age_hours_non_negative()" + }, + { + "label": "test_logging_level_normalized_to_uppercase()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L727", + "id": "config_test_models_test_logging_level_normalized_to_uppercase", + "community": 214, + "norm_label": "test_logging_level_normalized_to_uppercase()" + }, + { + "label": "test_logging_level_rejects_unknown()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L732", + "id": "config_test_models_test_logging_level_rejects_unknown", + "community": 214, + "norm_label": "test_logging_level_rejects_unknown()" + }, + { + "label": "test_logging_level_accepts_all_canonical_values()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L737", + "id": "config_test_models_test_logging_level_accepts_all_canonical_values", + "community": 214, + "norm_label": "test_logging_level_accepts_all_canonical_values()" + }, + { + "label": "test_logging_level_strips_whitespace_and_normalizes()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L743", + "id": "config_test_models_test_logging_level_strips_whitespace_and_normalizes", + "community": 214, + "norm_label": "test_logging_level_strips_whitespace_and_normalizes()" + }, + { + "label": "test_logging_level_rejects_non_string()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L748", + "id": "config_test_models_test_logging_level_rejects_non_string", + "community": 8, + "norm_label": "test_logging_level_rejects_non_string()" + }, + { + "label": "test_logging_level_rejects_non_string_directly()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L758", + "id": "config_test_models_test_logging_level_rejects_non_string_directly", + "community": 214, + "norm_label": "test_logging_level_rejects_non_string_directly()" + }, + { + "label": "test_logging_central_log_max_mb_at_least_one()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L766", + "id": "config_test_models_test_logging_central_log_max_mb_at_least_one", + "community": 214, + "norm_label": "test_logging_central_log_max_mb_at_least_one()" + }, + { + "label": "test_logging_central_log_keep_at_least_one()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L771", + "id": "config_test_models_test_logging_central_log_keep_at_least_one", + "community": 214, + "norm_label": "test_logging_central_log_keep_at_least_one()" + }, + { + "label": "test_operators_config_defaults_to_empty_allowlist()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L781", + "id": "config_test_models_test_operators_config_defaults_to_empty_allowlist", + "community": 55, + "norm_label": "test_operators_config_defaults_to_empty_allowlist()" + }, + { + "label": "test_operators_config_accepts_arbitrary_strings()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L786", + "id": "config_test_models_test_operators_config_accepts_arbitrary_strings", + "community": 55, + "norm_label": "test_operators_config_accepts_arbitrary_strings()" + }, + { + "label": "test_validator_config_defaults()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L796", + "id": "config_test_models_test_validator_config_defaults", + "community": 120, + "norm_label": "test_validator_config_defaults()" + }, + { + "label": "test_validator_content_scan_max_mib_at_least_one()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L803", + "id": "config_test_models_test_validator_content_scan_max_mib_at_least_one", + "community": 120, + "norm_label": "test_validator_content_scan_max_mib_at_least_one()" + }, + { + "label": "test_validator_extensions_must_start_with_dot()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L808", + "id": "config_test_models_test_validator_extensions_must_start_with_dot", + "community": 120, + "norm_label": "test_validator_extensions_must_start_with_dot()" + }, + { + "label": "test_validator_extensions_rejects_dotless_among_others()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L813", + "id": "config_test_models_test_validator_extensions_rejects_dotless_among_others", + "community": 120, + "norm_label": "test_validator_extensions_rejects_dotless_among_others()" + }, + { + "label": "test_plugins_config_default_allow_network_false()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L823", + "id": "config_test_models_test_plugins_config_default_allow_network_false", + "community": 55, + "norm_label": "test_plugins_config_default_allow_network_false()" + }, + { + "label": "test_sync_config_defaults()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L833", + "id": "config_test_models_test_sync_config_defaults", + "community": 48, + "norm_label": "test_sync_config_defaults()" + }, + { + "label": "test_sync_config_retry_attempts_non_negative()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L842", + "id": "config_test_models_test_sync_config_retry_attempts_non_negative", + "community": 48, + "norm_label": "test_sync_config_retry_attempts_non_negative()" + }, + { + "label": "test_sync_config_quiescence_minutes_at_least_one()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L847", + "id": "config_test_models_test_sync_config_quiescence_minutes_at_least_one", + "community": 48, + "norm_label": "test_sync_config_quiescence_minutes_at_least_one()" + }, + { + "label": "test_sync_config_poll_interval_seconds_at_least_one()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L852", + "id": "config_test_models_test_sync_config_poll_interval_seconds_at_least_one", + "community": 48, + "norm_label": "test_sync_config_poll_interval_seconds_at_least_one()" + }, + { + "label": "test_sync_config_accepts_custom_quiescence_settings()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L857", + "id": "config_test_models_test_sync_config_accepts_custom_quiescence_settings", + "community": 48, + "norm_label": "test_sync_config_accepts_custom_quiescence_settings()" + }, + { + "label": "test_sync_config_ignore_globs_default_is_independent_per_instance()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L868", + "id": "config_test_models_test_sync_config_ignore_globs_default_is_independent_per_instance", + "community": 48, + "norm_label": "test_sync_config_ignore_globs_default_is_independent_per_instance()" + }, + { + "label": "test_orchestrator_staging_cleanup_defaults()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L881", + "id": "config_test_models_test_orchestrator_staging_cleanup_defaults", + "community": 48, + "norm_label": "test_orchestrator_staging_cleanup_defaults()" + }, + { + "label": "test_orchestrator_staging_cleanup_scheduled_requires_positive_hours()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L887", + "id": "config_test_models_test_orchestrator_staging_cleanup_scheduled_requires_positive_hours", + "community": 48, + "norm_label": "test_orchestrator_staging_cleanup_scheduled_requires_positive_hours()" + }, + { + "label": "test_orchestrator_staging_cleanup_rejects_unknown_mode()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L893", + "id": "config_test_models_test_orchestrator_staging_cleanup_rejects_unknown_mode", + "community": 48, + "norm_label": "test_orchestrator_staging_cleanup_rejects_unknown_mode()" + }, + { + "label": "test_orchestrator_config_defaults()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L903", + "id": "config_test_models_test_orchestrator_config_defaults", + "community": 399, + "norm_label": "test_orchestrator_config_defaults()" + }, + { + "label": "test_config_fully_default_is_valid()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L918", + "id": "config_test_models_test_config_fully_default_is_valid", + "community": 8, + "norm_label": "test_config_fully_default_is_valid()" + }, + { + "label": "test_unique_equipment_ids_required()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L928", + "id": "config_test_models_test_unique_equipment_ids_required", + "community": 8, + "norm_label": "test_unique_equipment_ids_required()" + }, + { + "label": "test_distinct_equipment_ids_accepted()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L940", + "id": "config_test_models_test_distinct_equipment_ids_accepted", + "community": 135, + "norm_label": "test_distinct_equipment_ids_accepted()" + }, + { + "label": "test_orchestrator_legacy_enabled_field_rejected()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L954", + "id": "config_test_models_test_orchestrator_legacy_enabled_field_rejected", + "community": 400, + "norm_label": "test_orchestrator_legacy_enabled_field_rejected()" + }, + { + "label": "test_orchestrator_label_and_staging_root_load_independently()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L970", + "id": "config_test_models_test_orchestrator_label_and_staging_root_load_independently", + "community": 8, + "norm_label": "test_orchestrator_label_and_staging_root_load_independently()" + }, + { + "label": "test_orchestrator_with_both_fields_is_valid()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L985", + "id": "config_test_models_test_orchestrator_with_both_fields_is_valid", + "community": 8, + "norm_label": "test_orchestrator_with_both_fields_is_valid()" + }, + { + "label": "test_config_rejects_unknown_top_level_key()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L999", + "id": "config_test_models_test_config_rejects_unknown_top_level_key", + "community": 8, + "norm_label": "test_config_rejects_unknown_top_level_key()" + }, + { + "label": "test_full_config_round_trip_via_dict()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1009", + "id": "config_test_models_test_full_config_round_trip_via_dict", + "community": 305, + "norm_label": "test_full_config_round_trip_via_dict()" + }, + { + "label": "test_round_trip_preserves_bandwidth_alias_for_from()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1030", + "id": "config_test_models_test_round_trip_preserves_bandwidth_alias_for_from", + "community": 305, + "norm_label": "test_round_trip_preserves_bandwidth_alias_for_from()" + }, + { + "label": "test_config_with_equipment_appended_seeds_from_none()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1044", + "id": "config_test_models_test_config_with_equipment_appended_seeds_from_none", + "community": 243, + "norm_label": "test_config_with_equipment_appended_seeds_from_none()" + }, + { + "label": "test_config_with_equipment_appended_preserves_existing_state()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1052", + "id": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", + "community": 243, + "norm_label": "test_config_with_equipment_appended_preserves_existing_state()" + }, + { + "label": "test_config_with_equipment_appended_rejects_duplicate_id()", + "file_type": "code", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1069", + "id": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", + "community": 243, + "norm_label": "test_config_with_equipment_appended_rejects_duplicate_id()" + }, + { + "label": "Unit tests for ``exlab_wizard.config.models``. Pydantic models that mirror ``co", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1", + "id": "config_test_models_rationale_1", + "community": 8, + "norm_label": "unit tests for ``exlab_wizard.config.models``. pydantic models that mirror ``co" + }, + { + "label": "Minimal valid rclone_sftp transport block.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L49", + "id": "config_test_models_rationale_49", + "community": 135, + "norm_label": "minimal valid rclone_sftp transport block." + }, + { + "label": "Minimal valid rclone_smb transport block.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L60", + "id": "config_test_models_rationale_60", + "community": 135, + "norm_label": "minimal valid rclone_smb transport block." + }, + { + "label": "Build a valid EquipmentConfig dict with sensible defaults.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L74", + "id": "config_test_models_rationale_74", + "community": 8, + "norm_label": "build a valid equipmentconfig dict with sensible defaults." + }, + { + "label": "Full Config dict mirroring the \u00a79 example. Used by round-trip tests.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L85", + "id": "config_test_models_rationale_85", + "community": 305, + "norm_label": "full config dict mirroring the \u00a79 example. used by round-trip tests." + }, + { + "label": "The operator-free quiescence redesign drops the per-equipment completeness-s", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L568", + "id": "config_test_models_rationale_568", + "community": 8, + "norm_label": "the operator-free quiescence redesign drops the per-equipment completeness-s" + }, + { + "label": "Build a stage-mode EquipmentConfig from a dict, dump it, compare.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L686", + "id": "config_test_models_rationale_686", + "community": 8, + "norm_label": "build a stage-mode equipmentconfig from a dict, dump it, compare." + }, + { + "label": "Redesign \u00a73.1: the ``enabled`` toggle is removed; ``label`` and ``staging_ro", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L904", + "id": "config_test_models_rationale_904", + "community": 399, + "norm_label": "redesign \u00a73.1: the ``enabled`` toggle is removed; ``label`` and ``staging_ro" + }, + { + "label": "Redesign \u00a73.1: the ``enabled`` toggle is removed; old configs that carry it", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L955", + "id": "config_test_models_rationale_955", + "community": 400, + "norm_label": "redesign \u00a73.1: the ``enabled`` toggle is removed; old configs that carry it" + }, + { + "label": "They can be empty at load time (the setup-incomplete gate trips, not the Pyd", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L971", + "id": "config_test_models_rationale_971", + "community": 8, + "norm_label": "they can be empty at load time (the setup-incomplete gate trips, not the pyd" + }, + { + "label": "Build a Config from a \u00a79-shaped dict, dump it, and compare. ``model_dump()`", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1010", + "id": "config_test_models_rationale_1010", + "community": 305, + "norm_label": "build a config from a \u00a79-shaped dict, dump it, and compare. ``model_dump()`" + }, + { + "label": "A ``None`` config (fresh install) yields a default Config + the device.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1045", + "id": "config_test_models_rationale_1045", + "community": 243, + "norm_label": "a ``none`` config (fresh install) yields a default config + the device." + }, + { + "label": "Appending keeps prior equipment and other config sections, unmutated.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1053", + "id": "config_test_models_rationale_1053", + "community": 243, + "norm_label": "appending keeps prior equipment and other config sections, unmutated." + }, + { + "label": "A device whose id already exists raises ConfigError, not a silent merge.", + "file_type": "rationale", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1070", + "id": "config_test_models_rationale_1070", + "community": 243, + "norm_label": "a device whose id already exists raises configerror, not a silent merge." + }, + { + "label": "test_registry.py", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L1", + "id": "tests_unit_plugins_test_registry_py", + "community": 3, + "norm_label": "test_registry.py" + }, + { + "label": "_write_plugin()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L35", + "id": "plugins_test_registry_write_plugin", + "community": 3, + "norm_label": "_write_plugin()" + }, + { + "label": "test_loads_a_valid_plugin()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L89", + "id": "plugins_test_registry_test_loads_a_valid_plugin", + "community": 3, + "norm_label": "test_loads_a_valid_plugin()" + }, + { + "label": "test_loaded_record_carries_isolation_block()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L106", + "id": "plugins_test_registry_test_loaded_record_carries_isolation_block", + "community": 3, + "norm_label": "test_loaded_record_carries_isolation_block()" + }, + { + "label": "test_required_and_optional_variables_round_trip()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L118", + "id": "plugins_test_registry_test_required_and_optional_variables_round_trip", + "community": 3, + "norm_label": "test_required_and_optional_variables_round_trip()" + }, + { + "label": "test_rejects_plugin_directory_without_manifest()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L140", + "id": "plugins_test_registry_test_rejects_plugin_directory_without_manifest", + "community": 3, + "norm_label": "test_rejects_plugin_directory_without_manifest()" + }, + { + "label": "test_rejects_plugin_with_malformed_yaml()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L152", + "id": "plugins_test_registry_test_rejects_plugin_with_malformed_yaml", + "community": 3, + "norm_label": "test_rejects_plugin_with_malformed_yaml()" + }, + { + "label": "test_rejects_plugin_missing_required_field()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L164", + "id": "plugins_test_registry_test_rejects_plugin_missing_required_field", + "community": 3, + "norm_label": "test_rejects_plugin_missing_required_field()" + }, + { + "label": "test_rejects_plugin_with_unsupported_api_version()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L174", + "id": "plugins_test_registry_test_rejects_plugin_with_unsupported_api_version", + "community": 3, + "norm_label": "test_rejects_plugin_with_unsupported_api_version()" + }, + { + "label": "test_rejects_plugin_with_invalid_name()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L184", + "id": "plugins_test_registry_test_rejects_plugin_with_invalid_name", + "community": 3, + "norm_label": "test_rejects_plugin_with_invalid_name()" + }, + { + "label": "test_rejects_plugin_with_timeout_above_cap()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L202", + "id": "plugins_test_registry_test_rejects_plugin_with_timeout_above_cap", + "community": 3, + "norm_label": "test_rejects_plugin_with_timeout_above_cap()" + }, + { + "label": "test_rejects_plugin_with_memory_above_cap()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L211", + "id": "plugins_test_registry_test_rejects_plugin_with_memory_above_cap", + "community": 3, + "norm_label": "test_rejects_plugin_with_memory_above_cap()" + }, + { + "label": "test_rejects_supported_extensions_when_not_a_list_of_strings()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L220", + "id": "plugins_test_registry_test_rejects_supported_extensions_when_not_a_list_of_strings", + "community": 3, + "norm_label": "test_rejects_supported_extensions_when_not_a_list_of_strings()" + }, + { + "label": "test_rejects_network_plugin_when_allow_network_false()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L238", + "id": "plugins_test_registry_test_rejects_network_plugin_when_allow_network_false", + "community": 3, + "norm_label": "test_rejects_network_plugin_when_allow_network_false()" + }, + { + "label": "test_loads_network_plugin_when_allow_network_true()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L247", + "id": "plugins_test_registry_test_loads_network_plugin_when_allow_network_true", + "community": 3, + "norm_label": "test_loads_network_plugin_when_allow_network_true()" + }, + { + "label": "test_lab_dir_wins_on_name_collision()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L263", + "id": "plugins_test_registry_test_lab_dir_wins_on_name_collision", + "community": 3, + "norm_label": "test_lab_dir_wins_on_name_collision()" + }, + { + "label": "test_bundled_only_when_no_lab_collision()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L278", + "id": "plugins_test_registry_test_bundled_only_when_no_lab_collision", + "community": 3, + "norm_label": "test_bundled_only_when_no_lab_collision()" + }, + { + "label": "test_lab_only_plugins_are_loaded_too()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L292", + "id": "plugins_test_registry_test_lab_only_plugins_are_loaded_too", + "community": 3, + "norm_label": "test_lab_only_plugins_are_loaded_too()" + }, + { + "label": "test_reload_replaces_previous_state()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L311", + "id": "plugins_test_registry_test_reload_replaces_previous_state", + "community": 3, + "norm_label": "test_reload_replaces_previous_state()" + }, + { + "label": "test_reload_returns_registry_report_dataclass()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L326", + "id": "plugins_test_registry_test_reload_returns_registry_report_dataclass", + "community": 3, + "norm_label": "test_reload_returns_registry_report_dataclass()" + }, + { + "label": "test_get_returns_none_for_unknown_plugin()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L340", + "id": "plugins_test_registry_test_get_returns_none_for_unknown_plugin", + "community": 3, + "norm_label": "test_get_returns_none_for_unknown_plugin()" + }, + { + "label": "test_list_all_returns_records_sorted_by_name()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L346", + "id": "plugins_test_registry_test_list_all_returns_records_sorted_by_name", + "community": 3, + "norm_label": "test_list_all_returns_records_sorted_by_name()" + }, + { + "label": "test_list_all_returns_record_instances()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L357", + "id": "plugins_test_registry_test_list_all_returns_record_instances", + "community": 3, + "norm_label": "test_list_all_returns_record_instances()" + }, + { + "label": "test_candidates_for_matches_by_extension()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L372", + "id": "plugins_test_registry_test_candidates_for_matches_by_extension", + "community": 3, + "norm_label": "test_candidates_for_matches_by_extension()" + }, + { + "label": "test_candidates_for_excludes_plugins_with_zero_matches()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L392", + "id": "plugins_test_registry_test_candidates_for_excludes_plugins_with_zero_matches", + "community": 3, + "norm_label": "test_candidates_for_excludes_plugins_with_zero_matches()" + }, + { + "label": "test_candidates_for_returns_pluginplan_instances()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L402", + "id": "plugins_test_registry_test_candidates_for_returns_pluginplan_instances", + "community": 3, + "norm_label": "test_candidates_for_returns_pluginplan_instances()" + }, + { + "label": "test_candidates_for_supports_multi_extension_plugin()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L414", + "id": "plugins_test_registry_test_candidates_for_supports_multi_extension_plugin", + "community": 3, + "norm_label": "test_candidates_for_supports_multi_extension_plugin()" + }, + { + "label": "test_registry_with_no_dirs_loads_nothing()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L430", + "id": "plugins_test_registry_test_registry_with_no_dirs_loads_nothing", + "community": 3, + "norm_label": "test_registry_with_no_dirs_loads_nothing()" + }, + { + "label": "test_registry_skips_files_in_root()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L438", + "id": "plugins_test_registry_test_registry_skips_files_in_root", + "community": 3, + "norm_label": "test_registry_skips_files_in_root()" + }, + { + "label": "test_registry_handles_nonexistent_dir()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L450", + "id": "plugins_test_registry_test_registry_handles_nonexistent_dir", + "community": 3, + "norm_label": "test_registry_handles_nonexistent_dir()" + }, + { + "label": "test_registry_accepts_isolation_at_cap_boundary()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L465", + "id": "plugins_test_registry_test_registry_accepts_isolation_at_cap_boundary", + "community": 3, + "norm_label": "test_registry_accepts_isolation_at_cap_boundary()" + }, + { + "label": "test_pluginplan_dataclass_shape()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L473", + "id": "plugins_test_registry_test_pluginplan_dataclass_shape", + "community": 3, + "norm_label": "test_pluginplan_dataclass_shape()" + }, + { + "label": "test_pluginrecord_dataclass_shape()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L484", + "id": "plugins_test_registry_test_pluginrecord_dataclass_shape", + "community": 3, + "norm_label": "test_pluginrecord_dataclass_shape()" + }, + { + "label": "Tests for ``exlab_wizard.plugins.registry`` -- manifest-driven discovery. Pin t", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L1", + "id": "plugins_test_registry_rationale_1", + "community": 3, + "norm_label": "tests for ``exlab_wizard.plugins.registry`` -- manifest-driven discovery. pin t" + }, + { + "label": "Write a minimal plugin scaffold and return the plugin directory.", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L50", + "id": "plugins_test_registry_rationale_50", + "community": 3, + "norm_label": "write a minimal plugin scaffold and return the plugin directory." + }, + { + "label": "A non-directory entry inside the plugin root must be ignored, not crashed on.", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L439", + "id": "plugins_test_registry_rationale_439", + "community": 3, + "norm_label": "a non-directory entry inside the plugin root must be ignored, not crashed on." + }, + { + "label": "A configured plugin root that doesn't exist is treated as empty (no crash).", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L451", + "id": "plugins_test_registry_rationale_451", + "community": 3, + "norm_label": "a configured plugin root that doesn't exist is treated as empty (no crash)." + }, + { + "label": "PluginPlan exposes ``record`` and ``matching_files`` as named attributes.", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L474", + "id": "plugins_test_registry_rationale_474", + "community": 3, + "norm_label": "pluginplan exposes ``record`` and ``matching_files`` as named attributes." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/plugins/__init__.py", + "source_location": "L1", + "id": "tests_unit_plugins_init_py", + "community": 303, + "norm_label": "__init__.py" + }, + { + "label": "Plugins package. Backend Spec \u00a76. Re-exports the public plugin contract surface", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/__init__.py", + "source_location": "L1", + "id": "plugins_init_rationale_1", + "community": 303, + "norm_label": "plugins package. backend spec \u00a76. re-exports the public plugin contract surface" + }, + { + "label": "test_base.py", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L1", + "id": "tests_unit_plugins_test_base_py", + "community": 59, + "norm_label": "test_base.py" + }, + { + "label": "_MinimalPlugin", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L34", + "id": "plugins_test_base_minimalplugin", + "community": 59, + "norm_label": "_minimalplugin" + }, + { + "label": "Plugin", + "file_type": "code", + "source_file": "", + "source_location": "", + "id": "plugin", + "community": 149, + "norm_label": "plugin" + }, + { + "label": ".can_handle()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L42", + "id": "plugins_test_base_minimalplugin_can_handle", + "community": 59, + "norm_label": ".can_handle()" + }, + { + "label": ".transform()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L45", + "id": "plugins_test_base_minimalplugin_transform", + "community": 59, + "norm_label": ".transform()" + }, + { + "label": "_make_ctx()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L49", + "id": "plugins_test_base_make_ctx", + "community": 59, + "norm_label": "_make_ctx()" + }, + { + "label": "test_plugin_abc_cannot_be_instantiated_directly()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L71", + "id": "plugins_test_base_test_plugin_abc_cannot_be_instantiated_directly", + "community": 149, + "norm_label": "test_plugin_abc_cannot_be_instantiated_directly()" + }, + { + "label": "test_plugin_subclass_missing_can_handle_is_abstract()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L76", + "id": "plugins_test_base_test_plugin_subclass_missing_can_handle_is_abstract", + "community": 59, + "norm_label": "test_plugin_subclass_missing_can_handle_is_abstract()" + }, + { + "label": "test_plugin_subclass_missing_transform_is_abstract()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L89", + "id": "plugins_test_base_test_plugin_subclass_missing_transform_is_abstract", + "community": 59, + "norm_label": "test_plugin_subclass_missing_transform_is_abstract()" + }, + { + "label": "test_minimal_plugin_can_be_instantiated()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L102", + "id": "plugins_test_base_test_minimal_plugin_can_be_instantiated", + "community": 59, + "norm_label": "test_minimal_plugin_can_be_instantiated()" + }, + { + "label": "test_default_validate_variables_returns_empty_when_no_required()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L113", + "id": "plugins_test_base_test_default_validate_variables_returns_empty_when_no_required", + "community": 59, + "norm_label": "test_default_validate_variables_returns_empty_when_no_required()" + }, + { + "label": "test_default_validate_variables_reports_missing_required()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L118", + "id": "plugins_test_base_test_default_validate_variables_reports_missing_required", + "community": 59, + "norm_label": "test_default_validate_variables_reports_missing_required()" + }, + { + "label": "test_default_validate_variables_reports_empty_string_as_missing()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L128", + "id": "plugins_test_base_test_default_validate_variables_reports_empty_string_as_missing", + "community": 59, + "norm_label": "test_default_validate_variables_reports_empty_string_as_missing()" + }, + { + "label": "test_default_validate_variables_lists_all_missing()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L140", + "id": "plugins_test_base_test_default_validate_variables_lists_all_missing", + "community": 59, + "norm_label": "test_default_validate_variables_lists_all_missing()" + }, + { + "label": "test_pre_transform_all_default_is_noop()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L154", + "id": "plugins_test_base_test_pre_transform_all_default_is_noop", + "community": 59, + "norm_label": "test_pre_transform_all_default_is_noop()" + }, + { + "label": "test_post_transform_all_default_is_noop()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L160", + "id": "plugins_test_base_test_post_transform_all_default_is_noop", + "community": 59, + "norm_label": "test_post_transform_all_default_is_noop()" + }, + { + "label": "test_on_plugin_failure_default_is_noop()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L166", + "id": "plugins_test_base_test_on_plugin_failure_default_is_noop", + "community": 59, + "norm_label": "test_on_plugin_failure_default_is_noop()" + }, + { + "label": "test_describe_changes_default_returns_single_modify_change()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L173", + "id": "plugins_test_base_test_describe_changes_default_returns_single_modify_change", + "community": 59, + "norm_label": "test_describe_changes_default_returns_single_modify_change()" + }, + { + "label": "test_filechange_is_frozen_dataclass()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L189", + "id": "plugins_test_base_test_filechange_is_frozen_dataclass", + "community": 59, + "norm_label": "test_filechange_is_frozen_dataclass()" + }, + { + "label": "test_filechange_default_detail_is_empty_dict()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L195", + "id": "plugins_test_base_test_filechange_default_detail_is_empty_dict", + "community": 59, + "norm_label": "test_filechange_default_detail_is_empty_dict()" + }, + { + "label": "test_filechange_accepts_detail_payload()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L200", + "id": "plugins_test_base_test_filechange_accepts_detail_payload", + "community": 59, + "norm_label": "test_filechange_accepts_detail_payload()" + }, + { + "label": "test_plugincontext_is_frozen_dataclass()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L215", + "id": "plugins_test_base_test_plugincontext_is_frozen_dataclass", + "community": 59, + "norm_label": "test_plugincontext_is_frozen_dataclass()" + }, + { + "label": "test_plugincontext_carries_full_session_metadata()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L221", + "id": "plugins_test_base_test_plugincontext_carries_full_session_metadata", + "community": 59, + "norm_label": "test_plugincontext_carries_full_session_metadata()" + }, + { + "label": "test_pluginerror_reexport_is_canonical_class()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L244", + "id": "plugins_test_base_test_pluginerror_reexport_is_canonical_class", + "community": 59, + "norm_label": "test_pluginerror_reexport_is_canonical_class()" + }, + { + "label": "test_plugininputrequired_reexport_is_canonical_class()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L249", + "id": "plugins_test_base_test_plugininputrequired_reexport_is_canonical_class", + "community": 59, + "norm_label": "test_plugininputrequired_reexport_is_canonical_class()" + }, + { + "label": "test_plugininputrequired_carries_fields_and_reason()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L253", + "id": "plugins_test_base_test_plugininputrequired_carries_fields_and_reason", + "community": 22, + "norm_label": "test_plugininputrequired_carries_fields_and_reason()" + }, + { + "label": "test_plugin_api_version_defaults_to_one()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L266", + "id": "plugins_test_base_test_plugin_api_version_defaults_to_one", + "community": 59, + "norm_label": "test_plugin_api_version_defaults_to_one()" + }, + { + "label": "test_plugin_required_variables_default_is_empty_list()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L271", + "id": "plugins_test_base_test_plugin_required_variables_default_is_empty_list", + "community": 59, + "norm_label": "test_plugin_required_variables_default_is_empty_list()" + }, + { + "label": "test_plugin_optional_variables_default_is_empty_list()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L275", + "id": "plugins_test_base_test_plugin_optional_variables_default_is_empty_list", + "community": 59, + "norm_label": "test_plugin_optional_variables_default_is_empty_list()" + }, + { + "label": "Tests for ``exlab_wizard.plugins.base`` -- the plugin contract base class. Pin", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L1", + "id": "plugins_test_base_rationale_1", + "community": 59, + "norm_label": "tests for ``exlab_wizard.plugins.base`` -- the plugin contract base class. pin" + }, + { + "label": "Concrete subclass with only the two abstract methods implemented.", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L35", + "id": "plugins_test_base_rationale_35", + "community": 59, + "norm_label": "concrete subclass with only the two abstract methods implemented." + }, + { + "label": "A subclass with both abstract methods implemented is instantiable.", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L103", + "id": "plugins_test_base_rationale_103", + "community": 59, + "norm_label": "a subclass with both abstract methods implemented is instantiable." + }, + { + "label": "An empty string is treated as a missing value (per spec: 'missing or empty').", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L129", + "id": "plugins_test_base_rationale_129", + "community": 59, + "norm_label": "an empty string is treated as a missing value (per spec: 'missing or empty')." + }, + { + "label": "The plugins package re-exports the same class object as ``errors``.", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L245", + "id": "plugins_test_base_rationale_245", + "community": 59, + "norm_label": "the plugins package re-exports the same class object as ``errors``." + }, + { + "label": "PluginInputRequired stores both the field list and the operator-readable reason.", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L254", + "id": "plugins_test_base_rationale_254", + "community": 22, + "norm_label": "plugininputrequired stores both the field list and the operator-readable reason." + }, + { + "label": "The class-level api_version default matches the host's current version.", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L267", + "id": "plugins_test_base_rationale_267", + "community": 59, + "norm_label": "the class-level api_version default matches the host's current version." + }, + { + "label": "test_logger.py", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L1", + "id": "tests_unit_plugins_test_logger_py", + "community": 69, + "norm_label": "test_logger.py" + }, + { + "label": "test_host_plugin_logger_forwards_info_to_stdlib_logger()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L33", + "id": "plugins_test_logger_test_host_plugin_logger_forwards_info_to_stdlib_logger", + "community": 69, + "norm_label": "test_host_plugin_logger_forwards_info_to_stdlib_logger()" + }, + { + "label": "test_host_plugin_logger_forwards_debug()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L44", + "id": "plugins_test_logger_test_host_plugin_logger_forwards_debug", + "community": 69, + "norm_label": "test_host_plugin_logger_forwards_debug()" + }, + { + "label": "test_host_plugin_logger_forwards_warning()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L51", + "id": "plugins_test_logger_test_host_plugin_logger_forwards_warning", + "community": 69, + "norm_label": "test_host_plugin_logger_forwards_warning()" + }, + { + "label": "test_host_plugin_logger_forwards_error()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L58", + "id": "plugins_test_logger_test_host_plugin_logger_forwards_error", + "community": 69, + "norm_label": "test_host_plugin_logger_forwards_error()" + }, + { + "label": "test_host_plugin_logger_passes_structured_fields_via_extra()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L65", + "id": "plugins_test_logger_test_host_plugin_logger_passes_structured_fields_via_extra", + "community": 69, + "norm_label": "test_host_plugin_logger_passes_structured_fields_via_extra()" + }, + { + "label": "test_host_plugin_logger_uses_default_logger_name_when_unspecified()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L77", + "id": "plugins_test_logger_test_host_plugin_logger_uses_default_logger_name_when_unspecified", + "community": 69, + "norm_label": "test_host_plugin_logger_uses_default_logger_name_when_unspecified()" + }, + { + "label": "test_worker_plugin_logger_emits_json_frame_to_stream()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L94", + "id": "plugins_test_logger_test_worker_plugin_logger_emits_json_frame_to_stream", + "community": 69, + "norm_label": "test_worker_plugin_logger_emits_json_frame_to_stream()" + }, + { + "label": "test_worker_plugin_logger_each_level_emits_correct_level_string()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L106", + "id": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", + "community": 69, + "norm_label": "test_worker_plugin_logger_each_level_emits_correct_level_string()" + }, + { + "label": "test_worker_plugin_logger_emits_one_frame_per_call()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L119", + "id": "plugins_test_logger_test_worker_plugin_logger_emits_one_frame_per_call", + "community": 69, + "norm_label": "test_worker_plugin_logger_emits_one_frame_per_call()" + }, + { + "label": "test_worker_plugin_logger_emits_empty_context_when_no_fields()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L129", + "id": "plugins_test_logger_test_worker_plugin_logger_emits_empty_context_when_no_fields", + "community": 69, + "norm_label": "test_worker_plugin_logger_emits_empty_context_when_no_fields()" + }, + { + "label": "test_worker_plugin_logger_default_stream_is_stderr()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L137", + "id": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", + "community": 69, + "norm_label": "test_worker_plugin_logger_default_stream_is_stderr()" + }, + { + "label": "test_plugin_log_frame_fields_are_pinned()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L153", + "id": "plugins_test_logger_test_plugin_log_frame_fields_are_pinned", + "community": 69, + "norm_label": "test_plugin_log_frame_fields_are_pinned()" + }, + { + "label": "test_plugin_log_frame_default_context_is_empty_dict()", + "file_type": "code", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L160", + "id": "plugins_test_logger_test_plugin_log_frame_default_context_is_empty_dict", + "community": 69, + "norm_label": "test_plugin_log_frame_default_context_is_empty_dict()" + }, + { + "label": "Tests for ``exlab_wizard.plugins.logger`` -- structured plugin log shim. Pin bo", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L1", + "id": "plugins_test_logger_rationale_1", + "community": 69, + "norm_label": "tests for ``exlab_wizard.plugins.logger`` -- structured plugin log shim. pin bo" + }, + { + "label": "Structured ``**fields`` arrive on the LogRecord as ``record.context``.", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L68", + "id": "plugins_test_logger_rationale_68", + "community": 69, + "norm_label": "structured ``**fields`` arrive on the logrecord as ``record.context``." + }, + { + "label": "Construction without ``name`` falls back to ``exlab_wizard.plugins``.", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L80", + "id": "plugins_test_logger_rationale_80", + "community": 69, + "norm_label": "construction without ``name`` falls back to ``exlab_wizard.plugins``." + }, + { + "label": "Without an explicit stream, the worker writes to ``sys.stderr``.", + "file_type": "rationale", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L138", + "id": "plugins_test_logger_rationale_138", + "community": 69, + "norm_label": "without an explicit stream, the worker writes to ``sys.stderr``." + }, + { + "label": "test_schema_versions.py", + "file_type": "code", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L1", + "id": "tests_unit_constants_test_schema_versions_py", + "community": 213, + "norm_label": "test_schema_versions.py" + }, + { + "label": "test_creation_json_version_is_pinned()", + "file_type": "code", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L13", + "id": "constants_test_schema_versions_test_creation_json_version_is_pinned", + "community": 213, + "norm_label": "test_creation_json_version_is_pinned()" + }, + { + "label": "test_readme_fields_json_version_is_pinned()", + "file_type": "code", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L18", + "id": "constants_test_schema_versions_test_readme_fields_json_version_is_pinned", + "community": 213, + "norm_label": "test_readme_fields_json_version_is_pinned()" + }, + { + "label": "test_sync_state_json_version_is_pinned()", + "file_type": "code", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L23", + "id": "constants_test_schema_versions_test_sync_state_json_version_is_pinned", + "community": 213, + "norm_label": "test_sync_state_json_version_is_pinned()" + }, + { + "label": "test_equipment_json_version_is_pinned()", + "file_type": "code", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L28", + "id": "constants_test_schema_versions_test_equipment_json_version_is_pinned", + "community": 213, + "norm_label": "test_equipment_json_version_is_pinned()" + }, + { + "label": "test_test_runs_json_version_is_pinned()", + "file_type": "code", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L33", + "id": "constants_test_schema_versions_test_test_runs_json_version_is_pinned", + "community": 213, + "norm_label": "test_test_runs_json_version_is_pinned()" + }, + { + "label": "test_offline_catalogue_version_is_pinned()", + "file_type": "code", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L38", + "id": "constants_test_schema_versions_test_offline_catalogue_version_is_pinned", + "community": 213, + "norm_label": "test_offline_catalogue_version_is_pinned()" + }, + { + "label": "test_readme_front_matter_schema_version_is_pinned()", + "file_type": "code", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L43", + "id": "constants_test_schema_versions_test_readme_front_matter_schema_version_is_pinned", + "community": 213, + "norm_label": "test_readme_front_matter_schema_version_is_pinned()" + }, + { + "label": "test_all_schema_versions_are_strings()", + "file_type": "code", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L48", + "id": "constants_test_schema_versions_test_all_schema_versions_are_strings", + "community": 213, + "norm_label": "test_all_schema_versions_are_strings()" + }, + { + "label": "test_schema_versions_re_exported_from_package()", + "file_type": "code", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L63", + "id": "constants_test_schema_versions_test_schema_versions_re_exported_from_package", + "community": 213, + "norm_label": "test_schema_versions_re_exported_from_package()" + }, + { + "label": "Verify the literal values pinned in ``schema_versions``. Each schema-version co", + "file_type": "rationale", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L1", + "id": "constants_test_schema_versions_rationale_1", + "community": 213, + "norm_label": "verify the literal values pinned in ``schema_versions``. each schema-version co" + }, + { + "label": "test_patterns.py", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L1", + "id": "tests_unit_constants_test_patterns_py", + "community": 46, + "norm_label": "test_patterns.py" + }, + { + "label": "test_equipment_id_regex_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L19", + "id": "constants_test_patterns_test_equipment_id_regex_literal", + "community": 46, + "norm_label": "test_equipment_id_regex_literal()" + }, + { + "label": "test_equipment_id_pattern_is_compiled()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L23", + "id": "constants_test_patterns_test_equipment_id_pattern_is_compiled", + "community": 46, + "norm_label": "test_equipment_id_pattern_is_compiled()" + }, + { + "label": "test_equipment_id_pattern_accepts_valid_ids()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L28", + "id": "constants_test_patterns_test_equipment_id_pattern_accepts_valid_ids", + "community": 46, + "norm_label": "test_equipment_id_pattern_accepts_valid_ids()" + }, + { + "label": "test_equipment_id_pattern_rejects_invalid_ids()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L41", + "id": "constants_test_patterns_test_equipment_id_pattern_rejects_invalid_ids", + "community": 46, + "norm_label": "test_equipment_id_pattern_rejects_invalid_ids()" + }, + { + "label": "test_equipment_id_max_length()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L56", + "id": "constants_test_patterns_test_equipment_id_max_length", + "community": 46, + "norm_label": "test_equipment_id_max_length()" + }, + { + "label": "test_placeholder_angle_bracket_regex_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L66", + "id": "constants_test_patterns_test_placeholder_angle_bracket_regex_literal", + "community": 46, + "norm_label": "test_placeholder_angle_bracket_regex_literal()" + }, + { + "label": "test_placeholder_angle_bracket_pattern_finds_tokens()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L70", + "id": "constants_test_patterns_test_placeholder_angle_bracket_pattern_finds_tokens", + "community": 46, + "norm_label": "test_placeholder_angle_bracket_pattern_finds_tokens()" + }, + { + "label": "test_placeholder_angle_bracket_pattern_ignores_non_tokens()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L76", + "id": "constants_test_patterns_test_placeholder_angle_bracket_pattern_ignores_non_tokens", + "community": 46, + "norm_label": "test_placeholder_angle_bracket_pattern_ignores_non_tokens()" + }, + { + "label": "test_placeholder_jinja_var_regex_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L83", + "id": "constants_test_patterns_test_placeholder_jinja_var_regex_literal", + "community": 46, + "norm_label": "test_placeholder_jinja_var_regex_literal()" + }, + { + "label": "test_placeholder_jinja_var_pattern_finds_markers()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L87", + "id": "constants_test_patterns_test_placeholder_jinja_var_pattern_finds_markers", + "community": 46, + "norm_label": "test_placeholder_jinja_var_pattern_finds_markers()" + }, + { + "label": "test_placeholder_jinja_var_pattern_ignores_plain_text()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L93", + "id": "constants_test_patterns_test_placeholder_jinja_var_pattern_ignores_plain_text", + "community": 46, + "norm_label": "test_placeholder_jinja_var_pattern_ignores_plain_text()" + }, + { + "label": "test_placeholder_jinja_block_regex_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L98", + "id": "constants_test_patterns_test_placeholder_jinja_block_regex_literal", + "community": 46, + "norm_label": "test_placeholder_jinja_block_regex_literal()" + }, + { + "label": "test_placeholder_jinja_block_pattern_finds_blocks()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L102", + "id": "constants_test_patterns_test_placeholder_jinja_block_pattern_finds_blocks", + "community": 46, + "norm_label": "test_placeholder_jinja_block_pattern_finds_blocks()" + }, + { + "label": "test_placeholder_jinja_block_pattern_ignores_unrelated_content()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L108", + "id": "constants_test_patterns_test_placeholder_jinja_block_pattern_ignores_unrelated_content", + "community": 46, + "norm_label": "test_placeholder_jinja_block_pattern_ignores_unrelated_content()" + }, + { + "label": "test_project_short_id_regex_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L117", + "id": "constants_test_patterns_test_project_short_id_regex_literal", + "community": 46, + "norm_label": "test_project_short_id_regex_literal()" + }, + { + "label": "test_project_short_id_pattern_accepts()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L121", + "id": "constants_test_patterns_test_project_short_id_pattern_accepts", + "community": 46, + "norm_label": "test_project_short_id_pattern_accepts()" + }, + { + "label": "test_project_short_id_pattern_rejects()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L126", + "id": "constants_test_patterns_test_project_short_id_pattern_rejects", + "community": 46, + "norm_label": "test_project_short_id_pattern_rejects()" + }, + { + "label": "test_template_question_id_regex_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L137", + "id": "constants_test_patterns_test_template_question_id_regex_literal", + "community": 46, + "norm_label": "test_template_question_id_regex_literal()" + }, + { + "label": "test_template_question_id_pattern_accepts()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L141", + "id": "constants_test_patterns_test_template_question_id_pattern_accepts", + "community": 46, + "norm_label": "test_template_question_id_pattern_accepts()" + }, + { + "label": "test_template_question_id_pattern_rejects()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L146", + "id": "constants_test_patterns_test_template_question_id_pattern_rejects", + "community": 46, + "norm_label": "test_template_question_id_pattern_rejects()" + }, + { + "label": "test_plugin_name_regex_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L156", + "id": "constants_test_patterns_test_plugin_name_regex_literal", + "community": 46, + "norm_label": "test_plugin_name_regex_literal()" + }, + { + "label": "test_plugin_name_pattern_accepts()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L160", + "id": "constants_test_patterns_test_plugin_name_pattern_accepts", + "community": 46, + "norm_label": "test_plugin_name_pattern_accepts()" + }, + { + "label": "test_plugin_name_pattern_rejects()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L165", + "id": "constants_test_patterns_test_plugin_name_pattern_rejects", + "community": 46, + "norm_label": "test_plugin_name_pattern_rejects()" + }, + { + "label": "test_run_date_strftime_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L175", + "id": "constants_test_patterns_test_run_date_strftime_literal", + "community": 46, + "norm_label": "test_run_date_strftime_literal()" + }, + { + "label": "test_run_date_strftime_round_trip()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L181", + "id": "constants_test_patterns_test_run_date_strftime_round_trip", + "community": 46, + "norm_label": "test_run_date_strftime_round_trip()" + }, + { + "label": "test_run_dir_prefix_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L193", + "id": "constants_test_patterns_test_run_dir_prefix_literal", + "community": 46, + "norm_label": "test_run_dir_prefix_literal()" + }, + { + "label": "test_test_run_dir_prefix_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L197", + "id": "constants_test_patterns_test_test_run_dir_prefix_literal", + "community": 46, + "norm_label": "test_test_run_dir_prefix_literal()" + }, + { + "label": "test_test_runs_dir_name_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L201", + "id": "constants_test_patterns_test_test_runs_dir_name_literal", + "community": 46, + "norm_label": "test_test_runs_dir_name_literal()" + }, + { + "label": "test_windows_reserved_names_membership()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L210", + "id": "constants_test_patterns_test_windows_reserved_names_membership", + "community": 46, + "norm_label": "test_windows_reserved_names_membership()" + }, + { + "label": "test_windows_reserved_names_is_frozenset()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L220", + "id": "constants_test_patterns_test_windows_reserved_names_is_frozenset", + "community": 46, + "norm_label": "test_windows_reserved_names_is_frozenset()" + }, + { + "label": "test_windows_reserved_names_size()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L224", + "id": "constants_test_patterns_test_windows_reserved_names_size", + "community": 46, + "norm_label": "test_windows_reserved_names_size()" + }, + { + "label": "test_windows_reserved_names_are_uppercase()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L229", + "id": "constants_test_patterns_test_windows_reserved_names_are_uppercase", + "community": 46, + "norm_label": "test_windows_reserved_names_are_uppercase()" + }, + { + "label": "test_windows_reserved_names_case_insensitive_check()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L236", + "id": "constants_test_patterns_test_windows_reserved_names_case_insensitive_check", + "community": 46, + "norm_label": "test_windows_reserved_names_case_insensitive_check()" + }, + { + "label": "test_windows_illegal_chars_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L248", + "id": "constants_test_patterns_test_windows_illegal_chars_literal", + "community": 46, + "norm_label": "test_windows_illegal_chars_literal()" + }, + { + "label": "test_windows_illegal_chars_membership()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L253", + "id": "constants_test_patterns_test_windows_illegal_chars_membership", + "community": 46, + "norm_label": "test_windows_illegal_chars_membership()" + }, + { + "label": "test_windows_illegal_chars_excludes_safe()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L258", + "id": "constants_test_patterns_test_windows_illegal_chars_excludes_safe", + "community": 46, + "norm_label": "test_windows_illegal_chars_excludes_safe()" + }, + { + "label": "test_patterns_re_exported_from_package()", + "file_type": "code", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L268", + "id": "constants_test_patterns_test_patterns_re_exported_from_package", + "community": 46, + "norm_label": "test_patterns_re_exported_from_package()" + }, + { + "label": "Verify the regex literals plus filename-rule constants. Each regex is exercised", + "file_type": "rationale", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L1", + "id": "constants_test_patterns_rationale_1", + "community": 46, + "norm_label": "verify the regex literals plus filename-rule constants. each regex is exercised" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/constants/__init__.py", + "source_location": "L1", + "id": "tests_unit_constants_init_py", + "community": 328, + "norm_label": "__init__.py" + }, + { + "label": "Public re-exports for the ``exlab_wizard.constants`` package. Callers should im", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/__init__.py", + "source_location": "L1", + "id": "constants_init_rationale_1", + "community": 328, + "norm_label": "public re-exports for the ``exlab_wizard.constants`` package. callers should im" + }, + { + "label": "test_enum_literal_alignment.py", + "file_type": "code", + "source_file": "tests/unit/constants/test_enum_literal_alignment.py", + "source_location": "L1", + "id": "tests_unit_constants_test_enum_literal_alignment_py", + "community": 329, + "norm_label": "test_enum_literal_alignment.py" + }, + { + "label": "test_enum_values_match_expected_literal_set()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enum_literal_alignment.py", + "source_location": "L67", + "id": "constants_test_enum_literal_alignment_test_enum_values_match_expected_literal_set", + "community": 329, + "norm_label": "test_enum_values_match_expected_literal_set()" + }, + { + "label": "Assert that ``StrEnum`` value sets match their sibling ``Literal`` aliases. Per", + "file_type": "rationale", + "source_file": "tests/unit/constants/test_enum_literal_alignment.py", + "source_location": "L1", + "id": "constants_test_enum_literal_alignment_rationale_1", + "community": 329, + "norm_label": "assert that ``strenum`` value sets match their sibling ``literal`` aliases. per" + }, + { + "label": "test_enums.py", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L1", + "id": "tests_unit_constants_test_enums_py", + "community": 63, + "norm_label": "test_enums.py" + }, + { + "label": "test_run_kind_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L15", + "id": "constants_test_enums_test_run_kind_values", + "community": 63, + "norm_label": "test_run_kind_values()" + }, + { + "label": "test_run_kind_is_str()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L23", + "id": "constants_test_enums_test_run_kind_is_str", + "community": 63, + "norm_label": "test_run_kind_is_str()" + }, + { + "label": "test_sync_status_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L30", + "id": "constants_test_enums_test_sync_status_values", + "community": 63, + "norm_label": "test_sync_status_values()" + }, + { + "label": "test_tier_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L47", + "id": "constants_test_enums_test_tier_values", + "community": 63, + "norm_label": "test_tier_values()" + }, + { + "label": "test_problem_class_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L55", + "id": "constants_test_enums_test_problem_class_values", + "community": 63, + "norm_label": "test_problem_class_values()" + }, + { + "label": "test_finding_kind_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L80", + "id": "constants_test_enums_test_finding_kind_values", + "community": 63, + "norm_label": "test_finding_kind_values()" + }, + { + "label": "test_template_type_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L93", + "id": "constants_test_enums_test_template_type_values", + "community": 63, + "norm_label": "test_template_type_values()" + }, + { + "label": "test_run_scope_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L102", + "id": "constants_test_enums_test_run_scope_values", + "community": 63, + "norm_label": "test_run_scope_values()" + }, + { + "label": "test_lims_project_status_values_pascal_case()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L111", + "id": "constants_test_enums_test_lims_project_status_values_pascal_case", + "community": 63, + "norm_label": "test_lims_project_status_values_pascal_case()" + }, + { + "label": "test_lims_project_source_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L126", + "id": "constants_test_enums_test_lims_project_source_values", + "community": 63, + "norm_label": "test_lims_project_source_values()" + }, + { + "label": "test_ingest_state_enum_is_removed()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L139", + "id": "constants_test_enums_test_ingest_state_enum_is_removed", + "community": 63, + "norm_label": "test_ingest_state_enum_is_removed()" + }, + { + "label": "test_run_sync_state_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L145", + "id": "constants_test_enums_test_run_sync_state_values", + "community": 63, + "norm_label": "test_run_sync_state_values()" + }, + { + "label": "test_setup_state_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L151", + "id": "constants_test_enums_test_setup_state_values", + "community": 63, + "norm_label": "test_setup_state_values()" + }, + { + "label": "test_transport_type_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L173", + "id": "constants_test_enums_test_transport_type_values", + "community": 63, + "norm_label": "test_transport_type_values()" + }, + { + "label": "test_completeness_signal_enum_removed()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L181", + "id": "constants_test_enums_test_completeness_signal_enum_removed", + "community": 63, + "norm_label": "test_completeness_signal_enum_removed()" + }, + { + "label": "test_staging_cleanup_mode_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L186", + "id": "constants_test_enums_test_staging_cleanup_mode_values", + "community": 63, + "norm_label": "test_staging_cleanup_mode_values()" + }, + { + "label": "test_plugin_status_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L194", + "id": "constants_test_enums_test_plugin_status_values", + "community": 63, + "norm_label": "test_plugin_status_values()" + }, + { + "label": "test_creation_level_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L211", + "id": "constants_test_enums_test_creation_level_values", + "community": 63, + "norm_label": "test_creation_level_values()" + }, + { + "label": "test_orchestrator_transport_type_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L219", + "id": "constants_test_enums_test_orchestrator_transport_type_values", + "community": 63, + "norm_label": "test_orchestrator_transport_type_values()" + }, + { + "label": "test_field_type_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L227", + "id": "constants_test_enums_test_field_type_values", + "community": 63, + "norm_label": "test_field_type_values()" + }, + { + "label": "test_bandwidth_day_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L238", + "id": "constants_test_enums_test_bandwidth_day_values", + "community": 63, + "norm_label": "test_bandwidth_day_values()" + }, + { + "label": "test_session_kind_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L246", + "id": "constants_test_enums_test_session_kind_values", + "community": 63, + "norm_label": "test_session_kind_values()" + }, + { + "label": "test_next_action_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L254", + "id": "constants_test_enums_test_next_action_values", + "community": 63, + "norm_label": "test_next_action_values()" + }, + { + "label": "test_audit_scope_kind_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L262", + "id": "constants_test_enums_test_audit_scope_kind_values", + "community": 63, + "norm_label": "test_audit_scope_kind_values()" + }, + { + "label": "test_directory_level_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L271", + "id": "constants_test_enums_test_directory_level_values", + "community": 63, + "norm_label": "test_directory_level_values()" + }, + { + "label": "test_platform_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L279", + "id": "constants_test_enums_test_platform_values", + "community": 63, + "norm_label": "test_platform_values()" + }, + { + "label": "test_setup_next_action_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L287", + "id": "constants_test_enums_test_setup_next_action_values", + "community": 63, + "norm_label": "test_setup_next_action_values()" + }, + { + "label": "test_sync_handle_state_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L295", + "id": "constants_test_enums_test_sync_handle_state_values", + "community": 63, + "norm_label": "test_sync_handle_state_values()" + }, + { + "label": "test_plugin_source_root_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L303", + "id": "constants_test_enums_test_plugin_source_root_values", + "community": 63, + "norm_label": "test_plugin_source_root_values()" + }, + { + "label": "test_tree_project_status_values()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L311", + "id": "constants_test_enums_test_tree_project_status_values", + "community": 63, + "norm_label": "test_tree_project_status_values()" + }, + { + "label": "test_enums_re_exported_from_package()", + "file_type": "code", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L319", + "id": "constants_test_enums_test_enums_re_exported_from_package", + "community": 63, + "norm_label": "test_enums_re_exported_from_package()" + }, + { + "label": "Verify the ``StrEnum`` value strings match the design spec verbatim. These enum", + "file_type": "rationale", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L1", + "id": "constants_test_enums_rationale_1", + "community": 63, + "norm_label": "verify the ``strenum`` value strings match the design spec verbatim. these enum" + }, + { + "label": "test_keyring.py", + "file_type": "code", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L1", + "id": "tests_unit_constants_test_keyring_py", + "community": 242, + "norm_label": "test_keyring.py" + }, + { + "label": "test_keyring_service_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L13", + "id": "constants_test_keyring_test_keyring_service_literal", + "community": 242, + "norm_label": "test_keyring_service_literal()" + }, + { + "label": "test_keyring_username_lims_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L18", + "id": "constants_test_keyring_test_keyring_username_lims_literal", + "community": 242, + "norm_label": "test_keyring_username_lims_literal()" + }, + { + "label": "test_keyring_username_nas_template_literal()", + "file_type": "code", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L23", + "id": "constants_test_keyring_test_keyring_username_nas_template_literal", + "community": 242, + "norm_label": "test_keyring_username_nas_template_literal()" + }, + { + "label": "test_keyring_nas_username_formats_template()", + "file_type": "code", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L28", + "id": "constants_test_keyring_test_keyring_nas_username_formats_template", + "community": 242, + "norm_label": "test_keyring_nas_username_formats_template()" + }, + { + "label": "test_keyring_nas_username_handles_various_ids()", + "file_type": "code", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L33", + "id": "constants_test_keyring_test_keyring_nas_username_handles_various_ids", + "community": 242, + "norm_label": "test_keyring_nas_username_handles_various_ids()" + }, + { + "label": "test_keyring_re_exported_from_package()", + "file_type": "code", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L46", + "id": "constants_test_keyring_test_keyring_re_exported_from_package", + "community": 242, + "norm_label": "test_keyring_re_exported_from_package()" + }, + { + "label": "Verify the keyring service / username conventions. These literals are committed", + "file_type": "rationale", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L1", + "id": "constants_test_keyring_rationale_1", + "community": 242, + "norm_label": "verify the keyring service / username conventions. these literals are committed" + }, + { + "label": "test_limits.py", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L1", + "id": "tests_unit_constants_test_limits_py", + "community": 97, + "norm_label": "test_limits.py" + }, + { + "label": "test_plugin_timeout_max_seconds()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L12", + "id": "constants_test_limits_test_plugin_timeout_max_seconds", + "community": 97, + "norm_label": "test_plugin_timeout_max_seconds()" + }, + { + "label": "test_plugin_memory_max_mb()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L17", + "id": "constants_test_limits_test_plugin_memory_max_mb", + "community": 97, + "norm_label": "test_plugin_memory_max_mb()" + }, + { + "label": "test_plugin_validation_cpu_seconds()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L22", + "id": "constants_test_limits_test_plugin_validation_cpu_seconds", + "community": 97, + "norm_label": "test_plugin_validation_cpu_seconds()" + }, + { + "label": "test_plugin_validation_memory_mb()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L27", + "id": "constants_test_limits_test_plugin_validation_memory_mb", + "community": 97, + "norm_label": "test_plugin_validation_memory_mb()" + }, + { + "label": "test_plugin_validation_wall_seconds()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L32", + "id": "constants_test_limits_test_plugin_validation_wall_seconds", + "community": 97, + "norm_label": "test_plugin_validation_wall_seconds()" + }, + { + "label": "test_plugin_rlimit_nofile()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L37", + "id": "constants_test_limits_test_plugin_rlimit_nofile", + "community": 97, + "norm_label": "test_plugin_rlimit_nofile()" + }, + { + "label": "test_plugin_ipc_frame_cap_bytes_is_one_mib()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L42", + "id": "constants_test_limits_test_plugin_ipc_frame_cap_bytes_is_one_mib", + "community": 97, + "norm_label": "test_plugin_ipc_frame_cap_bytes_is_one_mib()" + }, + { + "label": "test_plugin_api_version()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L48", + "id": "constants_test_limits_test_plugin_api_version", + "community": 97, + "norm_label": "test_plugin_api_version()" + }, + { + "label": "test_plugin_supported_api_versions()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L54", + "id": "constants_test_limits_test_plugin_supported_api_versions", + "community": 97, + "norm_label": "test_plugin_supported_api_versions()" + }, + { + "label": "test_plugin_forbidden_path_prefixes()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L62", + "id": "constants_test_limits_test_plugin_forbidden_path_prefixes", + "community": 97, + "norm_label": "test_plugin_forbidden_path_prefixes()" + }, + { + "label": "test_label_max_length()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L72", + "id": "constants_test_limits_test_label_max_length", + "community": 97, + "norm_label": "test_label_max_length()" + }, + { + "label": "test_objective_max_length()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L77", + "id": "constants_test_limits_test_objective_max_length", + "community": 97, + "norm_label": "test_objective_max_length()" + }, + { + "label": "test_validator_binary_detect_bytes()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L82", + "id": "constants_test_limits_test_validator_binary_detect_bytes", + "community": 97, + "norm_label": "test_validator_binary_detect_bytes()" + }, + { + "label": "test_log_line_max_bytes()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L87", + "id": "constants_test_limits_test_log_line_max_bytes", + "community": 97, + "norm_label": "test_log_line_max_bytes()" + }, + { + "label": "test_session_gc_after_seconds()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L92", + "id": "constants_test_limits_test_session_gc_after_seconds", + "community": 97, + "norm_label": "test_session_gc_after_seconds()" + }, + { + "label": "test_audit_refresh_seconds()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L97", + "id": "constants_test_limits_test_audit_refresh_seconds", + "community": 97, + "norm_label": "test_audit_refresh_seconds()" + }, + { + "label": "test_quit_drain_timeout_seconds()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L102", + "id": "constants_test_limits_test_quit_drain_timeout_seconds", + "community": 97, + "norm_label": "test_quit_drain_timeout_seconds()" + }, + { + "label": "test_sigterm_drain_timeout_seconds()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L107", + "id": "constants_test_limits_test_sigterm_drain_timeout_seconds", + "community": 97, + "norm_label": "test_sigterm_drain_timeout_seconds()" + }, + { + "label": "test_tray_status_refresh_seconds()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L112", + "id": "constants_test_limits_test_tray_status_refresh_seconds", + "community": 97, + "norm_label": "test_tray_status_refresh_seconds()" + }, + { + "label": "test_worker_timeout_grace_seconds()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L117", + "id": "constants_test_limits_test_worker_timeout_grace_seconds", + "community": 97, + "norm_label": "test_worker_timeout_grace_seconds()" + }, + { + "label": "test_window_default_size()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L122", + "id": "constants_test_limits_test_window_default_size", + "community": 97, + "norm_label": "test_window_default_size()" + }, + { + "label": "test_notification_coalesce_seconds()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L128", + "id": "constants_test_limits_test_notification_coalesce_seconds", + "community": 97, + "norm_label": "test_notification_coalesce_seconds()" + }, + { + "label": "test_disk_space_preflight_mib()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L133", + "id": "constants_test_limits_test_disk_space_preflight_mib", + "community": 97, + "norm_label": "test_disk_space_preflight_mib()" + }, + { + "label": "test_limits_re_exported_from_package()", + "file_type": "code", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L138", + "id": "constants_test_limits_test_limits_re_exported_from_package", + "community": 97, + "norm_label": "test_limits_re_exported_from_package()" + }, + { + "label": "Verify the numeric limits and policy ceilings. Each value here is hard-coded pe", + "file_type": "rationale", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L1", + "id": "constants_test_limits_rationale_1", + "community": 97, + "norm_label": "verify the numeric limits and policy ceilings. each value here is hard-coded pe" + }, + { + "label": "test_filenames.py", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L1", + "id": "tests_unit_constants_test_filenames_py", + "community": 137, + "norm_label": "test_filenames.py" + }, + { + "label": "test_cache_dir_name()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L12", + "id": "constants_test_filenames_test_cache_dir_name", + "community": 137, + "norm_label": "test_cache_dir_name()" + }, + { + "label": "test_creation_json_name()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L17", + "id": "constants_test_filenames_test_creation_json_name", + "community": 137, + "norm_label": "test_creation_json_name()" + }, + { + "label": "test_readme_fields_json_name()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L22", + "id": "constants_test_filenames_test_readme_fields_json_name", + "community": 137, + "norm_label": "test_readme_fields_json_name()" + }, + { + "label": "test_equipment_json_name()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L27", + "id": "constants_test_filenames_test_equipment_json_name", + "community": 137, + "norm_label": "test_equipment_json_name()" + }, + { + "label": "test_sync_state_filename()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L32", + "id": "constants_test_filenames_test_sync_state_filename", + "community": 137, + "norm_label": "test_sync_state_filename()" + }, + { + "label": "test_test_runs_json_name()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L37", + "id": "constants_test_filenames_test_test_runs_json_name", + "community": 137, + "norm_label": "test_test_runs_json_name()" + }, + { + "label": "test_answers_file_name()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L42", + "id": "constants_test_filenames_test_answers_file_name", + "community": 137, + "norm_label": "test_answers_file_name()" + }, + { + "label": "test_log_file_template()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L47", + "id": "constants_test_filenames_test_log_file_template", + "community": 137, + "norm_label": "test_log_file_template()" + }, + { + "label": "test_log_file_template_formats()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L52", + "id": "constants_test_filenames_test_log_file_template_formats", + "community": 137, + "norm_label": "test_log_file_template_formats()" + }, + { + "label": "test_readme_file_name()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L58", + "id": "constants_test_filenames_test_readme_file_name", + "community": 137, + "norm_label": "test_readme_file_name()" + }, + { + "label": "test_copier_manifest_name()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L63", + "id": "constants_test_filenames_test_copier_manifest_name", + "community": 137, + "norm_label": "test_copier_manifest_name()" + }, + { + "label": "test_plugin_manifest_name()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L68", + "id": "constants_test_filenames_test_plugin_manifest_name", + "community": 137, + "norm_label": "test_plugin_manifest_name()" + }, + { + "label": "test_server_state_file()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L73", + "id": "constants_test_filenames_test_server_state_file", + "community": 137, + "norm_label": "test_server_state_file()" + }, + { + "label": "test_lims_cache_db_name()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L78", + "id": "constants_test_filenames_test_lims_cache_db_name", + "community": 137, + "norm_label": "test_lims_cache_db_name()" + }, + { + "label": "test_sync_queue_db_name()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L83", + "id": "constants_test_filenames_test_sync_queue_db_name", + "community": 137, + "norm_label": "test_sync_queue_db_name()" + }, + { + "label": "test_central_log_file()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L88", + "id": "constants_test_filenames_test_central_log_file", + "community": 137, + "norm_label": "test_central_log_file()" + }, + { + "label": "test_secrets_file()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L93", + "id": "constants_test_filenames_test_secrets_file", + "community": 137, + "norm_label": "test_secrets_file()" + }, + { + "label": "test_filenames_re_exported_from_package()", + "file_type": "code", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L98", + "id": "constants_test_filenames_test_filenames_re_exported_from_package", + "community": 137, + "norm_label": "test_filenames_re_exported_from_package()" + }, + { + "label": "Verify the canonical filename constants. These literals appear in directory lay", + "file_type": "rationale", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L1", + "id": "constants_test_filenames_rationale_1", + "community": 137, + "norm_label": "verify the canonical filename constants. these literals appear in directory lay" + }, + { + "label": "test_yaml_files.py", + "file_type": "code", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L1", + "id": "tests_unit_io_test_yaml_files_py", + "community": 3, + "norm_label": "test_yaml_files.py" + }, + { + "label": "test_load_yaml_manifest_returns_dict()", + "file_type": "code", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L13", + "id": "io_test_yaml_files_test_load_yaml_manifest_returns_dict", + "community": 3, + "norm_label": "test_load_yaml_manifest_returns_dict()" + }, + { + "label": "test_load_yaml_manifest_empty_file_returns_empty_dict()", + "file_type": "code", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L19", + "id": "io_test_yaml_files_test_load_yaml_manifest_empty_file_returns_empty_dict", + "community": 3, + "norm_label": "test_load_yaml_manifest_empty_file_returns_empty_dict()" + }, + { + "label": "test_load_yaml_manifest_non_dict_returns_empty_dict()", + "file_type": "code", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L25", + "id": "io_test_yaml_files_test_load_yaml_manifest_non_dict_returns_empty_dict", + "community": 3, + "norm_label": "test_load_yaml_manifest_non_dict_returns_empty_dict()" + }, + { + "label": "test_load_yaml_manifest_propagates_yaml_error()", + "file_type": "code", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L32", + "id": "io_test_yaml_files_test_load_yaml_manifest_propagates_yaml_error", + "community": 3, + "norm_label": "test_load_yaml_manifest_propagates_yaml_error()" + }, + { + "label": "test_load_yaml_manifest_missing_file_raises()", + "file_type": "code", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L39", + "id": "io_test_yaml_files_test_load_yaml_manifest_missing_file_raises", + "community": 3, + "norm_label": "test_load_yaml_manifest_missing_file_raises()" + }, + { + "label": "Tests for ``exlab_wizard.io.yaml_files``.", + "file_type": "rationale", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L1", + "id": "io_test_yaml_files_rationale_1", + "community": 3, + "norm_label": "tests for ``exlab_wizard.io.yaml_files``." + }, + { + "label": "A YAML file with a top-level scalar/list is not a manifest.", + "file_type": "rationale", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L26", + "id": "io_test_yaml_files_rationale_26", + "community": 3, + "norm_label": "a yaml file with a top-level scalar/list is not a manifest." + }, + { + "label": "test_atomic_write.py", + "file_type": "code", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L1", + "id": "tests_unit_io_test_atomic_write_py", + "community": 210, + "norm_label": "test_atomic_write.py" + }, + { + "label": "test_atomic_write_creates_file()", + "file_type": "code", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L13", + "id": "io_test_atomic_write_test_atomic_write_creates_file", + "community": 210, + "norm_label": "test_atomic_write_creates_file()" + }, + { + "label": "test_atomic_write_overwrites_existing()", + "file_type": "code", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L19", + "id": "io_test_atomic_write_test_atomic_write_overwrites_existing", + "community": 210, + "norm_label": "test_atomic_write_overwrites_existing()" + }, + { + "label": "test_atomic_write_leaves_no_temp_file_on_success()", + "file_type": "code", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L26", + "id": "io_test_atomic_write_test_atomic_write_leaves_no_temp_file_on_success", + "community": 210, + "norm_label": "test_atomic_write_leaves_no_temp_file_on_success()" + }, + { + "label": "test_atomic_write_cleans_up_temp_on_replace_failure()", + "file_type": "code", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L33", + "id": "io_test_atomic_write_test_atomic_write_cleans_up_temp_on_replace_failure", + "community": 210, + "norm_label": "test_atomic_write_cleans_up_temp_on_replace_failure()" + }, + { + "label": "test_atomic_write_skip_fsync()", + "file_type": "code", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L48", + "id": "io_test_atomic_write_test_atomic_write_skip_fsync", + "community": 210, + "norm_label": "test_atomic_write_skip_fsync()" + }, + { + "label": "test_atomic_write_calls_fsync_by_default()", + "file_type": "code", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L56", + "id": "io_test_atomic_write_test_atomic_write_calls_fsync_by_default", + "community": 210, + "norm_label": "test_atomic_write_calls_fsync_by_default()" + }, + { + "label": "Tests for ``exlab_wizard.io.atomic_write``.", + "file_type": "rationale", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L1", + "id": "io_test_atomic_write_rationale_1", + "community": 210, + "norm_label": "tests for ``exlab_wizard.io.atomic_write``." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/io/__init__.py", + "source_location": "L1", + "id": "tests_unit_io_init_py", + "community": 425, + "norm_label": "__init__.py" + }, + { + "label": "test_json_files.py", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L1", + "id": "tests_unit_io_test_json_files_py", + "community": 92, + "norm_label": "test_json_files.py" + }, + { + "label": "_Dummy", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L18", + "id": "io_test_json_files_dummy", + "community": 92, + "norm_label": "_dummy" + }, + { + "label": "test_require_schema_major_accepts_matching_major()", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L23", + "id": "io_test_json_files_test_require_schema_major_accepts_matching_major", + "community": 92, + "norm_label": "test_require_schema_major_accepts_matching_major()" + }, + { + "label": "test_require_schema_major_rejects_different_major()", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L27", + "id": "io_test_json_files_test_require_schema_major_rejects_different_major", + "community": 92, + "norm_label": "test_require_schema_major_rejects_different_major()" + }, + { + "label": "test_require_schema_major_rejects_empty()", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L34", + "id": "io_test_json_files_test_require_schema_major_rejects_empty", + "community": 92, + "norm_label": "test_require_schema_major_rejects_empty()" + }, + { + "label": "test_require_schema_major_rejects_none()", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L39", + "id": "io_test_json_files_test_require_schema_major_rejects_none", + "community": 92, + "norm_label": "test_require_schema_major_rejects_none()" + }, + { + "label": "test_require_schema_major_rejects_unparseable()", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L44", + "id": "io_test_json_files_test_require_schema_major_rejects_unparseable", + "community": 92, + "norm_label": "test_require_schema_major_rejects_unparseable()" + }, + { + "label": "test_read_msgspec_json_decodes_to_struct()", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L49", + "id": "io_test_json_files_test_read_msgspec_json_decodes_to_struct", + "community": 92, + "norm_label": "test_read_msgspec_json_decodes_to_struct()" + }, + { + "label": "test_read_msgspec_json_with_matching_major()", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L57", + "id": "io_test_json_files_test_read_msgspec_json_with_matching_major", + "community": 92, + "norm_label": "test_read_msgspec_json_with_matching_major()" + }, + { + "label": "test_read_msgspec_json_rejects_wrong_major()", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L64", + "id": "io_test_json_files_test_read_msgspec_json_rejects_wrong_major", + "community": 92, + "norm_label": "test_read_msgspec_json_rejects_wrong_major()" + }, + { + "label": "test_read_msgspec_json_passes_through_malformed()", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L71", + "id": "io_test_json_files_test_read_msgspec_json_passes_through_malformed", + "community": 92, + "norm_label": "test_read_msgspec_json_passes_through_malformed()" + }, + { + "label": "test_read_msgspec_json_raw_returns_dict()", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L79", + "id": "io_test_json_files_test_read_msgspec_json_raw_returns_dict", + "community": 92, + "norm_label": "test_read_msgspec_json_raw_returns_dict()" + }, + { + "label": "test_read_msgspec_json_raw_with_matching_major()", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L86", + "id": "io_test_json_files_test_read_msgspec_json_raw_with_matching_major", + "community": 92, + "norm_label": "test_read_msgspec_json_raw_with_matching_major()" + }, + { + "label": "test_read_msgspec_json_raw_rejects_wrong_major()", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L93", + "id": "io_test_json_files_test_read_msgspec_json_raw_rejects_wrong_major", + "community": 92, + "norm_label": "test_read_msgspec_json_raw_rejects_wrong_major()" + }, + { + "label": "test_read_msgspec_json_raw_skips_check_when_version_missing()", + "file_type": "code", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L100", + "id": "io_test_json_files_test_read_msgspec_json_raw_skips_check_when_version_missing", + "community": 92, + "norm_label": "test_read_msgspec_json_raw_skips_check_when_version_missing()" + }, + { + "label": "Tests for ``exlab_wizard.io.json_files``.", + "file_type": "rationale", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L1", + "id": "io_test_json_files_rationale_1", + "community": 92, + "norm_label": "tests for ``exlab_wizard.io.json_files``." + }, + { + "label": "Malformed JSON should surface from msgspec, not the major-check.", + "file_type": "rationale", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L72", + "id": "io_test_json_files_rationale_72", + "community": 92, + "norm_label": "malformed json should surface from msgspec, not the major-check." + }, + { + "label": "A dict without schema_version must not be rejected (the typed decoder downst", + "file_type": "rationale", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L103", + "id": "io_test_json_files_rationale_103", + "community": 92, + "norm_label": "a dict without schema_version must not be rejected (the typed decoder downst" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/template/__init__.py", + "source_location": "L1", + "id": "tests_unit_template_init_py", + "community": 330, + "norm_label": "__init__.py" + }, + { + "label": "Template (Copier) package. Backend Spec \u00a75.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/template/__init__.py", + "source_location": "L1", + "id": "template_init_rationale_1", + "community": 330, + "norm_label": "template (copier) package. backend spec \u00a75." + }, + { + "label": "test_copier_driver.py", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L1", + "id": "tests_unit_template_test_copier_driver_py", + "community": 38, + "norm_label": "test_copier_driver.py" + }, + { + "label": "test_core_readme_field_ids_pins_the_three_core_fields()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L59", + "id": "template_test_copier_driver_test_core_readme_field_ids_pins_the_three_core_fields", + "community": 38, + "norm_label": "test_core_readme_field_ids_pins_the_three_core_fields()" + }, + { + "label": "test_resolve_project_basic_returns_resolved_template()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L70", + "id": "template_test_copier_driver_test_resolve_project_basic_returns_resolved_template", + "community": 38, + "norm_label": "test_resolve_project_basic_returns_resolved_template()" + }, + { + "label": "test_resolve_run_basic_experimental_sets_run_scope_experimental()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L90", + "id": "template_test_copier_driver_test_resolve_run_basic_experimental_sets_run_scope_experimental", + "community": 38, + "norm_label": "test_resolve_run_basic_experimental_sets_run_scope_experimental()" + }, + { + "label": "test_resolve_run_basic_test_sets_run_scope_test()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L100", + "id": "template_test_copier_driver_test_resolve_run_basic_test_sets_run_scope_test", + "community": 38, + "norm_label": "test_resolve_run_basic_test_sets_run_scope_test()" + }, + { + "label": "test_resolve_run_basic_both_sets_run_scope_both()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L108", + "id": "template_test_copier_driver_test_resolve_run_basic_both_sets_run_scope_both", + "community": 38, + "norm_label": "test_resolve_run_basic_both_sets_run_scope_both()" + }, + { + "label": "test_resolve_missing_version_raises_template_load_error_mentioning_field()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L121", + "id": "template_test_copier_driver_test_resolve_missing_version_raises_template_load_error_mentioning_field", + "community": 38, + "norm_label": "test_resolve_missing_version_raises_template_load_error_mentioning_field()" + }, + { + "label": "test_resolve_redeclares_core_raises_core_field_redeclared_naming_offender()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L130", + "id": "template_test_copier_driver_test_resolve_redeclares_core_raises_core_field_redeclared_naming_offender", + "community": 38, + "norm_label": "test_resolve_redeclares_core_raises_core_field_redeclared_naming_offender()" + }, + { + "label": "test_resolve_redeclares_core_is_also_caught_as_template_load_error()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L138", + "id": "template_test_copier_driver_test_resolve_redeclares_core_is_also_caught_as_template_load_error", + "community": 38, + "norm_label": "test_resolve_redeclares_core_is_also_caught_as_template_load_error()" + }, + { + "label": "test_resolve_missing_copier_yml_raises_template_load_error()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L146", + "id": "template_test_copier_driver_test_resolve_missing_copier_yml_raises_template_load_error", + "community": 38, + "norm_label": "test_resolve_missing_copier_yml_raises_template_load_error()" + }, + { + "label": "test_resolve_scope_mismatch_raises_template_load_error()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L156", + "id": "template_test_copier_driver_test_resolve_scope_mismatch_raises_template_load_error", + "community": 38, + "norm_label": "test_resolve_scope_mismatch_raises_template_load_error()" + }, + { + "label": "test_resolve_run_template_missing_run_scope_raises()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L165", + "id": "template_test_copier_driver_test_resolve_run_template_missing_run_scope_raises", + "community": 38, + "norm_label": "test_resolve_run_template_missing_run_scope_raises()" + }, + { + "label": "test_resolve_run_template_invalid_run_scope_raises()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L179", + "id": "template_test_copier_driver_test_resolve_run_template_invalid_run_scope_raises", + "community": 38, + "norm_label": "test_resolve_run_template_invalid_run_scope_raises()" + }, + { + "label": "test_resolve_with_tasks_does_not_raise()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L198", + "id": "template_test_copier_driver_test_resolve_with_tasks_does_not_raise", + "community": 38, + "norm_label": "test_resolve_with_tasks_does_not_raise()" + }, + { + "label": "test_resolve_with_tasks_emits_warning_log()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L208", + "id": "template_test_copier_driver_test_resolve_with_tasks_emits_warning_log", + "community": 38, + "norm_label": "test_resolve_with_tasks_emits_warning_log()" + }, + { + "label": "test_render_project_basic_writes_readme()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L227", + "id": "template_test_copier_driver_test_render_project_basic_writes_readme", + "community": 38, + "norm_label": "test_render_project_basic_writes_readme()" + }, + { + "label": "test_render_project_basic_files_written_lists_the_readme()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L245", + "id": "template_test_copier_driver_test_render_project_basic_files_written_lists_the_readme", + "community": 38, + "norm_label": "test_render_project_basic_files_written_lists_the_readme()" + }, + { + "label": "test_render_with_tasks_silently_ignores_tasks_and_writes_file()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L263", + "id": "template_test_copier_driver_test_render_with_tasks_silently_ignores_tasks_and_writes_file", + "community": 38, + "norm_label": "test_render_with_tasks_silently_ignores_tasks_and_writes_file()" + }, + { + "label": "test_render_into_dst_with_conflicting_files_raises()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L288", + "id": "template_test_copier_driver_test_render_into_dst_with_conflicting_files_raises", + "community": 38, + "norm_label": "test_render_into_dst_with_conflicting_files_raises()" + }, + { + "label": "test_render_calls_copier_run_copy_with_spec_kwargs()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L322", + "id": "template_test_copier_driver_test_render_calls_copier_run_copy_with_spec_kwargs", + "community": 38, + "norm_label": "test_render_calls_copier_run_copy_with_spec_kwargs()" + }, + { + "label": "test_resolve_unreadable_copier_yml_raises_template_load_error()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L350", + "id": "template_test_copier_driver_test_resolve_unreadable_copier_yml_raises_template_load_error", + "community": 38, + "norm_label": "test_resolve_unreadable_copier_yml_raises_template_load_error()" + }, + { + "label": "test_resolve_malformed_yaml_raises_template_load_error()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L371", + "id": "template_test_copier_driver_test_resolve_malformed_yaml_raises_template_load_error", + "community": 38, + "norm_label": "test_resolve_malformed_yaml_raises_template_load_error()" + }, + { + "label": "test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L387", + "id": "template_test_copier_driver_test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type", + "community": 38, + "norm_label": "test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type()" + }, + { + "label": "test_resolve_non_mapping_yaml_raises_template_load_error()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L403", + "id": "template_test_copier_driver_test_resolve_non_mapping_yaml_raises_template_load_error", + "community": 38, + "norm_label": "test_resolve_non_mapping_yaml_raises_template_load_error()" + }, + { + "label": "test_resolve_missing_exlab_type_raises_template_load_error()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L421", + "id": "template_test_copier_driver_test_resolve_missing_exlab_type_raises_template_load_error", + "community": 38, + "norm_label": "test_resolve_missing_exlab_type_raises_template_load_error()" + }, + { + "label": "test_resolve_invalid_exlab_type_value_raises_template_load_error()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L436", + "id": "template_test_copier_driver_test_resolve_invalid_exlab_type_value_raises_template_load_error", + "community": 38, + "norm_label": "test_resolve_invalid_exlab_type_value_raises_template_load_error()" + }, + { + "label": "test_resolve_readme_fields_with_non_core_entries_passes_through()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L461", + "id": "template_test_copier_driver_test_resolve_readme_fields_with_non_core_entries_passes_through", + "community": 38, + "norm_label": "test_resolve_readme_fields_with_non_core_entries_passes_through()" + }, + { + "label": "test_resolve_readme_block_not_a_mapping_yields_empty_extra_fields()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L488", + "id": "template_test_copier_driver_test_resolve_readme_block_not_a_mapping_yields_empty_extra_fields", + "community": 38, + "norm_label": "test_resolve_readme_block_not_a_mapping_yields_empty_extra_fields()" + }, + { + "label": "test_resolve_readme_fields_not_a_list_yields_empty_extra_fields()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L505", + "id": "template_test_copier_driver_test_resolve_readme_fields_not_a_list_yields_empty_extra_fields", + "community": 38, + "norm_label": "test_resolve_readme_fields_not_a_list_yields_empty_extra_fields()" + }, + { + "label": "test_resolve_non_string_description_falls_back_to_empty()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L532", + "id": "template_test_copier_driver_test_resolve_non_string_description_falls_back_to_empty", + "community": 38, + "norm_label": "test_resolve_non_string_description_falls_back_to_empty()" + }, + { + "label": "test_resolve_plugin_order_preserved()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L548", + "id": "template_test_copier_driver_test_resolve_plugin_order_preserved", + "community": 38, + "norm_label": "test_resolve_plugin_order_preserved()" + }, + { + "label": "test_resolve_non_list_plugin_order_falls_back_to_empty()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L567", + "id": "template_test_copier_driver_test_resolve_non_list_plugin_order_falls_back_to_empty", + "community": 38, + "norm_label": "test_resolve_non_list_plugin_order_falls_back_to_empty()" + }, + { + "label": "test_render_snapshots_existing_regular_file_at_dst()", + "file_type": "code", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L587", + "id": "template_test_copier_driver_test_render_snapshots_existing_regular_file_at_dst", + "community": 38, + "norm_label": "test_render_snapshots_existing_regular_file_at_dst()" + }, + { + "label": "Unit tests for ``exlab_wizard.template.copier_driver``. These tests pin the \u00a74.", + "file_type": "rationale", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L1", + "id": "template_test_copier_driver_rationale_1", + "community": 38, + "norm_label": "unit tests for ``exlab_wizard.template.copier_driver``. these tests pin the \u00a74." + }, + { + "label": "test_time.py", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L1", + "id": "tests_unit_utils_test_time_py", + "community": 90, + "norm_label": "test_time.py" + }, + { + "label": "test_utc_now_iso_format()", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L20", + "id": "utils_test_time_test_utc_now_iso_format", + "community": 90, + "norm_label": "test_utc_now_iso_format()" + }, + { + "label": "test_dt_to_iso_naive_assumed_utc()", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L25", + "id": "utils_test_time_test_dt_to_iso_naive_assumed_utc", + "community": 90, + "norm_label": "test_dt_to_iso_naive_assumed_utc()" + }, + { + "label": "test_dt_to_iso_utc_aware()", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L30", + "id": "utils_test_time_test_dt_to_iso_utc_aware", + "community": 90, + "norm_label": "test_dt_to_iso_utc_aware()" + }, + { + "label": "test_dt_to_iso_non_utc_zone_converts()", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L35", + "id": "utils_test_time_test_dt_to_iso_non_utc_zone_converts", + "community": 90, + "norm_label": "test_dt_to_iso_non_utc_zone_converts()" + }, + { + "label": "test_parse_utc_iso_z_form()", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L42", + "id": "utils_test_time_test_parse_utc_iso_z_form", + "community": 90, + "norm_label": "test_parse_utc_iso_z_form()" + }, + { + "label": "test_parse_utc_iso_offset_form()", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L47", + "id": "utils_test_time_test_parse_utc_iso_offset_form", + "community": 90, + "norm_label": "test_parse_utc_iso_offset_form()" + }, + { + "label": "test_parse_utc_iso_naive_input_tagged_utc()", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L52", + "id": "utils_test_time_test_parse_utc_iso_naive_input_tagged_utc", + "community": 90, + "norm_label": "test_parse_utc_iso_naive_input_tagged_utc()" + }, + { + "label": "test_parse_utc_iso_round_trip_with_now()", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L57", + "id": "utils_test_time_test_parse_utc_iso_round_trip_with_now", + "community": 90, + "norm_label": "test_parse_utc_iso_round_trip_with_now()" + }, + { + "label": "test_parse_utc_iso_raises_on_garbage()", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L63", + "id": "utils_test_time_test_parse_utc_iso_raises_on_garbage", + "community": 90, + "norm_label": "test_parse_utc_iso_raises_on_garbage()" + }, + { + "label": "test_parse_utc_iso_or_none_handles_none()", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L68", + "id": "utils_test_time_test_parse_utc_iso_or_none_handles_none", + "community": 90, + "norm_label": "test_parse_utc_iso_or_none_handles_none()" + }, + { + "label": "test_parse_utc_iso_or_none_handles_empty()", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L72", + "id": "utils_test_time_test_parse_utc_iso_or_none_handles_empty", + "community": 90, + "norm_label": "test_parse_utc_iso_or_none_handles_empty()" + }, + { + "label": "test_parse_utc_iso_or_none_handles_malformed()", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L76", + "id": "utils_test_time_test_parse_utc_iso_or_none_handles_malformed", + "community": 90, + "norm_label": "test_parse_utc_iso_or_none_handles_malformed()" + }, + { + "label": "test_parse_utc_iso_or_none_returns_datetime_for_valid()", + "file_type": "code", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L80", + "id": "utils_test_time_test_parse_utc_iso_or_none_returns_datetime_for_valid", + "community": 90, + "norm_label": "test_parse_utc_iso_or_none_returns_datetime_for_valid()" + }, + { + "label": "Tests for ``exlab_wizard.utils.time``.", + "file_type": "rationale", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L1", + "id": "utils_test_time_rationale_1", + "community": 90, + "norm_label": "tests for ``exlab_wizard.utils.time``." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/utils/__init__.py", + "source_location": "L1", + "id": "tests_unit_utils_init_py", + "community": 426, + "norm_label": "__init__.py" + }, + { + "label": "test_state.py", + "file_type": "code", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L1", + "id": "tests_unit_utils_test_state_py", + "community": 16, + "norm_label": "test_state.py" + }, + { + "label": "_State", + "file_type": "code", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L12", + "id": "utils_test_state_state", + "community": 16, + "norm_label": "_state" + }, + { + "label": "StrEnum", + "file_type": "code", + "source_file": "", + "source_location": "", + "id": "strenum", + "community": 29, + "norm_label": "strenum" + }, + { + "label": "test_allowed_transition_returns_none()", + "file_type": "code", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L25", + "id": "utils_test_state_test_allowed_transition_returns_none", + "community": 16, + "norm_label": "test_allowed_transition_returns_none()" + }, + { + "label": "test_disallowed_transition_raises()", + "file_type": "code", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L29", + "id": "utils_test_state_test_disallowed_transition_raises", + "community": 16, + "norm_label": "test_disallowed_transition_raises()" + }, + { + "label": "test_terminal_transition_raises()", + "file_type": "code", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L34", + "id": "utils_test_state_test_terminal_transition_raises", + "community": 16, + "norm_label": "test_terminal_transition_raises()" + }, + { + "label": "test_unknown_source_raises()", + "file_type": "code", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L39", + "id": "utils_test_state_test_unknown_source_raises", + "community": 16, + "norm_label": "test_unknown_source_raises()" + }, + { + "label": "Tests for ``exlab_wizard.utils.state``.", + "file_type": "rationale", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L1", + "id": "utils_test_state_rationale_1", + "community": 16, + "norm_label": "tests for ``exlab_wizard.utils.state``." + }, + { + "label": "test_storage_secret.py", + "file_type": "code", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L1", + "id": "tests_unit_tray_test_storage_secret_py", + "community": 199, + "norm_label": "test_storage_secret.py" + }, + { + "label": "test_generates_secret_on_first_call()", + "file_type": "code", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L23", + "id": "tray_test_storage_secret_test_generates_secret_on_first_call", + "community": 199, + "norm_label": "test_generates_secret_on_first_call()" + }, + { + "label": "test_idempotent_across_calls()", + "file_type": "code", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L31", + "id": "tray_test_storage_secret_test_idempotent_across_calls", + "community": 199, + "norm_label": "test_idempotent_across_calls()" + }, + { + "label": "test_secret_file_mode_is_0600()", + "file_type": "code", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L38", + "id": "tray_test_storage_secret_test_secret_file_mode_is_0600", + "community": 199, + "norm_label": "test_secret_file_mode_is_0600()" + }, + { + "label": "test_regenerates_on_empty_file()", + "file_type": "code", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L45", + "id": "tray_test_storage_secret_test_regenerates_on_empty_file", + "community": 199, + "norm_label": "test_regenerates_on_empty_file()" + }, + { + "label": "test_regenerates_on_whitespace_only_file()", + "file_type": "code", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L53", + "id": "tray_test_storage_secret_test_regenerates_on_whitespace_only_file", + "community": 199, + "norm_label": "test_regenerates_on_whitespace_only_file()" + }, + { + "label": "test_creates_state_dir_if_missing()", + "file_type": "code", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L61", + "id": "tray_test_storage_secret_test_creates_state_dir_if_missing", + "community": 199, + "norm_label": "test_creates_state_dir_if_missing()" + }, + { + "label": "Tests for ``exlab_wizard.tray.storage_secret``. The secret backs NiceGUI's Star", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L1", + "id": "tray_test_storage_secret_rationale_1", + "community": 199, + "norm_label": "tests for ``exlab_wizard.tray.storage_secret``. the secret backs nicegui's star" + }, + { + "label": "test_dependencies.py", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L1", + "id": "tests_unit_tray_test_dependencies_py", + "community": 74, + "norm_label": "test_dependencies.py" + }, + { + "label": "_InMemoryKeyring", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L44", + "id": "tray_test_dependencies_inmemorykeyring", + "community": 74, + "norm_label": "_inmemorykeyring" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L49", + "id": "tray_test_dependencies_inmemorykeyring_init", + "community": 74, + "norm_label": ".__init__()" + }, + { + "label": ".get_password()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L52", + "id": "tray_test_dependencies_inmemorykeyring_get_password", + "community": 74, + "norm_label": ".get_password()" + }, + { + "label": ".set_password()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L55", + "id": "tray_test_dependencies_inmemorykeyring_set_password", + "community": 74, + "norm_label": ".set_password()" + }, + { + "label": ".delete_password()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L58", + "id": "tray_test_dependencies_inmemorykeyring_delete_password", + "community": 74, + "norm_label": ".delete_password()" + }, + { + "label": "_swap_keyring()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L63", + "id": "tray_test_dependencies_swap_keyring", + "community": 74, + "norm_label": "_swap_keyring()" + }, + { + "label": "test_build_production_dependencies_exposes_keyring_store()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L72", + "id": "tray_test_dependencies_test_build_production_dependencies_exposes_keyring_store", + "community": 74, + "norm_label": "test_build_production_dependencies_exposes_keyring_store()" + }, + { + "label": "test_build_production_dependencies_nas_sync_is_a_client()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L80", + "id": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", + "community": 7, + "norm_label": "test_build_production_dependencies_nas_sync_is_a_client()" + }, + { + "label": "test_check_keyring_present_true_when_lims_password_stored()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L120", + "id": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", + "community": 74, + "norm_label": "test_check_keyring_present_true_when_lims_password_stored()" + }, + { + "label": "test_lims_client_password_provider_reads_keyring_under_lims_username()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L137", + "id": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", + "community": 74, + "norm_label": "test_lims_client_password_provider_reads_keyring_under_lims_username()" + }, + { + "label": "_nas_config_with_two_equipment()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L159", + "id": "tray_test_dependencies_nas_config_with_two_equipment", + "community": 74, + "norm_label": "_nas_config_with_two_equipment()" + }, + { + "label": "test_check_nas_passwords_present_returns_only_populated_ids()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L194", + "id": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", + "community": 74, + "norm_label": "test_check_nas_passwords_present_returns_only_populated_ids()" + }, + { + "label": "test_check_nas_passwords_present_handles_none_store_and_config()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L208", + "id": "tray_test_dependencies_test_check_nas_passwords_present_handles_none_store_and_config", + "community": 74, + "norm_label": "test_check_nas_passwords_present_handles_none_store_and_config()" + }, + { + "label": "test_make_equipment_probe_short_circuits_when_password_missing()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L214", + "id": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", + "community": 74, + "norm_label": "test_make_equipment_probe_short_circuits_when_password_missing()" + }, + { + "label": "test_make_equipment_probe_targets_remote_root_with_colon()", + "file_type": "code", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L237", + "id": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", + "community": 74, + "norm_label": "test_make_equipment_probe_targets_remote_root_with_colon()" + }, + { + "label": "Tests for the production dependency factory's keyring wiring. ``build_productio", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L1", + "id": "tray_test_dependencies_rationale_1", + "community": 74, + "norm_label": "tests for the production dependency factory's keyring wiring. ``build_productio" + }, + { + "label": "Trivial in-memory keyring backend, mirroring the keyring-store tests.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L45", + "id": "tray_test_dependencies_rationale_45", + "community": 74, + "norm_label": "trivial in-memory keyring backend, mirroring the keyring-store tests." + }, + { + "label": "The settings GUI persists the LIMS password through deps.keyring_store.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L73", + "id": "tray_test_dependencies_rationale_73", + "community": 74, + "norm_label": "the settings gui persists the lims password through deps.keyring_store." + }, + { + "label": "``deps.nas_sync`` must be a :class:`NASSyncClient`, not a bare queue. Regre", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L83", + "id": "tray_test_dependencies_rationale_83", + "community": 7, + "norm_label": "``deps.nas_sync`` must be a :class:`nassyncclient`, not a bare queue. regre" + }, + { + "label": "The probe must look up the password under KEYRING_USERNAME_LIMS. Regression", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L121", + "id": "tray_test_dependencies_rationale_121", + "community": 74, + "norm_label": "the probe must look up the password under keyring_username_lims. regression" + }, + { + "label": "The LIMS client's keyring provider resolves the stored password.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L140", + "id": "tray_test_dependencies_rationale_140", + "community": 74, + "norm_label": "the lims client's keyring provider resolves the stored password." + }, + { + "label": "Build a two-equipment nas-mode config for the NAS-presence tests.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L160", + "id": "tray_test_dependencies_rationale_160", + "community": 74, + "norm_label": "build a two-equipment nas-mode config for the nas-presence tests." + }, + { + "label": "Missing keyring entry must not spawn rclone.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L217", + "id": "tray_test_dependencies_rationale_217", + "community": 74, + "norm_label": "missing keyring entry must not spawn rclone." + }, + { + "label": "The probe must call ``rclone about :`` (spec, not bare name). Regre", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L240", + "id": "tray_test_dependencies_rationale_240", + "community": 74, + "norm_label": "the probe must call ``rclone about :`` (spec, not bare name). regre" + }, + { + "label": "test_icon.py", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L1", + "id": "tests_unit_tray_test_icon_py", + "community": 81, + "norm_label": "test_icon.py" + }, + { + "label": "_FakeMenu", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L18", + "id": "tray_test_icon_fakemenu", + "community": 81, + "norm_label": "_fakemenu" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L21", + "id": "tray_test_icon_fakemenu_init", + "community": 81, + "norm_label": ".__init__()" + }, + { + "label": "_FakeMenuItem", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L25", + "id": "tray_test_icon_fakemenuitem", + "community": 81, + "norm_label": "_fakemenuitem" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L26", + "id": "tray_test_icon_fakemenuitem_init", + "community": 81, + "norm_label": ".__init__()" + }, + { + "label": "_FakeIcon", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L40", + "id": "tray_test_icon_fakeicon", + "community": 81, + "norm_label": "_fakeicon" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L41", + "id": "tray_test_icon_fakeicon_init", + "community": 81, + "norm_label": ".__init__()" + }, + { + "label": "_FakePystray", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L48", + "id": "tray_test_icon_fakepystray", + "community": 81, + "norm_label": "_fakepystray" + }, + { + "label": "test_build_icon_returns_icon_object()", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L54", + "id": "tray_test_icon_test_build_icon_returns_icon_object", + "community": 81, + "norm_label": "test_build_icon_returns_icon_object()" + }, + { + "label": "test_open_menu_item_invokes_callback()", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L71", + "id": "tray_test_icon_test_open_menu_item_invokes_callback", + "community": 81, + "norm_label": "test_open_menu_item_invokes_callback()" + }, + { + "label": "test_quit_menu_item_invokes_callback()", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L85", + "id": "tray_test_icon_test_quit_menu_item_invokes_callback", + "community": 81, + "norm_label": "test_quit_menu_item_invokes_callback()" + }, + { + "label": "test_status_label_callable()", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L99", + "id": "tray_test_icon_test_status_label_callable", + "community": 81, + "norm_label": "test_status_label_callable()" + }, + { + "label": "test_callback_exception_is_swallowed()", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L112", + "id": "tray_test_icon_test_callback_exception_is_swallowed", + "community": 81, + "norm_label": "test_callback_exception_is_swallowed()" + }, + { + "label": "test_default_icon_image_returns_pillow_image()", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L127", + "id": "tray_test_icon_test_default_icon_image_returns_pillow_image", + "community": 81, + "norm_label": "test_default_icon_image_returns_pillow_image()" + }, + { + "label": "test_lazy_pystray_import()", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L133", + "id": "tray_test_icon_test_lazy_pystray_import", + "community": 81, + "norm_label": "test_lazy_pystray_import()" + }, + { + "label": "test_separator_present()", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L148", + "id": "tray_test_icon_test_separator_present", + "community": 81, + "norm_label": "test_separator_present()" + }, + { + "label": "test_import_pystray_returns_module()", + "file_type": "code", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L158", + "id": "tray_test_icon_test_import_pystray_returns_module", + "community": 81, + "norm_label": "test_import_pystray_returns_module()" + }, + { + "label": "Tests for :mod:`exlab_wizard.tray.icon`. Backend Spec \u00a74.3.2.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L1", + "id": "tray_test_icon_rationale_1", + "community": 81, + "norm_label": "tests for :mod:`exlab_wizard.tray.icon`. backend spec \u00a74.3.2." + }, + { + "label": "When ``pystray_module`` is omitted the lazy import path is taken.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L134", + "id": "tray_test_icon_rationale_134", + "community": 81, + "norm_label": "when ``pystray_module`` is omitted the lazy import path is taken." + }, + { + "label": "The lazy-import helper imports pystray when called.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L159", + "id": "tray_test_icon_rationale_159", + "community": 81, + "norm_label": "the lazy-import helper imports pystray when called." + }, + { + "label": "test_live_reload.py", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L1", + "id": "tests_unit_tray_test_live_reload_py", + "community": 106, + "norm_label": "test_live_reload.py" + }, + { + "label": "_stub_configure_logging()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L40", + "id": "tray_test_live_reload_stub_configure_logging", + "community": 106, + "norm_label": "_stub_configure_logging()" + }, + { + "label": "_equipment()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L54", + "id": "tray_test_live_reload_equipment", + "community": 106, + "norm_label": "_equipment()" + }, + { + "label": "_config()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L70", + "id": "tray_test_live_reload_config", + "community": 106, + "norm_label": "_config()" + }, + { + "label": "_RecordingComponent", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L86", + "id": "tray_test_live_reload_recordingcomponent", + "community": 7, + "norm_label": "_recordingcomponent" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L89", + "id": "tray_test_live_reload_recordingcomponent_init", + "community": 7, + "norm_label": ".__init__()" + }, + { + "label": ".apply_config()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L93", + "id": "tray_test_live_reload_recordingcomponent_apply_config", + "community": 7, + "norm_label": ".apply_config()" + }, + { + "label": "_RecordingValidator", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L98", + "id": "tray_test_live_reload_recordingvalidator", + "community": 7, + "norm_label": "_recordingvalidator" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L99", + "id": "tray_test_live_reload_recordingvalidator_init", + "community": 7, + "norm_label": ".__init__()" + }, + { + "label": ".reconfigure()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L102", + "id": "tray_test_live_reload_recordingvalidator_reconfigure", + "community": 7, + "norm_label": ".reconfigure()" + }, + { + "label": "_AsyncStub", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L106", + "id": "tray_test_live_reload_asyncstub", + "community": 7, + "norm_label": "_asyncstub" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L109", + "id": "tray_test_live_reload_asyncstub_init", + "community": 7, + "norm_label": ".__init__()" + }, + { + "label": ".start()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L116", + "id": "tray_test_live_reload_asyncstub_start", + "community": 7, + "norm_label": ".start()" + }, + { + "label": "_running_deps()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L120", + "id": "tray_test_live_reload_running_deps", + "community": 106, + "norm_label": "_running_deps()" + }, + { + "label": "test_reconfigures_existing_components_in_place()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L136", + "id": "tray_test_live_reload_test_reconfigures_existing_components_in_place", + "community": 106, + "norm_label": "test_reconfigures_existing_components_in_place()" + }, + { + "label": "test_skips_logging_reconfigure_when_unchanged()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L150", + "id": "tray_test_live_reload_test_skips_logging_reconfigure_when_unchanged", + "community": 106, + "norm_label": "test_skips_logging_reconfigure_when_unchanged()" + }, + { + "label": "test_component_failure_is_isolated()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L156", + "id": "tray_test_live_reload_test_component_failure_is_isolated", + "community": 106, + "norm_label": "test_component_failure_is_isolated()" + }, + { + "label": "test_rebuilds_lims_only_on_endpoint_change()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L182", + "id": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", + "community": 106, + "norm_label": "test_rebuilds_lims_only_on_endpoint_change()" + }, + { + "label": "test_rebuilds_plugin_host_only_on_dir_change()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L201", + "id": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", + "community": 106, + "norm_label": "test_rebuilds_plugin_host_only_on_dir_change()" + }, + { + "label": "test_builds_and_starts_components_on_fresh_install()", + "file_type": "code", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L226", + "id": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", + "community": 106, + "norm_label": "test_builds_and_starts_components_on_fresh_install()" + }, + { + "label": "Tests for the live config-reload coordinator (no tray relaunch). ``exlab_wizard", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L1", + "id": "tray_test_live_reload_rationale_1", + "community": 106, + "norm_label": "tests for the live config-reload coordinator (no tray relaunch). ``exlab_wizard" + }, + { + "label": "Stub the real logging reconfigure so tests don't churn global handlers. Ret", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L41", + "id": "tray_test_live_reload_rationale_41", + "community": 106, + "norm_label": "stub the real logging reconfigure so tests don't churn global handlers. ret" + }, + { + "label": "Stub controller / nas_sync / poller recording ``apply_config`` calls.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L87", + "id": "tray_test_live_reload_rationale_87", + "community": 7, + "norm_label": "stub controller / nas_sync / poller recording ``apply_config`` calls." + }, + { + "label": "Fresh-built nas_sync / poller stub with async init / start.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L107", + "id": "tray_test_live_reload_rationale_107", + "community": 7, + "norm_label": "fresh-built nas_sync / poller stub with async init / start." + }, + { + "label": "Build a deps bundle whose config-dependent components already exist.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L121", + "id": "tray_test_live_reload_rationale_121", + "community": 106, + "norm_label": "build a deps bundle whose config-dependent components already exist." + }, + { + "label": "One component raising must not abort the rest, and config still lands.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L157", + "id": "tray_test_live_reload_rationale_157", + "community": 106, + "norm_label": "one component raising must not abort the rest, and config still lands." + }, + { + "label": "On a first save the absent components are built and their async bring-up is", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L229", + "id": "tray_test_live_reload_rationale_229", + "community": 106, + "norm_label": "on a first save the absent components are built and their async bring-up is" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/tray/__init__.py", + "source_location": "L1", + "id": "tests_unit_tray_init_py", + "community": 331, + "norm_label": "__init__.py" + }, + { + "label": "Tray application package. Backend Spec \u00a74.3.2. Public API: * :class:`Autostart", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/__init__.py", + "source_location": "L1", + "id": "tray_init_rationale_1", + "community": 331, + "norm_label": "tray application package. backend spec \u00a74.3.2. public api: * :class:`autostart" + }, + { + "label": "test_status.py", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L1", + "id": "tests_unit_tray_test_status_py", + "community": 36, + "norm_label": "test_status.py" + }, + { + "label": "_StubStore", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L17", + "id": "tray_test_status_stubstore", + "community": 36, + "norm_label": "_stubstore" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L18", + "id": "tray_test_status_stubstore_init", + "community": 36, + "norm_label": ".__init__()" + }, + { + "label": "_StubSync", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L23", + "id": "tray_test_status_stubsync", + "community": 36, + "norm_label": "_stubsync" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L24", + "id": "tray_test_status_stubsync_init", + "community": 36, + "norm_label": ".__init__()" + }, + { + "label": "test_format_status_idle()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L28", + "id": "tray_test_status_test_format_status_idle", + "community": 36, + "norm_label": "test_format_status_idle()" + }, + { + "label": "test_format_status_sync_jobs()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L33", + "id": "tray_test_status_test_format_status_sync_jobs", + "community": 36, + "norm_label": "test_format_status_sync_jobs()" + }, + { + "label": "test_format_status_single_job_uses_singular()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L38", + "id": "tray_test_status_test_format_status_single_job_uses_singular", + "community": 36, + "norm_label": "test_format_status_single_job_uses_singular()" + }, + { + "label": "test_format_status_input_required_singular()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L43", + "id": "tray_test_status_test_format_status_input_required_singular", + "community": 36, + "norm_label": "test_format_status_input_required_singular()" + }, + { + "label": "test_format_status_input_required_plural()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L48", + "id": "tray_test_status_test_format_status_input_required_plural", + "community": 36, + "norm_label": "test_format_status_input_required_plural()" + }, + { + "label": "test_format_status_combines_sync_and_input_required()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L53", + "id": "tray_test_status_test_format_status_combines_sync_and_input_required", + "community": 36, + "norm_label": "test_format_status_combines_sync_and_input_required()" + }, + { + "label": "test_snapshot_status_with_none_components()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L58", + "id": "tray_test_status_test_snapshot_status_with_none_components", + "community": 36, + "norm_label": "test_snapshot_status_with_none_components()" + }, + { + "label": "test_snapshot_status_reads_components()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L65", + "id": "tray_test_status_test_snapshot_status_reads_components", + "community": 36, + "norm_label": "test_snapshot_status_reads_components()" + }, + { + "label": "test_snapshot_status_callable_attributes()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L75", + "id": "tray_test_status_test_snapshot_status_callable_attributes", + "community": 36, + "norm_label": "test_snapshot_status_callable_attributes()" + }, + { + "label": "test_ticker_invokes_callback_on_first_tick()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L84", + "id": "tray_test_status_test_ticker_invokes_callback_on_first_tick", + "community": 36, + "norm_label": "test_ticker_invokes_callback_on_first_tick()" + }, + { + "label": "test_ticker_does_not_invoke_callback_when_label_unchanged()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L97", + "id": "tray_test_status_test_ticker_does_not_invoke_callback_when_label_unchanged", + "community": 36, + "norm_label": "test_ticker_does_not_invoke_callback_when_label_unchanged()" + }, + { + "label": "test_ticker_start_and_stop_idempotent()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L109", + "id": "tray_test_status_test_ticker_start_and_stop_idempotent", + "community": 36, + "norm_label": "test_ticker_start_and_stop_idempotent()" + }, + { + "label": "test_ticker_callback_exception_is_swallowed()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L117", + "id": "tray_test_status_test_ticker_callback_exception_is_swallowed", + "community": 36, + "norm_label": "test_ticker_callback_exception_is_swallowed()" + }, + { + "label": "test_ticker_thread_runs()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L127", + "id": "tray_test_status_test_ticker_thread_runs", + "community": 36, + "norm_label": "test_ticker_thread_runs()" + }, + { + "label": "test_default_refresh_matches_spec()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L149", + "id": "tray_test_status_test_default_refresh_matches_spec", + "community": 36, + "norm_label": "test_default_refresh_matches_spec()" + }, + { + "label": "test_safe_int_handles_callable_that_raises()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L154", + "id": "tray_test_status_test_safe_int_handles_callable_that_raises", + "community": 36, + "norm_label": "test_safe_int_handles_callable_that_raises()" + }, + { + "label": "test_safe_int_handles_non_numeric()", + "file_type": "code", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L164", + "id": "tray_test_status_test_safe_int_handles_non_numeric", + "community": 36, + "norm_label": "test_safe_int_handles_non_numeric()" + }, + { + "label": "Tests for :mod:`exlab_wizard.tray.status`. Backend Spec \u00a74.3.2.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L1", + "id": "tray_test_status_rationale_1", + "community": 36, + "norm_label": "tests for :mod:`exlab_wizard.tray.status`. backend spec \u00a74.3.2." + }, + { + "label": "Drive the ticker thread for a short window and confirm callback fires.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L128", + "id": "tray_test_status_rationale_128", + "community": 36, + "norm_label": "drive the ticker thread for a short window and confirm callback fires." + }, + { + "label": "test_server_runner.py", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L1", + "id": "tests_unit_tray_test_server_runner_py", + "community": 148, + "norm_label": "test_server_runner.py" + }, + { + "label": "_FakeUvicornServer", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L21", + "id": "tray_test_server_runner_fakeuvicornserver", + "community": 148, + "norm_label": "_fakeuvicornserver" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L24", + "id": "tray_test_server_runner_fakeuvicornserver_init", + "community": 148, + "norm_label": ".__init__()" + }, + { + "label": ".run()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L30", + "id": "tray_test_server_runner_fakeuvicornserver_run", + "community": 148, + "norm_label": ".run()" + }, + { + "label": "_make_runner()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L44", + "id": "tray_test_server_runner_make_runner", + "community": 148, + "norm_label": "_make_runner()" + }, + { + "label": "test_pick_free_port_returns_bindable_port()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L60", + "id": "tray_test_server_runner_test_pick_free_port_returns_bindable_port", + "community": 58, + "norm_label": "test_pick_free_port_returns_bindable_port()" + }, + { + "label": "test_start_writes_server_json_atomically()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L72", + "id": "tray_test_server_runner_test_start_writes_server_json_atomically", + "community": 148, + "norm_label": "test_start_writes_server_json_atomically()" + }, + { + "label": "test_stop_deletes_state_file()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L89", + "id": "tray_test_server_runner_test_stop_deletes_state_file", + "community": 148, + "norm_label": "test_stop_deletes_state_file()" + }, + { + "label": "test_double_start_raises()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L98", + "id": "tray_test_server_runner_test_double_start_raises", + "community": 148, + "norm_label": "test_double_start_raises()" + }, + { + "label": "test_port_property_before_start_raises()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L108", + "id": "tray_test_server_runner_test_port_property_before_start_raises", + "community": 148, + "norm_label": "test_port_property_before_start_raises()" + }, + { + "label": "test_port_property_after_start()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L114", + "id": "tray_test_server_runner_test_port_property_after_start", + "community": 148, + "norm_label": "test_port_property_after_start()" + }, + { + "label": "test_state_file_property_returns_expected_path()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L123", + "id": "tray_test_server_runner_test_state_file_property_returns_expected_path", + "community": 148, + "norm_label": "test_state_file_property_returns_expected_path()" + }, + { + "label": "test_stop_is_idempotent()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L128", + "id": "tray_test_server_runner_test_stop_is_idempotent", + "community": 148, + "norm_label": "test_stop_is_idempotent()" + }, + { + "label": "test_start_creates_state_dir_if_missing()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L135", + "id": "tray_test_server_runner_test_start_creates_state_dir_if_missing", + "community": 148, + "norm_label": "test_start_creates_state_dir_if_missing()" + }, + { + "label": "test_is_running_tracks_thread_lifecycle()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L145", + "id": "tray_test_server_runner_test_is_running_tracks_thread_lifecycle", + "community": 148, + "norm_label": "test_is_running_tracks_thread_lifecycle()" + }, + { + "label": "test_real_uvicorn_resolves_lazily()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L157", + "id": "tray_test_server_runner_test_real_uvicorn_resolves_lazily", + "community": 58, + "norm_label": "test_real_uvicorn_resolves_lazily()" + }, + { + "label": "test_delete_state_file_handles_missing()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L170", + "id": "tray_test_server_runner_test_delete_state_file_handles_missing", + "community": 58, + "norm_label": "test_delete_state_file_handles_missing()" + }, + { + "label": "test_stop_handles_attribute_error_on_should_exit()", + "file_type": "code", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L176", + "id": "tray_test_server_runner_test_stop_handles_attribute_error_on_should_exit", + "community": 148, + "norm_label": "test_stop_handles_attribute_error_on_should_exit()" + }, + { + "label": "Tests for :mod:`exlab_wizard.tray.server_runner`. Backend Spec \u00a74.3.2.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L1", + "id": "tray_test_server_runner_rationale_1", + "community": 148, + "norm_label": "tests for :mod:`exlab_wizard.tray.server_runner`. backend spec \u00a74.3.2." + }, + { + "label": "Fake :class:`uvicorn.Server` that runs a tiny event loop.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L22", + "id": "tray_test_server_runner_rationale_22", + "community": 148, + "norm_label": "fake :class:`uvicorn.server` that runs a tiny event loop." + }, + { + "label": "The real ``_build_uvicorn`` defers the uvicorn import. We can call ``_build", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L158", + "id": "tray_test_server_runner_rationale_158", + "community": 58, + "norm_label": "the real ``_build_uvicorn`` defers the uvicorn import. we can call ``_build" + }, + { + "label": "A custom server object missing ``should_exit`` is tolerated.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L177", + "id": "tray_test_server_runner_rationale_177", + "community": 148, + "norm_label": "a custom server object missing ``should_exit`` is tolerated." + }, + { + "label": "test_notifications.py", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L1", + "id": "tests_unit_tray_test_notifications_py", + "community": 32, + "norm_label": "test_notifications.py" + }, + { + "label": "test_notify_calls_injected_callable()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L19", + "id": "tray_test_notifications_test_notify_calls_injected_callable", + "community": 32, + "norm_label": "test_notify_calls_injected_callable()" + }, + { + "label": "test_notify_swallows_notifier_exceptions()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L29", + "id": "tray_test_notifications_test_notify_swallows_notifier_exceptions", + "community": 32, + "norm_label": "test_notify_swallows_notifier_exceptions()" + }, + { + "label": "test_bus_emits_after_coalescing_window()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L37", + "id": "tray_test_notifications_test_bus_emits_after_coalescing_window", + "community": 32, + "norm_label": "test_bus_emits_after_coalescing_window()" + }, + { + "label": "test_bus_suppresses_when_window_foregrounded()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L63", + "id": "tray_test_notifications_test_bus_suppresses_when_window_foregrounded", + "community": 32, + "norm_label": "test_bus_suppresses_when_window_foregrounded()" + }, + { + "label": "test_bus_separate_kinds_separate_buckets()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L74", + "id": "tray_test_notifications_test_bus_separate_kinds_separate_buckets", + "community": 32, + "norm_label": "test_bus_separate_kinds_separate_buckets()" + }, + { + "label": "test_bus_cancel_all_drops_pending()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L89", + "id": "tray_test_notifications_test_bus_cancel_all_drops_pending", + "community": 32, + "norm_label": "test_bus_cancel_all_drops_pending()" + }, + { + "label": "test_bus_emits_singleton_message_unchanged()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L102", + "id": "tray_test_notifications_test_bus_emits_singleton_message_unchanged", + "community": 32, + "norm_label": "test_bus_emits_singleton_message_unchanged()" + }, + { + "label": "test_coalescing_window_constant_matches_spec()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L114", + "id": "tray_test_notifications_test_coalescing_window_constant_matches_spec", + "community": 32, + "norm_label": "test_coalescing_window_constant_matches_spec()" + }, + { + "label": "test_coalesced_message_plugin_input_required_plural()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L118", + "id": "tray_test_notifications_test_coalesced_message_plugin_input_required_plural", + "community": 32, + "norm_label": "test_coalesced_message_plugin_input_required_plural()" + }, + { + "label": "test_coalesced_message_plugin_input_required_singular()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L122", + "id": "tray_test_notifications_test_coalesced_message_plugin_input_required_singular", + "community": 32, + "norm_label": "test_coalesced_message_plugin_input_required_singular()" + }, + { + "label": "test_coalesced_message_sync_failed_plural()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L126", + "id": "tray_test_notifications_test_coalesced_message_sync_failed_plural", + "community": 32, + "norm_label": "test_coalesced_message_sync_failed_plural()" + }, + { + "label": "test_coalesced_message_sync_failed_singular()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L130", + "id": "tray_test_notifications_test_coalesced_message_sync_failed_singular", + "community": 32, + "norm_label": "test_coalesced_message_sync_failed_singular()" + }, + { + "label": "test_coalesced_message_unknown_kind()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L134", + "id": "tray_test_notifications_test_coalesced_message_unknown_kind", + "community": 32, + "norm_label": "test_coalesced_message_unknown_kind()" + }, + { + "label": "test_bus_timer_fires_after_window()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L138", + "id": "tray_test_notifications_test_bus_timer_fires_after_window", + "community": 32, + "norm_label": "test_bus_timer_fires_after_window()" + }, + { + "label": "test_default_notifier_returns_callable()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L153", + "id": "tray_test_notifications_test_default_notifier_returns_callable", + "community": 32, + "norm_label": "test_default_notifier_returns_callable()" + }, + { + "label": "test_noop_notifier_swallows_arbitrary_kwargs()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L161", + "id": "tray_test_notifications_test_noop_notifier_swallows_arbitrary_kwargs", + "community": 32, + "norm_label": "test_noop_notifier_swallows_arbitrary_kwargs()" + }, + { + "label": "test_notify_uses_default_notifier_when_none()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L168", + "id": "tray_test_notifications_test_notify_uses_default_notifier_when_none", + "community": 32, + "norm_label": "test_notify_uses_default_notifier_when_none()" + }, + { + "label": "test_flush_with_already_drained_bucket()", + "file_type": "code", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L180", + "id": "tray_test_notifications_test_flush_with_already_drained_bucket", + "community": 32, + "norm_label": "test_flush_with_already_drained_bucket()" + }, + { + "label": "Tests for :mod:`exlab_wizard.tray.notifications`. Backend Spec \u00a715.7.3.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L1", + "id": "tray_test_notifications_rationale_1", + "community": 32, + "norm_label": "tests for :mod:`exlab_wizard.tray.notifications`. backend spec \u00a715.7.3." + }, + { + "label": "Drive the real timer with a tiny window.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L139", + "id": "tray_test_notifications_rationale_139", + "community": 32, + "norm_label": "drive the real timer with a tiny window." + }, + { + "label": "The default notifier resolves either to plyer or to the noop fallback.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L154", + "id": "tray_test_notifications_rationale_154", + "community": 32, + "norm_label": "the default notifier resolves either to plyer or to the noop fallback." + }, + { + "label": "Fallback notifier is keyword-tolerant.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L162", + "id": "tray_test_notifications_rationale_162", + "community": 32, + "norm_label": "fallback notifier is keyword-tolerant." + }, + { + "label": "``_flush`` is safe when the bucket has already been popped (race).", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L181", + "id": "tray_test_notifications_rationale_181", + "community": 32, + "norm_label": "``_flush`` is safe when the bucket has already been popped (race)." + }, + { + "label": "test_quit_coordinator.py", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L1", + "id": "tests_unit_tray_test_quit_coordinator_py", + "community": 44, + "norm_label": "test_quit_coordinator.py" + }, + { + "label": "_StubServer", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L17", + "id": "tray_test_quit_coordinator_stubserver", + "community": 44, + "norm_label": "_stubserver" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L18", + "id": "tray_test_quit_coordinator_stubserver_init", + "community": 44, + "norm_label": ".__init__()" + }, + { + "label": ".stop()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L21", + "id": "tray_test_quit_coordinator_stubserver_stop", + "community": 44, + "norm_label": ".stop()" + }, + { + "label": "_StubWindow", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L25", + "id": "tray_test_quit_coordinator_stubwindow", + "community": 44, + "norm_label": "_stubwindow" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L26", + "id": "tray_test_quit_coordinator_stubwindow_init", + "community": 44, + "norm_label": ".__init__()" + }, + { + "label": ".close()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L29", + "id": "tray_test_quit_coordinator_stubwindow_close", + "community": 44, + "norm_label": ".close()" + }, + { + "label": "_Counted", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L33", + "id": "tray_test_quit_coordinator_counted", + "community": 44, + "norm_label": "_counted" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L34", + "id": "tray_test_quit_coordinator_counted_init", + "community": 44, + "norm_label": ".__init__()" + }, + { + "label": "_make_coordinator()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L38", + "id": "tray_test_quit_coordinator_make_coordinator", + "community": 44, + "norm_label": "_make_coordinator()" + }, + { + "label": "test_idle_predicate_short_circuits()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L64", + "id": "tray_test_quit_coordinator_test_idle_predicate_short_circuits", + "community": 44, + "norm_label": "test_idle_predicate_short_circuits()" + }, + { + "label": "test_busy_predicate_times_out_and_force_quits()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L72", + "id": "tray_test_quit_coordinator_test_busy_predicate_times_out_and_force_quits", + "community": 44, + "norm_label": "test_busy_predicate_times_out_and_force_quits()" + }, + { + "label": "test_busy_predicate_wait_resets_timer()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L91", + "id": "tray_test_quit_coordinator_test_busy_predicate_wait_resets_timer", + "community": 44, + "norm_label": "test_busy_predicate_wait_resets_timer()" + }, + { + "label": "test_sigterm_uses_short_timeout()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L111", + "id": "tray_test_quit_coordinator_test_sigterm_uses_short_timeout", + "community": 44, + "norm_label": "test_sigterm_uses_short_timeout()" + }, + { + "label": "test_quit_handles_missing_window_launcher()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L137", + "id": "tray_test_quit_coordinator_test_quit_handles_missing_window_launcher", + "community": 44, + "norm_label": "test_quit_handles_missing_window_launcher()" + }, + { + "label": "test_safe_count_handles_callable_attribute()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L152", + "id": "tray_test_quit_coordinator_test_safe_count_handles_callable_attribute", + "community": 44, + "norm_label": "test_safe_count_handles_callable_attribute()" + }, + { + "label": "test_safe_count_handles_callable_that_raises()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L158", + "id": "tray_test_quit_coordinator_test_safe_count_handles_callable_that_raises", + "community": 44, + "norm_label": "test_safe_count_handles_callable_that_raises()" + }, + { + "label": "test_safe_count_handles_none_obj()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L168", + "id": "tray_test_quit_coordinator_test_safe_count_handles_none_obj", + "community": 44, + "norm_label": "test_safe_count_handles_none_obj()" + }, + { + "label": "test_safe_count_handles_non_numeric()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L172", + "id": "tray_test_quit_coordinator_test_safe_count_handles_non_numeric", + "community": 44, + "norm_label": "test_safe_count_handles_non_numeric()" + }, + { + "label": "test_force_quit_prompt_exception_defaults_to_force()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L179", + "id": "tray_test_quit_coordinator_test_force_quit_prompt_exception_defaults_to_force", + "community": 44, + "norm_label": "test_force_quit_prompt_exception_defaults_to_force()" + }, + { + "label": "test_default_timeout_constants_match_spec()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L192", + "id": "tray_test_quit_coordinator_test_default_timeout_constants_match_spec", + "community": 44, + "norm_label": "test_default_timeout_constants_match_spec()" + }, + { + "label": "test_idle_predicate_returns_true_immediately()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L199", + "id": "tray_test_quit_coordinator_test_idle_predicate_returns_true_immediately", + "community": 44, + "norm_label": "test_idle_predicate_returns_true_immediately()" + }, + { + "label": "test_predicate_eventually_becomes_true()", + "file_type": "code", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L208", + "id": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", + "community": 44, + "norm_label": "test_predicate_eventually_becomes_true()" + }, + { + "label": "Tests for :mod:`exlab_wizard.tray.quit_coordinator`. Backend Spec \u00a74.3.2.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L1", + "id": "tray_test_quit_coordinator_rationale_1", + "community": 44, + "norm_label": "tests for :mod:`exlab_wizard.tray.quit_coordinator`. backend spec \u00a74.3.2." + }, + { + "label": "Wait loop returns True when the predicate flips mid-wait.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L209", + "id": "tray_test_quit_coordinator_rationale_209", + "community": 44, + "norm_label": "wait loop returns true when the predicate flips mid-wait." + }, + { + "label": "test_window_launcher.py", + "file_type": "code", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L1", + "id": "tests_unit_tray_test_window_launcher_py", + "community": 65, + "norm_label": "test_window_launcher.py" + }, + { + "label": "_python_window_argv()", + "file_type": "code", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L18", + "id": "tray_test_window_launcher_python_window_argv", + "community": 65, + "norm_label": "_python_window_argv()" + }, + { + "label": "test_open_spawns_subprocess()", + "file_type": "code", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L29", + "id": "tray_test_window_launcher_test_open_spawns_subprocess", + "community": 65, + "norm_label": "test_open_spawns_subprocess()" + }, + { + "label": "test_close_terminates_subprocess()", + "file_type": "code", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L42", + "id": "tray_test_window_launcher_test_close_terminates_subprocess", + "community": 65, + "norm_label": "test_close_terminates_subprocess()" + }, + { + "label": "test_close_is_idempotent()", + "file_type": "code", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L53", + "id": "tray_test_window_launcher_test_close_is_idempotent", + "community": 65, + "norm_label": "test_close_is_idempotent()" + }, + { + "label": "test_open_focuses_existing()", + "file_type": "code", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L60", + "id": "tray_test_window_launcher_test_open_focuses_existing", + "community": 65, + "norm_label": "test_open_focuses_existing()" + }, + { + "label": "test_resolve_window_executable_prefers_env_var()", + "file_type": "code", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L71", + "id": "tray_test_window_launcher_test_resolve_window_executable_prefers_env_var", + "community": 65, + "norm_label": "test_resolve_window_executable_prefers_env_var()" + }, + { + "label": "test_resolve_window_executable_uses_path()", + "file_type": "code", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L76", + "id": "tray_test_window_launcher_test_resolve_window_executable_uses_path", + "community": 65, + "norm_label": "test_resolve_window_executable_uses_path()" + }, + { + "label": "test_resolve_window_executable_falls_back_to_module()", + "file_type": "code", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L85", + "id": "tray_test_window_launcher_test_resolve_window_executable_falls_back_to_module", + "community": 65, + "norm_label": "test_resolve_window_executable_falls_back_to_module()" + }, + { + "label": "test_window_executable_override()", + "file_type": "code", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L95", + "id": "tray_test_window_launcher_test_window_executable_override", + "community": 65, + "norm_label": "test_window_executable_override()" + }, + { + "label": "test_argv_falls_through_resolve_helper()", + "file_type": "code", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L103", + "id": "tray_test_window_launcher_test_argv_falls_through_resolve_helper", + "community": 65, + "norm_label": "test_argv_falls_through_resolve_helper()" + }, + { + "label": "test_pid_is_none_before_open()", + "file_type": "code", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L113", + "id": "tray_test_window_launcher_test_pid_is_none_before_open", + "community": 65, + "norm_label": "test_pid_is_none_before_open()" + }, + { + "label": "test_close_kills_unresponsive_process()", + "file_type": "code", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L119", + "id": "tray_test_window_launcher_test_close_kills_unresponsive_process", + "community": 65, + "norm_label": "test_close_kills_unresponsive_process()" + }, + { + "label": "Tests for :mod:`exlab_wizard.tray.window_launcher`. Backend Spec \u00a74.3.2.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L1", + "id": "tray_test_window_launcher_rationale_1", + "community": 65, + "norm_label": "tests for :mod:`exlab_wizard.tray.window_launcher`. backend spec \u00a74.3.2." + }, + { + "label": "Return an argv that runs a tiny window stand-in (a sleep).", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L19", + "id": "tray_test_window_launcher_rationale_19", + "community": 65, + "norm_label": "return an argv that runs a tiny window stand-in (a sleep)." + }, + { + "label": "Default constructor with no override delegates to the resolver.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L104", + "id": "tray_test_window_launcher_rationale_104", + "community": 65, + "norm_label": "default constructor with no override delegates to the resolver." + }, + { + "label": "test_autostart.py", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L1", + "id": "tests_unit_tray_test_autostart_py", + "community": 50, + "norm_label": "test_autostart.py" + }, + { + "label": "test_macos_register_writes_plist()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L24", + "id": "tray_test_autostart_test_macos_register_writes_plist", + "community": 50, + "norm_label": "test_macos_register_writes_plist()" + }, + { + "label": "test_macos_unregister_removes_plist()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L40", + "id": "tray_test_autostart_test_macos_unregister_removes_plist", + "community": 50, + "norm_label": "test_macos_unregister_removes_plist()" + }, + { + "label": "test_macos_register_is_idempotent()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L51", + "id": "tray_test_autostart_test_macos_register_is_idempotent", + "community": 50, + "norm_label": "test_macos_register_is_idempotent()" + }, + { + "label": "test_linux_register_writes_systemd_and_desktop()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L63", + "id": "tray_test_autostart_test_linux_register_writes_systemd_and_desktop", + "community": 50, + "norm_label": "test_linux_register_writes_systemd_and_desktop()" + }, + { + "label": "test_linux_unregister_removes_both_files()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L80", + "id": "tray_test_autostart_test_linux_unregister_removes_both_files", + "community": 50, + "norm_label": "test_linux_unregister_removes_both_files()" + }, + { + "label": "test_linux_is_registered_when_only_desktop_present()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L87", + "id": "tray_test_autostart_test_linux_is_registered_when_only_desktop_present", + "community": 50, + "norm_label": "test_linux_is_registered_when_only_desktop_present()" + }, + { + "label": "_FakeKey", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L100", + "id": "tray_test_autostart_fakekey", + "community": 217, + "norm_label": "_fakekey" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L101", + "id": "tray_test_autostart_fakekey_init", + "community": 217, + "norm_label": ".__init__()" + }, + { + "label": ".__enter__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L105", + "id": "tray_test_autostart_fakekey_enter", + "community": 217, + "norm_label": ".__enter__()" + }, + { + "label": ".__exit__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L108", + "id": "tray_test_autostart_fakekey_exit", + "community": 217, + "norm_label": ".__exit__()" + }, + { + "label": "_FakeWinreg", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L112", + "id": "tray_test_autostart_fakewinreg", + "community": 217, + "norm_label": "_fakewinreg" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L118", + "id": "tray_test_autostart_fakewinreg_init", + "community": 217, + "norm_label": ".__init__()" + }, + { + "label": ".OpenKey()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L122", + "id": "tray_test_autostart_fakewinreg_openkey", + "community": 217, + "norm_label": ".openkey()" + }, + { + "label": ".SetValueEx()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L133", + "id": "tray_test_autostart_fakewinreg_setvalueex", + "community": 217, + "norm_label": ".setvalueex()" + }, + { + "label": ".QueryValueEx()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L145", + "id": "tray_test_autostart_fakewinreg_queryvalueex", + "community": 217, + "norm_label": ".queryvalueex()" + }, + { + "label": ".DeleteValue()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L150", + "id": "tray_test_autostart_fakewinreg_deletevalue", + "community": 217, + "norm_label": ".deletevalue()" + }, + { + "label": "fake_winreg()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L155", + "id": "tray_test_autostart_fake_winreg", + "community": 217, + "norm_label": "fake_winreg()" + }, + { + "label": "test_windows_register_sets_run_value()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L161", + "id": "tray_test_autostart_test_windows_register_sets_run_value", + "community": 50, + "norm_label": "test_windows_register_sets_run_value()" + }, + { + "label": "test_windows_unregister_deletes_run_value()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L173", + "id": "tray_test_autostart_test_windows_unregister_deletes_run_value", + "community": 50, + "norm_label": "test_windows_unregister_deletes_run_value()" + }, + { + "label": "test_windows_unregister_when_value_missing_is_safe()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L185", + "id": "tray_test_autostart_test_windows_unregister_when_value_missing_is_safe", + "community": 50, + "norm_label": "test_windows_unregister_when_value_missing_is_safe()" + }, + { + "label": "test_windows_open_key_handles_filenotfound_on_query()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L193", + "id": "tray_test_autostart_test_windows_open_key_handles_filenotfound_on_query", + "community": 50, + "norm_label": "test_windows_open_key_handles_filenotfound_on_query()" + }, + { + "label": "test_silently_unlink_tolerates_missing()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L211", + "id": "tray_test_autostart_test_silently_unlink_tolerates_missing", + "community": 170, + "norm_label": "test_silently_unlink_tolerates_missing()" + }, + { + "label": "test_env_var_root_overrides_constructor()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L223", + "id": "tray_test_autostart_test_env_var_root_overrides_constructor", + "community": 50, + "norm_label": "test_env_var_root_overrides_constructor()" + }, + { + "label": "test_executable_path_property()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L238", + "id": "tray_test_autostart_test_executable_path_property", + "community": 50, + "norm_label": "test_executable_path_property()" + }, + { + "label": "test_default_executable_falls_back_to_sys_executable()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L244", + "id": "tray_test_autostart_test_default_executable_falls_back_to_sys_executable", + "community": 50, + "norm_label": "test_default_executable_falls_back_to_sys_executable()" + }, + { + "label": "test_detect_platform_returns_known_value()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L250", + "id": "tray_test_autostart_test_detect_platform_returns_known_value", + "community": 170, + "norm_label": "test_detect_platform_returns_known_value()" + }, + { + "label": "test_detect_platform_dispatch()", + "file_type": "code", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L255", + "id": "tray_test_autostart_test_detect_platform_dispatch", + "community": 170, + "norm_label": "test_detect_platform_dispatch()" + }, + { + "label": "Tests for :mod:`exlab_wizard.tray.autostart`. Backend Spec \u00a715.7.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L1", + "id": "tray_test_autostart_rationale_1", + "community": 50, + "norm_label": "tests for :mod:`exlab_wizard.tray.autostart`. backend spec \u00a715.7." + }, + { + "label": "When ``OpenKey`` raises FileNotFoundError, ``is_registered`` returns False.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L196", + "id": "tray_test_autostart_rationale_196", + "community": 50, + "norm_label": "when ``openkey`` raises filenotfounderror, ``is_registered`` returns false." + }, + { + "label": "Internal helper tolerates a missing path without raising.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L212", + "id": "tray_test_autostart_rationale_212", + "community": 170, + "norm_label": "internal helper tolerates a missing path without raising." + }, + { + "label": "test_main.py", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L1", + "id": "tests_unit_tray_test_main_py", + "community": 24, + "norm_label": "test_main.py" + }, + { + "label": "_StubServerRunner", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L15", + "id": "tray_test_main_stubserverrunner", + "community": 64, + "norm_label": "_stubserverrunner" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L16", + "id": "tray_test_main_stubserverrunner_init", + "community": 64, + "norm_label": ".__init__()" + }, + { + "label": ".start()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L22", + "id": "tray_test_main_stubserverrunner_start", + "community": 64, + "norm_label": ".start()" + }, + { + "label": ".stop()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L26", + "id": "tray_test_main_stubserverrunner_stop", + "community": 64, + "norm_label": ".stop()" + }, + { + "label": "_StubWindowLauncher", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L30", + "id": "tray_test_main_stubwindowlauncher", + "community": 24, + "norm_label": "_stubwindowlauncher" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L31", + "id": "tray_test_main_stubwindowlauncher_init", + "community": 24, + "norm_label": ".__init__()" + }, + { + "label": ".open()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L35", + "id": "tray_test_main_stubwindowlauncher_open", + "community": 24, + "norm_label": ".open()" + }, + { + "label": ".close()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L38", + "id": "tray_test_main_stubwindowlauncher_close", + "community": 24, + "norm_label": ".close()" + }, + { + "label": "_StubQuitCoordinator", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L42", + "id": "tray_test_main_stubquitcoordinator", + "community": 24, + "norm_label": "_stubquitcoordinator" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L43", + "id": "tray_test_main_stubquitcoordinator_init", + "community": 24, + "norm_label": ".__init__()" + }, + { + "label": ".quit()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L46", + "id": "tray_test_main_stubquitcoordinator_quit", + "community": 24, + "norm_label": ".quit()" + }, + { + "label": "_StubStatusTicker", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L51", + "id": "tray_test_main_stubstatusticker", + "community": 24, + "norm_label": "_stubstatusticker" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L52", + "id": "tray_test_main_stubstatusticker_init", + "community": 24, + "norm_label": ".__init__()" + }, + { + "label": ".start()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L57", + "id": "tray_test_main_stubstatusticker_start", + "community": 24, + "norm_label": ".start()" + }, + { + "label": ".stop()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L60", + "id": "tray_test_main_stubstatusticker_stop", + "community": 24, + "norm_label": ".stop()" + }, + { + "label": ".tick_once()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L63", + "id": "tray_test_main_stubstatusticker_tick_once", + "community": 24, + "norm_label": ".tick_once()" + }, + { + "label": "_StubBus", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L68", + "id": "tray_test_main_stubbus", + "community": 24, + "norm_label": "_stubbus" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L69", + "id": "tray_test_main_stubbus_init", + "community": 24, + "norm_label": ".__init__()" + }, + { + "label": ".cancel_all()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L72", + "id": "tray_test_main_stubbus_cancel_all", + "community": 24, + "norm_label": ".cancel_all()" + }, + { + "label": "_StubAutostart", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L76", + "id": "tray_test_main_stubautostart", + "community": 24, + "norm_label": "_stubautostart" + }, + { + "label": "_make_tray()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L80", + "id": "tray_test_main_make_tray", + "community": 24, + "norm_label": "_make_tray()" + }, + { + "label": "test_start_server_calls_runner()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L91", + "id": "tray_test_main_test_start_server_calls_runner", + "community": 24, + "norm_label": "test_start_server_calls_runner()" + }, + { + "label": "test_open_window_delegates()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L98", + "id": "tray_test_main_test_open_window_delegates", + "community": 24, + "norm_label": "test_open_window_delegates()" + }, + { + "label": "test_request_quit_runs_coordinator()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L104", + "id": "tray_test_main_test_request_quit_runs_coordinator", + "community": 24, + "norm_label": "test_request_quit_runs_coordinator()" + }, + { + "label": "test_request_quit_calls_icon_stop_when_set()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L110", + "id": "tray_test_main_test_request_quit_calls_icon_stop_when_set", + "community": 24, + "norm_label": "test_request_quit_calls_icon_stop_when_set()" + }, + { + "label": "test_request_quit_handles_icon_stop_error()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L118", + "id": "tray_test_main_test_request_quit_handles_icon_stop_error", + "community": 24, + "norm_label": "test_request_quit_handles_icon_stop_error()" + }, + { + "label": "test_shutdown_tears_components_down()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L126", + "id": "tray_test_main_test_shutdown_tears_components_down", + "community": 24, + "norm_label": "test_shutdown_tears_components_down()" + }, + { + "label": "test_run_wires_icon_and_invokes_run_loop()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L135", + "id": "tray_test_main_test_run_wires_icon_and_invokes_run_loop", + "community": 24, + "norm_label": "test_run_wires_icon_and_invokes_run_loop()" + }, + { + "label": "test_build_default_components()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L166", + "id": "tray_test_main_test_build_default_components", + "community": 64, + "norm_label": "test_build_default_components()" + }, + { + "label": "test_main_uses_run_helper()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L178", + "id": "tray_test_main_test_main_uses_run_helper", + "community": 24, + "norm_label": "test_main_uses_run_helper()" + }, + { + "label": "test_main_handles_keyboard_interrupt()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L201", + "id": "tray_test_main_test_main_handles_keyboard_interrupt", + "community": 24, + "norm_label": "test_main_handles_keyboard_interrupt()" + }, + { + "label": "test_run_returns_one_on_icon_failure()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L218", + "id": "tray_test_main_test_run_returns_one_on_icon_failure", + "community": 24, + "norm_label": "test_run_returns_one_on_icon_failure()" + }, + { + "label": "test_request_quit_uses_running_loop_when_present()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L232", + "id": "tray_test_main_test_request_quit_uses_running_loop_when_present", + "community": 24, + "norm_label": "test_request_quit_uses_running_loop_when_present()" + }, + { + "label": "test_build_default_app()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L269", + "id": "tray_test_main_test_build_default_app", + "community": 24, + "norm_label": "test_build_default_app()" + }, + { + "label": "test_build_default_components_falls_back_to_default_app()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L302", + "id": "tray_test_main_test_build_default_components_falls_back_to_default_app", + "community": 24, + "norm_label": "test_build_default_components_falls_back_to_default_app()" + }, + { + "label": "test_parse_argv_defaults_no_smoke()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L314", + "id": "tray_test_main_test_parse_argv_defaults_no_smoke", + "community": 163, + "norm_label": "test_parse_argv_defaults_no_smoke()" + }, + { + "label": "test_parse_argv_smoke_flag()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L323", + "id": "tray_test_main_test_parse_argv_smoke_flag", + "community": 163, + "norm_label": "test_parse_argv_smoke_flag()" + }, + { + "label": "test_parse_argv_no_autostart_prompt_silently_accepted()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L331", + "id": "tray_test_main_test_parse_argv_no_autostart_prompt_silently_accepted", + "community": 163, + "norm_label": "test_parse_argv_no_autostart_prompt_silently_accepted()" + }, + { + "label": "test_run_smoke_starts_server_and_stops_on_signal()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L339", + "id": "tray_test_main_test_run_smoke_starts_server_and_stops_on_signal", + "community": 24, + "norm_label": "test_run_smoke_starts_server_and_stops_on_signal()" + }, + { + "label": "test_main_smoke_dispatches_to_run_smoke()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L376", + "id": "tray_test_main_test_main_smoke_dispatches_to_run_smoke", + "community": 24, + "norm_label": "test_main_smoke_dispatches_to_run_smoke()" + }, + { + "label": "test_parse_argv_version_flag()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L397", + "id": "tray_test_main_test_parse_argv_version_flag", + "community": 163, + "norm_label": "test_parse_argv_version_flag()" + }, + { + "label": "test_main_version_prints_version_and_exits_zero()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L405", + "id": "tray_test_main_test_main_version_prints_version_and_exits_zero", + "community": 24, + "norm_label": "test_main_version_prints_version_and_exits_zero()" + }, + { + "label": "test_parse_argv_defaults_no_test_flags()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L423", + "id": "tray_test_main_test_parse_argv_defaults_no_test_flags", + "community": 163, + "norm_label": "test_parse_argv_defaults_no_test_flags()" + }, + { + "label": "test_parse_argv_test_flag()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L432", + "id": "tray_test_main_test_parse_argv_test_flag", + "community": 163, + "norm_label": "test_parse_argv_test_flag()" + }, + { + "label": "test_parse_argv_test_with_samples()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L440", + "id": "tray_test_main_test_parse_argv_test_with_samples", + "community": 163, + "norm_label": "test_parse_argv_test_with_samples()" + }, + { + "label": "test_parse_argv_samples_without_test_errors()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L448", + "id": "tray_test_main_test_parse_argv_samples_without_test_errors", + "community": 163, + "norm_label": "test_parse_argv_samples_without_test_errors()" + }, + { + "label": "test_mode_env()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L462", + "id": "tray_test_main_test_mode_env", + "community": 24, + "norm_label": "test_mode_env()" + }, + { + "label": "test_main_test_flag_sets_env_and_bootstraps_config()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L487", + "id": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", + "community": 17, + "norm_label": "test_main_test_flag_sets_env_and_bootstraps_config()" + }, + { + "label": "test_main_test_does_not_overwrite_existing_config()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L524", + "id": "tray_test_main_test_main_test_does_not_overwrite_existing_config", + "community": 24, + "norm_label": "test_main_test_does_not_overwrite_existing_config()" + }, + { + "label": "test_main_test_with_samples_adds_equipment()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L539", + "id": "tray_test_main_test_main_test_with_samples_adds_equipment", + "community": 17, + "norm_label": "test_main_test_with_samples_adds_equipment()" + }, + { + "label": "test_main_without_test_does_not_set_env()", + "file_type": "code", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L555", + "id": "tray_test_main_test_main_without_test_does_not_set_env", + "community": 24, + "norm_label": "test_main_without_test_does_not_set_env()" + }, + { + "label": "Tests for :mod:`exlab_wizard.tray.main`. Backend Spec \u00a74.3.2.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L1", + "id": "tray_test_main_rationale_1", + "community": 24, + "norm_label": "tests for :mod:`exlab_wizard.tray.main`. backend spec \u00a74.3.2." + }, + { + "label": "``main()`` builds default components and calls :meth:`TrayApp.run`.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L179", + "id": "tray_test_main_rationale_179", + "community": 24, + "norm_label": "``main()`` builds default components and calls :meth:`trayapp.run`." + }, + { + "label": "``asyncio.run`` raises RuntimeError when a loop is running. The tray's ``re", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L235", + "id": "tray_test_main_rationale_235", + "community": 24, + "norm_label": "``asyncio.run`` raises runtimeerror when a loop is running. the tray's ``re" + }, + { + "label": "``_build_default_app`` builds deps, calls ``create_app``, mounts NiceGUI.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L270", + "id": "tray_test_main_rationale_270", + "community": 24, + "norm_label": "``_build_default_app`` builds deps, calls ``create_app``, mounts nicegui." + }, + { + "label": "When ``app`` is None, the helper calls ``_build_default_app``.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L305", + "id": "tray_test_main_rationale_305", + "community": 24, + "norm_label": "when ``app`` is none, the helper calls ``_build_default_app``." + }, + { + "label": "No flags -> ``smoke`` is False, ``no_autostart_prompt`` is False.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L315", + "id": "tray_test_main_rationale_315", + "community": 163, + "norm_label": "no flags -> ``smoke`` is false, ``no_autostart_prompt`` is false." + }, + { + "label": "``--smoke`` sets the smoke flag.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L324", + "id": "tray_test_main_rationale_324", + "community": 163, + "norm_label": "``--smoke`` sets the smoke flag." + }, + { + "label": "``--no-autostart-prompt`` is silently accepted (reserved).", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L332", + "id": "tray_test_main_rationale_332", + "community": 163, + "norm_label": "``--no-autostart-prompt`` is silently accepted (reserved)." + }, + { + "label": "``_run_smoke`` boots the server, blocks on a stop event, and stops cleanly.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L342", + "id": "tray_test_main_rationale_342", + "community": 24, + "norm_label": "``_run_smoke`` boots the server, blocks on a stop event, and stops cleanly." + }, + { + "label": "``main([\"--smoke\"])`` calls ``_run_smoke`` instead of the icon loop.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L379", + "id": "tray_test_main_rationale_379", + "community": 24, + "norm_label": "``main([\"--smoke\"])`` calls ``_run_smoke`` instead of the icon loop." + }, + { + "label": "``--version`` sets the version flag.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L398", + "id": "tray_test_main_rationale_398", + "community": 163, + "norm_label": "``--version`` sets the version flag." + }, + { + "label": "``main([\"--version\"])`` prints the package version and returns 0.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L408", + "id": "tray_test_main_rationale_408", + "community": 24, + "norm_label": "``main([\"--version\"])`` prints the package version and returns 0." + }, + { + "label": "No flags -> both test-mode flags are False.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L424", + "id": "tray_test_main_rationale_424", + "community": 163, + "norm_label": "no flags -> both test-mode flags are false." + }, + { + "label": "``--add-test-samples`` alone must be rejected via parser.error (exit 2).", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L451", + "id": "tray_test_main_rationale_451", + "community": 163, + "norm_label": "``--add-test-samples`` alone must be rejected via parser.error (exit 2)." + }, + { + "label": "Sandbox ``main([\"--test\", ...])`` into ``tmp_path``. Redirects ``Path.home(", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L463", + "id": "tray_test_main_rationale_463", + "community": 24, + "norm_label": "sandbox ``main([\"--test\", ...])`` into ``tmp_path``. redirects ``path.home(" + }, + { + "label": "``main([\"--test\"])`` sets EXLAB_WIZARD_TEST_MODE=1 and writes a starter config.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L488", + "id": "tray_test_main_rationale_488", + "community": 17, + "norm_label": "``main([\"--test\"])`` sets exlab_wizard_test_mode=1 and writes a starter config." + }, + { + "label": "Re-running ``--test`` must preserve any edits the user made in-session.", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L525", + "id": "tray_test_main_rationale_525", + "community": 24, + "norm_label": "re-running ``--test`` must preserve any edits the user made in-session." + }, + { + "label": "Sanity: running without --test leaves the env var unset and writes no test confi", + "file_type": "rationale", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L556", + "id": "tray_test_main_rationale_556", + "community": 24, + "norm_label": "sanity: running without --test leaves the env var unset and writes no test confi" + }, + { + "label": "test_generator.py", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L1", + "id": "tests_unit_readme_test_generator_py", + "community": 2, + "norm_label": "test_generator.py" + }, + { + "label": "_system_fields()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L57", + "id": "readme_test_generator_system_fields", + "community": 2, + "norm_label": "_system_fields()" + }, + { + "label": "_ctx()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L73", + "id": "readme_test_generator_ctx", + "community": 2, + "norm_label": "_ctx()" + }, + { + "label": "generator()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L99", + "id": "readme_test_generator_generator", + "community": 2, + "norm_label": "generator()" + }, + { + "label": "test_generate_writes_both_files()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L109", + "id": "readme_test_generator_test_generate_writes_both_files", + "community": 2, + "norm_label": "test_generate_writes_both_files()" + }, + { + "label": "test_readme_starts_with_yaml_front_matter()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L118", + "id": "readme_test_generator_test_readme_starts_with_yaml_front_matter", + "community": 2, + "norm_label": "test_readme_starts_with_yaml_front_matter()" + }, + { + "label": "test_readme_body_includes_label_and_objective()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L135", + "id": "readme_test_generator_test_readme_body_includes_label_and_objective", + "community": 2, + "norm_label": "test_readme_body_includes_label_and_objective()" + }, + { + "label": "test_readme_fields_json_round_trips()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L148", + "id": "readme_test_generator_test_readme_fields_json_round_trips", + "community": 2, + "norm_label": "test_readme_fields_json_round_trips()" + }, + { + "label": "test_empty_core_field_rejected()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L192", + "id": "readme_test_generator_test_empty_core_field_rejected", + "community": 2, + "norm_label": "test_empty_core_field_rejected()" + }, + { + "label": "test_label_over_max_length_rejected()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L201", + "id": "readme_test_generator_test_label_over_max_length_rejected", + "community": 2, + "norm_label": "test_label_over_max_length_rejected()" + }, + { + "label": "test_objective_over_max_length_rejected()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L208", + "id": "readme_test_generator_test_objective_over_max_length_rejected", + "community": 2, + "norm_label": "test_objective_over_max_length_rejected()" + }, + { + "label": "test_required_template_field_missing_raises()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L222", + "id": "readme_test_generator_test_required_template_field_missing_raises", + "community": 2, + "norm_label": "test_required_template_field_missing_raises()" + }, + { + "label": "test_required_config_field_missing_raises()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L231", + "id": "readme_test_generator_test_required_config_field_missing_raises", + "community": 2, + "norm_label": "test_required_config_field_missing_raises()" + }, + { + "label": "test_duplicate_field_id_across_layers_raises()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L247", + "id": "readme_test_generator_test_duplicate_field_id_across_layers_raises", + "community": 2, + "norm_label": "test_duplicate_field_id_across_layers_raises()" + }, + { + "label": "test_custom_field_label_collides_with_template_id()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L263", + "id": "readme_test_generator_test_custom_field_label_collides_with_template_id", + "community": 2, + "norm_label": "test_custom_field_label_collides_with_template_id()" + }, + { + "label": "test_core_field_redeclared_in_template_raises()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L281", + "id": "readme_test_generator_test_core_field_redeclared_in_template_raises", + "community": 2, + "norm_label": "test_core_field_redeclared_in_template_raises()" + }, + { + "label": "test_core_field_redeclared_in_config_raises()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L290", + "id": "readme_test_generator_test_core_field_redeclared_in_config_raises", + "community": 2, + "norm_label": "test_core_field_redeclared_in_config_raises()" + }, + { + "label": "test_project_level_system_run_is_none()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L304", + "id": "readme_test_generator_test_project_level_system_run_is_none", + "community": 2, + "norm_label": "test_project_level_system_run_is_none()" + }, + { + "label": "test_run_level_experimental_run_name()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L313", + "id": "readme_test_generator_test_run_level_experimental_run_name", + "community": 2, + "norm_label": "test_run_level_experimental_run_name()" + }, + { + "label": "test_run_level_test_run_name()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L322", + "id": "readme_test_generator_test_run_level_test_run_name", + "community": 2, + "norm_label": "test_run_level_test_run_name()" + }, + { + "label": "test_string_type_accepts_string_rejects_int()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L336", + "id": "readme_test_generator_test_string_type_accepts_string_rejects_int", + "community": 2, + "norm_label": "test_string_type_accepts_string_rejects_int()" + }, + { + "label": "test_text_type_accepts_multiline_rejects_list()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L354", + "id": "readme_test_generator_test_text_type_accepts_multiline_rejects_list", + "community": 2, + "norm_label": "test_text_type_accepts_multiline_rejects_list()" + }, + { + "label": "test_choice_type_accepts_listed_rejects_other()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L370", + "id": "readme_test_generator_test_choice_type_accepts_listed_rejects_other", + "community": 2, + "norm_label": "test_choice_type_accepts_listed_rejects_other()" + }, + { + "label": "test_choice_without_options_raises()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L386", + "id": "readme_test_generator_test_choice_without_options_raises", + "community": 2, + "norm_label": "test_choice_without_options_raises()" + }, + { + "label": "test_date_type_accepts_iso8601_rejects_garbage()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L396", + "id": "readme_test_generator_test_date_type_accepts_iso8601_rejects_garbage", + "community": 2, + "norm_label": "test_date_type_accepts_iso8601_rejects_garbage()" + }, + { + "label": "test_date_type_rejects_non_string()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L419", + "id": "readme_test_generator_test_date_type_rejects_non_string", + "community": 2, + "norm_label": "test_date_type_rejects_non_string()" + }, + { + "label": "test_boolean_type_accepts_bool_rejects_string()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L429", + "id": "readme_test_generator_test_boolean_type_accepts_bool_rejects_string", + "community": 2, + "norm_label": "test_boolean_type_accepts_bool_rejects_string()" + }, + { + "label": "test_unknown_field_type_raises()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L449", + "id": "readme_test_generator_test_unknown_field_type_raises", + "community": 2, + "norm_label": "test_unknown_field_type_raises()" + }, + { + "label": "test_choice_type_rejects_non_string_value()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L459", + "id": "readme_test_generator_test_choice_type_rejects_non_string_value", + "community": 2, + "norm_label": "test_choice_type_rejects_non_string_value()" + }, + { + "label": "test_generate_is_idempotent_byte_identical()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L476", + "id": "readme_test_generator_test_generate_is_idempotent_byte_identical", + "community": 2, + "norm_label": "test_generate_is_idempotent_byte_identical()" + }, + { + "label": "test_generated_at_uses_z_suffix()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L512", + "id": "readme_test_generator_test_generated_at_uses_z_suffix", + "community": 2, + "norm_label": "test_generated_at_uses_z_suffix()" + }, + { + "label": "test_cache_dir_created_on_demand()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L520", + "id": "readme_test_generator_test_cache_dir_created_on_demand", + "community": 2, + "norm_label": "test_cache_dir_created_on_demand()" + }, + { + "label": "test_value_without_declaration_skips_typecheck()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L529", + "id": "readme_test_generator_test_value_without_declaration_skips_typecheck", + "community": 2, + "norm_label": "test_value_without_declaration_skips_typecheck()" + }, + { + "label": "test_optional_empty_field_is_skipped()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L546", + "id": "readme_test_generator_test_optional_empty_field_is_skipped", + "community": 2, + "norm_label": "test_optional_empty_field_is_skipped()" + }, + { + "label": "test_required_field_present_with_none_raises()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L556", + "id": "readme_test_generator_test_required_field_present_with_none_raises", + "community": 2, + "norm_label": "test_required_field_present_with_none_raises()" + }, + { + "label": "test_generated_at_uses_z_for_naive_datetime()", + "file_type": "code", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L569", + "id": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", + "community": 2, + "norm_label": "test_generated_at_uses_z_for_naive_datetime()" + }, + { + "label": "Tests for :class:`exlab_wizard.readme.generator.ReadmeGenerator`. Pins the cont", + "file_type": "rationale", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L1", + "id": "readme_test_generator_rationale_1", + "community": 2, + "norm_label": "tests for :class:`exlab_wizard.readme.generator.readmegenerator`. pins the cont" + }, + { + "label": "Calling generate twice with the same context produces identical bytes.", + "file_type": "rationale", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L479", + "id": "readme_test_generator_rationale_479", + "community": 2, + "norm_label": "calling generate twice with the same context produces identical bytes." + }, + { + "label": "A value whose id has no declaration is permitted (controller-side merge).", + "file_type": "rationale", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L532", + "id": "readme_test_generator_rationale_532", + "community": 2, + "norm_label": "a value whose id has no declaration is permitted (controller-side merge)." + }, + { + "label": "An optional field with an empty value passes; type check is skipped.", + "file_type": "rationale", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L547", + "id": "readme_test_generator_rationale_547", + "community": 2, + "norm_label": "an optional field with an empty value passes; type check is skipped." + }, + { + "label": "``None`` is treated as absent for required fields.", + "file_type": "rationale", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L559", + "id": "readme_test_generator_rationale_559", + "community": 2, + "norm_label": "``none`` is treated as absent for required fields." + }, + { + "label": "Naive datetimes are treated as already-UTC (no timezone gymnastics).", + "file_type": "rationale", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L572", + "id": "readme_test_generator_rationale_572", + "community": 2, + "norm_label": "naive datetimes are treated as already-utc (no timezone gymnastics)." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/readme/__init__.py", + "source_location": "L1", + "id": "tests_unit_readme_init_py", + "community": 332, + "norm_label": "__init__.py" + }, + { + "label": "README generation package. Backend Spec \u00a710.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/__init__.py", + "source_location": "L1", + "id": "readme_init_rationale_1", + "community": 332, + "norm_label": "readme generation package. backend spec \u00a710." + }, + { + "label": "test_creation_apply_config.py", + "file_type": "code", + "source_file": "tests/unit/controller/test_creation_apply_config.py", + "source_location": "L1", + "id": "tests_unit_controller_test_creation_apply_config_py", + "community": 306, + "norm_label": "test_creation_apply_config.py" + }, + { + "label": "_controller()", + "file_type": "code", + "source_file": "tests/unit/controller/test_creation_apply_config.py", + "source_location": "L16", + "id": "controller_test_creation_apply_config_controller", + "community": 306, + "norm_label": "_controller()" + }, + { + "label": "test_apply_config_swaps_config()", + "file_type": "code", + "source_file": "tests/unit/controller/test_creation_apply_config.py", + "source_location": "L29", + "id": "controller_test_creation_apply_config_test_apply_config_swaps_config", + "community": 306, + "norm_label": "test_apply_config_swaps_config()" + }, + { + "label": "test_apply_config_reinjects_plugin_host_only_when_given()", + "file_type": "code", + "source_file": "tests/unit/controller/test_creation_apply_config.py", + "source_location": "L39", + "id": "controller_test_creation_apply_config_test_apply_config_reinjects_plugin_host_only_when_given", + "community": 306, + "norm_label": "test_apply_config_reinjects_plugin_host_only_when_given()" + }, + { + "label": "Unit tests for ``CreationController.apply_config`` (live config reload). The co", + "file_type": "rationale", + "source_file": "tests/unit/controller/test_creation_apply_config.py", + "source_location": "L1", + "id": "controller_test_creation_apply_config_rationale_1", + "community": 306, + "norm_label": "unit tests for ``creationcontroller.apply_config`` (live config reload). the co" + }, + { + "label": "test_state_machine.py", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L1", + "id": "tests_unit_controller_test_state_machine_py", + "community": 16, + "norm_label": "test_state_machine.py" + }, + { + "label": "test_state_to_phase_pending_returns_none()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L25", + "id": "controller_test_state_machine_test_state_to_phase_pending_returns_none", + "community": 16, + "norm_label": "test_state_to_phase_pending_returns_none()" + }, + { + "label": "test_state_to_phase_validating_returns_validating_inputs()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L29", + "id": "controller_test_state_machine_test_state_to_phase_validating_returns_validating_inputs", + "community": 16, + "norm_label": "test_state_to_phase_validating_returns_validating_inputs()" + }, + { + "label": "test_state_to_phase_rendering_returns_rendering_template()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L33", + "id": "controller_test_state_machine_test_state_to_phase_rendering_returns_rendering_template", + "community": 16, + "norm_label": "test_state_to_phase_rendering_returns_rendering_template()" + }, + { + "label": "test_state_to_phase_plugin_pass_returns_running_plugins()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L37", + "id": "controller_test_state_machine_test_state_to_phase_plugin_pass_returns_running_plugins", + "community": 16, + "norm_label": "test_state_to_phase_plugin_pass_returns_running_plugins()" + }, + { + "label": "test_state_to_phase_input_required_returns_input_required()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L41", + "id": "controller_test_state_machine_test_state_to_phase_input_required_returns_input_required", + "community": 16, + "norm_label": "test_state_to_phase_input_required_returns_input_required()" + }, + { + "label": "test_state_to_phase_cache_write_returns_writing_cache()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L45", + "id": "controller_test_state_machine_test_state_to_phase_cache_write_returns_writing_cache", + "community": 16, + "norm_label": "test_state_to_phase_cache_write_returns_writing_cache()" + }, + { + "label": "test_state_to_phase_post_validate_returns_validating_post_creation()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L49", + "id": "controller_test_state_machine_test_state_to_phase_post_validate_returns_validating_post_creation", + "community": 16, + "norm_label": "test_state_to_phase_post_validate_returns_validating_post_creation()" + }, + { + "label": "test_state_to_phase_sync_queued_returns_queueing_nas_sync()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L53", + "id": "controller_test_state_machine_test_state_to_phase_sync_queued_returns_queueing_nas_sync", + "community": 16, + "norm_label": "test_state_to_phase_sync_queued_returns_queueing_nas_sync()" + }, + { + "label": "test_state_to_phase_done_returns_done()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L57", + "id": "controller_test_state_machine_test_state_to_phase_done_returns_done", + "community": 16, + "norm_label": "test_state_to_phase_done_returns_done()" + }, + { + "label": "test_state_to_phase_failed_returns_none()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L61", + "id": "controller_test_state_machine_test_state_to_phase_failed_returns_none", + "community": 16, + "norm_label": "test_state_to_phase_failed_returns_none()" + }, + { + "label": "test_state_to_phase_aborted_returns_none()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L65", + "id": "controller_test_state_machine_test_state_to_phase_aborted_returns_none", + "community": 16, + "norm_label": "test_state_to_phase_aborted_returns_none()" + }, + { + "label": "test_state_to_phase_covers_every_state()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L69", + "id": "controller_test_state_machine_test_state_to_phase_covers_every_state", + "community": 16, + "norm_label": "test_state_to_phase_covers_every_state()" + }, + { + "label": "test_pending_transitions_to_validating()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L82", + "id": "controller_test_state_machine_test_pending_transitions_to_validating", + "community": 16, + "norm_label": "test_pending_transitions_to_validating()" + }, + { + "label": "test_validating_transitions_to_rendering()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L86", + "id": "controller_test_state_machine_test_validating_transitions_to_rendering", + "community": 16, + "norm_label": "test_validating_transitions_to_rendering()" + }, + { + "label": "test_rendering_transitions_to_plugin_pass()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L90", + "id": "controller_test_state_machine_test_rendering_transitions_to_plugin_pass", + "community": 16, + "norm_label": "test_rendering_transitions_to_plugin_pass()" + }, + { + "label": "test_plugin_pass_transitions_to_input_required_and_cache_write()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L94", + "id": "controller_test_state_machine_test_plugin_pass_transitions_to_input_required_and_cache_write", + "community": 16, + "norm_label": "test_plugin_pass_transitions_to_input_required_and_cache_write()" + }, + { + "label": "test_input_required_transitions_back_to_plugin_pass()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L100", + "id": "controller_test_state_machine_test_input_required_transitions_back_to_plugin_pass", + "community": 16, + "norm_label": "test_input_required_transitions_back_to_plugin_pass()" + }, + { + "label": "test_cache_write_transitions_to_post_validate()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L104", + "id": "controller_test_state_machine_test_cache_write_transitions_to_post_validate", + "community": 16, + "norm_label": "test_cache_write_transitions_to_post_validate()" + }, + { + "label": "test_post_validate_transitions_to_sync_queued()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L108", + "id": "controller_test_state_machine_test_post_validate_transitions_to_sync_queued", + "community": 16, + "norm_label": "test_post_validate_transitions_to_sync_queued()" + }, + { + "label": "test_sync_queued_transitions_to_done()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L112", + "id": "controller_test_state_machine_test_sync_queued_transitions_to_done", + "community": 16, + "norm_label": "test_sync_queued_transitions_to_done()" + }, + { + "label": "test_fail_allowed_from_every_non_terminal_state()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L134", + "id": "controller_test_state_machine_test_fail_allowed_from_every_non_terminal_state", + "community": 16, + "norm_label": "test_fail_allowed_from_every_non_terminal_state()" + }, + { + "label": "test_aborted_allowed_from_every_non_terminal_state()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L151", + "id": "controller_test_state_machine_test_aborted_allowed_from_every_non_terminal_state", + "community": 16, + "norm_label": "test_aborted_allowed_from_every_non_terminal_state()" + }, + { + "label": "test_done_is_terminal()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L160", + "id": "controller_test_state_machine_test_done_is_terminal", + "community": 16, + "norm_label": "test_done_is_terminal()" + }, + { + "label": "test_failed_is_terminal()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L164", + "id": "controller_test_state_machine_test_failed_is_terminal", + "community": 16, + "norm_label": "test_failed_is_terminal()" + }, + { + "label": "test_aborted_is_terminal()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L168", + "id": "controller_test_state_machine_test_aborted_is_terminal", + "community": 16, + "norm_label": "test_aborted_is_terminal()" + }, + { + "label": "test_assert_transition_allows_legal_forward_edge()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L177", + "id": "controller_test_state_machine_test_assert_transition_allows_legal_forward_edge", + "community": 16, + "norm_label": "test_assert_transition_allows_legal_forward_edge()" + }, + { + "label": "test_assert_transition_allows_cancel_from_any_non_terminal()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L183", + "id": "controller_test_state_machine_test_assert_transition_allows_cancel_from_any_non_terminal", + "community": 16, + "norm_label": "test_assert_transition_allows_cancel_from_any_non_terminal()" + }, + { + "label": "test_assert_transition_rejects_skipping_a_state()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L188", + "id": "controller_test_state_machine_test_assert_transition_rejects_skipping_a_state", + "community": 16, + "norm_label": "test_assert_transition_rejects_skipping_a_state()" + }, + { + "label": "test_assert_transition_rejects_terminal_to_anything()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L193", + "id": "controller_test_state_machine_test_assert_transition_rejects_terminal_to_anything", + "community": 16, + "norm_label": "test_assert_transition_rejects_terminal_to_anything()" + }, + { + "label": "test_assert_transition_rejects_done_back_to_pipeline()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L198", + "id": "controller_test_state_machine_test_assert_transition_rejects_done_back_to_pipeline", + "community": 16, + "norm_label": "test_assert_transition_rejects_done_back_to_pipeline()" + }, + { + "label": "test_assert_transition_rejects_backwards_through_pipeline()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L203", + "id": "controller_test_state_machine_test_assert_transition_rejects_backwards_through_pipeline", + "community": 16, + "norm_label": "test_assert_transition_rejects_backwards_through_pipeline()" + }, + { + "label": "test_session_state_values_match_lowercase_names()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L213", + "id": "controller_test_state_machine_test_session_state_values_match_lowercase_names", + "community": 16, + "norm_label": "test_session_state_values_match_lowercase_names()" + }, + { + "label": "test_phase_values_use_spec_strings()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L218", + "id": "controller_test_state_machine_test_phase_values_use_spec_strings", + "community": 16, + "norm_label": "test_phase_values_use_spec_strings()" + }, + { + "label": "test_valid_transitions_keys_cover_every_session_state()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L229", + "id": "controller_test_state_machine_test_valid_transitions_keys_cover_every_session_state", + "community": 16, + "norm_label": "test_valid_transitions_keys_cover_every_session_state()" + }, + { + "label": "test_assert_transition_rejects_unknown_source_state()", + "file_type": "code", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L233", + "id": "controller_test_state_machine_test_assert_transition_rejects_unknown_source_state", + "community": 16, + "norm_label": "test_assert_transition_rejects_unknown_source_state()" + }, + { + "label": "Tests for ``exlab_wizard.controller.state_machine``. The state machine is the c", + "file_type": "rationale", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L1", + "id": "controller_test_state_machine_rationale_1", + "community": 16, + "norm_label": "tests for ``exlab_wizard.controller.state_machine``. the state machine is the c" + }, + { + "label": "Every ``SessionState`` value must have an explicit mapping entry.", + "file_type": "rationale", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L70", + "id": "controller_test_state_machine_rationale_70", + "community": 16, + "norm_label": "every ``sessionstate`` value must have an explicit mapping entry." + }, + { + "label": "The guard rejects a state not present in ``VALID_TRANSITIONS``. We can't ea", + "file_type": "rationale", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L234", + "id": "controller_test_state_machine_rationale_234", + "community": 16, + "norm_label": "the guard rejects a state not present in ``valid_transitions``. we can't ea" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/controller/__init__.py", + "source_location": "L1", + "id": "tests_unit_controller_init_py", + "community": 314, + "norm_label": "__init__.py" + }, + { + "label": "Controller package. Backend Spec \u00a74.4.1, \u00a74.7, \u00a74.7.1, \u00a74.8. Re-exports the pub", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/__init__.py", + "source_location": "L1", + "id": "controller_init_rationale_1", + "community": 314, + "norm_label": "controller package. backend spec \u00a74.4.1, \u00a74.7, \u00a74.7.1, \u00a74.8. re-exports the pub" + }, + { + "label": "test_session_store.py", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L1", + "id": "tests_unit_controller_test_session_store_py", + "community": 11, + "norm_label": "test_session_store.py" + }, + { + "label": "test_open_returns_fresh_pending_session()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L36", + "id": "controller_test_session_store_test_open_returns_fresh_pending_session", + "community": 11, + "norm_label": "test_open_returns_fresh_pending_session()" + }, + { + "label": "test_open_assigns_uuid4_session_id()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L46", + "id": "controller_test_session_store_test_open_assigns_uuid4_session_id", + "community": 11, + "norm_label": "test_open_assigns_uuid4_session_id()" + }, + { + "label": "test_open_two_sessions_get_distinct_ids()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L54", + "id": "controller_test_session_store_test_open_two_sessions_get_distinct_ids", + "community": 11, + "norm_label": "test_open_two_sessions_get_distinct_ids()" + }, + { + "label": "test_open_sets_created_at_and_last_heartbeat_to_now()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L61", + "id": "controller_test_session_store_test_open_sets_created_at_and_last_heartbeat_to_now", + "community": 11, + "norm_label": "test_open_sets_created_at_and_last_heartbeat_to_now()" + }, + { + "label": "test_get_returns_none_for_unknown_session_id()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L75", + "id": "controller_test_session_store_test_get_returns_none_for_unknown_session_id", + "community": 11, + "norm_label": "test_get_returns_none_for_unknown_session_id()" + }, + { + "label": "test_get_returns_session_after_open()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L80", + "id": "controller_test_session_store_test_get_returns_session_after_open", + "community": 11, + "norm_label": "test_get_returns_session_after_open()" + }, + { + "label": "test_iter_sorted_returns_pairs_oldest_created_first()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L87", + "id": "controller_test_session_store_test_iter_sorted_returns_pairs_oldest_created_first", + "community": 11, + "norm_label": "test_iter_sorted_returns_pairs_oldest_created_first()" + }, + { + "label": "test_gc_publishes_terminal_frame_to_live_subscriber()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L98", + "id": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", + "community": 11, + "norm_label": "test_gc_publishes_terminal_frame_to_live_subscriber()" + }, + { + "label": "test_project_identifier_prefers_short_id_then_falls_back_to_project_name()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L120", + "id": "controller_test_session_store_test_project_identifier_prefers_short_id_then_falls_back_to_project_name", + "community": 11, + "norm_label": "test_project_identifier_prefers_short_id_then_falls_back_to_project_name()" + }, + { + "label": "test_transition_updates_state_and_phase_together()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L136", + "id": "controller_test_session_store_test_transition_updates_state_and_phase_together", + "community": 11, + "norm_label": "test_transition_updates_state_and_phase_together()" + }, + { + "label": "test_transition_to_input_required_sets_next_action_awaiting_input()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L144", + "id": "controller_test_session_store_test_transition_to_input_required_sets_next_action_awaiting_input", + "community": 11, + "norm_label": "test_transition_to_input_required_sets_next_action_awaiting_input()" + }, + { + "label": "test_transition_back_to_plugin_pass_clears_next_action()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L154", + "id": "controller_test_session_store_test_transition_back_to_plugin_pass_clears_next_action", + "community": 11, + "norm_label": "test_transition_back_to_plugin_pass_clears_next_action()" + }, + { + "label": "test_transition_rejects_unknown_session_id()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L169", + "id": "controller_test_session_store_test_transition_rejects_unknown_session_id", + "community": 11, + "norm_label": "test_transition_rejects_unknown_session_id()" + }, + { + "label": "test_transition_rejects_illegal_state_transition()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L175", + "id": "controller_test_session_store_test_transition_rejects_illegal_state_transition", + "community": 11, + "norm_label": "test_transition_rejects_illegal_state_transition()" + }, + { + "label": "test_attach_event_queue_wires_queue_to_session()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L187", + "id": "controller_test_session_store_test_attach_event_queue_wires_queue_to_session", + "community": 11, + "norm_label": "test_attach_event_queue_wires_queue_to_session()" + }, + { + "label": "test_attach_event_queue_rejects_unknown_session_id()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L195", + "id": "controller_test_session_store_test_attach_event_queue_rejects_unknown_session_id", + "community": 11, + "norm_label": "test_attach_event_queue_rejects_unknown_session_id()" + }, + { + "label": "test_heartbeat_updates_last_heartbeat()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L207", + "id": "controller_test_session_store_test_heartbeat_updates_last_heartbeat", + "community": 11, + "norm_label": "test_heartbeat_updates_last_heartbeat()" + }, + { + "label": "test_heartbeat_is_noop_for_unknown_session()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L217", + "id": "controller_test_session_store_test_heartbeat_is_noop_for_unknown_session", + "community": 11, + "norm_label": "test_heartbeat_is_noop_for_unknown_session()" + }, + { + "label": "test_abandoned_older_than_returns_only_input_required_sessions()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L228", + "id": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", + "community": 11, + "norm_label": "test_abandoned_older_than_returns_only_input_required_sessions()" + }, + { + "label": "test_abandoned_older_than_skips_recent_input_required_sessions()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L250", + "id": "controller_test_session_store_test_abandoned_older_than_skips_recent_input_required_sessions", + "community": 11, + "norm_label": "test_abandoned_older_than_skips_recent_input_required_sessions()" + }, + { + "label": "test_abandoned_older_than_returns_empty_when_no_sessions_exist()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L265", + "id": "controller_test_session_store_test_abandoned_older_than_returns_empty_when_no_sessions_exist", + "community": 11, + "norm_label": "test_abandoned_older_than_returns_empty_when_no_sessions_exist()" + }, + { + "label": "test_close_stores_outcome_for_done_session()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L275", + "id": "controller_test_session_store_test_close_stores_outcome_for_done_session", + "community": 11, + "norm_label": "test_close_stores_outcome_for_done_session()" + }, + { + "label": "test_close_stores_outcome_in_error_for_failed_session()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L294", + "id": "controller_test_session_store_test_close_stores_outcome_in_error_for_failed_session", + "community": 11, + "norm_label": "test_close_stores_outcome_in_error_for_failed_session()" + }, + { + "label": "test_close_is_noop_for_unknown_session()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L304", + "id": "controller_test_session_store_test_close_is_noop_for_unknown_session", + "community": 11, + "norm_label": "test_close_is_noop_for_unknown_session()" + }, + { + "label": "test_gc_loop_closes_abandoned_input_required_session()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L315", + "id": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", + "community": 11, + "norm_label": "test_gc_loop_closes_abandoned_input_required_session()" + }, + { + "label": "test_gc_loop_periodically_runs_and_can_be_cancelled()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L339", + "id": "controller_test_session_store_test_gc_loop_periodically_runs_and_can_be_cancelled", + "community": 11, + "norm_label": "test_gc_loop_periodically_runs_and_can_be_cancelled()" + }, + { + "label": "test_gc_loop_skips_non_input_required_sessions()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L350", + "id": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", + "community": 11, + "norm_label": "test_gc_loop_skips_non_input_required_sessions()" + }, + { + "label": "test_session_is_terminal_for_terminal_states()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L366", + "id": "controller_test_session_store_test_session_is_terminal_for_terminal_states", + "community": 6, + "norm_label": "test_session_is_terminal_for_terminal_states()" + }, + { + "label": "test_session_is_terminal_false_for_non_terminal_states()", + "file_type": "code", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L382", + "id": "controller_test_session_store_test_session_is_terminal_false_for_non_terminal_states", + "community": 6, + "norm_label": "test_session_is_terminal_false_for_non_terminal_states()" + }, + { + "label": "Tests for ``exlab_wizard.controller.session_store``. The session store is the i", + "file_type": "rationale", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L1", + "id": "controller_test_session_store_rationale_1", + "community": 11, + "norm_label": "tests for ``exlab_wizard.controller.session_store``. the session store is the i" + }, + { + "label": "An abandoned-session GC pass must wake a live ``subscribe()`` consumer. The", + "file_type": "rationale", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L99", + "id": "controller_test_session_store_rationale_99", + "community": 11, + "norm_label": "an abandoned-session gc pass must wake a live ``subscribe()`` consumer. the" + }, + { + "label": "The GC pass moves abandoned ``INPUT_REQUIRED`` sessions to ``ABORTED``.", + "file_type": "rationale", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L316", + "id": "controller_test_session_store_rationale_316", + "community": 11, + "norm_label": "the gc pass moves abandoned ``input_required`` sessions to ``aborted``." + }, + { + "label": "The ``gc_loop`` runs forever until cancelled.", + "file_type": "rationale", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L340", + "id": "controller_test_session_store_rationale_340", + "community": 11, + "norm_label": "the ``gc_loop`` runs forever until cancelled." + }, + { + "label": "Even with a stale heartbeat, only INPUT_REQUIRED sessions are GC'd.", + "file_type": "rationale", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L351", + "id": "controller_test_session_store_rationale_351", + "community": 11, + "norm_label": "even with a stale heartbeat, only input_required sessions are gc'd." + }, + { + "label": "test_pywebview_app.py", + "file_type": "code", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L1", + "id": "tests_unit_window_test_pywebview_app_py", + "community": 10, + "norm_label": "test_pywebview_app.py" + }, + { + "label": "_hs()", + "file_type": "code", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L20", + "id": "window_test_pywebview_app_hs", + "community": 10, + "norm_label": "_hs()" + }, + { + "label": "test_build_window_url_uses_loopback()", + "file_type": "code", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L24", + "id": "window_test_pywebview_app_test_build_window_url_uses_loopback", + "community": 10, + "norm_label": "test_build_window_url_uses_loopback()" + }, + { + "label": "test_is_debug_enabled_default()", + "file_type": "code", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L28", + "id": "window_test_pywebview_app_test_is_debug_enabled_default", + "community": 10, + "norm_label": "test_is_debug_enabled_default()" + }, + { + "label": "test_is_debug_enabled_truthy()", + "file_type": "code", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L34", + "id": "window_test_pywebview_app_test_is_debug_enabled_truthy", + "community": 10, + "norm_label": "test_is_debug_enabled_truthy()" + }, + { + "label": "test_is_debug_enabled_falsy()", + "file_type": "code", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L40", + "id": "window_test_pywebview_app_test_is_debug_enabled_falsy", + "community": 10, + "norm_label": "test_is_debug_enabled_falsy()" + }, + { + "label": "test_run_window_calls_create_and_start()", + "file_type": "code", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L45", + "id": "window_test_pywebview_app_test_run_window_calls_create_and_start", + "community": 10, + "norm_label": "test_run_window_calls_create_and_start()" + }, + { + "label": "test_run_window_passes_debug_when_env_var_set()", + "file_type": "code", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L64", + "id": "window_test_pywebview_app_test_run_window_passes_debug_when_env_var_set", + "community": 10, + "norm_label": "test_run_window_passes_debug_when_env_var_set()" + }, + { + "label": "test_run_window_with_only_create_window_uses_default_start()", + "file_type": "code", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L77", + "id": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", + "community": 10, + "norm_label": "test_run_window_with_only_create_window_uses_default_start()" + }, + { + "label": "test_window_title_constant()", + "file_type": "code", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L97", + "id": "window_test_pywebview_app_test_window_title_constant", + "community": 10, + "norm_label": "test_window_title_constant()" + }, + { + "label": "test_import_webview_returns_module()", + "file_type": "code", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L101", + "id": "window_test_pywebview_app_test_import_webview_returns_module", + "community": 10, + "norm_label": "test_import_webview_returns_module()" + }, + { + "label": "Tests for :mod:`exlab_wizard.window.pywebview_app`. Backend Spec \u00a715.3.2.", + "file_type": "rationale", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L1", + "id": "window_test_pywebview_app_rationale_1", + "community": 10, + "norm_label": "tests for :mod:`exlab_wizard.window.pywebview_app`. backend spec \u00a715.3.2." + }, + { + "label": "When ``start`` is omitted the lazy import path is taken.", + "file_type": "rationale", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L80", + "id": "window_test_pywebview_app_rationale_80", + "community": 10, + "norm_label": "when ``start`` is omitted the lazy import path is taken." + }, + { + "label": "The lazy-import helper imports ``webview`` when called.", + "file_type": "rationale", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L102", + "id": "window_test_pywebview_app_rationale_102", + "community": 10, + "norm_label": "the lazy-import helper imports ``webview`` when called." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/window/__init__.py", + "source_location": "L1", + "id": "tests_unit_window_init_py", + "community": 333, + "norm_label": "__init__.py" + }, + { + "label": "Window application package. Backend Spec \u00a74.3.2. Public API: * :func:`run_wind", + "file_type": "rationale", + "source_file": "src/exlab_wizard/window/__init__.py", + "source_location": "L1", + "id": "window_init_rationale_1", + "community": 333, + "norm_label": "window application package. backend spec \u00a74.3.2. public api: * :func:`run_wind" + }, + { + "label": "test_main.py", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L1", + "id": "tests_unit_window_test_main_py", + "community": 10, + "norm_label": "test_main.py" + }, + { + "label": "_write_server_json()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L24", + "id": "window_test_main_write_server_json", + "community": 10, + "norm_label": "_write_server_json()" + }, + { + "label": "test_read_server_handshake_returns_none_when_missing()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L36", + "id": "window_test_main_test_read_server_handshake_returns_none_when_missing", + "community": 10, + "norm_label": "test_read_server_handshake_returns_none_when_missing()" + }, + { + "label": "test_read_server_handshake_returns_handshake()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L40", + "id": "window_test_main_test_read_server_handshake_returns_handshake", + "community": 10, + "norm_label": "test_read_server_handshake_returns_handshake()" + }, + { + "label": "test_read_server_handshake_returns_none_on_invalid_json()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L48", + "id": "window_test_main_test_read_server_handshake_returns_none_on_invalid_json", + "community": 10, + "norm_label": "test_read_server_handshake_returns_none_on_invalid_json()" + }, + { + "label": "test_read_server_handshake_returns_none_on_missing_keys()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L53", + "id": "window_test_main_test_read_server_handshake_returns_none_on_missing_keys", + "community": 10, + "norm_label": "test_read_server_handshake_returns_none_on_missing_keys()" + }, + { + "label": "test_main_returns_stale_when_no_state_file()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L58", + "id": "window_test_main_test_main_returns_stale_when_no_state_file", + "community": 10, + "norm_label": "test_main_returns_stale_when_no_state_file()" + }, + { + "label": "test_main_returns_stale_on_dead_pid()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L67", + "id": "window_test_main_test_main_returns_stale_on_dead_pid", + "community": 10, + "norm_label": "test_main_returns_stale_on_dead_pid()" + }, + { + "label": "test_main_hands_off_with_live_state()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L75", + "id": "window_test_main_test_main_hands_off_with_live_state", + "community": 10, + "norm_label": "test_main_hands_off_with_live_state()" + }, + { + "label": "test_is_pid_alive_for_self()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L89", + "id": "window_test_main_test_is_pid_alive_for_self", + "community": 10, + "norm_label": "test_is_pid_alive_for_self()" + }, + { + "label": "test_is_pid_alive_rejects_zero()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L93", + "id": "window_test_main_test_is_pid_alive_rejects_zero", + "community": 10, + "norm_label": "test_is_pid_alive_rejects_zero()" + }, + { + "label": "test_is_pid_alive_for_dead_pid()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L98", + "id": "window_test_main_test_is_pid_alive_for_dead_pid", + "community": 10, + "norm_label": "test_is_pid_alive_for_dead_pid()" + }, + { + "label": "test_is_pid_alive_falls_through_to_default()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L103", + "id": "window_test_main_test_is_pid_alive_falls_through_to_default", + "community": 10, + "norm_label": "test_is_pid_alive_falls_through_to_default()" + }, + { + "label": "test_default_state_dir_is_used()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L117", + "id": "window_test_main_test_default_state_dir_is_used", + "community": 10, + "norm_label": "test_default_state_dir_is_used()" + }, + { + "label": "test_default_handoff_invokes_run_window()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L123", + "id": "window_test_main_test_default_handoff_invokes_run_window", + "community": 10, + "norm_label": "test_default_handoff_invokes_run_window()" + }, + { + "label": "test_argv_is_ignored()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L139", + "id": "window_test_main_test_argv_is_ignored", + "community": 10, + "norm_label": "test_argv_is_ignored()" + }, + { + "label": "test_server_handshake_round_trip()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L145", + "id": "window_test_main_test_server_handshake_round_trip", + "community": 10, + "norm_label": "test_server_handshake_round_trip()" + }, + { + "label": "test_posix_is_pid_alive_handles_permission()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L152", + "id": "window_test_main_test_posix_is_pid_alive_handles_permission", + "community": 10, + "norm_label": "test_posix_is_pid_alive_handles_permission()" + }, + { + "label": "test_posix_is_pid_alive_handles_dead_pid()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L163", + "id": "window_test_main_test_posix_is_pid_alive_handles_dead_pid", + "community": 10, + "norm_label": "test_posix_is_pid_alive_handles_dead_pid()" + }, + { + "label": "test_is_pid_alive_dispatches_to_windows()", + "file_type": "code", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L173", + "id": "window_test_main_test_is_pid_alive_dispatches_to_windows", + "community": 10, + "norm_label": "test_is_pid_alive_dispatches_to_windows()" + }, + { + "label": "Tests for :mod:`exlab_wizard.window.main`. Backend Spec \u00a715.3.2.", + "file_type": "rationale", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L1", + "id": "window_test_main_rationale_1", + "community": 10, + "norm_label": "tests for :mod:`exlab_wizard.window.main`. backend spec \u00a715.3.2." + }, + { + "label": "Default ``pid_alive`` lookup uses ``is_pid_alive``.", + "file_type": "rationale", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L104", + "id": "window_test_main_rationale_104", + "community": 10, + "norm_label": "default ``pid_alive`` lookup uses ``is_pid_alive``." + }, + { + "label": "A foreign-uid live PID counts as alive.", + "file_type": "rationale", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L153", + "id": "window_test_main_rationale_153", + "community": 10, + "norm_label": "a foreign-uid live pid counts as alive." + }, + { + "label": "When sys.platform is 'win32' the windows implementation runs.", + "file_type": "rationale", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L174", + "id": "window_test_main_rationale_174", + "community": 10, + "norm_label": "when sys.platform is 'win32' the windows implementation runs." + }, + { + "label": "test_setup.py", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L1", + "id": "tests_unit_api_test_setup_py", + "community": 125, + "norm_label": "test_setup.py" + }, + { + "label": "_ready_config()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L28", + "id": "api_test_setup_ready_config", + "community": 125, + "norm_label": "_ready_config()" + }, + { + "label": "_ready_config_without_lims()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L56", + "id": "api_test_setup_ready_config_without_lims", + "community": 1, + "norm_label": "_ready_config_without_lims()" + }, + { + "label": "test_compute_setup_state_returns_ready_for_complete_config()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L81", + "id": "api_test_setup_test_compute_setup_state_returns_ready_for_complete_config", + "community": 125, + "norm_label": "test_compute_setup_state_returns_ready_for_complete_config()" + }, + { + "label": "test_compute_setup_state_no_config()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L88", + "id": "api_test_setup_test_compute_setup_state_no_config", + "community": 125, + "norm_label": "test_compute_setup_state_no_config()" + }, + { + "label": "test_is_creation_blocked_treats_lims_unreachable_as_soft()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L93", + "id": "api_test_setup_test_is_creation_blocked_treats_lims_unreachable_as_soft", + "community": 84, + "norm_label": "test_is_creation_blocked_treats_lims_unreachable_as_soft()" + }, + { + "label": "test_compute_setup_state_returns_incomplete_no_nas_credential()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L103", + "id": "api_test_setup_test_compute_setup_state_returns_incomplete_no_nas_credential", + "community": 125, + "norm_label": "test_compute_setup_state_returns_incomplete_no_nas_credential()" + }, + { + "label": "test_get_setup_status_lists_missing_nas_credential_per_equipment()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L109", + "id": "api_test_setup_test_get_setup_status_lists_missing_nas_credential_per_equipment", + "community": 125, + "norm_label": "test_get_setup_status_lists_missing_nas_credential_per_equipment()" + }, + { + "label": "test_setup_state_gate_returns_503_in_incomplete_states()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L121", + "id": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", + "community": 1, + "norm_label": "test_setup_state_gate_returns_503_in_incomplete_states()" + }, + { + "label": "test_setup_state_gate_lims_unreachable_does_not_block()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L181", + "id": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", + "community": 125, + "norm_label": "test_setup_state_gate_lims_unreachable_does_not_block()" + }, + { + "label": "test_setup_state_gate_no_op_without_dependencies()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L199", + "id": "api_test_setup_test_setup_state_gate_no_op_without_dependencies", + "community": 125, + "norm_label": "test_setup_state_gate_no_op_without_dependencies()" + }, + { + "label": "test_get_setup_status_ready()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L212", + "id": "api_test_setup_test_get_setup_status_ready", + "community": 125, + "norm_label": "test_get_setup_status_ready()" + }, + { + "label": "test_get_setup_status_incomplete_paths()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L226", + "id": "api_test_setup_test_get_setup_status_incomplete_paths", + "community": 125, + "norm_label": "test_get_setup_status_incomplete_paths()" + }, + { + "label": "test_post_test_lims_invokes_probe()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L239", + "id": "api_test_setup_test_post_test_lims_invokes_probe", + "community": 125, + "norm_label": "test_post_test_lims_invokes_probe()" + }, + { + "label": "test_post_test_lims_probe_raises_returns_reason()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L251", + "id": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", + "community": 125, + "norm_label": "test_post_test_lims_probe_raises_returns_reason()" + }, + { + "label": "test_post_test_lims_without_probe_reports_not_wired()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L266", + "id": "api_test_setup_test_post_test_lims_without_probe_reports_not_wired", + "community": 125, + "norm_label": "test_post_test_lims_without_probe_reports_not_wired()" + }, + { + "label": "test_post_test_equipment_requires_equipment_id()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L274", + "id": "api_test_setup_test_post_test_equipment_requires_equipment_id", + "community": 125, + "norm_label": "test_post_test_equipment_requires_equipment_id()" + }, + { + "label": "test_post_test_equipment_with_explicit_equipment_id()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L288", + "id": "api_test_setup_test_post_test_equipment_with_explicit_equipment_id", + "community": 125, + "norm_label": "test_post_test_equipment_with_explicit_equipment_id()" + }, + { + "label": "test_post_test_equipment_unknown_id_returns_404()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L306", + "id": "api_test_setup_test_post_test_equipment_unknown_id_returns_404", + "community": 125, + "norm_label": "test_post_test_equipment_unknown_id_returns_404()" + }, + { + "label": "test_post_autostart_calls_toggle()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L319", + "id": "api_test_setup_test_post_autostart_calls_toggle", + "community": 125, + "norm_label": "test_post_autostart_calls_toggle()" + }, + { + "label": "test_post_autostart_without_toggle_echoes_state()", + "file_type": "code", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L339", + "id": "api_test_setup_test_post_autostart_without_toggle_echoes_state", + "community": 125, + "norm_label": "test_post_autostart_without_toggle_echoes_state()" + }, + { + "label": "Unit tests for ``exlab_wizard.api.setup`` (gate + endpoints).", + "file_type": "rationale", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L1", + "id": "api_test_setup_rationale_1", + "community": 125, + "norm_label": "unit tests for ``exlab_wizard.api.setup`` (gate + endpoints)." + }, + { + "label": "``_ready_config`` minus the LIMS slot, for exercising the LIMS gate.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L57", + "id": "api_test_setup_rationale_57", + "community": 1, + "norm_label": "``_ready_config`` minus the lims slot, for exercising the lims gate." + }, + { + "label": "Equipment with a password-requiring transport but no keyring entry gates.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L104", + "id": "api_test_setup_rationale_104", + "community": 125, + "norm_label": "equipment with a password-requiring transport but no keyring entry gates." + }, + { + "label": "Each non-soft INCOMPLETE_* state returns a 503 with the right code.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L122", + "id": "api_test_setup_rationale_122", + "community": 1, + "norm_label": "each non-soft incomplete_* state returns a 503 with the right code." + }, + { + "label": "test_errors.py", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L1", + "id": "tests_unit_api_test_errors_py", + "community": 20, + "norm_label": "test_errors.py" + }, + { + "label": "_bare_request()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L33", + "id": "api_test_errors_bare_request", + "community": 20, + "norm_label": "_bare_request()" + }, + { + "label": "test_build_envelope_includes_required_fields()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L45", + "id": "api_test_errors_test_build_envelope_includes_required_fields", + "community": 20, + "norm_label": "test_build_envelope_includes_required_fields()" + }, + { + "label": "test_build_envelope_drops_optional_fields_when_absent()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L64", + "id": "api_test_errors_test_build_envelope_drops_optional_fields_when_absent", + "community": 20, + "norm_label": "test_build_envelope_drops_optional_fields_when_absent()" + }, + { + "label": "test_unknown_code_falls_back_to_internal_error()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L70", + "id": "api_test_errors_test_unknown_code_falls_back_to_internal_error", + "community": 20, + "norm_label": "test_unknown_code_falls_back_to_internal_error()" + }, + { + "label": "test_extract_trace_id_uses_header_when_present()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L75", + "id": "api_test_errors_test_extract_trace_id_uses_header_when_present", + "community": 20, + "norm_label": "test_extract_trace_id_uses_header_when_present()" + }, + { + "label": "test_extract_trace_id_generates_when_missing()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L87", + "id": "api_test_errors_test_extract_trace_id_generates_when_missing", + "community": 20, + "norm_label": "test_extract_trace_id_generates_when_missing()" + }, + { + "label": "test_error_response_sets_trace_id_header()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L93", + "id": "api_test_errors_test_error_response_sets_trace_id_header", + "community": 20, + "norm_label": "test_error_response_sets_trace_id_header()" + }, + { + "label": "test_required_codes_are_registered()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L105", + "id": "api_test_errors_test_required_codes_are_registered", + "community": 20, + "norm_label": "test_required_codes_are_registered()" + }, + { + "label": "test_register_exception_handlers_catches_exlab_validation()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L129", + "id": "api_test_errors_test_register_exception_handlers_catches_exlab_validation", + "community": 20, + "norm_label": "test_register_exception_handlers_catches_exlab_validation()" + }, + { + "label": "_PydanticBody", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L147", + "id": "api_test_errors_pydanticbody", + "community": 37, + "norm_label": "_pydanticbody" + }, + { + "label": "BaseModel", + "file_type": "code", + "source_file": "", + "source_location": "", + "id": "basemodel", + "community": 37, + "norm_label": "basemodel" + }, + { + "label": "test_register_exception_handlers_catches_pydantic_validation()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L154", + "id": "api_test_errors_test_register_exception_handlers_catches_pydantic_validation", + "community": 20, + "norm_label": "test_register_exception_handlers_catches_pydantic_validation()" + }, + { + "label": "test_register_exception_handlers_catches_keyring_error()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L170", + "id": "api_test_errors_test_register_exception_handlers_catches_keyring_error", + "community": 20, + "norm_label": "test_register_exception_handlers_catches_keyring_error()" + }, + { + "label": "test_register_exception_handlers_catches_schema_major_mismatch()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L184", + "id": "api_test_errors_test_register_exception_handlers_catches_schema_major_mismatch", + "community": 20, + "norm_label": "test_register_exception_handlers_catches_schema_major_mismatch()" + }, + { + "label": "test_register_exception_handlers_catches_setup_incomplete()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L199", + "id": "api_test_errors_test_register_exception_handlers_catches_setup_incomplete", + "community": 20, + "norm_label": "test_register_exception_handlers_catches_setup_incomplete()" + }, + { + "label": "test_register_exception_handlers_catches_config_error()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L217", + "id": "api_test_errors_test_register_exception_handlers_catches_config_error", + "community": 20, + "norm_label": "test_register_exception_handlers_catches_config_error()" + }, + { + "label": "test_register_exception_handlers_catches_template_load_error()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L231", + "id": "api_test_errors_test_register_exception_handlers_catches_template_load_error", + "community": 20, + "norm_label": "test_register_exception_handlers_catches_template_load_error()" + }, + { + "label": "test_register_exception_handlers_catches_template_core_field_redeclared()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L245", + "id": "api_test_errors_test_register_exception_handlers_catches_template_core_field_redeclared", + "community": 20, + "norm_label": "test_register_exception_handlers_catches_template_core_field_redeclared()" + }, + { + "label": "test_generic_handler_returns_internal_error()", + "file_type": "code", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L259", + "id": "api_test_errors_test_generic_handler_returns_internal_error", + "community": 20, + "norm_label": "test_generic_handler_returns_internal_error()" + }, + { + "label": "Unit tests for the ``exlab_wizard.api.errors`` envelope helpers.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L1", + "id": "api_test_errors_rationale_1", + "community": 20, + "norm_label": "unit tests for the ``exlab_wizard.api.errors`` envelope helpers." + }, + { + "label": "Build a minimal Starlette Request for handler tests.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L34", + "id": "api_test_errors_rationale_34", + "community": 20, + "norm_label": "build a minimal starlette request for handler tests." + }, + { + "label": "Every code in \u00a74.6.3's table must be in :data:`ERROR_CODES`.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L106", + "id": "api_test_errors_rationale_106", + "community": 20, + "norm_label": "every code in \u00a74.6.3's table must be in :data:`error_codes`." + }, + { + "label": "Module-level body class so FastAPI treats ``body: _PydanticBody`` as a JSON", + "file_type": "rationale", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L148", + "id": "api_test_errors_rationale_148", + "community": 37, + "norm_label": "module-level body class so fastapi treats ``body: _pydanticbody`` as a json" + }, + { + "label": "test_config_router.py", + "file_type": "code", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L1", + "id": "tests_unit_api_test_config_router_py", + "community": 112, + "norm_label": "test_config_router.py" + }, + { + "label": "_empty_config()", + "file_type": "code", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L19", + "id": "api_test_config_router_empty_config", + "community": 112, + "norm_label": "_empty_config()" + }, + { + "label": "_ready_config()", + "file_type": "code", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L23", + "id": "api_test_config_router_ready_config", + "community": 1, + "norm_label": "_ready_config()" + }, + { + "label": "test_get_config_returns_loaded_config()", + "file_type": "code", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L44", + "id": "api_test_config_router_test_get_config_returns_loaded_config", + "community": 112, + "norm_label": "test_get_config_returns_loaded_config()" + }, + { + "label": "test_get_config_returns_default_when_none()", + "file_type": "code", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L55", + "id": "api_test_config_router_test_get_config_returns_default_when_none", + "community": 112, + "norm_label": "test_get_config_returns_default_when_none()" + }, + { + "label": "test_put_config_persists_and_reevaluates_state()", + "file_type": "code", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L65", + "id": "api_test_config_router_test_put_config_persists_and_reevaluates_state", + "community": 112, + "norm_label": "test_put_config_persists_and_reevaluates_state()" + }, + { + "label": "test_put_config_invalid_body_returns_422()", + "file_type": "code", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L91", + "id": "api_test_config_router_test_put_config_invalid_body_returns_422", + "community": 112, + "norm_label": "test_put_config_invalid_body_returns_422()" + }, + { + "label": "test_append_equipment_persists_and_re_evaluates_state()", + "file_type": "code", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L107", + "id": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", + "community": 112, + "norm_label": "test_append_equipment_persists_and_re_evaluates_state()" + }, + { + "label": "test_append_equipment_rejects_duplicate_id()", + "file_type": "code", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L138", + "id": "api_test_config_router_test_append_equipment_rejects_duplicate_id", + "community": 112, + "norm_label": "test_append_equipment_rejects_duplicate_id()" + }, + { + "label": "Unit tests for the ``/config`` router.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L1", + "id": "api_test_config_router_rationale_1", + "community": 112, + "norm_label": "unit tests for the ``/config`` router." + }, + { + "label": "test_operations.py", + "file_type": "code", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L1", + "id": "tests_unit_api_test_operations_py", + "community": 224, + "norm_label": "test_operations.py" + }, + { + "label": "_ready_config()", + "file_type": "code", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L23", + "id": "api_test_operations_ready_config", + "community": 224, + "norm_label": "_ready_config()" + }, + { + "label": "_StubController", + "file_type": "code", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L45", + "id": "api_test_operations_stubcontroller", + "community": 224, + "norm_label": "_stubcontroller" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L46", + "id": "api_test_operations_stubcontroller_init", + "community": 224, + "norm_label": ".__init__()" + }, + { + "label": "_make_project_request()", + "file_type": "code", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L50", + "id": "api_test_operations_make_project_request", + "community": 224, + "norm_label": "_make_project_request()" + }, + { + "label": "test_get_operations_lists_in_flight_sessions()", + "file_type": "code", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L67", + "id": "api_test_operations_test_get_operations_lists_in_flight_sessions", + "community": 224, + "norm_label": "test_get_operations_lists_in_flight_sessions()" + }, + { + "label": "test_get_operations_excludes_done_and_aborted()", + "file_type": "code", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L86", + "id": "api_test_operations_test_get_operations_excludes_done_and_aborted", + "community": 224, + "norm_label": "test_get_operations_excludes_done_and_aborted()" + }, + { + "label": "test_get_operations_emits_plugin_name_when_input_required()", + "file_type": "code", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L108", + "id": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", + "community": 224, + "norm_label": "test_get_operations_emits_plugin_name_when_input_required()" + }, + { + "label": "test_get_operations_503_when_controller_missing()", + "file_type": "code", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L127", + "id": "api_test_operations_test_get_operations_503_when_controller_missing", + "community": 224, + "norm_label": "test_get_operations_503_when_controller_missing()" + }, + { + "label": "Unit tests for the ``/operations`` router.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L1", + "id": "api_test_operations_rationale_1", + "community": 224, + "norm_label": "unit tests for the ``/operations`` router." + }, + { + "label": "test_sessions.py", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L1", + "id": "tests_unit_api_test_sessions_py", + "community": 107, + "norm_label": "test_sessions.py" + }, + { + "label": "_ready_config()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L29", + "id": "api_test_sessions_ready_config", + "community": 107, + "norm_label": "_ready_config()" + }, + { + "label": "_StubController", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L53", + "id": "api_test_sessions_stubcontroller", + "community": 107, + "norm_label": "_stubcontroller" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L56", + "id": "api_test_sessions_stubcontroller_init", + "community": 107, + "norm_label": ".__init__()" + }, + { + "label": ".create_project()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L62", + "id": "api_test_sessions_stubcontroller_create_project", + "community": 107, + "norm_label": ".create_project()" + }, + { + "label": ".create_run()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L74", + "id": "api_test_sessions_stubcontroller_create_run", + "community": 107, + "norm_label": ".create_run()" + }, + { + "label": ".status()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L86", + "id": "api_test_sessions_stubcontroller_status", + "community": 107, + "norm_label": ".status()" + }, + { + "label": ".resume()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L97", + "id": "api_test_sessions_stubcontroller_resume", + "community": 107, + "norm_label": ".resume()" + }, + { + "label": ".cancel()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L101", + "id": "api_test_sessions_stubcontroller_cancel", + "community": 107, + "norm_label": ".cancel()" + }, + { + "label": ".subscribe()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L108", + "id": "api_test_sessions_stubcontroller_subscribe", + "community": 107, + "norm_label": ".subscribe()" + }, + { + "label": "test_create_session_project()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L121", + "id": "api_test_sessions_test_create_session_project", + "community": 107, + "norm_label": "test_create_session_project()" + }, + { + "label": "test_create_session_run()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L152", + "id": "api_test_sessions_test_create_session_run", + "community": 107, + "norm_label": "test_create_session_run()" + }, + { + "label": "test_get_session_returns_snapshot()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L178", + "id": "api_test_sessions_test_get_session_returns_snapshot", + "community": 107, + "norm_label": "test_get_session_returns_snapshot()" + }, + { + "label": "test_get_session_404_for_unknown()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L205", + "id": "api_test_sessions_test_get_session_404_for_unknown", + "community": 107, + "norm_label": "test_get_session_404_for_unknown()" + }, + { + "label": "test_post_resume_invokes_controller()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L218", + "id": "api_test_sessions_test_post_resume_invokes_controller", + "community": 107, + "norm_label": "test_post_resume_invokes_controller()" + }, + { + "label": "test_post_cancel_invokes_controller()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L239", + "id": "api_test_sessions_test_post_cancel_invokes_controller", + "community": 107, + "norm_label": "test_post_cancel_invokes_controller()" + }, + { + "label": "test_post_cancel_404_for_unknown()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L256", + "id": "api_test_sessions_test_post_cancel_404_for_unknown", + "community": 107, + "norm_label": "test_post_cancel_404_for_unknown()" + }, + { + "label": "test_post_resume_409_for_terminal_session()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L267", + "id": "api_test_sessions_test_post_resume_409_for_terminal_session", + "community": 107, + "norm_label": "test_post_resume_409_for_terminal_session()" + }, + { + "label": "test_websocket_streams_session_events()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L284", + "id": "api_test_sessions_test_websocket_streams_session_events", + "community": 107, + "norm_label": "test_websocket_streams_session_events()" + }, + { + "label": "test_websocket_unknown_session_closes()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L307", + "id": "api_test_sessions_test_websocket_unknown_session_closes", + "community": 107, + "norm_label": "test_websocket_unknown_session_closes()" + }, + { + "label": "_make_request()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L321", + "id": "api_test_sessions_make_request", + "community": 107, + "norm_label": "_make_request()" + }, + { + "label": "test_create_session_validation_error_returns_422()", + "file_type": "code", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L338", + "id": "api_test_sessions_test_create_session_validation_error_returns_422", + "community": 107, + "norm_label": "test_create_session_validation_error_returns_422()" + }, + { + "label": "Unit tests for the ``/sessions`` router.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L1", + "id": "api_test_sessions_rationale_1", + "community": 107, + "norm_label": "unit tests for the ``/sessions`` router." + }, + { + "label": "Minimal in-memory controller for routing tests.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L54", + "id": "api_test_sessions_rationale_54", + "community": 107, + "norm_label": "minimal in-memory controller for routing tests." + }, + { + "label": "Posting without ``kind`` discriminator must 422.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L339", + "id": "api_test_sessions_rationale_339", + "community": 107, + "norm_label": "posting without ``kind`` discriminator must 422." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/api/__init__.py", + "source_location": "L1", + "id": "tests_unit_api_init_py", + "community": 315, + "norm_label": "__init__.py" + }, + { + "label": "HTTP API package. Backend Spec \u00a74. Public re-exports so callers (the launcher,", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/__init__.py", + "source_location": "L1", + "id": "api_init_rationale_1", + "community": 315, + "norm_label": "http api package. backend spec \u00a74. public re-exports so callers (the launcher," + }, + { + "label": "test_browse.py", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L1", + "id": "tests_unit_api_test_browse_py", + "community": 18, + "norm_label": "test_browse.py" + }, + { + "label": "_config_with_local_root()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L37", + "id": "api_test_browse_config_with_local_root", + "community": 18, + "norm_label": "_config_with_local_root()" + }, + { + "label": "_write_creation_json()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L63", + "id": "api_test_browse_write_creation_json", + "community": 18, + "norm_label": "_write_creation_json()" + }, + { + "label": "test_get_tree_lists_equipment_and_projects()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L85", + "id": "api_test_browse_test_get_tree_lists_equipment_and_projects", + "community": 18, + "norm_label": "test_get_tree_lists_equipment_and_projects()" + }, + { + "label": "test_get_tree_returns_empty_when_no_equipment()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L116", + "id": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", + "community": 1, + "norm_label": "test_get_tree_returns_empty_when_no_equipment()" + }, + { + "label": "test_get_run_returns_detail()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L134", + "id": "api_test_browse_test_get_run_returns_detail", + "community": 18, + "norm_label": "test_get_run_returns_detail()" + }, + { + "label": "test_get_run_404_when_creation_missing()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L153", + "id": "api_test_browse_test_get_run_404_when_creation_missing", + "community": 18, + "norm_label": "test_get_run_404_when_creation_missing()" + }, + { + "label": "test_get_tree_skips_unknown_dirs()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L166", + "id": "api_test_browse_test_get_tree_skips_unknown_dirs", + "community": 18, + "norm_label": "test_get_tree_skips_unknown_dirs()" + }, + { + "label": "test_get_tree_includes_test_runs()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L184", + "id": "api_test_browse_test_get_tree_includes_test_runs", + "community": 18, + "norm_label": "test_get_tree_includes_test_runs()" + }, + { + "label": "test_get_run_returns_422_when_creation_json_malformed()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L204", + "id": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", + "community": 18, + "norm_label": "test_get_run_returns_422_when_creation_json_malformed()" + }, + { + "label": "test_get_run_returns_none_readme_when_absent()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L225", + "id": "api_test_browse_test_get_run_returns_none_readme_when_absent", + "community": 18, + "norm_label": "test_get_run_returns_none_readme_when_absent()" + }, + { + "label": "test_get_folder_returns_immediate_contents()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L244", + "id": "api_test_browse_test_get_folder_returns_immediate_contents", + "community": 18, + "norm_label": "test_get_folder_returns_immediate_contents()" + }, + { + "label": "test_get_folder_404_on_vanished_path()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L265", + "id": "api_test_browse_test_get_folder_404_on_vanished_path", + "community": 18, + "norm_label": "test_get_folder_404_on_vanished_path()" + }, + { + "label": "test_get_tree_includes_sync_mode_on_equipment()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L276", + "id": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", + "community": 18, + "norm_label": "test_get_tree_includes_sync_mode_on_equipment()" + }, + { + "label": "test_get_folder_rejects_path_outside_configured_roots()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L288", + "id": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", + "community": 18, + "norm_label": "test_get_folder_rejects_path_outside_configured_roots()" + }, + { + "label": "_StubJobRow", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L310", + "id": "api_test_browse_stubjobrow", + "community": 236, + "norm_label": "_stubjobrow" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L313", + "id": "api_test_browse_stubjobrow_init", + "community": 236, + "norm_label": ".__init__()" + }, + { + "label": "_StubNasSync", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L326", + "id": "api_test_browse_stubnassync", + "community": 236, + "norm_label": "_stubnassync" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L329", + "id": "api_test_browse_stubnassync_init", + "community": 236, + "norm_label": ".__init__()" + }, + { + "label": ".get_by_run_path()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L332", + "id": "api_test_browse_stubnassync_get_by_run_path", + "community": 236, + "norm_label": ".get_by_run_path()" + }, + { + "label": "test_get_run_log_returns_queue_derived_history()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L338", + "id": "api_test_browse_test_get_run_log_returns_queue_derived_history", + "community": 18, + "norm_label": "test_get_run_log_returns_queue_derived_history()" + }, + { + "label": "test_get_run_log_forwards_failure_extras_in_payload()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L361", + "id": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", + "community": 18, + "norm_label": "test_get_run_log_forwards_failure_extras_in_payload()" + }, + { + "label": "test_get_run_log_empty_history_when_no_queue_job()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L394", + "id": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", + "community": 18, + "norm_label": "test_get_run_log_empty_history_when_no_queue_job()" + }, + { + "label": "test_get_run_log_404_when_run_missing()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L412", + "id": "api_test_browse_test_get_run_log_404_when_run_missing", + "community": 18, + "norm_label": "test_get_run_log_404_when_run_missing()" + }, + { + "label": "test_build_hierarchy_dict_returns_empty_when_config_missing()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L427", + "id": "api_test_browse_test_build_hierarchy_dict_returns_empty_when_config_missing", + "community": 18, + "norm_label": "test_build_hierarchy_dict_returns_empty_when_config_missing()" + }, + { + "label": "test_build_hierarchy_dict_includes_owned_and_relay_equipment()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L433", + "id": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", + "community": 18, + "norm_label": "test_build_hierarchy_dict_includes_owned_and_relay_equipment()" + }, + { + "label": "test_scan_folder_sync_lists_immediate_contents()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L468", + "id": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", + "community": 18, + "norm_label": "test_scan_folder_sync_lists_immediate_contents()" + }, + { + "label": "test_scan_folder_sync_raises_404_for_missing_path()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L487", + "id": "api_test_browse_test_scan_folder_sync_raises_404_for_missing_path", + "community": 18, + "norm_label": "test_scan_folder_sync_raises_404_for_missing_path()" + }, + { + "label": "_seed_run_with_creation()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L508", + "id": "api_test_browse_seed_run_with_creation", + "community": 18, + "norm_label": "_seed_run_with_creation()" + }, + { + "label": "_write_sync_state()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L517", + "id": "api_test_browse_write_sync_state", + "community": 18, + "norm_label": "_write_sync_state()" + }, + { + "label": "test_per_file_status_acquiring_when_not_in_sync_state()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L539", + "id": "api_test_browse_test_per_file_status_acquiring_when_not_in_sync_state", + "community": 18, + "norm_label": "test_per_file_status_acquiring_when_not_in_sync_state()" + }, + { + "label": "test_per_file_status_syncing_when_unverified()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L552", + "id": "api_test_browse_test_per_file_status_syncing_when_unverified", + "community": 18, + "norm_label": "test_per_file_status_syncing_when_unverified()" + }, + { + "label": "test_per_file_status_synced_when_verified_and_on_disk()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L566", + "id": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", + "community": 18, + "norm_label": "test_per_file_status_synced_when_verified_and_on_disk()" + }, + { + "label": "test_per_file_status_on_nas_tombstone_for_cleared_run()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L583", + "id": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", + "community": 18, + "norm_label": "test_per_file_status_on_nas_tombstone_for_cleared_run()" + }, + { + "label": "test_per_file_status_keep_local_flag_carried()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L606", + "id": "api_test_browse_test_per_file_status_keep_local_flag_carried", + "community": 18, + "norm_label": "test_per_file_status_keep_local_flag_carried()" + }, + { + "label": "test_build_run_node_rollup_from_sync_state()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L630", + "id": "api_test_browse_test_build_run_node_rollup_from_sync_state", + "community": 18, + "norm_label": "test_build_run_node_rollup_from_sync_state()" + }, + { + "label": "test_build_run_node_rollup_cleared()", + "file_type": "code", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L646", + "id": "api_test_browse_test_build_run_node_rollup_cleared", + "community": 18, + "norm_label": "test_build_run_node_rollup_cleared()" + }, + { + "label": "Unit tests for the ``/tree`` and ``/run/{path}`` browse endpoints.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L1", + "id": "api_test_browse_rationale_1", + "community": 18, + "norm_label": "unit tests for the ``/tree`` and ``/run/{path}`` browse endpoints." + }, + { + "label": "When config has no equipment the setup gate blocks /tree.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L117", + "id": "api_test_browse_rationale_117", + "community": 1, + "norm_label": "when config has no equipment the setup gate blocks /tree." + }, + { + "label": "``TestRuns`` directory under a project surfaces as ``test_runs`` list.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L185", + "id": "api_test_browse_rationale_185", + "community": 18, + "norm_label": "``testruns`` directory under a project surfaces as ``test_runs`` list." + }, + { + "label": "A creation.json that is present but malformed surfaces as 422.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L205", + "id": "api_test_browse_rationale_205", + "community": 18, + "norm_label": "a creation.json that is present but malformed surfaces as 422." + }, + { + "label": "Run with creation.json but no README.md returns readme: null.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L226", + "id": "api_test_browse_rationale_226", + "community": 18, + "norm_label": "run with creation.json but no readme.md returns readme: null." + }, + { + "label": "Path-confinement guard: only the configured local_root / staging_root / temp", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L289", + "id": "api_test_browse_rationale_289", + "community": 18, + "norm_label": "path-confinement guard: only the configured local_root / staging_root / temp" + }, + { + "label": "A minimal sync-queue job row for the run-log tests.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L311", + "id": "api_test_browse_rationale_311", + "community": 236, + "norm_label": "a minimal sync-queue job row for the run-log tests." + }, + { + "label": "Sync-queue stub serving ``get_by_run_path`` for the log endpoint.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L327", + "id": "api_test_browse_rationale_327", + "community": 236, + "norm_label": "sync-queue stub serving ``get_by_run_path`` for the log endpoint." + }, + { + "label": "A staged run's sync-queue job state is surfaced as the log.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L339", + "id": "api_test_browse_rationale_339", + "community": 18, + "norm_label": "a staged run's sync-queue job state is surfaced as the log." + }, + { + "label": "A failed job row's ``last_error`` / ``attempts`` / ``verify_passes`` / ``nas", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L362", + "id": "api_test_browse_rationale_362", + "community": 18, + "norm_label": "a failed job row's ``last_error`` / ``attempts`` / ``verify_passes`` / ``nas" + }, + { + "label": "A run with no sync-queue job returns an empty history + 'none' state.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L395", + "id": "api_test_browse_rationale_395", + "community": 18, + "norm_label": "a run with no sync-queue job returns an empty history + 'none' state." + }, + { + "label": "A run directory that does not exist returns 404 ``session_not_found``.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L413", + "id": "api_test_browse_rationale_413", + "community": 18, + "norm_label": "a run directory that does not exist returns 404 ``session_not_found``." + }, + { + "label": "The nested dict surfaces both owned and received-equipment roots with their", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L434", + "id": "api_test_browse_rationale_434", + "community": 18, + "norm_label": "the nested dict surfaces both owned and received-equipment roots with their" + }, + { + "label": "``scan_folder_sync`` shares the same shape as the route handler.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L469", + "id": "api_test_browse_rationale_469", + "community": 18, + "norm_label": "``scan_folder_sync`` shares the same shape as the route handler." + }, + { + "label": "A missing folder raises the same 404 HTTPException the route does.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L488", + "id": "api_test_browse_rationale_488", + "community": 18, + "norm_label": "a missing folder raises the same 404 httpexception the route does." + }, + { + "label": "Create a run dir with a creation.json so it is recognised as a run.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L509", + "id": "api_test_browse_rationale_509", + "community": 18, + "norm_label": "create a run dir with a creation.json so it is recognised as a run." + }, + { + "label": "Write a sync_state.json with the given per-file records.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L518", + "id": "api_test_browse_rationale_518", + "community": 18, + "norm_label": "write a sync_state.json with the given per-file records." + }, + { + "label": "A file on disk but absent from sync_state.json reads as ``acquiring``.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L540", + "id": "api_test_browse_rationale_540", + "community": 18, + "norm_label": "a file on disk but absent from sync_state.json reads as ``acquiring``." + }, + { + "label": "A recorded file with verified_at null + on disk reads as ``syncing``.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L553", + "id": "api_test_browse_rationale_553", + "community": 18, + "norm_label": "a recorded file with verified_at null + on disk reads as ``syncing``." + }, + { + "label": "A recorded+verified file still on disk reads as ``synced``.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L567", + "id": "api_test_browse_rationale_567", + "community": 18, + "norm_label": "a recorded+verified file still on disk reads as ``synced``." + }, + { + "label": "A cleared run lists verified-but-absent files as ``on_nas`` tombstones.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L584", + "id": "api_test_browse_rationale_584", + "community": 18, + "norm_label": "a cleared run lists verified-but-absent files as ``on_nas`` tombstones." + }, + { + "label": "A keep_local file carries the flag alongside its sync status.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L607", + "id": "api_test_browse_rationale_607", + "community": 18, + "norm_label": "a keep_local file carries the flag alongside its sync status." + }, + { + "label": "The tree run-node sync_status is the sync_state.json rollup, not creation.json.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L631", + "id": "api_test_browse_rationale_631", + "community": 18, + "norm_label": "the tree run-node sync_status is the sync_state.json rollup, not creation.json." + }, + { + "label": "A cleared run rolls up to ``cleared`` in the tree.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L647", + "id": "api_test_browse_rationale_647", + "community": 18, + "norm_label": "a cleared run rolls up to ``cleared`` in the tree." + }, + { + "label": "test_schemas.py", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L1", + "id": "tests_unit_api_test_schemas_py", + "community": 0, + "norm_label": "test_schemas.py" + }, + { + "label": "_minimal_creation_json()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L53", + "id": "api_test_schemas_minimal_creation_json", + "community": 0, + "norm_label": "_minimal_creation_json()" + }, + { + "label": "test_creation_json_round_trips_through_msgspec()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L87", + "id": "api_test_schemas_test_creation_json_round_trips_through_msgspec", + "community": 0, + "norm_label": "test_creation_json_round_trips_through_msgspec()" + }, + { + "label": "test_creation_json_round_trip_preserves_lims_project_subfields()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L94", + "id": "api_test_schemas_test_creation_json_round_trip_preserves_lims_project_subfields", + "community": 0, + "norm_label": "test_creation_json_round_trip_preserves_lims_project_subfields()" + }, + { + "label": "test_creation_json_round_trip_preserves_plugins_applied_with_isolation()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L110", + "id": "api_test_schemas_test_creation_json_round_trip_preserves_plugins_applied_with_isolation", + "community": 0, + "norm_label": "test_creation_json_round_trip_preserves_plugins_applied_with_isolation()" + }, + { + "label": "test_creation_json_round_trip_preserves_orchestrator_block()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L131", + "id": "api_test_schemas_test_creation_json_round_trip_preserves_orchestrator_block", + "community": 0, + "norm_label": "test_creation_json_round_trip_preserves_orchestrator_block()" + }, + { + "label": "test_creation_json_orchestrator_block_omitted_when_none()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L144", + "id": "api_test_schemas_test_creation_json_orchestrator_block_omitted_when_none", + "community": 0, + "norm_label": "test_creation_json_orchestrator_block_omitted_when_none()" + }, + { + "label": "test_orchestrator_block_carries_relay_discovery_field()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L151", + "id": "api_test_schemas_test_orchestrator_block_carries_relay_discovery_field", + "community": 0, + "norm_label": "test_orchestrator_block_carries_relay_discovery_field()" + }, + { + "label": "test_orchestrator_block_relay_field_defaults_to_none()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L170", + "id": "api_test_schemas_test_orchestrator_block_relay_field_defaults_to_none", + "community": 0, + "norm_label": "test_orchestrator_block_relay_field_defaults_to_none()" + }, + { + "label": "test_creation_json_default_sync_status_is_pending()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L183", + "id": "api_test_schemas_test_creation_json_default_sync_status_is_pending", + "community": 0, + "norm_label": "test_creation_json_default_sync_status_is_pending()" + }, + { + "label": "test_creation_json_default_validation_overrides_is_empty_list()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L188", + "id": "api_test_schemas_test_creation_json_default_validation_overrides_is_empty_list", + "community": 0, + "norm_label": "test_creation_json_default_validation_overrides_is_empty_list()" + }, + { + "label": "test_creation_json_missing_required_field_raises()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L198", + "id": "api_test_schemas_test_creation_json_missing_required_field_raises", + "community": 0, + "norm_label": "test_creation_json_missing_required_field_raises()" + }, + { + "label": "test_creation_json_missing_lims_project_raises()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L206", + "id": "api_test_schemas_test_creation_json_missing_lims_project_raises", + "community": 0, + "norm_label": "test_creation_json_missing_lims_project_raises()" + }, + { + "label": "test_creation_json_unknown_field_is_ignored_on_decode()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L232", + "id": "api_test_schemas_test_creation_json_unknown_field_is_ignored_on_decode", + "community": 0, + "norm_label": "test_creation_json_unknown_field_is_ignored_on_decode()" + }, + { + "label": "test_override_entry_to_dict_emits_revoked_field_explicitly()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L268", + "id": "api_test_schemas_test_override_entry_to_dict_emits_revoked_field_explicitly", + "community": 122, + "norm_label": "test_override_entry_to_dict_emits_revoked_field_explicitly()" + }, + { + "label": "test_tombstone_entry_to_dict_emits_revoked_field_explicitly()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L283", + "id": "api_test_schemas_test_tombstone_entry_to_dict_emits_revoked_field_explicitly", + "community": 0, + "norm_label": "test_tombstone_entry_to_dict_emits_revoked_field_explicitly()" + }, + { + "label": "test_parse_validation_override_entry_returns_override_for_revoked_false()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L296", + "id": "api_test_schemas_test_parse_validation_override_entry_returns_override_for_revoked_false", + "community": 0, + "norm_label": "test_parse_validation_override_entry_returns_override_for_revoked_false()" + }, + { + "label": "test_parse_validation_override_entry_returns_tombstone_for_revoked_true()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L311", + "id": "api_test_schemas_test_parse_validation_override_entry_returns_tombstone_for_revoked_true", + "community": 0, + "norm_label": "test_parse_validation_override_entry_returns_tombstone_for_revoked_true()" + }, + { + "label": "test_creation_json_decodes_validation_overrides_as_list_of_dict()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L326", + "id": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", + "community": 122, + "norm_label": "test_creation_json_decodes_validation_overrides_as_list_of_dict()" + }, + { + "label": "test_readme_fields_json_round_trips()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L363", + "id": "api_test_schemas_test_readme_fields_json_round_trips", + "community": 0, + "norm_label": "test_readme_fields_json_round_trips()" + }, + { + "label": "test_readme_fields_json_optional_fields_default_to_empty()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L379", + "id": "api_test_schemas_test_readme_fields_json_optional_fields_default_to_empty", + "community": 0, + "norm_label": "test_readme_fields_json_optional_fields_default_to_empty()" + }, + { + "label": "test_readme_fields_json_round_trip_preserves_custom_fields()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L391", + "id": "api_test_schemas_test_readme_fields_json_round_trip_preserves_custom_fields", + "community": 0, + "norm_label": "test_readme_fields_json_round_trip_preserves_custom_fields()" + }, + { + "label": "test_readme_fields_json_missing_required_field_raises()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L410", + "id": "api_test_schemas_test_readme_fields_json_missing_required_field_raises", + "community": 0, + "norm_label": "test_readme_fields_json_missing_required_field_raises()" + }, + { + "label": "test_equipment_json_round_trips()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L422", + "id": "api_test_schemas_test_equipment_json_round_trips", + "community": 0, + "norm_label": "test_equipment_json_round_trips()" + }, + { + "label": "test_equipment_json_missing_required_field_raises()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L437", + "id": "api_test_schemas_test_equipment_json_missing_required_field_raises", + "community": 0, + "norm_label": "test_equipment_json_missing_required_field_raises()" + }, + { + "label": "test_test_runs_json_round_trips()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L449", + "id": "api_test_schemas_test_test_runs_json_round_trips", + "community": 0, + "norm_label": "test_test_runs_json_round_trips()" + }, + { + "label": "test_test_runs_json_missing_required_field_raises()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L462", + "id": "api_test_schemas_test_test_runs_json_missing_required_field_raises", + "community": 0, + "norm_label": "test_test_runs_json_missing_required_field_raises()" + }, + { + "label": "_creation_json_payload()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L478", + "id": "api_test_schemas_creation_json_payload", + "community": 0, + "norm_label": "_creation_json_payload()" + }, + { + "label": "test_strenum_field_round_trip_preserves_wire_format()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L556", + "id": "api_test_schemas_test_strenum_field_round_trip_preserves_wire_format", + "community": 0, + "norm_label": "test_strenum_field_round_trip_preserves_wire_format()" + }, + { + "label": "test_lims_project_block_source_round_trip()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L601", + "id": "api_test_schemas_test_lims_project_block_source_round_trip", + "community": 0, + "norm_label": "test_lims_project_block_source_round_trip()" + }, + { + "label": "test_template_block_run_scope_round_trip()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L633", + "id": "api_test_schemas_test_template_block_run_scope_round_trip", + "community": 0, + "norm_label": "test_template_block_run_scope_round_trip()" + }, + { + "label": "test_plugin_applied_status_round_trip()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L659", + "id": "api_test_schemas_test_plugin_applied_status_round_trip", + "community": 0, + "norm_label": "test_plugin_applied_status_round_trip()" + }, + { + "label": "test_test_runs_json_default_run_kind_serializes_as_test()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L675", + "id": "api_test_schemas_test_test_runs_json_default_run_kind_serializes_as_test", + "community": 0, + "norm_label": "test_test_runs_json_default_run_kind_serializes_as_test()" + }, + { + "label": "test_test_runs_json_explicit_run_kind_round_trips()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L692", + "id": "api_test_schemas_test_test_runs_json_explicit_run_kind_round_trips", + "community": 0, + "norm_label": "test_test_runs_json_explicit_run_kind_round_trips()" + }, + { + "label": "test_creation_json_default_sync_status_omitted_on_encode()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L706", + "id": "api_test_schemas_test_creation_json_default_sync_status_omitted_on_encode", + "community": 0, + "norm_label": "test_creation_json_default_sync_status_omitted_on_encode()" + }, + { + "label": "test_lims_project_block_default_source_omitted_on_encode()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L716", + "id": "api_test_schemas_test_lims_project_block_default_source_omitted_on_encode", + "community": 0, + "norm_label": "test_lims_project_block_default_source_omitted_on_encode()" + }, + { + "label": "test_lims_project_status_round_trip()", + "file_type": "code", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L747", + "id": "api_test_schemas_test_lims_project_status_round_trip", + "community": 0, + "norm_label": "test_lims_project_status_round_trip()" + }, + { + "label": "Tests for the msgspec.Struct cache-file types in ``exlab_wizard.api.schemas``.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L1", + "id": "api_test_schemas_rationale_1", + "community": 0, + "norm_label": "tests for the msgspec.struct cache-file types in ``exlab_wizard.api.schemas``." + }, + { + "label": "Build a minimal valid CreationJson at the current version for round-trip tests.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L54", + "id": "api_test_schemas_rationale_54", + "community": 0, + "norm_label": "build a minimal valid creationjson at the current version for round-trip tests." + }, + { + "label": "Spec \u00a711.3: orchestrator is *absent* (not null) in single-equipment mode.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L145", + "id": "api_test_schemas_rationale_145", + "community": 0, + "norm_label": "spec \u00a711.3: orchestrator is *absent* (not null) in single-equipment mode." + }, + { + "label": "Redesign \u00a73.3: pushed creation.json carries the equipment label so the orche", + "file_type": "rationale", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L152", + "id": "api_test_schemas_rationale_152", + "community": 0, + "norm_label": "redesign \u00a73.3: pushed creation.json carries the equipment label so the orche" + }, + { + "label": "Older creation.json files (no relay field) decode cleanly.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L171", + "id": "api_test_schemas_rationale_171", + "community": 0, + "norm_label": "older creation.json files (no relay field) decode cleanly." + }, + { + "label": "``lims_project`` is required at the project- and run-levels for v1.8.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L207", + "id": "api_test_schemas_rationale_207", + "community": 0, + "norm_label": "``lims_project`` is required at the project- and run-levels for v1.8." + }, + { + "label": "forbid_unknown_fields=False -- unknown fields are silently dropped at decode", + "file_type": "rationale", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L233", + "id": "api_test_schemas_rationale_233", + "community": 0, + "norm_label": "forbid_unknown_fields=false -- unknown fields are silently dropped at decode" + }, + { + "label": "Spec \u00a711.3: ``revoked`` is required on every entry. ``omit_defaults`` would", + "file_type": "rationale", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L269", + "id": "api_test_schemas_rationale_269", + "community": 122, + "norm_label": "spec \u00a711.3: ``revoked`` is required on every entry. ``omit_defaults`` would" + }, + { + "label": "Build a minimal valid creation.json JSON document for round-trip tests.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L479", + "id": "api_test_schemas_rationale_479", + "community": 0, + "norm_label": "build a minimal valid creation.json json document for round-trip tests." + }, + { + "label": "Decode an old-format JSON document (bare string at ``field``) into the typed", + "file_type": "rationale", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L563", + "id": "api_test_schemas_rationale_563", + "community": 0, + "norm_label": "decode an old-format json document (bare string at ``field``) into the typed" + }, + { + "label": "The ``run_kind`` default switched from bare ``\"test\"`` to ``RunKind.TEST``;", + "file_type": "rationale", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L676", + "id": "api_test_schemas_rationale_676", + "community": 0, + "norm_label": "the ``run_kind`` default switched from bare ``\"test\"`` to ``runkind.test``;" + }, + { + "label": "``SyncStatus.PENDING`` is the declared default; ``omit_defaults=True`` drops", + "file_type": "rationale", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L707", + "id": "api_test_schemas_rationale_707", + "community": 0, + "norm_label": "``syncstatus.pending`` is the declared default; ``omit_defaults=true`` drops" + }, + { + "label": "``LIMSProjectSource.LIVE`` is the declared default; ``omit_defaults=True`` d", + "file_type": "rationale", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L717", + "id": "api_test_schemas_rationale_717", + "community": 0, + "norm_label": "``limsprojectsource.live`` is the declared default; ``omit_defaults=true`` d" + }, + { + "label": "test_health.py", + "file_type": "code", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L1", + "id": "tests_unit_api_test_health_py", + "community": 108, + "norm_label": "test_health.py" + }, + { + "label": "_ready_config()", + "file_type": "code", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L21", + "id": "api_test_health_ready_config", + "community": 108, + "norm_label": "_ready_config()" + }, + { + "label": "test_health_endpoint_status_ok_with_no_deps()", + "file_type": "code", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L43", + "id": "api_test_health_test_health_endpoint_status_ok_with_no_deps", + "community": 108, + "norm_label": "test_health_endpoint_status_ok_with_no_deps()" + }, + { + "label": "test_health_endpoint_warn_when_lims_unreachable()", + "file_type": "code", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L55", + "id": "api_test_health_test_health_endpoint_warn_when_lims_unreachable", + "community": 108, + "norm_label": "test_health_endpoint_warn_when_lims_unreachable()" + }, + { + "label": "test_health_components_pluck_snapshots()", + "file_type": "code", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L66", + "id": "api_test_health_test_health_components_pluck_snapshots", + "community": 108, + "norm_label": "test_health_components_pluck_snapshots()" + }, + { + "label": "test_top_level_status_aggregates()", + "file_type": "code", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L82", + "id": "api_test_health_test_top_level_status_aggregates", + "community": 108, + "norm_label": "test_top_level_status_aggregates()" + }, + { + "label": "test_component_rollup_handles_none_deps()", + "file_type": "code", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L88", + "id": "api_test_health_test_component_rollup_handles_none_deps", + "community": 108, + "norm_label": "test_component_rollup_handles_none_deps()" + }, + { + "label": "test_health_with_validator_last_audit()", + "file_type": "code", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L93", + "id": "api_test_health_test_health_with_validator_last_audit", + "community": 108, + "norm_label": "test_health_with_validator_last_audit()" + }, + { + "label": "test_health_nas_sync_snapshot_failure_marked_warn()", + "file_type": "code", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L103", + "id": "api_test_health_test_health_nas_sync_snapshot_failure_marked_warn", + "community": 108, + "norm_label": "test_health_nas_sync_snapshot_failure_marked_warn()" + }, + { + "label": "Unit tests for ``exlab_wizard.api.health``.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L1", + "id": "api_test_health_rationale_1", + "community": 108, + "norm_label": "unit tests for ``exlab_wizard.api.health``." + }, + { + "label": "test_staging_router.py", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L1", + "id": "tests_unit_api_test_staging_router_py", + "community": 41, + "norm_label": "test_staging_router.py" + }, + { + "label": "_Handle", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L35", + "id": "api_test_staging_router_handle", + "community": 1, + "norm_label": "_handle" + }, + { + "label": "_StubNasSync", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L41", + "id": "api_test_staging_router_stubnassync", + "community": 41, + "norm_label": "_stubnassync" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L44", + "id": "api_test_staging_router_stubnassync_init", + "community": 41, + "norm_label": ".__init__()" + }, + { + "label": ".enqueue()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L47", + "id": "api_test_staging_router_stubnassync_enqueue", + "community": 41, + "norm_label": ".enqueue()" + }, + { + "label": "_make_config()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L52", + "id": "api_test_staging_router_make_config", + "community": 41, + "norm_label": "_make_config()" + }, + { + "label": "_seed_run()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L77", + "id": "api_test_staging_router_seed_run", + "community": 41, + "norm_label": "_seed_run()" + }, + { + "label": "_write_creation_json()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L90", + "id": "api_test_staging_router_write_creation_json", + "community": 6, + "norm_label": "_write_creation_json()" + }, + { + "label": "_seed_real_run()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L127", + "id": "api_test_staging_router_seed_real_run", + "community": 41, + "norm_label": "_seed_real_run()" + }, + { + "label": "_mark_synced()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L140", + "id": "api_test_staging_router_mark_synced", + "community": 41, + "norm_label": "_mark_synced()" + }, + { + "label": "test_get_staging_returns_empty_when_staging_root_unset()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L155", + "id": "api_test_staging_router_test_get_staging_returns_empty_when_staging_root_unset", + "community": 41, + "norm_label": "test_get_staging_returns_empty_when_staging_root_unset()" + }, + { + "label": "test_force_sync_returns_no_503_when_run_missing()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L165", + "id": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", + "community": 41, + "norm_label": "test_force_sync_returns_no_503_when_run_missing()" + }, + { + "label": "test_clear_returns_no_503_when_run_missing()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L174", + "id": "api_test_staging_router_test_clear_returns_no_503_when_run_missing", + "community": 41, + "norm_label": "test_clear_returns_no_503_when_run_missing()" + }, + { + "label": "test_get_staging_returns_run_rows()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L188", + "id": "api_test_staging_router_test_get_staging_returns_run_rows", + "community": 41, + "norm_label": "test_get_staging_returns_run_rows()" + }, + { + "label": "test_get_staging_derives_current_state_from_sync_state_rollup()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L208", + "id": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", + "community": 41, + "norm_label": "test_get_staging_derives_current_state_from_sync_state_rollup()" + }, + { + "label": "test_get_staging_returns_empty_runs_for_missing_root()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L219", + "id": "api_test_staging_router_test_get_staging_returns_empty_runs_for_missing_root", + "community": 41, + "norm_label": "test_get_staging_returns_empty_runs_for_missing_root()" + }, + { + "label": "test_force_sync_invokes_nas_sync_enqueue()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L234", + "id": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", + "community": 41, + "norm_label": "test_force_sync_invokes_nas_sync_enqueue()" + }, + { + "label": "test_force_sync_returns_503_when_nas_sync_unwired()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L249", + "id": "api_test_staging_router_test_force_sync_returns_503_when_nas_sync_unwired", + "community": 41, + "norm_label": "test_force_sync_returns_503_when_nas_sync_unwired()" + }, + { + "label": "test_clear_endpoint_deletes_synced_run()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L263", + "id": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", + "community": 41, + "norm_label": "test_clear_endpoint_deletes_synced_run()" + }, + { + "label": "test_clear_endpoint_rejects_non_synced_run()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L284", + "id": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", + "community": 41, + "norm_label": "test_clear_endpoint_rejects_non_synced_run()" + }, + { + "label": "test_clear_endpoint_idempotent_for_missing_run()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L296", + "id": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", + "community": 41, + "norm_label": "test_clear_endpoint_idempotent_for_missing_run()" + }, + { + "label": "test_clear_verified_endpoint_clears_only_synced_runs()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L314", + "id": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", + "community": 41, + "norm_label": "test_clear_verified_endpoint_clears_only_synced_runs()" + }, + { + "label": "test_clear_verified_endpoint_returns_empty_when_no_verified_runs()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L340", + "id": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", + "community": 41, + "norm_label": "test_clear_verified_endpoint_returns_empty_when_no_verified_runs()" + }, + { + "label": "test_clear_verified_endpoint_returns_503_when_config_unwired()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L351", + "id": "api_test_staging_router_test_clear_verified_endpoint_returns_503_when_config_unwired", + "community": 112, + "norm_label": "test_clear_verified_endpoint_returns_503_when_config_unwired()" + }, + { + "label": "test_keep_local_toggles_sync_state()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L366", + "id": "api_test_staging_router_test_keep_local_toggles_sync_state", + "community": 41, + "norm_label": "test_keep_local_toggles_sync_state()" + }, + { + "label": "test_keep_local_toggle_off_round_trips()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L389", + "id": "api_test_staging_router_test_keep_local_toggle_off_round_trips", + "community": 41, + "norm_label": "test_keep_local_toggle_off_round_trips()" + }, + { + "label": "test_keep_local_returns_503_when_writer_unwired()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L407", + "id": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", + "community": 41, + "norm_label": "test_keep_local_returns_503_when_writer_unwired()" + }, + { + "label": "test_keep_local_returns_503_when_config_unwired()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L421", + "id": "api_test_staging_router_test_keep_local_returns_503_when_config_unwired", + "community": 112, + "norm_label": "test_keep_local_returns_503_when_config_unwired()" + }, + { + "label": "test_keep_local_rejects_extra_body_fields()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L433", + "id": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", + "community": 41, + "norm_label": "test_keep_local_rejects_extra_body_fields()" + }, + { + "label": "test_keep_local_returns_404_for_path_outside_allowed_roots()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L447", + "id": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", + "community": 41, + "norm_label": "test_keep_local_returns_404_for_path_outside_allowed_roots()" + }, + { + "label": "test_keep_local_returns_404_when_run_has_no_creation_json()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L468", + "id": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", + "community": 41, + "norm_label": "test_keep_local_returns_404_when_run_has_no_creation_json()" + }, + { + "label": "test_keep_local_creates_sync_state_when_cache_dir_absent()", + "file_type": "code", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L486", + "id": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", + "community": 41, + "norm_label": "test_keep_local_creates_sync_state_when_cache_dir_absent()" + }, + { + "label": "Unit tests for the ``/staging`` router. Backend Spec \u00a713.7, \u00a713.8. The operator", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L1", + "id": "api_test_staging_router_rationale_1", + "community": 41, + "norm_label": "unit tests for the ``/staging`` router. backend spec \u00a713.7, \u00a713.8. the operator" + }, + { + "label": "In-memory sync-queue stub recording ``enqueue`` calls (force-sync).", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L42", + "id": "api_test_staging_router_rationale_42", + "community": 41, + "norm_label": "in-memory sync-queue stub recording ``enqueue`` calls (force-sync)." + }, + { + "label": "Write a minimal ``creation.json`` so a dir reads as a real run. The ``POST", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L91", + "id": "api_test_staging_router_rationale_91", + "community": 6, + "norm_label": "write a minimal ``creation.json`` so a dir reads as a real run. the ``post" + }, + { + "label": "Seed a run dir that carries a ``creation.json`` -- a real run.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L134", + "id": "api_test_staging_router_rationale_134", + "community": 41, + "norm_label": "seed a run dir that carries a ``creation.json`` -- a real run." + }, + { + "label": "Write a fully-verified ``sync_state.json`` so the run rolls up to ``synced``.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L141", + "id": "api_test_staging_router_rationale_141", + "community": 41, + "norm_label": "write a fully-verified ``sync_state.json`` so the run rolls up to ``synced``." + }, + { + "label": "A run with no queue job and no directory clears to zeros.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L297", + "id": "api_test_staging_router_rationale_297", + "community": 41, + "norm_label": "a run with no queue job and no directory clears to zeros." + }, + { + "label": "The bulk endpoint clears every fully-``synced`` run and reports paths.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L315", + "id": "api_test_staging_router_rationale_315", + "community": 41, + "norm_label": "the bulk endpoint clears every fully-``synced`` run and reports paths." + }, + { + "label": "No verified rows -> empty cleared_paths, no error.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L341", + "id": "api_test_staging_router_rationale_341", + "community": 41, + "norm_label": "no verified rows -> empty cleared_paths, no error." + }, + { + "label": "A deps without a config raises the standard 503.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L352", + "id": "api_test_staging_router_rationale_352", + "community": 112, + "norm_label": "a deps without a config raises the standard 503." + }, + { + "label": "The endpoint flips ``keep_local`` in the run's ``sync_state.json``.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L367", + "id": "api_test_staging_router_rationale_367", + "community": 41, + "norm_label": "the endpoint flips ``keep_local`` in the run's ``sync_state.json``." + }, + { + "label": "Setting ``keep_local`` False after True clears the flag on disk.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L390", + "id": "api_test_staging_router_rationale_390", + "community": 41, + "norm_label": "setting ``keep_local`` false after true clears the flag on disk." + }, + { + "label": "A deps without a ``sync_state_writer`` raises the standard 503.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L408", + "id": "api_test_staging_router_rationale_408", + "community": 41, + "norm_label": "a deps without a ``sync_state_writer`` raises the standard 503." + }, + { + "label": "A deps without a config raises the standard 503.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L422", + "id": "api_test_staging_router_rationale_422", + "community": 112, + "norm_label": "a deps without a config raises the standard 503." + }, + { + "label": "The request model forbids unknown fields.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L434", + "id": "api_test_staging_router_rationale_434", + "community": 41, + "norm_label": "the request model forbids unknown fields." + }, + { + "label": "A path outside the configured roots is rejected before any write. Operator-", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L448", + "id": "api_test_staging_router_rationale_448", + "community": 41, + "norm_label": "a path outside the configured roots is rejected before any write. operator-" + }, + { + "label": "A dir under an allowed root but without a creation.json is not a run.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L469", + "id": "api_test_staging_router_rationale_469", + "community": 41, + "norm_label": "a dir under an allowed root but without a creation.json is not a run." + }, + { + "label": "The writer mkdir's the .exlab-wizard/ dir -- a real run with only a creation", + "file_type": "rationale", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L487", + "id": "api_test_staging_router_rationale_487", + "community": 41, + "norm_label": "the writer mkdir's the .exlab-wizard/ dir -- a real run with only a creation" + }, + { + "label": "test_events.py", + "file_type": "code", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L1", + "id": "tests_unit_api_test_events_py", + "community": 13, + "norm_label": "test_events.py" + }, + { + "label": "test_phase_event_round_trip()", + "file_type": "code", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L24", + "id": "api_test_events_test_phase_event_round_trip", + "community": 13, + "norm_label": "test_phase_event_round_trip()" + }, + { + "label": "test_progress_event_includes_kind()", + "file_type": "code", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L34", + "id": "api_test_events_test_progress_event_includes_kind", + "community": 13, + "norm_label": "test_progress_event_includes_kind()" + }, + { + "label": "test_input_required_event_carries_fields()", + "file_type": "code", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L41", + "id": "api_test_events_test_input_required_event_carries_fields", + "community": 13, + "norm_label": "test_input_required_event_carries_fields()" + }, + { + "label": "test_warning_event_serializes()", + "file_type": "code", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L52", + "id": "api_test_events_test_warning_event_serializes", + "community": 13, + "norm_label": "test_warning_event_serializes()" + }, + { + "label": "test_done_event_carries_result()", + "file_type": "code", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L62", + "id": "api_test_events_test_done_event_carries_result", + "community": 13, + "norm_label": "test_done_event_carries_result()" + }, + { + "label": "test_failed_event_carries_error()", + "file_type": "code", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L69", + "id": "api_test_events_test_failed_event_carries_error", + "community": 13, + "norm_label": "test_failed_event_carries_error()" + }, + { + "label": "test_snapshot_event_lists_findings()", + "file_type": "code", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L76", + "id": "api_test_events_test_snapshot_event_lists_findings", + "community": 13, + "norm_label": "test_snapshot_event_lists_findings()" + }, + { + "label": "test_delta_event_serializes_three_lists()", + "file_type": "code", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L85", + "id": "api_test_events_test_delta_event_serializes_three_lists", + "community": 13, + "norm_label": "test_delta_event_serializes_three_lists()" + }, + { + "label": "test_event_from_dict_round_trips_each_kind()", + "file_type": "code", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L92", + "id": "api_test_events_test_event_from_dict_round_trips_each_kind", + "community": 13, + "norm_label": "test_event_from_dict_round_trips_each_kind()" + }, + { + "label": "test_event_from_dict_rejects_unknown_kind()", + "file_type": "code", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L111", + "id": "api_test_events_test_event_from_dict_rejects_unknown_kind", + "community": 13, + "norm_label": "test_event_from_dict_rejects_unknown_kind()" + }, + { + "label": "test_event_from_dict_rejects_missing_kind()", + "file_type": "code", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L116", + "id": "api_test_events_test_event_from_dict_rejects_missing_kind", + "community": 13, + "norm_label": "test_event_from_dict_rejects_missing_kind()" + }, + { + "label": "Unit tests for ``exlab_wizard.api.events``.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L1", + "id": "api_test_events_rationale_1", + "community": 13, + "norm_label": "unit tests for ``exlab_wizard.api.events``." + }, + { + "label": "test_problems.py", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L1", + "id": "tests_unit_api_test_problems_py", + "community": 111, + "norm_label": "test_problems.py" + }, + { + "label": "_StubValidator", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L38", + "id": "api_test_problems_stubvalidator", + "community": 111, + "norm_label": "_stubvalidator" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L41", + "id": "api_test_problems_stubvalidator_init", + "community": 111, + "norm_label": ".__init__()" + }, + { + "label": ".query_problems()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L45", + "id": "api_test_problems_stubvalidator_query_problems", + "community": 111, + "norm_label": ".query_problems()" + }, + { + "label": ".audit()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L48", + "id": "api_test_problems_stubvalidator_audit", + "community": 111, + "norm_label": ".audit()" + }, + { + "label": "_ready_config()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L53", + "id": "api_test_problems_ready_config", + "community": 111, + "norm_label": "_ready_config()" + }, + { + "label": "_findings()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L77", + "id": "api_test_problems_findings", + "community": 111, + "norm_label": "_findings()" + }, + { + "label": "_write_creation_json()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L99", + "id": "api_test_problems_write_creation_json", + "community": 6, + "norm_label": "_write_creation_json()" + }, + { + "label": "test_list_problems_returns_findings()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L121", + "id": "api_test_problems_test_list_problems_returns_findings", + "community": 111, + "norm_label": "test_list_problems_returns_findings()" + }, + { + "label": "test_list_problems_filters_by_severity()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L138", + "id": "api_test_problems_test_list_problems_filters_by_severity", + "community": 111, + "norm_label": "test_list_problems_filters_by_severity()" + }, + { + "label": "test_list_problems_filters_by_class()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L151", + "id": "api_test_problems_test_list_problems_filters_by_class", + "community": 111, + "norm_label": "test_list_problems_filters_by_class()" + }, + { + "label": "test_list_problems_with_equipment_scope()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L164", + "id": "api_test_problems_test_list_problems_with_equipment_scope", + "community": 111, + "norm_label": "test_list_problems_with_equipment_scope()" + }, + { + "label": "test_list_problems_unknown_scope_returns_422()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L176", + "id": "api_test_problems_test_list_problems_unknown_scope_returns_422", + "community": 111, + "norm_label": "test_list_problems_unknown_scope_returns_422()" + }, + { + "label": "test_refresh_runs_audit()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L190", + "id": "api_test_problems_test_refresh_runs_audit", + "community": 111, + "norm_label": "test_refresh_runs_audit()" + }, + { + "label": "test_append_override_writes_entry()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L205", + "id": "api_test_problems_test_append_override_writes_entry", + "community": 111, + "norm_label": "test_append_override_writes_entry()" + }, + { + "label": "test_append_override_404_when_path_absent()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L239", + "id": "api_test_problems_test_append_override_404_when_path_absent", + "community": 111, + "norm_label": "test_append_override_404_when_path_absent()" + }, + { + "label": "test_problems_websocket_sends_snapshot_on_connect()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L258", + "id": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", + "community": 111, + "norm_label": "test_problems_websocket_sends_snapshot_on_connect()" + }, + { + "label": "test_problems_websocket_closes_when_no_channel()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L280", + "id": "api_test_problems_test_problems_websocket_closes_when_no_channel", + "community": 111, + "norm_label": "test_problems_websocket_closes_when_no_channel()" + }, + { + "label": "test_refresh_publishes_snapshot_to_channel()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L301", + "id": "api_test_problems_test_refresh_publishes_snapshot_to_channel", + "community": 111, + "norm_label": "test_refresh_publishes_snapshot_to_channel()" + }, + { + "label": "test_revoke_override_writes_tombstone()", + "file_type": "code", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L323", + "id": "api_test_problems_test_revoke_override_writes_tombstone", + "community": 111, + "norm_label": "test_revoke_override_writes_tombstone()" + }, + { + "label": "Unit tests for the ``/problems`` router.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L1", + "id": "api_test_problems_rationale_1", + "community": 111, + "norm_label": "unit tests for the ``/problems`` router." + }, + { + "label": "Test double that returns a canned finding list.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L39", + "id": "api_test_problems_rationale_39", + "community": 111, + "norm_label": "test double that returns a canned finding list." + }, + { + "label": "Connecting to /problems/events emits a snapshot frame immediately.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L259", + "id": "api_test_problems_rationale_259", + "community": 111, + "norm_label": "connecting to /problems/events emits a snapshot frame immediately." + }, + { + "label": "Without an audit channel the WebSocket closes with 1011.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L281", + "id": "api_test_problems_rationale_281", + "community": 111, + "norm_label": "without an audit channel the websocket closes with 1011." + }, + { + "label": "``POST /problems/refresh`` invokes audit and publishes to the channel.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L302", + "id": "api_test_problems_rationale_302", + "community": 111, + "norm_label": "``post /problems/refresh`` invokes audit and publishes to the channel." + }, + { + "label": "test_app.py", + "file_type": "code", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L1", + "id": "tests_unit_api_test_app_py", + "community": 53, + "norm_label": "test_app.py" + }, + { + "label": "_F", + "file_type": "code", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L21", + "id": "api_test_app_f", + "community": 53, + "norm_label": "_f" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L24", + "id": "api_test_app_f_init", + "community": 53, + "norm_label": ".__init__()" + }, + { + "label": "test_diff_findings_added_removed_changed()", + "file_type": "code", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L37", + "id": "api_test_app_test_diff_findings_added_removed_changed", + "community": 53, + "norm_label": "test_diff_findings_added_removed_changed()" + }, + { + "label": "test_finding_to_dict_handles_dataclass_and_dict()", + "file_type": "code", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L48", + "id": "api_test_app_test_finding_to_dict_handles_dataclass_and_dict", + "community": 53, + "norm_label": "test_finding_to_dict_handles_dataclass_and_dict()" + }, + { + "label": "test_audit_channel_publishes_snapshot_to_subscriber()", + "file_type": "code", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L57", + "id": "api_test_app_test_audit_channel_publishes_snapshot_to_subscriber", + "community": 53, + "norm_label": "test_audit_channel_publishes_snapshot_to_subscriber()" + }, + { + "label": "test_audit_channel_publishes_delta()", + "file_type": "code", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L78", + "id": "api_test_app_test_audit_channel_publishes_delta", + "community": 53, + "norm_label": "test_audit_channel_publishes_delta()" + }, + { + "label": "test_audit_channel_late_subscribe_receives_latest_snapshot()", + "file_type": "code", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L101", + "id": "api_test_app_test_audit_channel_late_subscribe_receives_latest_snapshot", + "community": 53, + "norm_label": "test_audit_channel_late_subscribe_receives_latest_snapshot()" + }, + { + "label": "test_audit_channel_close_signals_subscribers()", + "file_type": "code", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L119", + "id": "api_test_app_test_audit_channel_close_signals_subscribers", + "community": 53, + "norm_label": "test_audit_channel_close_signals_subscribers()" + }, + { + "label": "test_create_app_uses_supplied_dependencies()", + "file_type": "code", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L135", + "id": "api_test_app_test_create_app_uses_supplied_dependencies", + "community": 53, + "norm_label": "test_create_app_uses_supplied_dependencies()" + }, + { + "label": "test_create_app_creates_default_dependencies()", + "file_type": "code", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L141", + "id": "api_test_app_test_create_app_creates_default_dependencies", + "community": 53, + "norm_label": "test_create_app_creates_default_dependencies()" + }, + { + "label": "test_create_app_attaches_audit_channel()", + "file_type": "code", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L147", + "id": "api_test_app_test_create_app_attaches_audit_channel", + "community": 53, + "norm_label": "test_create_app_attaches_audit_channel()" + }, + { + "label": "test_lifespan_starts_and_stops_audit_task()", + "file_type": "code", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L154", + "id": "api_test_app_test_lifespan_starts_and_stops_audit_task", + "community": 53, + "norm_label": "test_lifespan_starts_and_stops_audit_task()" + }, + { + "label": "Unit tests for ``exlab_wizard.api.app``: AuditChannel + app factory.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L1", + "id": "api_test_app_rationale_1", + "community": 53, + "norm_label": "unit tests for ``exlab_wizard.api.app``: auditchannel + app factory." + }, + { + "label": "Tiny finding-shaped object for diff tests.", + "file_type": "rationale", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L22", + "id": "api_test_app_rationale_22", + "community": 53, + "norm_label": "tiny finding-shaped object for diff tests." + }, + { + "label": "When start_audit_task=True the lifespan starts the audit task and cancels on clo", + "file_type": "rationale", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L155", + "id": "api_test_app_rationale_155", + "community": 53, + "norm_label": "when start_audit_task=true the lifespan starts the audit task and cancels on clo" + }, + { + "label": "test_nas_client_extra.py", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1", + "id": "tests_unit_sync_test_nas_client_extra_py", + "community": 12, + "norm_label": "test_nas_client_extra.py" + }, + { + "label": "_build_config()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L51", + "id": "sync_test_nas_client_extra_build_config", + "community": 12, + "norm_label": "_build_config()" + }, + { + "label": "_make_creation()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L87", + "id": "sync_test_nas_client_extra_make_creation", + "community": 6, + "norm_label": "_make_creation()" + }, + { + "label": "_populate_run()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L101", + "id": "sync_test_nas_client_extra_populate_run", + "community": 12, + "norm_label": "_populate_run()" + }, + { + "label": "_factory()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L113", + "id": "sync_test_nas_client_extra_factory", + "community": 12, + "norm_label": "_factory()" + }, + { + "label": "_StubKeyring", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L124", + "id": "sync_test_nas_client_extra_stubkeyring", + "community": 7, + "norm_label": "_stubkeyring" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L127", + "id": "sync_test_nas_client_extra_stubkeyring_init", + "community": 7, + "norm_label": ".__init__()" + }, + { + "label": ".get_password()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L130", + "id": "sync_test_nas_client_extra_stubkeyring_get_password", + "community": 7, + "norm_label": ".get_password()" + }, + { + "label": "test_build_transport_driver_sftp()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L135", + "id": "sync_test_nas_client_extra_test_build_transport_driver_sftp", + "community": 7, + "norm_label": "test_build_transport_driver_sftp()" + }, + { + "label": "test_build_transport_driver_smb()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L154", + "id": "sync_test_nas_client_extra_test_build_transport_driver_smb", + "community": 7, + "norm_label": "test_build_transport_driver_smb()" + }, + { + "label": "test_hash_mismatch_first_failure_retries()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L180", + "id": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", + "community": 12, + "norm_label": "test_hash_mismatch_first_failure_retries()" + }, + { + "label": "test_hash_mismatch_second_failure_terminal()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L237", + "id": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", + "community": 12, + "norm_label": "test_hash_mismatch_second_failure_terminal()" + }, + { + "label": "test_cleanup_full_delete_when_retain_cache_false()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L275", + "id": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", + "community": 12, + "norm_label": "test_cleanup_full_delete_when_retain_cache_false()" + }, + { + "label": "test_cleanup_retain_cache_keeps_metadata()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L311", + "id": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", + "community": 12, + "norm_label": "test_cleanup_retain_cache_keeps_metadata()" + }, + { + "label": "test_cleanup_disabled_keeps_files()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L349", + "id": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", + "community": 12, + "norm_label": "test_cleanup_disabled_keeps_files()" + }, + { + "label": "test_cleanup_eligible_when_min_verify_passes_unmet()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L387", + "id": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", + "community": 12, + "norm_label": "test_cleanup_eligible_when_min_verify_passes_unmet()" + }, + { + "label": "test_cleanup_blocked_by_remote_stat()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L423", + "id": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", + "community": 12, + "norm_label": "test_cleanup_blocked_by_remote_stat()" + }, + { + "label": "_client()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L465", + "id": "sync_test_nas_client_extra_client", + "community": 12, + "norm_label": "_client()" + }, + { + "label": "test_delete_local_skips_keep_local_files_incl_nested()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L475", + "id": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", + "community": 12, + "norm_label": "test_delete_local_skips_keep_local_files_incl_nested()" + }, + { + "label": "test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L504", + "id": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", + "community": 12, + "norm_label": "test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file()" + }, + { + "label": "test_delete_local_does_not_descend_or_remove_directory_symlink()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L537", + "id": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", + "community": 12, + "norm_label": "test_delete_local_does_not_descend_or_remove_directory_symlink()" + }, + { + "label": "test_delete_local_keep_local_survives_retain_cache_false()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L563", + "id": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", + "community": 12, + "norm_label": "test_delete_local_keep_local_survives_retain_cache_false()" + }, + { + "label": "test_delete_local_retain_cache_false_drops_whole_run_without_keep_local()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L580", + "id": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", + "community": 12, + "norm_label": "test_delete_local_retain_cache_false_drops_whole_run_without_keep_local()" + }, + { + "label": "test_cleanup_marks_cleared_in_sync_state()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L594", + "id": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", + "community": 12, + "norm_label": "test_cleanup_marks_cleared_in_sync_state()" + }, + { + "label": "test_cleanup_keeps_keep_local_file()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L634", + "id": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", + "community": 12, + "norm_label": "test_cleanup_keeps_keep_local_file()" + }, + { + "label": "test_cleanup_deferred_when_run_only_partially_synced()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L677", + "id": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", + "community": 12, + "norm_label": "test_cleanup_deferred_when_run_only_partially_synced()" + }, + { + "label": "test_worker_marks_failed_when_local_run_vanished()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L734", + "id": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", + "community": 12, + "norm_label": "test_worker_marks_failed_when_local_run_vanished()" + }, + { + "label": "test_verifier_mismatch_first_failure_then_pass()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L780", + "id": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", + "community": 12, + "norm_label": "test_verifier_mismatch_first_failure_then_pass()" + }, + { + "label": "test_verifier_mismatch_second_failure_terminal()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L831", + "id": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", + "community": 12, + "norm_label": "test_verifier_mismatch_second_failure_terminal()" + }, + { + "label": "test_default_push_factory_uses_real_driver()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L871", + "id": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", + "community": 12, + "norm_label": "test_default_push_factory_uses_real_driver()" + }, + { + "label": "test_network_error_records_backoff_retry()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L895", + "id": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", + "community": 12, + "norm_label": "test_network_error_records_backoff_retry()" + }, + { + "label": "test_compute_nas_path_returns_none_when_empty()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L929", + "id": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", + "community": 6, + "norm_label": "test_compute_nas_path_returns_none_when_empty()" + }, + { + "label": "test_build_transport_driver_rejects_unknown_type()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L945", + "id": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", + "community": 7, + "norm_label": "test_build_transport_driver_rejects_unknown_type()" + }, + { + "label": "test_mark_synced_no_op_when_creation_missing()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L963", + "id": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", + "community": 12, + "norm_label": "test_mark_synced_no_op_when_creation_missing()" + }, + { + "label": "test_delete_local_no_op_when_path_missing()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L981", + "id": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", + "community": 12, + "norm_label": "test_delete_local_no_op_when_path_missing()" + }, + { + "label": "test_infer_equipment_id_falls_back_to_first()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L995", + "id": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", + "community": 12, + "norm_label": "test_infer_equipment_id_falls_back_to_first()" + }, + { + "label": "test_partial_batch_credits_verified_files_in_sync_state()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1026", + "id": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", + "community": 12, + "norm_label": "test_partial_batch_credits_verified_files_in_sync_state()" + }, + { + "label": "test_full_batch_credits_every_file_in_sync_state()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1083", + "id": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", + "community": 12, + "norm_label": "test_full_batch_credits_every_file_in_sync_state()" + }, + { + "label": "Extra coverage tests for ``exlab_wizard.sync.nas_client``. These hit the sub-br", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1", + "id": "sync_test_nas_client_extra_rationale_1", + "community": 12, + "norm_label": "extra coverage tests for ``exlab_wizard.sync.nas_client``. these hit the sub-br" + }, + { + "label": "Minimal keyring stub returning a fixed password by username.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L125", + "id": "sync_test_nas_client_extra_rationale_125", + "community": 7, + "norm_label": "minimal keyring stub returning a fixed password by username." + }, + { + "label": "A first hash-mismatch from the transport re-queues without backoff. The fir", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L181", + "id": "sync_test_nas_client_extra_rationale_181", + "community": 12, + "norm_label": "a first hash-mismatch from the transport re-queues without backoff. the fir" + }, + { + "label": "A second consecutive hash-mismatch terminates FAILED.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L238", + "id": "sync_test_nas_client_extra_rationale_238", + "community": 12, + "norm_label": "a second consecutive hash-mismatch terminates failed." + }, + { + "label": "``retain_cache=False`` removes the entire run directory after CLEANED.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L276", + "id": "sync_test_nas_client_extra_rationale_276", + "community": 12, + "norm_label": "``retain_cache=false`` removes the entire run directory after cleaned." + }, + { + "label": "``retain_cache=True`` deletes data files but keeps ``.exlab-wizard/``.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L312", + "id": "sync_test_nas_client_extra_rationale_312", + "community": 12, + "norm_label": "``retain_cache=true`` deletes data files but keeps ``.exlab-wizard/``." + }, + { + "label": "``nas_cleanup.enabled=False`` -> job stays VERIFIED, no cleanup.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L350", + "id": "sync_test_nas_client_extra_rationale_350", + "community": 12, + "norm_label": "``nas_cleanup.enabled=false`` -> job stays verified, no cleanup." + }, + { + "label": "Job lands in CLEANUP_ELIGIBLE when min_verify_passes > current passes.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L388", + "id": "sync_test_nas_client_extra_rationale_388", + "community": 12, + "norm_label": "job lands in cleanup_eligible when min_verify_passes > current passes." + }, + { + "label": "A failing remote_stat keeps the job in CLEANUP_ELIGIBLE, not CLEANED.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L424", + "id": "sync_test_nas_client_extra_rationale_424", + "community": 12, + "norm_label": "a failing remote_stat keeps the job in cleanup_eligible, not cleaned." + }, + { + "label": "Build an un-init'd client for direct ``_delete_local`` calls.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L466", + "id": "sync_test_nas_client_extra_rationale_466", + "community": 12, + "norm_label": "build an un-init'd client for direct ``_delete_local`` calls." + }, + { + "label": "``_delete_local`` keeps ``keep_local`` files, incl. a nested one.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L476", + "id": "sync_test_nas_client_extra_rationale_476", + "community": 12, + "norm_label": "``_delete_local`` keeps ``keep_local`` files, incl. a nested one." + }, + { + "label": "A directory holding only deleted files is pruned (deepest-first); a parent s", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L505", + "id": "sync_test_nas_client_extra_rationale_505", + "community": 12, + "norm_label": "a directory holding only deleted files is pruned (deepest-first); a parent s" + }, + { + "label": "A directory symlink inside the run is left untouched -- its target's content", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L538", + "id": "sync_test_nas_client_extra_rationale_538", + "community": 12, + "norm_label": "a directory symlink inside the run is left untouched -- its target's content" + }, + { + "label": "A ``keep_local`` file survives even when ``retain_cache=False``.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L564", + "id": "sync_test_nas_client_extra_rationale_564", + "community": 12, + "norm_label": "a ``keep_local`` file survives even when ``retain_cache=false``." + }, + { + "label": "With ``retain_cache=False`` and no kept files the run dir is removed.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L583", + "id": "sync_test_nas_client_extra_rationale_583", + "community": 12, + "norm_label": "with ``retain_cache=false`` and no kept files the run dir is removed." + }, + { + "label": "A full cleanup pass stamps ``cleared_at`` in ``sync_state.json``.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L595", + "id": "sync_test_nas_client_extra_rationale_595", + "community": 12, + "norm_label": "a full cleanup pass stamps ``cleared_at`` in ``sync_state.json``." + }, + { + "label": "A file flagged ``keep_local`` survives the cleanup sweep.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L635", + "id": "sync_test_nas_client_extra_rationale_635", + "community": 12, + "norm_label": "a file flagged ``keep_local`` survives the cleanup sweep." + }, + { + "label": "Cleanup does not run while a tracked file remains unverified. A pre-existin", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L678", + "id": "sync_test_nas_client_extra_rationale_678", + "community": 12, + "norm_label": "cleanup does not run while a tracked file remains unverified. a pre-existin" + }, + { + "label": "A run dir deleted between enqueue and worker pick -> FAILED.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L735", + "id": "sync_test_nas_client_extra_rationale_735", + "community": 12, + "norm_label": "a run dir deleted between enqueue and worker pick -> failed." + }, + { + "label": "A rclone-check mismatch retries once, then passes.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L781", + "id": "sync_test_nas_client_extra_rationale_781", + "community": 12, + "norm_label": "a rclone-check mismatch retries once, then passes." + }, + { + "label": "Two consecutive verifier mismatches terminate FAILED.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L832", + "id": "sync_test_nas_client_extra_rationale_832", + "community": 12, + "norm_label": "two consecutive verifier mismatches terminate failed." + }, + { + "label": "When no factory is injected, the client builds the per-equipment driver. We", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L872", + "id": "sync_test_nas_client_extra_rationale_872", + "community": 12, + "norm_label": "when no factory is injected, the client builds the per-equipment driver. we" + }, + { + "label": "Helper returns ``None`` when ``creation.paths.nas`` is the empty string.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L930", + "id": "sync_test_nas_client_extra_rationale_930", + "community": 6, + "norm_label": "helper returns ``none`` when ``creation.paths.nas`` is the empty string." + }, + { + "label": "An unknown transport type raises ValueError from the helper.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L946", + "id": "sync_test_nas_client_extra_rationale_946", + "community": 7, + "norm_label": "an unknown transport type raises valueerror from the helper." + }, + { + "label": "``_mark_synced`` is a no-op when ``creation.json`` doesn't exist.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L964", + "id": "sync_test_nas_client_extra_rationale_964", + "community": 12, + "norm_label": "``_mark_synced`` is a no-op when ``creation.json`` doesn't exist." + }, + { + "label": "``_delete_local`` is a no-op when the run directory is already gone.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L982", + "id": "sync_test_nas_client_extra_rationale_982", + "community": 12, + "norm_label": "``_delete_local`` is a no-op when the run directory is already gone." + }, + { + "label": "If neither ``creation.paths.local`` nor ``run_path`` contains a configured e", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L996", + "id": "sync_test_nas_client_extra_rationale_996", + "community": 12, + "norm_label": "if neither ``creation.paths.local`` nor ``run_path`` contains a configured e" + }, + { + "label": "A batch where one file fails verification still credits the others in ``sync", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1027", + "id": "sync_test_nas_client_extra_rationale_1027", + "community": 12, + "norm_label": "a batch where one file fails verification still credits the others in ``sync" + }, + { + "label": "A fully-successful batch credits every verified file in sync_state.json.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1084", + "id": "sync_test_nas_client_extra_rationale_1084", + "community": 12, + "norm_label": "a fully-successful batch credits every verified file in sync_state.json." + }, + { + "label": "test_transports.py", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L1", + "id": "tests_unit_sync_test_transports_py", + "community": 103, + "norm_label": "test_transports.py" + }, + { + "label": "stub_dir()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L33", + "id": "sync_test_transports_stub_dir", + "community": 103, + "norm_label": "stub_dir()" + }, + { + "label": "record_argv()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L47", + "id": "sync_test_transports_record_argv", + "community": 103, + "norm_label": "record_argv()" + }, + { + "label": "_read_recorded_argvs()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L54", + "id": "sync_test_transports_read_recorded_argvs", + "community": 103, + "norm_label": "_read_recorded_argvs()" + }, + { + "label": "test_rclone_push_success()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L64", + "id": "sync_test_transports_test_rclone_push_success", + "community": 103, + "norm_label": "test_rclone_push_success()" + }, + { + "label": "test_rclone_push_network_error_is_retryable()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L80", + "id": "sync_test_transports_test_rclone_push_network_error_is_retryable", + "community": 103, + "norm_label": "test_rclone_push_network_error_is_retryable()" + }, + { + "label": "test_rclone_push_auth_error_is_terminal()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L92", + "id": "sync_test_transports_test_rclone_push_auth_error_is_terminal", + "community": 103, + "norm_label": "test_rclone_push_auth_error_is_terminal()" + }, + { + "label": "test_rclone_push_hash_mismatch()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L104", + "id": "sync_test_transports_test_rclone_push_hash_mismatch", + "community": 103, + "norm_label": "test_rclone_push_hash_mismatch()" + }, + { + "label": "test_rclone_push_missing_binary_raises()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L116", + "id": "sync_test_transports_test_rclone_push_missing_binary_raises", + "community": 103, + "norm_label": "test_rclone_push_missing_binary_raises()" + }, + { + "label": "test_rclone_push_forwards_env()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L123", + "id": "sync_test_transports_test_rclone_push_forwards_env", + "community": 103, + "norm_label": "test_rclone_push_forwards_env()" + }, + { + "label": "test_rclone_argv_includes_checksum_flag()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L160", + "id": "sync_test_transports_test_rclone_argv_includes_checksum_flag", + "community": 103, + "norm_label": "test_rclone_argv_includes_checksum_flag()" + }, + { + "label": "test_rclone_argv_includes_bwlimit_when_set()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L176", + "id": "sync_test_transports_test_rclone_argv_includes_bwlimit_when_set", + "community": 103, + "norm_label": "test_rclone_argv_includes_bwlimit_when_set()" + }, + { + "label": "test_rclone_argv_omits_bwlimit_when_none()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L193", + "id": "sync_test_transports_test_rclone_argv_omits_bwlimit_when_none", + "community": 103, + "norm_label": "test_rclone_argv_omits_bwlimit_when_none()" + }, + { + "label": "test_rclone_argv_includes_files_from_when_set()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L208", + "id": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", + "community": 103, + "norm_label": "test_rclone_argv_includes_files_from_when_set()" + }, + { + "label": "test_rclone_argv_omits_files_from_when_none()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L227", + "id": "sync_test_transports_test_rclone_argv_omits_files_from_when_none", + "community": 103, + "norm_label": "test_rclone_argv_omits_files_from_when_none()" + }, + { + "label": "test_obscure_returns_stdout_stripped()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L247", + "id": "sync_test_transports_test_obscure_returns_stdout_stripped", + "community": 171, + "norm_label": "test_obscure_returns_stdout_stripped()" + }, + { + "label": "test_obscure_missing_binary_raises_auth()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L257", + "id": "sync_test_transports_test_obscure_missing_binary_raises_auth", + "community": 171, + "norm_label": "test_obscure_missing_binary_raises_auth()" + }, + { + "label": "test_about_success()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L268", + "id": "sync_test_transports_test_about_success", + "community": 103, + "norm_label": "test_about_success()" + }, + { + "label": "test_about_auth_failure()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L277", + "id": "sync_test_transports_test_about_auth_failure", + "community": 103, + "norm_label": "test_about_auth_failure()" + }, + { + "label": "test_parse_combined_handles_all_prefixes()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L291", + "id": "sync_test_transports_test_parse_combined_handles_all_prefixes", + "community": 218, + "norm_label": "test_parse_combined_handles_all_prefixes()" + }, + { + "label": "test_parse_combined_empty_returns_empty_result()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L301", + "id": "sync_test_transports_test_parse_combined_empty_returns_empty_result", + "community": 218, + "norm_label": "test_parse_combined_empty_returns_empty_result()" + }, + { + "label": "test_parse_combined_tolerates_blank_lines_and_unknown_prefix()", + "file_type": "code", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L305", + "id": "sync_test_transports_test_parse_combined_tolerates_blank_lines_and_unknown_prefix", + "community": 218, + "norm_label": "test_parse_combined_tolerates_blank_lines_and_unknown_prefix()" + }, + { + "label": "Tests for the rclone transport driver. Backend Spec \u00a77.1.3, \u00a77.1.5. The driver", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L1", + "id": "sync_test_transports_rationale_1", + "community": 103, + "norm_label": "tests for the rclone transport driver. backend spec \u00a77.1.3, \u00a77.1.5. the driver" + }, + { + "label": "Install the rclone stub under ``tmp_path/bin`` and prepend to PATH.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L34", + "id": "sync_test_transports_rationale_34", + "community": 103, + "norm_label": "install the rclone stub under ``tmp_path/bin`` and prepend to path." + }, + { + "label": "Tell the stub to append every invocation's argv to a log file.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L48", + "id": "sync_test_transports_rationale_48", + "community": 103, + "norm_label": "tell the stub to append every invocation's argv to a log file." + }, + { + "label": "Return the recorded argv lists, in invocation order.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L55", + "id": "sync_test_transports_rationale_55", + "community": 103, + "norm_label": "return the recorded argv lists, in invocation order." + }, + { + "label": "A missing binary raises :class:`TransportError`, not a retry result.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L117", + "id": "sync_test_transports_rationale_117", + "community": 103, + "norm_label": "a missing binary raises :class:`transporterror`, not a retry result." + }, + { + "label": "``env`` arrives in the subprocess; ``mask_for_log`` redacts the password. T", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L129", + "id": "sync_test_transports_rationale_129", + "community": 103, + "norm_label": "``env`` arrives in the subprocess; ``mask_for_log`` redacts the password. t" + }, + { + "label": "test_bandwidth.py", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L1", + "id": "tests_unit_sync_test_bandwidth_py", + "community": 73, + "norm_label": "test_bandwidth.py" + }, + { + "label": "_wed_at()", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L20", + "id": "sync_test_bandwidth_wed_at", + "community": 73, + "norm_label": "_wed_at()" + }, + { + "label": "test_mbps_to_kibps_uses_spec_formula()", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L25", + "id": "sync_test_bandwidth_test_mbps_to_kibps_uses_spec_formula", + "community": 73, + "norm_label": "test_mbps_to_kibps_uses_spec_formula()" + }, + { + "label": "test_mbps_to_kibps_floor_for_tiny_input()", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L31", + "id": "sync_test_bandwidth_test_mbps_to_kibps_floor_for_tiny_input", + "community": 73, + "norm_label": "test_mbps_to_kibps_floor_for_tiny_input()" + }, + { + "label": "test_mbps_to_kibps_zero()", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L36", + "id": "sync_test_bandwidth_test_mbps_to_kibps_zero", + "community": 73, + "norm_label": "test_mbps_to_kibps_zero()" + }, + { + "label": "test_day_name_to_index_covers_all_days()", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L41", + "id": "sync_test_bandwidth_test_day_name_to_index_covers_all_days", + "community": 73, + "norm_label": "test_day_name_to_index_covers_all_days()" + }, + { + "label": "test_is_window_active_inside_window()", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L47", + "id": "sync_test_bandwidth_test_is_window_active_inside_window", + "community": 73, + "norm_label": "test_is_window_active_inside_window()" + }, + { + "label": "test_is_window_active_outside_window()", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L52", + "id": "sync_test_bandwidth_test_is_window_active_outside_window", + "community": 73, + "norm_label": "test_is_window_active_outside_window()" + }, + { + "label": "test_is_window_active_wrong_weekday()", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L58", + "id": "sync_test_bandwidth_test_is_window_active_wrong_weekday", + "community": 73, + "norm_label": "test_is_window_active_wrong_weekday()" + }, + { + "label": "test_effective_unlimited_when_upload_mbps_none()", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L64", + "id": "sync_test_bandwidth_test_effective_unlimited_when_upload_mbps_none", + "community": 73, + "norm_label": "test_effective_unlimited_when_upload_mbps_none()" + }, + { + "label": "test_effective_unlimited_when_outside_schedule()", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L69", + "id": "sync_test_bandwidth_test_effective_unlimited_when_outside_schedule", + "community": 73, + "norm_label": "test_effective_unlimited_when_outside_schedule()" + }, + { + "label": "test_effective_throttled_inside_schedule()", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L78", + "id": "sync_test_bandwidth_test_effective_throttled_inside_schedule", + "community": 73, + "norm_label": "test_effective_throttled_inside_schedule()" + }, + { + "label": "test_effective_throttled_when_no_schedule()", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L86", + "id": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", + "community": 73, + "norm_label": "test_effective_throttled_when_no_schedule()" + }, + { + "label": "test_effective_throttled_in_first_matching_window()", + "file_type": "code", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L92", + "id": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", + "community": 73, + "norm_label": "test_effective_throttled_in_first_matching_window()" + }, + { + "label": "Tests for ``exlab_wizard.sync.bandwidth``. Backend Spec \u00a77.1.7. The schedule ev", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L1", + "id": "sync_test_bandwidth_rationale_1", + "community": 73, + "norm_label": "tests for ``exlab_wizard.sync.bandwidth``. backend spec \u00a77.1.7. the schedule ev" + }, + { + "label": "A Wednesday in 2026 (weekday 2) at the requested local time.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L21", + "id": "sync_test_bandwidth_rationale_21", + "community": 73, + "norm_label": "a wednesday in 2026 (weekday 2) at the requested local time." + }, + { + "label": "Spec \u00a77.1.7: ``K = upload_mbps * 1024 / 8``.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L26", + "id": "sync_test_bandwidth_rationale_26", + "community": 73, + "norm_label": "spec \u00a77.1.7: ``k = upload_mbps * 1024 / 8``." + }, + { + "label": "A tiny but positive input rounds up to 1 KiB/s, not 0.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L32", + "id": "sync_test_bandwidth_rationale_32", + "community": 73, + "norm_label": "a tiny but positive input rounds up to 1 kib/s, not 0." + }, + { + "label": "Weekday filtering rejects days not in ``window.days``.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L59", + "id": "sync_test_bandwidth_rationale_59", + "community": 73, + "norm_label": "weekday filtering rejects days not in ``window.days``." + }, + { + "label": "A cap with no schedule applies always.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L87", + "id": "sync_test_bandwidth_rationale_87", + "community": 73, + "norm_label": "a cap with no schedule applies always." + }, + { + "label": "test_cleanup.py", + "file_type": "code", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L1", + "id": "tests_unit_sync_test_cleanup_py", + "community": 93, + "norm_label": "test_cleanup.py" + }, + { + "label": "_job()", + "file_type": "code", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L22", + "id": "sync_test_cleanup_job", + "community": 93, + "norm_label": "_job()" + }, + { + "label": "_config()", + "file_type": "code", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L38", + "id": "sync_test_cleanup_config", + "community": 93, + "norm_label": "_config()" + }, + { + "label": "test_all_interlocks_pass()", + "file_type": "code", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L53", + "id": "sync_test_cleanup_test_all_interlocks_pass", + "community": 93, + "norm_label": "test_all_interlocks_pass()" + }, + { + "label": "test_min_verify_passes_blocks()", + "file_type": "code", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L65", + "id": "sync_test_cleanup_test_min_verify_passes_blocks", + "community": 93, + "norm_label": "test_min_verify_passes_blocks()" + }, + { + "label": "test_min_age_hours_blocks()", + "file_type": "code", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L77", + "id": "sync_test_cleanup_test_min_age_hours_blocks", + "community": 93, + "norm_label": "test_min_age_hours_blocks()" + }, + { + "label": "test_remote_stat_failure_blocks()", + "file_type": "code", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L90", + "id": "sync_test_cleanup_test_remote_stat_failure_blocks", + "community": 93, + "norm_label": "test_remote_stat_failure_blocks()" + }, + { + "label": "test_recent_revocation_blocks()", + "file_type": "code", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L102", + "id": "sync_test_cleanup_test_recent_revocation_blocks", + "community": 93, + "norm_label": "test_recent_revocation_blocks()" + }, + { + "label": "test_old_revocation_does_not_block()", + "file_type": "code", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L124", + "id": "sync_test_cleanup_test_old_revocation_does_not_block", + "community": 93, + "norm_label": "test_old_revocation_does_not_block()" + }, + { + "label": "test_missing_verified_at_blocks()", + "file_type": "code", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L145", + "id": "sync_test_cleanup_test_missing_verified_at_blocks", + "community": 93, + "norm_label": "test_missing_verified_at_blocks()" + }, + { + "label": "test_has_recent_revocation_with_malformed_timestamp_is_recent()", + "file_type": "code", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L157", + "id": "sync_test_cleanup_test_has_recent_revocation_with_malformed_timestamp_is_recent", + "community": 93, + "norm_label": "test_has_recent_revocation_with_malformed_timestamp_is_recent()" + }, + { + "label": "test_has_recent_revocation_ignores_non_tombstones()", + "file_type": "code", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L172", + "id": "sync_test_cleanup_test_has_recent_revocation_ignores_non_tombstones", + "community": 93, + "norm_label": "test_has_recent_revocation_ignores_non_tombstones()" + }, + { + "label": "Tests for ``exlab_wizard.sync.cleanup``. Backend Spec \u00a77.1.6. Each interlock mu", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L1", + "id": "sync_test_cleanup_rationale_1", + "community": 93, + "norm_label": "tests for ``exlab_wizard.sync.cleanup``. backend spec \u00a77.1.6. each interlock mu" + }, + { + "label": "Happy path: cleanup is allowed.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L54", + "id": "sync_test_cleanup_rationale_54", + "community": 93, + "norm_label": "happy path: cleanup is allowed." + }, + { + "label": "Failing the verify-passes threshold blocks cleanup.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L66", + "id": "sync_test_cleanup_rationale_66", + "community": 93, + "norm_label": "failing the verify-passes threshold blocks cleanup." + }, + { + "label": "A verify that happened too recently blocks cleanup.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L78", + "id": "sync_test_cleanup_rationale_78", + "community": 93, + "norm_label": "a verify that happened too recently blocks cleanup." + }, + { + "label": "An unreachable NAS blocks cleanup.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L91", + "id": "sync_test_cleanup_rationale_91", + "community": 93, + "norm_label": "an unreachable nas blocks cleanup." + }, + { + "label": "A tombstone written within ``min_age_hours`` blocks cleanup.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L103", + "id": "sync_test_cleanup_rationale_103", + "community": 93, + "norm_label": "a tombstone written within ``min_age_hours`` blocks cleanup." + }, + { + "label": "A verified_at column missing or malformed blocks cleanup.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L146", + "id": "sync_test_cleanup_rationale_146", + "community": 93, + "norm_label": "a verified_at column missing or malformed blocks cleanup." + }, + { + "label": "A malformed ``recorded_at`` is treated as recent (fail-safe).", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L158", + "id": "sync_test_cleanup_rationale_158", + "community": 93, + "norm_label": "a malformed ``recorded_at`` is treated as recent (fail-safe)." + }, + { + "label": "An override entry without ``revoked: True`` is ignored.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L173", + "id": "sync_test_cleanup_rationale_173", + "community": 93, + "norm_label": "an override entry without ``revoked: true`` is ignored." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/sync/__init__.py", + "source_location": "L1", + "id": "tests_unit_sync_init_py", + "community": 334, + "norm_label": "__init__.py" + }, + { + "label": "Sync package. Backend Spec \u00a77. Public re-exports for the NAS sync subsystem. Ca", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/__init__.py", + "source_location": "L1", + "id": "sync_init_rationale_1", + "community": 334, + "norm_label": "sync package. backend spec \u00a77. public re-exports for the nas sync subsystem. ca" + }, + { + "label": "test_queue.py", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L1", + "id": "tests_unit_sync_test_queue_py", + "community": 68, + "norm_label": "test_queue.py" + }, + { + "label": "queue()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L26", + "id": "sync_test_queue_queue", + "community": 94, + "norm_label": "queue()" + }, + { + "label": "test_insert_creates_queued_row()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L35", + "id": "sync_test_queue_test_insert_creates_queued_row", + "community": 68, + "norm_label": "test_insert_creates_queued_row()" + }, + { + "label": "test_insert_unique_constraint()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L45", + "id": "sync_test_queue_test_insert_unique_constraint", + "community": 68, + "norm_label": "test_insert_unique_constraint()" + }, + { + "label": "test_files_column_round_trips()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L52", + "id": "sync_test_queue_test_files_column_round_trips", + "community": 68, + "norm_label": "test_files_column_round_trips()" + }, + { + "label": "test_files_column_defaults_to_empty()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L62", + "id": "sync_test_queue_test_files_column_defaults_to_empty", + "community": 68, + "norm_label": "test_files_column_defaults_to_empty()" + }, + { + "label": "test_requeue_with_files_resets_terminal_job()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L71", + "id": "sync_test_queue_test_requeue_with_files_resets_terminal_job", + "community": 68, + "norm_label": "test_requeue_with_files_resets_terminal_job()" + }, + { + "label": "test_get_by_id_and_run_path()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L83", + "id": "sync_test_queue_test_get_by_id_and_run_path", + "community": 68, + "norm_label": "test_get_by_id_and_run_path()" + }, + { + "label": "test_get_missing_returns_none()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L92", + "id": "sync_test_queue_test_get_missing_returns_none", + "community": 68, + "norm_label": "test_get_missing_returns_none()" + }, + { + "label": "test_transition_forward()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L97", + "id": "sync_test_queue_test_transition_forward", + "community": 68, + "norm_label": "test_transition_forward()" + }, + { + "label": "test_transition_unknown_raises()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L106", + "id": "sync_test_queue_test_transition_unknown_raises", + "community": 68, + "norm_label": "test_transition_unknown_raises()" + }, + { + "label": "test_transition_increments_verify_passes()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L111", + "id": "sync_test_queue_test_transition_increments_verify_passes", + "community": 68, + "norm_label": "test_transition_increments_verify_passes()" + }, + { + "label": "test_record_failure_increments_attempts()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L123", + "id": "sync_test_queue_test_record_failure_increments_attempts", + "community": 68, + "norm_label": "test_record_failure_increments_attempts()" + }, + { + "label": "test_record_failure_terminal()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L132", + "id": "sync_test_queue_test_record_failure_terminal", + "community": 68, + "norm_label": "test_record_failure_terminal()" + }, + { + "label": "test_record_failure_terminal_after_max_attempts()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L139", + "id": "sync_test_queue_test_record_failure_terminal_after_max_attempts", + "community": 68, + "norm_label": "test_record_failure_terminal_after_max_attempts()" + }, + { + "label": "test_compute_next_attempt_at_uses_schedule()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L148", + "id": "sync_test_queue_test_compute_next_attempt_at_uses_schedule", + "community": 230, + "norm_label": "test_compute_next_attempt_at_uses_schedule()" + }, + { + "label": "test_compute_next_attempt_at_out_of_range()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L158", + "id": "sync_test_queue_test_compute_next_attempt_at_out_of_range", + "community": 230, + "norm_label": "test_compute_next_attempt_at_out_of_range()" + }, + { + "label": "test_persistence_across_reinit()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L164", + "id": "sync_test_queue_test_persistence_across_reinit", + "community": 68, + "norm_label": "test_persistence_across_reinit()" + }, + { + "label": "test_init_replays_running_to_queued()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L180", + "id": "sync_test_queue_test_init_replays_running_to_queued", + "community": 68, + "norm_label": "test_init_replays_running_to_queued()" + }, + { + "label": "test_list_in_state_returns_only_matching()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L197", + "id": "sync_test_queue_test_list_in_state_returns_only_matching", + "community": 68, + "norm_label": "test_list_in_state_returns_only_matching()" + }, + { + "label": "test_list_all_orders_by_enqueued_at()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L207", + "id": "sync_test_queue_test_list_all_orders_by_enqueued_at", + "community": 68, + "norm_label": "test_list_all_orders_by_enqueued_at()" + }, + { + "label": "test_reset_to_queued_clears_attempts()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L215", + "id": "sync_test_queue_test_reset_to_queued_clears_attempts", + "community": 68, + "norm_label": "test_reset_to_queued_clears_attempts()" + }, + { + "label": "test_reset_to_queued_unknown_raises()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L224", + "id": "sync_test_queue_test_reset_to_queued_unknown_raises", + "community": 68, + "norm_label": "test_reset_to_queued_unknown_raises()" + }, + { + "label": "test_record_failure_unknown_raises()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L229", + "id": "sync_test_queue_test_record_failure_unknown_raises", + "community": 68, + "norm_label": "test_record_failure_unknown_raises()" + }, + { + "label": "test_delete_removes_row()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L234", + "id": "sync_test_queue_test_delete_removes_row", + "community": 68, + "norm_label": "test_delete_removes_row()" + }, + { + "label": "test_is_terminal_classifies_states()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L240", + "id": "sync_test_queue_test_is_terminal_classifies_states", + "community": 68, + "norm_label": "test_is_terminal_classifies_states()" + }, + { + "label": "test_init_required_before_use()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L247", + "id": "sync_test_queue_test_init_required_before_use", + "community": 68, + "norm_label": "test_init_required_before_use()" + }, + { + "label": "test_close_is_idempotent()", + "file_type": "code", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L254", + "id": "sync_test_queue_test_close_is_idempotent", + "community": 94, + "norm_label": "test_close_is_idempotent()" + }, + { + "label": "Tests for ``exlab_wizard.sync.queue``. Covers the durable SQLite-backed sync-jo", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L1", + "id": "sync_test_queue_rationale_1", + "community": 68, + "norm_label": "tests for ``exlab_wizard.sync.queue``. covers the durable sqlite-backed sync-jo" + }, + { + "label": "``insert`` produces a QUEUED row with a generated UUID job id.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L36", + "id": "sync_test_queue_rationale_36", + "community": 68, + "norm_label": "``insert`` produces a queued row with a generated uuid job id." + }, + { + "label": "Two inserts on the same run_path violate UNIQUE.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L46", + "id": "sync_test_queue_rationale_46", + "community": 68, + "norm_label": "two inserts on the same run_path violate unique." + }, + { + "label": "The per-file ``files`` list round-trips through insert and read.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L53", + "id": "sync_test_queue_rationale_53", + "community": 68, + "norm_label": "the per-file ``files`` list round-trips through insert and read." + }, + { + "label": "A job inserted without ``files`` reads back as the empty 'whole run' tuple.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L63", + "id": "sync_test_queue_rationale_63", + "community": 68, + "norm_label": "a job inserted without ``files`` reads back as the empty 'whole run' tuple." + }, + { + "label": "``requeue_with_files`` re-arms a terminal job in QUEUED with a new subset.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L72", + "id": "sync_test_queue_rationale_72", + "community": 68, + "norm_label": "``requeue_with_files`` re-arms a terminal job in queued with a new subset." + }, + { + "label": "The 1st through 5th attempts use the documented backoff sequence.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L149", + "id": "sync_test_queue_rationale_149", + "community": 230, + "norm_label": "the 1st through 5th attempts use the documented backoff sequence." + }, + { + "label": "Attempts <1 or >MAX_ATTEMPTS yield ``None``.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L159", + "id": "sync_test_queue_rationale_159", + "community": 230, + "norm_label": "attempts <1 or >max_attempts yield ``none``." + }, + { + "label": "A queue rebuilt against the same db file sees the prior rows.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L165", + "id": "sync_test_queue_rationale_165", + "community": 68, + "norm_label": "a queue rebuilt against the same db file sees the prior rows." + }, + { + "label": "A RUNNING row from a prior process is downgraded to QUEUED on restart.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L181", + "id": "sync_test_queue_rationale_181", + "community": 68, + "norm_label": "a running row from a prior process is downgraded to queued on restart." + }, + { + "label": "Operations without init() raise a clear RuntimeError.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L248", + "id": "sync_test_queue_rationale_248", + "community": 68, + "norm_label": "operations without init() raise a clear runtimeerror." + }, + { + "label": "test_nas_client.py", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L1", + "id": "tests_unit_sync_test_nas_client_py", + "community": 31, + "norm_label": "test_nas_client.py" + }, + { + "label": "_build_config()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L55", + "id": "sync_test_nas_client_build_config", + "community": 31, + "norm_label": "_build_config()" + }, + { + "label": "_make_creation()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L86", + "id": "sync_test_nas_client_make_creation", + "community": 31, + "norm_label": "_make_creation()" + }, + { + "label": "_populate_run()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L106", + "id": "sync_test_nas_client_populate_run", + "community": 31, + "norm_label": "_populate_run()" + }, + { + "label": "_make_push_factory()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L119", + "id": "sync_test_nas_client_make_push_factory", + "community": 31, + "norm_label": "_make_push_factory()" + }, + { + "label": "writer()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L136", + "id": "sync_test_nas_client_writer", + "community": 31, + "norm_label": "writer()" + }, + { + "label": "test_enqueue_blocks_run_with_hard_finding_no_override()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L145", + "id": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", + "community": 31, + "norm_label": "test_enqueue_blocks_run_with_hard_finding_no_override()" + }, + { + "label": "test_enqueue_clean_run_creates_queued_row()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L176", + "id": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", + "community": 31, + "norm_label": "test_enqueue_clean_run_creates_queued_row()" + }, + { + "label": "test_enqueue_with_active_override_unblocks()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L206", + "id": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", + "community": 31, + "norm_label": "test_enqueue_with_active_override_unblocks()" + }, + { + "label": "test_status_returns_none_when_no_job()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L254", + "id": "sync_test_nas_client_test_status_returns_none_when_no_job", + "community": 31, + "norm_label": "test_status_returns_none_when_no_job()" + }, + { + "label": "test_retry_resets_failed_to_queued()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L275", + "id": "sync_test_nas_client_test_retry_resets_failed_to_queued", + "community": 31, + "norm_label": "test_retry_resets_failed_to_queued()" + }, + { + "label": "test_force_verify_returns_self_consistent()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L310", + "id": "sync_test_nas_client_test_force_verify_returns_self_consistent", + "community": 31, + "norm_label": "test_force_verify_returns_self_consistent()" + }, + { + "label": "test_worker_drives_to_verified_and_marks_synced()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L334", + "id": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", + "community": 31, + "norm_label": "test_worker_drives_to_verified_and_marks_synced()" + }, + { + "label": "test_worker_terminal_failed_on_auth_error()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L376", + "id": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", + "community": 31, + "norm_label": "test_worker_terminal_failed_on_auth_error()" + }, + { + "label": "test_enqueue_existing_failed_resets_to_queued()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L402", + "id": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", + "community": 31, + "norm_label": "test_enqueue_existing_failed_resets_to_queued()" + }, + { + "label": "test_enqueue_idempotent_for_already_queued_row()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L435", + "id": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", + "community": 31, + "norm_label": "test_enqueue_idempotent_for_already_queued_row()" + }, + { + "label": "test_close_is_idempotent()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L469", + "id": "sync_test_nas_client_test_close_is_idempotent", + "community": 31, + "norm_label": "test_close_is_idempotent()" + }, + { + "label": "test_mark_cleaned_writes_cleaned_to_creation_json()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L487", + "id": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", + "community": 31, + "norm_label": "test_mark_cleaned_writes_cleaned_to_creation_json()" + }, + { + "label": "test_mark_cleaned_is_noop_when_creation_json_missing()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L509", + "id": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", + "community": 31, + "norm_label": "test_mark_cleaned_is_noop_when_creation_json_missing()" + }, + { + "label": "test_enqueue_with_files_inserts_subset()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L536", + "id": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", + "community": 31, + "norm_label": "test_enqueue_with_files_inserts_subset()" + }, + { + "label": "test_enqueue_requeues_terminal_job_with_new_files()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L564", + "id": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", + "community": 31, + "norm_label": "test_enqueue_requeues_terminal_job_with_new_files()" + }, + { + "label": "test_enqueue_noops_active_job_with_new_files()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L599", + "id": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", + "community": 31, + "norm_label": "test_enqueue_noops_active_job_with_new_files()" + }, + { + "label": "test_apply_config_swaps_equipment_map()", + "file_type": "code", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L636", + "id": "sync_test_nas_client_test_apply_config_swaps_equipment_map", + "community": 31, + "norm_label": "test_apply_config_swaps_equipment_map()" + }, + { + "label": "Unit tests for ``exlab_wizard.sync.nas_client.NASSyncClient``. Backend Spec \u00a77.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L1", + "id": "sync_test_nas_client_rationale_1", + "community": 31, + "norm_label": "unit tests for ``exlab_wizard.sync.nas_client.nassyncclient``. backend spec \u00a77." + }, + { + "label": "Build a clean run directory with a creation.json under EQ1/PROJ-0042/.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L107", + "id": "sync_test_nas_client_rationale_107", + "community": 31, + "norm_label": "build a clean run directory with a creation.json under eq1/proj-0042/." + }, + { + "label": "A push callable factory that yields deterministic outcomes for tests.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L122", + "id": "sync_test_nas_client_rationale_122", + "community": 31, + "norm_label": "a push callable factory that yields deterministic outcomes for tests." + }, + { + "label": "A run path containing ```` is gated and not queued.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L148", + "id": "sync_test_nas_client_rationale_148", + "community": 31, + "norm_label": "a run path containing ```` is gated and not queued." + }, + { + "label": "A run with placeholder findings + matching active overrides is queued.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L209", + "id": "sync_test_nas_client_rationale_209", + "community": 31, + "norm_label": "a run with placeholder findings + matching active overrides is queued." + }, + { + "label": "A successful push -> AWAITING_VERIFY -> VERIFIED -> sync_status='synced'.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L337", + "id": "sync_test_nas_client_rationale_337", + "community": 31, + "norm_label": "a successful push -> awaiting_verify -> verified -> sync_status='synced'." + }, + { + "label": "Re-enqueueing a FAILED row resets it back to QUEUED.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L405", + "id": "sync_test_nas_client_rationale_405", + "community": 31, + "norm_label": "re-enqueueing a failed row resets it back to queued." + }, + { + "label": "Enqueueing twice for the same path returns the same job id.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L438", + "id": "sync_test_nas_client_rationale_438", + "community": 31, + "norm_label": "enqueueing twice for the same path returns the same job id." + }, + { + "label": "``_mark_cleaned`` flips ``creation.json.sync_status`` to ``\"cleaned\"``.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L490", + "id": "sync_test_nas_client_rationale_490", + "community": 31, + "norm_label": "``_mark_cleaned`` flips ``creation.json.sync_status`` to ``\"cleaned\"``." + }, + { + "label": "With ``retain_cache=False`` the cache dir is gone; ``_mark_cleaned`` no-ops.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L512", + "id": "sync_test_nas_client_rationale_512", + "community": 31, + "norm_label": "with ``retain_cache=false`` the cache dir is gone; ``_mark_cleaned`` no-ops." + }, + { + "label": "``enqueue(run, files=[...])`` stores the subset on the queue row.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L537", + "id": "sync_test_nas_client_rationale_537", + "community": 31, + "norm_label": "``enqueue(run, files=[...])`` stores the subset on the queue row." + }, + { + "label": "A terminal (FAILED) job is re-armed in QUEUED with a fresh file subset.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L567", + "id": "sync_test_nas_client_rationale_567", + "community": 31, + "norm_label": "a terminal (failed) job is re-armed in queued with a fresh file subset." + }, + { + "label": "An active (QUEUED) job is left untouched when re-enqueued with new files.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L602", + "id": "sync_test_nas_client_rationale_602", + "community": 31, + "norm_label": "an active (queued) job is left untouched when re-enqueued with new files." + }, + { + "label": "A live config swap rebuilds the equipment lookup in place.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L637", + "id": "sync_test_nas_client_rationale_637", + "community": 31, + "norm_label": "a live config swap rebuilds the equipment lookup in place." + }, + { + "label": "test_pre_sync_gate.py", + "file_type": "code", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L1", + "id": "tests_unit_sync_test_pre_sync_gate_py", + "community": 138, + "norm_label": "test_pre_sync_gate.py" + }, + { + "label": "_build_creation()", + "file_type": "code", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L28", + "id": "sync_test_pre_sync_gate_build_creation", + "community": 138, + "norm_label": "_build_creation()" + }, + { + "label": "validator()", + "file_type": "code", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L58", + "id": "sync_test_pre_sync_gate_validator", + "community": 138, + "norm_label": "validator()" + }, + { + "label": "test_clean_run_is_eligible()", + "file_type": "code", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L62", + "id": "sync_test_pre_sync_gate_test_clean_run_is_eligible", + "community": 138, + "norm_label": "test_clean_run_is_eligible()" + }, + { + "label": "test_hard_finding_blocks()", + "file_type": "code", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L78", + "id": "sync_test_pre_sync_gate_test_hard_finding_blocks", + "community": 138, + "norm_label": "test_hard_finding_blocks()" + }, + { + "label": "test_active_override_unblocks()", + "file_type": "code", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L94", + "id": "sync_test_pre_sync_gate_test_active_override_unblocks", + "community": 138, + "norm_label": "test_active_override_unblocks()" + }, + { + "label": "test_revoked_override_does_not_unblock()", + "file_type": "code", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L130", + "id": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", + "community": 138, + "norm_label": "test_revoked_override_does_not_unblock()" + }, + { + "label": "test_soft_finding_does_not_block()", + "file_type": "code", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L165", + "id": "sync_test_pre_sync_gate_test_soft_finding_does_not_block", + "community": 138, + "norm_label": "test_soft_finding_does_not_block()" + }, + { + "label": "Tests for ``exlab_wizard.sync.pre_sync_gate``. Backend Spec \u00a77.3. The Pre-Sync", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L1", + "id": "sync_test_pre_sync_gate_rationale_1", + "community": 138, + "norm_label": "tests for ``exlab_wizard.sync.pre_sync_gate``. backend spec \u00a77.3. the pre-sync" + }, + { + "label": "A creation with no validator findings is eligible for sync.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L63", + "id": "sync_test_pre_sync_gate_rationale_63", + "community": 138, + "norm_label": "a creation with no validator findings is eligible for sync." + }, + { + "label": "An unresolved-placeholder token in the path triggers a block.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L79", + "id": "sync_test_pre_sync_gate_rationale_79", + "community": 138, + "norm_label": "an unresolved-placeholder token in the path triggers a block." + }, + { + "label": "An active override matching the finding's rule unblocks sync.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L95", + "id": "sync_test_pre_sync_gate_rationale_95", + "community": 138, + "norm_label": "an active override matching the finding's rule unblocks sync." + }, + { + "label": "An override that has been revoked does NOT unblock sync.", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L131", + "id": "sync_test_pre_sync_gate_rationale_131", + "community": 138, + "norm_label": "an override that has been revoked does not unblock sync." + }, + { + "label": "A soft-tier finding (missing-required-field) does NOT block sync. The valid", + "file_type": "rationale", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L166", + "id": "sync_test_pre_sync_gate_rationale_166", + "community": 138, + "norm_label": "a soft-tier finding (missing-required-field) does not block sync. the valid" + }, + { + "label": "_helpers.py", + "file_type": "code", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L1", + "id": "tests_unit_sync_helpers_py", + "community": 283, + "norm_label": "_helpers.py" + }, + { + "label": "_read_files_from()", + "file_type": "code", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L29", + "id": "sync_helpers_read_files_from", + "community": 283, + "norm_label": "_read_files_from()" + }, + { + "label": "local_check_factory()", + "file_type": "code", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L40", + "id": "sync_helpers_local_check_factory", + "community": 12, + "norm_label": "local_check_factory()" + }, + { + "label": "corrupt_one_check_factory()", + "file_type": "code", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L59", + "id": "sync_helpers_corrupt_one_check_factory", + "community": 283, + "norm_label": "corrupt_one_check_factory()" + }, + { + "label": "Shared helpers for ``tests/unit/sync/`` test modules. Kept under a leading-unde", + "file_type": "rationale", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L1", + "id": "sync_helpers_rationale_1", + "community": 283, + "norm_label": "shared helpers for ``tests/unit/sync/`` test modules. kept under a leading-unde" + }, + { + "label": "Read run-relative paths from a ``--files-from`` tempfile.", + "file_type": "rationale", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L30", + "id": "sync_helpers_rationale_30", + "community": 283, + "norm_label": "read run-relative paths from a ``--files-from`` tempfile." + }, + { + "label": "Check factory whose closure declares every file equal. Returns a closure co", + "file_type": "rationale", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L41", + "id": "sync_helpers_rationale_41", + "community": 12, + "norm_label": "check factory whose closure declares every file equal. returns a closure co" + }, + { + "label": "Check factory whose closure flags ``corrupt_rel`` as ``differ``. Every othe", + "file_type": "rationale", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L62", + "id": "sync_helpers_rationale_62", + "community": 283, + "norm_label": "check factory whose closure flags ``corrupt_rel`` as ``differ``. every othe" + }, + { + "label": "test_rclone_env.py", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L1", + "id": "tests_unit_sync_transports_test_rclone_env_py", + "community": 7, + "norm_label": "test_rclone_env.py" + }, + { + "label": "test_build_rclone_env_sftp_emits_all_keys()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L36", + "id": "transports_test_rclone_env_test_build_rclone_env_sftp_emits_all_keys", + "community": 7, + "norm_label": "test_build_rclone_env_sftp_emits_all_keys()" + }, + { + "label": "test_build_rclone_env_smb_minimal_omits_domain()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L59", + "id": "transports_test_rclone_env_test_build_rclone_env_smb_minimal_omits_domain", + "community": 7, + "norm_label": "test_build_rclone_env_smb_minimal_omits_domain()" + }, + { + "label": "test_build_rclone_env_smb_with_domain_includes_domain_key()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L83", + "id": "transports_test_rclone_env_test_build_rclone_env_smb_with_domain_includes_domain_key", + "community": 7, + "norm_label": "test_build_rclone_env_smb_with_domain_includes_domain_key()" + }, + { + "label": "test_pass_env_keys_for_names_only_the_password_key()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L100", + "id": "transports_test_rclone_env_test_pass_env_keys_for_names_only_the_password_key", + "community": 7, + "norm_label": "test_pass_env_keys_for_names_only_the_password_key()" + }, + { + "label": "_Keyring", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L111", + "id": "transports_test_rclone_env_keyring", + "community": 7, + "norm_label": "_keyring" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L114", + "id": "transports_test_rclone_env_keyring_init", + "community": 7, + "norm_label": ".__init__()" + }, + { + "label": ".get_password()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L117", + "id": "transports_test_rclone_env_keyring_get_password", + "community": 7, + "norm_label": ".get_password()" + }, + { + "label": "_BrokenKeyring", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L122", + "id": "transports_test_rclone_env_brokenkeyring", + "community": 7, + "norm_label": "_brokenkeyring" + }, + { + "label": ".get_password()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L125", + "id": "transports_test_rclone_env_brokenkeyring_get_password", + "community": 7, + "norm_label": ".get_password()" + }, + { + "label": "_equipment()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L131", + "id": "transports_test_rclone_env_equipment", + "community": 7, + "norm_label": "_equipment()" + }, + { + "label": "test_resolve_env_raises_auth_when_keyring_store_is_none()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L157", + "id": "transports_test_rclone_env_test_resolve_env_raises_auth_when_keyring_store_is_none", + "community": 7, + "norm_label": "test_resolve_env_raises_auth_when_keyring_store_is_none()" + }, + { + "label": "test_resolve_env_raises_auth_when_password_is_none()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L164", + "id": "transports_test_rclone_env_test_resolve_env_raises_auth_when_password_is_none", + "community": 7, + "norm_label": "test_resolve_env_raises_auth_when_password_is_none()" + }, + { + "label": "test_resolve_env_raises_auth_when_password_is_empty_string()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L171", + "id": "transports_test_rclone_env_test_resolve_env_raises_auth_when_password_is_empty_string", + "community": 7, + "norm_label": "test_resolve_env_raises_auth_when_password_is_empty_string()" + }, + { + "label": "test_resolve_env_raises_auth_when_keyring_backend_explodes()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L178", + "id": "transports_test_rclone_env_test_resolve_env_raises_auth_when_keyring_backend_explodes", + "community": 7, + "norm_label": "test_resolve_env_raises_auth_when_keyring_backend_explodes()" + }, + { + "label": "Unit tests for ``build_rclone_env`` and ``_resolve_env_for_equipment``. The new", + "file_type": "rationale", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L1", + "id": "transports_test_rclone_env_rationale_1", + "community": 7, + "norm_label": "unit tests for ``build_rclone_env`` and ``_resolve_env_for_equipment``. the new" + }, + { + "label": "The only secret in build_rclone_env's output is _PASS.", + "file_type": "rationale", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L101", + "id": "transports_test_rclone_env_rationale_101", + "community": 7, + "norm_label": "the only secret in build_rclone_env's output is _pass." + }, + { + "label": "In-memory keyring stub used by the AUTH-path tests below.", + "file_type": "rationale", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L112", + "id": "transports_test_rclone_env_rationale_112", + "community": 7, + "norm_label": "in-memory keyring stub used by the auth-path tests below." + }, + { + "label": "Keyring stub whose ``get_password`` raises an exception.", + "file_type": "rationale", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L123", + "id": "transports_test_rclone_env_rationale_123", + "community": 7, + "norm_label": "keyring stub whose ``get_password`` raises an exception." + }, + { + "label": "A keyring backend failure must surface as AUTH with the real cause attached.", + "file_type": "rationale", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L179", + "id": "transports_test_rclone_env_rationale_179", + "community": 7, + "norm_label": "a keyring backend failure must surface as auth with the real cause attached." + }, + { + "label": "test_run.py", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L1", + "id": "tests_unit_sync_transports_test_run_py", + "community": 159, + "norm_label": "test_run.py" + }, + { + "label": "test_run_subprocess_returns_rc_and_streams()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L19", + "id": "transports_test_run_test_run_subprocess_returns_rc_and_streams", + "community": 159, + "norm_label": "test_run_subprocess_returns_rc_and_streams()" + }, + { + "label": "test_run_subprocess_forwards_env()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L28", + "id": "transports_test_run_test_run_subprocess_forwards_env", + "community": 159, + "norm_label": "test_run_subprocess_forwards_env()" + }, + { + "label": "test_run_subprocess_preserves_existing_environ()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L38", + "id": "transports_test_run_test_run_subprocess_preserves_existing_environ", + "community": 159, + "norm_label": "test_run_subprocess_preserves_existing_environ()" + }, + { + "label": "test_run_subprocess_pipes_stdin_payload()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L56", + "id": "transports_test_run_test_run_subprocess_pipes_stdin_payload", + "community": 159, + "norm_label": "test_run_subprocess_pipes_stdin_payload()" + }, + { + "label": "test_run_subprocess_masks_named_env_in_debug_log()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L66", + "id": "transports_test_run_test_run_subprocess_masks_named_env_in_debug_log", + "community": 159, + "norm_label": "test_run_subprocess_masks_named_env_in_debug_log()" + }, + { + "label": "test_run_subprocess_omits_env_log_when_env_is_none()", + "file_type": "code", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L86", + "id": "transports_test_run_test_run_subprocess_omits_env_log_when_env_is_none", + "community": 159, + "norm_label": "test_run_subprocess_omits_env_log_when_env_is_none()" + }, + { + "label": "Unit tests for ``exlab_wizard.sync.transports._run.run_subprocess``. The rclone", + "file_type": "rationale", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L1", + "id": "transports_test_run_rationale_1", + "community": 159, + "norm_label": "unit tests for ``exlab_wizard.sync.transports._run.run_subprocess``. the rclone" + }, + { + "label": "An env-dict entry must surface in the child process' environment.", + "file_type": "rationale", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L29", + "id": "transports_test_run_rationale_29", + "community": 159, + "norm_label": "an env-dict entry must surface in the child process' environment." + }, + { + "label": "Caller-supplied env is *merged* over ``os.environ`` -- it does not replace it.", + "file_type": "rationale", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L39", + "id": "transports_test_run_rationale_39", + "community": 159, + "norm_label": "caller-supplied env is *merged* over ``os.environ`` -- it does not replace it." + }, + { + "label": "A bytes payload is fed to stdin and closed.", + "file_type": "rationale", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L57", + "id": "transports_test_run_rationale_57", + "community": 159, + "norm_label": "a bytes payload is fed to stdin and closed." + }, + { + "label": "``mask_for_log`` redacts the listed env keys from the debug log line.", + "file_type": "rationale", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L67", + "id": "transports_test_run_rationale_67", + "community": 159, + "norm_label": "``mask_for_log`` redacts the listed env keys from the debug log line." + }, + { + "label": "No env block in the log when the caller passes ``env=None``.", + "file_type": "rationale", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L87", + "id": "transports_test_run_rationale_87", + "community": 159, + "norm_label": "no env block in the log when the caller passes ``env=none``." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/sync/transports/__init__.py", + "source_location": "L1", + "id": "tests_unit_sync_transports_init_py", + "community": 427, + "norm_label": "__init__.py" + }, + { + "label": "test_handlers.py", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L1", + "id": "tests_unit_logging_test_handlers_py", + "community": 160, + "norm_label": "test_handlers.py" + }, + { + "label": "_reset_context()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L29", + "id": "logging_test_handlers_reset_context", + "community": 238, + "norm_label": "_reset_context()" + }, + { + "label": "_make_handler()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L34", + "id": "logging_test_handlers_make_handler", + "community": 160, + "norm_label": "_make_handler()" + }, + { + "label": "_make_record()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L41", + "id": "logging_test_handlers_make_record", + "community": 160, + "norm_label": "_make_record()" + }, + { + "label": "test_writes_to_equipment_scoped_path()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L60", + "id": "logging_test_handlers_test_writes_to_equipment_scoped_path", + "community": 160, + "norm_label": "test_writes_to_equipment_scoped_path()" + }, + { + "label": "test_writes_to_separate_files_per_equipment()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L76", + "id": "logging_test_handlers_test_writes_to_separate_files_per_equipment", + "community": 160, + "norm_label": "test_writes_to_separate_files_per_equipment()" + }, + { + "label": "test_subsequent_emits_reuse_the_same_file_descriptor()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L103", + "id": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", + "community": 160, + "norm_label": "test_subsequent_emits_reuse_the_same_file_descriptor()" + }, + { + "label": "test_one_open_per_equipment_even_with_many_emits()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L129", + "id": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", + "community": 160, + "norm_label": "test_one_open_per_equipment_even_with_many_emits()" + }, + { + "label": "test_emit_without_equipment_id_writes_no_file()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L152", + "id": "logging_test_handlers_test_emit_without_equipment_id_writes_no_file", + "community": 160, + "norm_label": "test_emit_without_equipment_id_writes_no_file()" + }, + { + "label": "test_emit_with_explicit_none_equipment_skipped()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L164", + "id": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", + "community": 160, + "norm_label": "test_emit_with_explicit_none_equipment_skipped()" + }, + { + "label": "test_fsync_invoked_only_on_error_level()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L181", + "id": "logging_test_handlers_test_fsync_invoked_only_on_error_level", + "community": 160, + "norm_label": "test_fsync_invoked_only_on_error_level()" + }, + { + "label": "test_fsync_on_error_passes_correct_fd()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L199", + "id": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", + "community": 160, + "norm_label": "test_fsync_on_error_passes_correct_fd()" + }, + { + "label": "test_close_drains_cached_files()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L217", + "id": "logging_test_handlers_test_close_drains_cached_files", + "community": 160, + "norm_label": "test_close_drains_cached_files()" + }, + { + "label": "test_close_is_idempotent()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L232", + "id": "logging_test_handlers_test_close_is_idempotent", + "community": 160, + "norm_label": "test_close_is_idempotent()" + }, + { + "label": "test_emit_routes_unexpected_exception_through_handle_error()", + "file_type": "code", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L247", + "id": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", + "community": 160, + "norm_label": "test_emit_routes_unexpected_exception_through_handle_error()" + }, + { + "label": "Tests for ``exlab_wizard.logging.handlers``. Backend Spec \u00a716.2.4 commits the e", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L1", + "id": "logging_test_handlers_rationale_1", + "community": 160, + "norm_label": "tests for ``exlab_wizard.logging.handlers``. backend spec \u00a716.2.4 commits the e" + }, + { + "label": "Wipe the run-context vars between cases so handler tests are isolated.", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L30", + "id": "logging_test_handlers_rationale_30", + "community": 238, + "norm_label": "wipe the run-context vars between cases so handler tests are isolated." + }, + { + "label": "Construct a handler with a deterministic hostname for test paths.", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L35", + "id": "logging_test_handlers_rationale_35", + "community": 160, + "norm_label": "construct a handler with a deterministic hostname for test paths." + }, + { + "label": "The ``Exception`` branch in :meth:`emit` is the stdlib handler-error contrac", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L248", + "id": "logging_test_handlers_rationale_248", + "community": 160, + "norm_label": "the ``exception`` branch in :meth:`emit` is the stdlib handler-error contrac" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/logging/__init__.py", + "source_location": "L1", + "id": "tests_unit_logging_init_py", + "community": 428, + "norm_label": "__init__.py" + }, + { + "label": "test_context.py", + "file_type": "code", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L1", + "id": "tests_unit_logging_test_context_py", + "community": 161, + "norm_label": "test_context.py" + }, + { + "label": "_reset_context()", + "file_type": "code", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L31", + "id": "logging_test_context_reset_context", + "community": 238, + "norm_label": "_reset_context()" + }, + { + "label": "test_set_run_context_pushes_supplied_vars()", + "file_type": "code", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L41", + "id": "logging_test_context_test_set_run_context_pushes_supplied_vars", + "community": 161, + "norm_label": "test_set_run_context_pushes_supplied_vars()" + }, + { + "label": "test_unsupplied_vars_are_unchanged()", + "file_type": "code", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L56", + "id": "logging_test_context_test_unsupplied_vars_are_unchanged", + "community": 161, + "norm_label": "test_unsupplied_vars_are_unchanged()" + }, + { + "label": "test_context_exit_restores_prior_values()", + "file_type": "code", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L70", + "id": "logging_test_context_test_context_exit_restores_prior_values", + "community": 161, + "norm_label": "test_context_exit_restores_prior_values()" + }, + { + "label": "test_context_exit_clears_when_no_prior_value()", + "file_type": "code", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L81", + "id": "logging_test_context_test_context_exit_clears_when_no_prior_value", + "community": 161, + "norm_label": "test_context_exit_clears_when_no_prior_value()" + }, + { + "label": "test_set_run_context_with_no_args_is_noop()", + "file_type": "code", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L88", + "id": "logging_test_context_test_set_run_context_with_no_args_is_noop", + "community": 161, + "norm_label": "test_set_run_context_with_no_args_is_noop()" + }, + { + "label": "test_concurrent_asyncio_tasks_have_independent_contexts()", + "file_type": "code", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L101", + "id": "logging_test_context_test_concurrent_asyncio_tasks_have_independent_contexts", + "community": 161, + "norm_label": "test_concurrent_asyncio_tasks_have_independent_contexts()" + }, + { + "label": "test_get_run_context_returns_snapshot_dict()", + "file_type": "code", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L134", + "id": "logging_test_context_test_get_run_context_returns_snapshot_dict", + "community": 161, + "norm_label": "test_get_run_context_returns_snapshot_dict()" + }, + { + "label": "test_get_run_context_returns_all_keys_even_when_empty()", + "file_type": "code", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L149", + "id": "logging_test_context_test_get_run_context_returns_all_keys_even_when_empty", + "community": 161, + "norm_label": "test_get_run_context_returns_all_keys_even_when_empty()" + }, + { + "label": "test_clear_run_context_resets_every_var()", + "file_type": "code", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L163", + "id": "logging_test_context_test_clear_run_context_resets_every_var", + "community": 238, + "norm_label": "test_clear_run_context_resets_every_var()" + }, + { + "label": "Tests for ``exlab_wizard.logging.context``. Backend Spec \u00a716.2.3 commits the pe", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L1", + "id": "logging_test_context_rationale_1", + "community": 161, + "norm_label": "tests for ``exlab_wizard.logging.context``. backend spec \u00a716.2.3 commits the pe" + }, + { + "label": "Wipe context vars before each test to prevent cross-test leakage.", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L32", + "id": "logging_test_context_rationale_32", + "community": 238, + "norm_label": "wipe context vars before each test to prevent cross-test leakage." + }, + { + "label": "Two ``asyncio.gather``-ed tasks must not see each other's context. This is", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L102", + "id": "logging_test_context_rationale_102", + "community": 161, + "norm_label": "two ``asyncio.gather``-ed tasks must not see each other's context. this is" + }, + { + "label": "test_manager.py", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L1", + "id": "tests_unit_logging_test_manager_py", + "community": 28, + "norm_label": "test_manager.py" + }, + { + "label": "_isolate_central_log()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L30", + "id": "logging_test_manager_isolate_central_log", + "community": 28, + "norm_label": "_isolate_central_log()" + }, + { + "label": "test_get_logger_importable_from_package()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L50", + "id": "logging_test_manager_test_get_logger_importable_from_package", + "community": 28, + "norm_label": "test_get_logger_importable_from_package()" + }, + { + "label": "test_get_logger_importable_from_manager_module()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L56", + "id": "logging_test_manager_test_get_logger_importable_from_manager_module", + "community": 28, + "norm_label": "test_get_logger_importable_from_manager_module()" + }, + { + "label": "test_package_and_manager_export_the_same_callable()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L62", + "id": "logging_test_manager_test_package_and_manager_export_the_same_callable", + "community": 28, + "norm_label": "test_package_and_manager_export_the_same_callable()" + }, + { + "label": "test_get_logger_returns_stdlib_logger_instance()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L69", + "id": "logging_test_manager_test_get_logger_returns_stdlib_logger_instance", + "community": 28, + "norm_label": "test_get_logger_returns_stdlib_logger_instance()" + }, + { + "label": "test_get_logger_sets_name_on_returned_logger()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L76", + "id": "logging_test_manager_test_get_logger_sets_name_on_returned_logger", + "community": 28, + "norm_label": "test_get_logger_sets_name_on_returned_logger()" + }, + { + "label": "test_get_logger_is_idempotent_for_same_name()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L83", + "id": "logging_test_manager_test_get_logger_is_idempotent_for_same_name", + "community": 28, + "norm_label": "test_get_logger_is_idempotent_for_same_name()" + }, + { + "label": "test_get_logger_returns_distinct_loggers_for_different_names()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L93", + "id": "logging_test_manager_test_get_logger_returns_distinct_loggers_for_different_names", + "community": 28, + "norm_label": "test_get_logger_returns_distinct_loggers_for_different_names()" + }, + { + "label": "test_logging_package_all_contains_get_logger()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L103", + "id": "logging_test_manager_test_logging_package_all_contains_get_logger", + "community": 28, + "norm_label": "test_logging_package_all_contains_get_logger()" + }, + { + "label": "test_configure_logging_with_default_threshold_and_handlers()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L112", + "id": "logging_test_manager_test_configure_logging_with_default_threshold_and_handlers", + "community": 28, + "norm_label": "test_configure_logging_with_default_threshold_and_handlers()" + }, + { + "label": "test_configure_logging_applies_config_level()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L121", + "id": "logging_test_manager_test_configure_logging_applies_config_level", + "community": 28, + "norm_label": "test_configure_logging_applies_config_level()" + }, + { + "label": "test_configure_logging_idempotent_does_not_accumulate_handlers()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L128", + "id": "logging_test_manager_test_configure_logging_idempotent_does_not_accumulate_handlers", + "community": 28, + "norm_label": "test_configure_logging_idempotent_does_not_accumulate_handlers()" + }, + { + "label": "test_configure_logging_routes_records_through_queue_listener()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L143", + "id": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", + "community": 28, + "norm_label": "test_configure_logging_routes_records_through_queue_listener()" + }, + { + "label": "test_shutdown_logging_is_idempotent()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L154", + "id": "logging_test_manager_test_shutdown_logging_is_idempotent", + "community": 28, + "norm_label": "test_shutdown_logging_is_idempotent()" + }, + { + "label": "test_configure_logging_installs_central_rotating_file_handler()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L161", + "id": "logging_test_manager_test_configure_logging_installs_central_rotating_file_handler", + "community": 214, + "norm_label": "test_configure_logging_installs_central_rotating_file_handler()" + }, + { + "label": "test_configure_logging_stderr_handler_is_warn_capped()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L176", + "id": "logging_test_manager_test_configure_logging_stderr_handler_is_warn_capped", + "community": 28, + "norm_label": "test_configure_logging_stderr_handler_is_warn_capped()" + }, + { + "label": "test_resolve_threshold_unknown_level_falls_back_to_info()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L192", + "id": "logging_test_manager_test_resolve_threshold_unknown_level_falls_back_to_info", + "community": 28, + "norm_label": "test_resolve_threshold_unknown_level_falls_back_to_info()" + }, + { + "label": "test_configure_logging_strips_pre_existing_queue_handler()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L207", + "id": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", + "community": 28, + "norm_label": "test_configure_logging_strips_pre_existing_queue_handler()" + }, + { + "label": "test_build_real_handlers_includes_equipment_handler_when_local_root_set()", + "file_type": "code", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L228", + "id": "logging_test_manager_test_build_real_handlers_includes_equipment_handler_when_local_root_set", + "community": 28, + "norm_label": "test_build_real_handlers_includes_equipment_handler_when_local_root_set()" + }, + { + "label": "Tests for the logger factory + ``configure_logging`` in ``exlab_wizard.logging.m", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L1", + "id": "logging_test_manager_rationale_1", + "community": 28, + "norm_label": "tests for the logger factory + ``configure_logging`` in ``exlab_wizard.logging.m" + }, + { + "label": "Redirect ``os_central_log_path`` to ``tmp_path`` so manager tests don't writ", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L31", + "id": "logging_test_manager_rationale_31", + "community": 28, + "norm_label": "redirect ``os_central_log_path`` to ``tmp_path`` so manager tests don't writ" + }, + { + "label": "First call with ``config=None`` installs the queue-handler chain at INFO.", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L113", + "id": "logging_test_manager_rationale_113", + "community": 28, + "norm_label": "first call with ``config=none`` installs the queue-handler chain at info." + }, + { + "label": "``LoggingConfig.level`` drives the root threshold (\u00a716.5).", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L122", + "id": "logging_test_manager_rationale_122", + "community": 28, + "norm_label": "``loggingconfig.level`` drives the root threshold (\u00a716.5)." + }, + { + "label": "\u00a716.2.2: re-calling ``configure_logging`` tears down + rebuilds. The launch", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L129", + "id": "logging_test_manager_rationale_129", + "community": 28, + "norm_label": "\u00a716.2.2: re-calling ``configure_logging`` tears down + rebuilds. the launch" + }, + { + "label": "A logger.info() call in the configured handler chain produces a record that", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L144", + "id": "logging_test_manager_rationale_144", + "community": 28, + "norm_label": "a logger.info() call in the configured handler chain produces a record that" + }, + { + "label": "A second ``_shutdown_logging`` call must be a no-op (used by quit).", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L155", + "id": "logging_test_manager_rationale_155", + "community": 28, + "norm_label": "a second ``_shutdown_logging`` call must be a no-op (used by quit)." + }, + { + "label": "The downstream handler chain must include a ``RotatingFileHandler`` against", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L162", + "id": "logging_test_manager_rationale_162", + "community": 214, + "norm_label": "the downstream handler chain must include a ``rotatingfilehandler`` against" + }, + { + "label": "\u00a716.2.1: the stderr handler is capped at WARN even when the global threshold", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L177", + "id": "logging_test_manager_rationale_177", + "community": 28, + "norm_label": "\u00a716.2.1: the stderr handler is capped at warn even when the global threshold" + }, + { + "label": "A ``LoggingConfig`` with a level that ``getLevelName`` doesn't know about de", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L193", + "id": "logging_test_manager_rationale_193", + "community": 28, + "norm_label": "a ``loggingconfig`` with a level that ``getlevelname`` doesn't know about de" + }, + { + "label": "If a stray ``QueueHandler`` is on the root logger before ``configure_logging", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L208", + "id": "logging_test_manager_rationale_208", + "community": 28, + "norm_label": "if a stray ``queuehandler`` is on the root logger before ``configure_logging" + }, + { + "label": "When ``local_root`` is configured, the listener chain includes an :class:`Eq", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L231", + "id": "logging_test_manager_rationale_231", + "community": 28, + "norm_label": "when ``local_root`` is configured, the listener chain includes an :class:`eq" + }, + { + "label": "test_format.py", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L1", + "id": "tests_unit_logging_test_format_py", + "community": 95, + "norm_label": "test_format.py" + }, + { + "label": "_reset_context()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L21", + "id": "logging_test_format_reset_context", + "community": 238, + "norm_label": "_reset_context()" + }, + { + "label": "_record()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L31", + "id": "logging_test_format_record", + "community": 95, + "norm_label": "_record()" + }, + { + "label": "test_renders_all_tags_when_full_context_set()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L56", + "id": "logging_test_format_test_renders_all_tags_when_full_context_set", + "community": 95, + "norm_label": "test_renders_all_tags_when_full_context_set()" + }, + { + "label": "test_omits_tags_when_their_context_var_is_unset()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L74", + "id": "logging_test_format_test_omits_tags_when_their_context_var_is_unset", + "community": 95, + "norm_label": "test_omits_tags_when_their_context_var_is_unset()" + }, + { + "label": "test_emits_no_tags_when_context_is_empty()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L84", + "id": "logging_test_format_test_emits_no_tags_when_context_is_empty", + "community": 95, + "norm_label": "test_emits_no_tags_when_context_is_empty()" + }, + { + "label": "test_level_field_is_left_padded_to_five_chars()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L90", + "id": "logging_test_format_test_level_field_is_left_padded_to_five_chars", + "community": 95, + "norm_label": "test_level_field_is_left_padded_to_five_chars()" + }, + { + "label": "test_timestamp_is_utc_iso_8601_with_z_suffix()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L111", + "id": "logging_test_format_test_timestamp_is_utc_iso_8601_with_z_suffix", + "community": 95, + "norm_label": "test_timestamp_is_utc_iso_8601_with_z_suffix()" + }, + { + "label": "test_message_with_format_args_is_rendered()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L122", + "id": "logging_test_format_test_message_with_format_args_is_rendered", + "community": 95, + "norm_label": "test_message_with_format_args_is_rendered()" + }, + { + "label": "test_redact_url_userinfo_password()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L143", + "id": "logging_test_format_test_redact_url_userinfo_password", + "community": 95, + "norm_label": "test_redact_url_userinfo_password()" + }, + { + "label": "test_redact_url_userinfo_password_with_punctuation()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L147", + "id": "logging_test_format_test_redact_url_userinfo_password_with_punctuation", + "community": 95, + "norm_label": "test_redact_url_userinfo_password_with_punctuation()" + }, + { + "label": "test_redact_bearer_token()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L154", + "id": "logging_test_format_test_redact_bearer_token", + "community": 95, + "norm_label": "test_redact_bearer_token()" + }, + { + "label": "test_redact_bearer_token_lowercase()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L158", + "id": "logging_test_format_test_redact_bearer_token_lowercase", + "community": 95, + "norm_label": "test_redact_bearer_token_lowercase()" + }, + { + "label": "test_redact_authorization_header()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L162", + "id": "logging_test_format_test_redact_authorization_header", + "community": 95, + "norm_label": "test_redact_authorization_header()" + }, + { + "label": "test_redact_authorization_bearer_combined()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L166", + "id": "logging_test_format_test_redact_authorization_bearer_combined", + "community": 95, + "norm_label": "test_redact_authorization_bearer_combined()" + }, + { + "label": "test_redact_leaves_non_secret_strings_alone()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L172", + "id": "logging_test_format_test_redact_leaves_non_secret_strings_alone", + "community": 95, + "norm_label": "test_redact_leaves_non_secret_strings_alone()" + }, + { + "label": "test_redact_handles_url_without_password()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L178", + "id": "logging_test_format_test_redact_handles_url_without_password", + "community": 95, + "norm_label": "test_redact_handles_url_without_password()" + }, + { + "label": "test_redact_handles_multiple_secrets_in_one_string()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L183", + "id": "logging_test_format_test_redact_handles_multiple_secrets_in_one_string", + "community": 95, + "norm_label": "test_redact_handles_multiple_secrets_in_one_string()" + }, + { + "label": "test_redact_coerces_non_string_input()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L191", + "id": "logging_test_format_test_redact_coerces_non_string_input", + "community": 95, + "norm_label": "test_redact_coerces_non_string_input()" + }, + { + "label": "test_format_appends_exception_text_when_exc_info_set()", + "file_type": "code", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L200", + "id": "logging_test_format_test_format_appends_exception_text_when_exc_info_set", + "community": 95, + "norm_label": "test_format_appends_exception_text_when_exc_info_set()" + }, + { + "label": "Tests for ``exlab_wizard.logging.format``. Backend Spec \u00a716.4 defines the canon", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L1", + "id": "logging_test_format_rationale_1", + "community": 95, + "norm_label": "tests for ``exlab_wizard.logging.format``. backend spec \u00a716.4 defines the canon" + }, + { + "label": "Ensure each test starts with no run context bleed-through.", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L22", + "id": "logging_test_format_rationale_22", + "community": 238, + "norm_label": "ensure each test starts with no run context bleed-through." + }, + { + "label": "Build a minimal ``LogRecord`` at a known timestamp. The timestamp is set to", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L32", + "id": "logging_test_format_rationale_32", + "community": 95, + "norm_label": "build a minimal ``logrecord`` at a known timestamp. the timestamp is set to" + }, + { + "label": "Spec \u00a716.4: level field is exactly 5 chars wide. \u00a716.5 commits four canonic", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L91", + "id": "logging_test_format_rationale_91", + "community": 95, + "norm_label": "spec \u00a716.4: level field is exactly 5 chars wide. \u00a716.5 commits four canonic" + }, + { + "label": "``record.exc_info`` triggers the formatter to append a traceback (\u00a716.4 keep", + "file_type": "rationale", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L201", + "id": "logging_test_format_rationale_201", + "community": 95, + "norm_label": "``record.exc_info`` triggers the formatter to append a traceback (\u00a716.4 keep" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/unit/orchestrator/__init__.py", + "source_location": "L1", + "id": "tests_unit_orchestrator_init_py", + "community": 429, + "norm_label": "__init__.py" + }, + { + "label": "test_scan.py", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L1", + "id": "tests_unit_orchestrator_test_scan_py", + "community": 9, + "norm_label": "test_scan.py" + }, + { + "label": "test_iter_subdirs_returns_empty_for_missing_path()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L23", + "id": "orchestrator_test_scan_test_iter_subdirs_returns_empty_for_missing_path", + "community": 9, + "norm_label": "test_iter_subdirs_returns_empty_for_missing_path()" + }, + { + "label": "test_iter_subdirs_skips_cache_dir_and_dotfiles()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L27", + "id": "orchestrator_test_scan_test_iter_subdirs_skips_cache_dir_and_dotfiles", + "community": 9, + "norm_label": "test_iter_subdirs_skips_cache_dir_and_dotfiles()" + }, + { + "label": "test_iter_subdirs_does_not_follow_symlinks()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L38", + "id": "orchestrator_test_scan_test_iter_subdirs_does_not_follow_symlinks", + "community": 9, + "norm_label": "test_iter_subdirs_does_not_follow_symlinks()" + }, + { + "label": "test_walk_run_leaves_returns_empty_when_root_missing()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L54", + "id": "orchestrator_test_scan_test_walk_run_leaves_returns_empty_when_root_missing", + "community": 9, + "norm_label": "test_walk_run_leaves_returns_empty_when_root_missing()" + }, + { + "label": "test_walk_run_leaves_finds_experimental_and_test_runs()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L58", + "id": "orchestrator_test_scan_test_walk_run_leaves_finds_experimental_and_test_runs", + "community": 9, + "norm_label": "test_walk_run_leaves_finds_experimental_and_test_runs()" + }, + { + "label": "test_walk_run_leaves_handles_empty_tree()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L69", + "id": "orchestrator_test_scan_test_walk_run_leaves_handles_empty_tree", + "community": 9, + "norm_label": "test_walk_run_leaves_handles_empty_tree()" + }, + { + "label": "test_count_files_and_bytes_excludes_cache_dir_by_default()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L79", + "id": "orchestrator_test_scan_test_count_files_and_bytes_excludes_cache_dir_by_default", + "community": 9, + "norm_label": "test_count_files_and_bytes_excludes_cache_dir_by_default()" + }, + { + "label": "test_count_files_and_bytes_includes_cache_dir_when_requested()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L88", + "id": "orchestrator_test_scan_test_count_files_and_bytes_includes_cache_dir_when_requested", + "community": 9, + "norm_label": "test_count_files_and_bytes_includes_cache_dir_when_requested()" + }, + { + "label": "test_count_files_and_bytes_returns_zero_for_missing_path()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L97", + "id": "orchestrator_test_scan_test_count_files_and_bytes_returns_zero_for_missing_path", + "community": 9, + "norm_label": "test_count_files_and_bytes_returns_zero_for_missing_path()" + }, + { + "label": "test_count_files_and_bytes_descends_into_subdirectories()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L103", + "id": "orchestrator_test_scan_test_count_files_and_bytes_descends_into_subdirectories", + "community": 9, + "norm_label": "test_count_files_and_bytes_descends_into_subdirectories()" + }, + { + "label": "Unit tests for ``exlab_wizard.orchestrator._scan``. The shared filesystem helpe", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L1", + "id": "orchestrator_test_scan_rationale_1", + "community": 9, + "norm_label": "unit tests for ``exlab_wizard.orchestrator._scan``. the shared filesystem helpe" + }, + { + "label": "An empty staging_root has no run leaves -- not an error.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L70", + "id": "orchestrator_test_scan_rationale_70", + "community": 9, + "norm_label": "an empty staging_root has no run leaves -- not an error." + }, + { + "label": "test_staging_query.py", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L1", + "id": "tests_unit_orchestrator_test_staging_query_py", + "community": 9, + "norm_label": "test_staging_query.py" + }, + { + "label": "_config()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L29", + "id": "orchestrator_test_staging_query_config", + "community": 9, + "norm_label": "_config()" + }, + { + "label": "_seed_run()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L39", + "id": "orchestrator_test_staging_query_seed_run", + "community": 9, + "norm_label": "_seed_run()" + }, + { + "label": "test_list_staged_runs_returns_empty_when_staging_root_unset()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L61", + "id": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_unset", + "community": 9, + "norm_label": "test_list_staged_runs_returns_empty_when_staging_root_unset()" + }, + { + "label": "test_list_staged_runs_returns_empty_when_staging_root_missing()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L66", + "id": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_missing", + "community": 9, + "norm_label": "test_list_staged_runs_returns_empty_when_staging_root_missing()" + }, + { + "label": "test_list_staged_runs_returns_summary_rows()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L76", + "id": "orchestrator_test_staging_query_test_list_staged_runs_returns_summary_rows", + "community": 9, + "norm_label": "test_list_staged_runs_returns_summary_rows()" + }, + { + "label": "test_list_staged_runs_includes_test_runs_under_TestRuns()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L92", + "id": "orchestrator_test_staging_query_test_list_staged_runs_includes_test_runs_under_testruns", + "community": 9, + "norm_label": "test_list_staged_runs_includes_test_runs_under_testruns()" + }, + { + "label": "test_list_staged_runs_reports_syncing_when_a_file_is_unverified()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L99", + "id": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", + "community": 9, + "norm_label": "test_list_staged_runs_reports_syncing_when_a_file_is_unverified()" + }, + { + "label": "test_list_staged_runs_reports_synced_when_all_files_verified()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L108", + "id": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", + "community": 9, + "norm_label": "test_list_staged_runs_reports_synced_when_all_files_verified()" + }, + { + "label": "test_list_staged_runs_reports_cleared_after_mark_cleared()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L121", + "id": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", + "community": 9, + "norm_label": "test_list_staged_runs_reports_cleared_after_mark_cleared()" + }, + { + "label": "test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L135", + "id": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", + "community": 9, + "norm_label": "test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing()" + }, + { + "label": "test_list_staged_runs_includes_runs_without_creation_metadata()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L152", + "id": "orchestrator_test_staging_query_test_list_staged_runs_includes_runs_without_creation_metadata", + "community": 9, + "norm_label": "test_list_staged_runs_includes_runs_without_creation_metadata()" + }, + { + "label": "test_list_staged_runs_sorts_most_recent_first()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L162", + "id": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", + "community": 9, + "norm_label": "test_list_staged_runs_sorts_most_recent_first()" + }, + { + "label": "test_list_staged_runs_excludes_cache_dir_from_byte_total()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L177", + "id": "orchestrator_test_staging_query_test_list_staged_runs_excludes_cache_dir_from_byte_total", + "community": 9, + "norm_label": "test_list_staged_runs_excludes_cache_dir_from_byte_total()" + }, + { + "label": "test_list_staged_runs_uses_explicit_staging_root_param()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L189", + "id": "orchestrator_test_staging_query_test_list_staged_runs_uses_explicit_staging_root_param", + "community": 9, + "norm_label": "test_list_staged_runs_uses_explicit_staging_root_param()" + }, + { + "label": "test_list_staged_runs_sets_last_activity_from_directory_mtime()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L197", + "id": "orchestrator_test_staging_query_test_list_staged_runs_sets_last_activity_from_directory_mtime", + "community": 9, + "norm_label": "test_list_staged_runs_sets_last_activity_from_directory_mtime()" + }, + { + "label": "Unit tests for ``exlab_wizard.orchestrator.staging_query``. Backend Spec \u00a713.8.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L1", + "id": "orchestrator_test_staging_query_rationale_1", + "community": 9, + "norm_label": "unit tests for ``exlab_wizard.orchestrator.staging_query``. backend spec \u00a713.8." + }, + { + "label": "A run with an unverified tracked file rolls up to ``syncing``.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L100", + "id": "orchestrator_test_staging_query_rationale_100", + "community": 9, + "norm_label": "a run with an unverified tracked file rolls up to ``syncing``." + }, + { + "label": "Every tracked file verified -> ``current_state == 'synced'``.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L109", + "id": "orchestrator_test_staging_query_rationale_109", + "community": 9, + "norm_label": "every tracked file verified -> ``current_state == 'synced'``." + }, + { + "label": "A run whose ``sync_state.json`` carries ``cleared_at`` rolls up to ``cleared``.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L122", + "id": "orchestrator_test_staging_query_rationale_122", + "community": 9, + "norm_label": "a run whose ``sync_state.json`` carries ``cleared_at`` rolls up to ``cleared``." + }, + { + "label": "A re-modified file (signature cleared -> unverified) flips synced back to syncin", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L136", + "id": "orchestrator_test_staging_query_rationale_136", + "community": 9, + "norm_label": "a re-modified file (signature cleared -> unverified) flips synced back to syncin" + }, + { + "label": "A run leaf with no cache metadata is still listed (ingest.json gone).", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L153", + "id": "orchestrator_test_staging_query_rationale_153", + "community": 9, + "norm_label": "a run leaf with no cache metadata is still listed (ingest.json gone)." + }, + { + "label": "The .exlab-wizard subtree is metadata, not staged data.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L178", + "id": "orchestrator_test_staging_query_rationale_178", + "community": 9, + "norm_label": "the .exlab-wizard subtree is metadata, not staged data." + }, + { + "label": "test_quiescence_poller.py", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L1", + "id": "tests_unit_orchestrator_test_quiescence_poller_py", + "community": 27, + "norm_label": "test_quiescence_poller.py" + }, + { + "label": "_StubNasSync", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L41", + "id": "orchestrator_test_quiescence_poller_stubnassync", + "community": 27, + "norm_label": "_stubnassync" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L44", + "id": "orchestrator_test_quiescence_poller_stubnassync_init", + "community": 27, + "norm_label": ".__init__()" + }, + { + "label": ".enqueue()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L47", + "id": "orchestrator_test_quiescence_poller_stubnassync_enqueue", + "community": 27, + "norm_label": ".enqueue()" + }, + { + "label": "enqueued_paths()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L51", + "id": "orchestrator_test_quiescence_poller_enqueued_paths", + "community": 27, + "norm_label": "enqueued_paths()" + }, + { + "label": "_transport()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L60", + "id": "orchestrator_test_quiescence_poller_transport", + "community": 27, + "norm_label": "_transport()" + }, + { + "label": "_make_config()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L70", + "id": "orchestrator_test_quiescence_poller_make_config", + "community": 27, + "norm_label": "_make_config()" + }, + { + "label": "_make_run()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L101", + "id": "orchestrator_test_quiescence_poller_make_run", + "community": 27, + "norm_label": "_make_run()" + }, + { + "label": "_poller()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L110", + "id": "orchestrator_test_quiescence_poller_poller", + "community": 27, + "norm_label": "_poller()" + }, + { + "label": "_signature()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L118", + "id": "orchestrator_test_quiescence_poller_signature", + "community": 27, + "norm_label": "_signature()" + }, + { + "label": "test_file_becomes_quiet_only_after_settle_window()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L128", + "id": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", + "community": 27, + "norm_label": "test_file_becomes_quiet_only_after_settle_window()" + }, + { + "label": "test_modified_file_resets_the_settle_window()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L150", + "id": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", + "community": 27, + "norm_label": "test_modified_file_resets_the_settle_window()" + }, + { + "label": "test_ignore_glob_files_do_not_make_a_run_eligible()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L176", + "id": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", + "community": 27, + "norm_label": "test_ignore_glob_files_do_not_make_a_run_eligible()" + }, + { + "label": "test_quiet_real_file_enqueues_despite_ignored_sibling()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L192", + "id": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", + "community": 27, + "norm_label": "test_quiet_real_file_enqueues_despite_ignored_sibling()" + }, + { + "label": "test_discovers_both_staging_and_nas_mode_runs()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L212", + "id": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", + "community": 27, + "norm_label": "test_discovers_both_staging_and_nas_mode_runs()" + }, + { + "label": "test_co_rooted_stage_mode_equipment_run_is_not_enqueued()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L234", + "id": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", + "community": 27, + "norm_label": "test_co_rooted_stage_mode_equipment_run_is_not_enqueued()" + }, + { + "label": "test_file_matching_synced_signature_is_not_re_enqueued()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L285", + "id": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", + "community": 27, + "norm_label": "test_file_matching_synced_signature_is_not_re_enqueued()" + }, + { + "label": "test_file_modified_after_recorded_sync_becomes_eligible()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L309", + "id": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", + "community": 27, + "norm_label": "test_file_modified_after_recorded_sync_becomes_eligible()" + }, + { + "label": "test_only_changed_file_in_a_run_is_enqueued()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L332", + "id": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", + "community": 27, + "norm_label": "test_only_changed_file_in_a_run_is_enqueued()" + }, + { + "label": "test_start_then_stop_is_idempotent()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L363", + "id": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", + "community": 27, + "norm_label": "test_start_then_stop_is_idempotent()" + }, + { + "label": "test_apply_config_swaps_config_reference()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L378", + "id": "orchestrator_test_quiescence_poller_test_apply_config_swaps_config_reference", + "community": 27, + "norm_label": "test_apply_config_swaps_config_reference()" + }, + { + "label": "test_apply_config_quiescence_change_is_live()", + "file_type": "code", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L386", + "id": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", + "community": 27, + "norm_label": "test_apply_config_quiescence_change_is_live()" + }, + { + "label": "Unit tests for ``exlab_wizard.orchestrator.quiescence_poller``. The :class:`Qui", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L1", + "id": "orchestrator_test_quiescence_poller_rationale_1", + "community": 27, + "norm_label": "unit tests for ``exlab_wizard.orchestrator.quiescence_poller``. the :class:`qui" + }, + { + "label": "In-memory NAS-sync stub recording per-file enqueue calls.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L42", + "id": "orchestrator_test_quiescence_poller_rationale_42", + "community": 27, + "norm_label": "in-memory nas-sync stub recording per-file enqueue calls." + }, + { + "label": "Build a Config with an optional staging root and a nas-mode equipment.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L76", + "id": "orchestrator_test_quiescence_poller_rationale_76", + "community": 27, + "norm_label": "build a config with an optional staging root and a nas-mode equipment." + }, + { + "label": "Create a run-leaf directory mirroring the \u00a713.2 staging layout.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L102", + "id": "orchestrator_test_quiescence_poller_rationale_102", + "community": 27, + "norm_label": "create a run-leaf directory mirroring the \u00a713.2 staging layout." + }, + { + "label": "A file is enqueued only after its signature settles for the window.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L129", + "id": "orchestrator_test_quiescence_poller_rationale_129", + "community": 27, + "norm_label": "a file is enqueued only after its signature settles for the window." + }, + { + "label": "A signature change resets ``first_seen``; the window restarts.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L151", + "id": "orchestrator_test_quiescence_poller_rationale_151", + "community": 27, + "norm_label": "a signature change resets ``first_seen``; the window restarts." + }, + { + "label": "A run holding only ignore-glob files never enqueues.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L177", + "id": "orchestrator_test_quiescence_poller_rationale_177", + "community": 27, + "norm_label": "a run holding only ignore-glob files never enqueues." + }, + { + "label": "A quiet non-ignored file enqueues even when ignored files coexist.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L193", + "id": "orchestrator_test_quiescence_poller_rationale_193", + "community": 27, + "norm_label": "a quiet non-ignored file enqueues even when ignored files coexist." + }, + { + "label": "A sweep finds runs under staging_root AND under nas-mode local_root.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L213", + "id": "orchestrator_test_quiescence_poller_rationale_213", + "community": 27, + "norm_label": "a sweep finds runs under staging_root and under nas-mode local_root." + }, + { + "label": "A ``stage``-mode equipment sharing one ``local_root`` with a ``nas``-mode eq", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L235", + "id": "orchestrator_test_quiescence_poller_rationale_235", + "community": 27, + "norm_label": "a ``stage``-mode equipment sharing one ``local_root`` with a ``nas``-mode eq" + }, + { + "label": "A quiet file already synced at its current signature is skipped.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L286", + "id": "orchestrator_test_quiescence_poller_rationale_286", + "community": 27, + "norm_label": "a quiet file already synced at its current signature is skipped." + }, + { + "label": "A file modified after its recorded sync re-enters the eligible set.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L310", + "id": "orchestrator_test_quiescence_poller_rationale_310", + "community": 27, + "norm_label": "a file modified after its recorded sync re-enters the eligible set." + }, + { + "label": "A run with a mix of synced + modified files enqueues only the dirty one.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L333", + "id": "orchestrator_test_quiescence_poller_rationale_333", + "community": 27, + "norm_label": "a run with a mix of synced + modified files enqueues only the dirty one." + }, + { + "label": "start()/stop() can be called repeatedly without error.", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L364", + "id": "orchestrator_test_quiescence_poller_rationale_364", + "community": 27, + "norm_label": "start()/stop() can be called repeatedly without error." + }, + { + "label": "A live quiescence-window change takes effect on the next sweep. poll_once r", + "file_type": "rationale", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L387", + "id": "orchestrator_test_quiescence_poller_rationale_387", + "community": 27, + "norm_label": "a live quiescence-window change takes effect on the next sweep. poll_once r" + }, + { + "label": "test_orchestrator_lifecycle.py", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L1", + "id": "tests_integration_test_orchestrator_lifecycle_py", + "community": 48, + "norm_label": "test_orchestrator_lifecycle.py" + }, + { + "label": "_Handle", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L41", + "id": "integration_test_orchestrator_lifecycle_handle", + "community": 48, + "norm_label": "_handle" + }, + { + "label": "_StubJobRow", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L48", + "id": "integration_test_orchestrator_lifecycle_stubjobrow", + "community": 48, + "norm_label": "_stubjobrow" + }, + { + "label": "_StubNasSync", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L53", + "id": "integration_test_orchestrator_lifecycle_stubnassync", + "community": 48, + "norm_label": "_stubnassync" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L56", + "id": "integration_test_orchestrator_lifecycle_stubnassync_init", + "community": 48, + "norm_label": ".__init__()" + }, + { + "label": ".enqueue()", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L60", + "id": "integration_test_orchestrator_lifecycle_stubnassync_enqueue", + "community": 48, + "norm_label": ".enqueue()" + }, + { + "label": ".status()", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L64", + "id": "integration_test_orchestrator_lifecycle_stubnassync_status", + "community": 48, + "norm_label": ".status()" + }, + { + "label": ".list_all()", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L67", + "id": "integration_test_orchestrator_lifecycle_stubnassync_list_all", + "community": 48, + "norm_label": ".list_all()" + }, + { + "label": "enqueued_paths()", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L73", + "id": "integration_test_orchestrator_lifecycle_enqueued_paths", + "community": 48, + "norm_label": "enqueued_paths()" + }, + { + "label": "_make_config()", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L77", + "id": "integration_test_orchestrator_lifecycle_make_config", + "community": 48, + "norm_label": "_make_config()" + }, + { + "label": "_stage_run()", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L104", + "id": "integration_test_orchestrator_lifecycle_stage_run", + "community": 48, + "norm_label": "_stage_run()" + }, + { + "label": "test_poller_enqueues_run_after_settle_window()", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L116", + "id": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", + "community": 48, + "norm_label": "test_poller_enqueues_run_after_settle_window()" + }, + { + "label": "test_poller_skips_file_already_synced_at_current_signature()", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L134", + "id": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", + "community": 48, + "norm_label": "test_poller_skips_file_already_synced_at_current_signature()" + }, + { + "label": "_mark_run_synced()", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L161", + "id": "integration_test_orchestrator_lifecycle_mark_run_synced", + "community": 48, + "norm_label": "_mark_run_synced()" + }, + { + "label": "test_staging_endpoint_surfaces_run_with_rollup_state()", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L170", + "id": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", + "community": 48, + "norm_label": "test_staging_endpoint_surfaces_run_with_rollup_state()" + }, + { + "label": "test_clear_endpoint_deletes_synced_run()", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L187", + "id": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", + "community": 48, + "norm_label": "test_clear_endpoint_deletes_synced_run()" + }, + { + "label": "test_clear_endpoint_rejects_unsynced_run()", + "file_type": "code", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L210", + "id": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", + "community": 48, + "norm_label": "test_clear_endpoint_rejects_unsynced_run()" + }, + { + "label": "Integration test for the orchestrator quiescence-sync lifecycle. Backend Spec \u00a7", + "file_type": "rationale", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L1", + "id": "integration_test_orchestrator_lifecycle_rationale_1", + "community": 48, + "norm_label": "integration test for the orchestrator quiescence-sync lifecycle. backend spec \u00a7" + }, + { + "label": "In-memory sync client that records per-file enqueue + serves status/list_all.", + "file_type": "rationale", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L54", + "id": "integration_test_orchestrator_lifecycle_rationale_54", + "community": 48, + "norm_label": "in-memory sync client that records per-file enqueue + serves status/list_all." + }, + { + "label": "A staged run is enqueued only once its files settle for the window.", + "file_type": "rationale", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L117", + "id": "integration_test_orchestrator_lifecycle_rationale_117", + "community": 48, + "norm_label": "a staged run is enqueued only once its files settle for the window." + }, + { + "label": "A quiet file recorded in sync_state.json at its current signature is not re-", + "file_type": "rationale", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L135", + "id": "integration_test_orchestrator_lifecycle_rationale_135", + "community": 48, + "norm_label": "a quiet file recorded in sync_state.json at its current signature is not re-" + }, + { + "label": "Write a fully-verified ``sync_state.json`` so the run rolls up to ``synced``.", + "file_type": "rationale", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L162", + "id": "integration_test_orchestrator_lifecycle_rationale_162", + "community": 48, + "norm_label": "write a fully-verified ``sync_state.json`` so the run rolls up to ``synced``." + }, + { + "label": "``GET /staging`` reports the run with its ``sync_state.json`` rollup.", + "file_type": "rationale", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L171", + "id": "integration_test_orchestrator_lifecycle_rationale_171", + "community": 48, + "norm_label": "``get /staging`` reports the run with its ``sync_state.json`` rollup." + }, + { + "label": "``POST /staging/.../clear`` deletes a fully-``synced`` run's data files, ret", + "file_type": "rationale", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L188", + "id": "integration_test_orchestrator_lifecycle_rationale_188", + "community": 48, + "norm_label": "``post /staging/.../clear`` deletes a fully-``synced`` run's data files, ret" + }, + { + "label": "A run that is not fully ``synced`` cannot be cleared.", + "file_type": "rationale", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L211", + "id": "integration_test_orchestrator_lifecycle_rationale_211", + "community": 48, + "norm_label": "a run that is not fully ``synced`` cannot be cleared." + }, + { + "label": "test_tray_window_smoke.py", + "file_type": "code", + "source_file": "tests/integration/test_tray_window_smoke.py", + "source_location": "L1", + "id": "tests_integration_test_tray_window_smoke_py", + "community": 58, + "norm_label": "test_tray_window_smoke.py" + }, + { + "label": "_wait_for()", + "file_type": "code", + "source_file": "tests/integration/test_tray_window_smoke.py", + "source_location": "L24", + "id": "integration_test_tray_window_smoke_wait_for", + "community": 58, + "norm_label": "_wait_for()" + }, + { + "label": "test_root_serves_html_after_mount()", + "file_type": "code", + "source_file": "tests/integration/test_tray_window_smoke.py", + "source_location": "L40", + "id": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", + "community": 58, + "norm_label": "test_root_serves_html_after_mount()" + }, + { + "label": "Integration smoke: pywebview-facing root path returns HTML, not JSON 404. This", + "file_type": "rationale", + "source_file": "tests/integration/test_tray_window_smoke.py", + "source_location": "L1", + "id": "integration_test_tray_window_smoke_rationale_1", + "community": 58, + "norm_label": "integration smoke: pywebview-facing root path returns html, not json 404. this" + }, + { + "label": "test_lims_integration.py", + "file_type": "code", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L1", + "id": "tests_integration_test_lims_integration_py", + "community": 201, + "norm_label": "test_lims_integration.py" + }, + { + "label": "_make_client()", + "file_type": "code", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L27", + "id": "integration_test_lims_integration_make_client", + "community": 201, + "norm_label": "_make_client()" + }, + { + "label": "test_client_populates_cache()", + "file_type": "code", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L45", + "id": "integration_test_lims_integration_test_client_populates_cache", + "community": 201, + "norm_label": "test_client_populates_cache()" + }, + { + "label": "test_cache_satisfies_lookup_without_network()", + "file_type": "code", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L63", + "id": "integration_test_lims_integration_test_cache_satisfies_lookup_without_network", + "community": 201, + "norm_label": "test_cache_satisfies_lookup_without_network()" + }, + { + "label": "test_expired_cache_is_refreshed()", + "file_type": "code", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L83", + "id": "integration_test_lims_integration_test_expired_cache_is_refreshed", + "community": 201, + "norm_label": "test_expired_cache_is_refreshed()" + }, + { + "label": "test_relogin_then_cache_upsert()", + "file_type": "code", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L116", + "id": "integration_test_lims_integration_test_relogin_then_cache_upsert", + "community": 201, + "norm_label": "test_relogin_then_cache_upsert()" + }, + { + "label": "test_status_filter_consistent_between_client_and_cache()", + "file_type": "code", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L134", + "id": "integration_test_lims_integration_test_status_filter_consistent_between_client_and_cache", + "community": 201, + "norm_label": "test_status_filter_consistent_between_client_and_cache()" + }, + { + "label": "Integration tests for the LIMS client + cache pair. Backend Spec \u00a77.2. These te", + "file_type": "rationale", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L1", + "id": "integration_test_lims_integration_rationale_1", + "community": 201, + "norm_label": "integration tests for the lims client + cache pair. backend spec \u00a77.2. these te" + }, + { + "label": "list_projects() fills the cache; the cache then returns the same rows.", + "file_type": "rationale", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L46", + "id": "integration_test_lims_integration_rationale_46", + "community": 201, + "norm_label": "list_projects() fills the cache; the cache then returns the same rows." + }, + { + "label": "A get_project against the cache hits without a live LIMS call.", + "file_type": "rationale", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L64", + "id": "integration_test_lims_integration_rationale_64", + "community": 201, + "norm_label": "a get_project against the cache hits without a live lims call." + }, + { + "label": "When cache TTL expires, a refresh from the live API rewrites rows.", + "file_type": "rationale", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L84", + "id": "integration_test_lims_integration_rationale_84", + "community": 201, + "norm_label": "when cache ttl expires, a refresh from the live api rewrites rows." + }, + { + "label": "A 401-then-relogin flow successfully refreshes and caches results.", + "file_type": "rationale", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L117", + "id": "integration_test_lims_integration_rationale_117", + "community": 201, + "norm_label": "a 401-then-relogin flow successfully refreshes and caches results." + }, + { + "label": "test_tray_lifecycle.py", + "file_type": "code", + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L1", + "id": "tests_integration_test_tray_lifecycle_py", + "community": 58, + "norm_label": "test_tray_lifecycle.py" + }, + { + "label": "_wait_for_health()", + "file_type": "code", + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L31", + "id": "integration_test_tray_lifecycle_wait_for_health", + "community": 58, + "norm_label": "_wait_for_health()" + }, + { + "label": "test_tray_lifecycle_round_trip()", + "file_type": "code", + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L48", + "id": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", + "community": 58, + "norm_label": "test_tray_lifecycle_round_trip()" + }, + { + "label": "test_tray_lifecycle_window_handshake_reads_server_json()", + "file_type": "code", + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L85", + "id": "integration_test_tray_lifecycle_test_tray_lifecycle_window_handshake_reads_server_json", + "community": 58, + "norm_label": "test_tray_lifecycle_window_handshake_reads_server_json()" + }, + { + "label": "Integration test: tray <-> window lifecycle round-trip. Backend Spec \u00a74.3.2. Th", + "file_type": "rationale", + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L1", + "id": "integration_test_tray_lifecycle_rationale_1", + "community": 58, + "norm_label": "integration test: tray <-> window lifecycle round-trip. backend spec \u00a74.3.2. th" + }, + { + "label": "Poll ``/api/v1/health`` until the server is accepting requests.", + "file_type": "rationale", + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L32", + "id": "integration_test_tray_lifecycle_rationale_32", + "community": 58, + "norm_label": "poll ``/api/v1/health`` until the server is accepting requests." + }, + { + "label": "test_nas_sync.py", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L1", + "id": "tests_integration_test_nas_sync_py", + "community": 75, + "norm_label": "test_nas_sync.py" + }, + { + "label": "_StubKeyring", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L53", + "id": "integration_test_nas_sync_stubkeyring", + "community": 75, + "norm_label": "_stubkeyring" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L62", + "id": "integration_test_nas_sync_stubkeyring_init", + "community": 75, + "norm_label": ".__init__()" + }, + { + "label": ".get_password()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L65", + "id": "integration_test_nas_sync_stubkeyring_get_password", + "community": 75, + "norm_label": ".get_password()" + }, + { + "label": "stub_binaries_on_path()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L71", + "id": "integration_test_nas_sync_stub_binaries_on_path", + "community": 75, + "norm_label": "stub_binaries_on_path()" + }, + { + "label": "_build_config()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L84", + "id": "integration_test_nas_sync_build_config", + "community": 75, + "norm_label": "_build_config()" + }, + { + "label": "_make_creation()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L111", + "id": "integration_test_nas_sync_make_creation", + "community": 75, + "norm_label": "_make_creation()" + }, + { + "label": "_populate_run()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L130", + "id": "integration_test_nas_sync_populate_run", + "community": 75, + "norm_label": "_populate_run()" + }, + { + "label": "_wait_for_state()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L141", + "id": "integration_test_nas_sync_wait_for_state", + "community": 75, + "norm_label": "_wait_for_state()" + }, + { + "label": "test_full_happy_path_via_stub_rclone()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L161", + "id": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", + "community": 75, + "norm_label": "test_full_happy_path_via_stub_rclone()" + }, + { + "label": "test_pre_sync_gate_blocks_run_with_placeholder_in_path()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L235", + "id": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", + "community": 75, + "norm_label": "test_pre_sync_gate_blocks_run_with_placeholder_in_path()" + }, + { + "label": "test_auth_error_terminates_failed()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L274", + "id": "integration_test_nas_sync_test_auth_error_terminates_failed", + "community": 75, + "norm_label": "test_auth_error_terminates_failed()" + }, + { + "label": "test_force_verify_returns_ok_after_compute()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L305", + "id": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", + "community": 75, + "norm_label": "test_force_verify_returns_ok_after_compute()" + }, + { + "label": "test_remote_hash_mismatch_triggers_retry()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L349", + "id": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", + "community": 75, + "norm_label": "test_remote_hash_mismatch_triggers_retry()" + }, + { + "label": "test_remote_hashsum_probe_failure_does_not_skip_verify()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L422", + "id": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", + "community": 75, + "norm_label": "test_remote_hashsum_probe_failure_does_not_skip_verify()" + }, + { + "label": "test_remote_hash_mismatch_terminal()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L489", + "id": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", + "community": 75, + "norm_label": "test_remote_hash_mismatch_terminal()" + }, + { + "label": "test_poller_per_file_enqueue_drives_to_synced_state()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L547", + "id": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", + "community": 75, + "norm_label": "test_poller_per_file_enqueue_drives_to_synced_state()" + }, + { + "label": "test_poller_to_cleanup_honors_keep_local_and_stamps_cleared()", + "file_type": "code", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L621", + "id": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", + "community": 75, + "norm_label": "test_poller_to_cleanup_honors_keep_local_and_stamps_cleared()" + }, + { + "label": "End-to-end integration tests for the NAS sync subsystem (Phase 10). These tests", + "file_type": "rationale", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L1", + "id": "integration_test_nas_sync_rationale_1", + "community": 75, + "norm_label": "end-to-end integration tests for the nas sync subsystem (phase 10). these tests" + }, + { + "label": "Minimal keyring stub returning a fixed password for every username. The new", + "file_type": "rationale", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L54", + "id": "integration_test_nas_sync_rationale_54", + "community": 75, + "norm_label": "minimal keyring stub returning a fixed password for every username. the new" + }, + { + "label": "Install the rclone stub on PATH for the test.", + "file_type": "rationale", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L72", + "id": "integration_test_nas_sync_rationale_72", + "community": 75, + "norm_label": "install the rclone stub on path for the test." + }, + { + "label": "Poll ``queue.get_by_id`` until ``state`` is in ``targets`` or timeout.", + "file_type": "rationale", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L149", + "id": "integration_test_nas_sync_rationale_149", + "community": 75, + "norm_label": "poll ``queue.get_by_id`` until ``state`` is in ``targets`` or timeout." + }, + { + "label": "Enqueue -> RUNNING -> AWAITING_VERIFY -> VERIFIED -> CLEANED. Uses the Pyth", + "file_type": "rationale", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L166", + "id": "integration_test_nas_sync_rationale_166", + "community": 75, + "norm_label": "enqueue -> running -> awaiting_verify -> verified -> cleaned. uses the pyth" + }, + { + "label": "A run path with ```` is gated; sync_status -> blocked_by_validation.", + "file_type": "rationale", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L240", + "id": "integration_test_nas_sync_rationale_240", + "community": 75, + "norm_label": "a run path with ```` is gated; sync_status -> blocked_by_validation." + }, + { + "label": "The stub returns ``auth_error`` -> queue row terminates FAILED.", + "file_type": "rationale", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L279", + "id": "integration_test_nas_sync_rationale_279", + "community": 75, + "norm_label": "the stub returns ``auth_error`` -> queue row terminates failed." + }, + { + "label": "``force_verify`` runs a manifest pass against the local subtree.", + "file_type": "rationale", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L310", + "id": "integration_test_nas_sync_rationale_310", + "community": 75, + "norm_label": "``force_verify`` runs a manifest pass against the local subtree." + }, + { + "label": "A first ``rclone check`` mismatch retries the transport phase once. The inj", + "file_type": "rationale", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L354", + "id": "integration_test_nas_sync_rationale_354", + "community": 75, + "norm_label": "a first ``rclone check`` mismatch retries the transport phase once. the inj" + }, + { + "label": "A ``rclone check`` TransportError must NOT promote the job to VERIFIED. The", + "file_type": "rationale", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L427", + "id": "integration_test_nas_sync_rationale_427", + "community": 75, + "norm_label": "a ``rclone check`` transporterror must not promote the job to verified. the" + }, + { + "label": "A second remote-hash mismatch terminates the job at FAILED.", + "file_type": "rationale", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L494", + "id": "integration_test_nas_sync_rationale_494", + "community": 75, + "norm_label": "a second remote-hash mismatch terminates the job at failed." + }, + { + "label": "Poller sweep -> per-file enqueue -> drive -> verify -> sync_state.json recor", + "file_type": "rationale", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L552", + "id": "integration_test_nas_sync_rationale_552", + "community": 75, + "norm_label": "poller sweep -> per-file enqueue -> drive -> verify -> sync_state.json recor" + }, + { + "label": "Full Phase 5 path: poller sweep -> enqueue -> verify -> SYNCED rollup -> cle", + "file_type": "rationale", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L626", + "id": "integration_test_nas_sync_rationale_626", + "community": 75, + "norm_label": "full phase 5 path: poller sweep -> enqueue -> verify -> synced rollup -> cle" + }, + { + "label": "test_lims_contract.py", + "file_type": "code", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L1", + "id": "tests_integration_test_lims_contract_py", + "community": 174, + "norm_label": "test_lims_contract.py" + }, + { + "label": "_load()", + "file_type": "code", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L31", + "id": "integration_test_lims_contract_load", + "community": 174, + "norm_label": "_load()" + }, + { + "label": "test_me_snapshot_decodes_into_lims_user()", + "file_type": "code", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L35", + "id": "integration_test_lims_contract_test_me_snapshot_decodes_into_lims_user", + "community": 174, + "norm_label": "test_me_snapshot_decodes_into_lims_user()" + }, + { + "label": "test_login_response_snapshot_decodes_into_lims_user()", + "file_type": "code", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L43", + "id": "integration_test_lims_contract_test_login_response_snapshot_decodes_into_lims_user", + "community": 174, + "norm_label": "test_login_response_snapshot_decodes_into_lims_user()" + }, + { + "label": "test_projects_list_snapshot_flows_through_list_projects_path()", + "file_type": "code", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L51", + "id": "integration_test_lims_contract_test_projects_list_snapshot_flows_through_list_projects_path", + "community": 174, + "norm_label": "test_projects_list_snapshot_flows_through_list_projects_path()" + }, + { + "label": "test_empty_projects_envelope_decodes_to_empty_list()", + "file_type": "code", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L78", + "id": "integration_test_lims_contract_test_empty_projects_envelope_decodes_to_empty_list", + "community": 174, + "norm_label": "test_empty_projects_envelope_decodes_to_empty_list()" + }, + { + "label": "test_project_one_snapshot_decodes_into_lims_project()", + "file_type": "code", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L86", + "id": "integration_test_lims_contract_test_project_one_snapshot_decodes_into_lims_project", + "community": 174, + "norm_label": "test_project_one_snapshot_decodes_into_lims_project()" + }, + { + "label": "test_snapshot_files_present_and_non_empty()", + "file_type": "code", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L100", + "id": "integration_test_lims_contract_test_snapshot_files_present_and_non_empty", + "community": 174, + "norm_label": "test_snapshot_files_present_and_non_empty()" + }, + { + "label": "Contract test against vendored upstream `mcnaughtonadm/exlab` snapshots. Loads", + "file_type": "rationale", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L1", + "id": "integration_test_lims_contract_rationale_1", + "community": 174, + "norm_label": "contract test against vendored upstream `mcnaughtonadm/exlab` snapshots. loads" + }, + { + "label": "``GET /api/v1/me`` JSON must satisfy the ``LIMSUser`` schema.", + "file_type": "rationale", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L36", + "id": "integration_test_lims_contract_rationale_36", + "community": 174, + "norm_label": "``get /api/v1/me`` json must satisfy the ``limsuser`` schema." + }, + { + "label": "Upstream's login body is the same ``safe_user`` shape as ``/me``.", + "file_type": "rationale", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L44", + "id": "integration_test_lims_contract_rationale_44", + "community": 174, + "norm_label": "upstream's login body is the same ``safe_user`` shape as ``/me``." + }, + { + "label": "``GET /api/v1/projects`` payload must yield ``LIMSProject`` rows. Mirrors t", + "file_type": "rationale", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L52", + "id": "integration_test_lims_contract_rationale_52", + "community": 174, + "norm_label": "``get /api/v1/projects`` payload must yield ``limsproject`` rows. mirrors t" + }, + { + "label": "An empty ``data`` array must yield zero rows, not raise.", + "file_type": "rationale", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L79", + "id": "integration_test_lims_contract_rationale_79", + "community": 174, + "norm_label": "an empty ``data`` array must yield zero rows, not raise." + }, + { + "label": "``GET /api/v1/projects/{id}`` returns one bare project object.", + "file_type": "rationale", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L87", + "id": "integration_test_lims_contract_rationale_87", + "community": 174, + "norm_label": "``get /api/v1/projects/{id}`` returns one bare project object." + }, + { + "label": "Every required snapshot exists; guards against accidental deletion.", + "file_type": "rationale", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L101", + "id": "integration_test_lims_contract_rationale_101", + "community": 174, + "norm_label": "every required snapshot exists; guards against accidental deletion." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/integration/__init__.py", + "source_location": "L1", + "id": "tests_integration_init_py", + "community": 430, + "norm_label": "__init__.py" + }, + { + "label": "test_schema_major_mismatch.py", + "file_type": "code", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L1", + "id": "tests_integration_test_schema_major_mismatch_py", + "community": 200, + "norm_label": "test_schema_major_mismatch.py" + }, + { + "label": "_CacheCase", + "file_type": "code", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L39", + "id": "integration_test_schema_major_mismatch_cachecase", + "community": 200, + "norm_label": "_cachecase" + }, + { + "label": "_resolve_reader()", + "file_type": "code", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L156", + "id": "integration_test_schema_major_mismatch_resolve_reader", + "community": 200, + "norm_label": "_resolve_reader()" + }, + { + "label": "test_cross_major_read_raises_schema_major_mismatch()", + "file_type": "code", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L195", + "id": "integration_test_schema_major_mismatch_test_cross_major_read_raises_schema_major_mismatch", + "community": 200, + "norm_label": "test_cross_major_read_raises_schema_major_mismatch()" + }, + { + "label": "test_cross_major_read_records_higher_majors_too()", + "file_type": "code", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L218", + "id": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", + "community": 200, + "norm_label": "test_cross_major_read_records_higher_majors_too()" + }, + { + "label": "Integration tests for the cross-major-read-fails contract from \u00a711.9.2. For eve", + "file_type": "rationale", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L1", + "id": "integration_test_schema_major_mismatch_rationale_1", + "community": 200, + "norm_label": "integration tests for the cross-major-read-fails contract from \u00a711.9.2. for eve" + }, + { + "label": "One cache-file flavour to exercise against the reader gate.", + "file_type": "rationale", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L40", + "id": "integration_test_schema_major_mismatch_rationale_40", + "community": 200, + "norm_label": "one cache-file flavour to exercise against the reader gate." + }, + { + "label": "Walk the candidate matrix and return the first reader method we find. Each", + "file_type": "rationale", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L157", + "id": "integration_test_schema_major_mismatch_rationale_157", + "community": 200, + "norm_label": "walk the candidate matrix and return the first reader method we find. each" + }, + { + "label": "A v2.0 file MUST be refused by every v1.x reader (\u00a711.9.2 rule 3).", + "file_type": "rationale", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L199", + "id": "integration_test_schema_major_mismatch_rationale_199", + "community": 200, + "norm_label": "a v2.0 file must be refused by every v1.x reader (\u00a711.9.2 rule 3)." + }, + { + "label": "A v3.7 file is also refused; the rule isn't tied to ``2.0`` specifically.", + "file_type": "rationale", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L222", + "id": "integration_test_schema_major_mismatch_rationale_222", + "community": 200, + "norm_label": "a v3.7 file is also refused; the rule isn't tied to ``2.0`` specifically." + }, + { + "label": "test_creation_json_concurrent_writes.py", + "file_type": "code", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L1", + "id": "tests_integration_test_creation_json_concurrent_writes_py", + "community": 0, + "norm_label": "test_creation_json_concurrent_writes.py" + }, + { + "label": "_build_minimal_payload()", + "file_type": "code", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L33", + "id": "integration_test_creation_json_concurrent_writes_build_minimal_payload", + "community": 0, + "norm_label": "_build_minimal_payload()" + }, + { + "label": "test_ten_concurrent_mutations_all_land()", + "file_type": "code", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L57", + "id": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", + "community": 0, + "norm_label": "test_ten_concurrent_mutations_all_land()" + }, + { + "label": "test_concurrent_mutations_keep_schema_at_current_version()", + "file_type": "code", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L94", + "id": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", + "community": 0, + "norm_label": "test_concurrent_mutations_keep_schema_at_current_version()" + }, + { + "label": "test_concurrent_mutations_keep_file_valid_json()", + "file_type": "code", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L131", + "id": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", + "community": 0, + "norm_label": "test_concurrent_mutations_keep_file_valid_json()" + }, + { + "label": "Integration test: concurrent ``creation.json`` writers serialize correctly. Spe", + "file_type": "rationale", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L1", + "id": "integration_test_creation_json_concurrent_writes_rationale_1", + "community": 0, + "norm_label": "integration test: concurrent ``creation.json`` writers serialize correctly. spe" + }, + { + "label": "Run 10 ``update_creation_atomic`` calls concurrently against the same file.", + "file_type": "rationale", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L58", + "id": "integration_test_creation_json_concurrent_writes_rationale_58", + "community": 0, + "norm_label": "run 10 ``update_creation_atomic`` calls concurrently against the same file." + }, + { + "label": "The writer pins ``schema_version`` to the current version on every write. Co", + "file_type": "rationale", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L97", + "id": "integration_test_creation_json_concurrent_writes_rationale_97", + "community": 0, + "norm_label": "the writer pins ``schema_version`` to the current version on every write. co" + }, + { + "label": "An interleaved write must never produce a half-written file. The ``os.replac", + "file_type": "rationale", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L132", + "id": "integration_test_creation_json_concurrent_writes_rationale_132", + "community": 0, + "norm_label": "an interleaved write must never produce a half-written file. the ``os.replac" + }, + { + "label": "test_validator_determinism.py", + "file_type": "code", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L1", + "id": "tests_integration_test_validator_determinism_py", + "community": 120, + "norm_label": "test_validator_determinism.py" + }, + { + "label": "_build_creation_json_dict()", + "file_type": "code", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L49", + "id": "integration_test_validator_determinism_build_creation_json_dict", + "community": 120, + "norm_label": "_build_creation_json_dict()" + }, + { + "label": "_write_creation_json()", + "file_type": "code", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L83", + "id": "integration_test_validator_determinism_write_creation_json", + "community": 120, + "norm_label": "_write_creation_json()" + }, + { + "label": "_build_fixture_tree()", + "file_type": "code", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L89", + "id": "integration_test_validator_determinism_build_fixture_tree", + "community": 120, + "norm_label": "_build_fixture_tree()" + }, + { + "label": "test_audit_two_calls_return_byte_identical_finding_lists()", + "file_type": "code", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L164", + "id": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", + "community": 120, + "norm_label": "test_audit_two_calls_return_byte_identical_finding_lists()" + }, + { + "label": "test_audit_byte_identical_with_query_problems_alias()", + "file_type": "code", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L221", + "id": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", + "community": 120, + "norm_label": "test_audit_byte_identical_with_query_problems_alias()" + }, + { + "label": "Integration test: ``Validator.audit`` is byte-deterministic across runs. Backen", + "file_type": "rationale", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L1", + "id": "integration_test_validator_determinism_rationale_1", + "community": 120, + "norm_label": "integration test: ``validator.audit`` is byte-deterministic across runs. backen" + }, + { + "label": "Construct a tree with several findings in stable on-disk shape. The tree co", + "file_type": "rationale", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L90", + "id": "integration_test_validator_determinism_rationale_90", + "community": 120, + "norm_label": "construct a tree with several findings in stable on-disk shape. the tree co" + }, + { + "label": "Spec \u00a711.8 determinism: two ``audit`` calls produce identical findings. The", + "file_type": "rationale", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L165", + "id": "integration_test_validator_determinism_rationale_165", + "community": 120, + "norm_label": "spec \u00a711.8 determinism: two ``audit`` calls produce identical findings. the" + }, + { + "label": "``audit`` and ``query_problems`` produce byte-identical outputs. This is th", + "file_type": "rationale", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L222", + "id": "integration_test_validator_determinism_rationale_222", + "community": 120, + "norm_label": "``audit`` and ``query_problems`` produce byte-identical outputs. this is th" + }, + { + "label": "test_pyinstaller_smoke.py", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L1", + "id": "tests_integration_test_pyinstaller_smoke_py", + "community": 35, + "norm_label": "test_pyinstaller_smoke.py" + }, + { + "label": "test_tray_main_imports()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L61", + "id": "integration_test_pyinstaller_smoke_test_tray_main_imports", + "community": 35, + "norm_label": "test_tray_main_imports()" + }, + { + "label": "test_window_main_imports()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L71", + "id": "integration_test_pyinstaller_smoke_test_window_main_imports", + "community": 35, + "norm_label": "test_window_main_imports()" + }, + { + "label": "test_cli_main_imports()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L77", + "id": "integration_test_pyinstaller_smoke_test_cli_main_imports", + "community": 35, + "norm_label": "test_cli_main_imports()" + }, + { + "label": "test_version_exposed_and_well_formed()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L91", + "id": "integration_test_pyinstaller_smoke_test_version_exposed_and_well_formed", + "community": 35, + "norm_label": "test_version_exposed_and_well_formed()" + }, + { + "label": "test_version_matches_pyproject()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L105", + "id": "integration_test_pyinstaller_smoke_test_version_matches_pyproject", + "community": 35, + "norm_label": "test_version_matches_pyproject()" + }, + { + "label": "test_pyproject_scripts_match_expected()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L123", + "id": "integration_test_pyinstaller_smoke_test_pyproject_scripts_match_expected", + "community": 35, + "norm_label": "test_pyproject_scripts_match_expected()" + }, + { + "label": "test_spec_file_is_valid_python()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L138", + "id": "integration_test_pyinstaller_smoke_test_spec_file_is_valid_python", + "community": 35, + "norm_label": "test_spec_file_is_valid_python()" + }, + { + "label": "test_spec_references_entry_executable()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L150", + "id": "integration_test_pyinstaller_smoke_test_spec_references_entry_executable", + "community": 35, + "norm_label": "test_spec_references_entry_executable()" + }, + { + "label": "test_spec_references_entry_script()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L164", + "id": "integration_test_pyinstaller_smoke_test_spec_references_entry_script", + "community": 35, + "norm_label": "test_spec_references_entry_script()" + }, + { + "label": "test_spec_uses_merge_directive()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L174", + "id": "integration_test_pyinstaller_smoke_test_spec_uses_merge_directive", + "community": 35, + "norm_label": "test_spec_uses_merge_directive()" + }, + { + "label": "test_spec_lists_required_hidden_imports()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L189", + "id": "integration_test_pyinstaller_smoke_test_spec_lists_required_hidden_imports", + "community": 35, + "norm_label": "test_spec_lists_required_hidden_imports()" + }, + { + "label": "test_spec_declares_macos_bundle_identifier()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L198", + "id": "integration_test_pyinstaller_smoke_test_spec_declares_macos_bundle_identifier", + "community": 35, + "norm_label": "test_spec_declares_macos_bundle_identifier()" + }, + { + "label": "test_workflow_is_valid_yaml()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L209", + "id": "integration_test_pyinstaller_smoke_test_workflow_is_valid_yaml", + "community": 35, + "norm_label": "test_workflow_is_valid_yaml()" + }, + { + "label": "test_workflow_matrix_lists_all_v1_targets()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L218", + "id": "integration_test_pyinstaller_smoke_test_workflow_matrix_lists_all_v1_targets", + "community": 35, + "norm_label": "test_workflow_matrix_lists_all_v1_targets()" + }, + { + "label": "test_workflow_runs_pyinstaller_and_smoke()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L227", + "id": "integration_test_pyinstaller_smoke_test_workflow_runs_pyinstaller_and_smoke", + "community": 35, + "norm_label": "test_workflow_runs_pyinstaller_and_smoke()" + }, + { + "label": "test_internal_templates_dir_exists()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L246", + "id": "integration_test_pyinstaller_smoke_test_internal_templates_dir_exists", + "community": 35, + "norm_label": "test_internal_templates_dir_exists()" + }, + { + "label": "test_internal_plugins_dir_exists()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L252", + "id": "integration_test_pyinstaller_smoke_test_internal_plugins_dir_exists", + "community": 35, + "norm_label": "test_internal_plugins_dir_exists()" + }, + { + "label": "test_local_build_scripts_exist()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L263", + "id": "integration_test_pyinstaller_smoke_test_local_build_scripts_exist", + "community": 35, + "norm_label": "test_local_build_scripts_exist()" + }, + { + "label": "test_workflow_does_not_run_on_branch_push()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L283", + "id": "integration_test_pyinstaller_smoke_test_workflow_does_not_run_on_branch_push", + "community": 35, + "norm_label": "test_workflow_does_not_run_on_branch_push()" + }, + { + "label": "test_workflow_pull_request_targets_main_only()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L299", + "id": "integration_test_pyinstaller_smoke_test_workflow_pull_request_targets_main_only", + "community": 35, + "norm_label": "test_workflow_pull_request_targets_main_only()" + }, + { + "label": "test_workflow_concurrency_cancels_in_progress()", + "file_type": "code", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L310", + "id": "integration_test_pyinstaller_smoke_test_workflow_concurrency_cancels_in_progress", + "community": 35, + "norm_label": "test_workflow_concurrency_cancels_in_progress()" + }, + { + "label": "Structural smoke tests for the PyInstaller distribution. Phase 15. The actual `", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L1", + "id": "integration_test_pyinstaller_smoke_rationale_1", + "community": 35, + "norm_label": "structural smoke tests for the pyinstaller distribution. phase 15. the actual `" + }, + { + "label": "``exlab_wizard.tray.main:main`` must import cleanly. PyInstaller's static a", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L62", + "id": "integration_test_pyinstaller_smoke_rationale_62", + "community": 35, + "norm_label": "``exlab_wizard.tray.main:main`` must import cleanly. pyinstaller's static a" + }, + { + "label": "``exlab_wizard.window.main:main`` must import cleanly.", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L72", + "id": "integration_test_pyinstaller_smoke_rationale_72", + "community": 35, + "norm_label": "``exlab_wizard.window.main:main`` must import cleanly." + }, + { + "label": "``exlab_wizard.__main__:main`` must import cleanly. This is the operator-fa", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L78", + "id": "integration_test_pyinstaller_smoke_rationale_78", + "community": 35, + "norm_label": "``exlab_wizard.__main__:main`` must import cleanly. this is the operator-fa" + }, + { + "label": "``exlab_wizard.__version__`` is a non-empty SemVer string. Backend Spec \u00a715", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L92", + "id": "integration_test_pyinstaller_smoke_rationale_92", + "community": 35, + "norm_label": "``exlab_wizard.__version__`` is a non-empty semver string. backend spec \u00a715" + }, + { + "label": "``__version__`` mirrors ``[project] version`` in ``pyproject.toml``. Drift", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L106", + "id": "integration_test_pyinstaller_smoke_rationale_106", + "community": 35, + "norm_label": "``__version__`` mirrors ``[project] version`` in ``pyproject.toml``. drift" + }, + { + "label": "``[project.scripts]`` lists exactly the three \u00a715.3 entry points.", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L124", + "id": "integration_test_pyinstaller_smoke_rationale_124", + "community": 35, + "norm_label": "``[project.scripts]`` lists exactly the three \u00a715.3 entry points." + }, + { + "label": "``exlab_wizard.spec`` parses as Python source. The file is interpreted by P", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L139", + "id": "integration_test_pyinstaller_smoke_rationale_139", + "community": 35, + "norm_label": "``exlab_wizard.spec`` parses as python source. the file is interpreted by p" + }, + { + "label": "The spec names each of the three \u00a715.1 executables.", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L151", + "id": "integration_test_pyinstaller_smoke_rationale_151", + "community": 35, + "norm_label": "the spec names each of the three \u00a715.1 executables." + }, + { + "label": "The spec names the three entry-point script paths. PyInstaller resolves the", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L165", + "id": "integration_test_pyinstaller_smoke_rationale_165", + "community": 35, + "norm_label": "the spec names the three entry-point script paths. pyinstaller resolves the" + }, + { + "label": "The spec uses PyInstaller's ``MERGE`` directive (Backend Spec \u00a715.1). ``MER", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L175", + "id": "integration_test_pyinstaller_smoke_rationale_175", + "community": 35, + "norm_label": "the spec uses pyinstaller's ``merge`` directive (backend spec \u00a715.1). ``mer" + }, + { + "label": "The spec declares hidden imports for libs PyInstaller misses. Backend Spec", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L190", + "id": "integration_test_pyinstaller_smoke_rationale_190", + "community": 35, + "norm_label": "the spec declares hidden imports for libs pyinstaller misses. backend spec" + }, + { + "label": "The spec sets the macOS ``CFBundleIdentifier`` (\u00a715.1).", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L199", + "id": "integration_test_pyinstaller_smoke_rationale_199", + "community": 35, + "norm_label": "the spec sets the macos ``cfbundleidentifier`` (\u00a715.1)." + }, + { + "label": "``.github/workflows/build.yml`` parses as YAML.", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L210", + "id": "integration_test_pyinstaller_smoke_rationale_210", + "community": 35, + "norm_label": "``.github/workflows/build.yml`` parses as yaml." + }, + { + "label": "The matrix covers the three v1 runners (Linux, Windows, mac arm64).", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L219", + "id": "integration_test_pyinstaller_smoke_rationale_219", + "community": 35, + "norm_label": "the matrix covers the three v1 runners (linux, windows, mac arm64)." + }, + { + "label": "The workflow runs ``pyinstaller exlab_wizard.spec`` and a version probe. Ba", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L228", + "id": "integration_test_pyinstaller_smoke_rationale_228", + "community": 35, + "norm_label": "the workflow runs ``pyinstaller exlab_wizard.spec`` and a version probe. ba" + }, + { + "label": "``_internal/templates/`` is checked into the repo (\u00a715.4).", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L247", + "id": "integration_test_pyinstaller_smoke_rationale_247", + "community": 35, + "norm_label": "``_internal/templates/`` is checked into the repo (\u00a715.4)." + }, + { + "label": "``_internal/plugins/`` is checked into the repo (\u00a715.4).", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L253", + "id": "integration_test_pyinstaller_smoke_rationale_253", + "community": 35, + "norm_label": "``_internal/plugins/`` is checked into the repo (\u00a715.4)." + }, + { + "label": "Both POSIX and Windows wrappers are committed. These mirror the CI build st", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L264", + "id": "integration_test_pyinstaller_smoke_rationale_264", + "community": 35, + "norm_label": "both posix and windows wrappers are committed. these mirror the ci build st" + }, + { + "label": "Build matrix is reserved for the merge gate, not every branch push. Branch", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L284", + "id": "integration_test_pyinstaller_smoke_rationale_284", + "community": 35, + "norm_label": "build matrix is reserved for the merge gate, not every branch push. branch" + }, + { + "label": "``pull_request`` is gated on ``main`` so PRs to other branches don't run.", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L300", + "id": "integration_test_pyinstaller_smoke_rationale_300", + "community": 35, + "norm_label": "``pull_request`` is gated on ``main`` so prs to other branches don't run." + }, + { + "label": "Superseded runs on the same ref are auto-cancelled. Without ``cancel-in-pro", + "file_type": "rationale", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L311", + "id": "integration_test_pyinstaller_smoke_rationale_311", + "community": 35, + "norm_label": "superseded runs on the same ref are auto-cancelled. without ``cancel-in-pro" + }, + { + "label": "test_host_isolation.py", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L1", + "id": "tests_integration_plugins_test_host_isolation_py", + "community": 66, + "norm_label": "test_host_isolation.py" + }, + { + "label": "_StubRegistry", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L50", + "id": "plugins_test_host_isolation_stubregistry", + "community": 66, + "norm_label": "_stubregistry" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L53", + "id": "plugins_test_host_isolation_stubregistry_init", + "community": 66, + "norm_label": ".__init__()" + }, + { + "label": ".get_record()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L56", + "id": "plugins_test_host_isolation_stubregistry_get_record", + "community": 66, + "norm_label": ".get_record()" + }, + { + "label": "_record_from_fixture()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L60", + "id": "plugins_test_host_isolation_record_from_fixture", + "community": 66, + "norm_label": "_record_from_fixture()" + }, + { + "label": "_make_dst_with_txt()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L89", + "id": "plugins_test_host_isolation_make_dst_with_txt", + "community": 66, + "norm_label": "_make_dst_with_txt()" + }, + { + "label": "_ctx()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L98", + "id": "plugins_test_host_isolation_ctx", + "community": 66, + "norm_label": "_ctx()" + }, + { + "label": "_refuse_input()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L114", + "id": "plugins_test_host_isolation_refuse_input", + "community": 66, + "norm_label": "_refuse_input()" + }, + { + "label": "test_hello_plugin_runs_successfully()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L124", + "id": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", + "community": 66, + "norm_label": "test_hello_plugin_runs_successfully()" + }, + { + "label": "test_timeout_enforcement()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L149", + "id": "plugins_test_host_isolation_test_timeout_enforcement", + "community": 66, + "norm_label": "test_timeout_enforcement()" + }, + { + "label": "test_plugin_error_does_not_abort_session()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L182", + "id": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", + "community": 66, + "norm_label": "test_plugin_error_does_not_abort_session()" + }, + { + "label": "test_input_required_suspend_resume()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L220", + "id": "plugins_test_host_isolation_test_input_required_suspend_resume", + "community": 66, + "norm_label": "test_input_required_suspend_resume()" + }, + { + "label": "test_input_required_cancelled()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L257", + "id": "plugins_test_host_isolation_test_input_required_cancelled", + "community": 66, + "norm_label": "test_input_required_cancelled()" + }, + { + "label": "test_subprocess_crash_contained()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L284", + "id": "plugins_test_host_isolation_test_subprocess_crash_contained", + "community": 66, + "norm_label": "test_subprocess_crash_contained()" + }, + { + "label": "test_policy_violation_reverts_forbidden_write()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L323", + "id": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", + "community": 66, + "norm_label": "test_policy_violation_reverts_forbidden_write()" + }, + { + "label": "test_sanitized_environment_passes_through_path_home_lang()", + "file_type": "code", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L359", + "id": "plugins_test_host_isolation_test_sanitized_environment_passes_through_path_home_lang", + "community": 66, + "norm_label": "test_sanitized_environment_passes_through_path_home_lang()" + }, + { + "label": "Integration tests for :class:`PluginHost`. Backend Spec \u00a76.3. Each test spawns", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L1", + "id": "plugins_test_host_isolation_rationale_1", + "community": 66, + "norm_label": "integration tests for :class:`pluginhost`. backend spec \u00a76.3. each test spawns" + }, + { + "label": "Minimal :class:`PluginRegistryProtocol` impl backed by a dict.", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L51", + "id": "plugins_test_host_isolation_rationale_51", + "community": 66, + "norm_label": "minimal :class:`pluginregistryprotocol` impl backed by a dict." + }, + { + "label": "Build a :class:`PluginRecord` pointing at one fixture plugin. ``hello_plugi", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L67", + "id": "plugins_test_host_isolation_rationale_67", + "community": 66, + "norm_label": "build a :class:`pluginrecord` pointing at one fixture plugin. ``hello_plugi" + }, + { + "label": "Create a destination tree with a single ``data.txt`` file.", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L90", + "id": "plugins_test_host_isolation_rationale_90", + "community": 66, + "norm_label": "create a destination tree with a single ``data.txt`` file." + }, + { + "label": "Build a :class:`PluginContext` rooted at ``dst``.", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L99", + "id": "plugins_test_host_isolation_rationale_99", + "community": 66, + "norm_label": "build a :class:`plugincontext` rooted at ``dst``." + }, + { + "label": "Default ``on_input_required`` callback for tests that don't expect a prompt.", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L115", + "id": "plugins_test_host_isolation_rationale_115", + "community": 66, + "norm_label": "default ``on_input_required`` callback for tests that don't expect a prompt." + }, + { + "label": "Backend Spec \u00a76.5: the canonical hello-world plugin appends ``hello\\\\n``.", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L125", + "id": "plugins_test_host_isolation_rationale_125", + "community": 66, + "norm_label": "backend spec \u00a76.5: the canonical hello-world plugin appends ``hello\\\\n``." + }, + { + "label": "Backend Spec \u00a76.3.4: the host must SIGTERM/SIGKILL on wall-clock timeout.", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L150", + "id": "plugins_test_host_isolation_rationale_150", + "community": 66, + "norm_label": "backend spec \u00a76.3.4: the host must sigterm/sigkill on wall-clock timeout." + }, + { + "label": "Backend Spec \u00a76.1.3: a plugin error must not abort the surrounding pass.", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L183", + "id": "plugins_test_host_isolation_rationale_183", + "community": 66, + "norm_label": "backend spec \u00a76.1.3: a plugin error must not abort the surrounding pass." + }, + { + "label": "Backend Spec \u00a76.4: the host must re-spawn the worker on operator reply.", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L221", + "id": "plugins_test_host_isolation_rationale_221", + "community": 66, + "norm_label": "backend spec \u00a76.4: the host must re-spawn the worker on operator reply." + }, + { + "label": "Backend Spec \u00a76.4: an operator cancel must abort the whole pass.", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L258", + "id": "plugins_test_host_isolation_rationale_258", + "community": 66, + "norm_label": "backend spec \u00a76.4: an operator cancel must abort the whole pass." + }, + { + "label": "Backend Spec \u00a76.3.4: a worker hard-exit must not raise into the host.", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L285", + "id": "plugins_test_host_isolation_rationale_285", + "community": 66, + "norm_label": "backend spec \u00a76.3.4: a worker hard-exit must not raise into the host." + }, + { + "label": "Backend Spec \u00a76.1.5: a write to README.md must be detected and reverted.", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L324", + "id": "plugins_test_host_isolation_rationale_324", + "community": 66, + "norm_label": "backend spec \u00a76.1.5: a write to readme.md must be detected and reverted." + }, + { + "label": "Backend Spec \u00a76.3.1: only PATH, HOME, LANG, EXLAB_* reach the worker. Skipp", + "file_type": "rationale", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L360", + "id": "plugins_test_host_isolation_rationale_360", + "community": 66, + "norm_label": "backend spec \u00a76.3.1: only path, home, lang, exlab_* reach the worker. skipp" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/integration/plugins/__init__.py", + "source_location": "L1", + "id": "tests_integration_plugins_init_py", + "community": 303, + "norm_label": "__init__.py" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/integration/controller/__init__.py", + "source_location": "L1", + "id": "tests_integration_controller_init_py", + "community": 314, + "norm_label": "__init__.py" + }, + { + "label": "test_creation_flow.py", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1", + "id": "tests_integration_controller_test_creation_flow_py", + "community": 4, + "norm_label": "test_creation_flow.py" + }, + { + "label": "_build_config()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L67", + "id": "controller_test_creation_flow_build_config", + "community": 4, + "norm_label": "_build_config()" + }, + { + "label": "_project_request()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L94", + "id": "controller_test_creation_flow_project_request", + "community": 4, + "norm_label": "_project_request()" + }, + { + "label": "_run_request()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L126", + "id": "controller_test_creation_flow_run_request", + "community": 4, + "norm_label": "_run_request()" + }, + { + "label": "_build_controller()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L155", + "id": "controller_test_creation_flow_build_controller", + "community": 4, + "norm_label": "_build_controller()" + }, + { + "label": "_drain_to_done()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L177", + "id": "controller_test_creation_flow_drain_to_done", + "community": 4, + "norm_label": "_drain_to_done()" + }, + { + "label": "test_full_project_creation_happy_path()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L194", + "id": "controller_test_creation_flow_test_full_project_creation_happy_path", + "community": 4, + "norm_label": "test_full_project_creation_happy_path()" + }, + { + "label": "test_full_experimental_run_creation_happy_path()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L227", + "id": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", + "community": 4, + "norm_label": "test_full_experimental_run_creation_happy_path()" + }, + { + "label": "test_same_minute_run_creation_collision_is_hard_failure()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L246", + "id": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", + "community": 4, + "norm_label": "test_same_minute_run_creation_collision_is_hard_failure()" + }, + { + "label": "test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L278", + "id": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", + "community": 4, + "norm_label": "test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind()" + }, + { + "label": "test_validation_rejects_empty_label()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L309", + "id": "controller_test_creation_flow_test_validation_rejects_empty_label", + "community": 4, + "norm_label": "test_validation_rejects_empty_label()" + }, + { + "label": "test_validation_rejects_label_over_length()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L324", + "id": "controller_test_creation_flow_test_validation_rejects_label_over_length", + "community": 4, + "norm_label": "test_validation_rejects_label_over_length()" + }, + { + "label": "test_validation_rejects_objective_over_length()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L338", + "id": "controller_test_creation_flow_test_validation_rejects_objective_over_length", + "community": 4, + "norm_label": "test_validation_rejects_objective_over_length()" + }, + { + "label": "test_validation_rejects_operator_not_in_allowlist()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L354", + "id": "controller_test_creation_flow_test_validation_rejects_operator_not_in_allowlist", + "community": 4, + "norm_label": "test_validation_rejects_operator_not_in_allowlist()" + }, + { + "label": "test_validation_rejects_unknown_equipment()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L368", + "id": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", + "community": 4, + "norm_label": "test_validation_rejects_unknown_equipment()" + }, + { + "label": "test_validation_rejects_unsafe_project_name_for_runs()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L384", + "id": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", + "community": 4, + "norm_label": "test_validation_rejects_unsafe_project_name_for_runs()" + }, + { + "label": "test_validation_rejects_empty_objective()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L400", + "id": "controller_test_creation_flow_test_validation_rejects_empty_objective", + "community": 4, + "norm_label": "test_validation_rejects_empty_objective()" + }, + { + "label": "test_validation_rejects_empty_operator()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L413", + "id": "controller_test_creation_flow_test_validation_rejects_empty_operator", + "community": 4, + "norm_label": "test_validation_rejects_empty_operator()" + }, + { + "label": "test_plugin_input_required_suspend_resume()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L431", + "id": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", + "community": 4, + "norm_label": "test_plugin_input_required_suspend_resume()" + }, + { + "label": "test_cancel_with_discard_files_removes_partial_dir()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L502", + "id": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", + "community": 4, + "norm_label": "test_cancel_with_discard_files_removes_partial_dir()" + }, + { + "label": "test_cancel_without_discard_leaves_partial_dir()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L540", + "id": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", + "community": 4, + "norm_label": "test_cancel_without_discard_leaves_partial_dir()" + }, + { + "label": "test_post_validate_blocks_sync_when_placeholder_left_in_file()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L562", + "id": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", + "community": 4, + "norm_label": "test_post_validate_blocks_sync_when_placeholder_left_in_file()" + }, + { + "label": "test_subscribe_yields_phase_events_and_done_envelope()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L603", + "id": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", + "community": 4, + "norm_label": "test_subscribe_yields_phase_events_and_done_envelope()" + }, + { + "label": "test_status_unknown_session_raises()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L631", + "id": "controller_test_creation_flow_test_status_unknown_session_raises", + "community": 4, + "norm_label": "test_status_unknown_session_raises()" + }, + { + "label": "test_resume_rejects_session_not_in_input_required()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L639", + "id": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", + "community": 4, + "norm_label": "test_resume_rejects_session_not_in_input_required()" + }, + { + "label": "test_cancel_unknown_session_is_noop()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L649", + "id": "controller_test_creation_flow_test_cancel_unknown_session_is_noop", + "community": 4, + "norm_label": "test_cancel_unknown_session_is_noop()" + }, + { + "label": "test_noop_readme_generator_writes_minimal_readme()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L662", + "id": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", + "community": 80, + "norm_label": "test_noop_readme_generator_writes_minimal_readme()" + }, + { + "label": "test_real_readme_generator_writes_frontmatter_and_cache()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L694", + "id": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", + "community": 4, + "norm_label": "test_real_readme_generator_writes_frontmatter_and_cache()" + }, + { + "label": "test_noop_nas_sync_returns_none()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L749", + "id": "controller_test_creation_flow_test_noop_nas_sync_returns_none", + "community": 4, + "norm_label": "test_noop_nas_sync_returns_none()" + }, + { + "label": "test_resume_unknown_session_raises()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L760", + "id": "controller_test_creation_flow_test_resume_unknown_session_raises", + "community": 4, + "norm_label": "test_resume_unknown_session_raises()" + }, + { + "label": "test_required_template_field_missing_in_readme_extra_fails()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L768", + "id": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", + "community": 4, + "norm_label": "test_required_template_field_missing_in_readme_extra_fails()" + }, + { + "label": "test_required_template_field_present_passes_validation()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L804", + "id": "controller_test_creation_flow_test_required_template_field_present_passes_validation", + "community": 4, + "norm_label": "test_required_template_field_present_passes_validation()" + }, + { + "label": "test_subscribe_unknown_session_raises()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L839", + "id": "controller_test_creation_flow_test_subscribe_unknown_session_raises", + "community": 4, + "norm_label": "test_subscribe_unknown_session_raises()" + }, + { + "label": "test_cancel_input_required_aborts_session_via_plugin_callback()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L848", + "id": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", + "community": 4, + "norm_label": "test_cancel_input_required_aborts_session_via_plugin_callback()" + }, + { + "label": "test_cancel_invokes_cleanup_when_compose_path_fails()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L906", + "id": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", + "community": 4, + "norm_label": "test_cancel_invokes_cleanup_when_compose_path_fails()" + }, + { + "label": "test_cleanup_removes_existing_directory_when_discard_files_true()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L929", + "id": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", + "community": 4, + "norm_label": "test_cleanup_removes_existing_directory_when_discard_files_true()" + }, + { + "label": "test_config_required_readme_field_missing_fails()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L948", + "id": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", + "community": 4, + "norm_label": "test_config_required_readme_field_missing_fails()" + }, + { + "label": "test_render_failure_transitions_session_to_failed()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L974", + "id": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", + "community": 4, + "norm_label": "test_render_failure_transitions_session_to_failed()" + }, + { + "label": "test_run_creation_writes_equipment_json_at_root()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1002", + "id": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", + "community": 4, + "norm_label": "test_run_creation_writes_equipment_json_at_root()" + }, + { + "label": "test_format_error_with_non_validation_exception_returns_internal_error()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1016", + "id": "controller_test_creation_flow_test_format_error_with_non_validation_exception_returns_internal_error", + "community": 4, + "norm_label": "test_format_error_with_non_validation_exception_returns_internal_error()" + }, + { + "label": "test_append_log_writes_log_line()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1025", + "id": "controller_test_creation_flow_test_append_log_writes_log_line", + "community": 4, + "norm_label": "test_append_log_writes_log_line()" + }, + { + "label": "test_run_inherits_lims_project_block_from_parent()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1041", + "id": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", + "community": 4, + "norm_label": "test_run_inherits_lims_project_block_from_parent()" + }, + { + "label": "test_cancel_before_task_starts_invokes_cleanup()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1065", + "id": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", + "community": 4, + "norm_label": "test_cancel_before_task_starts_invokes_cleanup()" + }, + { + "label": "test_resume_session_with_no_resume_queue_raises()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1085", + "id": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", + "community": 4, + "norm_label": "test_resume_session_with_no_resume_queue_raises()" + }, + { + "label": "test_subscribe_creates_queue_when_missing()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1106", + "id": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", + "community": 4, + "norm_label": "test_subscribe_creates_queue_when_missing()" + }, + { + "label": "test_plugin_pass_aborted_transitions_to_failed()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1130", + "id": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", + "community": 4, + "norm_label": "test_plugin_pass_aborted_transitions_to_failed()" + }, + { + "label": "test_required_field_ids_filters_non_dict_entries()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1175", + "id": "controller_test_creation_flow_test_required_field_ids_filters_non_dict_entries", + "community": 4, + "norm_label": "test_required_field_ids_filters_non_dict_entries()" + }, + { + "label": "test_run_without_parent_creation_json_fills_stub_block()", + "file_type": "code", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1191", + "id": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", + "community": 4, + "norm_label": "test_run_without_parent_creation_json_fills_stub_block()" + }, + { + "label": "End-to-end integration tests for :class:`CreationController`. Each test drives", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1", + "id": "controller_test_creation_flow_rationale_1", + "community": 4, + "norm_label": "end-to-end integration tests for :class:`creationcontroller`. each test drives" + }, + { + "label": "Construct a minimal Config with one equipment configured.", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L68", + "id": "controller_test_creation_flow_rationale_68", + "community": 4, + "norm_label": "construct a minimal config with one equipment configured." + }, + { + "label": "Wait for the session task to finish and return the final state dict.", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L178", + "id": "controller_test_creation_flow_rationale_178", + "community": 4, + "norm_label": "wait for the session task to finish and return the final state dict." + }, + { + "label": "Project creation walks every state and emits a current-version creation.json.", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L195", + "id": "controller_test_creation_flow_rationale_195", + "community": 4, + "norm_label": "project creation walks every state and emits a current-version creation.json." + }, + { + "label": "Redesign \u00a73.4: two creations on the same instrument within the same minute r", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L249", + "id": "controller_test_creation_flow_rationale_249", + "community": 4, + "norm_label": "redesign \u00a73.4: two creations on the same instrument within the same minute r" + }, + { + "label": "A run whose parent project name is not a safe path segment (\u00a73.2) is rejecte", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L385", + "id": "controller_test_creation_flow_rationale_385", + "community": 4, + "norm_label": "a run whose parent project name is not a safe path segment (\u00a73.2) is rejecte" + }, + { + "label": "When a plugin raises PluginInputRequired, controller emits the event and res", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L432", + "id": "controller_test_creation_flow_rationale_432", + "community": 4, + "norm_label": "when a plugin raises plugininputrequired, controller emits the event and res" + }, + { + "label": "A cancel with ``discard_files=True`` deletes the partial directory.", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L503", + "id": "controller_test_creation_flow_rationale_503", + "community": 4, + "norm_label": "a cancel with ``discard_files=true`` deletes the partial directory." + }, + { + "label": "A cancel with ``discard_files=False`` leaves the partial directory.", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L541", + "id": "controller_test_creation_flow_rationale_541", + "community": 4, + "norm_label": "a cancel with ``discard_files=false`` leaves the partial directory." + }, + { + "label": "A rendered file containing ```` must trip the post-validate gate.", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L565", + "id": "controller_test_creation_flow_rationale_565", + "community": 4, + "norm_label": "a rendered file containing ```` must trip the post-validate gate." + }, + { + "label": "T1 (\u00a7C1): the production ``ReadmeGenerator`` -- injected by ``tray.dependenc", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L695", + "id": "controller_test_creation_flow_rationale_695", + "community": 4, + "norm_label": "t1 (\u00a7c1): the production ``readmegenerator`` -- injected by ``tray.dependenc" + }, + { + "label": "A template-required README field missing from ``readme_extra`` must trigger", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L771", + "id": "controller_test_creation_flow_rationale_771", + "community": 4, + "norm_label": "a template-required readme field missing from ``readme_extra`` must trigger" + }, + { + "label": "When ``readme_extra`` supplies a non-empty value for a required field the va", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L807", + "id": "controller_test_creation_flow_rationale_807", + "community": 4, + "norm_label": "when ``readme_extra`` supplies a non-empty value for a required field the va" + }, + { + "label": "When the operator cancels the input-required prompt (host returns ``aborted=", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L851", + "id": "controller_test_creation_flow_rationale_851", + "community": 4, + "norm_label": "when the operator cancels the input-required prompt (host returns ``aborted=" + }, + { + "label": "``_cleanup`` swallows compose-path errors gracefully.", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L909", + "id": "controller_test_creation_flow_rationale_909", + "community": 4, + "norm_label": "``_cleanup`` swallows compose-path errors gracefully." + }, + { + "label": "``_cleanup`` removes the destination directory when ``discard_files=True``.", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L932", + "id": "controller_test_creation_flow_rationale_932", + "community": 4, + "norm_label": "``_cleanup`` removes the destination directory when ``discard_files=true``." + }, + { + "label": "A config.yaml-required README field missing from ``readme_extra`` must trigg", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L949", + "id": "controller_test_creation_flow_rationale_949", + "community": 4, + "norm_label": "a config.yaml-required readme field missing from ``readme_extra`` must trigg" + }, + { + "label": "A Copier render failure (e.g. dst exists) transitions the session to ``FAILE", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L975", + "id": "controller_test_creation_flow_rationale_975", + "community": 4, + "norm_label": "a copier render failure (e.g. dst exists) transitions the session to ``faile" + }, + { + "label": "The controller writes ``equipment.json`` under ``//.exlab-wiz", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1003", + "id": "controller_test_creation_flow_rationale_1003", + "community": 4, + "norm_label": "the controller writes ``equipment.json`` under ``//.exlab-wiz" + }, + { + "label": "Generic exceptions are wrapped as ``internal_error``.", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1019", + "id": "controller_test_creation_flow_rationale_1019", + "community": 4, + "norm_label": "generic exceptions are wrapped as ``internal_error``." + }, + { + "label": "The best-effort log appender writes to the equipment cache dir.", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1026", + "id": "controller_test_creation_flow_rationale_1026", + "community": 4, + "norm_label": "the best-effort log appender writes to the equipment cache dir." + }, + { + "label": "A run inherits its LIMS identity from the parent project's creation.json (Ba", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1042", + "id": "controller_test_creation_flow_rationale_1042", + "community": 4, + "norm_label": "a run inherits its lims identity from the parent project's creation.json (ba" + }, + { + "label": "If ``cancel`` is invoked on a session that has not yet started a pipeline ta", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1066", + "id": "controller_test_creation_flow_rationale_1066", + "community": 4, + "norm_label": "if ``cancel`` is invoked on a session that has not yet started a pipeline ta" + }, + { + "label": "Resume against a session that has no resume queue raises.", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1086", + "id": "controller_test_creation_flow_rationale_1086", + "community": 4, + "norm_label": "resume against a session that has no resume queue raises." + }, + { + "label": "``subscribe`` initializes ``event_queue`` if the session opened with none (d", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1107", + "id": "controller_test_creation_flow_rationale_1107", + "community": 4, + "norm_label": "``subscribe`` initializes ``event_queue`` if the session opened with none (d" + }, + { + "label": "When :class:`PluginHost` returns ``aborted=True``, the controller transition", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1131", + "id": "controller_test_creation_flow_rationale_1131", + "community": 4, + "norm_label": "when :class:`pluginhost` returns ``aborted=true``, the controller transition" + }, + { + "label": "The ``_required_field_ids`` helper must skip non-dict entries in the templat", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1176", + "id": "controller_test_creation_flow_rationale_1176", + "community": 4, + "norm_label": "the ``_required_field_ids`` helper must skip non-dict entries in the templat" + }, + { + "label": "A run whose parent project folder has no readable creation.json still produc", + "file_type": "rationale", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1192", + "id": "controller_test_creation_flow_rationale_1192", + "community": 4, + "norm_label": "a run whose parent project folder has no readable creation.json still produc" + }, + { + "label": "test_full_flow.py", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L1", + "id": "tests_integration_api_test_full_flow_py", + "community": 80, + "norm_label": "test_full_flow.py" + }, + { + "label": "ready_config()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L51", + "id": "api_test_full_flow_ready_config", + "community": 1, + "norm_label": "ready_config()" + }, + { + "label": "app_with_real_controller()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L80", + "id": "api_test_full_flow_app_with_real_controller", + "community": 80, + "norm_label": "app_with_real_controller()" + }, + { + "label": "_client()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L110", + "id": "api_test_full_flow_client", + "community": 80, + "norm_label": "_client()" + }, + { + "label": "test_full_project_creation_flow()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L116", + "id": "api_test_full_flow_test_full_project_creation_flow", + "community": 80, + "norm_label": "test_full_project_creation_flow()" + }, + { + "label": "test_health_returns_ready_when_setup_complete()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L160", + "id": "api_test_full_flow_test_health_returns_ready_when_setup_complete", + "community": 80, + "norm_label": "test_health_returns_ready_when_setup_complete()" + }, + { + "label": "test_health_warns_when_lims_unreachable()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L170", + "id": "api_test_full_flow_test_health_warns_when_lims_unreachable", + "community": 112, + "norm_label": "test_health_warns_when_lims_unreachable()" + }, + { + "label": "test_setup_status_each_incomplete_state()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L180", + "id": "api_test_full_flow_test_setup_status_each_incomplete_state", + "community": 80, + "norm_label": "test_setup_status_each_incomplete_state()" + }, + { + "label": "test_create_session_blocked_when_setup_incomplete()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L214", + "id": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", + "community": 80, + "norm_label": "test_create_session_blocked_when_setup_incomplete()" + }, + { + "label": "test_lims_unreachable_does_not_block_creation()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L238", + "id": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", + "community": 80, + "norm_label": "test_lims_unreachable_does_not_block_creation()" + }, + { + "label": "test_problems_refresh_returns_audit_count()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L290", + "id": "api_test_full_flow_test_problems_refresh_returns_audit_count", + "community": 80, + "norm_label": "test_problems_refresh_returns_audit_count()" + }, + { + "label": "test_get_problems_returns_findings_and_filters()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L313", + "id": "api_test_full_flow_test_get_problems_returns_findings_and_filters", + "community": 80, + "norm_label": "test_get_problems_returns_findings_and_filters()" + }, + { + "label": "test_put_config_validates_and_updates_state()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L333", + "id": "api_test_full_flow_test_put_config_validates_and_updates_state", + "community": 112, + "norm_label": "test_put_config_validates_and_updates_state()" + }, + { + "label": "test_get_tree_in_ready_state()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L353", + "id": "api_test_full_flow_test_get_tree_in_ready_state", + "community": 112, + "norm_label": "test_get_tree_in_ready_state()" + }, + { + "label": "test_websocket_streams_session_events_sync()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L366", + "id": "api_test_full_flow_test_websocket_streams_session_events_sync", + "community": 80, + "norm_label": "test_websocket_streams_session_events_sync()" + }, + { + "label": "_build_minimal_controller()", + "file_type": "code", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L438", + "id": "api_test_full_flow_build_minimal_controller", + "community": 80, + "norm_label": "_build_minimal_controller()" + }, + { + "label": "Full-flow integration test for the FastAPI surface. Drives one project-creation", + "file_type": "rationale", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L1", + "id": "api_test_full_flow_rationale_1", + "community": 80, + "norm_label": "full-flow integration test for the fastapi surface. drives one project-creation" + }, + { + "label": "Build a FastAPI app with the real controller + validator wired.", + "file_type": "rationale", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L81", + "id": "api_test_full_flow_rationale_81", + "community": 80, + "norm_label": "build a fastapi app with the real controller + validator wired." + }, + { + "label": "End-to-end: POST /sessions -> session reaches DONE -> creation.json on disk.", + "file_type": "rationale", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L117", + "id": "api_test_full_flow_rationale_117", + "community": 80, + "norm_label": "end-to-end: post /sessions -> session reaches done -> creation.json on disk." + }, + { + "label": "Each non-soft INCOMPLETE_* state surfaces the right next_action.", + "file_type": "rationale", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L181", + "id": "api_test_full_flow_rationale_181", + "community": 80, + "norm_label": "each non-soft incomplete_* state surfaces the right next_action." + }, + { + "label": "POST /sessions returns 503 + setup_incomplete in non-soft INCOMPLETE_* states.", + "file_type": "rationale", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L215", + "id": "api_test_full_flow_rationale_215", + "community": 80, + "norm_label": "post /sessions returns 503 + setup_incomplete in non-soft incomplete_* states." + }, + { + "label": "The soft block does not gate POST /sessions per \u00a74.9.4.", + "file_type": "rationale", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L239", + "id": "api_test_full_flow_rationale_239", + "community": 80, + "norm_label": "the soft block does not gate post /sessions per \u00a74.9.4." + }, + { + "label": "``POST /problems/refresh`` invokes Validator.audit and returns the count.", + "file_type": "rationale", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L291", + "id": "api_test_full_flow_rationale_291", + "community": 80, + "norm_label": "``post /problems/refresh`` invokes validator.audit and returns the count." + }, + { + "label": "End-to-end WebSocket stream of phase frames. Uses the synchronous TestClien", + "file_type": "rationale", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L367", + "id": "api_test_full_flow_rationale_367", + "community": 80, + "norm_label": "end-to-end websocket stream of phase frames. uses the synchronous testclien" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/integration/api/__init__.py", + "source_location": "L1", + "id": "tests_integration_api_init_py", + "community": 315, + "norm_label": "__init__.py" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/fixtures/__init__.py", + "source_location": "L1", + "id": "tests_fixtures_init_py", + "community": 431, + "norm_label": "__init__.py" + }, + { + "label": "mock_lims.py", + "file_type": "code", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L1", + "id": "tests_fixtures_mock_lims_py", + "community": 99, + "norm_label": "mock_lims.py" + }, + { + "label": "MockLimsState", + "file_type": "code", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L38", + "id": "fixtures_mock_lims_mocklimsstate", + "community": 265, + "norm_label": "mocklimsstate" + }, + { + "label": ".issue_session()", + "file_type": "code", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L53", + "id": "fixtures_mock_lims_mocklimsstate_issue_session", + "community": 265, + "norm_label": ".issue_session()" + }, + { + "label": ".is_valid_session()", + "file_type": "code", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L59", + "id": "fixtures_mock_lims_mocklimsstate_is_valid_session", + "community": 265, + "norm_label": ".is_valid_session()" + }, + { + "label": ".invalidate_sessions()", + "file_type": "code", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L62", + "id": "fixtures_mock_lims_mocklimsstate_invalidate_sessions", + "community": 265, + "norm_label": ".invalidate_sessions()" + }, + { + "label": "_default_user()", + "file_type": "code", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L69", + "id": "fixtures_mock_lims_default_user", + "community": 99, + "norm_label": "_default_user()" + }, + { + "label": "_default_project()", + "file_type": "code", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L77", + "id": "fixtures_mock_lims_default_project", + "community": 99, + "norm_label": "_default_project()" + }, + { + "label": "make_mock_lims_app()", + "file_type": "code", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L90", + "id": "fixtures_mock_lims_make_mock_lims_app", + "community": 99, + "norm_label": "make_mock_lims_app()" + }, + { + "label": "In-memory FastAPI fixture LIMS server used by the LIMS-client tests. The fixtur", + "file_type": "rationale", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L1", + "id": "fixtures_mock_lims_rationale_1", + "community": 99, + "norm_label": "in-memory fastapi fixture lims server used by the lims-client tests. the fixtur" + }, + { + "label": "Mutable per-app state. ``valid_email`` / ``valid_password`` are the credent", + "file_type": "rationale", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L39", + "id": "fixtures_mock_lims_rationale_39", + "community": 265, + "norm_label": "mutable per-app state. ``valid_email`` / ``valid_password`` are the credent" + }, + { + "label": "Mint a fresh opaque session token.", + "file_type": "rationale", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L54", + "id": "fixtures_mock_lims_rationale_54", + "community": 265, + "norm_label": "mint a fresh opaque session token." + }, + { + "label": "Drop every issued session token. The next protected call sees a 401 and", + "file_type": "rationale", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L63", + "id": "fixtures_mock_lims_rationale_63", + "community": 265, + "norm_label": "drop every issued session token. the next protected call sees a 401 and" + }, + { + "label": "Build a FastAPI app implementing the v1 LIMS read surface. Returns a fresh", + "file_type": "rationale", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L97", + "id": "fixtures_mock_lims_rationale_97", + "community": 99, + "norm_label": "build a fastapi app implementing the v1 lims read surface. returns a fresh" + }, + { + "label": "stub_rclone.py", + "file_type": "code", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L1", + "id": "tests_fixtures_stub_rclone_py", + "community": 182, + "norm_label": "stub_rclone.py" + }, + { + "label": "_parse_copy_args()", + "file_type": "code", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L54", + "id": "fixtures_stub_rclone_parse_copy_args", + "community": 182, + "norm_label": "_parse_copy_args()" + }, + { + "label": "_is_flag_value()", + "file_type": "code", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L66", + "id": "fixtures_stub_rclone_is_flag_value", + "community": 182, + "norm_label": "_is_flag_value()" + }, + { + "label": "_emit_combined()", + "file_type": "code", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L84", + "id": "fixtures_stub_rclone_emit_combined", + "community": 182, + "norm_label": "_emit_combined()" + }, + { + "label": "_flag_value()", + "file_type": "code", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L113", + "id": "fixtures_stub_rclone_flag_value", + "community": 182, + "norm_label": "_flag_value()" + }, + { + "label": "_dump_env()", + "file_type": "code", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L124", + "id": "fixtures_stub_rclone_dump_env", + "community": 182, + "norm_label": "_dump_env()" + }, + { + "label": "_require_env()", + "file_type": "code", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L135", + "id": "fixtures_stub_rclone_require_env", + "community": 182, + "norm_label": "_require_env()" + }, + { + "label": "main()", + "file_type": "code", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L166", + "id": "fixtures_stub_rclone_main", + "community": 182, + "norm_label": "main()" + }, + { + "label": "Return ``(local, remote_spec)`` from a ``rclone copy`` argv.", + "file_type": "rationale", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L55", + "id": "fixtures_stub_rclone_rationale_55", + "community": 182, + "norm_label": "return ``(local, remote_spec)`` from a ``rclone copy`` argv." + }, + { + "label": "Return True if ``arg`` is the value-half of a ``--flag value`` pair.", + "file_type": "rationale", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L67", + "id": "fixtures_stub_rclone_rationale_67", + "community": 182, + "norm_label": "return true if ``arg`` is the value-half of a ``--flag value`` pair." + }, + { + "label": "Write `` `` per file in ``--files-from`` to ``--combined``. `", + "file_type": "rationale", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L85", + "id": "fixtures_stub_rclone_rationale_85", + "community": 182, + "norm_label": "write `` `` per file in ``--files-from`` to ``--combined``. `" + }, + { + "label": "Return the value following ``flag`` in ``argv`` or ``None``.", + "file_type": "rationale", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L114", + "id": "fixtures_stub_rclone_rationale_114", + "community": 182, + "norm_label": "return the value following ``flag`` in ``argv`` or ``none``." + }, + { + "label": "When ``STUB_RCLONE_ENV_DUMP`` is set, write the rclone-prefixed env.", + "file_type": "rationale", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L125", + "id": "fixtures_stub_rclone_rationale_125", + "community": 182, + "norm_label": "when ``stub_rclone_env_dump`` is set, write the rclone-prefixed env." + }, + { + "label": "Enforce ``STUB_RCLONE_REQUIRE_ENV``; return 0 if satisfied else 3. Confirms", + "file_type": "rationale", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L136", + "id": "fixtures_stub_rclone_rationale_136", + "community": 182, + "norm_label": "enforce ``stub_rclone_require_env``; return 0 if satisfied else 3. confirms" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/fixtures/lims/__init__.py", + "source_location": "L1", + "id": "tests_fixtures_lims_init_py", + "community": 432, + "norm_label": "__init__.py" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/fixtures/lims/exlab_v1/__init__.py", + "source_location": "L1", + "id": "tests_fixtures_lims_exlab_v1_init_py", + "community": 433, + "norm_label": "__init__.py" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/__init__.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_init_py", + "community": 303, + "norm_label": "__init__.py" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/hello_plugin/__init__.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_hello_plugin_init_py", + "community": 149, + "norm_label": "__init__.py" + }, + { + "label": "hello_plugin -- canonical scaffold from Backend Spec \u00a76.5. The ``Plugin`` re-ex", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/hello_plugin/__init__.py", + "source_location": "L1", + "id": "hello_plugin_init_rationale_1", + "community": 149, + "norm_label": "hello_plugin -- canonical scaffold from backend spec \u00a76.5. the ``plugin`` re-ex" + }, + { + "label": "plugin.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/hello_plugin/plugin.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_hello_plugin_plugin_py", + "community": 149, + "norm_label": "plugin.py" + }, + { + "label": "HelloPlugin", + "file_type": "code", + "source_file": "tests/fixtures/plugins/hello_plugin/plugin.py", + "source_location": "L20", + "id": "hello_plugin_plugin_helloplugin", + "community": 149, + "norm_label": "helloplugin" + }, + { + "label": ".can_handle()", + "file_type": "code", + "source_file": "tests/fixtures/plugins/hello_plugin/plugin.py", + "source_location": "L28", + "id": "hello_plugin_plugin_helloplugin_can_handle", + "community": 149, + "norm_label": ".can_handle()" + }, + { + "label": ".transform()", + "file_type": "code", + "source_file": "tests/fixtures/plugins/hello_plugin/plugin.py", + "source_location": "L32", + "id": "hello_plugin_plugin_helloplugin_transform", + "community": 149, + "norm_label": ".transform()" + }, + { + "label": "hello_plugin -- minimal real plugin used by the host integration suite. Backend", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/hello_plugin/plugin.py", + "source_location": "L1", + "id": "hello_plugin_plugin_rationale_1", + "community": 149, + "norm_label": "hello_plugin -- minimal real plugin used by the host integration suite. backend" + }, + { + "label": "Append ``hello\\\\n`` to every ``.txt`` file the host hands us.", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/hello_plugin/plugin.py", + "source_location": "L21", + "id": "hello_plugin_plugin_rationale_21", + "community": 149, + "norm_label": "append ``hello\\\\n`` to every ``.txt`` file the host hands us." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/__init__.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_failures_init_py", + "community": 401, + "norm_label": "__init__.py" + }, + { + "label": "Failure-mode plugin fixtures (timeout, error, input-required, policy, crash).", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/__init__.py", + "source_location": "L1", + "id": "failures_init_rationale_1", + "community": 401, + "norm_label": "failure-mode plugin fixtures (timeout, error, input-required, policy, crash)." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/__init__.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_failures_error_plugin_init_py", + "community": 215, + "norm_label": "__init__.py" + }, + { + "label": "error_plugin -- raises PluginError mid-transform.", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/__init__.py", + "source_location": "L1", + "id": "error_plugin_init_rationale_1", + "community": 215, + "norm_label": "error_plugin -- raises pluginerror mid-transform." + }, + { + "label": "plugin.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_failures_error_plugin_plugin_py", + "community": 215, + "norm_label": "plugin.py" + }, + { + "label": "ErrorPlugin", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L17", + "id": "error_plugin_plugin_errorplugin", + "community": 215, + "norm_label": "errorplugin" + }, + { + "label": ".can_handle()", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L25", + "id": "error_plugin_plugin_errorplugin_can_handle", + "community": 215, + "norm_label": ".can_handle()" + }, + { + "label": ".transform()", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L28", + "id": "error_plugin_plugin_errorplugin_transform", + "community": 215, + "norm_label": ".transform()" + }, + { + "label": "error_plugin -- raises PluginError mid-transform. Exercises the Backend Spec \u00a76", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L1", + "id": "error_plugin_plugin_rationale_1", + "community": 215, + "norm_label": "error_plugin -- raises pluginerror mid-transform. exercises the backend spec \u00a76" + }, + { + "label": "Always raises PluginError on transform.", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L18", + "id": "error_plugin_plugin_rationale_18", + "community": 215, + "norm_label": "always raises pluginerror on transform." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/__init__.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_failures_policy_violation_plugin_init_py", + "community": 149, + "norm_label": "__init__.py" + }, + { + "label": "policy_violation_plugin -- writes to a forbidden path (Backend Spec \u00a76.1.5).", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/__init__.py", + "source_location": "L1", + "id": "policy_violation_plugin_init_rationale_1", + "community": 149, + "norm_label": "policy_violation_plugin -- writes to a forbidden path (backend spec \u00a76.1.5)." + }, + { + "label": "plugin.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_failures_policy_violation_plugin_plugin_py", + "community": 149, + "norm_label": "plugin.py" + }, + { + "label": "PolicyViolationPlugin", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", + "source_location": "L18", + "id": "policy_violation_plugin_plugin_policyviolationplugin", + "community": 149, + "norm_label": "policyviolationplugin" + }, + { + "label": ".can_handle()", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", + "source_location": "L26", + "id": "policy_violation_plugin_plugin_policyviolationplugin_can_handle", + "community": 149, + "norm_label": ".can_handle()" + }, + { + "label": ".transform()", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", + "source_location": "L29", + "id": "policy_violation_plugin_plugin_policyviolationplugin_transform", + "community": 149, + "norm_label": ".transform()" + }, + { + "label": "policy_violation_plugin -- exercises Backend Spec \u00a76.1.5 enforcement. The plugi", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", + "source_location": "L1", + "id": "policy_violation_plugin_plugin_rationale_1", + "community": 149, + "norm_label": "policy_violation_plugin -- exercises backend spec \u00a76.1.5 enforcement. the plugi" + }, + { + "label": "Write into ``README.md`` (a wizard-controlled file).", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", + "source_location": "L19", + "id": "policy_violation_plugin_plugin_rationale_19", + "community": 149, + "norm_label": "write into ``readme.md`` (a wizard-controlled file)." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/__init__.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_failures_input_required_plugin_init_py", + "community": 248, + "norm_label": "__init__.py" + }, + { + "label": "input_required_plugin -- exercises the PluginInputRequired suspend/resume handsh", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/__init__.py", + "source_location": "L1", + "id": "input_required_plugin_init_rationale_1", + "community": 248, + "norm_label": "input_required_plugin -- exercises the plugininputrequired suspend/resume handsh" + }, + { + "label": "plugin.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_failures_input_required_plugin_plugin_py", + "community": 248, + "norm_label": "plugin.py" + }, + { + "label": "InputRequiredPlugin", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", + "source_location": "L20", + "id": "input_required_plugin_plugin_inputrequiredplugin", + "community": 248, + "norm_label": "inputrequiredplugin" + }, + { + "label": ".can_handle()", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", + "source_location": "L28", + "id": "input_required_plugin_plugin_inputrequiredplugin_can_handle", + "community": 248, + "norm_label": ".can_handle()" + }, + { + "label": ".transform()", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", + "source_location": "L31", + "id": "input_required_plugin_plugin_inputrequiredplugin_transform", + "community": 248, + "norm_label": ".transform()" + }, + { + "label": "input_required_plugin -- exercises Backend Spec \u00a76.4 suspend/resume. On the fir", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", + "source_location": "L1", + "id": "input_required_plugin_plugin_rationale_1", + "community": 248, + "norm_label": "input_required_plugin -- exercises backend spec \u00a76.4 suspend/resume. on the fir" + }, + { + "label": "Demand a user-supplied ``color`` value before completing.", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", + "source_location": "L21", + "id": "input_required_plugin_plugin_rationale_21", + "community": 248, + "norm_label": "demand a user-supplied ``color`` value before completing." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/__init__.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_failures_crash_plugin_init_py", + "community": 247, + "norm_label": "__init__.py" + }, + { + "label": "crash_plugin -- exercises subprocess crash containment (SIGSEGV-like).", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/__init__.py", + "source_location": "L1", + "id": "crash_plugin_init_rationale_1", + "community": 247, + "norm_label": "crash_plugin -- exercises subprocess crash containment (sigsegv-like)." + }, + { + "label": "plugin.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/plugin.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_failures_crash_plugin_plugin_py", + "community": 247, + "norm_label": "plugin.py" + }, + { + "label": "CrashPlugin", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/plugin.py", + "source_location": "L18", + "id": "crash_plugin_plugin_crashplugin", + "community": 247, + "norm_label": "crashplugin" + }, + { + "label": ".can_handle()", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/plugin.py", + "source_location": "L26", + "id": "crash_plugin_plugin_crashplugin_can_handle", + "community": 247, + "norm_label": ".can_handle()" + }, + { + "label": ".transform()", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/plugin.py", + "source_location": "L29", + "id": "crash_plugin_plugin_crashplugin_transform", + "community": 247, + "norm_label": ".transform()" + }, + { + "label": "crash_plugin -- exercises subprocess crash containment. The plugin's ``transfor", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/plugin.py", + "source_location": "L1", + "id": "crash_plugin_plugin_rationale_1", + "community": 247, + "norm_label": "crash_plugin -- exercises subprocess crash containment. the plugin's ``transfor" + }, + { + "label": "Hard-exit the worker process before any file write.", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/plugin.py", + "source_location": "L19", + "id": "crash_plugin_plugin_rationale_19", + "community": 247, + "norm_label": "hard-exit the worker process before any file write." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/__init__.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_failures_timeout_plugin_init_py", + "community": 249, + "norm_label": "__init__.py" + }, + { + "label": "Failure fixture: plugin that hangs in ``transform`` past its timeout.", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/__init__.py", + "source_location": "L1", + "id": "timeout_plugin_init_rationale_1", + "community": 249, + "norm_label": "failure fixture: plugin that hangs in ``transform`` past its timeout." + }, + { + "label": "plugin.py", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", + "source_location": "L1", + "id": "tests_fixtures_plugins_failures_timeout_plugin_plugin_py", + "community": 249, + "norm_label": "plugin.py" + }, + { + "label": "TimeoutPlugin", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", + "source_location": "L19", + "id": "timeout_plugin_plugin_timeoutplugin", + "community": 249, + "norm_label": "timeoutplugin" + }, + { + "label": ".can_handle()", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", + "source_location": "L27", + "id": "timeout_plugin_plugin_timeoutplugin_can_handle", + "community": 249, + "norm_label": ".can_handle()" + }, + { + "label": ".transform()", + "file_type": "code", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", + "source_location": "L30", + "id": "timeout_plugin_plugin_timeoutplugin_transform", + "community": 249, + "norm_label": ".transform()" + }, + { + "label": "timeout_plugin -- exercises Backend Spec \u00a76.3.4 timeout enforcement. The plugin", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", + "source_location": "L1", + "id": "timeout_plugin_plugin_rationale_1", + "community": 249, + "norm_label": "timeout_plugin -- exercises backend spec \u00a76.3.4 timeout enforcement. the plugin" + }, + { + "label": "Hang past the declared timeout. Never reaches its file write.", + "file_type": "rationale", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", + "source_location": "L20", + "id": "timeout_plugin_plugin_rationale_20", + "community": 249, + "norm_label": "hang past the declared timeout. never reaches its file write." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/fixtures/configs/__init__.py", + "source_location": "L1", + "id": "tests_fixtures_configs_init_py", + "community": 402, + "norm_label": "__init__.py" + }, + { + "label": "Read-only YAML fixtures for the config-loader unit tests.", + "file_type": "rationale", + "source_file": "tests/fixtures/configs/__init__.py", + "source_location": "L1", + "id": "configs_init_rationale_1", + "community": 402, + "norm_label": "read-only yaml fixtures for the config-loader unit tests." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/fixtures/templates/__init__.py", + "source_location": "L1", + "id": "tests_fixtures_templates_init_py", + "community": 403, + "norm_label": "__init__.py" + }, + { + "label": "Copier template fixtures for the test suite.", + "file_type": "rationale", + "source_file": "tests/fixtures/templates/__init__.py", + "source_location": "L1", + "id": "templates_init_rationale_1", + "community": 403, + "norm_label": "copier template fixtures for the test suite." + }, + { + "label": "test_flow_18_relay_receive.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_18_relay_receive.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_18_relay_receive_py", + "community": 307, + "norm_label": "test_flow_18_relay_receive.py" + }, + { + "label": "_goto()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_18_relay_receive.py", + "source_location": "L11", + "id": "e2e_test_flow_18_relay_receive_goto", + "community": 307, + "norm_label": "_goto()" + }, + { + "label": "test_flow_18_received_equipment_node_appears()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_18_relay_receive.py", + "source_location": "L24", + "id": "e2e_test_flow_18_relay_receive_test_flow_18_received_equipment_node_appears", + "community": 307, + "norm_label": "test_flow_18_received_equipment_node_appears()" + }, + { + "label": "test_flow_18_received_metadata_shows_relay_badge()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_18_relay_receive.py", + "source_location": "L31", + "id": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", + "community": 307, + "norm_label": "test_flow_18_received_metadata_shows_relay_badge()" + }, + { + "label": "E2E flow 18: relay-receive \u2014 received equipment auto-discovery (Redesign \u00a73.3).", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_18_relay_receive.py", + "source_location": "L1", + "id": "e2e_test_flow_18_relay_receive_rationale_1", + "community": 307, + "norm_label": "e2e flow 18: relay-receive \u2014 received equipment auto-discovery (redesign \u00a73.3)." + }, + { + "label": "conftest.py", + "file_type": "code", + "source_file": "tests/e2e/conftest.py", + "source_location": "L1", + "id": "tests_e2e_conftest_py", + "community": 88, + "norm_label": "conftest.py" + }, + { + "label": "_free_port()", + "file_type": "code", + "source_file": "tests/e2e/conftest.py", + "source_location": "L46", + "id": "e2e_conftest_free_port", + "community": 88, + "norm_label": "_free_port()" + }, + { + "label": "_resolve_chromium_executable()", + "file_type": "code", + "source_file": "tests/e2e/conftest.py", + "source_location": "L53", + "id": "e2e_conftest_resolve_chromium_executable", + "community": 88, + "norm_label": "_resolve_chromium_executable()" + }, + { + "label": "server_url()", + "file_type": "code", + "source_file": "tests/e2e/conftest.py", + "source_location": "L90", + "id": "e2e_conftest_server_url", + "community": 88, + "norm_label": "server_url()" + }, + { + "label": "browser()", + "file_type": "code", + "source_file": "tests/e2e/conftest.py", + "source_location": "L155", + "id": "e2e_conftest_browser", + "community": 88, + "norm_label": "browser()" + }, + { + "label": "page()", + "file_type": "code", + "source_file": "tests/e2e/conftest.py", + "source_location": "L181", + "id": "e2e_conftest_page", + "community": 88, + "norm_label": "page()" + }, + { + "label": "E2E test fixtures (Phase 16). Boots a real uvicorn process serving the e2e test", + "file_type": "rationale", + "source_file": "tests/e2e/conftest.py", + "source_location": "L1", + "id": "e2e_conftest_rationale_1", + "community": 88, + "norm_label": "e2e test fixtures (phase 16). boots a real uvicorn process serving the e2e test" + }, + { + "label": "Return a free TCP port on 127.0.0.1.", + "file_type": "rationale", + "source_file": "tests/e2e/conftest.py", + "source_location": "L47", + "id": "e2e_conftest_rationale_47", + "community": 88, + "norm_label": "return a free tcp port on 127.0.0.1." + }, + { + "label": "Return a chromium executable path or None. Search order: 1. ``EXLAB_E2", + "file_type": "rationale", + "source_file": "tests/e2e/conftest.py", + "source_location": "L54", + "id": "e2e_conftest_rationale_54", + "community": 88, + "norm_label": "return a chromium executable path or none. search order: 1. ``exlab_e2" + }, + { + "label": "Spawn a real uvicorn process serving the e2e test app and yield its URL. Th", + "file_type": "rationale", + "source_file": "tests/e2e/conftest.py", + "source_location": "L91", + "id": "e2e_conftest_rationale_91", + "community": 88, + "norm_label": "spawn a real uvicorn process serving the e2e test app and yield its url. th" + }, + { + "label": "Yield a chromium browser (headless).", + "file_type": "rationale", + "source_file": "tests/e2e/conftest.py", + "source_location": "L156", + "id": "e2e_conftest_rationale_156", + "community": 88, + "norm_label": "yield a chromium browser (headless)." + }, + { + "label": "Yield a fresh Playwright page for each test.", + "file_type": "rationale", + "source_file": "tests/e2e/conftest.py", + "source_location": "L182", + "id": "e2e_conftest_rationale_182", + "community": 88, + "norm_label": "yield a fresh playwright page for each test." + }, + { + "label": "test_flow_00_fresh_install_setup.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_00_fresh_install_setup.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_00_fresh_install_setup_py", + "community": 175, + "norm_label": "test_flow_00_fresh_install_setup.py" + }, + { + "label": "fresh_prod_server()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_00_fresh_install_setup.py", + "source_location": "L49", + "id": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", + "community": 175, + "norm_label": "fresh_prod_server()" + }, + { + "label": "test_fresh_install_setup_writes_config_and_applies_live()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_00_fresh_install_setup.py", + "source_location": "L107", + "id": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", + "community": 175, + "norm_label": "test_fresh_install_setup_writes_config_and_applies_live()" + }, + { + "label": "E2E flow 00: fresh-install first-launch setup against the PRODUCTION app. Unlik", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_00_fresh_install_setup.py", + "source_location": "L1", + "id": "e2e_test_flow_00_fresh_install_setup_rationale_1", + "community": 175, + "norm_label": "e2e flow 00: fresh-install first-launch setup against the production app. unlik" + }, + { + "label": "Spawn the production wizard app with HOME redirected to a fresh tmp dir. Yi", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_00_fresh_install_setup.py", + "source_location": "L50", + "id": "e2e_test_flow_00_fresh_install_setup_rationale_50", + "community": 175, + "norm_label": "spawn the production wizard app with home redirected to a fresh tmp dir. yi" + }, + { + "label": "test_flow_22_onboarding_redesign.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_22_onboarding_redesign.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_22_onboarding_redesign_py", + "community": 244, + "norm_label": "test_flow_22_onboarding_redesign.py" + }, + { + "label": "_goto()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_22_onboarding_redesign.py", + "source_location": "L19", + "id": "e2e_test_flow_22_onboarding_redesign_goto", + "community": 244, + "norm_label": "_goto()" + }, + { + "label": "test_flow_22_welcome_to_add_equipment()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_22_onboarding_redesign.py", + "source_location": "L32", + "id": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", + "community": 244, + "norm_label": "test_flow_22_welcome_to_add_equipment()" + }, + { + "label": "test_flow_22_main_window_has_add_equipment_in_toolbar()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_22_onboarding_redesign.py", + "source_location": "L47", + "id": "e2e_test_flow_22_onboarding_redesign_test_flow_22_main_window_has_add_equipment_in_toolbar", + "community": 244, + "norm_label": "test_flow_22_main_window_has_add_equipment_in_toolbar()" + }, + { + "label": "E2E flow 22: onboarding via the new Add-Equipment wizard (Redesign decision 2).", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_22_onboarding_redesign.py", + "source_location": "L1", + "id": "e2e_test_flow_22_onboarding_redesign_rationale_1", + "community": 244, + "norm_label": "e2e flow 22: onboarding via the new add-equipment wizard (redesign decision 2)." + }, + { + "label": "test_flow_24_context_menus.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_24_context_menus_py", + "community": 154, + "norm_label": "test_flow_24_context_menus.py" + }, + { + "label": "_goto()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L21", + "id": "e2e_test_flow_24_context_menus_goto", + "community": 154, + "norm_label": "_goto()" + }, + { + "label": "_open_context()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L34", + "id": "e2e_test_flow_24_context_menus_open_context", + "community": 154, + "norm_label": "_open_context()" + }, + { + "label": "test_flow_24_owned_equipment_context_menu_items_render()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L39", + "id": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", + "community": 154, + "norm_label": "test_flow_24_owned_equipment_context_menu_items_render()" + }, + { + "label": "test_flow_24_edit_equipment_deep_links_into_settings()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L52", + "id": "e2e_test_flow_24_context_menus_test_flow_24_edit_equipment_deep_links_into_settings", + "community": 154, + "norm_label": "test_flow_24_edit_equipment_deep_links_into_settings()" + }, + { + "label": "test_flow_24_remove_equipment_deep_links_into_settings()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L63", + "id": "e2e_test_flow_24_context_menus_test_flow_24_remove_equipment_deep_links_into_settings", + "community": 154, + "norm_label": "test_flow_24_remove_equipment_deep_links_into_settings()" + }, + { + "label": "test_flow_24_received_equipment_has_no_context_menu()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L72", + "id": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", + "community": 154, + "norm_label": "test_flow_24_received_equipment_has_no_context_menu()" + }, + { + "label": "test_flow_24_run_context_menu_items_render()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L85", + "id": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", + "community": 154, + "norm_label": "test_flow_24_run_context_menu_items_render()" + }, + { + "label": "test_flow_24_file_list_row_context_menu()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L97", + "id": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", + "community": 154, + "norm_label": "test_flow_24_file_list_row_context_menu()" + }, + { + "label": "test_flow_24_tombstone_row_has_no_open_in_os()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L112", + "id": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", + "community": 154, + "norm_label": "test_flow_24_tombstone_row_has_no_open_in_os()" + }, + { + "label": "test_flow_24_keep_local_badge_and_toggle()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L132", + "id": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", + "community": 154, + "norm_label": "test_flow_24_keep_local_badge_and_toggle()" + }, + { + "label": "E2E flow 24: right-click context menus (Redesign \u00a74.6 / decision 4A / \u00a79.1). Th", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L1", + "id": "e2e_test_flow_24_context_menus_rationale_1", + "community": 154, + "norm_label": "e2e flow 24: right-click context menus (redesign \u00a74.6 / decision 4a / \u00a79.1). th" + }, + { + "label": "Open a NiceGUI ``ui.context_menu`` by right-clicking its anchor.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L35", + "id": "e2e_test_flow_24_context_menus_rationale_35", + "community": 154, + "norm_label": "open a nicegui ``ui.context_menu`` by right-clicking its anchor." + }, + { + "label": "Decision 3: received-equipment nodes don't expose edit / remove.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L73", + "id": "e2e_test_flow_24_context_menus_rationale_73", + "community": 154, + "norm_label": "decision 3: received-equipment nodes don't expose edit / remove." + }, + { + "label": "Right-clicking a file-list row surfaces Open in OS / Copy path / Keep local.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L98", + "id": "e2e_test_flow_24_context_menus_rationale_98", + "community": 154, + "norm_label": "right-clicking a file-list row surfaces open in os / copy path / keep local." + }, + { + "label": "An \"On NAS\" tombstone row has no local copy, so no Open-in-OS action. Opera", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L113", + "id": "e2e_test_flow_24_context_menus_rationale_113", + "community": 154, + "norm_label": "an \"on nas\" tombstone row has no local copy, so no open-in-os action. opera" + }, + { + "label": "A keep-local file shows the \"kept local\" badge; the toggle action fires. Op", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L133", + "id": "e2e_test_flow_24_context_menus_rationale_133", + "community": 154, + "norm_label": "a keep-local file shows the \"kept local\" badge; the toggle action fires. op" + }, + { + "label": "test_flow_08_settings.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_08_settings_py", + "community": 67, + "norm_label": "test_flow_08_settings.py" + }, + { + "label": "test_flow_08_settings()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L30", + "id": "e2e_test_flow_08_settings_test_flow_08_settings", + "community": 67, + "norm_label": "test_flow_08_settings()" + }, + { + "label": "test_flow_08_lims_password_credential()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L58", + "id": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", + "community": 67, + "norm_label": "test_flow_08_lims_password_credential()" + }, + { + "label": "test_flow_08_lims_password_cancel_discards_edit()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L91", + "id": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", + "community": 67, + "norm_label": "test_flow_08_lims_password_cancel_discards_edit()" + }, + { + "label": "E2E flow 08: Settings dialog round-trip + persistence. Frontend Spec \u00a76.7 (sett", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L1", + "id": "e2e_test_flow_08_settings_rationale_1", + "community": 67, + "norm_label": "e2e flow 08: settings dialog round-trip + persistence. frontend spec \u00a76.7 (sett" + }, + { + "label": "The LIMS credential field's full lifecycle: set -> replace -> clear (\u00a77.4.1).", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L59", + "id": "e2e_test_flow_08_settings_rationale_59", + "community": 67, + "norm_label": "the lims credential field's full lifecycle: set -> replace -> clear (\u00a77.4.1)." + }, + { + "label": "Cancelling the credential editor collapses the row without saving.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L92", + "id": "e2e_test_flow_08_settings_rationale_92", + "community": 67, + "norm_label": "cancelling the credential editor collapses the row without saving." + }, + { + "label": "test_flow_11_crash_recovery.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_11_crash_recovery.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_11_crash_recovery_py", + "community": 114, + "norm_label": "test_flow_11_crash_recovery.py" + }, + { + "label": "test_flow_11_crash_recovery()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_11_crash_recovery.py", + "source_location": "L16", + "id": "e2e_test_flow_11_crash_recovery_test_flow_11_crash_recovery", + "community": 114, + "norm_label": "test_flow_11_crash_recovery()" + }, + { + "label": "E2E flow 11: Crash-recovery prompt on relaunch. Frontend Spec \u00a76.10 (crash reco", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_11_crash_recovery.py", + "source_location": "L1", + "id": "e2e_test_flow_11_crash_recovery_rationale_1", + "community": 114, + "norm_label": "e2e flow 11: crash-recovery prompt on relaunch. frontend spec \u00a76.10 (crash reco" + }, + { + "label": "test_flow_03_experimental_run.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_03_experimental_run.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_03_experimental_run_py", + "community": 127, + "norm_label": "test_flow_03_experimental_run.py" + }, + { + "label": "test_flow_03_experimental_run()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_03_experimental_run.py", + "source_location": "L15", + "id": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", + "community": 127, + "norm_label": "test_flow_03_experimental_run()" + }, + { + "label": "E2E flow 03: Experimental-run wizard end-to-end. Frontend Spec \u00a76.4 (run wizard", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_03_experimental_run.py", + "source_location": "L1", + "id": "e2e_test_flow_03_experimental_run_rationale_1", + "community": 127, + "norm_label": "e2e flow 03: experimental-run wizard end-to-end. frontend spec \u00a76.4 (run wizard" + }, + { + "label": "_prod_server.py", + "file_type": "code", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L1", + "id": "tests_e2e_prod_server_py", + "community": 175, + "norm_label": "_prod_server.py" + }, + { + "label": "free_port()", + "file_type": "code", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L29", + "id": "e2e_prod_server_free_port", + "community": 175, + "norm_label": "free_port()" + }, + { + "label": "prod_app_env()", + "file_type": "code", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L36", + "id": "e2e_prod_server_prod_app_env", + "community": 175, + "norm_label": "prod_app_env()" + }, + { + "label": "resolve_config_path()", + "file_type": "code", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L60", + "id": "e2e_prod_server_resolve_config_path", + "community": 175, + "norm_label": "resolve_config_path()" + }, + { + "label": "ProdServer", + "file_type": "code", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L75", + "id": "e2e_prod_server_prodserver", + "community": 225, + "norm_label": "prodserver" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L84", + "id": "e2e_prod_server_prodserver_init", + "community": 175, + "norm_label": ".__init__()" + }, + { + "label": "config_path()", + "file_type": "code", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L94", + "id": "e2e_prod_server_config_path", + "community": 175, + "norm_label": "config_path()" + }, + { + "label": ".start()", + "file_type": "code", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L98", + "id": "e2e_prod_server_prodserver_start", + "community": 225, + "norm_label": ".start()" + }, + { + "label": ".stop()", + "file_type": "code", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L132", + "id": "e2e_prod_server_prodserver_stop", + "community": 225, + "norm_label": ".stop()" + }, + { + "label": ".restart()", + "file_type": "code", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L144", + "id": "e2e_prod_server_prodserver_restart", + "community": 225, + "norm_label": ".restart()" + }, + { + "label": "Reusable spawn/restart harness for the *production* wizard app. The e2e lifecyc", + "file_type": "rationale", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L1", + "id": "e2e_prod_server_rationale_1", + "community": 175, + "norm_label": "reusable spawn/restart harness for the *production* wizard app. the e2e lifecyc" + }, + { + "label": "Return a free TCP port on 127.0.0.1.", + "file_type": "rationale", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L30", + "id": "e2e_prod_server_rationale_30", + "community": 175, + "norm_label": "return a free tcp port on 127.0.0.1." + }, + { + "label": "Build a hermetic environment for a spawned production-app process. Every OS", + "file_type": "rationale", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L37", + "id": "e2e_prod_server_rationale_37", + "community": 175, + "norm_label": "build a hermetic environment for a spawned production-app process. every os" + }, + { + "label": "Where the spawned production app writes ``config.yaml``. Computed by callin", + "file_type": "rationale", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L61", + "id": "e2e_prod_server_rationale_61", + "community": 175, + "norm_label": "where the spawned production app writes ``config.yaml``. computed by callin" + }, + { + "label": "A spawnable / restartable production-app uvicorn process. ``home`` is the r", + "file_type": "rationale", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L76", + "id": "e2e_prod_server_rationale_76", + "community": 225, + "norm_label": "a spawnable / restartable production-app uvicorn process. ``home`` is the r" + }, + { + "label": "Where the wizard writes ``config.yaml`` under the redirected HOME.", + "file_type": "rationale", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L95", + "id": "e2e_prod_server_rationale_95", + "community": 434, + "norm_label": "where the wizard writes ``config.yaml`` under the redirected home." + }, + { + "label": "Spawn uvicorn and block until ``/api/v1/health`` answers 200. Returns `", + "file_type": "rationale", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L99", + "id": "e2e_prod_server_rationale_99", + "community": 225, + "norm_label": "spawn uvicorn and block until ``/api/v1/health`` answers 200. returns `" + }, + { + "label": "Terminate the uvicorn process. Idempotent.", + "file_type": "rationale", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L133", + "id": "e2e_prod_server_rationale_133", + "community": 225, + "norm_label": "terminate the uvicorn process. idempotent." + }, + { + "label": "Stop and re-spawn the process with the same HOME / port.", + "file_type": "rationale", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L145", + "id": "e2e_prod_server_rationale_145", + "community": 225, + "norm_label": "stop and re-spawn the process with the same home / port." + }, + { + "label": "test_flow_17_picker_step.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_17_picker_step.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_17_picker_step_py", + "community": 308, + "norm_label": "test_flow_17_picker_step.py" + }, + { + "label": "_goto()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_17_picker_step.py", + "source_location": "L12", + "id": "e2e_test_flow_17_picker_step_goto", + "community": 308, + "norm_label": "_goto()" + }, + { + "label": "test_flow_17_creation_buttons_enabled_on_owned_node()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_17_picker_step.py", + "source_location": "L25", + "id": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", + "community": 308, + "norm_label": "test_flow_17_creation_buttons_enabled_on_owned_node()" + }, + { + "label": "test_flow_17_creation_buttons_disabled_on_received_node()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_17_picker_step.py", + "source_location": "L41", + "id": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_disabled_on_received_node", + "community": 308, + "norm_label": "test_flow_17_creation_buttons_disabled_on_received_node()" + }, + { + "label": "E2E flow 17: creation-button enablement on received nodes (Redesign decision 1).", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_17_picker_step.py", + "source_location": "L1", + "id": "e2e_test_flow_17_picker_step_rationale_1", + "community": 308, + "norm_label": "e2e flow 17: creation-button enablement on received nodes (redesign decision 1)." + }, + { + "label": "test_flow_20_file_explorer.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_20_file_explorer_py", + "community": 286, + "norm_label": "test_flow_20_file_explorer.py" + }, + { + "label": "_goto()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L10", + "id": "e2e_test_flow_20_file_explorer_goto", + "community": 286, + "norm_label": "_goto()" + }, + { + "label": "test_flow_20_file_explorer_renders_three_regions()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L23", + "id": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", + "community": 286, + "norm_label": "test_flow_20_file_explorer_renders_three_regions()" + }, + { + "label": "test_flow_20_select_run_node_renders_metadata_pane()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L42", + "id": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", + "community": 286, + "norm_label": "test_flow_20_select_run_node_renders_metadata_pane()" + }, + { + "label": "test_flow_20_breadcrumb_is_present_when_node_selected()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L53", + "id": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", + "community": 286, + "norm_label": "test_flow_20_breadcrumb_is_present_when_node_selected()" + }, + { + "label": "E2E flow 20: file-explorer navigation (Redesign \u00a74). Tree selection drives the", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L1", + "id": "e2e_test_flow_20_file_explorer_rationale_1", + "community": 286, + "norm_label": "e2e flow 20: file-explorer navigation (redesign \u00a74). tree selection drives the" + }, + { + "label": "test_flow_05_browse_view_sync_icons.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_05_browse_view_sync_icons.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_05_browse_view_sync_icons_py", + "community": 165, + "norm_label": "test_flow_05_browse_view_sync_icons.py" + }, + { + "label": "test_flow_05_sync_icons_render_in_tree()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_05_browse_view_sync_icons.py", + "source_location": "L20", + "id": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", + "community": 165, + "norm_label": "test_flow_05_sync_icons_render_in_tree()" + }, + { + "label": "test_flow_05_sync_icons_static_assets_serve_200()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_05_browse_view_sync_icons.py", + "source_location": "L47", + "id": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_static_assets_serve_200", + "community": 165, + "norm_label": "test_flow_05_sync_icons_static_assets_serve_200()" + }, + { + "label": "E2E flow 05b: per-run sync icons in the browse tree. Verifies that the project", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_05_browse_view_sync_icons.py", + "source_location": "L1", + "id": "e2e_test_flow_05_browse_view_sync_icons_rationale_1", + "community": 165, + "norm_label": "e2e flow 05b: per-run sync icons in the browse tree. verifies that the project" + }, + { + "label": "The ``/assets`` mount serves both SVGs as 200 OK.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_05_browse_view_sync_icons.py", + "source_location": "L48", + "id": "e2e_test_flow_05_browse_view_sync_icons_rationale_48", + "community": 165, + "norm_label": "the ``/assets`` mount serves both svgs as 200 ok." + }, + { + "label": "test_flow_05_browse_view.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_05_browse_view.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_05_browse_view_py", + "community": 165, + "norm_label": "test_flow_05_browse_view.py" + }, + { + "label": "test_flow_05_browse_view()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_05_browse_view.py", + "source_location": "L15", + "id": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", + "community": 165, + "norm_label": "test_flow_05_browse_view()" + }, + { + "label": "E2E flow 05: Browse view -- open existing project + sessions. Frontend Spec \u00a76.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_05_browse_view.py", + "source_location": "L1", + "id": "e2e_test_flow_05_browse_view_rationale_1", + "community": 165, + "norm_label": "e2e flow 05: browse view -- open existing project + sessions. frontend spec \u00a76." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/e2e/__init__.py", + "source_location": "L1", + "id": "tests_e2e_init_py", + "community": 435, + "norm_label": "__init__.py" + }, + { + "label": "test_flow_16_add_equipment.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_16_add_equipment_py", + "community": 176, + "norm_label": "test_flow_16_add_equipment.py" + }, + { + "label": "_goto()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L20", + "id": "e2e_test_flow_16_add_equipment_goto", + "community": 176, + "norm_label": "_goto()" + }, + { + "label": "test_flow_16_add_equipment_identity_step()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L33", + "id": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", + "community": 176, + "norm_label": "test_flow_16_add_equipment_identity_step()" + }, + { + "label": "test_flow_16_add_equipment_paths_step()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L44", + "id": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_paths_step", + "community": 176, + "norm_label": "test_flow_16_add_equipment_paths_step()" + }, + { + "label": "test_flow_16_add_equipment_sync_mode_step()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L52", + "id": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_sync_mode_step", + "community": 176, + "norm_label": "test_flow_16_add_equipment_sync_mode_step()" + }, + { + "label": "test_flow_16_add_equipment_review_and_confirm()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L59", + "id": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", + "community": 176, + "norm_label": "test_flow_16_add_equipment_review_and_confirm()" + }, + { + "label": "test_flow_16_next_enables_on_valid_input_and_state_survives_back()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L69", + "id": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", + "community": 176, + "norm_label": "test_flow_16_next_enables_on_valid_input_and_state_survives_back()" + }, + { + "label": "E2E flow 16: Add-Equipment wizard (Redesign \u00a76). Drives the four-step wizard en", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L1", + "id": "e2e_test_flow_16_add_equipment_rationale_1", + "community": 176, + "norm_label": "e2e flow 16: add-equipment wizard (redesign \u00a76). drives the four-step wizard en" + }, + { + "label": "Identity step renders the ID + label inputs.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L34", + "id": "e2e_test_flow_16_add_equipment_rationale_34", + "community": 176, + "norm_label": "identity step renders the id + label inputs." + }, + { + "label": "Paths step renders local + NAS root inputs.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L45", + "id": "e2e_test_flow_16_add_equipment_rationale_45", + "community": 176, + "norm_label": "paths step renders local + nas root inputs." + }, + { + "label": "Sync mode step renders the nas/stage radio.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L53", + "id": "e2e_test_flow_16_add_equipment_rationale_53", + "community": 176, + "norm_label": "sync mode step renders the nas/stage radio." + }, + { + "label": "Review step renders Confirm; clicking it fires the success label.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L60", + "id": "e2e_test_flow_16_add_equipment_rationale_60", + "community": 176, + "norm_label": "review step renders confirm; clicking it fires the success label." + }, + { + "label": "An empty wizard: Next stays disabled until the identity step is valid, then", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L70", + "id": "e2e_test_flow_16_add_equipment_rationale_70", + "community": 176, + "norm_label": "an empty wizard: next stays disabled until the identity step is valid, then" + }, + { + "label": "test_flow_23_footer_staging.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_23_footer_staging.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_23_footer_staging_py", + "community": 309, + "norm_label": "test_flow_23_footer_staging.py" + }, + { + "label": "_goto()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_23_footer_staging.py", + "source_location": "L10", + "id": "e2e_test_flow_23_footer_staging_goto", + "community": 309, + "norm_label": "_goto()" + }, + { + "label": "test_flow_23_footer_staging_segment_renders()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_23_footer_staging.py", + "source_location": "L23", + "id": "e2e_test_flow_23_footer_staging_test_flow_23_footer_staging_segment_renders", + "community": 309, + "norm_label": "test_flow_23_footer_staging_segment_renders()" + }, + { + "label": "test_flow_23_bulk_clear_verified_action_present()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_23_footer_staging.py", + "source_location": "L28", + "id": "e2e_test_flow_23_footer_staging_test_flow_23_bulk_clear_verified_action_present", + "community": 309, + "norm_label": "test_flow_23_bulk_clear_verified_action_present()" + }, + { + "label": "E2E flow 23: footer Staging segment + bulk Clear verified (Redesign \u00a74.6). The", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_23_footer_staging.py", + "source_location": "L1", + "id": "e2e_test_flow_23_footer_staging_rationale_1", + "community": 309, + "norm_label": "e2e flow 23: footer staging segment + bulk clear verified (redesign \u00a74.6). the" + }, + { + "label": "test_smoke.py", + "file_type": "code", + "source_file": "tests/e2e/test_smoke.py", + "source_location": "L1", + "id": "tests_e2e_test_smoke_py", + "community": 316, + "norm_label": "test_smoke.py" + }, + { + "label": "test_root_url_responds_with_html()", + "file_type": "code", + "source_file": "tests/e2e/test_smoke.py", + "source_location": "L15", + "id": "e2e_test_smoke_test_root_url_responds_with_html", + "community": 316, + "norm_label": "test_root_url_responds_with_html()" + }, + { + "label": "E2E smoke flow. Confirms the Phase 16 e2e harness can drive a real browser agai", + "file_type": "rationale", + "source_file": "tests/e2e/test_smoke.py", + "source_location": "L1", + "id": "e2e_test_smoke_rationale_1", + "community": 316, + "norm_label": "e2e smoke flow. confirms the phase 16 e2e harness can drive a real browser agai" + }, + { + "label": "Smoke: navigate to / and confirm the e2e harness is wired up. The Phase 16", + "file_type": "rationale", + "source_file": "tests/e2e/test_smoke.py", + "source_location": "L16", + "id": "e2e_test_smoke_rationale_16", + "community": 316, + "norm_label": "smoke: navigate to / and confirm the e2e harness is wired up. the phase 16" + }, + { + "label": "test_ux_documentation.py", + "file_type": "code", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L1", + "id": "tests_e2e_test_ux_documentation_py", + "community": 183, + "norm_label": "test_ux_documentation.py" + }, + { + "label": "_render_doc()", + "file_type": "code", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L45", + "id": "e2e_test_ux_documentation_render_doc", + "community": 183, + "norm_label": "_render_doc()" + }, + { + "label": "test_ux_interactions_doc_is_current()", + "file_type": "code", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L66", + "id": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", + "community": 183, + "norm_label": "test_ux_interactions_doc_is_current()" + }, + { + "label": "test_ux_catalog_is_non_trivial()", + "file_type": "code", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L86", + "id": "e2e_test_ux_documentation_test_ux_catalog_is_non_trivial", + "community": 183, + "norm_label": "test_ux_catalog_is_non_trivial()" + }, + { + "label": "_references()", + "file_type": "code", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L97", + "id": "e2e_test_ux_documentation_references", + "community": 183, + "norm_label": "_references()" + }, + { + "label": "test_ux_interaction_testids_exist_in_source()", + "file_type": "code", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L116", + "id": "e2e_test_ux_documentation_test_ux_interaction_testids_exist_in_source", + "community": 183, + "norm_label": "test_ux_interaction_testids_exist_in_source()" + }, + { + "label": "test_ux_interactions_are_e2e_covered()", + "file_type": "code", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L127", + "id": "e2e_test_ux_documentation_test_ux_interactions_are_e2e_covered", + "community": 183, + "norm_label": "test_ux_interactions_are_e2e_covered()" + }, + { + "label": "Automated UX-interaction documentation + coverage checks. Drives :mod:`tests.e2", + "file_type": "rationale", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L1", + "id": "e2e_test_ux_documentation_rationale_1", + "community": 183, + "norm_label": "automated ux-interaction documentation + coverage checks. drives :mod:`tests.e2" + }, + { + "label": "Render the catalog into the ``UX_INTERACTIONS.md`` markdown body.", + "file_type": "rationale", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L46", + "id": "e2e_test_ux_documentation_rationale_46", + "community": 183, + "norm_label": "render the catalog into the ``ux_interactions.md`` markdown body." + }, + { + "label": "``docs/UX_INTERACTIONS.md`` is regenerated from the catalog. Regenerates th", + "file_type": "rationale", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L67", + "id": "e2e_test_ux_documentation_rationale_67", + "community": 183, + "norm_label": "``docs/ux_interactions.md`` is regenerated from the catalog. regenerates th" + }, + { + "label": "Guard against an empty catalog silently passing the other checks.", + "file_type": "rationale", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L87", + "id": "e2e_test_ux_documentation_rationale_87", + "community": 183, + "norm_label": "guard against an empty catalog silently passing the other checks." + }, + { + "label": "Return ``True`` when ``haystack`` references ``testid``. Tolerates testids", + "file_type": "rationale", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L98", + "id": "e2e_test_ux_documentation_rationale_98", + "community": 183, + "norm_label": "return ``true`` when ``haystack`` references ``testid``. tolerates testids" + }, + { + "label": "Every cataloged ``data-testid`` is present in the UI source.", + "file_type": "rationale", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L117", + "id": "e2e_test_ux_documentation_rationale_117", + "community": 183, + "norm_label": "every cataloged ``data-testid`` is present in the ui source." + }, + { + "label": "Every cataloged ``data-testid`` is driven by an e2e test. Scans the whole `", + "file_type": "rationale", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L128", + "id": "e2e_test_ux_documentation_rationale_128", + "community": 183, + "norm_label": "every cataloged ``data-testid`` is driven by an e2e test. scans the whole `" + }, + { + "label": "_prod_app.py", + "file_type": "code", + "source_file": "tests/e2e/_prod_app.py", + "source_location": "L1", + "id": "tests_e2e_prod_app_py", + "community": 64, + "norm_label": "_prod_app.py" + }, + { + "label": "create_prod_app_factory()", + "file_type": "code", + "source_file": "tests/e2e/_prod_app.py", + "source_location": "L23", + "id": "e2e_prod_app_create_prod_app_factory", + "community": 64, + "norm_label": "create_prod_app_factory()" + }, + { + "label": "uvicorn ``--factory`` entrypoint for the *production* wizard app. ``_test_app.p", + "file_type": "rationale", + "source_file": "tests/e2e/_prod_app.py", + "source_location": "L1", + "id": "e2e_prod_app_rationale_1", + "community": 64, + "norm_label": "uvicorn ``--factory`` entrypoint for the *production* wizard app. ``_test_app.p" + }, + { + "label": "Build the production wizard app (NiceGUI mounted at ``/``).", + "file_type": "rationale", + "source_file": "tests/e2e/_prod_app.py", + "source_location": "L24", + "id": "e2e_prod_app_rationale_24", + "community": 64, + "norm_label": "build the production wizard app (nicegui mounted at ``/``)." + }, + { + "label": "test_flow_25_production_main_wiring.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_25_production_main_wiring_py", + "community": 126, + "norm_label": "test_flow_25_production_main_wiring.py" + }, + { + "label": "_goto()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L21", + "id": "e2e_test_flow_25_production_main_wiring_goto", + "community": 126, + "norm_label": "_goto()" + }, + { + "label": "test_flow_25_main_route_renders_redesigned_layout()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L40", + "id": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", + "community": 126, + "norm_label": "test_flow_25_main_route_renders_redesigned_layout()" + }, + { + "label": "test_flow_25_add_equipment_button_navigates_to_wizard()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L75", + "id": "e2e_test_flow_25_production_main_wiring_test_flow_25_add_equipment_button_navigates_to_wizard", + "community": 126, + "norm_label": "test_flow_25_add_equipment_button_navigates_to_wizard()" + }, + { + "label": "test_flow_25_select_node_threads_selected_into_url()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L82", + "id": "e2e_test_flow_25_production_main_wiring_test_flow_25_select_node_threads_selected_into_url", + "community": 126, + "norm_label": "test_flow_25_select_node_threads_selected_into_url()" + }, + { + "label": "test_flow_25_selected_query_renders_centre_and_right_panes()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L95", + "id": "e2e_test_flow_25_production_main_wiring_test_flow_25_selected_query_renders_centre_and_right_panes", + "community": 126, + "norm_label": "test_flow_25_selected_query_renders_centre_and_right_panes()" + }, + { + "label": "test_flow_25_breadcrumb_navigation_re_navigates_main()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L105", + "id": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", + "community": 126, + "norm_label": "test_flow_25_breadcrumb_navigation_re_navigates_main()" + }, + { + "label": "test_flow_25_toggle_right_pane_toggles_query_param()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L121", + "id": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", + "community": 126, + "norm_label": "test_flow_25_toggle_right_pane_toggles_query_param()" + }, + { + "label": "test_flow_25_tree_context_action_deep_links_into_settings()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L132", + "id": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", + "community": 126, + "norm_label": "test_flow_25_tree_context_action_deep_links_into_settings()" + }, + { + "label": "test_flow_25_received_equipment_disables_creation_buttons()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L147", + "id": "e2e_test_flow_25_production_main_wiring_test_flow_25_received_equipment_disables_creation_buttons", + "community": 126, + "norm_label": "test_flow_25_received_equipment_disables_creation_buttons()" + }, + { + "label": "test_flow_25_footer_clear_verified_routes_to_callback()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L172", + "id": "e2e_test_flow_25_production_main_wiring_test_flow_25_footer_clear_verified_routes_to_callback", + "community": 126, + "norm_label": "test_flow_25_footer_clear_verified_routes_to_callback()" + }, + { + "label": "E2E flow 25: production /main is wired to the redesigned renderer. This suite e", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L1", + "id": "e2e_test_flow_25_production_main_wiring_rationale_1", + "community": 126, + "norm_label": "e2e flow 25: production /main is wired to the redesigned renderer. this suite e" + }, + { + "label": "Navigate to ``url`` with one retry on transient NiceGUI failures.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L22", + "id": "e2e_test_flow_25_production_main_wiring_rationale_22", + "community": 126, + "norm_label": "navigate to ``url`` with one retry on transient nicegui failures." + }, + { + "label": "The /main route mounts the redesigned renderer, not the legacy one. Asserts", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L41", + "id": "e2e_test_flow_25_production_main_wiring_rationale_41", + "community": 126, + "norm_label": "the /main route mounts the redesigned renderer, not the legacy one. asserts" + }, + { + "label": "The Add Equipment toolbar button navigates to /wizard/equipment.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L76", + "id": "e2e_test_flow_25_production_main_wiring_rationale_76", + "community": 126, + "norm_label": "the add equipment toolbar button navigates to /wizard/equipment." + }, + { + "label": "Clicking an equipment node updates the URL with ?selected=. Exercises o", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L83", + "id": "e2e_test_flow_25_production_main_wiring_rationale_83", + "community": 126, + "norm_label": "clicking an equipment node updates the url with ?selected=. exercises o" + }, + { + "label": "Loading /main?selected=TEST_EQ1 directly renders the centre + right panes.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L96", + "id": "e2e_test_flow_25_production_main_wiring_rationale_96", + "community": 126, + "norm_label": "loading /main?selected=test_eq1 directly renders the centre + right panes." + }, + { + "label": "Clicking a breadcrumb segment routes back through /main?selected=. The brea", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L106", + "id": "e2e_test_flow_25_production_main_wiring_rationale_106", + "community": 126, + "norm_label": "clicking a breadcrumb segment routes back through /main?selected=. the brea" + }, + { + "label": "Clicking the right-pane toggle flips ?right_pane=collapsed in the URL.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L122", + "id": "e2e_test_flow_25_production_main_wiring_rationale_122", + "community": 126, + "norm_label": "clicking the right-pane toggle flips ?right_pane=collapsed in the url." + }, + { + "label": "Owned-equipment Edit menu navigates to /settings with the equipment id. Rou", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L133", + "id": "e2e_test_flow_25_production_main_wiring_rationale_133", + "community": 126, + "norm_label": "owned-equipment edit menu navigates to /settings with the equipment id. rou" + }, + { + "label": "Selecting a TEST_RELAY_* node disables the New Project/Run/Test-Run buttons.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L148", + "id": "e2e_test_flow_25_production_main_wiring_rationale_148", + "community": 126, + "norm_label": "selecting a test_relay_* node disables the new project/run/test-run buttons." + }, + { + "label": "The footer Clear-verified button is wired to a callback. Asserts the button", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L173", + "id": "e2e_test_flow_25_production_main_wiring_rationale_173", + "community": 126, + "norm_label": "the footer clear-verified button is wired to a callback. asserts the button" + }, + { + "label": "test_flow_00_full_lifecycle.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_00_full_lifecycle_py", + "community": 153, + "norm_label": "test_flow_00_full_lifecycle.py" + }, + { + "label": "_fill()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L50", + "id": "e2e_test_flow_00_full_lifecycle_fill", + "community": 153, + "norm_label": "_fill()" + }, + { + "label": "_select()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L57", + "id": "e2e_test_flow_00_full_lifecycle_select", + "community": 153, + "norm_label": "_select()" + }, + { + "label": "_pick_radio()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L86", + "id": "e2e_test_flow_00_full_lifecycle_pick_radio", + "community": 153, + "norm_label": "_pick_radio()" + }, + { + "label": "_step_button()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L93", + "id": "e2e_test_flow_00_full_lifecycle_step_button", + "community": 153, + "norm_label": "_step_button()" + }, + { + "label": "_project_next()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L111", + "id": "e2e_test_flow_00_full_lifecycle_project_next", + "community": 153, + "norm_label": "_project_next()" + }, + { + "label": "_run_next()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L116", + "id": "e2e_test_flow_00_full_lifecycle_run_next", + "community": 153, + "norm_label": "_run_next()" + }, + { + "label": "_goto()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L121", + "id": "e2e_test_flow_00_full_lifecycle_goto", + "community": 153, + "norm_label": "_goto()" + }, + { + "label": "prod_server()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L146", + "id": "e2e_test_flow_00_full_lifecycle_prod_server", + "community": 225, + "norm_label": "prod_server()" + }, + { + "label": "test_full_create_lifecycle()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L175", + "id": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", + "community": 153, + "norm_label": "test_full_create_lifecycle()" + }, + { + "label": "E2E flow 00b: the full create-lifecycle against the PRODUCTION app. Boots the g", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L1", + "id": "e2e_test_flow_00_full_lifecycle_rationale_1", + "community": 153, + "norm_label": "e2e flow 00b: the full create-lifecycle against the production app. boots the g" + }, + { + "label": "Fill a (visible) Quasar input identified by ``data-testid``.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L51", + "id": "e2e_test_flow_00_full_lifecycle_rationale_51", + "community": 153, + "norm_label": "fill a (visible) quasar input identified by ``data-testid``." + }, + { + "label": "Pick ``value`` from a NiceGUI/Quasar ``ui.select`` by ``data-testid``. Nice", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L65", + "id": "e2e_test_flow_00_full_lifecycle_rationale_65", + "community": 153, + "norm_label": "pick ``value`` from a nicegui/quasar ``ui.select`` by ``data-testid``. nice" + }, + { + "label": "Select a Quasar ``ui.radio`` option by its label within the group.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L87", + "id": "e2e_test_flow_00_full_lifecycle_rationale_87", + "community": 153, + "norm_label": "select a quasar ``ui.radio`` option by its label within the group." + }, + { + "label": "Click a stepper-navigation button scoped to its step container. The Next /", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L100", + "id": "e2e_test_flow_00_full_lifecycle_rationale_100", + "community": 153, + "norm_label": "click a stepper-navigation button scoped to its step container. the next /" + }, + { + "label": "Advance the project wizard from ``step_id`` via its Next button.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L112", + "id": "e2e_test_flow_00_full_lifecycle_rationale_112", + "community": 153, + "norm_label": "advance the project wizard from ``step_id`` via its next button." + }, + { + "label": "Advance the run wizard from ``step_id`` via its Next button.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L117", + "id": "e2e_test_flow_00_full_lifecycle_rationale_117", + "community": 153, + "norm_label": "advance the run wizard from ``step_id`` via its next button." + }, + { + "label": "Navigate to a NiceGUI page, tolerating a transient ERR_ABORTED. NiceGUI's c", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L122", + "id": "e2e_test_flow_00_full_lifecycle_rationale_122", + "community": 153, + "norm_label": "navigate to a nicegui page, tolerating a transient err_aborted. nicegui's c" + }, + { + "label": "Yield a started :class:`ProdServer` rooted at a fresh tmp HOME. The keyring", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L147", + "id": "e2e_test_flow_00_full_lifecycle_rationale_147", + "community": 225, + "norm_label": "yield a started :class:`prodserver` rooted at a fresh tmp home. the keyring" + }, + { + "label": "test_flow_13_keyboard.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_13_keyboard.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_13_keyboard_py", + "community": 335, + "norm_label": "test_flow_13_keyboard.py" + }, + { + "label": "test_flow_13_keyboard()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_13_keyboard.py", + "source_location": "L14", + "id": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", + "community": 335, + "norm_label": "test_flow_13_keyboard()" + }, + { + "label": "E2E flow 13: Keyboard shortcuts + accessibility focus management. Frontend Spec", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_13_keyboard.py", + "source_location": "L1", + "id": "e2e_test_flow_13_keyboard_rationale_1", + "community": 335, + "norm_label": "e2e flow 13: keyboard shortcuts + accessibility focus management. frontend spec" + }, + { + "label": "ux_catalog.py", + "file_type": "code", + "source_file": "tests/e2e/ux_catalog.py", + "source_location": "L1", + "id": "tests_e2e_ux_catalog_py", + "community": 317, + "norm_label": "ux_catalog.py" + }, + { + "label": "UXInteraction", + "file_type": "code", + "source_file": "tests/e2e/ux_catalog.py", + "source_location": "L29", + "id": "e2e_ux_catalog_uxinteraction", + "community": 317, + "norm_label": "uxinteraction" + }, + { + "label": "Machine-readable catalog of the wizard's UX interactions. Each :class:`UXIntera", + "file_type": "rationale", + "source_file": "tests/e2e/ux_catalog.py", + "source_location": "L1", + "id": "e2e_ux_catalog_rationale_1", + "community": 317, + "norm_label": "machine-readable catalog of the wizard's ux interactions. each :class:`uxintera" + }, + { + "label": "One operator-facing affordance in the wizard UI.", + "file_type": "rationale", + "source_file": "tests/e2e/ux_catalog.py", + "source_location": "L30", + "id": "e2e_ux_catalog_rationale_30", + "community": 317, + "norm_label": "one operator-facing affordance in the wizard ui." + }, + { + "label": "test_flow_07_plugin_input_required.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_07_plugin_input_required.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_07_plugin_input_required_py", + "community": 336, + "norm_label": "test_flow_07_plugin_input_required.py" + }, + { + "label": "test_flow_07_plugin_input_required()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_07_plugin_input_required.py", + "source_location": "L14", + "id": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", + "community": 336, + "norm_label": "test_flow_07_plugin_input_required()" + }, + { + "label": "E2E flow 07: Plugin input-required round trip. Frontend Spec \u00a76.4.5 (plugin ste", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_07_plugin_input_required.py", + "source_location": "L1", + "id": "e2e_test_flow_07_plugin_input_required_rationale_1", + "community": 336, + "norm_label": "e2e flow 07: plugin input-required round trip. frontend spec \u00a76.4.5 (plugin ste" + }, + { + "label": "test_flow_26_equipment_wizard_persist.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_26_equipment_wizard_persist.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_26_equipment_wizard_persist_py", + "community": 287, + "norm_label": "test_flow_26_equipment_wizard_persist.py" + }, + { + "label": "prod_server()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_26_equipment_wizard_persist.py", + "source_location": "L40", + "id": "e2e_test_flow_26_equipment_wizard_persist_prod_server", + "community": 287, + "norm_label": "prod_server()" + }, + { + "label": "test_equipment_wizard_confirm_persists_to_config()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_26_equipment_wizard_persist.py", + "source_location": "L53", + "id": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", + "community": 287, + "norm_label": "test_equipment_wizard_confirm_persists_to_config()" + }, + { + "label": "E2E flow 26: Add-Equipment wizard confirm against the PRODUCTION app. ``test_fl", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_26_equipment_wizard_persist.py", + "source_location": "L1", + "id": "e2e_test_flow_26_equipment_wizard_persist_rationale_1", + "community": 287, + "norm_label": "e2e flow 26: add-equipment wizard confirm against the production app. ``test_fl" + }, + { + "label": "Spawn the production wizard app under a fresh tmp HOME.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_26_equipment_wizard_persist.py", + "source_location": "L41", + "id": "e2e_test_flow_26_equipment_wizard_persist_rationale_41", + "community": 287, + "norm_label": "spawn the production wizard app under a fresh tmp home." + }, + { + "label": "Drive the production wizard to Confirm and assert config.yaml gains the device.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_26_equipment_wizard_persist.py", + "source_location": "L54", + "id": "e2e_test_flow_26_equipment_wizard_persist_rationale_54", + "community": 287, + "norm_label": "drive the production wizard to confirm and assert config.yaml gains the device." + }, + { + "label": "test_flow_09_orchestrator.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_09_orchestrator.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_09_orchestrator_py", + "community": 155, + "norm_label": "test_flow_09_orchestrator.py" + }, + { + "label": "test_flow_09_orchestrator()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_09_orchestrator.py", + "source_location": "L20", + "id": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", + "community": 155, + "norm_label": "test_flow_09_orchestrator()" + }, + { + "label": "E2E flow 09: Orchestrator staging panel + quiescence-sync trigger. Frontend Spe", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_09_orchestrator.py", + "source_location": "L1", + "id": "e2e_test_flow_09_orchestrator_rationale_1", + "community": 155, + "norm_label": "e2e flow 09: orchestrator staging panel + quiescence-sync trigger. frontend spe" + }, + { + "label": "test_flow_27_nas_credential_settings.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_27_nas_credential_settings_py", + "community": 266, + "norm_label": "test_flow_27_nas_credential_settings.py" + }, + { + "label": "_seed_config()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L46", + "id": "e2e_test_flow_27_nas_credential_settings_seed_config", + "community": 1, + "norm_label": "_seed_config()" + }, + { + "label": "_install_stub_rclone()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L95", + "id": "e2e_test_flow_27_nas_credential_settings_install_stub_rclone", + "community": 266, + "norm_label": "_install_stub_rclone()" + }, + { + "label": "nas_prod_server()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L105", + "id": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", + "community": 266, + "norm_label": "nas_prod_server()" + }, + { + "label": "_setup_state()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L175", + "id": "e2e_test_flow_27_nas_credential_settings_setup_state", + "community": 266, + "norm_label": "_setup_state()" + }, + { + "label": "test_nas_credential_gate_set_test_and_clear()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L179", + "id": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", + "community": 266, + "norm_label": "test_nas_credential_gate_set_test_and_clear()" + }, + { + "label": "E2E flow 27: NAS-credential setup gate + Settings section (rclone-only). Boots", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L1", + "id": "e2e_test_flow_27_nas_credential_settings_rationale_1", + "community": 266, + "norm_label": "e2e flow 27: nas-credential setup gate + settings section (rclone-only). boots" + }, + { + "label": "Write a config.yaml with one nas-mode equipment under the tmp HOME. LIMS is", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L47", + "id": "e2e_test_flow_27_nas_credential_settings_rationale_47", + "community": 1, + "norm_label": "write a config.yaml with one nas-mode equipment under the tmp home. lims is" + }, + { + "label": "Spawn the production wizard seeded with a credential-less nas equipment. Yi", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L106", + "id": "e2e_test_flow_27_nas_credential_settings_rationale_106", + "community": 266, + "norm_label": "spawn the production wizard seeded with a credential-less nas equipment. yi" + }, + { + "label": "test_flow_15_websocket_reconnect.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_15_websocket_reconnect.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_15_websocket_reconnect_py", + "community": 337, + "norm_label": "test_flow_15_websocket_reconnect.py" + }, + { + "label": "test_flow_15_websocket_reconnect()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_15_websocket_reconnect.py", + "source_location": "L16", + "id": "e2e_test_flow_15_websocket_reconnect_test_flow_15_websocket_reconnect", + "community": 337, + "norm_label": "test_flow_15_websocket_reconnect()" + }, + { + "label": "E2E flow 15: WebSocket reconnect + degraded-mode banner. Frontend Spec \u00a76.14 (d", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_15_websocket_reconnect.py", + "source_location": "L1", + "id": "e2e_test_flow_15_websocket_reconnect_rationale_1", + "community": 337, + "norm_label": "e2e flow 15: websocket reconnect + degraded-mode banner. frontend spec \u00a76.14 (d" + }, + { + "label": "test_flow_21_stage_ceiling.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_21_stage_ceiling.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_21_stage_ceiling_py", + "community": 318, + "norm_label": "test_flow_21_stage_ceiling.py" + }, + { + "label": "_goto()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_21_stage_ceiling.py", + "source_location": "L12", + "id": "e2e_test_flow_21_stage_ceiling_goto", + "community": 318, + "norm_label": "_goto()" + }, + { + "label": "test_flow_21_stage_equipment_metadata_renders_ceiling_note()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_21_stage_ceiling.py", + "source_location": "L25", + "id": "e2e_test_flow_21_stage_ceiling_test_flow_21_stage_equipment_metadata_renders_ceiling_note", + "community": 318, + "norm_label": "test_flow_21_stage_equipment_metadata_renders_ceiling_note()" + }, + { + "label": "E2E flow 21: stage-mode ceiling note (Redesign \u00a73.2 / \u00a74.4). When a stage-mode", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_21_stage_ceiling.py", + "source_location": "L1", + "id": "e2e_test_flow_21_stage_ceiling_rationale_1", + "community": 318, + "norm_label": "e2e flow 21: stage-mode ceiling note (redesign \u00a73.2 / \u00a74.4). when a stage-mode" + }, + { + "label": "_test_app.py", + "file_type": "code", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L1", + "id": "tests_e2e_test_app_py", + "community": 101, + "norm_label": "_test_app.py" + }, + { + "label": "TestState", + "file_type": "code", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L67", + "id": "e2e_test_app_teststate", + "community": 37, + "norm_label": "teststate" + }, + { + "label": "_read_query()", + "file_type": "code", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L102", + "id": "e2e_test_app_read_query", + "community": 101, + "norm_label": "_read_query()" + }, + { + "label": "_classify_test_node()", + "file_type": "code", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L109", + "id": "e2e_test_app_classify_test_node", + "community": 101, + "norm_label": "_classify_test_node()" + }, + { + "label": "_seeded_metadata_payload()", + "file_type": "code", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L129", + "id": "e2e_test_app_seeded_metadata_payload", + "community": 101, + "norm_label": "_seeded_metadata_payload()" + }, + { + "label": "_feed_rows()", + "file_type": "code", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L189", + "id": "e2e_test_app_feed_rows", + "community": 101, + "norm_label": "_feed_rows()" + }, + { + "label": "_seeded_file_entries()", + "file_type": "code", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L209", + "id": "e2e_test_app_seeded_file_entries", + "community": 101, + "norm_label": "_seeded_file_entries()" + }, + { + "label": "build_test_app()", + "file_type": "code", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L236", + "id": "e2e_test_app_build_test_app", + "community": 101, + "norm_label": "build_test_app()" + }, + { + "label": "create_app_factory()", + "file_type": "code", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L898", + "id": "e2e_test_app_create_app_factory", + "community": 101, + "norm_label": "create_app_factory()" + }, + { + "label": "E2E test app wiring (Phase 16 follow-up). Builds a FastAPI app via :func:`exlab", + "file_type": "rationale", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L1", + "id": "e2e_test_app_rationale_1", + "community": 101, + "norm_label": "e2e test app wiring (phase 16 follow-up). builds a fastapi app via :func:`exlab" + }, + { + "label": "Mutable cross-request state for the e2e harness.", + "file_type": "rationale", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L68", + "id": "e2e_test_app_rationale_68", + "community": 37, + "norm_label": "mutable cross-request state for the e2e harness." + }, + { + "label": "Parse a request URL's query string into a multi-value mapping.", + "file_type": "rationale", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L103", + "id": "e2e_test_app_rationale_103", + "community": 101, + "norm_label": "parse a request url's query string into a multi-value mapping." + }, + { + "label": "Same shape classifier the production mount uses, for seeded ids. Returns ``", + "file_type": "rationale", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L110", + "id": "e2e_test_app_rationale_110", + "community": 101, + "norm_label": "same shape classifier the production mount uses, for seeded ids. returns ``" + }, + { + "label": "Per-node-kind hardcoded payloads the test app threads into the production re", + "file_type": "rationale", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L130", + "id": "e2e_test_app_rationale_130", + "community": 101, + "norm_label": "per-node-kind hardcoded payloads the test app threads into the production re" + }, + { + "label": "Return a node's feed as normalized 5-tuples. ``(name, size, sync_status, ke", + "file_type": "rationale", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L192", + "id": "e2e_test_app_rationale_192", + "community": 101, + "norm_label": "return a node's feed as normalized 5-tuples. ``(name, size, sync_status, ke" + }, + { + "label": "Build the centre-pane file rows the test flows assert on. Returns a default", + "file_type": "rationale", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L210", + "id": "e2e_test_app_rationale_210", + "community": 101, + "norm_label": "build the centre-pane file rows the test flows assert on. returns a default" + }, + { + "label": "Construct the FastAPI app and mount the NiceGUI test surface.", + "file_type": "rationale", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L237", + "id": "e2e_test_app_rationale_237", + "community": 101, + "norm_label": "construct the fastapi app and mount the nicegui test surface." + }, + { + "label": "uvicorn ``--factory`` entrypoint.", + "file_type": "rationale", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L899", + "id": "e2e_test_app_rationale_899", + "community": 101, + "norm_label": "uvicorn ``--factory`` entrypoint." + }, + { + "label": "test_flow_01_onboarding.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_01_onboarding.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_01_onboarding_py", + "community": 165, + "norm_label": "test_flow_01_onboarding.py" + }, + { + "label": "_goto()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_01_onboarding.py", + "source_location": "L18", + "id": "e2e_test_flow_01_onboarding_goto", + "community": 165, + "norm_label": "_goto()" + }, + { + "label": "test_flow_01_onboarding()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_01_onboarding.py", + "source_location": "L37", + "id": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", + "community": 165, + "norm_label": "test_flow_01_onboarding()" + }, + { + "label": "E2E flow 01: First-launch onboarding. Frontend Spec \u00a76.1 (welcome card + autost", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_01_onboarding.py", + "source_location": "L1", + "id": "e2e_test_flow_01_onboarding_rationale_1", + "community": 165, + "norm_label": "e2e flow 01: first-launch onboarding. frontend spec \u00a76.1 (welcome card + autost" + }, + { + "label": "Navigate to a NiceGUI page, tolerating a transient ERR_ABORTED. NiceGUI's c", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_01_onboarding.py", + "source_location": "L19", + "id": "e2e_test_flow_01_onboarding_rationale_19", + "community": 165, + "norm_label": "navigate to a nicegui page, tolerating a transient err_aborted. nicegui's c" + }, + { + "label": "test_flow_12_quit_coordinator.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_12_quit_coordinator.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_12_quit_coordinator_py", + "community": 338, + "norm_label": "test_flow_12_quit_coordinator.py" + }, + { + "label": "test_flow_12_quit_coordinator()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_12_quit_coordinator.py", + "source_location": "L27", + "id": "e2e_test_flow_12_quit_coordinator_test_flow_12_quit_coordinator", + "community": 338, + "norm_label": "test_flow_12_quit_coordinator()" + }, + { + "label": "E2E flow 12: Quit coordinator (drain in-flight sessions). Frontend Spec \u00a76.11 (", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_12_quit_coordinator.py", + "source_location": "L1", + "id": "e2e_test_flow_12_quit_coordinator_rationale_1", + "community": 338, + "norm_label": "e2e flow 12: quit coordinator (drain in-flight sessions). frontend spec \u00a76.11 (" + }, + { + "label": "test_flow_19_travelling_badge.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_19_travelling_badge_py", + "community": 267, + "norm_label": "test_flow_19_travelling_badge.py" + }, + { + "label": "_free_port()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L40", + "id": "e2e_test_flow_19_travelling_badge_free_port", + "community": 267, + "norm_label": "_free_port()" + }, + { + "label": "_make_seeded_server()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L46", + "id": "e2e_test_flow_19_travelling_badge_make_seeded_server", + "community": 267, + "norm_label": "_make_seeded_server()" + }, + { + "label": "test_flow_19_travelling_badge_aggregates_red()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L87", + "id": "e2e_test_flow_19_travelling_badge_test_flow_19_travelling_badge_aggregates_red", + "community": 267, + "norm_label": "test_flow_19_travelling_badge_aggregates_red()" + }, + { + "label": "E2E flow 19: travelling problem badge (Redesign \u00a74.5). The badge sits on the sh", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L1", + "id": "e2e_test_flow_19_travelling_badge_rationale_1", + "community": 267, + "norm_label": "e2e flow 19: travelling problem badge (redesign \u00a74.5). the badge sits on the sh" + }, + { + "label": "Spawn a uvicorn server with seeded findings injected via env var.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L47", + "id": "e2e_test_flow_19_travelling_badge_rationale_47", + "community": 267, + "norm_label": "spawn a uvicorn server with seeded findings injected via env var." + }, + { + "label": "The badge for a seeded hard finding renders on the root node.", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L88", + "id": "e2e_test_flow_19_travelling_badge_rationale_88", + "community": 267, + "norm_label": "the badge for a seeded hard finding renders on the root node." + }, + { + "label": "test_flow_04_test_run.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_04_test_run.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_04_test_run_py", + "community": 127, + "norm_label": "test_flow_04_test_run.py" + }, + { + "label": "test_flow_04_test_run()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_04_test_run.py", + "source_location": "L17", + "id": "e2e_test_flow_04_test_run_test_flow_04_test_run", + "community": 127, + "norm_label": "test_flow_04_test_run()" + }, + { + "label": "E2E flow 04: Test-run wizard end-to-end. Frontend Spec \u00a76.4 (run wizard, test m", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_04_test_run.py", + "source_location": "L1", + "id": "e2e_test_flow_04_test_run_rationale_1", + "community": 127, + "norm_label": "e2e flow 04: test-run wizard end-to-end. frontend spec \u00a76.4 (run wizard, test m" + }, + { + "label": "test_flow_06_problems.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_06_problems.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_06_problems_py", + "community": 114, + "norm_label": "test_flow_06_problems.py" + }, + { + "label": "test_flow_06_problems()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_06_problems.py", + "source_location": "L19", + "id": "e2e_test_flow_06_problems_test_flow_06_problems", + "community": 114, + "norm_label": "test_flow_06_problems()" + }, + { + "label": "E2E flow 06: Problems view + override / revoke round trip. Frontend Spec \u00a76.6 (", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_06_problems.py", + "source_location": "L1", + "id": "e2e_test_flow_06_problems_rationale_1", + "community": 114, + "norm_label": "e2e flow 06: problems view + override / revoke round trip. frontend spec \u00a76.6 (" + }, + { + "label": "test_flow_14_notifications.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_14_notifications.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_14_notifications_py", + "community": 339, + "norm_label": "test_flow_14_notifications.py" + }, + { + "label": "test_flow_14_notifications()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_14_notifications.py", + "source_location": "L26", + "id": "e2e_test_flow_14_notifications_test_flow_14_notifications", + "community": 339, + "norm_label": "test_flow_14_notifications()" + }, + { + "label": "E2E flow 14: Tray notifications + in-app toasts. Frontend Spec \u00a76.13 (notificat", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_14_notifications.py", + "source_location": "L1", + "id": "e2e_test_flow_14_notifications_rationale_1", + "community": 339, + "norm_label": "e2e flow 14: tray notifications + in-app toasts. frontend spec \u00a76.13 (notificat" + }, + { + "label": "test_flow_10_schema_mismatch.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_10_schema_mismatch.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_10_schema_mismatch_py", + "community": 114, + "norm_label": "test_flow_10_schema_mismatch.py" + }, + { + "label": "test_flow_10_schema_mismatch()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_10_schema_mismatch.py", + "source_location": "L17", + "id": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", + "community": 114, + "norm_label": "test_flow_10_schema_mismatch()" + }, + { + "label": "E2E flow 10: Schema-mismatch / migration prompt. Frontend Spec \u00a76.9 (schema-mis", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_10_schema_mismatch.py", + "source_location": "L1", + "id": "e2e_test_flow_10_schema_mismatch_rationale_1", + "community": 114, + "norm_label": "e2e flow 10: schema-mismatch / migration prompt. frontend spec \u00a76.9 (schema-mis" + }, + { + "label": "test_flow_02_project_wizard.py", + "file_type": "code", + "source_file": "tests/e2e/test_flow_02_project_wizard.py", + "source_location": "L1", + "id": "tests_e2e_test_flow_02_project_wizard_py", + "community": 142, + "norm_label": "test_flow_02_project_wizard.py" + }, + { + "label": "test_flow_02_project_wizard()", + "file_type": "code", + "source_file": "tests/e2e/test_flow_02_project_wizard.py", + "source_location": "L14", + "id": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", + "community": 142, + "norm_label": "test_flow_02_project_wizard()" + }, + { + "label": "E2E flow 02: Project wizard 7-step happy path. Frontend Spec \u00a76.3 (project wiza", + "file_type": "rationale", + "source_file": "tests/e2e/test_flow_02_project_wizard.py", + "source_location": "L1", + "id": "e2e_test_flow_02_project_wizard_rationale_1", + "community": 142, + "norm_label": "e2e flow 02: project wizard 7-step happy path. frontend spec \u00a76.3 (project wiza" + }, + { + "label": "problems_page.py", + "file_type": "code", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L1", + "id": "tests_e2e_page_objects_problems_page_py", + "community": 114, + "norm_label": "problems_page.py" + }, + { + "label": "ProblemsPage", + "file_type": "code", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L11", + "id": "page_objects_problems_page_problemspage", + "community": 114, + "norm_label": "problemspage" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L14", + "id": "page_objects_problems_page_problemspage_init", + "community": 114, + "norm_label": ".__init__()" + }, + { + "label": "table()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L18", + "id": "page_objects_problems_page_table", + "community": 114, + "norm_label": "table()" + }, + { + "label": "empty_state()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L23", + "id": "page_objects_problems_page_empty_state", + "community": 114, + "norm_label": "empty_state()" + }, + { + "label": ".row()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L27", + "id": "page_objects_problems_page_problemspage_row", + "community": 114, + "norm_label": ".row()" + }, + { + "label": ".row_state()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L31", + "id": "page_objects_problems_page_problemspage_row_state", + "community": 114, + "norm_label": ".row_state()" + }, + { + "label": ".row_override()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L35", + "id": "page_objects_problems_page_problemspage_row_override", + "community": 114, + "norm_label": ".row_override()" + }, + { + "label": ".row_revoke()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L39", + "id": "page_objects_problems_page_problemspage_row_revoke", + "community": 114, + "norm_label": ".row_revoke()" + }, + { + "label": "Page object for the Problems tab. Frontend Spec \u00a76.6.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L1", + "id": "page_objects_problems_page_rationale_1", + "community": 114, + "norm_label": "page object for the problems tab. frontend spec \u00a76.6." + }, + { + "label": "Locators for the Problems table + override dialog.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L12", + "id": "page_objects_problems_page_rationale_12", + "community": 114, + "norm_label": "locators for the problems table + override dialog." + }, + { + "label": "The Problems table container.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L19", + "id": "page_objects_problems_page_rationale_19", + "community": 436, + "norm_label": "the problems table container." + }, + { + "label": "The empty-state label shown when no findings match.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L24", + "id": "page_objects_problems_page_rationale_24", + "community": 437, + "norm_label": "the empty-state label shown when no findings match." + }, + { + "label": "The Nth visible findings row.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L28", + "id": "page_objects_problems_page_rationale_28", + "community": 114, + "norm_label": "the nth visible findings row." + }, + { + "label": "The state label inside the Nth row (Active / Override active / ...).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L32", + "id": "page_objects_problems_page_rationale_32", + "community": 114, + "norm_label": "the state label inside the nth row (active / override active / ...)." + }, + { + "label": "The Override-and-allow-sync button on the Nth row.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L36", + "id": "page_objects_problems_page_rationale_36", + "community": 114, + "norm_label": "the override-and-allow-sync button on the nth row." + }, + { + "label": "The Revoke override button on the Nth row.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L40", + "id": "page_objects_problems_page_rationale_40", + "community": 114, + "norm_label": "the revoke override button on the nth row." + }, + { + "label": "settings_page.py", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L1", + "id": "tests_e2e_page_objects_settings_page_py", + "community": 67, + "norm_label": "settings_page.py" + }, + { + "label": "SettingsPage", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L11", + "id": "page_objects_settings_page_settingspage", + "community": 67, + "norm_label": "settingspage" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L14", + "id": "page_objects_settings_page_settingspage_init", + "community": 67, + "norm_label": ".__init__()" + }, + { + "label": "dialog()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L18", + "id": "page_objects_settings_page_dialog", + "community": 67, + "norm_label": "dialog()" + }, + { + "label": "incomplete_banner()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L23", + "id": "page_objects_settings_page_incomplete_banner", + "community": 67, + "norm_label": "incomplete_banner()" + }, + { + "label": ".nav()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L27", + "id": "page_objects_settings_page_settingspage_nav", + "community": 67, + "norm_label": ".nav()" + }, + { + "label": ".section()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L31", + "id": "page_objects_settings_page_settingspage_section", + "community": 67, + "norm_label": ".section()" + }, + { + "label": "paths_templates()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L36", + "id": "page_objects_settings_page_paths_templates", + "community": 67, + "norm_label": "paths_templates()" + }, + { + "label": "paths_plugin()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L41", + "id": "page_objects_settings_page_paths_plugin", + "community": 67, + "norm_label": "paths_plugin()" + }, + { + "label": "paths_local_root()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L46", + "id": "page_objects_settings_page_paths_local_root", + "community": 67, + "norm_label": "paths_local_root()" + }, + { + "label": "lims_password_primary()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L51", + "id": "page_objects_settings_page_lims_password_primary", + "community": 67, + "norm_label": "lims_password_primary()" + }, + { + "label": "lims_password_secondary()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L56", + "id": "page_objects_settings_page_lims_password_secondary", + "community": 67, + "norm_label": "lims_password_secondary()" + }, + { + "label": "lims_password_input()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L61", + "id": "page_objects_settings_page_lims_password_input", + "community": 67, + "norm_label": "lims_password_input()" + }, + { + "label": "lims_password_save()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L66", + "id": "page_objects_settings_page_lims_password_save", + "community": 67, + "norm_label": "lims_password_save()" + }, + { + "label": "lims_password_cancel()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L71", + "id": "page_objects_settings_page_lims_password_cancel", + "community": 67, + "norm_label": "lims_password_cancel()" + }, + { + "label": "lims_password_clear_confirm()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L76", + "id": "page_objects_settings_page_lims_password_clear_confirm", + "community": 67, + "norm_label": "lims_password_clear_confirm()" + }, + { + "label": "lims_password_status()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L81", + "id": "page_objects_settings_page_lims_password_status", + "community": 67, + "norm_label": "lims_password_status()" + }, + { + "label": "equipment_id()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L86", + "id": "page_objects_settings_page_equipment_id", + "community": 67, + "norm_label": "equipment_id()" + }, + { + "label": "equipment_add()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L91", + "id": "page_objects_settings_page_equipment_add", + "community": 67, + "norm_label": "equipment_add()" + }, + { + "label": "save()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L96", + "id": "page_objects_settings_page_save", + "community": 67, + "norm_label": "save()" + }, + { + "label": "discard()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L101", + "id": "page_objects_settings_page_discard", + "community": 67, + "norm_label": "discard()" + }, + { + "label": "saved_marker()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L106", + "id": "page_objects_settings_page_saved_marker", + "community": 67, + "norm_label": "saved_marker()" + }, + { + "label": "Page object for the Settings dialog. Frontend Spec \u00a76.7.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L1", + "id": "page_objects_settings_page_rationale_1", + "community": 67, + "norm_label": "page object for the settings dialog. frontend spec \u00a76.7." + }, + { + "label": "Locators for the settings dialog's nine-section layout.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L12", + "id": "page_objects_settings_page_rationale_12", + "community": 67, + "norm_label": "locators for the settings dialog's nine-section layout." + }, + { + "label": "The settings dialog card.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L19", + "id": "page_objects_settings_page_rationale_19", + "community": 438, + "norm_label": "the settings dialog card." + }, + { + "label": "The setup-incomplete banner shown inside the dialog.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L24", + "id": "page_objects_settings_page_rationale_24", + "community": 439, + "norm_label": "the setup-incomplete banner shown inside the dialog." + }, + { + "label": "The sidebar nav row for a section.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L28", + "id": "page_objects_settings_page_rationale_28", + "community": 67, + "norm_label": "the sidebar nav row for a section." + }, + { + "label": "The body container for a section.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L32", + "id": "page_objects_settings_page_rationale_32", + "community": 67, + "norm_label": "the body container for a section." + }, + { + "label": "Paths section: templates directory input.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L37", + "id": "page_objects_settings_page_rationale_37", + "community": 440, + "norm_label": "paths section: templates directory input." + }, + { + "label": "Paths section: plugin directory input.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L42", + "id": "page_objects_settings_page_rationale_42", + "community": 441, + "norm_label": "paths section: plugin directory input." + }, + { + "label": "Paths section: local data root input.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L47", + "id": "page_objects_settings_page_rationale_47", + "community": 442, + "norm_label": "paths section: local data root input." + }, + { + "label": "LIMS section: the credential row's primary button ([Set] / [Replace]).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L52", + "id": "page_objects_settings_page_rationale_52", + "community": 443, + "norm_label": "lims section: the credential row's primary button ([set] / [replace])." + }, + { + "label": "LIMS section: the credential row's secondary button ([Clear]).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L57", + "id": "page_objects_settings_page_rationale_57", + "community": 444, + "norm_label": "lims section: the credential row's secondary button ([clear])." + }, + { + "label": "LIMS section: the inline password input shown while editing.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L62", + "id": "page_objects_settings_page_rationale_62", + "community": 445, + "norm_label": "lims section: the inline password input shown while editing." + }, + { + "label": "LIMS section: the credential row's Save button (editing state).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L67", + "id": "page_objects_settings_page_rationale_67", + "community": 446, + "norm_label": "lims section: the credential row's save button (editing state)." + }, + { + "label": "LIMS section: the credential row's Cancel button (editing state).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L72", + "id": "page_objects_settings_page_rationale_72", + "community": 447, + "norm_label": "lims section: the credential row's cancel button (editing state)." + }, + { + "label": "LIMS section: the confirm button in the Clear-credential dialog.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L77", + "id": "page_objects_settings_page_rationale_77", + "community": 448, + "norm_label": "lims section: the confirm button in the clear-credential dialog." + }, + { + "label": "LIMS section: the credential row's status line (resting states).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L82", + "id": "page_objects_settings_page_rationale_82", + "community": 449, + "norm_label": "lims section: the credential row's status line (resting states)." + }, + { + "label": "Equipment section: equipment-id input.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L87", + "id": "page_objects_settings_page_rationale_87", + "community": 450, + "norm_label": "equipment section: equipment-id input." + }, + { + "label": "Equipment section: add-equipment button.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L92", + "id": "page_objects_settings_page_rationale_92", + "community": 451, + "norm_label": "equipment section: add-equipment button." + }, + { + "label": "The marker shown after a successful save.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L107", + "id": "page_objects_settings_page_rationale_107", + "community": 452, + "norm_label": "the marker shown after a successful save." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "tests/e2e/page_objects/__init__.py", + "source_location": "L1", + "id": "tests_e2e_page_objects_init_py", + "community": 404, + "norm_label": "__init__.py" + }, + { + "label": "Page object package for the Phase 16 e2e suite. Each module wraps the stable ``", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/__init__.py", + "source_location": "L1", + "id": "page_objects_init_rationale_1", + "community": 404, + "norm_label": "page object package for the phase 16 e2e suite. each module wraps the stable ``" + }, + { + "label": "wizard_equipment_page.py", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L1", + "id": "tests_e2e_page_objects_wizard_equipment_page_py", + "community": 136, + "norm_label": "wizard_equipment_page.py" + }, + { + "label": "WizardEquipmentPage", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L8", + "id": "page_objects_wizard_equipment_page_wizardequipmentpage", + "community": 176, + "norm_label": "wizardequipmentpage" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L9", + "id": "page_objects_wizard_equipment_page_wizardequipmentpage_init", + "community": 176, + "norm_label": ".__init__()" + }, + { + "label": "step_identity()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L14", + "id": "page_objects_wizard_equipment_page_step_identity", + "community": 136, + "norm_label": "step_identity()" + }, + { + "label": "equipment_id()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L18", + "id": "page_objects_wizard_equipment_page_equipment_id", + "community": 136, + "norm_label": "equipment_id()" + }, + { + "label": "label()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L22", + "id": "page_objects_wizard_equipment_page_label", + "community": 136, + "norm_label": "label()" + }, + { + "label": "step_paths()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L26", + "id": "page_objects_wizard_equipment_page_step_paths", + "community": 136, + "norm_label": "step_paths()" + }, + { + "label": "local_root()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L31", + "id": "page_objects_wizard_equipment_page_local_root", + "community": 136, + "norm_label": "local_root()" + }, + { + "label": "nas_root()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L35", + "id": "page_objects_wizard_equipment_page_nas_root", + "community": 136, + "norm_label": "nas_root()" + }, + { + "label": "sync_mode()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L40", + "id": "page_objects_wizard_equipment_page_sync_mode", + "community": 136, + "norm_label": "sync_mode()" + }, + { + "label": "transport_type()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L44", + "id": "page_objects_wizard_equipment_page_transport_type", + "community": 136, + "norm_label": "transport_type()" + }, + { + "label": "sftp_host()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L49", + "id": "page_objects_wizard_equipment_page_sftp_host", + "community": 136, + "norm_label": "sftp_host()" + }, + { + "label": "sftp_user()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L53", + "id": "page_objects_wizard_equipment_page_sftp_user", + "community": 136, + "norm_label": "sftp_user()" + }, + { + "label": "sftp_remote_path()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L57", + "id": "page_objects_wizard_equipment_page_sftp_remote_path", + "community": 136, + "norm_label": "sftp_remote_path()" + }, + { + "label": "smb_host()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L62", + "id": "page_objects_wizard_equipment_page_smb_host", + "community": 136, + "norm_label": "smb_host()" + }, + { + "label": "smb_share()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L66", + "id": "page_objects_wizard_equipment_page_smb_share", + "community": 136, + "norm_label": "smb_share()" + }, + { + "label": "smb_user()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L70", + "id": "page_objects_wizard_equipment_page_smb_user", + "community": 136, + "norm_label": "smb_user()" + }, + { + "label": "confirm()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L75", + "id": "page_objects_wizard_equipment_page_confirm", + "community": 136, + "norm_label": "confirm()" + }, + { + "label": "cancel()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L79", + "id": "page_objects_wizard_equipment_page_cancel", + "community": 136, + "norm_label": "cancel()" + }, + { + "label": "next_button()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L83", + "id": "page_objects_wizard_equipment_page_next_button", + "community": 136, + "norm_label": "next_button()" + }, + { + "label": "back()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L87", + "id": "page_objects_wizard_equipment_page_back", + "community": 136, + "norm_label": "back()" + }, + { + "label": "success()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L91", + "id": "page_objects_wizard_equipment_page_success", + "community": 136, + "norm_label": "success()" + }, + { + "label": "Page object for the Add-Equipment wizard (Redesign \u00a76).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L1", + "id": "page_objects_wizard_equipment_page_rationale_1", + "community": 136, + "norm_label": "page object for the add-equipment wizard (redesign \u00a76)." + }, + { + "label": "staging_page.py", + "file_type": "code", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L1", + "id": "tests_e2e_page_objects_staging_page_py", + "community": 155, + "norm_label": "staging_page.py" + }, + { + "label": "StagingPage", + "file_type": "code", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L11", + "id": "page_objects_staging_page_stagingpage", + "community": 155, + "norm_label": "stagingpage" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L14", + "id": "page_objects_staging_page_stagingpage_init", + "community": 155, + "norm_label": ".__init__()" + }, + { + "label": "dock()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L18", + "id": "page_objects_staging_page_dock", + "community": 155, + "norm_label": "dock()" + }, + { + "label": ".row()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L22", + "id": "page_objects_staging_page_stagingpage_row", + "community": 155, + "norm_label": ".row()" + }, + { + "label": ".force_sync()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L26", + "id": "page_objects_staging_page_stagingpage_force_sync", + "community": 155, + "norm_label": ".force_sync()" + }, + { + "label": ".clear()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L30", + "id": "page_objects_staging_page_stagingpage_clear", + "community": 155, + "norm_label": ".clear()" + }, + { + "label": ".view_log()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L34", + "id": "page_objects_staging_page_stagingpage_view_log", + "community": 155, + "norm_label": ".view_log()" + }, + { + "label": "clear_verified()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L39", + "id": "page_objects_staging_page_clear_verified", + "community": 155, + "norm_label": "clear_verified()" + }, + { + "label": "Page object for the orchestrator staging dock. Frontend Spec \u00a73.9.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L1", + "id": "page_objects_staging_page_rationale_1", + "community": 155, + "norm_label": "page object for the orchestrator staging dock. frontend spec \u00a73.9." + }, + { + "label": "Locators for the staging dock + per-row actions.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L12", + "id": "page_objects_staging_page_rationale_12", + "community": 155, + "norm_label": "locators for the staging dock + per-row actions." + }, + { + "label": "The staging dock container.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L19", + "id": "page_objects_staging_page_rationale_19", + "community": 453, + "norm_label": "the staging dock container." + }, + { + "label": "The Force-sync button on the Nth row.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L27", + "id": "page_objects_staging_page_rationale_27", + "community": 155, + "norm_label": "the force-sync button on the nth row." + }, + { + "label": "The Clear button on the Nth row.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L31", + "id": "page_objects_staging_page_rationale_31", + "community": 155, + "norm_label": "the clear button on the nth row." + }, + { + "label": "The View-log button on the Nth row.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L35", + "id": "page_objects_staging_page_rationale_35", + "community": 155, + "norm_label": "the view-log button on the nth row." + }, + { + "label": "The toolbar Clear-verified-runs button.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L40", + "id": "page_objects_staging_page_rationale_40", + "community": 454, + "norm_label": "the toolbar clear-verified-runs button." + }, + { + "label": "wizard_run_page.py", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L1", + "id": "tests_e2e_page_objects_wizard_run_page_py", + "community": 127, + "norm_label": "wizard_run_page.py" + }, + { + "label": "WizardRunPage", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L11", + "id": "page_objects_wizard_run_page_wizardrunpage", + "community": 127, + "norm_label": "wizardrunpage" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L14", + "id": "page_objects_wizard_run_page_wizardrunpage_init", + "community": 127, + "norm_label": ".__init__()" + }, + { + "label": "stepper()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L18", + "id": "page_objects_wizard_run_page_stepper", + "community": 127, + "norm_label": "stepper()" + }, + { + "label": "title()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L23", + "id": "page_objects_wizard_run_page_title", + "community": 127, + "norm_label": "title()" + }, + { + "label": "mode_badge_experimental()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L28", + "id": "page_objects_wizard_run_page_mode_badge_experimental", + "community": 127, + "norm_label": "mode_badge_experimental()" + }, + { + "label": "mode_badge_test()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L33", + "id": "page_objects_wizard_run_page_mode_badge_test", + "community": 127, + "norm_label": "mode_badge_test()" + }, + { + "label": ".step()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L37", + "id": "page_objects_wizard_run_page_wizardrunpage_step", + "community": 127, + "norm_label": ".step()" + }, + { + "label": "back()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L42", + "id": "page_objects_wizard_run_page_back", + "community": 127, + "norm_label": "back()" + }, + { + "label": "cancel()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L50", + "id": "page_objects_wizard_run_page_cancel", + "community": 127, + "norm_label": "cancel()" + }, + { + "label": "next()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L55", + "id": "page_objects_wizard_run_page_next", + "community": 127, + "norm_label": "next()" + }, + { + "label": "submit()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L60", + "id": "page_objects_wizard_run_page_submit", + "community": 127, + "norm_label": "submit()" + }, + { + "label": "success_card()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L65", + "id": "page_objects_wizard_run_page_success_card", + "community": 127, + "norm_label": "success_card()" + }, + { + "label": "Page object for the New Run Wizard. Frontend Spec \u00a76.4.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L1", + "id": "page_objects_wizard_run_page_rationale_1", + "community": 127, + "norm_label": "page object for the new run wizard. frontend spec \u00a76.4." + }, + { + "label": "Locators for the run wizard (experimental + test mode).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L12", + "id": "page_objects_wizard_run_page_rationale_12", + "community": 127, + "norm_label": "locators for the run wizard (experimental + test mode)." + }, + { + "label": "The vertical stepper that holds the six steps.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L19", + "id": "page_objects_wizard_run_page_rationale_19", + "community": 455, + "norm_label": "the vertical stepper that holds the six steps." + }, + { + "label": "The wizard's title label (changes per run kind).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L24", + "id": "page_objects_wizard_run_page_rationale_24", + "community": 456, + "norm_label": "the wizard's title label (changes per run kind)." + }, + { + "label": "The mode badge for experimental runs.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L29", + "id": "page_objects_wizard_run_page_rationale_29", + "community": 457, + "norm_label": "the mode badge for experimental runs." + }, + { + "label": "The mode badge for test runs.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L34", + "id": "page_objects_wizard_run_page_rationale_34", + "community": 458, + "norm_label": "the mode badge for test runs." + }, + { + "label": "Locator for a specific step container.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L38", + "id": "page_objects_wizard_run_page_rationale_38", + "community": 127, + "norm_label": "locator for a specific step container." + }, + { + "label": "The back button on the active stepper navigation. Absent on the first s", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L43", + "id": "page_objects_wizard_run_page_rationale_43", + "community": 459, + "norm_label": "the back button on the active stepper navigation. absent on the first s" + }, + { + "label": "The cancel button; present on every step, returns to /main.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L51", + "id": "page_objects_wizard_run_page_rationale_51", + "community": 460, + "norm_label": "the cancel button; present on every step, returns to /main." + }, + { + "label": "The primary advance button on the active stepper navigation.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L56", + "id": "page_objects_wizard_run_page_rationale_56", + "community": 461, + "norm_label": "the primary advance button on the active stepper navigation." + }, + { + "label": "The Create button on the confirm step.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L61", + "id": "page_objects_wizard_run_page_rationale_61", + "community": 462, + "norm_label": "the create button on the confirm step." + }, + { + "label": "The success indicator rendered after submit.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L66", + "id": "page_objects_wizard_run_page_rationale_66", + "community": 463, + "norm_label": "the success indicator rendered after submit." + }, + { + "label": "wizard_project_page.py", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L1", + "id": "tests_e2e_page_objects_wizard_project_page_py", + "community": 142, + "norm_label": "wizard_project_page.py" + }, + { + "label": "WizardProjectPage", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L11", + "id": "page_objects_wizard_project_page_wizardprojectpage", + "community": 142, + "norm_label": "wizardprojectpage" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L14", + "id": "page_objects_wizard_project_page_wizardprojectpage_init", + "community": 142, + "norm_label": ".__init__()" + }, + { + "label": "card()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L18", + "id": "page_objects_wizard_project_page_card", + "community": 142, + "norm_label": "card()" + }, + { + "label": "stepper()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L23", + "id": "page_objects_wizard_project_page_stepper", + "community": 142, + "norm_label": "stepper()" + }, + { + "label": ".step()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L27", + "id": "page_objects_wizard_project_page_wizardprojectpage_step", + "community": 142, + "norm_label": ".step()" + }, + { + "label": "lims_gate()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L32", + "id": "page_objects_wizard_project_page_lims_gate", + "community": 142, + "norm_label": "lims_gate()" + }, + { + "label": "lims_id()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L41", + "id": "page_objects_wizard_project_page_lims_id", + "community": 142, + "norm_label": "lims_id()" + }, + { + "label": "back()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L46", + "id": "page_objects_wizard_project_page_back", + "community": 142, + "norm_label": "back()" + }, + { + "label": "cancel()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L54", + "id": "page_objects_wizard_project_page_cancel", + "community": 142, + "norm_label": "cancel()" + }, + { + "label": "next()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L59", + "id": "page_objects_wizard_project_page_next", + "community": 142, + "norm_label": "next()" + }, + { + "label": "submit()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L64", + "id": "page_objects_wizard_project_page_submit", + "community": 142, + "norm_label": "submit()" + }, + { + "label": "success_card()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L69", + "id": "page_objects_wizard_project_page_success_card", + "community": 142, + "norm_label": "success_card()" + }, + { + "label": "Page object for the New Project Wizard. Frontend Spec \u00a76.3.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L1", + "id": "page_objects_wizard_project_page_rationale_1", + "community": 142, + "norm_label": "page object for the new project wizard. frontend spec \u00a76.3." + }, + { + "label": "Locators for the new-project wizard's seven-step stepper.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L12", + "id": "page_objects_wizard_project_page_rationale_12", + "community": 142, + "norm_label": "locators for the new-project wizard's seven-step stepper." + }, + { + "label": "The wizard's outermost card element.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L19", + "id": "page_objects_wizard_project_page_rationale_19", + "community": 464, + "norm_label": "the wizard's outermost card element." + }, + { + "label": "The vertical stepper that holds the seven steps.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L24", + "id": "page_objects_wizard_project_page_rationale_24", + "community": 465, + "norm_label": "the vertical stepper that holds the seven steps." + }, + { + "label": "Locator for a specific step container.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L28", + "id": "page_objects_wizard_project_page_rationale_28", + "community": 142, + "norm_label": "locator for a specific step container." + }, + { + "label": "The manual-entry gate button on the LIMS Project step. Rendered only wh", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L33", + "id": "page_objects_wizard_project_page_rationale_33", + "community": 466, + "norm_label": "the manual-entry gate button on the lims project step. rendered only wh" + }, + { + "label": "The manual LIMS short-ID input (revealed by ``lims_gate``).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L42", + "id": "page_objects_wizard_project_page_rationale_42", + "community": 467, + "norm_label": "the manual lims short-id input (revealed by ``lims_gate``)." + }, + { + "label": "The back button on the active stepper navigation. Absent on the first s", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L47", + "id": "page_objects_wizard_project_page_rationale_47", + "community": 468, + "norm_label": "the back button on the active stepper navigation. absent on the first s" + }, + { + "label": "The cancel button; present on every step, returns to /main.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L55", + "id": "page_objects_wizard_project_page_rationale_55", + "community": 469, + "norm_label": "the cancel button; present on every step, returns to /main." + }, + { + "label": "The primary advance button on the active stepper navigation.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L60", + "id": "page_objects_wizard_project_page_rationale_60", + "community": 470, + "norm_label": "the primary advance button on the active stepper navigation." + }, + { + "label": "The Create button on the confirm step.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L65", + "id": "page_objects_wizard_project_page_rationale_65", + "community": 471, + "norm_label": "the create button on the confirm step." + }, + { + "label": "The success indicator rendered after submit.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L70", + "id": "page_objects_wizard_project_page_rationale_70", + "community": 472, + "norm_label": "the success indicator rendered after submit." + }, + { + "label": "main_page.py", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L1", + "id": "tests_e2e_page_objects_main_page_py", + "community": 164, + "norm_label": "main_page.py" + }, + { + "label": "MainPage", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L15", + "id": "page_objects_main_page_mainpage", + "community": 165, + "norm_label": "mainpage" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L18", + "id": "page_objects_main_page_mainpage_init", + "community": 165, + "norm_label": ".__init__()" + }, + { + "label": "tree()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L22", + "id": "page_objects_main_page_tree", + "community": 164, + "norm_label": "tree()" + }, + { + "label": "setup_incomplete_banner()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L27", + "id": "page_objects_main_page_setup_incomplete_banner", + "community": 164, + "norm_label": "setup_incomplete_banner()" + }, + { + "label": "toolbar_new_project()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L32", + "id": "page_objects_main_page_toolbar_new_project", + "community": 164, + "norm_label": "toolbar_new_project()" + }, + { + "label": "toolbar_new_run()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L37", + "id": "page_objects_main_page_toolbar_new_run", + "community": 164, + "norm_label": "toolbar_new_run()" + }, + { + "label": "toolbar_new_test_run()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L42", + "id": "page_objects_main_page_toolbar_new_test_run", + "community": 164, + "norm_label": "toolbar_new_test_run()" + }, + { + "label": "toolbar_settings()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L47", + "id": "page_objects_main_page_toolbar_settings", + "community": 164, + "norm_label": "toolbar_settings()" + }, + { + "label": "toolbar_refresh()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L52", + "id": "page_objects_main_page_toolbar_refresh", + "community": 164, + "norm_label": "toolbar_refresh()" + }, + { + "label": "toolbar_add_equipment()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L57", + "id": "page_objects_main_page_toolbar_add_equipment", + "community": 164, + "norm_label": "toolbar_add_equipment()" + }, + { + "label": "search_box()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L62", + "id": "page_objects_main_page_search_box", + "community": 164, + "norm_label": "search_box()" + }, + { + "label": "tab_metadata()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L67", + "id": "page_objects_main_page_tab_metadata", + "community": 164, + "norm_label": "tab_metadata()" + }, + { + "label": "tab_problems()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L72", + "id": "page_objects_main_page_tab_problems", + "community": 164, + "norm_label": "tab_problems()" + }, + { + "label": "toggle_right_pane()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L77", + "id": "page_objects_main_page_toggle_right_pane", + "community": 164, + "norm_label": "toggle_right_pane()" + }, + { + "label": "footer_clear_verified()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L82", + "id": "page_objects_main_page_footer_clear_verified", + "community": 164, + "norm_label": "footer_clear_verified()" + }, + { + "label": "footer_staging_segment()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L87", + "id": "page_objects_main_page_footer_staging_segment", + "community": 164, + "norm_label": "footer_staging_segment()" + }, + { + "label": "Page object for the main window. Frontend Spec \u00a76. Selectors target ``data-test", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L1", + "id": "page_objects_main_page_rationale_1", + "community": 164, + "norm_label": "page object for the main window. frontend spec \u00a76. selectors target ``data-test" + }, + { + "label": "Page object for the main window. Frontend Spec \u00a76.1, \u00a76.2.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L16", + "id": "page_objects_main_page_rationale_16", + "community": 165, + "norm_label": "page object for the main window. frontend spec \u00a76.1, \u00a76.2." + }, + { + "label": "The left-pane project / session tree (\u00a76.2.1).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L23", + "id": "page_objects_main_page_rationale_23", + "community": 473, + "norm_label": "the left-pane project / session tree (\u00a76.2.1)." + }, + { + "label": "Banner shown while the setup gate is open (\u00a76.2.4).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L28", + "id": "page_objects_main_page_rationale_28", + "community": 474, + "norm_label": "banner shown while the setup gate is open (\u00a76.2.4)." + }, + { + "label": "Toolbar button that opens the new-project wizard (\u00a76.2.2).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L33", + "id": "page_objects_main_page_rationale_33", + "community": 475, + "norm_label": "toolbar button that opens the new-project wizard (\u00a76.2.2)." + }, + { + "label": "Toolbar button that opens the new-run wizard (\u00a76.2.2).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L38", + "id": "page_objects_main_page_rationale_38", + "community": 476, + "norm_label": "toolbar button that opens the new-run wizard (\u00a76.2.2)." + }, + { + "label": "Toolbar button that opens the new-test-run wizard (\u00a76.2.2).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L43", + "id": "page_objects_main_page_rationale_43", + "community": 477, + "norm_label": "toolbar button that opens the new-test-run wizard (\u00a76.2.2)." + }, + { + "label": "Toolbar button that opens the settings dialog (\u00a76.2.2).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L48", + "id": "page_objects_main_page_rationale_48", + "community": 478, + "norm_label": "toolbar button that opens the settings dialog (\u00a76.2.2)." + }, + { + "label": "Toolbar refresh button (\u00a76.2.2).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L53", + "id": "page_objects_main_page_rationale_53", + "community": 479, + "norm_label": "toolbar refresh button (\u00a76.2.2)." + }, + { + "label": "Toolbar Add-Equipment button (Redesign \u00a74 / \u00a76).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L58", + "id": "page_objects_main_page_rationale_58", + "community": 480, + "norm_label": "toolbar add-equipment button (redesign \u00a74 / \u00a76)." + }, + { + "label": "The tree search input (\u00a76.2.1).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L63", + "id": "page_objects_main_page_rationale_63", + "community": 481, + "norm_label": "the tree search input (\u00a76.2.1)." + }, + { + "label": "Metadata tab (Redesign \u00a74.4).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L68", + "id": "page_objects_main_page_rationale_68", + "community": 482, + "norm_label": "metadata tab (redesign \u00a74.4)." + }, + { + "label": "Problems tab (\u00a76.2.3 / Redesign \u00a74.4).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L73", + "id": "page_objects_main_page_rationale_73", + "community": 483, + "norm_label": "problems tab (\u00a76.2.3 / redesign \u00a74.4)." + }, + { + "label": "Right-pane collapse toggle (Redesign \u00a74).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L78", + "id": "page_objects_main_page_rationale_78", + "community": 484, + "norm_label": "right-pane collapse toggle (redesign \u00a74)." + }, + { + "label": "Footer bulk Clear-verified button (Redesign \u00a74.6).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L83", + "id": "page_objects_main_page_rationale_83", + "community": 485, + "norm_label": "footer bulk clear-verified button (redesign \u00a74.6)." + }, + { + "label": "Footer Staging status segment (Redesign \u00a74.6).", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L88", + "id": "page_objects_main_page_rationale_88", + "community": 486, + "norm_label": "footer staging status segment (redesign \u00a74.6)." + }, + { + "label": "welcome_page.py", + "file_type": "code", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L1", + "id": "tests_e2e_page_objects_welcome_page_py", + "community": 245, + "norm_label": "welcome_page.py" + }, + { + "label": "WelcomePage", + "file_type": "code", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L11", + "id": "page_objects_welcome_page_welcomepage", + "community": 244, + "norm_label": "welcomepage" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L14", + "id": "page_objects_welcome_page_welcomepage_init", + "community": 244, + "norm_label": ".__init__()" + }, + { + "label": "card()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L18", + "id": "page_objects_welcome_page_card", + "community": 245, + "norm_label": "card()" + }, + { + "label": "headline()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L23", + "id": "page_objects_welcome_page_headline", + "community": 245, + "norm_label": "headline()" + }, + { + "label": "autostart_toggle()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L28", + "id": "page_objects_welcome_page_autostart_toggle", + "community": 245, + "norm_label": "autostart_toggle()" + }, + { + "label": "get_started()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L33", + "id": "page_objects_welcome_page_get_started", + "community": 245, + "norm_label": "get_started()" + }, + { + "label": "skip_for_now()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L38", + "id": "page_objects_welcome_page_skip_for_now", + "community": 245, + "norm_label": "skip_for_now()" + }, + { + "label": "status_marker()", + "file_type": "code", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L43", + "id": "page_objects_welcome_page_status_marker", + "community": 245, + "norm_label": "status_marker()" + }, + { + "label": "Page object for the first-launch welcome card. Frontend Spec \u00a76.1.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L1", + "id": "page_objects_welcome_page_rationale_1", + "community": 245, + "norm_label": "page object for the first-launch welcome card. frontend spec \u00a76.1." + }, + { + "label": "Page object for the welcome card shown on first launch. Frontend Spec \u00a76.1.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L12", + "id": "page_objects_welcome_page_rationale_12", + "community": 244, + "norm_label": "page object for the welcome card shown on first launch. frontend spec \u00a76.1." + }, + { + "label": "The welcome card container.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L19", + "id": "page_objects_welcome_page_rationale_19", + "community": 487, + "norm_label": "the welcome card container." + }, + { + "label": "The welcome card headline / title element.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L24", + "id": "page_objects_welcome_page_rationale_24", + "community": 488, + "norm_label": "the welcome card headline / title element." + }, + { + "label": "The autostart-on-login toggle on the welcome card.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L29", + "id": "page_objects_welcome_page_rationale_29", + "community": 489, + "norm_label": "the autostart-on-login toggle on the welcome card." + }, + { + "label": "The primary \"Get started\" CTA on the welcome card.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L34", + "id": "page_objects_welcome_page_rationale_34", + "community": 490, + "norm_label": "the primary \"get started\" cta on the welcome card." + }, + { + "label": "The secondary \"Skip for now\" CTA on the welcome card.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L39", + "id": "page_objects_welcome_page_rationale_39", + "community": 491, + "norm_label": "the secondary \"skip for now\" cta on the welcome card." + }, + { + "label": "Hidden marker emitted by the test app to surface state.", + "file_type": "rationale", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L44", + "id": "page_objects_welcome_page_rationale_44", + "community": 492, + "norm_label": "hidden marker emitted by the test app to surface state." + }, + { + "label": "conf.py", + "file_type": "code", + "source_file": "docs/source/conf.py", + "source_location": "L1", + "id": "docs_source_conf_py", + "community": 246, + "norm_label": "conf.py" + }, + { + "label": "_NoiseFilter", + "file_type": "code", + "source_file": "docs/source/conf.py", + "source_location": "L200", + "id": "source_conf_noisefilter", + "community": 246, + "norm_label": "_noisefilter" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "docs/source/conf.py", + "source_location": "L208", + "id": "source_conf_noisefilter_init", + "community": 246, + "norm_label": ".__init__()" + }, + { + "label": ".filter()", + "file_type": "code", + "source_file": "docs/source/conf.py", + "source_location": "L212", + "id": "source_conf_noisefilter_filter", + "community": 246, + "norm_label": ".filter()" + }, + { + "label": "setup()", + "file_type": "code", + "source_file": "docs/source/conf.py", + "source_location": "L271", + "id": "source_conf_setup", + "community": 246, + "norm_label": "setup()" + }, + { + "label": "Sphinx configuration for ExLab-Wizard documentation. The configuration wires th", + "file_type": "rationale", + "source_file": "docs/source/conf.py", + "source_location": "L1", + "id": "source_conf_rationale_1", + "community": 246, + "norm_label": "sphinx configuration for exlab-wizard documentation. the configuration wires th" + }, + { + "label": "Drop uncategorised warnings whose message text matches a known needle. Inse", + "file_type": "rationale", + "source_file": "docs/source/conf.py", + "source_location": "L201", + "id": "source_conf_rationale_201", + "community": 246, + "norm_label": "drop uncategorised warnings whose message text matches a known needle. inse" + }, + { + "label": "Install the noise filter at the head of the warning handler chain. Sphinx w", + "file_type": "rationale", + "source_file": "docs/source/conf.py", + "source_location": "L272", + "id": "source_conf_rationale_272", + "community": 246, + "norm_label": "install the noise filter at the head of the warning handler chain. sphinx w" + }, + { + "label": "generate_screenshots.py", + "file_type": "code", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L1", + "id": "scripts_generate_screenshots_py", + "community": 88, + "norm_label": "generate_screenshots.py" + }, + { + "label": "_free_port()", + "file_type": "code", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L69", + "id": "scripts_generate_screenshots_free_port", + "community": 88, + "norm_label": "_free_port()" + }, + { + "label": "_start_server()", + "file_type": "code", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L76", + "id": "scripts_generate_screenshots_start_server", + "community": 88, + "norm_label": "_start_server()" + }, + { + "label": "_stop_server()", + "file_type": "code", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L138", + "id": "scripts_generate_screenshots_stop_server", + "community": 88, + "norm_label": "_stop_server()" + }, + { + "label": "_capture()", + "file_type": "code", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L148", + "id": "scripts_generate_screenshots_capture", + "community": 88, + "norm_label": "_capture()" + }, + { + "label": "_capture_capability()", + "file_type": "code", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L178", + "id": "scripts_generate_screenshots_capture_capability", + "community": 88, + "norm_label": "_capture_capability()" + }, + { + "label": "_capability_plan()", + "file_type": "code", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L209", + "id": "scripts_generate_screenshots_capability_plan", + "community": 88, + "norm_label": "_capability_plan()" + }, + { + "label": "main()", + "file_type": "code", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L337", + "id": "scripts_generate_screenshots_main", + "community": 88, + "norm_label": "main()" + }, + { + "label": "Generate Playwright screenshots for the Sphinx user guide. CLI: python scr", + "file_type": "rationale", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L1", + "id": "scripts_generate_screenshots_rationale_1", + "community": 88, + "norm_label": "generate playwright screenshots for the sphinx user guide. cli: python scr" + }, + { + "label": "Return a free TCP port on 127.0.0.1.", + "file_type": "rationale", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L70", + "id": "scripts_generate_screenshots_rationale_70", + "community": 88, + "norm_label": "return a free tcp port on 127.0.0.1." + }, + { + "label": "Spawn the uvicorn-hosted e2e test app; return (proc, base_url). Mirrors the", + "file_type": "rationale", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L77", + "id": "scripts_generate_screenshots_rationale_77", + "community": 88, + "norm_label": "spawn the uvicorn-hosted e2e test app; return (proc, base_url). mirrors the" + }, + { + "label": "Best-effort termination of the uvicorn subprocess.", + "file_type": "rationale", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L139", + "id": "scripts_generate_screenshots_rationale_139", + "community": 88, + "norm_label": "best-effort termination of the uvicorn subprocess." + }, + { + "label": "Navigate to ``route``, optionally wait for a selector, screenshot. Returns", + "file_type": "rationale", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L158", + "id": "scripts_generate_screenshots_rationale_158", + "community": 88, + "norm_label": "navigate to ``route``, optionally wait for a selector, screenshot. returns" + }, + { + "label": "Capture every step in the capability; return (succeeded, total).", + "file_type": "rationale", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L185", + "id": "scripts_generate_screenshots_rationale_185", + "community": 88, + "norm_label": "capture every step in the capability; return (succeeded, total)." + }, + { + "label": "Return the (capability_id, steps) list driving the screenshot run. Routes a", + "file_type": "rationale", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L210", + "id": "scripts_generate_screenshots_rationale_210", + "community": 88, + "norm_label": "return the (capability_id, steps) list driving the screenshot run. routes a" + }, + { + "label": "Entry point; returns a process exit code (0 on full success).", + "file_type": "rationale", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L338", + "id": "scripts_generate_screenshots_rationale_338", + "community": 88, + "norm_label": "entry point; returns a process exit code (0 on full success)." + }, + { + "label": "build_local.ps1", + "file_type": "code", + "source_file": "scripts/build_local.ps1", + "source_location": "L1", + "id": "scripts_build_local_ps1", + "community": 493, + "norm_label": "build_local.ps1" + }, + { + "label": "paths.py", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L1", + "id": "src_exlab_wizard_paths_py", + "community": 78, + "norm_label": "paths.py" + }, + { + "label": "_app_name()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L95", + "id": "exlab_wizard_paths_app_name", + "community": 62, + "norm_label": "_app_name()" + }, + { + "label": "_platform()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L107", + "id": "exlab_wizard_paths_platform", + "community": 62, + "norm_label": "_platform()" + }, + { + "label": "_home()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L118", + "id": "exlab_wizard_paths_home", + "community": 62, + "norm_label": "_home()" + }, + { + "label": "_env_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L127", + "id": "exlab_wizard_paths_env_path", + "community": 62, + "norm_label": "_env_path()" + }, + { + "label": "os_config_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L133", + "id": "exlab_wizard_paths_os_config_path", + "community": 62, + "norm_label": "os_config_path()" + }, + { + "label": "os_state_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L145", + "id": "exlab_wizard_paths_os_state_path", + "community": 181, + "norm_label": "os_state_path()" + }, + { + "label": "os_cache_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L157", + "id": "exlab_wizard_paths_os_cache_path", + "community": 62, + "norm_label": "os_cache_path()" + }, + { + "label": "os_central_log_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L169", + "id": "exlab_wizard_paths_os_central_log_path", + "community": 196, + "norm_label": "os_central_log_path()" + }, + { + "label": "suggested_staging_root()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L188", + "id": "exlab_wizard_paths_suggested_staging_root", + "community": 62, + "norm_label": "suggested_staging_root()" + }, + { + "label": "ensure_dir()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L220", + "id": "exlab_wizard_paths_ensure_dir", + "community": 181, + "norm_label": "ensure_dir()" + }, + { + "label": "ensure_state_dir()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L226", + "id": "exlab_wizard_paths_ensure_state_dir", + "community": 181, + "norm_label": "ensure_state_dir()" + }, + { + "label": "ensure_central_log_dir()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L231", + "id": "exlab_wizard_paths_ensure_central_log_dir", + "community": 196, + "norm_label": "ensure_central_log_dir()" + }, + { + "label": "canonicalize_equipment_id()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L241", + "id": "exlab_wizard_paths_canonicalize_equipment_id", + "community": 83, + "norm_label": "canonicalize_equipment_id()" + }, + { + "label": "validate_project_short_id()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L272", + "id": "exlab_wizard_paths_validate_project_short_id", + "community": 78, + "norm_label": "validate_project_short_id()" + }, + { + "label": "project_name_violations()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L290", + "id": "exlab_wizard_paths_project_name_violations", + "community": 221, + "norm_label": "project_name_violations()" + }, + { + "label": "validate_project_name()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L348", + "id": "exlab_wizard_paths_validate_project_name", + "community": 221, + "norm_label": "validate_project_name()" + }, + { + "label": "compose_run_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L360", + "id": "exlab_wizard_paths_compose_run_path", + "community": 162, + "norm_label": "compose_run_path()" + }, + { + "label": "compose_project_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L396", + "id": "exlab_wizard_paths_compose_project_path", + "community": 83, + "norm_label": "compose_project_path()" + }, + { + "label": "_lims_slot_satisfied()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L420", + "id": "exlab_wizard_paths_lims_slot_satisfied", + "community": 78, + "norm_label": "_lims_slot_satisfied()" + }, + { + "label": "_paths_complete()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L437", + "id": "exlab_wizard_paths_paths_complete", + "community": 78, + "norm_label": "_paths_complete()" + }, + { + "label": "_password_required_equipment()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L447", + "id": "exlab_wizard_paths_password_required_equipment", + "community": 78, + "norm_label": "_password_required_equipment()" + }, + { + "label": "_nas_slot_satisfied()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L466", + "id": "exlab_wizard_paths_nas_slot_satisfied", + "community": 78, + "norm_label": "_nas_slot_satisfied()" + }, + { + "label": "evaluate_setup_state()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L483", + "id": "exlab_wizard_paths_evaluate_setup_state", + "community": 1, + "norm_label": "evaluate_setup_state()" + }, + { + "label": "_orchestrator_identity_complete()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L533", + "id": "exlab_wizard_paths_orchestrator_identity_complete", + "community": 78, + "norm_label": "_orchestrator_identity_complete()" + }, + { + "label": "setup_state_missing()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L544", + "id": "exlab_wizard_paths_setup_state_missing", + "community": 78, + "norm_label": "setup_state_missing()" + }, + { + "label": "_missing_nas_fields()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L578", + "id": "exlab_wizard_paths_missing_nas_fields", + "community": 78, + "norm_label": "_missing_nas_fields()" + }, + { + "label": "_missing_orchestrator_fields()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L601", + "id": "exlab_wizard_paths_missing_orchestrator_fields", + "community": 78, + "norm_label": "_missing_orchestrator_fields()" + }, + { + "label": "_missing_paths_fields()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L611", + "id": "exlab_wizard_paths_missing_paths_fields", + "community": 78, + "norm_label": "_missing_paths_fields()" + }, + { + "label": "_missing_lims_fields()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L624", + "id": "exlab_wizard_paths_missing_lims_fields", + "community": 78, + "norm_label": "_missing_lims_fields()" + }, + { + "label": "setup_state_next_action()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L643", + "id": "exlab_wizard_paths_setup_state_next_action", + "community": 312, + "norm_label": "setup_state_next_action()" + }, + { + "label": "cache_dir()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L673", + "id": "exlab_wizard_paths_cache_dir", + "community": 229, + "norm_label": "cache_dir()" + }, + { + "label": "creation_json_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L678", + "id": "exlab_wizard_paths_creation_json_path", + "community": 211, + "norm_label": "creation_json_path()" + }, + { + "label": "equipment_json_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L683", + "id": "exlab_wizard_paths_equipment_json_path", + "community": 229, + "norm_label": "equipment_json_path()" + }, + { + "label": "readme_fields_json_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L688", + "id": "exlab_wizard_paths_readme_fields_json_path", + "community": 80, + "norm_label": "readme_fields_json_path()" + }, + { + "label": "is_run_dir()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L698", + "id": "exlab_wizard_paths_is_run_dir", + "community": 14, + "norm_label": "is_run_dir()" + }, + { + "label": "is_test_run_dir()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L708", + "id": "exlab_wizard_paths_is_test_run_dir", + "community": 9, + "norm_label": "is_test_run_dir()" + }, + { + "label": "run_dir_stem()", + "file_type": "code", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L713", + "id": "exlab_wizard_paths_run_dir_stem", + "community": 49, + "norm_label": "run_dir_stem()" + }, + { + "label": "Path composition + OS-appropriate directories + equipment-id canonicalization.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L1", + "id": "exlab_wizard_paths_rationale_1", + "community": 78, + "norm_label": "path composition + os-appropriate directories + equipment-id canonicalization." + }, + { + "label": "``APP_NAME`` (suffixed ``-test`` when ``EXLAB_WIZARD_TEST_MODE=1``).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L96", + "id": "exlab_wizard_paths_rationale_96", + "community": 62, + "norm_label": "``app_name`` (suffixed ``-test`` when ``exlab_wizard_test_mode=1``)." + }, + { + "label": "Return a normalized platform tag for OS-conditional path dispatch.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L108", + "id": "exlab_wizard_paths_rationale_108", + "community": 62, + "norm_label": "return a normalized platform tag for os-conditional path dispatch." + }, + { + "label": "Return the operator's home directory. Centralized so test fixtures can monk", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L119", + "id": "exlab_wizard_paths_rationale_119", + "community": 62, + "norm_label": "return the operator's home directory. centralized so test fixtures can monk" + }, + { + "label": "Return ``Path(os.environ[var])`` if the var is set and non-empty, else ``fallbac", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L128", + "id": "exlab_wizard_paths_rationale_128", + "community": 62, + "norm_label": "return ``path(os.environ[var])`` if the var is set and non-empty, else ``fallbac" + }, + { + "label": "Return the OS-appropriate path of ``config.yaml``. Backend Spec \u00a79.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L134", + "id": "exlab_wizard_paths_rationale_134", + "community": 62, + "norm_label": "return the os-appropriate path of ``config.yaml``. backend spec \u00a79." + }, + { + "label": "Return the OS-appropriate state directory. Backend Spec \u00a715.7.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L146", + "id": "exlab_wizard_paths_rationale_146", + "community": 181, + "norm_label": "return the os-appropriate state directory. backend spec \u00a715.7." + }, + { + "label": "Return the OS-appropriate cache directory. Backend Spec \u00a77.2.4.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L158", + "id": "exlab_wizard_paths_rationale_158", + "community": 62, + "norm_label": "return the os-appropriate cache directory. backend spec \u00a77.2.4." + }, + { + "label": "Return the OS-appropriate central log file. Backend Spec \u00a716.3.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L170", + "id": "exlab_wizard_paths_rationale_170", + "community": 196, + "norm_label": "return the os-appropriate central log file. backend spec \u00a716.3." + }, + { + "label": "Suggested (not default) ``orchestrator.staging_root``. Backend Spec \u00a79, \u00a713.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L189", + "id": "exlab_wizard_paths_rationale_189", + "community": 62, + "norm_label": "suggested (not default) ``orchestrator.staging_root``. backend spec \u00a79, \u00a713." + }, + { + "label": "``mkdir -p`` the given path; return it. Idempotent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L221", + "id": "exlab_wizard_paths_rationale_221", + "community": 181, + "norm_label": "``mkdir -p`` the given path; return it. idempotent." + }, + { + "label": "``ensure_dir(os_state_path())``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L227", + "id": "exlab_wizard_paths_rationale_227", + "community": 181, + "norm_label": "``ensure_dir(os_state_path())``." + }, + { + "label": "``ensure_dir(os_central_log_path().parent)``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L232", + "id": "exlab_wizard_paths_rationale_232", + "community": 196, + "norm_label": "``ensure_dir(os_central_log_path().parent)``." + }, + { + "label": "Validate ``value`` against the \u00a73.1 equipment-ID regex. Returns ``value`` u", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L242", + "id": "exlab_wizard_paths_rationale_242", + "community": 83, + "norm_label": "validate ``value`` against the \u00a73.1 equipment-id regex. returns ``value`` u" + }, + { + "label": "Validate ``value`` against ``PROJECT_SHORT_ID_PATTERN``. Returns the input", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L273", + "id": "exlab_wizard_paths_rationale_273", + "community": 78, + "norm_label": "validate ``value`` against ``project_short_id_pattern``. returns the input" + }, + { + "label": "Return every way ``value`` fails the \u00a73.2 project-name rule. The project fo", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L291", + "id": "exlab_wizard_paths_rationale_291", + "community": 221, + "norm_label": "return every way ``value`` fails the \u00a73.2 project-name rule. the project fo" + }, + { + "label": "Validate ``value`` as a \u00a73.2 project-folder name. Returns the input unchang", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L349", + "id": "exlab_wizard_paths_rationale_349", + "community": 221, + "norm_label": "validate ``value`` as a \u00a73.2 project-folder name. returns the input unchang" + }, + { + "label": "Compose the absolute on-disk path for a new run. Paths follow Backend Spec", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L368", + "id": "exlab_wizard_paths_rationale_368", + "community": 162, + "norm_label": "compose the absolute on-disk path for a new run. paths follow backend spec" + }, + { + "label": "Compose the project-level directory. ``////`` or ``TestRun_``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L714", + "id": "exlab_wizard_paths_rationale_714", + "community": 49, + "norm_label": "return ``run_`` or ``testrun_``." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_init_py", + "community": 405, + "norm_label": "__init__.py" + }, + { + "label": "ExLab-Wizard package root. Backend Spec \u00a74.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/__init__.py", + "source_location": "L1", + "id": "exlab_wizard_init_rationale_1", + "community": 405, + "norm_label": "exlab-wizard package root. backend spec \u00a74." + }, + { + "label": "errors.py", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L1", + "id": "src_exlab_wizard_errors_py", + "community": 22, + "norm_label": "errors.py" + }, + { + "label": "ExLabError", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L19", + "id": "exlab_wizard_errors_exlaberror", + "community": 22, + "norm_label": "exlaberror" + }, + { + "label": "Exception", + "file_type": "code", + "source_file": "", + "source_location": "", + "id": "exception", + "community": 171, + "norm_label": "exception" + }, + { + "label": "ConfigError", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L23", + "id": "exlab_wizard_errors_configerror", + "community": 55, + "norm_label": "configerror" + }, + { + "label": "ValidationError", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L27", + "id": "exlab_wizard_errors_validationerror", + "community": 6, + "norm_label": "validationerror" + }, + { + "label": "TemplateLoadError", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L31", + "id": "exlab_wizard_errors_templateloaderror", + "community": 22, + "norm_label": "templateloaderror" + }, + { + "label": "TemplateCoreFieldRedeclaredError", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L35", + "id": "exlab_wizard_errors_templatecorefieldredeclarederror", + "community": 2, + "norm_label": "templatecorefieldredeclarederror" + }, + { + "label": "PluginError", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L39", + "id": "exlab_wizard_errors_pluginerror", + "community": 215, + "norm_label": "pluginerror" + }, + { + "label": "PluginInputRequired", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L43", + "id": "exlab_wizard_errors_plugininputrequired", + "community": 22, + "norm_label": "plugininputrequired" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L46", + "id": "exlab_wizard_errors_plugininputrequired_init", + "community": 22, + "norm_label": ".__init__()" + }, + { + "label": "reason()", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L51", + "id": "exlab_wizard_errors_reason", + "community": 22, + "norm_label": "reason()" + }, + { + "label": "SchemaMajorMismatchError", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L55", + "id": "exlab_wizard_errors_schemamajormismatcherror", + "community": 22, + "norm_label": "schemamajormismatcherror" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L58", + "id": "exlab_wizard_errors_schemamajormismatcherror_init", + "community": 22, + "norm_label": ".__init__()" + }, + { + "label": "KeyringUnavailableError", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L64", + "id": "exlab_wizard_errors_keyringunavailableerror", + "community": 133, + "norm_label": "keyringunavailableerror" + }, + { + "label": "SetupIncompleteError", + "file_type": "code", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L68", + "id": "exlab_wizard_errors_setupincompleteerror", + "community": 22, + "norm_label": "setupincompleteerror" + }, + { + "label": "Top-level exception hierarchy. Backend Spec \u00a74.3 errors.py.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L1", + "id": "exlab_wizard_errors_rationale_1", + "community": 22, + "norm_label": "top-level exception hierarchy. backend spec \u00a74.3 errors.py." + }, + { + "label": "Base class for all ExLab-Wizard exceptions.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L20", + "id": "exlab_wizard_errors_rationale_20", + "community": 22, + "norm_label": "base class for all exlab-wizard exceptions." + }, + { + "label": "Raised on config.yaml validation failures. Backend Spec \u00a79.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L24", + "id": "exlab_wizard_errors_rationale_24", + "community": 55, + "norm_label": "raised on config.yaml validation failures. backend spec \u00a79." + }, + { + "label": "Raised by the validator engine on creation-time gates. Backend Spec \u00a78.1.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L28", + "id": "exlab_wizard_errors_rationale_28", + "community": 6, + "norm_label": "raised by the validator engine on creation-time gates. backend spec \u00a78.1." + }, + { + "label": "Raised when a Copier template fails to load. Backend Spec \u00a75.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L32", + "id": "exlab_wizard_errors_rationale_32", + "community": 22, + "norm_label": "raised when a copier template fails to load. backend spec \u00a75." + }, + { + "label": "Raised when a template redeclares label / operator / objective. Backend Spec \u00a710", + "file_type": "rationale", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L36", + "id": "exlab_wizard_errors_rationale_36", + "community": 2, + "norm_label": "raised when a template redeclares label / operator / objective. backend spec \u00a710" + }, + { + "label": "Raised by plugin workers to signal expected failure. Backend Spec \u00a76.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L40", + "id": "exlab_wizard_errors_rationale_40", + "community": 215, + "norm_label": "raised by plugin workers to signal expected failure. backend spec \u00a76." + }, + { + "label": "Raised by plugin workers to escalate for additional input. Backend Spec \u00a76.4.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L44", + "id": "exlab_wizard_errors_rationale_44", + "community": 22, + "norm_label": "raised by plugin workers to escalate for additional input. backend spec \u00a76.4." + }, + { + "label": "Raised when a cache file's schema major version exceeds reader support. Backend", + "file_type": "rationale", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L56", + "id": "exlab_wizard_errors_rationale_56", + "community": 22, + "norm_label": "raised when a cache file's schema major version exceeds reader support. backend" + }, + { + "label": "Raised when no OS keyring backend is reachable and fallback is exhausted. Backen", + "file_type": "rationale", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L65", + "id": "exlab_wizard_errors_rationale_65", + "community": 133, + "norm_label": "raised when no os keyring backend is reachable and fallback is exhausted. backen" + }, + { + "label": "Raised when a creation gate runs while setup state is INCOMPLETE_*. Backend Spec", + "file_type": "rationale", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L69", + "id": "exlab_wizard_errors_rationale_69", + "community": 22, + "norm_label": "raised when a creation gate runs while setup state is incomplete_*. backend spec" + }, + { + "label": "__main__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/__main__.py", + "source_location": "L1", + "id": "src_exlab_wizard_main_py", + "community": 340, + "norm_label": "__main__.py" + }, + { + "label": "main()", + "file_type": "code", + "source_file": "src/exlab_wizard/__main__.py", + "source_location": "L6", + "id": "exlab_wizard_main_main", + "community": 340, + "norm_label": "main()" + }, + { + "label": "CLI alias entry point. Backend Spec \u00a74.3.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/__main__.py", + "source_location": "L1", + "id": "exlab_wizard_main_rationale_1", + "community": 340, + "norm_label": "cli alias entry point. backend spec \u00a74.3." + }, + { + "label": "theme.py", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L1", + "id": "src_exlab_wizard_ui_theme_py", + "community": 101, + "norm_label": "theme.py" + }, + { + "label": "build_root_css()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L25", + "id": "ui_theme_build_root_css", + "community": 101, + "norm_label": "build_root_css()" + }, + { + "label": "register_theme()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L100", + "id": "ui_theme_register_theme", + "community": 101, + "norm_label": "register_theme()" + }, + { + "label": "resolve_assets_dir()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L122", + "id": "ui_theme_resolve_assets_dir", + "community": 101, + "norm_label": "resolve_assets_dir()" + }, + { + "label": "register_static_assets()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L137", + "id": "ui_theme_register_static_assets", + "community": 101, + "norm_label": "register_static_assets()" + }, + { + "label": "Theme registration for NiceGUI / Quasar. Per Frontend Spec \u00a72.1.1, this module", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L1", + "id": "ui_theme_rationale_1", + "community": 101, + "norm_label": "theme registration for nicegui / quasar. per frontend spec \u00a72.1.1, this module" + }, + { + "label": "Render the canonical ``:root { ... }`` CSS block from design tokens. The st", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L26", + "id": "ui_theme_rationale_26", + "community": 101, + "norm_label": "render the canonical ``:root { ... }`` css block from design tokens. the st" + }, + { + "label": "Register the design tokens with NiceGUI / Quasar at app start. Imports Nice", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L101", + "id": "ui_theme_rationale_101", + "community": 101, + "norm_label": "register the design tokens with nicegui / quasar at app start. imports nice" + }, + { + "label": "Return the absolute path to the bundled ``assets/`` directory. Resolves bot", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L123", + "id": "ui_theme_rationale_123", + "community": 101, + "norm_label": "return the absolute path to the bundled ``assets/`` directory. resolves bot" + }, + { + "label": "Mount the project's ``assets/`` directory at ``/assets``. Idempotent: a mod", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L138", + "id": "ui_theme_rationale_138", + "community": 101, + "norm_label": "mount the project's ``assets/`` directory at ``/assets``. idempotent: a mod" + }, + { + "label": "equipment_form.py", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/equipment_form.py", + "source_location": "L1", + "id": "src_exlab_wizard_ui_equipment_form_py", + "community": 169, + "norm_label": "equipment_form.py" + }, + { + "label": "build_equipment_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/equipment_form.py", + "source_location": "L29", + "id": "ui_equipment_form_build_equipment_config", + "community": 169, + "norm_label": "build_equipment_config()" + }, + { + "label": "Shared assembler for an :class:`EquipmentConfig` from raw form fields. GUI/Orch", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/equipment_form.py", + "source_location": "L1", + "id": "ui_equipment_form_rationale_1", + "community": 169, + "norm_label": "shared assembler for an :class:`equipmentconfig` from raw form fields. gui/orch" + }, + { + "label": "Assemble a validated :class:`EquipmentConfig` from raw form fields. Redesig", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/equipment_form.py", + "source_location": "L54", + "id": "ui_equipment_form_rationale_54", + "community": 169, + "norm_label": "assemble a validated :class:`equipmentconfig` from raw form fields. redesig" + }, + { + "label": "design.py", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/design.py", + "source_location": "L1", + "id": "src_exlab_wizard_ui_design_py", + "community": 406, + "norm_label": "design.py" + }, + { + "label": "Design tokens. Mirrors DESIGN.md verbatim with the Frontend Spec \u00a72.1 typography", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/design.py", + "source_location": "L1", + "id": "ui_design_rationale_1", + "community": 406, + "norm_label": "design tokens. mirrors design.md verbatim with the frontend spec \u00a72.1 typography" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_ui_init_py", + "community": 324, + "norm_label": "__init__.py" + }, + { + "label": "notifications.py", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L1", + "id": "src_exlab_wizard_ui_notifications_py", + "community": 54, + "norm_label": "notifications.py" + }, + { + "label": "Severity", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L35", + "id": "ui_notifications_severity", + "community": 54, + "norm_label": "severity" + }, + { + "label": "BannerId", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L44", + "id": "ui_notifications_bannerid", + "community": 54, + "norm_label": "bannerid" + }, + { + "label": "ContainerId", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L58", + "id": "ui_notifications_containerid", + "community": 54, + "norm_label": "containerid" + }, + { + "label": "ActionSpec", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L67", + "id": "ui_notifications_actionspec", + "community": 52, + "norm_label": "actionspec" + }, + { + "label": "_emit_toast()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L106", + "id": "ui_notifications_emit_toast", + "community": 54, + "norm_label": "_emit_toast()" + }, + { + "label": "notify_success()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L165", + "id": "ui_notifications_notify_success", + "community": 54, + "norm_label": "notify_success()" + }, + { + "label": "notify_info()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L179", + "id": "ui_notifications_notify_info", + "community": 54, + "norm_label": "notify_info()" + }, + { + "label": "notify_warning()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L190", + "id": "ui_notifications_notify_warning", + "community": 54, + "norm_label": "notify_warning()" + }, + { + "label": "notify_error()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L204", + "id": "ui_notifications_notify_error", + "community": 54, + "norm_label": "notify_error()" + }, + { + "label": "notify_field_error()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L223", + "id": "ui_notifications_notify_field_error", + "community": 54, + "norm_label": "notify_field_error()" + }, + { + "label": "notify_form_error()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L233", + "id": "ui_notifications_notify_form_error", + "community": 54, + "norm_label": "notify_form_error()" + }, + { + "label": "clear_field_error()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L243", + "id": "ui_notifications_clear_field_error", + "community": 54, + "norm_label": "clear_field_error()" + }, + { + "label": "clear_form_errors()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L249", + "id": "ui_notifications_clear_form_errors", + "community": 54, + "norm_label": "clear_form_errors()" + }, + { + "label": "get_field_error()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L255", + "id": "ui_notifications_get_field_error", + "community": 54, + "norm_label": "get_field_error()" + }, + { + "label": "get_form_error()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L261", + "id": "ui_notifications_get_form_error", + "community": 54, + "norm_label": "get_form_error()" + }, + { + "label": "show_banner()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L272", + "id": "ui_notifications_show_banner", + "community": 34, + "norm_label": "show_banner()" + }, + { + "label": "clear_banner()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L312", + "id": "ui_notifications_clear_banner", + "community": 54, + "norm_label": "clear_banner()" + }, + { + "label": "list_active_banners()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L318", + "id": "ui_notifications_list_active_banners", + "community": 54, + "norm_label": "list_active_banners()" + }, + { + "label": "banner_overflow_count()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L334", + "id": "ui_notifications_banner_overflow_count", + "community": 54, + "norm_label": "banner_overflow_count()" + }, + { + "label": "reset_for_tests()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L341", + "id": "ui_notifications_reset_for_tests", + "community": 34, + "norm_label": "reset_for_tests()" + }, + { + "label": "Canonical notification helpers (Frontend Spec \u00a72.2). This module is the **only*", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L1", + "id": "ui_notifications_rationale_1", + "community": 54, + "norm_label": "canonical notification helpers (frontend spec \u00a72.2). this module is the **only*" + }, + { + "label": "Banner severity (Frontend \u00a72.2.3).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L36", + "id": "ui_notifications_rationale_36", + "community": 54, + "norm_label": "banner severity (frontend \u00a72.2.3)." + }, + { + "label": "Closed-set banner triggers (Frontend \u00a72.2.3). Adding a new banner is a deli", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L45", + "id": "ui_notifications_rationale_45", + "community": 54, + "norm_label": "closed-set banner triggers (frontend \u00a72.2.3). adding a new banner is a deli" + }, + { + "label": "Banner placement scopes (Frontend \u00a72.2.3).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L59", + "id": "ui_notifications_rationale_59", + "community": 54, + "norm_label": "banner placement scopes (frontend \u00a72.2.3)." + }, + { + "label": "A single action affordance attached to a notification. At most one action p", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L68", + "id": "ui_notifications_rationale_68", + "community": 52, + "norm_label": "a single action affordance attached to a notification. at most one action p" + }, + { + "label": "Lower-level wrapper around ``ui.notify``. Calls into NiceGUI lazily to avoi", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L113", + "id": "ui_notifications_rationale_113", + "community": 54, + "norm_label": "lower-level wrapper around ``ui.notify``. calls into nicegui lazily to avoi" + }, + { + "label": "Show a success toast (Frontend \u00a72.2.2). 4 s default duration; 12 s when an", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L166", + "id": "ui_notifications_rationale_166", + "community": 54, + "norm_label": "show a success toast (frontend \u00a72.2.2). 4 s default duration; 12 s when an" + }, + { + "label": "Show an info toast (Frontend \u00a72.2.2).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L180", + "id": "ui_notifications_rationale_180", + "community": 54, + "norm_label": "show an info toast (frontend \u00a72.2.2)." + }, + { + "label": "Show a warning toast (Frontend \u00a72.2.2). 8 s default duration; 12 s when an", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L191", + "id": "ui_notifications_rationale_191", + "community": 54, + "norm_label": "show a warning toast (frontend \u00a72.2.2). 8 s default duration; 12 s when an" + }, + { + "label": "Show an error toast (Frontend \u00a72.2.2). 8 s default duration; 12 s when an a", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L205", + "id": "ui_notifications_rationale_205", + "community": 54, + "norm_label": "show an error toast (frontend \u00a72.2.2). 8 s default duration; 12 s when an a" + }, + { + "label": "Register a field-level inline error (Frontend \u00a72.2.4).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L224", + "id": "ui_notifications_rationale_224", + "community": 54, + "norm_label": "register a field-level inline error (frontend \u00a72.2.4)." + }, + { + "label": "Register a form-level inline error (Frontend \u00a72.2.4).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L234", + "id": "ui_notifications_rationale_234", + "community": 54, + "norm_label": "register a form-level inline error (frontend \u00a72.2.4)." + }, + { + "label": "Clear a previously registered field-level error.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L244", + "id": "ui_notifications_rationale_244", + "community": 54, + "norm_label": "clear a previously registered field-level error." + }, + { + "label": "Clear all form-level errors registered against ``form_id``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L250", + "id": "ui_notifications_rationale_250", + "community": 54, + "norm_label": "clear all form-level errors registered against ``form_id``." + }, + { + "label": "Return the registered field-level error for ``field_id`` or ``None``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L256", + "id": "ui_notifications_rationale_256", + "community": 54, + "norm_label": "return the registered field-level error for ``field_id`` or ``none``." + }, + { + "label": "Return the registered form-level error for ``form_id`` or ``None``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L262", + "id": "ui_notifications_rationale_262", + "community": 54, + "norm_label": "return the registered form-level error for ``form_id`` or ``none``." + }, + { + "label": "Activate a banner from the closed \u00a72.2.3 set. Raises: ValueError: w", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L281", + "id": "ui_notifications_rationale_281", + "community": 34, + "norm_label": "activate a banner from the closed \u00a72.2.3 set. raises: valueerror: w" + }, + { + "label": "Deactivate a banner if it was active.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L313", + "id": "ui_notifications_rationale_313", + "community": 54, + "norm_label": "deactivate a banner if it was active." + }, + { + "label": "Return active banners, optionally filtered by container. Banners are return", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L321", + "id": "ui_notifications_rationale_321", + "community": 54, + "norm_label": "return active banners, optionally filtered by container. banners are return" + }, + { + "label": "How many banners exceed the stacking cap of 2 (Frontend \u00a72.2.3).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L335", + "id": "ui_notifications_rationale_335", + "community": 54, + "norm_label": "how many banners exceed the stacking cap of 2 (frontend \u00a72.2.3)." + }, + { + "label": "Clear all module-level state. Test fixtures only.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L342", + "id": "ui_notifications_rationale_342", + "community": 34, + "norm_label": "clear all module-level state. test fixtures only." + }, + { + "label": "mount.py", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1", + "id": "src_exlab_wizard_ui_mount_py", + "community": 117, + "norm_label": "mount.py" + }, + { + "label": "_spawn_background()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L58", + "id": "ui_mount_spawn_background", + "community": 205, + "norm_label": "_spawn_background()" + }, + { + "label": "mount_ui()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L66", + "id": "ui_mount_mount_ui", + "community": 117, + "norm_label": "mount_ui()" + }, + { + "label": "_register_pages()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L89", + "id": "ui_mount_register_pages", + "community": 117, + "norm_label": "_register_pages()" + }, + { + "label": "_lims_credential_handlers()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L430", + "id": "ui_mount_lims_credential_handlers", + "community": 117, + "norm_label": "_lims_credential_handlers()" + }, + { + "label": "_nas_credential_handlers()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L486", + "id": "ui_mount_nas_credential_handlers", + "community": 117, + "norm_label": "_nas_credential_handlers()" + }, + { + "label": "_nas_test_connection()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L543", + "id": "ui_mount_nas_test_connection", + "community": 226, + "norm_label": "_nas_test_connection()" + }, + { + "label": "_persist_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L593", + "id": "ui_mount_persist_config", + "community": 156, + "norm_label": "_persist_config()" + }, + { + "label": "_ensure_staging_root()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L625", + "id": "ui_mount_ensure_staging_root", + "community": 156, + "norm_label": "_ensure_staging_root()" + }, + { + "label": "_apply_live_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L651", + "id": "ui_mount_apply_live_config", + "community": 156, + "norm_label": "_apply_live_config()" + }, + { + "label": "_nas_credential_missing()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L668", + "id": "ui_mount_nas_credential_missing", + "community": 319, + "norm_label": "_nas_credential_missing()" + }, + { + "label": "_is_setup_ready()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L689", + "id": "ui_mount_is_setup_ready", + "community": 117, + "norm_label": "_is_setup_ready()" + }, + { + "label": "_apply_autostart()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L721", + "id": "ui_mount_apply_autostart", + "community": 152, + "norm_label": "_apply_autostart()" + }, + { + "label": "_build_main_state()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L740", + "id": "ui_mount_build_main_state", + "community": 117, + "norm_label": "_build_main_state()" + }, + { + "label": "_panel_sessions()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L772", + "id": "ui_mount_panel_sessions", + "community": 290, + "norm_label": "_panel_sessions()" + }, + { + "label": "_operation_counts()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L789", + "id": "ui_mount_operation_counts", + "community": 117, + "norm_label": "_operation_counts()" + }, + { + "label": "_setup_next_action()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L806", + "id": "ui_mount_setup_next_action", + "community": 117, + "norm_label": "_setup_next_action()" + }, + { + "label": "_build_main_query()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L829", + "id": "ui_mount_build_main_query", + "community": 117, + "norm_label": "_build_main_query()" + }, + { + "label": "_classify_node()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L850", + "id": "ui_mount_classify_node", + "community": 117, + "norm_label": "_classify_node()" + }, + { + "label": "_build_metadata_payload()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L890", + "id": "ui_mount_build_metadata_payload", + "community": 206, + "norm_label": "_build_metadata_payload()" + }, + { + "label": "_metadata_for_owned_equipment()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L921", + "id": "ui_mount_metadata_for_owned_equipment", + "community": 206, + "norm_label": "_metadata_for_owned_equipment()" + }, + { + "label": "_metadata_for_relay_equipment()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L936", + "id": "ui_mount_metadata_for_relay_equipment", + "community": 206, + "norm_label": "_metadata_for_relay_equipment()" + }, + { + "label": "_metadata_for_project()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L950", + "id": "ui_mount_metadata_for_project", + "community": 206, + "norm_label": "_metadata_for_project()" + }, + { + "label": "_count_dir_children()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L984", + "id": "ui_mount_count_dir_children", + "community": 206, + "norm_label": "_count_dir_children()" + }, + { + "label": "_metadata_for_run()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L999", + "id": "ui_mount_metadata_for_run", + "community": 206, + "norm_label": "_metadata_for_run()" + }, + { + "label": "_drive_folder_feed()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1033", + "id": "ui_mount_drive_folder_feed", + "community": 205, + "norm_label": "_drive_folder_feed()" + }, + { + "label": "_fetch_folder_async()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1094", + "id": "ui_mount_fetch_folder_async", + "community": 205, + "norm_label": "_fetch_folder_async()" + }, + { + "label": "_run_staging_action()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1118", + "id": "ui_mount_run_staging_action", + "community": 205, + "norm_label": "_run_staging_action()" + }, + { + "label": "_bulk_clear_verified()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1176", + "id": "ui_mount_bulk_clear_verified", + "community": 205, + "norm_label": "_bulk_clear_verified()" + }, + { + "label": "_file_context_action()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1214", + "id": "ui_mount_file_context_action", + "community": 291, + "norm_label": "_file_context_action()" + }, + { + "label": "_toggle_keep_local()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1254", + "id": "ui_mount_toggle_keep_local", + "community": 291, + "norm_label": "_toggle_keep_local()" + }, + { + "label": "_open_in_os()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1303", + "id": "ui_mount_open_in_os", + "community": 291, + "norm_label": "_open_in_os()" + }, + { + "label": "_build_operation_rows()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1331", + "id": "ui_mount_build_operation_rows", + "community": 290, + "norm_label": "_build_operation_rows()" + }, + { + "label": "_open_operations_modal()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1343", + "id": "ui_mount_open_operations_modal", + "community": 156, + "norm_label": "_open_operations_modal()" + }, + { + "label": "_open_operation_details()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1367", + "id": "ui_mount_open_operation_details", + "community": 156, + "norm_label": "_open_operation_details()" + }, + { + "label": "_resume_operation()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1401", + "id": "ui_mount_resume_operation", + "community": 156, + "norm_label": "_resume_operation()" + }, + { + "label": "_open_input_required_dialog()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1425", + "id": "ui_mount_open_input_required_dialog", + "community": 292, + "norm_label": "_open_input_required_dialog()" + }, + { + "label": "_cancel_operation()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1471", + "id": "ui_mount_cancel_operation", + "community": 156, + "norm_label": "_cancel_operation()" + }, + { + "label": "_cancel_session()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1480", + "id": "ui_mount_cancel_session", + "community": 156, + "norm_label": "_cancel_session()" + }, + { + "label": "_open_log_dialog()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1521", + "id": "ui_mount_open_log_dialog", + "community": 205, + "norm_label": "_open_log_dialog()" + }, + { + "label": "_missing_setup_sections()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1569", + "id": "ui_mount_missing_setup_sections", + "community": 319, + "norm_label": "_missing_setup_sections()" + }, + { + "label": "_templates_dir()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1602", + "id": "ui_mount_templates_dir", + "community": 157, + "norm_label": "_templates_dir()" + }, + { + "label": "_template_names()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1610", + "id": "ui_mount_template_names", + "community": 157, + "norm_label": "_template_names()" + }, + { + "label": "_template_questions_map()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1627", + "id": "ui_mount_template_questions_map", + "community": 157, + "norm_label": "_template_questions_map()" + }, + { + "label": "_lims_catalogue_projects()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1660", + "id": "ui_mount_lims_catalogue_projects", + "community": 320, + "norm_label": "_lims_catalogue_projects()" + }, + { + "label": "_lims_projects()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1694", + "id": "ui_mount_lims_projects", + "community": 320, + "norm_label": "_lims_projects()" + }, + { + "label": "_equipment_ids()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1724", + "id": "ui_mount_equipment_ids", + "community": 157, + "norm_label": "_equipment_ids()" + }, + { + "label": "_await_session()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1732", + "id": "ui_mount_await_session", + "community": 157, + "norm_label": "_await_session()" + }, + { + "label": "_consume_session_progress()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1749", + "id": "ui_mount_consume_session_progress", + "community": 292, + "norm_label": "_consume_session_progress()" + }, + { + "label": "_close_dialog()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1794", + "id": "ui_mount_close_dialog", + "community": 292, + "norm_label": "_close_dialog()" + }, + { + "label": "_submit_project()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1802", + "id": "ui_mount_submit_project", + "community": 157, + "norm_label": "_submit_project()" + }, + { + "label": "_submit_run()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1835", + "id": "ui_mount_submit_run", + "community": 157, + "norm_label": "_submit_run()" + }, + { + "label": "_run_creation()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1868", + "id": "ui_mount_run_creation", + "community": 157, + "norm_label": "_run_creation()" + }, + { + "label": "_render_run_wizard()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1905", + "id": "ui_mount_render_run_wizard", + "community": 157, + "norm_label": "_render_run_wizard()" + }, + { + "label": "_safe_audit()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1919", + "id": "ui_mount_safe_audit", + "community": 117, + "norm_label": "_safe_audit()" + }, + { + "label": "_build_staging_state()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1931", + "id": "ui_mount_build_staging_state", + "community": 9, + "norm_label": "_build_staging_state()" + }, + { + "label": "_show_toast()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1950", + "id": "ui_mount_show_toast", + "community": 156, + "norm_label": "_show_toast()" + }, + { + "label": "_render_unavailable()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1963", + "id": "ui_mount_render_unavailable", + "community": 117, + "norm_label": "_render_unavailable()" + }, + { + "label": "NiceGUI mount helper. Backend Spec \u00a74.3, \u00a715.3.2. ``mount_ui`` is the single en", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1", + "id": "ui_mount_rationale_1", + "community": 117, + "norm_label": "nicegui mount helper. backend spec \u00a74.3, \u00a715.3.2. ``mount_ui`` is the single en" + }, + { + "label": "Schedule ``coro`` and keep a strong reference until it finishes.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L59", + "id": "ui_mount_rationale_59", + "community": 205, + "norm_label": "schedule ``coro`` and keep a strong reference until it finishes." + }, + { + "label": "Register every wizard page on ``app`` and mount NiceGUI at ``/``. ``storage", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L67", + "id": "ui_mount_rationale_67", + "community": 117, + "norm_label": "register every wizard page on ``app`` and mount nicegui at ``/``. ``storage" + }, + { + "label": "Define every ``@ui.page(...)`` handler. Called from :func:`mount_ui`.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L90", + "id": "ui_mount_rationale_90", + "community": 117, + "norm_label": "define every ``@ui.page(...)`` handler. called from :func:`mount_ui`." + }, + { + "label": "Build the LIMS-password Save / Clear handlers for the settings dialog. Cred", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L433", + "id": "ui_mount_rationale_433", + "community": 117, + "norm_label": "build the lims-password save / clear handlers for the settings dialog. cred" + }, + { + "label": "Build the NAS-password Save / Clear handlers for one equipment. Rclone-only", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L489", + "id": "ui_mount_rationale_489", + "community": 117, + "norm_label": "build the nas-password save / clear handlers for one equipment. rclone-only" + }, + { + "label": "Run the rclone equipment probe for ``equipment_id`` and adapt it. Resolves", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L544", + "id": "ui_mount_rationale_544", + "community": 226, + "norm_label": "run the rclone equipment probe for ``equipment_id`` and adapt it. resolves" + }, + { + "label": "Write ``updated`` via ``deps.save_config`` and hot-reload components. Retur", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L594", + "id": "ui_mount_rationale_594", + "community": 156, + "norm_label": "write ``updated`` via ``deps.save_config`` and hot-reload components. retur" + }, + { + "label": "Create the staging directory when the operator saved a non-empty path. ``st", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L626", + "id": "ui_mount_rationale_626", + "community": 156, + "norm_label": "create the staging directory when the operator saved a non-empty path. ``st" + }, + { + "label": "Push ``updated`` into the running components (no tray relaunch). Wraps :fun", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L652", + "id": "ui_mount_rationale_652", + "community": 156, + "norm_label": "push ``updated`` into the running components (no tray relaunch). wraps :fun" + }, + { + "label": "True when a password-requiring nas-mode equipment lacks its keyring entry.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L669", + "id": "ui_mount_rationale_669", + "community": 319, + "norm_label": "true when a password-requiring nas-mode equipment lacks its keyring entry." + }, + { + "label": "Return True when the \u00a74.9 setup state is ``READY``. Delegates to :func:`api", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L690", + "id": "ui_mount_rationale_690", + "community": 117, + "norm_label": "return true when the \u00a74.9 setup state is ``ready``. delegates to :func:`api" + }, + { + "label": "Register / unregister platform autostart; return the real post-op state. Re", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L722", + "id": "ui_mount_rationale_722", + "community": 152, + "norm_label": "register / unregister platform autostart; return the real post-op state. re" + }, + { + "label": "Return the (session_id, session) pairs the Operations panel shows. The \u00a79.5", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L773", + "id": "ui_mount_rationale_773", + "community": 290, + "norm_label": "return the (session_id, session) pairs the operations panel shows. the \u00a79.5" + }, + { + "label": "Return ``(panel_count, input_required, active)`` operation counts. ``panel_", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L790", + "id": "ui_mount_rationale_790", + "community": 117, + "norm_label": "return ``(panel_count, input_required, active)`` operation counts. ``panel_" + }, + { + "label": "Return the \u00a74.9.3 next-action string for the banner subline. Unlike :func:`", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L807", + "id": "ui_mount_rationale_807", + "community": 117, + "norm_label": "return the \u00a74.9.3 next-action string for the banner subline. unlike :func:`" + }, + { + "label": "Compose the ``?selected=...&right_pane=...`` query string for /main. Omits", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L830", + "id": "ui_mount_rationale_830", + "community": 117, + "norm_label": "compose the ``?selected=...&right_pane=...`` query string for /main. omits" + }, + { + "label": "Map a selected node id to ``(kind, is_received)``. Mirrors the shape classi", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L851", + "id": "ui_mount_rationale_851", + "community": 117, + "norm_label": "map a selected node id to ``(kind, is_received)``. mirrors the shape classi" + }, + { + "label": "Build the metadata-pane payload for the selected node, by kind. Returns ``{", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L895", + "id": "ui_mount_rationale_895", + "community": 206, + "norm_label": "build the metadata-pane payload for the selected node, by kind. returns ``{" + }, + { + "label": "Project equipment-config fields into the owned-equipment payload.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L922", + "id": "ui_mount_rationale_922", + "community": 206, + "norm_label": "project equipment-config fields into the owned-equipment payload." + }, + { + "label": "Return the relay-equipment payload (label, source_host).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L937", + "id": "ui_mount_rationale_937", + "community": 206, + "norm_label": "return the relay-equipment payload (label, source_host)." + }, + { + "label": "Derive a project payload from the on-disk project directory. ``node_id`` is", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L951", + "id": "ui_mount_rationale_951", + "community": 206, + "norm_label": "derive a project payload from the on-disk project directory. ``node_id`` is" + }, + { + "label": "Count immediate child directories of ``parent`` whose names start with ``pre", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L985", + "id": "ui_mount_rationale_985", + "community": 206, + "norm_label": "count immediate child directories of ``parent`` whose names start with ``pre" + }, + { + "label": "Decode the run's creation.json into the metadata-pane payload. Returns ``{}", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1000", + "id": "ui_mount_rationale_1000", + "community": 206, + "norm_label": "decode the run's creation.json into the metadata-pane payload. returns ``{}" + }, + { + "label": "Mount / rebind the per-tab FolderFeed and return current entries. Uses ``ap", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1034", + "id": "ui_mount_rationale_1034", + "community": 205, + "norm_label": "mount / rebind the per-tab folderfeed and return current entries. uses ``ap" + }, + { + "label": "FolderFeed fetch hook. Skips when the tree just walked. Runs the synchronou", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1095", + "id": "ui_mount_rationale_1095", + "community": 205, + "norm_label": "folderfeed fetch hook. skips when the tree just walked. runs the synchronou" + }, + { + "label": "Dispatch a per-run context action to its backend surface. Mirrors :func:`ap", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1119", + "id": "ui_mount_rationale_1119", + "community": 205, + "norm_label": "dispatch a per-run context action to its backend surface. mirrors :func:`ap" + }, + { + "label": "Bulk-clear every staged run whose sync job is verified. Wired from the file", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1177", + "id": "ui_mount_rationale_1177", + "community": 205, + "norm_label": "bulk-clear every staged run whose sync job is verified. wired from the file" + }, + { + "label": "Handle ``Open in OS`` / ``Copy path`` / ``Keep local`` file actions.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1222", + "id": "ui_mount_rationale_1222", + "community": 291, + "norm_label": "handle ``open in os`` / ``copy path`` / ``keep local`` file actions." + }, + { + "label": "Flip a file's ``keep_local`` flag via the orchestrator's writer. Operator-f", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1261", + "id": "ui_mount_rationale_1261", + "community": 291, + "norm_label": "flip a file's ``keep_local`` flag via the orchestrator's writer. operator-f" + }, + { + "label": "Launch the host OS's default opener for ``path``. Returns False on platform", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1304", + "id": "ui_mount_rationale_1304", + "community": 291, + "norm_label": "launch the host os's default opener for ``path``. returns false on platform" + }, + { + "label": "Build the Operations-panel rows from the live session store (T3). Uses the", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1332", + "id": "ui_mount_rationale_1332", + "community": 290, + "norm_label": "build the operations-panel rows from the live session store (t3). uses the" + }, + { + "label": "Open the in-flight Operations panel (Frontend \u00a79.5). Builds a fresh snapsho", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1344", + "id": "ui_mount_rationale_1344", + "community": 156, + "norm_label": "open the in-flight operations panel (frontend \u00a79.5). builds a fresh snapsho" + }, + { + "label": "Show a lightweight details/\"log\" dialog for one in-flight operation. The \u00a79", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1368", + "id": "ui_mount_rationale_1368", + "community": 156, + "norm_label": "show a lightweight details/\"log\" dialog for one in-flight operation. the \u00a79" + }, + { + "label": "Resume a suspended session by re-opening its \u00a79.1 input dialog (T5). Reads", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1402", + "id": "ui_mount_rationale_1402", + "community": 156, + "norm_label": "resume a suspended session by re-opening its \u00a79.1 input dialog (t5). reads" + }, + { + "label": "Open the \u00a79.1 escalation dialog; Submit resumes, Cancel confirms (T5). Subm", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1434", + "id": "ui_mount_rationale_1434", + "community": 292, + "norm_label": "open the \u00a79.1 escalation dialog; submit resumes, cancel confirms (t5). subm" + }, + { + "label": "Resolve the controller off ``deps`` and open the \u00a79.4 cancel dialog.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1472", + "id": "ui_mount_rationale_1472", + "community": 156, + "norm_label": "resolve the controller off ``deps`` and open the \u00a79.4 cancel dialog." + }, + { + "label": "Cancel an in-flight session via the \u00a79.4 Discard / Keep dialog (T4). The op", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1481", + "id": "ui_mount_rationale_1481", + "community": 156, + "norm_label": "cancel an in-flight session via the \u00a79.4 discard / keep dialog (t4). the op" + }, + { + "label": "Open a NiceGUI dialog showing the run's sync-queue job state. The operator-", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1522", + "id": "ui_mount_rationale_1522", + "community": 205, + "norm_label": "open a nicegui dialog showing the run's sync-queue job state. the operator-" + }, + { + "label": "Return the settings sections the operator still needs to fill in. Mirrors a", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1570", + "id": "ui_mount_rationale_1570", + "community": 319, + "norm_label": "return the settings sections the operator still needs to fill in. mirrors a" + }, + { + "label": "Return the configured templates directory, or ``None``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1603", + "id": "ui_mount_rationale_1603", + "community": 157, + "norm_label": "return the configured templates directory, or ``none``." + }, + { + "label": "List template directory names of ``template_type`` under templates_dir.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1611", + "id": "ui_mount_rationale_1611", + "community": 157, + "norm_label": "list template directory names of ``template_type`` under templates_dir." + }, + { + "label": "Map each ``template_type`` template name to its parsed copier questions. Re", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1628", + "id": "ui_mount_rationale_1628", + "community": 157, + "norm_label": "map each ``template_type`` template name to its parsed copier questions. re" + }, + { + "label": "Read the offline-catalogue projects (disconnected-workstation source). Read", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1661", + "id": "ui_mount_rationale_1661", + "community": 320, + "norm_label": "read the offline-catalogue projects (disconnected-workstation source). read" + }, + { + "label": "Return the LIMS projects backing the project wizard's picker. Tries the liv", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1695", + "id": "ui_mount_rationale_1695", + "community": 320, + "norm_label": "return the lims projects backing the project wizard's picker. tries the liv" + }, + { + "label": "Return the configured equipment IDs.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1725", + "id": "ui_mount_rationale_1725", + "community": 157, + "norm_label": "return the configured equipment ids." + }, + { + "label": "Await a controller session's pipeline task and return the final handle. ``c", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1733", + "id": "ui_mount_rationale_1733", + "community": 157, + "norm_label": "await a controller session's pipeline task and return the final handle. ``c" + }, + { + "label": "Fold the controller's WS frames into the wizard's live phase bar (T2) and su", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1752", + "id": "ui_mount_rationale_1752", + "community": 292, + "norm_label": "fold the controller's ws frames into the wizard's live phase bar (t2) and su" + }, + { + "label": "Best-effort close of a NiceGUI dialog (no-op when ``None`` / test mode).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1795", + "id": "ui_mount_rationale_1795", + "community": 292, + "norm_label": "best-effort close of a nicegui dialog (no-op when ``none`` / test mode)." + }, + { + "label": "Build a ProjectCreateRequest from the wizard state and run it.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1803", + "id": "ui_mount_rationale_1803", + "community": 157, + "norm_label": "build a projectcreaterequest from the wizard state and run it." + }, + { + "label": "Build a RunCreateRequest from the wizard state and run it.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1836", + "id": "ui_mount_rationale_1836", + "community": 157, + "norm_label": "build a runcreaterequest from the wizard state and run it." + }, + { + "label": "Drive a create_* call to completion and toast the outcome. When ``wizard_st", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1877", + "id": "ui_mount_rationale_1877", + "community": 157, + "norm_label": "drive a create_* call to completion and toast the outcome. when ``wizard_st" + }, + { + "label": "Run the validator audit, swallowing failures to a WARN log.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1920", + "id": "ui_mount_rationale_1920", + "community": 117, + "norm_label": "run the validator audit, swallowing failures to a warn log." + }, + { + "label": "keyboard.py", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L1", + "id": "src_exlab_wizard_ui_keyboard_py", + "community": 166, + "norm_label": "keyboard.py" + }, + { + "label": "Shortcut", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L24", + "id": "ui_keyboard_shortcut", + "community": 166, + "norm_label": "shortcut" + }, + { + "label": "KeyCombo", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L39", + "id": "ui_keyboard_keycombo", + "community": 116, + "norm_label": "keycombo" + }, + { + "label": ".matches()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L48", + "id": "ui_keyboard_keycombo_matches", + "community": 166, + "norm_label": ".matches()" + }, + { + "label": "ShortcutBinding", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L61", + "id": "ui_keyboard_shortcutbinding", + "community": 166, + "norm_label": "shortcutbinding" + }, + { + "label": "ShortcutRegistry", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L130", + "id": "ui_keyboard_shortcutregistry", + "community": 203, + "norm_label": "shortcutregistry" + }, + { + "label": ".register()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L140", + "id": "ui_keyboard_shortcutregistry_register", + "community": 203, + "norm_label": ".register()" + }, + { + "label": ".dispatch()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L154", + "id": "ui_keyboard_shortcutregistry_dispatch", + "community": 203, + "norm_label": ".dispatch()" + }, + { + "label": "list_bindings()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L175", + "id": "ui_keyboard_list_bindings", + "community": 289, + "norm_label": "list_bindings()" + }, + { + "label": "get_binding()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L181", + "id": "ui_keyboard_get_binding", + "community": 116, + "norm_label": "get_binding()" + }, + { + "label": "is_macos()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L194", + "id": "ui_keyboard_is_macos", + "community": 166, + "norm_label": "is_macos()" + }, + { + "label": "combo_for_current_os()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L200", + "id": "ui_keyboard_combo_for_current_os", + "community": 166, + "norm_label": "combo_for_current_os()" + }, + { + "label": "resolve()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L207", + "id": "ui_keyboard_resolve", + "community": 166, + "norm_label": "resolve()" + }, + { + "label": "bind_global_shortcuts()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L224", + "id": "ui_keyboard_bind_global_shortcuts", + "community": 166, + "norm_label": "bind_global_shortcuts()" + }, + { + "label": "Keyboard-shortcut registry (Frontend Spec \u00a73.7). The bindings are intentionally", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L1", + "id": "ui_keyboard_rationale_1", + "community": 166, + "norm_label": "keyboard-shortcut registry (frontend spec \u00a73.7). the bindings are intentionally" + }, + { + "label": "Identifiers for the app-level shortcut set (Frontend \u00a73.7).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L25", + "id": "ui_keyboard_rationale_25", + "community": 166, + "norm_label": "identifiers for the app-level shortcut set (frontend \u00a73.7)." + }, + { + "label": "A modifier-and-key combination.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L40", + "id": "ui_keyboard_rationale_40", + "community": 116, + "norm_label": "a modifier-and-key combination." + }, + { + "label": "Return True if a NiceGUI ``KeyEventArguments`` matches this combo.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L49", + "id": "ui_keyboard_rationale_49", + "community": 166, + "norm_label": "return true if a nicegui ``keyeventarguments`` matches this combo." + }, + { + "label": "One row in the \u00a73.7 shortcut table.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L62", + "id": "ui_keyboard_rationale_62", + "community": 166, + "norm_label": "one row in the \u00a73.7 shortcut table." + }, + { + "label": "A populated registry of shortcut handlers. Pages instantiate one registry,", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L131", + "id": "ui_keyboard_rationale_131", + "community": 203, + "norm_label": "a populated registry of shortcut handlers. pages instantiate one registry," + }, + { + "label": "Attach a handler. Only one handler per shortcut. Raises: Va", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L141", + "id": "ui_keyboard_rationale_141", + "community": 203, + "norm_label": "attach a handler. only one handler per shortcut. raises: va" + }, + { + "label": "Invoke the handler for ``shortcut`` if registered. Returns ``True`` if", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L155", + "id": "ui_keyboard_rationale_155", + "community": 203, + "norm_label": "invoke the handler for ``shortcut`` if registered. returns ``true`` if" + }, + { + "label": "Return the canonical bindings table (Frontend \u00a73.7).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L176", + "id": "ui_keyboard_rationale_176", + "community": 289, + "norm_label": "return the canonical bindings table (frontend \u00a73.7)." + }, + { + "label": "Return the :class:`ShortcutBinding` for the given shortcut id. Raises:", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L182", + "id": "ui_keyboard_rationale_182", + "community": 116, + "norm_label": "return the :class:`shortcutbinding` for the given shortcut id. raises:" + }, + { + "label": "Return ``True`` when running on macOS (used for combo selection).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L195", + "id": "ui_keyboard_rationale_195", + "community": 166, + "norm_label": "return ``true`` when running on macos (used for combo selection)." + }, + { + "label": "Resolve the :class:`KeyCombo` for the current OS.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L201", + "id": "ui_keyboard_rationale_201", + "community": 166, + "norm_label": "resolve the :class:`keycombo` for the current os." + }, + { + "label": "Find the shortcut id matching the given key event, if any.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L215", + "id": "ui_keyboard_rationale_215", + "community": 166, + "norm_label": "find the shortcut id matching the given key event, if any." + }, + { + "label": "Install a NiceGUI keyboard listener for the registry. NiceGUI is imported l", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L225", + "id": "ui_keyboard_rationale_225", + "community": 166, + "norm_label": "install a nicegui keyboard listener for the registry. nicegui is imported l" + }, + { + "label": "file_list.py", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L1", + "id": "src_exlab_wizard_ui_components_file_list_py", + "community": 193, + "norm_label": "file_list.py" + }, + { + "label": "FileListEntry", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L38", + "id": "components_file_list_filelistentry", + "community": 130, + "norm_label": "filelistentry" + }, + { + "label": "FileListState", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L58", + "id": "components_file_list_fileliststate", + "community": 193, + "norm_label": "fileliststate" + }, + { + "label": "FileListDiff", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L68", + "id": "components_file_list_filelistdiff", + "community": 193, + "norm_label": "filelistdiff" + }, + { + "label": "diff_file_lists()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L76", + "id": "components_file_list_diff_file_lists", + "community": 130, + "norm_label": "diff_file_lists()" + }, + { + "label": "render_file_list()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L112", + "id": "components_file_list_render_file_list", + "community": 193, + "norm_label": "render_file_list()" + }, + { + "label": "_render_header()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L155", + "id": "components_file_list_render_header", + "community": 193, + "norm_label": "_render_header()" + }, + { + "label": "_render_row()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L180", + "id": "components_file_list_render_row", + "community": 193, + "norm_label": "_render_row()" + }, + { + "label": "Live file-list component for the rebuilt main window. GUI/Orchestrator Redesign", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L1", + "id": "components_file_list_rationale_1", + "community": 193, + "norm_label": "live file-list component for the rebuilt main window. gui/orchestrator redesign" + }, + { + "label": "One row in the centre-pane file list. ``keep_local`` mirrors the file's ``s", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L39", + "id": "components_file_list_rationale_39", + "community": 130, + "norm_label": "one row in the centre-pane file list. ``keep_local`` mirrors the file's ``s" + }, + { + "label": "Mutable state for the file list, consumed by the renderer.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L59", + "id": "components_file_list_rationale_59", + "community": 193, + "norm_label": "mutable state for the file list, consumed by the renderer." + }, + { + "label": "Result of comparing two successive folder-list snapshots.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L69", + "id": "components_file_list_rationale_69", + "community": 193, + "norm_label": "result of comparing two successive folder-list snapshots." + }, + { + "label": "Return additions / removals / modifications between two snapshots. Pure fun", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L80", + "id": "components_file_list_rationale_80", + "community": 130, + "norm_label": "return additions / removals / modifications between two snapshots. pure fun" + }, + { + "label": "Render the centre-pane file list. Pure render function. Double-clicking a f", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L118", + "id": "components_file_list_rationale_118", + "community": 193, + "norm_label": "render the centre-pane file list. pure render function. double-clicking a f" + }, + { + "label": "Render the file-list column header row (Name / Size / Modified / Status).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L156", + "id": "components_file_list_rationale_156", + "community": 193, + "norm_label": "render the file-list column header row (name / size / modified / status)." + }, + { + "label": "test_connection_panel.py", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L1", + "id": "src_exlab_wizard_ui_components_test_connection_panel_py", + "community": 226, + "norm_label": "test_connection_panel.py" + }, + { + "label": "TestConnectionResult", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L29", + "id": "components_test_connection_panel_testconnectionresult", + "community": 226, + "norm_label": "testconnectionresult" + }, + { + "label": "panel_props()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L38", + "id": "components_test_connection_panel_panel_props", + "community": 226, + "norm_label": "panel_props()" + }, + { + "label": "test_connection_panel()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L69", + "id": "components_test_connection_panel_test_connection_panel", + "community": 226, + "norm_label": "test_connection_panel()" + }, + { + "label": "Test-connection result panel (Frontend Spec \u00a77.4.2). A persistent inline panel", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L1", + "id": "components_test_connection_panel_rationale_1", + "community": 226, + "norm_label": "test-connection result panel (frontend spec \u00a77.4.2). a persistent inline panel" + }, + { + "label": "One result rendered in the panel.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L30", + "id": "components_test_connection_panel_rationale_30", + "community": 226, + "norm_label": "one result rendered in the panel." + }, + { + "label": "Compute the rendered props for the panel. Returns a dict suitable for asser", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L39", + "id": "components_test_connection_panel_rationale_39", + "community": 226, + "norm_label": "compute the rendered props for the panel. returns a dict suitable for asser" + }, + { + "label": "Build the inline result panel. Returns a NiceGUI element, or the props dict", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L74", + "id": "components_test_connection_panel_rationale_74", + "community": 226, + "norm_label": "build the inline result panel. returns a nicegui element, or the props dict" + }, + { + "label": "override_badge.py", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/override_badge.py", + "source_location": "L1", + "id": "src_exlab_wizard_ui_components_override_badge_py", + "community": 293, + "norm_label": "override_badge.py" + }, + { + "label": "override_badge_props()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/override_badge.py", + "source_location": "L20", + "id": "components_override_badge_override_badge_props", + "community": 293, + "norm_label": "override_badge_props()" + }, + { + "label": "override_badge()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/override_badge.py", + "source_location": "L38", + "id": "components_override_badge_override_badge", + "community": 293, + "norm_label": "override_badge()" + }, + { + "label": "Override pill (Frontend Spec \u00a73.6.1, \u00a711). A pill that appears next to a run's", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/override_badge.py", + "source_location": "L1", + "id": "components_override_badge_rationale_1", + "community": 293, + "norm_label": "override pill (frontend spec \u00a73.6.1, \u00a711). a pill that appears next to a run's" + }, + { + "label": "Compute styling props for the override pill.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/override_badge.py", + "source_location": "L21", + "id": "components_override_badge_rationale_21", + "community": 293, + "norm_label": "compute styling props for the override pill." + }, + { + "label": "Build a clickable badge for the override state. Clicking opens the \u00a711.5 ov", + "file_type": "rationale", + "source_file": "src/exlab_wizard/ui/components/override_badge.py", + "source_location": "L39", + "id": "components_override_badge_rationale_39", + "community": 293, + "norm_label": "build a clickable badge for the override state. clicking opens the \u00a711.5 ov" + }, + { + "label": "tree.py", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L1", + "id": "src_exlab_wizard_ui_components_tree_py", + "community": 70, + "norm_label": "tree.py" + }, + { + "label": "TreeFilters", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L71", + "id": "components_tree_treefilters", + "community": 70, + "norm_label": "treefilters" + }, + { + "label": "EquipmentNode", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L81", + "id": "components_tree_equipmentnode", + "community": 70, + "norm_label": "equipmentnode" + }, + { + "label": "ProjectNode", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L90", + "id": "components_tree_projectnode", + "community": 70, + "norm_label": "projectnode" + }, + { + "label": "RunNode", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L97", + "id": "components_tree_runnode", + "community": 70, + "norm_label": "runnode" + }, + { + "label": "TreeNode", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L105", + "id": "components_tree_treenode", + "community": 70, + "norm_label": "treenode" + }, + { + "label": "_matches_search()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L117", + "id": "components_tree_matches_search", + "community": 70, + "norm_label": "_matches_search()" + }, + { + "label": "filter_project()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L125", + "id": "components_tree_filter_project", + "community": 70, + "norm_label": "filter_project()" + }, + { + "label": "filter_run()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L139", + "id": "components_tree_filter_run", + "community": 70, + "norm_label": "filter_run()" + }, + { + "label": "build_nodes()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L148", + "id": "components_tree_build_nodes", + "community": 70, + "norm_label": "build_nodes()" + }, + { + "label": "_sync_icon_url()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L235", + "id": "components_tree_sync_icon_url", + "community": 70, + "norm_label": "_sync_icon_url()" + }, + { + "label": "to_nicegui_nodes()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L251", + "id": "components_tree_to_nicegui_nodes", + "community": 70, + "norm_label": "to_nicegui_nodes()" + }, + { + "label": "_ctx_emit()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L297", + "id": "components_tree_ctx_emit", + "community": 70, + "norm_label": "_ctx_emit()" + }, + { + "label": "_tree_header_slot()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L312", + "id": "components_tree_tree_header_slot", + "community": 70, + "norm_label": "_tree_header_slot()" + }, + { + "label": "build_tree()", + "file_type": "code", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L363", + "id": "components_tree_build_tree", + "community": 70, + "norm_label": "build_tree()" + }, + { + "label": "Project / equipment tree (Frontend Spec \u00a73.5). Renders the ``//``; returns None on 404. ``uid_or_short_id``", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L126", + "id": "lims_client_rationale_126", + "community": 76, + "norm_label": "``get /api/v1/projects/``; returns none on 404. ``uid_or_short_id``" + }, + { + "label": "``GET /api/v1/me``; returns the current operator's row.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L140", + "id": "lims_client_rationale_140", + "community": 76, + "norm_label": "``get /api/v1/me``; returns the current operator's row." + }, + { + "label": "Return a ``HealthStatus`` snapshot. Backend Spec \u00a77.2.3. Calls ``GET /a", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L145", + "id": "lims_client_rationale_145", + "community": 76, + "norm_label": "return a ``healthstatus`` snapshot. backend spec \u00a77.2.3. calls ``get /a" + }, + { + "label": "Close the underlying ``httpx.AsyncClient``. Idempotent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L168", + "id": "lims_client_rationale_168", + "community": 76, + "norm_label": "close the underlying ``httpx.asyncclient``. idempotent." + }, + { + "label": "Issue one request; on 401 retry once after a fresh ``login``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L181", + "id": "lims_client_rationale_181", + "community": 76, + "norm_label": "issue one request; on 401 retry once after a fresh ``login``." + }, + { + "label": "Decode one ``/projects`` row into LIMSProject. Adds a fresh UTC ``fetch", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L191", + "id": "lims_client_rationale_191", + "community": 497, + "norm_label": "decode one ``/projects`` row into limsproject. adds a fresh utc ``fetch" + }, + { + "label": "cache.py", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L1", + "id": "src_exlab_wizard_lims_cache_py", + "community": 202, + "norm_label": "cache.py" + }, + { + "label": "LIMSCache", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L102", + "id": "lims_cache_limscache", + "community": 100, + "norm_label": "limscache" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L110", + "id": "lims_cache_limscache_init", + "community": 100, + "norm_label": ".__init__()" + }, + { + "label": ".close()", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L123", + "id": "lims_cache_limscache_close", + "community": 100, + "norm_label": ".close()" + }, + { + "label": ".upsert_many()", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L129", + "id": "lims_cache_limscache_upsert_many", + "community": 202, + "norm_label": ".upsert_many()" + }, + { + "label": ".list_projects()", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L156", + "id": "lims_cache_limscache_list_projects", + "community": 202, + "norm_label": ".list_projects()" + }, + { + "label": ".get_project()", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L171", + "id": "lims_cache_limscache_get_project", + "community": 202, + "norm_label": ".get_project()" + }, + { + "label": ".is_fresh()", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L180", + "id": "lims_cache_limscache_is_fresh", + "community": 202, + "norm_label": ".is_fresh()" + }, + { + "label": "._require_conn()", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L202", + "id": "lims_cache_limscache_require_conn", + "community": 202, + "norm_label": "._require_conn()" + }, + { + "label": "_row_to_project()", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L209", + "id": "lims_cache_row_to_project", + "community": 202, + "norm_label": "_row_to_project()" + }, + { + "label": "aiosqlite-backed cache for LIMS project rows. Backend Spec \u00a77.2.4. The cache li", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L1", + "id": "lims_cache_rationale_1", + "community": 202, + "norm_label": "aiosqlite-backed cache for lims project rows. backend spec \u00a77.2.4. the cache li" + }, + { + "label": "SQLite TTL cache for LIMS project rows. Backend Spec \u00a77.2.4. The cache is a", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L103", + "id": "lims_cache_rationale_103", + "community": 100, + "norm_label": "sqlite ttl cache for lims project rows. backend spec \u00a77.2.4. the cache is a" + }, + { + "label": "Create the table and index if absent. Idempotent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L116", + "id": "lims_cache_rationale_116", + "community": 100, + "norm_label": "create the table and index if absent. idempotent." + }, + { + "label": "Close the underlying aiosqlite connection.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L124", + "id": "lims_cache_rationale_124", + "community": 100, + "norm_label": "close the underlying aiosqlite connection." + }, + { + "label": "Insert or update every row. ``last_refreshed`` is taken from each ``LIMS", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L130", + "id": "lims_cache_rationale_130", + "community": 202, + "norm_label": "insert or update every row. ``last_refreshed`` is taken from each ``lims" + }, + { + "label": "Return every cached project for ``endpoint``, optionally filtered by ``s", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L159", + "id": "lims_cache_rationale_159", + "community": 202, + "norm_label": "return every cached project for ``endpoint``, optionally filtered by ``s" + }, + { + "label": "Return one project by uid or short_id, or None if absent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L172", + "id": "lims_cache_rationale_172", + "community": 202, + "norm_label": "return one project by uid or short_id, or none if absent." + }, + { + "label": "True iff the most recent ``last_refreshed`` is within ``ttl_hours`` of t", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L181", + "id": "lims_cache_rationale_181", + "community": 202, + "norm_label": "true iff the most recent ``last_refreshed`` is within ``ttl_hours`` of t" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_lims_init_py", + "community": 325, + "norm_label": "__init__.py" + }, + { + "label": "schemas.py", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L1", + "id": "src_exlab_wizard_lims_schemas_py", + "community": 76, + "norm_label": "schemas.py" + }, + { + "label": "LIMSProject", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L36", + "id": "lims_schemas_limsproject", + "community": 113, + "norm_label": "limsproject" + }, + { + "label": "Struct", + "file_type": "code", + "source_file": "", + "source_location": "", + "id": "struct", + "community": 0, + "norm_label": "struct" + }, + { + "label": "LIMSUser", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L60", + "id": "lims_schemas_limsuser", + "community": 76, + "norm_label": "limsuser" + }, + { + "label": "HealthStatus", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L79", + "id": "lims_schemas_healthstatus", + "community": 76, + "norm_label": "healthstatus" + }, + { + "label": "msgspec.Struct types for the LIMS read-only client. Backend Spec \u00a77.2. These ty", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L1", + "id": "lims_schemas_rationale_1", + "community": 76, + "norm_label": "msgspec.struct types for the lims read-only client. backend spec \u00a77.2. these ty" + }, + { + "label": "One LIMS project row. Backend Spec \u00a77.2.3. The ``metadata`` field is a JSON", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L41", + "id": "lims_schemas_rationale_41", + "community": 113, + "norm_label": "one lims project row. backend spec \u00a77.2.3. the ``metadata`` field is a json" + }, + { + "label": "One LIMS user row. Backend Spec \u00a77.2.3. Mirrors the upstream ``safe_user``", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L66", + "id": "lims_schemas_rationale_66", + "community": 76, + "norm_label": "one lims user row. backend spec \u00a77.2.3. mirrors the upstream ``safe_user``" + }, + { + "label": "Result of ``LIMSClient.health_check()``. Backend Spec \u00a77.2.3. ``ok`` is Tru", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L80", + "id": "lims_schemas_rationale_80", + "community": 76, + "norm_label": "result of ``limsclient.health_check()``. backend spec \u00a77.2.3. ``ok`` is tru" + }, + { + "label": "catalogue.py", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L1", + "id": "src_exlab_wizard_lims_catalogue_py", + "community": 113, + "norm_label": "catalogue.py" + }, + { + "label": "OfflineCatalogue", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L51", + "id": "lims_catalogue_offlinecatalogue", + "community": 113, + "norm_label": "offlinecatalogue" + }, + { + "label": "read_catalogue()", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L72", + "id": "lims_catalogue_read_catalogue", + "community": 113, + "norm_label": "read_catalogue()" + }, + { + "label": "write_catalogue()", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L135", + "id": "lims_catalogue_write_catalogue", + "community": 113, + "norm_label": "write_catalogue()" + }, + { + "label": "_project_to_dict()", + "file_type": "code", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L155", + "id": "lims_catalogue_project_to_dict", + "community": 113, + "norm_label": "_project_to_dict()" + }, + { + "label": "Offline LIMS project catalogue read/write. Backend Spec \u00a77.2.9. A catalogue is", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L1", + "id": "lims_catalogue_rationale_1", + "community": 113, + "norm_label": "offline lims project catalogue read/write. backend spec \u00a77.2.9. a catalogue is" + }, + { + "label": "Decoded offline catalogue. Backend Spec \u00a77.2.9.1. ``schema_version`` is pin", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L52", + "id": "lims_catalogue_rationale_52", + "community": 113, + "norm_label": "decoded offline catalogue. backend spec \u00a77.2.9.1. ``schema_version`` is pin" + }, + { + "label": "Read and validate the catalogue file. Returns ``None`` (and logs a WARN) wh", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L73", + "id": "lims_catalogue_rationale_73", + "community": 113, + "norm_label": "read and validate the catalogue file. returns ``none`` (and logs a warn) wh" + }, + { + "label": "Atomically write ``catalogue`` to ``path``. Backend Spec \u00a77.2.9.2. Protocol", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L136", + "id": "lims_catalogue_rationale_136", + "community": 113, + "norm_label": "atomically write ``catalogue`` to ``path``. backend spec \u00a77.2.9.2. protocol" + }, + { + "label": "Re-emit a LIMSProject as a serializable dict.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L156", + "id": "lims_catalogue_rationale_156", + "community": 113, + "norm_label": "re-emit a limsproject as a serializable dict." + }, + { + "label": "findings.py", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L1", + "id": "src_exlab_wizard_validator_findings_py", + "community": 6, + "norm_label": "findings.py" + }, + { + "label": "Finding", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L41", + "id": "validator_findings_finding", + "community": 6, + "norm_label": "finding" + }, + { + "label": ".to_dict()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L90", + "id": "validator_findings_finding_to_dict", + "community": 6, + "norm_label": ".to_dict()" + }, + { + "label": "from_dict()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L101", + "id": "validator_findings_from_dict", + "community": 6, + "norm_label": "from_dict()" + }, + { + "label": "Validator finding dataclass and serialization helpers. Backend Spec \u00a711.8 (find", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L1", + "id": "validator_findings_rationale_1", + "community": 6, + "norm_label": "validator finding dataclass and serialization helpers. backend spec \u00a711.8 (find" + }, + { + "label": "One validator finding. Backend Spec \u00a78.1, \u00a711.8. Frozen so findings can be", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L42", + "id": "validator_findings_rationale_42", + "community": 6, + "norm_label": "one validator finding. backend spec \u00a78.1, \u00a711.8. frozen so findings can be" + }, + { + "label": "Return the \u00a711.8 JSON shape for this finding. The dictionary is suitabl", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L91", + "id": "validator_findings_rationale_91", + "community": 6, + "norm_label": "return the \u00a711.8 json shape for this finding. the dictionary is suitabl" + }, + { + "label": "Reconstruct a :class:`Finding` from its \u00a711.8 JSON shape. The inverse o", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L102", + "id": "validator_findings_rationale_102", + "community": 498, + "norm_label": "reconstruct a :class:`finding` from its \u00a711.8 json shape. the inverse o" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_validator_init_py", + "community": 326, + "norm_label": "__init__.py" + }, + { + "label": "rules.py", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L1", + "id": "src_exlab_wizard_validator_rules_py", + "community": 186, + "norm_label": "rules.py" + }, + { + "label": "check_unresolved_placeholder()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L83", + "id": "validator_rules_check_unresolved_placeholder", + "community": 121, + "norm_label": "check_unresolved_placeholder()" + }, + { + "label": "_scan_for_placeholders()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L122", + "id": "validator_rules_scan_for_placeholders", + "community": 186, + "norm_label": "_scan_for_placeholders()" + }, + { + "label": "check_illegal_filesystem_character()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L185", + "id": "validator_rules_check_illegal_filesystem_character", + "community": 121, + "norm_label": "check_illegal_filesystem_character()" + }, + { + "label": "_scan_for_illegal_chars()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L210", + "id": "validator_rules_scan_for_illegal_chars", + "community": 186, + "norm_label": "_scan_for_illegal_chars()" + }, + { + "label": "check_reserved_filesystem_name()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L269", + "id": "validator_rules_check_reserved_filesystem_name", + "community": 186, + "norm_label": "check_reserved_filesystem_name()" + }, + { + "label": "check_unsafe_project_name()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L305", + "id": "validator_rules_check_unsafe_project_name", + "community": 186, + "norm_label": "check_unsafe_project_name()" + }, + { + "label": "check_mode_prefix_mismatch()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L339", + "id": "validator_rules_check_mode_prefix_mismatch", + "community": 209, + "norm_label": "check_mode_prefix_mismatch()" + }, + { + "label": "check_orphan()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L429", + "id": "validator_rules_check_orphan", + "community": 268, + "norm_label": "check_orphan()" + }, + { + "label": "check_missing_required_field()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L465", + "id": "validator_rules_check_missing_required_field", + "community": 227, + "norm_label": "check_missing_required_field()" + }, + { + "label": "_lookup_field_value()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L503", + "id": "validator_rules_lookup_field_value", + "community": 227, + "norm_label": "_lookup_field_value()" + }, + { + "label": "check_malformed_yaml_front_matter()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L520", + "id": "validator_rules_check_malformed_yaml_front_matter", + "community": 253, + "norm_label": "check_malformed_yaml_front_matter()" + }, + { + "label": "Validator rule functions. Backend Spec \u00a78.1. This module is a pure-function lib", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L1", + "id": "validator_rules_rationale_1", + "community": 186, + "norm_label": "validator rule functions. backend spec \u00a78.1. this module is a pure-function lib" + }, + { + "label": "\u00a78.1.1: detect angle-bracket and Jinja placeholder tokens. Hard-tier. Uses", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L89", + "id": "validator_rules_rationale_89", + "community": 121, + "norm_label": "\u00a78.1.1: detect angle-bracket and jinja placeholder tokens. hard-tier. uses" + }, + { + "label": "Return one finding per placeholder match in ``text``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L127", + "id": "validator_rules_rationale_127", + "community": 186, + "norm_label": "return one finding per placeholder match in ``text``." + }, + { + "label": "\u00a78.1.2: detect Windows-illegal characters in any segment / file name. Illeg", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L190", + "id": "validator_rules_rationale_190", + "community": 121, + "norm_label": "\u00a78.1.2: detect windows-illegal characters in any segment / file name. illeg" + }, + { + "label": "Return one finding per illegal character / trailing-rule violation in ``name``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L211", + "id": "validator_rules_rationale_211", + "community": 186, + "norm_label": "return one finding per illegal character / trailing-rule violation in ``name``." + }, + { + "label": "\u00a78.1.2: detect Windows reserved names (``CON``, ``PRN``, ``AUX``, ``NUL``, `", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L270", + "id": "validator_rules_rationale_270", + "community": 186, + "norm_label": "\u00a78.1.2: detect windows reserved names (``con``, ``prn``, ``aux``, ``nul``, `" + }, + { + "label": "\u00a73.2: flag a project directory whose name is not a safe path segment. The p", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L306", + "id": "validator_rules_rationale_306", + "community": 186, + "norm_label": "\u00a73.2: flag a project directory whose name is not a safe path segment. the p" + }, + { + "label": "\u00a78.1.3: detect three-way disagreement between ``run_kind``, leaf prefix, and", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L345", + "id": "validator_rules_rationale_345", + "community": 209, + "norm_label": "\u00a78.1.3: detect three-way disagreement between ``run_kind``, leaf prefix, and" + }, + { + "label": "\u00a78.1.4: detect missing ``creation.json`` at project / run level (NOT equipme", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L430", + "id": "validator_rules_rationale_430", + "community": 268, + "norm_label": "\u00a78.1.4: detect missing ``creation.json`` at project / run level (not equipme" + }, + { + "label": "\u00a78.1.5: detect required README fields that are absent or empty. Soft-tier.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L470", + "id": "validator_rules_rationale_470", + "community": 227, + "norm_label": "\u00a78.1.5: detect required readme fields that are absent or empty. soft-tier." + }, + { + "label": "Return the first non-missing value for ``field_id`` across layers. A missin", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L504", + "id": "validator_rules_rationale_504", + "community": 227, + "norm_label": "return the first non-missing value for ``field_id`` across layers. a missin" + }, + { + "label": "\u00a78.1: detect malformed YAML front matter at the head of a Markdown file.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L521", + "id": "validator_rules_rationale_521", + "community": 253, + "norm_label": "\u00a78.1: detect malformed yaml front matter at the head of a markdown file." + }, + { + "label": "engine.py", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1", + "id": "src_exlab_wizard_validator_engine_py", + "community": 14, + "norm_label": "engine.py" + }, + { + "label": "CreationValidationInput", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L114", + "id": "validator_engine_creationvalidationinput", + "community": 6, + "norm_label": "creationvalidationinput" + }, + { + "label": "_split_path_segments()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L162", + "id": "validator_engine_split_path_segments", + "community": 19, + "norm_label": "_split_path_segments()" + }, + { + "label": "AuditScopeEquipment", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L193", + "id": "validator_engine_auditscopeequipment", + "community": 14, + "norm_label": "auditscopeequipment" + }, + { + "label": "TypedDict", + "file_type": "code", + "source_file": "", + "source_location": "", + "id": "typeddict", + "community": 14, + "norm_label": "typeddict" + }, + { + "label": "AuditScopeProject", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L206", + "id": "validator_engine_auditscopeproject", + "community": 14, + "norm_label": "auditscopeproject" + }, + { + "label": "AuditScopeAll", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L217", + "id": "validator_engine_auditscopeall", + "community": 14, + "norm_label": "auditscopeall" + }, + { + "label": "Validator", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L236", + "id": "validator_engine_validator", + "community": 14, + "norm_label": "validator" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L251", + "id": "validator_engine_validator_init", + "community": 135, + "norm_label": ".__init__()" + }, + { + "label": "config()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L267", + "id": "validator_engine_config", + "community": 14, + "norm_label": "config()" + }, + { + "label": ".reconfigure()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L275", + "id": "validator_engine_validator_reconfigure", + "community": 120, + "norm_label": ".reconfigure()" + }, + { + "label": ".validate_creation()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L303", + "id": "validator_engine_validator_validate_creation", + "community": 14, + "norm_label": ".validate_creation()" + }, + { + "label": "_materialise()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L398", + "id": "validator_engine_materialise", + "community": 14, + "norm_label": "_materialise()" + }, + { + "label": "from_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L428", + "id": "validator_engine_from_config", + "community": 14, + "norm_label": "from_config()" + }, + { + "label": ".audit()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L451", + "id": "validator_engine_validator_audit", + "community": 14, + "norm_label": ".audit()" + }, + { + "label": ".query_problems()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L482", + "id": "validator_engine_validator_query_problems", + "community": 14, + "norm_label": ".query_problems()" + }, + { + "label": "._resolve_scope_roots()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L494", + "id": "validator_engine_validator_resolve_scope_roots", + "community": 14, + "norm_label": "._resolve_scope_roots()" + }, + { + "label": "._walk_root()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L513", + "id": "validator_engine_validator_walk_root", + "community": 14, + "norm_label": "._walk_root()" + }, + { + "label": "._walk_dir()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L532", + "id": "validator_engine_validator_walk_dir", + "community": 14, + "norm_label": "._walk_dir()" + }, + { + "label": "._classify_level()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L602", + "id": "validator_engine_validator_classify_level", + "community": 14, + "norm_label": "._classify_level()" + }, + { + "label": "._compute_run_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L655", + "id": "validator_engine_validator_compute_run_path", + "community": 14, + "norm_label": "._compute_run_path()" + }, + { + "label": "._apply_directory_rules()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L697", + "id": "validator_engine_validator_apply_directory_rules", + "community": 14, + "norm_label": "._apply_directory_rules()" + }, + { + "label": "._extend_findings()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L787", + "id": "validator_engine_validator_extend_findings", + "community": 14, + "norm_label": "._extend_findings()" + }, + { + "label": "._apply_missing_required_field_rule()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L814", + "id": "validator_engine_validator_apply_missing_required_field_rule", + "community": 14, + "norm_label": "._apply_missing_required_field_rule()" + }, + { + "label": "._apply_directory_name_rules()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L862", + "id": "validator_engine_validator_apply_directory_name_rules", + "community": 14, + "norm_label": "._apply_directory_name_rules()" + }, + { + "label": "._apply_file_rules()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L905", + "id": "validator_engine_validator_apply_file_rules", + "community": 14, + "norm_label": "._apply_file_rules()" + }, + { + "label": "._content_scan_eligible()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L978", + "id": "validator_engine_validator_content_scan_eligible", + "community": 14, + "norm_label": "._content_scan_eligible()" + }, + { + "label": "._read_text_for_scan()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L996", + "id": "validator_engine_validator_read_text_for_scan", + "community": 14, + "norm_label": "._read_text_for_scan()" + }, + { + "label": "._read_creation_for()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1014", + "id": "validator_engine_validator_read_creation_for", + "community": 14, + "norm_label": "._read_creation_for()" + }, + { + "label": "_extract_overrides_and_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1041", + "id": "validator_engine_extract_overrides_and_sync", + "community": 14, + "norm_label": "_extract_overrides_and_sync()" + }, + { + "label": "_materialise_audit()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1061", + "id": "validator_engine_materialise_audit", + "community": 14, + "norm_label": "_materialise_audit()" + }, + { + "label": "_tier_rank()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1112", + "id": "validator_engine_tier_rank", + "community": 14, + "norm_label": "_tier_rank()" + }, + { + "label": "_finding_sort_key()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1126", + "id": "validator_engine_finding_sort_key", + "community": 14, + "norm_label": "_finding_sort_key()" + }, + { + "label": "_level_for_orphan()", + "file_type": "code", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1143", + "id": "validator_engine_level_for_orphan", + "community": 14, + "norm_label": "_level_for_orphan()" + }, + { + "label": "Validator engine. Backend Spec \u00a74.4.4, \u00a78.1, \u00a711.7, \u00a711.8. The engine is the si", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1", + "id": "validator_engine_rationale_1", + "community": 14, + "norm_label": "validator engine. backend spec \u00a74.4.4, \u00a78.1, \u00a711.7, \u00a711.8. the engine is the si" + }, + { + "label": "Input bundle for creation-time validation. Backend Spec \u00a78.1, \u00a711.8. All fi", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L115", + "id": "validator_engine_rationale_115", + "community": 6, + "norm_label": "input bundle for creation-time validation. backend spec \u00a78.1, \u00a711.8. all fi" + }, + { + "label": "Split ``proposed_path`` into per-segment names. Accepts both POSIX and Wind", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L163", + "id": "validator_engine_rationale_163", + "community": 19, + "norm_label": "split ``proposed_path`` into per-segment names. accepts both posix and wind" + }, + { + "label": "Audit one equipment subtree. Spec \u00a711.8. The ``value`` is the equipment ID", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L194", + "id": "validator_engine_rationale_194", + "community": 14, + "norm_label": "audit one equipment subtree. spec \u00a711.8. the ``value`` is the equipment id" + }, + { + "label": "Audit one ``/`` subtree. Spec \u00a711.8. The ``value`` is a", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L207", + "id": "validator_engine_rationale_207", + "community": 14, + "norm_label": "audit one ``/`` subtree. spec \u00a711.8. the ``value`` is a" + }, + { + "label": "Audit every configured equipment + staging when orchestrator on. Spec \u00a711.8", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L218", + "id": "validator_engine_rationale_218", + "community": 14, + "norm_label": "audit every configured equipment + staging when orchestrator on. spec \u00a711.8" + }, + { + "label": "Run \u00a78.1 rules in creation-time and audit modes. Backend Spec \u00a711.8. The co", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L237", + "id": "validator_engine_rationale_237", + "community": 14, + "norm_label": "run \u00a78.1 rules in creation-time and audit modes. backend spec \u00a711.8. the co" + }, + { + "label": "The :class:`ValidatorConfig` this engine instance was built with. Expos", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L268", + "id": "validator_engine_rationale_268", + "community": 499, + "norm_label": "the :class:`validatorconfig` this engine instance was built with. expos" + }, + { + "label": "Re-seed the config + audit-mode roots in place (no tray relaunch). Mirr", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L282", + "id": "validator_engine_rationale_282", + "community": 120, + "norm_label": "re-seed the config + audit-mode roots in place (no tray relaunch). mirr" + }, + { + "label": "Run every \u00a78.1 creation-time rule against ``params``. Returns a flat li", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L304", + "id": "validator_engine_rationale_304", + "community": 14, + "norm_label": "run every \u00a78.1 creation-time rule against ``params``. returns a flat li" + }, + { + "label": "Wrap a rule-helper dict in a :class:`Finding`. The \u00a78.1 rule helpers re", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L399", + "id": "validator_engine_rationale_399", + "community": 500, + "norm_label": "wrap a rule-helper dict in a :class:`finding`. the \u00a78.1 rule helpers re" + }, + { + "label": "Build a :class:`Validator` from the full ``config.yaml`` model. Project", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L429", + "id": "validator_engine_rationale_429", + "community": 501, + "norm_label": "build a :class:`validator` from the full ``config.yaml`` model. project" + }, + { + "label": "Walk a directory subtree and return all findings. Backend Spec \u00a711.8. U", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L452", + "id": "validator_engine_rationale_452", + "community": 14, + "norm_label": "walk a directory subtree and return all findings. backend spec \u00a711.8. u" + }, + { + "label": "Public read-only alias for :meth:`audit`. Backend Spec \u00a711.8. Read-only", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L483", + "id": "validator_engine_rationale_483", + "community": 14, + "norm_label": "public read-only alias for :meth:`audit`. backend spec \u00a711.8. read-only" + }, + { + "label": "Map an :class:`AuditScope` onto the directory roots to walk.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L495", + "id": "validator_engine_rationale_495", + "community": 14, + "norm_label": "map an :class:`auditscope` onto the directory roots to walk." + }, + { + "label": "Walk a single subtree rooted at ``root`` (depth-first). Returns a flat", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L514", + "id": "validator_engine_rationale_514", + "community": 14, + "norm_label": "walk a single subtree rooted at ``root`` (depth-first). returns a flat" + }, + { + "label": "Recursive ``os.scandir`` walk; apply rules at every level. Per-director", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L539", + "id": "validator_engine_rationale_539", + "community": 14, + "norm_label": "recursive ``os.scandir`` walk; apply rules at every level. per-director" + }, + { + "label": "Classify a directory's role in an equipment subtree. Equipment root is", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L607", + "id": "validator_engine_rationale_607", + "community": 14, + "norm_label": "classify a directory's role in an equipment subtree. equipment root is" + }, + { + "label": "Return the \u00a711.8 ``run_path`` for findings at ``directory``. Per spec,", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L661", + "id": "validator_engine_rationale_661", + "community": 14, + "norm_label": "return the \u00a711.8 ``run_path`` for findings at ``directory``. per spec," + }, + { + "label": "Apply rules whose scope is the run-level directory itself. Three rule f", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L707", + "id": "validator_engine_rationale_707", + "community": 14, + "norm_label": "apply rules whose scope is the run-level directory itself. three rule f" + }, + { + "label": "Materialise raw rule output into :class:`Finding` instances. Reduces au", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L797", + "id": "validator_engine_rationale_797", + "community": 14, + "norm_label": "materialise raw rule output into :class:`finding` instances. reduces au" + }, + { + "label": "Read ``readme_fields.json`` and call ``check_missing_required_field``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L824", + "id": "validator_engine_rationale_824", + "community": 14, + "norm_label": "read ``readme_fields.json`` and call ``check_missing_required_field``." + }, + { + "label": "Apply name-level rules (placeholder + illegal char) to a directory. Res", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L871", + "id": "validator_engine_rationale_871", + "community": 14, + "norm_label": "apply name-level rules (placeholder + illegal char) to a directory. res" + }, + { + "label": "Apply file-name + file-content rules to a single file. Filename rules (", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L914", + "id": "validator_engine_rationale_914", + "community": 14, + "norm_label": "apply file-name + file-content rules to a single file. filename rules (" + }, + { + "label": "Return True iff the file passes the size + extension gates. Spec \u00a78.1.1", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L979", + "id": "validator_engine_rationale_979", + "community": 14, + "norm_label": "return true iff the file passes the size + extension gates. spec \u00a78.1.1" + }, + { + "label": "Read text bytes for placeholder scan, applying the binary sniff. Return", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L997", + "id": "validator_engine_rationale_997", + "community": 14, + "norm_label": "read text bytes for placeholder scan, applying the binary sniff. return" + }, + { + "label": "Read ``/.exlab-wizard/creation.json`` if present. Returns ``", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1017", + "id": "validator_engine_rationale_1017", + "community": 14, + "norm_label": "read ``/.exlab-wizard/creation.json`` if present. returns ``" + }, + { + "label": "Return ``(active_problem_classes, sync_status)`` for a payload. ``activ", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1044", + "id": "validator_engine_rationale_1044", + "community": 502, + "norm_label": "return ``(active_problem_classes, sync_status)`` for a payload. ``activ" + }, + { + "label": "Audit-mode counterpart of :meth:`_materialise`. Computes ``override_act", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1069", + "id": "validator_engine_rationale_1069", + "community": 503, + "norm_label": "audit-mode counterpart of :meth:`_materialise`. computes ``override_act" + }, + { + "label": "Hard tier sorts before soft tier (\u00a711.8). Returns 0 for ``\"hard\"`` and 1 fo", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1113", + "id": "validator_engine_rationale_1113", + "community": 14, + "norm_label": "hard tier sorts before soft tier (\u00a711.8). returns 0 for ``\"hard\"`` and 1 fo" + }, + { + "label": "Sort key for the \u00a711.8 finding list ordering. Tuple: ``(tier_rank, rule, of", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1127", + "id": "validator_engine_rationale_1127", + "community": 14, + "norm_label": "sort key for the \u00a711.8 finding list ordering. tuple: ``(tier_rank, rule, of" + }, + { + "label": "Translate the engine-level enum into the rules.check_orphan input. The orph", + "file_type": "rationale", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1144", + "id": "validator_engine_rationale_1144", + "community": 14, + "norm_label": "translate the engine-level enum into the rules.check_orphan input. the orph" + }, + { + "label": "equipment.py", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L1", + "id": "src_exlab_wizard_cache_equipment_py", + "community": 194, + "norm_label": "equipment.py" + }, + { + "label": "EquipmentCacheWriter", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L63", + "id": "cache_equipment_equipmentcachewriter", + "community": 25, + "norm_label": "equipmentcachewriter" + }, + { + "label": ".write_equipment()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L73", + "id": "cache_equipment_equipmentcachewriter_write_equipment", + "community": 25, + "norm_label": ".write_equipment()" + }, + { + "label": ".read_equipment()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L91", + "id": "cache_equipment_equipmentcachewriter_read_equipment", + "community": 25, + "norm_label": ".read_equipment()" + }, + { + "label": ".write_test_runs_marker()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L106", + "id": "cache_equipment_equipmentcachewriter_write_test_runs_marker", + "community": 25, + "norm_label": ".write_test_runs_marker()" + }, + { + "label": "_write_equipment_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L127", + "id": "cache_equipment_write_equipment_sync", + "community": 194, + "norm_label": "_write_equipment_sync()" + }, + { + "label": "_read_equipment_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L151", + "id": "cache_equipment_read_equipment_sync", + "community": 194, + "norm_label": "_read_equipment_sync()" + }, + { + "label": ".read_test_runs_marker()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L154", + "id": "cache_equipment_equipmentcachewriter_read_test_runs_marker", + "community": 25, + "norm_label": ".read_test_runs_marker()" + }, + { + "label": "_read_test_runs_marker_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L163", + "id": "cache_equipment_read_test_runs_marker_sync", + "community": 194, + "norm_label": "_read_test_runs_marker_sync()" + }, + { + "label": "_write_test_runs_marker_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L167", + "id": "cache_equipment_write_test_runs_marker_sync", + "community": 194, + "norm_label": "_write_test_runs_marker_sync()" + }, + { + "label": "_read_existing_first_seen_at()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L183", + "id": "cache_equipment_read_existing_first_seen_at", + "community": 194, + "norm_label": "_read_existing_first_seen_at()" + }, + { + "label": "Writer for ``equipment.json`` (registry) and ``test_runs.json`` (marker). Backe", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L1", + "id": "cache_equipment_rationale_1", + "community": 194, + "norm_label": "writer for ``equipment.json`` (registry) and ``test_runs.json`` (marker). backe" + }, + { + "label": "Writer for ``equipment.json`` and ``test_runs.json``. Instances are statele", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L64", + "id": "cache_equipment_rationale_64", + "community": 25, + "norm_label": "writer for ``equipment.json`` and ``test_runs.json``. instances are statele" + }, + { + "label": "Write or rewrite the per-equipment ``equipment.json`` file. Stamping ru", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L74", + "id": "cache_equipment_rationale_74", + "community": 25, + "norm_label": "write or rewrite the per-equipment ``equipment.json`` file. stamping ru" + }, + { + "label": "Read and decode an existing ``equipment.json`` file. Uses ``msgspec.jso", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L92", + "id": "cache_equipment_rationale_92", + "community": 25, + "norm_label": "read and decode an existing ``equipment.json`` file. uses ``msgspec.jso" + }, + { + "label": "Write the ``test_runs.json`` marker file. Idempotent per \u00a711.4.2: if th", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L107", + "id": "cache_equipment_rationale_107", + "community": 25, + "norm_label": "write the ``test_runs.json`` marker file. idempotent per \u00a711.4.2: if th" + }, + { + "label": "Read and decode a ``test_runs.json`` marker file. Raises ``SchemaMajorM", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L155", + "id": "cache_equipment_rationale_155", + "community": 25, + "norm_label": "read and decode a ``test_runs.json`` marker file. raises ``schemamajorm" + }, + { + "label": "Return the on-disk ``first_seen_at`` if the file exists. Returns ``None`` w", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L184", + "id": "cache_equipment_rationale_184", + "community": 194, + "norm_label": "return the on-disk ``first_seen_at`` if the file exists. returns ``none`` w" + }, + { + "label": "sync_state_schema.py", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_schema.py", + "source_location": "L1", + "id": "src_exlab_wizard_cache_sync_state_schema_py", + "community": 0, + "norm_label": "sync_state_schema.py" + }, + { + "label": "FileSyncRecord", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_schema.py", + "source_location": "L19", + "id": "cache_sync_state_schema_filesyncrecord", + "community": 0, + "norm_label": "filesyncrecord" + }, + { + "label": "SyncStateJson", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_schema.py", + "source_location": "L55", + "id": "cache_sync_state_schema_syncstatejson", + "community": 0, + "norm_label": "syncstatejson" + }, + { + "label": "``msgspec.Struct`` types for the per-run ``sync_state.json`` cache. Operator-fr", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_schema.py", + "source_location": "L1", + "id": "cache_sync_state_schema_rationale_1", + "community": 0, + "norm_label": "``msgspec.struct`` types for the per-run ``sync_state.json`` cache. operator-fr" + }, + { + "label": "Per-file sync record stored under ``sync_state.json``'s ``files`` map. One", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_schema.py", + "source_location": "L24", + "id": "cache_sync_state_schema_rationale_24", + "community": 0, + "norm_label": "per-file sync record stored under ``sync_state.json``'s ``files`` map. one" + }, + { + "label": "``sync_state.json`` per-run sync-state record at schema version 1.0. Writte", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_schema.py", + "source_location": "L60", + "id": "cache_sync_state_schema_rationale_60", + "community": 0, + "norm_label": "``sync_state.json`` per-run sync-state record at schema version 1.0. writte" + }, + { + "label": "sync_state_writer.py", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L1", + "id": "src_exlab_wizard_cache_sync_state_writer_py", + "community": 143, + "norm_label": "sync_state_writer.py" + }, + { + "label": "_sync_state_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L52", + "id": "cache_sync_state_writer_sync_state_path", + "community": 143, + "norm_label": "_sync_state_path()" + }, + { + "label": "_ensure_cache_dir()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L57", + "id": "cache_sync_state_writer_ensure_cache_dir", + "community": 143, + "norm_label": "_ensure_cache_dir()" + }, + { + "label": "_empty_state()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L69", + "id": "cache_sync_state_writer_empty_state", + "community": 143, + "norm_label": "_empty_state()" + }, + { + "label": "SyncStateWriter", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L74", + "id": "cache_sync_state_writer_syncstatewriter", + "community": 98, + "norm_label": "syncstatewriter" + }, + { + "label": ".read()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L82", + "id": "cache_sync_state_writer_syncstatewriter_read", + "community": 200, + "norm_label": ".read()" + }, + { + "label": ".read_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L92", + "id": "cache_sync_state_writer_syncstatewriter_read_sync", + "community": 143, + "norm_label": ".read_sync()" + }, + { + "label": ".upsert_file()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L108", + "id": "cache_sync_state_writer_syncstatewriter_upsert_file", + "community": 98, + "norm_label": ".upsert_file()" + }, + { + "label": ".set_keep_local()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L147", + "id": "cache_sync_state_writer_syncstatewriter_set_keep_local", + "community": 98, + "norm_label": ".set_keep_local()" + }, + { + "label": ".mark_cleared()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L161", + "id": "cache_sync_state_writer_syncstatewriter_mark_cleared", + "community": 98, + "norm_label": ".mark_cleared()" + }, + { + "label": ".mark_cleared_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L169", + "id": "cache_sync_state_writer_syncstatewriter_mark_cleared_sync", + "community": 143, + "norm_label": ".mark_cleared_sync()" + }, + { + "label": "rollup_state()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L180", + "id": "cache_sync_state_writer_rollup_state", + "community": 143, + "norm_label": "rollup_state()" + }, + { + "label": "._read_blocking()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L202", + "id": "cache_sync_state_writer_syncstatewriter_read_blocking", + "community": 143, + "norm_label": "._read_blocking()" + }, + { + "label": "_decode_locked()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L208", + "id": "cache_sync_state_writer_decode_locked", + "community": 143, + "norm_label": "_decode_locked()" + }, + { + "label": "._upsert_file_blocking()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L217", + "id": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", + "community": 143, + "norm_label": "._upsert_file_blocking()" + }, + { + "label": "._set_keep_local_blocking()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L256", + "id": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", + "community": 143, + "norm_label": "._set_keep_local_blocking()" + }, + { + "label": "._mark_cleared_blocking()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L278", + "id": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", + "community": 143, + "norm_label": "._mark_cleared_blocking()" + }, + { + "label": "_with_file()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L289", + "id": "cache_sync_state_writer_with_file", + "community": 143, + "norm_label": "_with_file()" + }, + { + "label": "Orchestrator-only writer for ``sync_state.json``. Operator-free per-file NAS sy", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L1", + "id": "cache_sync_state_writer_rationale_1", + "community": 143, + "norm_label": "orchestrator-only writer for ``sync_state.json``. operator-free per-file nas sy" + }, + { + "label": "Return the ``sync_state.json`` path under a run directory.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L53", + "id": "cache_sync_state_writer_rationale_53", + "community": 143, + "norm_label": "return the ``sync_state.json`` path under a run directory." + }, + { + "label": "Create ``path``'s parent (the run's ``.exlab-wizard/`` cache) dir. Neither", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L58", + "id": "cache_sync_state_writer_rationale_58", + "community": 143, + "norm_label": "create ``path``'s parent (the run's ``.exlab-wizard/`` cache) dir. neither" + }, + { + "label": "Return a fresh, file-less :class:`SyncStateJson` at the current version.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L70", + "id": "cache_sync_state_writer_rationale_70", + "community": 143, + "norm_label": "return a fresh, file-less :class:`syncstatejson` at the current version." + }, + { + "label": "Writer for ``sync_state.json``. Orchestrator-mode only. All public methods", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L75", + "id": "cache_sync_state_writer_rationale_75", + "community": 98, + "norm_label": "writer for ``sync_state.json``. orchestrator-mode only. all public methods" + }, + { + "label": "Read and decode the run's ``sync_state.json``. Returns a fresh empty :c", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L83", + "id": "cache_sync_state_writer_rationale_83", + "community": 200, + "norm_label": "read and decode the run's ``sync_state.json``. returns a fresh empty :c" + }, + { + "label": "Blocking variant of :meth:`read` for synchronous callers. :meth:`read`", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L93", + "id": "cache_sync_state_writer_rationale_93", + "community": 143, + "norm_label": "blocking variant of :meth:`read` for synchronous callers. :meth:`read`" + }, + { + "label": "Create or update one file record under an exclusive lock. The record fo", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L117", + "id": "cache_sync_state_writer_rationale_117", + "community": 98, + "norm_label": "create or update one file record under an exclusive lock. the record fo" + }, + { + "label": "Toggle a file's ``keep_local`` flag, creating the record if absent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L153", + "id": "cache_sync_state_writer_rationale_153", + "community": 98, + "norm_label": "toggle a file's ``keep_local`` flag, creating the record if absent." + }, + { + "label": "Stamp ``cleared_at`` with the current UTC time. Called once the run's s", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L162", + "id": "cache_sync_state_writer_rationale_162", + "community": 98, + "norm_label": "stamp ``cleared_at`` with the current utc time. called once the run's s" + }, + { + "label": "Blocking variant of :meth:`mark_cleared` for synchronous callers. Used", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L170", + "id": "cache_sync_state_writer_rationale_170", + "community": 143, + "norm_label": "blocking variant of :meth:`mark_cleared` for synchronous callers. used" + }, + { + "label": "Derive the run-level :class:`RunSyncState` rollup from ``state``. Pure", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L181", + "id": "cache_sync_state_writer_rationale_181", + "community": 504, + "norm_label": "derive the run-level :class:`runsyncstate` rollup from ``state``. pure" + }, + { + "label": "Decode ``sync_state.json``, returning an empty state if absent. Caller", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L209", + "id": "cache_sync_state_writer_rationale_209", + "community": 505, + "norm_label": "decode ``sync_state.json``, returning an empty state if absent. caller" + }, + { + "label": "Return a copy of ``payload`` with ``files[rel_path]`` set to ``record``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L294", + "id": "cache_sync_state_writer_rationale_294", + "community": 506, + "norm_label": "return a copy of ``payload`` with ``files[rel_path]`` set to ``record``." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_cache_init_py", + "community": 194, + "norm_label": "__init__.py" + }, + { + "label": "lock_path_for()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/__init__.py", + "source_location": "L14", + "id": "cache_init_lock_path_for", + "community": 194, + "norm_label": "lock_path_for()" + }, + { + "label": "Return the advisory file-lock path string for ``path``. Centralizes the ``s", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/__init__.py", + "source_location": "L15", + "id": "cache_init_rationale_15", + "community": 194, + "norm_label": "return the advisory file-lock path string for ``path``. centralizes the ``s" + }, + { + "label": "log_writer.py", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L1", + "id": "src_exlab_wizard_cache_log_writer_py", + "community": 21, + "norm_label": "log_writer.py" + }, + { + "label": "format_log_line()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L72", + "id": "cache_log_writer_format_log_line", + "community": 21, + "norm_label": "format_log_line()" + }, + { + "label": "_render_tags()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L115", + "id": "cache_log_writer_render_tags", + "community": 21, + "norm_label": "_render_tags()" + }, + { + "label": "_truncate_if_needed()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L143", + "id": "cache_log_writer_truncate_if_needed", + "community": 21, + "norm_label": "_truncate_if_needed()" + }, + { + "label": "append_log_line()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L182", + "id": "cache_log_writer_append_log_line", + "community": 21, + "norm_label": "append_log_line()" + }, + { + "label": "Append-only writer for ``wizard..log`` files. Backend Spec \u00a711.5, \u00a716.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L1", + "id": "cache_log_writer_rationale_1", + "community": 21, + "norm_label": "append-only writer for ``wizard..log`` files. backend spec \u00a711.5, \u00a716." + }, + { + "label": "Render a structured log line per Backend Spec \u00a711.5 / \u00a716.4. Tags are omitt", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L83", + "id": "cache_log_writer_rationale_83", + "community": 21, + "norm_label": "render a structured log line per backend spec \u00a711.5 / \u00a716.4. tags are omitt" + }, + { + "label": "Render the supplied context as ``[host:..] [equip:..] ...``. Returns the em", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L123", + "id": "cache_log_writer_rationale_123", + "community": 21, + "norm_label": "render the supplied context as ``[host:..] [equip:..] ...``. returns the em" + }, + { + "label": "Trim ``line`` so its UTF-8 byte length is at most ``LOG_LINE_MAX_BYTES``. T", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L144", + "id": "cache_log_writer_rationale_144", + "community": 21, + "norm_label": "trim ``line`` so its utf-8 byte length is at most ``log_line_max_bytes``. t" + }, + { + "label": "Append a single ``line`` to a ``wizard..log`` file. Creates the p", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L183", + "id": "cache_log_writer_rationale_183", + "community": 21, + "norm_label": "append a single ``line`` to a ``wizard..log`` file. creates the p" + }, + { + "label": "creation_writer.py", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L1", + "id": "src_exlab_wizard_cache_creation_writer_py", + "community": 158, + "norm_label": "creation_writer.py" + }, + { + "label": "select_active_overrides()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L69", + "id": "cache_creation_writer_select_active_overrides", + "community": 122, + "norm_label": "select_active_overrides()" + }, + { + "label": "_is_future()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L123", + "id": "cache_creation_writer_is_future", + "community": 158, + "norm_label": "_is_future()" + }, + { + "label": "_apply_migration_defaults()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L143", + "id": "cache_creation_writer_apply_migration_defaults", + "community": 158, + "norm_label": "_apply_migration_defaults()" + }, + { + "label": "CreationWriter", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L188", + "id": "cache_creation_writer_creationwriter", + "community": 12, + "norm_label": "creationwriter" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L191", + "id": "cache_creation_writer_creationwriter_init", + "community": 395, + "norm_label": ".__init__()" + }, + { + "label": ".write_creation()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L204", + "id": "cache_creation_writer_creationwriter_write_creation", + "community": 398, + "norm_label": ".write_creation()" + }, + { + "label": ".update_creation_atomic()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L214", + "id": "cache_creation_writer_creationwriter_update_creation_atomic", + "community": 397, + "norm_label": ".update_creation_atomic()" + }, + { + "label": ".read_creation_snapshot()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L232", + "id": "cache_creation_writer_creationwriter_read_creation_snapshot", + "community": 396, + "norm_label": ".read_creation_snapshot()" + }, + { + "label": "._write_creation_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L243", + "id": "cache_creation_writer_creationwriter_write_creation_sync", + "community": 158, + "norm_label": "._write_creation_sync()" + }, + { + "label": "._update_creation_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L248", + "id": "cache_creation_writer_creationwriter_update_creation_sync", + "community": 158, + "norm_label": "._update_creation_sync()" + }, + { + "label": "._read_creation_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L267", + "id": "cache_creation_writer_creationwriter_read_creation_sync", + "community": 158, + "norm_label": "._read_creation_sync()" + }, + { + "label": "._decode_raw()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L276", + "id": "cache_creation_writer_creationwriter_decode_raw", + "community": 158, + "norm_label": "._decode_raw()" + }, + { + "label": "._encode_and_replace()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L300", + "id": "cache_creation_writer_creationwriter_encode_and_replace", + "community": 158, + "norm_label": "._encode_and_replace()" + }, + { + "label": "_payload_to_dict()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L316", + "id": "cache_creation_writer_payload_to_dict", + "community": 158, + "norm_label": "_payload_to_dict()" + }, + { + "label": "_merge_unknown_fields()", + "file_type": "code", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L327", + "id": "cache_creation_writer_merge_unknown_fields", + "community": 158, + "norm_label": "_merge_unknown_fields()" + }, + { + "label": "Atomic reader/writer for ``creation.json``. Backend Spec \u00a74.4.5. All ``creation", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L1", + "id": "cache_creation_writer_rationale_1", + "community": 158, + "norm_label": "atomic reader/writer for ``creation.json``. backend spec \u00a74.4.5. all ``creation" + }, + { + "label": "Return the subset of override entries that are currently active. Implements", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L74", + "id": "cache_creation_writer_rationale_74", + "community": 122, + "norm_label": "return the subset of override entries that are currently active. implements" + }, + { + "label": "Return True if ``expires_at`` (UTC ISO-8601) is strictly after ``now``. The", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L124", + "id": "cache_creation_writer_rationale_124", + "community": 158, + "norm_label": "return true if ``expires_at`` (utc iso-8601) is strictly after ``now``. the" + }, + { + "label": "Apply \u00a711.3 history-table defaults for fields missing on old minors. Return", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L144", + "id": "cache_creation_writer_rationale_144", + "community": 158, + "norm_label": "apply \u00a711.3 history-table defaults for fields missing on old minors. return" + }, + { + "label": "Atomic reader/writer for ``creation.json``. Backend Spec \u00a74.4.5.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L189", + "id": "cache_creation_writer_rationale_189", + "community": 12, + "norm_label": "atomic reader/writer for ``creation.json``. backend spec \u00a74.4.5." + }, + { + "label": "Construct the writer. ``lock_timeout_seconds`` is the wall-clock cap fo", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L192", + "id": "cache_creation_writer_rationale_192", + "community": 395, + "norm_label": "construct the writer. ``lock_timeout_seconds`` is the wall-clock cap fo" + }, + { + "label": "Write a fresh ``creation.json``. Reserved for initial creation. Acquire", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L205", + "id": "cache_creation_writer_rationale_205", + "community": 398, + "norm_label": "write a fresh ``creation.json``. reserved for initial creation. acquire" + }, + { + "label": "Read, mutate, and write ``creation.json`` under one ``LOCK_EX``. The fu", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L219", + "id": "cache_creation_writer_rationale_219", + "community": 397, + "norm_label": "read, mutate, and write ``creation.json`` under one ``lock_ex``. the fu" + }, + { + "label": "Read a snapshot under ``LOCK_SH`` (shared/read lock). Concurrent reader", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L233", + "id": "cache_creation_writer_rationale_233", + "community": 396, + "norm_label": "read a snapshot under ``lock_sh`` (shared/read lock). concurrent reader" + }, + { + "label": "Load the file as a raw ``dict`` (no Struct conversion yet). We need the", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L277", + "id": "cache_creation_writer_rationale_277", + "community": 158, + "norm_label": "load the file as a raw ``dict`` (no struct conversion yet). we need the" + }, + { + "label": "Encode ``payload`` to bytes, write atomically via atomic_write_bytes. T", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L301", + "id": "cache_creation_writer_rationale_301", + "community": 158, + "norm_label": "encode ``payload`` to bytes, write atomically via atomic_write_bytes. t" + }, + { + "label": "Recursively convert a ``CreationJson`` into a plain ``dict``. Uses :func:`m", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L317", + "id": "cache_creation_writer_rationale_317", + "community": 158, + "norm_label": "recursively convert a ``creationjson`` into a plain ``dict``. uses :func:`m" + }, + { + "label": "Copy keys from ``raw`` that are NOT in ``new_dict`` back into it. This is h", + "file_type": "rationale", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L328", + "id": "cache_creation_writer_rationale_328", + "community": 158, + "norm_label": "copy keys from ``raw`` that are not in ``new_dict`` back into it. this is h" + }, + { + "label": "models.py", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L1", + "id": "src_exlab_wizard_config_models_py", + "community": 55, + "norm_label": "models.py" + }, + { + "label": "_parse_hhmm()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L73", + "id": "config_models_parse_hhmm", + "community": 55, + "norm_label": "_parse_hhmm()" + }, + { + "label": "PathsConfig", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L97", + "id": "config_models_pathsconfig", + "community": 1, + "norm_label": "pathsconfig" + }, + { + "label": "LIMSConfig", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L112", + "id": "config_models_limsconfig", + "community": 1, + "norm_label": "limsconfig" + }, + { + "label": "READMEDefaultField", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L128", + "id": "config_models_readmedefaultfield", + "community": 8, + "norm_label": "readmedefaultfield" + }, + { + "label": "_id_matches_question_id_grammar()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L143", + "id": "config_models_id_matches_question_id_grammar", + "community": 55, + "norm_label": "_id_matches_question_id_grammar()" + }, + { + "label": "_serialize_type()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L153", + "id": "config_models_serialize_type", + "community": 55, + "norm_label": "_serialize_type()" + }, + { + "label": "_choice_requires_non_empty_options()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L158", + "id": "config_models_choice_requires_non_empty_options", + "community": 55, + "norm_label": "_choice_requires_non_empty_options()" + }, + { + "label": "READMEConfig", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L169", + "id": "config_models_readmeconfig", + "community": 55, + "norm_label": "readmeconfig" + }, + { + "label": "BandwidthWindow", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L182", + "id": "config_models_bandwidthwindow", + "community": 73, + "norm_label": "bandwidthwindow" + }, + { + "label": "_serialize_days()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L192", + "id": "config_models_serialize_days", + "community": 55, + "norm_label": "_serialize_days()" + }, + { + "label": "_from_must_precede_to()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L196", + "id": "config_models_from_must_precede_to", + "community": 55, + "norm_label": "_from_must_precede_to()" + }, + { + "label": "BandwidthConfig", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L205", + "id": "config_models_bandwidthconfig", + "community": 7, + "norm_label": "bandwidthconfig" + }, + { + "label": "_upload_mbps_positive_or_none()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L215", + "id": "config_models_upload_mbps_positive_or_none", + "community": 55, + "norm_label": "_upload_mbps_positive_or_none()" + }, + { + "label": "RcloneSftpTransport", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L227", + "id": "config_models_rclonesftptransport", + "community": 7, + "norm_label": "rclonesftptransport" + }, + { + "label": "RcloneSmbTransport", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L247", + "id": "config_models_rclonesmbtransport", + "community": 7, + "norm_label": "rclonesmbtransport" + }, + { + "label": "transport_requires_keyring_password()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L276", + "id": "config_models_transport_requires_keyring_password", + "community": 135, + "norm_label": "transport_requires_keyring_password()" + }, + { + "label": "OrchestratorStagingTransport", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L288", + "id": "config_models_orchestratorstagingtransport", + "community": 55, + "norm_label": "orchestratorstagingtransport" + }, + { + "label": "EquipmentConfig", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L307", + "id": "config_models_equipmentconfig", + "community": 7, + "norm_label": "equipmentconfig" + }, + { + "label": "_serialize_sync_mode()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L329", + "id": "config_models_serialize_sync_mode", + "community": 55, + "norm_label": "_serialize_sync_mode()" + }, + { + "label": "_validate_equipment_id()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L334", + "id": "config_models_validate_equipment_id", + "community": 55, + "norm_label": "_validate_equipment_id()" + }, + { + "label": "_sync_mode_dictates_transport()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L345", + "id": "config_models_sync_mode_dictates_transport", + "community": 55, + "norm_label": "_sync_mode_dictates_transport()" + }, + { + "label": "NASCleanupConfig", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L375", + "id": "config_models_nascleanupconfig", + "community": 304, + "norm_label": "nascleanupconfig" + }, + { + "label": "LoggingConfig", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L391", + "id": "config_models_loggingconfig", + "community": 214, + "norm_label": "loggingconfig" + }, + { + "label": "_normalize_and_validate_level()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L402", + "id": "config_models_normalize_and_validate_level", + "community": 55, + "norm_label": "_normalize_and_validate_level()" + }, + { + "label": "OperatorsConfig", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L422", + "id": "config_models_operatorsconfig", + "community": 55, + "norm_label": "operatorsconfig" + }, + { + "label": "_default_content_scan_extensions()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L435", + "id": "config_models_default_content_scan_extensions", + "community": 55, + "norm_label": "_default_content_scan_extensions()" + }, + { + "label": "ValidatorConfig", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L454", + "id": "config_models_validatorconfig", + "community": 120, + "norm_label": "validatorconfig" + }, + { + "label": "_extensions_must_start_with_dot()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L466", + "id": "config_models_extensions_must_start_with_dot", + "community": 55, + "norm_label": "_extensions_must_start_with_dot()" + }, + { + "label": "PluginsConfig", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L479", + "id": "config_models_pluginsconfig", + "community": 55, + "norm_label": "pluginsconfig" + }, + { + "label": "_default_ignore_globs()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L492", + "id": "config_models_default_ignore_globs", + "community": 55, + "norm_label": "_default_ignore_globs()" + }, + { + "label": "SyncConfig", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L496", + "id": "config_models_syncconfig", + "community": 48, + "norm_label": "syncconfig" + }, + { + "label": "OrchestratorStagingCleanup", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L513", + "id": "config_models_orchestratorstagingcleanup", + "community": 48, + "norm_label": "orchestratorstagingcleanup" + }, + { + "label": "_serialize_mode()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L524", + "id": "config_models_serialize_mode", + "community": 55, + "norm_label": "_serialize_mode()" + }, + { + "label": "OrchestratorConfig", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L529", + "id": "config_models_orchestratorconfig", + "community": 1, + "norm_label": "orchestratorconfig" + }, + { + "label": "Config", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L554", + "id": "config_models_config", + "community": 37, + "norm_label": "config" + }, + { + "label": "_cross_field_invariants()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L572", + "id": "config_models_cross_field_invariants", + "community": 55, + "norm_label": "_cross_field_invariants()" + }, + { + "label": "config_with_equipment_appended()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L592", + "id": "config_models_config_with_equipment_appended", + "community": 243, + "norm_label": "config_with_equipment_appended()" + }, + { + "label": "Pydantic models that mirror ``config.yaml``. Backend Spec \u00a79. These models are", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L1", + "id": "config_models_rationale_1", + "community": 55, + "norm_label": "pydantic models that mirror ``config.yaml``. backend spec \u00a79. these models are" + }, + { + "label": "Return ``datetime.time`` for a strict zero-padded ``HH:MM`` string. The wiz", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L74", + "id": "config_models_rationale_74", + "community": 55, + "norm_label": "return ``datetime.time`` for a strict zero-padded ``hh:mm`` string. the wiz" + }, + { + "label": "``paths:`` block. Templates / plugins / equipment-first local root.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L98", + "id": "config_models_rationale_98", + "community": 1, + "norm_label": "``paths:`` block. templates / plugins / equipment-first local root." + }, + { + "label": "``lims:`` block. Read-only LIMS endpoint plus offline catalogue path.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L113", + "id": "config_models_rationale_113", + "community": 1, + "norm_label": "``lims:`` block. read-only lims endpoint plus offline catalogue path." + }, + { + "label": "One operator-defined extra README field. Backend Spec \u00a79, \u00a710.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L129", + "id": "config_models_rationale_129", + "community": 8, + "norm_label": "one operator-defined extra readme field. backend spec \u00a79, \u00a710." + }, + { + "label": "``readme:`` block. Lab-policy fields layered on top of the core set.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L170", + "id": "config_models_rationale_170", + "community": 55, + "norm_label": "``readme:`` block. lab-policy fields layered on top of the core set." + }, + { + "label": "One ``{days, from, to}`` window. Backend Spec \u00a79.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L183", + "id": "config_models_rationale_183", + "community": 73, + "norm_label": "one ``{days, from, to}`` window. backend spec \u00a79." + }, + { + "label": "``bandwidth:`` sub-block on a transport.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L206", + "id": "config_models_rationale_206", + "community": 7, + "norm_label": "``bandwidth:`` sub-block on a transport." + }, + { + "label": "``transport:`` block for SFTP over SSH with password auth. The wizard invok", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L228", + "id": "config_models_rationale_228", + "community": 7, + "norm_label": "``transport:`` block for sftp over ssh with password auth. the wizard invok" + }, + { + "label": "``transport:`` block for an SMB share with password auth. The wizard invoke", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L248", + "id": "config_models_rationale_248", + "community": 7, + "norm_label": "``transport:`` block for an smb share with password auth. the wizard invoke" + }, + { + "label": "Return True when ``transport`` sources its credential from the keyring. Bot", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L277", + "id": "config_models_rationale_277", + "community": 135, + "norm_label": "return true when ``transport`` sources its credential from the keyring. bot" + }, + { + "label": "``orchestrator_staging_transport:`` -- staging hop only. Backend Spec \u00a713.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L289", + "id": "config_models_rationale_289", + "community": 55, + "norm_label": "``orchestrator_staging_transport:`` -- staging hop only. backend spec \u00a713." + }, + { + "label": "One ``equipment:`` list entry. Backend Spec \u00a79. ``sync_mode`` (Redesign Spe", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L308", + "id": "config_models_rationale_308", + "community": 7, + "norm_label": "one ``equipment:`` list entry. backend spec \u00a79. ``sync_mode`` (redesign spe" + }, + { + "label": "``nas_cleanup:`` block. Local-copy retention after NAS verify.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L376", + "id": "config_models_rationale_376", + "community": 304, + "norm_label": "``nas_cleanup:`` block. local-copy retention after nas verify." + }, + { + "label": "``logging:`` block. Central app-log rotation + level.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L392", + "id": "config_models_rationale_392", + "community": 214, + "norm_label": "``logging:`` block. central app-log rotation + level." + }, + { + "label": "``operators:`` block. Optional case-sensitive allowlist.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L423", + "id": "config_models_rationale_423", + "community": 55, + "norm_label": "``operators:`` block. optional case-sensitive allowlist." + }, + { + "label": "``validator:`` block. Content-scan tuning. Backend Spec \u00a78.1.1, \u00a711.8.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L455", + "id": "config_models_rationale_455", + "community": 120, + "norm_label": "``validator:`` block. content-scan tuning. backend spec \u00a78.1.1, \u00a711.8." + }, + { + "label": "``plugins:`` block. Master opt-in for network-declaring plugins.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L480", + "id": "config_models_rationale_480", + "community": 55, + "norm_label": "``plugins:`` block. master opt-in for network-declaring plugins." + }, + { + "label": "``sync:`` block. NAS sync engine kill-switch + retry / quiescence policy.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L497", + "id": "config_models_rationale_497", + "community": 48, + "norm_label": "``sync:`` block. nas sync engine kill-switch + retry / quiescence policy." + }, + { + "label": "``orchestrator.staging_cleanup:`` sub-block. Backend Spec \u00a713.7.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L514", + "id": "config_models_rationale_514", + "community": 48, + "norm_label": "``orchestrator.staging_cleanup:`` sub-block. backend spec \u00a713.7." + }, + { + "label": "``orchestrator:`` block. Backend Spec \u00a79, \u00a713. GUI/Orchestrator Redesign \u00a73", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L530", + "id": "config_models_rationale_530", + "community": 1, + "norm_label": "``orchestrator:`` block. backend spec \u00a79, \u00a713. gui/orchestrator redesign \u00a73" + }, + { + "label": "Top-level ``config.yaml`` model. Mirrors \u00a79 verbatim.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L555", + "id": "config_models_rationale_555", + "community": 37, + "norm_label": "top-level ``config.yaml`` model. mirrors \u00a79 verbatim." + }, + { + "label": "Return a copy of ``config`` with ``equipment`` appended. The single place t", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L593", + "id": "config_models_rationale_593", + "community": 243, + "norm_label": "return a copy of ``config`` with ``equipment`` appended. the single place t" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/config/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_config_init_py", + "community": 327, + "norm_label": "__init__.py" + }, + { + "label": "loader.py", + "file_type": "code", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L1", + "id": "src_exlab_wizard_config_loader_py", + "community": 17, + "norm_label": "loader.py" + }, + { + "label": "_test_mode_enabled()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L33", + "id": "config_loader_test_mode_enabled", + "community": 17, + "norm_label": "_test_mode_enabled()" + }, + { + "label": "apply_test_mode_prefix()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L43", + "id": "config_loader_apply_test_mode_prefix", + "community": 17, + "norm_label": "apply_test_mode_prefix()" + }, + { + "label": "_yaml()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L79", + "id": "config_loader_yaml", + "community": 17, + "norm_label": "_yaml()" + }, + { + "label": "load_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L92", + "id": "config_loader_load_config", + "community": 17, + "norm_label": "load_config()" + }, + { + "label": "load_config_from_text()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L108", + "id": "config_loader_load_config_from_text", + "community": 17, + "norm_label": "load_config_from_text()" + }, + { + "label": "save_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L128", + "id": "config_loader_save_config", + "community": 17, + "norm_label": "save_config()" + }, + { + "label": "_deep_merge()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L157", + "id": "config_loader_deep_merge", + "community": 17, + "norm_label": "_deep_merge()" + }, + { + "label": "dump_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L171", + "id": "config_loader_dump_config", + "community": 17, + "norm_label": "dump_config()" + }, + { + "label": "config.yaml round-trip loader. Backend Spec \u00a79. Uses ruamel.yaml in round-trip", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L1", + "id": "config_loader_rationale_1", + "community": 17, + "norm_label": "config.yaml round-trip loader. backend spec \u00a79. uses ruamel.yaml in round-trip" + }, + { + "label": "Return True when the env var :data:`TEST_MODE_ENV` is truthy. Centralized h", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L34", + "id": "config_loader_rationale_34", + "community": 17, + "norm_label": "return true when the env var :data:`test_mode_env` is truthy. centralized h" + }, + { + "label": "Return ``config`` with each equipment id prefixed by :data:`TEST_MODE_PREFIX`.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L44", + "id": "config_loader_rationale_44", + "community": 17, + "norm_label": "return ``config`` with each equipment id prefixed by :data:`test_mode_prefix`." + }, + { + "label": "Build a configured ruamel.yaml instance. typ='rt' is round-trip mode (prese", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L80", + "id": "config_loader_rationale_80", + "community": 17, + "norm_label": "build a configured ruamel.yaml instance. typ='rt' is round-trip mode (prese" + }, + { + "label": "Load a config.yaml from disk and validate against the Pydantic model. Raise", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L93", + "id": "config_loader_rationale_93", + "community": 17, + "norm_label": "load a config.yaml from disk and validate against the pydantic model. raise" + }, + { + "label": "Load a config from YAML text. Same semantics as load_config but for in-memory in", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L109", + "id": "config_loader_rationale_109", + "community": 17, + "norm_label": "load a config from yaml text. same semantics as load_config but for in-memory in" + }, + { + "label": "Atomically write `config` back to `path`. If `original_text` is supplied, r", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L129", + "id": "config_loader_rationale_129", + "community": 17, + "norm_label": "atomically write `config` back to `path`. if `original_text` is supplied, r" + }, + { + "label": "In-place deep-merge source into target. Used by save_config to overlay new", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L158", + "id": "config_loader_rationale_158", + "community": 17, + "norm_label": "in-place deep-merge source into target. used by save_config to overlay new" + }, + { + "label": "Serialize config to a YAML string. No comment preservation; tests use this.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L172", + "id": "config_loader_rationale_172", + "community": 17, + "norm_label": "serialize config to a yaml string. no comment preservation; tests use this." + }, + { + "label": "registry.py", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L1", + "id": "src_exlab_wizard_plugins_registry_py", + "community": 3, + "norm_label": "registry.py" + }, + { + "label": "PluginManifest", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L62", + "id": "plugins_registry_pluginmanifest", + "community": 3, + "norm_label": "pluginmanifest" + }, + { + "label": "PluginRecord", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L83", + "id": "plugins_registry_pluginrecord", + "community": 3, + "norm_label": "pluginrecord" + }, + { + "label": "PluginPlan", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L103", + "id": "plugins_registry_pluginplan", + "community": 3, + "norm_label": "pluginplan" + }, + { + "label": "RegistryReport", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L115", + "id": "plugins_registry_registryreport", + "community": 3, + "norm_label": "registryreport" + }, + { + "label": "PluginRegistry", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L128", + "id": "plugins_registry_pluginregistry", + "community": 3, + "norm_label": "pluginregistry" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L140", + "id": "plugins_registry_pluginregistry_init", + "community": 3, + "norm_label": ".__init__()" + }, + { + "label": ".reload()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L157", + "id": "plugins_registry_pluginregistry_reload", + "community": 3, + "norm_label": ".reload()" + }, + { + "label": "._absorb()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L181", + "id": "plugins_registry_pluginregistry_absorb", + "community": 3, + "norm_label": "._absorb()" + }, + { + "label": "._iter_root()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L210", + "id": "plugins_registry_pluginregistry_iter_root", + "community": 3, + "norm_label": "._iter_root()" + }, + { + "label": "._load_plugin()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L230", + "id": "plugins_registry_pluginregistry_load_plugin", + "community": 3, + "norm_label": "._load_plugin()" + }, + { + "label": ".get()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L354", + "id": "plugins_registry_pluginregistry_get", + "community": 3, + "norm_label": ".get()" + }, + { + "label": ".list_all()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L358", + "id": "plugins_registry_pluginregistry_list_all", + "community": 3, + "norm_label": ".list_all()" + }, + { + "label": ".candidates_for()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L362", + "id": "plugins_registry_pluginregistry_candidates_for", + "community": 3, + "norm_label": ".candidates_for()" + }, + { + "label": "_as_str_list()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L386", + "id": "plugins_registry_as_str_list", + "community": 3, + "norm_label": "_as_str_list()" + }, + { + "label": "_suffix_or_full()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L393", + "id": "plugins_registry_suffix_or_full", + "community": 3, + "norm_label": "_suffix_or_full()" + }, + { + "label": "Plugin registry -- manifest-driven discovery + dispatch resolution. Backend Spe", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L1", + "id": "plugins_registry_rationale_1", + "community": 3, + "norm_label": "plugin registry -- manifest-driven discovery + dispatch resolution. backend spe" + }, + { + "label": "Parsed ``manifest.yml`` contents. Backend Spec \u00a76.1.2. Mirrors the schema d", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L63", + "id": "plugins_registry_rationale_63", + "community": 3, + "norm_label": "parsed ``manifest.yml`` contents. backend spec \u00a76.1.2. mirrors the schema d" + }, + { + "label": "One plugin in the registry. Carries the parsed manifest, the source-on-disk", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L84", + "id": "plugins_registry_rationale_84", + "community": 3, + "norm_label": "one plugin in the registry. carries the parsed manifest, the source-on-disk" + }, + { + "label": "One plugin paired with the files in the rendered tree it matches. Built by", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L104", + "id": "plugins_registry_rationale_104", + "community": 3, + "norm_label": "one plugin paired with the files in the rendered tree it matches. built by" + }, + { + "label": "Outcome of a :meth:`PluginRegistry.reload` pass. ``loaded`` is the list of", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L116", + "id": "plugins_registry_rationale_116", + "community": 3, + "norm_label": "outcome of a :meth:`pluginregistry.reload` pass. ``loaded`` is the list of" + }, + { + "label": "Manifest-driven plugin registry. Constructed at host startup with the two c", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L129", + "id": "plugins_registry_rationale_129", + "community": 3, + "norm_label": "manifest-driven plugin registry. constructed at host startup with the two c" + }, + { + "label": "Re-scan both plugin roots and rebuild the in-memory record table. Bundl", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L158", + "id": "plugins_registry_rationale_158", + "community": 3, + "norm_label": "re-scan both plugin roots and rebuild the in-memory record table. bundl" + }, + { + "label": "Merge one parsed plugin (or one rejection) into the report.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L187", + "id": "plugins_registry_rationale_187", + "community": 3, + "norm_label": "merge one parsed plugin (or one rejection) into the report." + }, + { + "label": "Walk one plugin root and yield ``(record_or_None, reason_or_None)`` pairs.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L215", + "id": "plugins_registry_rationale_215", + "community": 3, + "norm_label": "walk one plugin root and yield ``(record_or_none, reason_or_none)`` pairs." + }, + { + "label": "Parse one plugin directory. Returns ``(record, None)`` or ``(None, (name, reason", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L235", + "id": "plugins_registry_rationale_235", + "community": 3, + "norm_label": "parse one plugin directory. returns ``(record, none)`` or ``(none, (name, reason" + }, + { + "label": "Return the record registered under ``name``, or ``None``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L355", + "id": "plugins_registry_rationale_355", + "community": 3, + "norm_label": "return the record registered under ``name``, or ``none``." + }, + { + "label": "Return all registered records, sorted by name for stable output.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L359", + "id": "plugins_registry_rationale_359", + "community": 3, + "norm_label": "return all registered records, sorted by name for stable output." + }, + { + "label": "Resolve plugins that match the given files by extension. For each regis", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L363", + "id": "plugins_registry_rationale_363", + "community": 3, + "norm_label": "resolve plugins that match the given files by extension. for each regis" + }, + { + "label": "Coerce a YAML node into a ``list[str]``; non-list / non-string entries are dropp", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L387", + "id": "plugins_registry_rationale_387", + "community": 3, + "norm_label": "coerce a yaml node into a ``list[str]``; non-list / non-string entries are dropp" + }, + { + "label": "Return the final suffix (``.xlsx``) for matching against ``supported_extensions`", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L394", + "id": "plugins_registry_rationale_394", + "community": 3, + "norm_label": "return the final suffix (``.xlsx``) for matching against ``supported_extensions`" + }, + { + "label": "host.py", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L1", + "id": "src_exlab_wizard_plugins_host_py", + "community": 15, + "norm_label": "host.py" + }, + { + "label": "PluginRecord", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L86", + "id": "plugins_host_pluginrecord", + "community": 15, + "norm_label": "pluginrecord" + }, + { + "label": "PluginRegistryProtocol", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L116", + "id": "plugins_host_pluginregistryprotocol", + "community": 15, + "norm_label": "pluginregistryprotocol" + }, + { + "label": "Protocol", + "file_type": "code", + "source_file": "", + "source_location": "", + "id": "protocol", + "community": 15, + "norm_label": "protocol" + }, + { + "label": ".get_record()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L126", + "id": "plugins_host_pluginregistryprotocol_get_record", + "community": 15, + "norm_label": ".get_record()" + }, + { + "label": "InputRequiredPayload", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L135", + "id": "plugins_host_inputrequiredpayload", + "community": 6, + "norm_label": "inputrequiredpayload" + }, + { + "label": "PluginPassResult", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L150", + "id": "plugins_host_pluginpassresult", + "community": 6, + "norm_label": "pluginpassresult" + }, + { + "label": "_apply_rlimits()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L168", + "id": "plugins_host_apply_rlimits", + "community": 15, + "norm_label": "_apply_rlimits()" + }, + { + "label": "_sanitized_env()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L214", + "id": "plugins_host_sanitized_env", + "community": 15, + "norm_label": "_sanitized_env()" + }, + { + "label": "_snapshot_tree()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L240", + "id": "plugins_host_snapshot_tree", + "community": 15, + "norm_label": "_snapshot_tree()" + }, + { + "label": "_is_forbidden_write()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L280", + "id": "plugins_host_is_forbidden_write", + "community": 15, + "norm_label": "_is_forbidden_write()" + }, + { + "label": "_diff_and_collect_violations()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L285", + "id": "plugins_host_diff_and_collect_violations", + "community": 15, + "norm_label": "_diff_and_collect_violations()" + }, + { + "label": "_read_silently()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L338", + "id": "plugins_host_read_silently", + "community": 15, + "norm_label": "_read_silently()" + }, + { + "label": "_revert_to_snapshot()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L346", + "id": "plugins_host_revert_to_snapshot", + "community": 15, + "norm_label": "_revert_to_snapshot()" + }, + { + "label": "_drain_stderr()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L397", + "id": "plugins_host_drain_stderr", + "community": 15, + "norm_label": "_drain_stderr()" + }, + { + "label": "_emit_forwarded_log()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L447", + "id": "plugins_host_emit_forwarded_log", + "community": 15, + "norm_label": "_emit_forwarded_log()" + }, + { + "label": "_resolve_run_id()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L472", + "id": "plugins_host_resolve_run_id", + "community": 15, + "norm_label": "_resolve_run_id()" + }, + { + "label": "PluginHost", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L487", + "id": "plugins_host_pluginhost", + "community": 66, + "norm_label": "pluginhost" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L493", + "id": "plugins_host_pluginhost_init", + "community": 66, + "norm_label": ".__init__()" + }, + { + "label": ".run_pass()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L502", + "id": "plugins_host_pluginhost_run_pass", + "community": 15, + "norm_label": ".run_pass()" + }, + { + "label": "._run_one()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L548", + "id": "plugins_host_pluginhost_run_one", + "community": 15, + "norm_label": "._run_one()" + }, + { + "label": "._spawn_worker()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L629", + "id": "plugins_host_pluginhost_spawn_worker", + "community": 15, + "norm_label": "._spawn_worker()" + }, + { + "label": "._terminate()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L766", + "id": "plugins_host_pluginhost_terminate", + "community": 15, + "norm_label": "._terminate()" + }, + { + "label": "._stderr_path_for()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L783", + "id": "plugins_host_pluginhost_stderr_path_for", + "community": 15, + "norm_label": "._stderr_path_for()" + }, + { + "label": "_SpawnOutcome", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L797", + "id": "plugins_host_spawnoutcome", + "community": 15, + "norm_label": "_spawnoutcome" + }, + { + "label": "failure()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L807", + "id": "plugins_host_failure", + "community": 15, + "norm_label": "failure()" + }, + { + "label": "_read_stdout_envelope()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L817", + "id": "plugins_host_read_stdout_envelope", + "community": 15, + "norm_label": "_read_stdout_envelope()" + }, + { + "label": "_build_applied_entry()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L838", + "id": "plugins_host_build_applied_entry", + "community": 15, + "norm_label": "_build_applied_entry()" + }, + { + "label": "_exit_code_to_status()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L876", + "id": "plugins_host_exit_code_to_status", + "community": 15, + "norm_label": "_exit_code_to_status()" + }, + { + "label": "_ListBackedRegistry", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L900", + "id": "plugins_host_listbackedregistry", + "community": 15, + "norm_label": "_listbackedregistry" + }, + { + "label": ".get_record()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L911", + "id": "plugins_host_listbackedregistry_get_record", + "community": 15, + "norm_label": ".get_record()" + }, + { + "label": "build_test_registry()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L918", + "id": "plugins_host_build_test_registry", + "community": 15, + "norm_label": "build_test_registry()" + }, + { + "label": "applied_entry_as_json()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L925", + "id": "plugins_host_applied_entry_as_json", + "community": 15, + "norm_label": "applied_entry_as_json()" + }, + { + "label": "Plugin host: spawns plugin worker subprocesses with strict isolation. Backend S", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L1", + "id": "plugins_host_rationale_1", + "community": 15, + "norm_label": "plugin host: spawns plugin worker subprocesses with strict isolation. backend s" + }, + { + "label": "One resolved plugin, ready to be spawned. Backend Spec \u00a76.2.1. Attributes:", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L87", + "id": "plugins_host_rationale_87", + "community": 15, + "norm_label": "one resolved plugin, ready to be spawned. backend spec \u00a76.2.1. attributes:" + }, + { + "label": "Read-only registry surface the host depends on. Backend Spec \u00a76.2. The conc", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L117", + "id": "plugins_host_rationale_117", + "community": 15, + "norm_label": "read-only registry surface the host depends on. backend spec \u00a76.2. the conc" + }, + { + "label": "Frame surfaced to the controller when a plugin needs more input. Backend Sp", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L136", + "id": "plugins_host_rationale_136", + "community": 6, + "norm_label": "frame surfaced to the controller when a plugin needs more input. backend sp" + }, + { + "label": "Aggregate result returned by :meth:`PluginHost.run_pass`. Backend Spec \u00a76.2", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L151", + "id": "plugins_host_rationale_151", + "community": 6, + "norm_label": "aggregate result returned by :meth:`pluginhost.run_pass`. backend spec \u00a76.2" + }, + { + "label": "``preexec_fn`` for the worker subprocess: install POSIX rlimits. Backend Sp", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L169", + "id": "plugins_host_rationale_169", + "community": 15, + "norm_label": "``preexec_fn`` for the worker subprocess: install posix rlimits. backend sp" + }, + { + "label": "Return the worker's ``env`` mapping (Backend Spec \u00a76.3.1).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L215", + "id": "plugins_host_rationale_215", + "community": 15, + "norm_label": "return the worker's ``env`` mapping (backend spec \u00a76.3.1)." + }, + { + "label": "Capture a small fingerprint per file in ``root``. The returned mapping is k", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L241", + "id": "plugins_host_rationale_241", + "community": 15, + "norm_label": "capture a small fingerprint per file in ``root``. the returned mapping is k" + }, + { + "label": "Return ``True`` when ``rel_path`` is in the \u00a76.1.5 forbidden set.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L281", + "id": "plugins_host_rationale_281", + "community": 15, + "norm_label": "return ``true`` when ``rel_path`` is in the \u00a76.1.5 forbidden set." + }, + { + "label": "Return ``(violations, modified_files)``. ``violations`` lists relative path", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L289", + "id": "plugins_host_rationale_289", + "community": 15, + "norm_label": "return ``(violations, modified_files)``. ``violations`` lists relative path" + }, + { + "label": "Return the file's bytes or ``None`` on read failure.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L339", + "id": "plugins_host_rationale_339", + "community": 15, + "norm_label": "return the file's bytes or ``none`` on read failure." + }, + { + "label": "Best-effort revert of every change after a forbidden-write plugin. Removes", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L350", + "id": "plugins_host_rationale_350", + "community": 15, + "norm_label": "best-effort revert of every change after a forbidden-write plugin. removes" + }, + { + "label": "Read the worker's stderr line-by-line. JSON-shaped lines are forwarded into", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L403", + "id": "plugins_host_rationale_403", + "community": 15, + "norm_label": "read the worker's stderr line-by-line. json-shaped lines are forwarded into" + }, + { + "label": "Forward a worker log frame into the canonical logger chain.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L453", + "id": "plugins_host_rationale_453", + "community": 15, + "norm_label": "forward a worker log frame into the canonical logger chain." + }, + { + "label": "Return a filesystem-safe run identifier for stderr capture paths.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L473", + "id": "plugins_host_rationale_473", + "community": 15, + "norm_label": "return a filesystem-safe run identifier for stderr capture paths." + }, + { + "label": "Spawns plugin worker subprocesses with strict isolation. Backend Spec \u00a76.3", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L488", + "id": "plugins_host_rationale_488", + "community": 66, + "norm_label": "spawns plugin worker subprocesses with strict isolation. backend spec \u00a76.3" + }, + { + "label": "Drive the plugin pass for a single creation session. Spawns one worker", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L509", + "id": "plugins_host_rationale_509", + "community": 15, + "norm_label": "drive the plugin pass for a single creation session. spawns one worker" + }, + { + "label": "Run a single plugin worker, including resume on input-required. Returns", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L555", + "id": "plugins_host_rationale_555", + "community": 15, + "norm_label": "run a single plugin worker, including resume on input-required. returns" + }, + { + "label": "Spawn one worker subprocess and supervise it to completion. Returns a :", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L637", + "id": "plugins_host_rationale_637", + "community": 15, + "norm_label": "spawn one worker subprocess and supervise it to completion. returns a :" + }, + { + "label": "SIGTERM, wait the grace period, SIGKILL. Backend Spec \u00a76.3.4.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L767", + "id": "plugins_host_rationale_767", + "community": 15, + "norm_label": "sigterm, wait the grace period, sigkill. backend spec \u00a76.3.4." + }, + { + "label": "Return the path the worker's stderr should be captured to.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L784", + "id": "plugins_host_rationale_784", + "community": 15, + "norm_label": "return the path the worker's stderr should be captured to." + }, + { + "label": "Result of supervising a single worker invocation.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L798", + "id": "plugins_host_rationale_798", + "community": 15, + "norm_label": "result of supervising a single worker invocation." + }, + { + "label": "Read and JSON-decode the worker's stdout envelope.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L818", + "id": "plugins_host_rationale_818", + "community": 15, + "norm_label": "read and json-decode the worker's stdout envelope." + }, + { + "label": "Shape one ``plugins_applied[]`` entry for ``creation.json``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L847", + "id": "plugins_host_rationale_847", + "community": 15, + "norm_label": "shape one ``plugins_applied[]`` entry for ``creation.json``." + }, + { + "label": "Map a worker exit code to one of the \u00a76.2.4 status values.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L877", + "id": "plugins_host_rationale_877", + "community": 15, + "norm_label": "map a worker exit code to one of the \u00a76.2.4 status values." + }, + { + "label": "Minimal :class:`PluginRegistryProtocol` implementation used for tests. Test", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L901", + "id": "plugins_host_rationale_901", + "community": 15, + "norm_label": "minimal :class:`pluginregistryprotocol` implementation used for tests. test" + }, + { + "label": "Return a tiny in-memory registry over ``records``. Tests only.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L919", + "id": "plugins_host_rationale_919", + "community": 15, + "norm_label": "return a tiny in-memory registry over ``records``. tests only." + }, + { + "label": "Return ``entry`` as a JSON-friendly dict (deep-copied).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L926", + "id": "plugins_host_rationale_926", + "community": 15, + "norm_label": "return ``entry`` as a json-friendly dict (deep-copied)." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_plugins_init_py", + "community": 303, + "norm_label": "__init__.py" + }, + { + "label": "logger.py", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L1", + "id": "src_exlab_wizard_plugins_logger_py", + "community": 109, + "norm_label": "logger.py" + }, + { + "label": "PluginLogFrame", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L46", + "id": "plugins_logger_pluginlogframe", + "community": 69, + "norm_label": "pluginlogframe" + }, + { + "label": "PluginLogger", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L59", + "id": "plugins_logger_pluginlogger", + "community": 109, + "norm_label": "pluginlogger" + }, + { + "label": "ABC", + "file_type": "code", + "source_file": "", + "source_location": "", + "id": "abc", + "community": 109, + "norm_label": "abc" + }, + { + "label": "debug()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L69", + "id": "plugins_logger_debug", + "community": 109, + "norm_label": "debug()" + }, + { + "label": "info()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L73", + "id": "plugins_logger_info", + "community": 109, + "norm_label": "info()" + }, + { + "label": "warning()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L77", + "id": "plugins_logger_warning", + "community": 109, + "norm_label": "warning()" + }, + { + "label": "error()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L81", + "id": "plugins_logger_error", + "community": 109, + "norm_label": "error()" + }, + { + "label": "HostPluginLogger", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L85", + "id": "plugins_logger_hostpluginlogger", + "community": 6, + "norm_label": "hostpluginlogger" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L95", + "id": "plugins_logger_hostpluginlogger_init", + "community": 28, + "norm_label": ".__init__()" + }, + { + "label": ".debug()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L98", + "id": "plugins_logger_hostpluginlogger_debug", + "community": 69, + "norm_label": ".debug()" + }, + { + "label": ".info()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L101", + "id": "plugins_logger_hostpluginlogger_info", + "community": 69, + "norm_label": ".info()" + }, + { + "label": ".warning()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L104", + "id": "plugins_logger_hostpluginlogger_warning", + "community": 69, + "norm_label": ".warning()" + }, + { + "label": ".error()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L107", + "id": "plugins_logger_hostpluginlogger_error", + "community": 69, + "norm_label": ".error()" + }, + { + "label": "._emit()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L110", + "id": "plugins_logger_hostpluginlogger_emit", + "community": 6, + "norm_label": "._emit()" + }, + { + "label": "WorkerPluginLogger", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L121", + "id": "plugins_logger_workerpluginlogger", + "community": 69, + "norm_label": "workerpluginlogger" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L137", + "id": "plugins_logger_workerpluginlogger_init", + "community": 69, + "norm_label": ".__init__()" + }, + { + "label": ".debug()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L140", + "id": "plugins_logger_workerpluginlogger_debug", + "community": 69, + "norm_label": ".debug()" + }, + { + "label": ".info()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L143", + "id": "plugins_logger_workerpluginlogger_info", + "community": 69, + "norm_label": ".info()" + }, + { + "label": ".warning()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L146", + "id": "plugins_logger_workerpluginlogger_warning", + "community": 69, + "norm_label": ".warning()" + }, + { + "label": ".error()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L149", + "id": "plugins_logger_workerpluginlogger_error", + "community": 69, + "norm_label": ".error()" + }, + { + "label": "._emit()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L152", + "id": "plugins_logger_workerpluginlogger_emit", + "community": 69, + "norm_label": "._emit()" + }, + { + "label": "Plugin logger shim. Backend Spec \u00a76.1.4 / \u00a76.3.2. Plugins call ``ctx.log.info(.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L1", + "id": "plugins_logger_rationale_1", + "community": 109, + "norm_label": "plugin logger shim. backend spec \u00a76.1.4 / \u00a76.3.2. plugins call ``ctx.log.info(." + }, + { + "label": "Wire format for worker-side log records. The worker subprocess emits one ``", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L47", + "id": "plugins_logger_rationale_47", + "community": 69, + "norm_label": "wire format for worker-side log records. the worker subprocess emits one ``" + }, + { + "label": "Abstract structured-log interface plugins receive on ``ctx.log``. Implement", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L60", + "id": "plugins_logger_rationale_60", + "community": 109, + "norm_label": "abstract structured-log interface plugins receive on ``ctx.log``. implement" + }, + { + "label": "Emit a DEBUG-level structured log record.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L70", + "id": "plugins_logger_rationale_70", + "community": 507, + "norm_label": "emit a debug-level structured log record." + }, + { + "label": "Emit an INFO-level structured log record.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L74", + "id": "plugins_logger_rationale_74", + "community": 508, + "norm_label": "emit an info-level structured log record." + }, + { + "label": "Emit a WARNING-level structured log record.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L78", + "id": "plugins_logger_rationale_78", + "community": 509, + "norm_label": "emit a warning-level structured log record." + }, + { + "label": "Emit an ERROR-level structured log record.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L82", + "id": "plugins_logger_rationale_82", + "community": 510, + "norm_label": "emit an error-level structured log record." + }, + { + "label": "In-process forwarder used when plugins run without subprocess isolation. Us", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L86", + "id": "plugins_logger_rationale_86", + "community": 6, + "norm_label": "in-process forwarder used when plugins run without subprocess isolation. us" + }, + { + "label": "Worker-side forwarder. Emits JSON frames on stderr. Used inside the plugin", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L122", + "id": "plugins_logger_rationale_122", + "community": 69, + "norm_label": "worker-side forwarder. emits json frames on stderr. used inside the plugin" + }, + { + "label": "base.py", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L1", + "id": "src_exlab_wizard_plugins_base_py", + "community": 109, + "norm_label": "base.py" + }, + { + "label": "FileChange", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L53", + "id": "plugins_base_filechange", + "community": 59, + "norm_label": "filechange" + }, + { + "label": "PluginContext", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L73", + "id": "plugins_base_plugincontext", + "community": 6, + "norm_label": "plugincontext" + }, + { + "label": "Plugin", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L96", + "id": "plugins_base_plugin", + "community": 109, + "norm_label": "plugin" + }, + { + "label": "can_handle()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L135", + "id": "plugins_base_can_handle", + "community": 109, + "norm_label": "can_handle()" + }, + { + "label": "transform()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L143", + "id": "plugins_base_transform", + "community": 109, + "norm_label": "transform()" + }, + { + "label": ".validate_variables()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L153", + "id": "plugins_base_plugin_validate_variables", + "community": 109, + "norm_label": ".validate_variables()" + }, + { + "label": ".pre_transform_all()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L170", + "id": "plugins_base_plugin_pre_transform_all", + "community": 109, + "norm_label": ".pre_transform_all()" + }, + { + "label": ".post_transform_all()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L179", + "id": "plugins_base_plugin_post_transform_all", + "community": 109, + "norm_label": ".post_transform_all()" + }, + { + "label": ".describe_changes()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L186", + "id": "plugins_base_plugin_describe_changes", + "community": 109, + "norm_label": ".describe_changes()" + }, + { + "label": ".on_plugin_failure()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L201", + "id": "plugins_base_plugin_on_plugin_failure", + "community": 109, + "norm_label": ".on_plugin_failure()" + }, + { + "label": "Plugin contract base class. Backend Spec \u00a76.1. Defines the public surface that", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L1", + "id": "plugins_base_rationale_1", + "community": 109, + "norm_label": "plugin contract base class. backend spec \u00a76.1. defines the public surface that" + }, + { + "label": "A single mutation a plugin would make. Used by ``describe_changes``. Backen", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L54", + "id": "plugins_base_rationale_54", + "community": 59, + "norm_label": "a single mutation a plugin would make. used by ``describe_changes``. backen" + }, + { + "label": "Read-only context handed to every plugin lifecycle hook. Constructed once p", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L74", + "id": "plugins_base_rationale_74", + "community": 6, + "norm_label": "read-only context handed to every plugin lifecycle hook. constructed once p" + }, + { + "label": "Abstract base class for all ExLab-Wizard plugins. Backend Spec \u00a76.1.3.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L97", + "id": "plugins_base_rationale_97", + "community": 109, + "norm_label": "abstract base class for all exlab-wizard plugins. backend spec \u00a76.1.3." + }, + { + "label": "Secondary filter, called after the extension match. Cheap and side-effe", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L136", + "id": "plugins_base_rationale_136", + "community": 511, + "norm_label": "secondary filter, called after the extension match. cheap and side-effe" + }, + { + "label": "Mutate ``file_path`` in place. On unrecoverable failure raise :class:`P", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L144", + "id": "plugins_base_rationale_144", + "community": 512, + "norm_label": "mutate ``file_path`` in place. on unrecoverable failure raise :class:`p" + }, + { + "label": "Return a list of error strings; empty list means \"valid\". Default imple", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L154", + "id": "plugins_base_rationale_154", + "community": 109, + "norm_label": "return a list of error strings; empty list means \"valid\". default imple" + }, + { + "label": "Called once before the file loop. Default: no-op. Use for batch setup t", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L171", + "id": "plugins_base_rationale_171", + "community": 109, + "norm_label": "called once before the file loop. default: no-op. use for batch setup t" + }, + { + "label": "Called once after the file loop. Default: no-op. Symmetric to :meth:`pr", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L180", + "id": "plugins_base_rationale_180", + "community": 109, + "norm_label": "called once after the file loop. default: no-op. symmetric to :meth:`pr" + }, + { + "label": "Return the dry-run preview for what ``transform`` would do. Default ret", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L187", + "id": "plugins_base_rationale_187", + "community": 109, + "norm_label": "return the dry-run preview for what ``transform`` would do. default ret" + }, + { + "label": "Called if any prior hook raised. Default: no-op. Use to roll back parti", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L202", + "id": "plugins_base_rationale_202", + "community": 109, + "norm_label": "called if any prior hook raised. default: no-op. use to roll back parti" + }, + { + "label": "_worker.py", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L1", + "id": "src_exlab_wizard_plugins_worker_py", + "community": 128, + "norm_label": "_worker.py" + }, + { + "label": "_WorkerOutcome", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L57", + "id": "plugins_worker_workeroutcome", + "community": 128, + "norm_label": "_workeroutcome" + }, + { + "label": "_read_stdin_envelope()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L73", + "id": "plugins_worker_read_stdin_envelope", + "community": 128, + "norm_label": "_read_stdin_envelope()" + }, + { + "label": "_decode_files()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L88", + "id": "plugins_worker_decode_files", + "community": 128, + "norm_label": "_decode_files()" + }, + { + "label": "_build_context()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L105", + "id": "plugins_worker_build_context", + "community": 128, + "norm_label": "_build_context()" + }, + { + "label": "_load_plugin_class()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L144", + "id": "plugins_worker_load_plugin_class", + "community": 128, + "norm_label": "_load_plugin_class()" + }, + { + "label": "_run_lifecycle()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L170", + "id": "plugins_worker_run_lifecycle", + "community": 128, + "norm_label": "_run_lifecycle()" + }, + { + "label": "_serialize_change()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L296", + "id": "plugins_worker_serialize_change", + "community": 128, + "norm_label": "_serialize_change()" + }, + { + "label": "_SwallowCallbackErrors", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L311", + "id": "plugins_worker_swallowcallbackerrors", + "community": 128, + "norm_label": "_swallowcallbackerrors" + }, + { + "label": ".__enter__()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L319", + "id": "plugins_worker_swallowcallbackerrors_enter", + "community": 128, + "norm_label": ".__enter__()" + }, + { + "label": ".__exit__()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L322", + "id": "plugins_worker_swallowcallbackerrors_exit", + "community": 128, + "norm_label": ".__exit__()" + }, + { + "label": "main()", + "file_type": "code", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L350", + "id": "plugins_worker_main", + "community": 128, + "norm_label": "main()" + }, + { + "label": "Plugin worker entry point. Backend Spec \u00a76.3.1, \u00a76.3.2. Invoked as ``python -m", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L1", + "id": "plugins_worker_rationale_1", + "community": 128, + "norm_label": "plugin worker entry point. backend spec \u00a76.3.1, \u00a76.3.2. invoked as ``python -m" + }, + { + "label": "Aggregated worker-side result before stdout serialization.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L58", + "id": "plugins_worker_rationale_58", + "community": 128, + "norm_label": "aggregated worker-side result before stdout serialization." + }, + { + "label": "Read a single JSON object from stdin and return it as a dict. The host writ", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L74", + "id": "plugins_worker_rationale_74", + "community": 128, + "norm_label": "read a single json object from stdin and return it as a dict. the host writ" + }, + { + "label": "Resolve incoming file path strings against ``dst_root``. Paths are accepted", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L89", + "id": "plugins_worker_rationale_89", + "community": 128, + "norm_label": "resolve incoming file path strings against ``dst_root``. paths are accepted" + }, + { + "label": "Materialize a :class:`PluginContext` from the stdin envelope. Returns the c", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L110", + "id": "plugins_worker_rationale_110", + "community": 128, + "norm_label": "materialize a :class:`plugincontext` from the stdin envelope. returns the c" + }, + { + "label": "Import the plugin module and return the exported ``Plugin`` symbol. The hos", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L145", + "id": "plugins_worker_rationale_145", + "community": 128, + "norm_label": "import the plugin module and return the exported ``plugin`` symbol. the hos" + }, + { + "label": "Execute the plugin's transform lifecycle against ``files``. The lifecycle i", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L177", + "id": "plugins_worker_rationale_177", + "community": 128, + "norm_label": "execute the plugin's transform lifecycle against ``files``. the lifecycle i" + }, + { + "label": "Convert a :class:`FileChange` to its IPC dict shape.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L297", + "id": "plugins_worker_rationale_297", + "community": 128, + "norm_label": "convert a :class:`filechange` to its ipc dict shape." + }, + { + "label": "Context manager that suppresses errors from ``on_plugin_failure``. Per Back", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L312", + "id": "plugins_worker_rationale_312", + "community": 128, + "norm_label": "context manager that suppresses errors from ``on_plugin_failure``. per back" + }, + { + "label": "Worker entry point. Returns the process exit code.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L351", + "id": "plugins_worker_rationale_351", + "community": 128, + "norm_label": "worker entry point. returns the process exit code." + }, + { + "label": "enums.py", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L1", + "id": "src_exlab_wizard_constants_enums_py", + "community": 29, + "norm_label": "enums.py" + }, + { + "label": "RunKind", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L14", + "id": "constants_enums_runkind", + "community": 70, + "norm_label": "runkind" + }, + { + "label": "SyncStatus", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L24", + "id": "constants_enums_syncstatus", + "community": 29, + "norm_label": "syncstatus" + }, + { + "label": "Tier", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L41", + "id": "constants_enums_tier", + "community": 115, + "norm_label": "tier" + }, + { + "label": "ProblemClass", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L48", + "id": "constants_enums_problemclass", + "community": 29, + "norm_label": "problemclass" + }, + { + "label": "FindingKind", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L65", + "id": "constants_enums_findingkind", + "community": 29, + "norm_label": "findingkind" + }, + { + "label": "TemplateType", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L76", + "id": "constants_enums_templatetype", + "community": 288, + "norm_label": "templatetype" + }, + { + "label": "RunScope", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L84", + "id": "constants_enums_runscope", + "community": 288, + "norm_label": "runscope" + }, + { + "label": "LIMSProjectStatus", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L95", + "id": "constants_enums_limsprojectstatus", + "community": 29, + "norm_label": "limsprojectstatus" + }, + { + "label": "LIMSProjectSource", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L109", + "id": "constants_enums_limsprojectsource", + "community": 29, + "norm_label": "limsprojectsource" + }, + { + "label": "RunSyncState", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L117", + "id": "constants_enums_runsyncstate", + "community": 70, + "norm_label": "runsyncstate" + }, + { + "label": "SetupState", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L137", + "id": "constants_enums_setupstate", + "community": 29, + "norm_label": "setupstate" + }, + { + "label": "TransportType", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L159", + "id": "constants_enums_transporttype", + "community": 29, + "norm_label": "transporttype" + }, + { + "label": "SyncMode", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L173", + "id": "constants_enums_syncmode", + "community": 29, + "norm_label": "syncmode" + }, + { + "label": "StagingCleanupMode", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L187", + "id": "constants_enums_stagingcleanupmode", + "community": 29, + "norm_label": "stagingcleanupmode" + }, + { + "label": "PluginStatus", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L194", + "id": "constants_enums_pluginstatus", + "community": 15, + "norm_label": "pluginstatus" + }, + { + "label": "CreationLevel", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L204", + "id": "constants_enums_creationlevel", + "community": 29, + "norm_label": "creationlevel" + }, + { + "label": "OrchestratorTransportType", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L214", + "id": "constants_enums_orchestratortransporttype", + "community": 29, + "norm_label": "orchestratortransporttype" + }, + { + "label": "FieldType", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L225", + "id": "constants_enums_fieldtype", + "community": 29, + "norm_label": "fieldtype" + }, + { + "label": "BandwidthDay", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L235", + "id": "constants_enums_bandwidthday", + "community": 29, + "norm_label": "bandwidthday" + }, + { + "label": "SessionKind", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L247", + "id": "constants_enums_sessionkind", + "community": 29, + "norm_label": "sessionkind" + }, + { + "label": "NextAction", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L259", + "id": "constants_enums_nextaction", + "community": 29, + "norm_label": "nextaction" + }, + { + "label": "AuditScopeKind", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L266", + "id": "constants_enums_auditscopekind", + "community": 29, + "norm_label": "auditscopekind" + }, + { + "label": "DirectoryLevel", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L279", + "id": "constants_enums_directorylevel", + "community": 29, + "norm_label": "directorylevel" + }, + { + "label": "Platform", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L296", + "id": "constants_enums_platform", + "community": 29, + "norm_label": "platform" + }, + { + "label": "SetupNextAction", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L304", + "id": "constants_enums_setupnextaction", + "community": 29, + "norm_label": "setupnextaction" + }, + { + "label": "SyncHandleState", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L318", + "id": "constants_enums_synchandlestate", + "community": 29, + "norm_label": "synchandlestate" + }, + { + "label": "PluginSourceRoot", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L330", + "id": "constants_enums_pluginsourceroot", + "community": 29, + "norm_label": "pluginsourceroot" + }, + { + "label": "TreeProjectStatus", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L337", + "id": "constants_enums_treeprojectstatus", + "community": 70, + "norm_label": "treeprojectstatus" + }, + { + "label": "Closed-set enumerations referenced by the cache files, REST API, and UI. Every", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L1", + "id": "constants_enums_rationale_1", + "community": 29, + "norm_label": "closed-set enumerations referenced by the cache files, rest api, and ui. every" + }, + { + "label": "Whether a run is a real experiment or a dry-run/test. Stored under ``run_ki", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L15", + "id": "constants_enums_rationale_15", + "community": 70, + "norm_label": "whether a run is a real experiment or a dry-run/test. stored under ``run_ki" + }, + { + "label": "State machine for an item in the NAS sync queue. Stored under ``sync_status", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L25", + "id": "constants_enums_rationale_25", + "community": 29, + "norm_label": "state machine for an item in the nas sync queue. stored under ``sync_status" + }, + { + "label": "Validator severity tier. Backend Spec \u00a78.1.6.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L42", + "id": "constants_enums_rationale_42", + "community": 115, + "norm_label": "validator severity tier. backend spec \u00a78.1.6." + }, + { + "label": "Closed set of validator problem classes. Backend Spec \u00a78.1. Values are the", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L49", + "id": "constants_enums_rationale_49", + "community": 29, + "norm_label": "closed set of validator problem classes. backend spec \u00a78.1. values are the" + }, + { + "label": "What kind of artefact a validator finding refers to. Used for grouping find", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L66", + "id": "constants_enums_rationale_66", + "community": 29, + "norm_label": "what kind of artefact a validator finding refers to. used for grouping find" + }, + { + "label": "High-level Copier-template category. Backend Spec \u00a75.2.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L77", + "id": "constants_enums_rationale_77", + "community": 288, + "norm_label": "high-level copier-template category. backend spec \u00a75.2." + }, + { + "label": "Run-scope tag declared in a run template's ``_exlab_run_scope``. Backend Sp", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L85", + "id": "constants_enums_rationale_85", + "community": 288, + "norm_label": "run-scope tag declared in a run template's ``_exlab_run_scope``. backend sp" + }, + { + "label": "Project status as returned by the LIMS REST API. The wire format is PascalC", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L96", + "id": "constants_enums_rationale_96", + "community": 29, + "norm_label": "project status as returned by the lims rest api. the wire format is pascalc" + }, + { + "label": "Origin of a LIMS project row presented to the UI. Backend Spec \u00a711.3.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L110", + "id": "constants_enums_rationale_110", + "community": 29, + "norm_label": "origin of a lims project row presented to the ui. backend spec \u00a711.3." + }, + { + "label": "Derived run-level rollup of a run's per-file NAS sync progress. Operator-fr", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L118", + "id": "constants_enums_rationale_118", + "community": 70, + "norm_label": "derived run-level rollup of a run's per-file nas sync progress. operator-fr" + }, + { + "label": "First-run / setup-readiness state used by the launcher. Backend Spec \u00a74.9.1", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L138", + "id": "constants_enums_rationale_138", + "community": 29, + "norm_label": "first-run / setup-readiness state used by the launcher. backend spec \u00a74.9.1" + }, + { + "label": "NAS sync transport. Backend Spec \u00a77.1.3. Both supported transports are pass", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L160", + "id": "constants_enums_rationale_160", + "community": 29, + "norm_label": "nas sync transport. backend spec \u00a77.1.3. both supported transports are pass" + }, + { + "label": "Per-equipment sync role. GUI/Orchestrator Redesign Spec \u00a73.2. Replaces the", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L174", + "id": "constants_enums_rationale_174", + "community": 29, + "norm_label": "per-equipment sync role. gui/orchestrator redesign spec \u00a73.2. replaces the" + }, + { + "label": "How NAS staging directories are eventually purged. Backend Spec \u00a713.7.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L188", + "id": "constants_enums_rationale_188", + "community": 29, + "norm_label": "how nas staging directories are eventually purged. backend spec \u00a713.7." + }, + { + "label": "Plugin invocation outcome reported by the host. Backend Spec \u00a76.2.4.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L195", + "id": "constants_enums_rationale_195", + "community": 15, + "norm_label": "plugin invocation outcome reported by the host. backend spec \u00a76.2.4." + }, + { + "label": "Whether a creation.json describes a project root or a run directory. Stored", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L205", + "id": "constants_enums_rationale_205", + "community": 29, + "norm_label": "whether a creation.json describes a project root or a run directory. stored" + }, + { + "label": "How the orchestrator delivered run data to the staging area. Distinct from", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L215", + "id": "constants_enums_rationale_215", + "community": 29, + "norm_label": "how the orchestrator delivered run data to the staging area. distinct from" + }, + { + "label": "Allowed input types for README field declarations. Backend Spec \u00a710.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L226", + "id": "constants_enums_rationale_226", + "community": 29, + "norm_label": "allowed input types for readme field declarations. backend spec \u00a710." + }, + { + "label": "Day-of-week values for NAS sync bandwidth windows. Backend Spec \u00a77.1.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L236", + "id": "constants_enums_rationale_236", + "community": 29, + "norm_label": "day-of-week values for nas sync bandwidth windows. backend spec \u00a77.1." + }, + { + "label": "Whether a wizard session creates a project root or a run directory. Mirrors", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L248", + "id": "constants_enums_rationale_248", + "community": 29, + "norm_label": "whether a wizard session creates a project root or a run directory. mirrors" + }, + { + "label": "Outcome of a session-store transition. Backend Spec \u00a74.7.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L260", + "id": "constants_enums_rationale_260", + "community": 29, + "norm_label": "outcome of a session-store transition. backend spec \u00a74.7." + }, + { + "label": "Kind discriminator for validator audit scopes. Backend Spec \u00a78.1. Values ma", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L267", + "id": "constants_enums_rationale_267", + "community": 29, + "norm_label": "kind discriminator for validator audit scopes. backend spec \u00a78.1. values ma" + }, + { + "label": "Result of classifying a directory in the validator engine. Used internally", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L280", + "id": "constants_enums_rationale_280", + "community": 29, + "norm_label": "result of classifying a directory in the validator engine. used internally" + }, + { + "label": "Normalized platform tag used for OS-conditional path dispatch.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L297", + "id": "constants_enums_rationale_297", + "community": 29, + "norm_label": "normalized platform tag used for os-conditional path dispatch." + }, + { + "label": "Next action returned by ``paths.setup_state_next_action``. Backend Spec \u00a74.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L305", + "id": "constants_enums_rationale_305", + "community": 29, + "norm_label": "next action returned by ``paths.setup_state_next_action``. backend spec \u00a74." + }, + { + "label": "In-process state of a NAS sync job handle as observed by callers. Distinct", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L319", + "id": "constants_enums_rationale_319", + "community": 29, + "norm_label": "in-process state of a nas sync job handle as observed by callers. distinct" + }, + { + "label": "Origin of a plugin record. Backend Spec \u00a76.1.1.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L331", + "id": "constants_enums_rationale_331", + "community": 29, + "norm_label": "origin of a plugin record. backend spec \u00a76.1.1." + }, + { + "label": "UI-layer project status displayed in the tree view. Distinct from :class:`L", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L338", + "id": "constants_enums_rationale_338", + "community": 70, + "norm_label": "ui-layer project status displayed in the tree view. distinct from :class:`l" + }, + { + "label": "patterns.py", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/patterns.py", + "source_location": "L1", + "id": "src_exlab_wizard_constants_patterns_py", + "community": 410, + "norm_label": "patterns.py" + }, + { + "label": "Regex patterns and filename-rule literals used by validators. Each regex is pro", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/patterns.py", + "source_location": "L1", + "id": "constants_patterns_rationale_1", + "community": 410, + "norm_label": "regex patterns and filename-rule literals used by validators. each regex is pro" + }, + { + "label": "limits.py", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/limits.py", + "source_location": "L1", + "id": "src_exlab_wizard_constants_limits_py", + "community": 411, + "norm_label": "limits.py" + }, + { + "label": "Hard-coded numeric limits, timeouts, and policy ceilings. Every value here is c", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/limits.py", + "source_location": "L1", + "id": "constants_limits_rationale_1", + "community": 411, + "norm_label": "hard-coded numeric limits, timeouts, and policy ceilings. every value here is c" + }, + { + "label": "filenames.py", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/filenames.py", + "source_location": "L1", + "id": "src_exlab_wizard_constants_filenames_py", + "community": 412, + "norm_label": "filenames.py" + }, + { + "label": "Canonical filenames and on-disk path fragments used throughout the app. All val", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/filenames.py", + "source_location": "L1", + "id": "constants_filenames_rationale_1", + "community": 412, + "norm_label": "canonical filenames and on-disk path fragments used throughout the app. all val" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_constants_init_py", + "community": 328, + "norm_label": "__init__.py" + }, + { + "label": "keyring.py", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/keyring.py", + "source_location": "L1", + "id": "src_exlab_wizard_constants_keyring_py", + "community": 74, + "norm_label": "keyring.py" + }, + { + "label": "keyring_nas_username()", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/keyring.py", + "source_location": "L26", + "id": "constants_keyring_keyring_nas_username", + "community": 74, + "norm_label": "keyring_nas_username()" + }, + { + "label": "OS-keyring service/username conventions used for credential storage. The wizard", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/keyring.py", + "source_location": "L1", + "id": "constants_keyring_rationale_1", + "community": 74, + "norm_label": "os-keyring service/username conventions used for credential storage. the wizard" + }, + { + "label": "Return the keyring username for the given equipment's NAS credential. Equip", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/keyring.py", + "source_location": "L27", + "id": "constants_keyring_rationale_27", + "community": 74, + "norm_label": "return the keyring username for the given equipment's nas credential. equip" + }, + { + "label": "app.py", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/app.py", + "source_location": "L1", + "id": "src_exlab_wizard_constants_app_py", + "community": 413, + "norm_label": "app.py" + }, + { + "label": "App-level identifiers used as path / keyring / branding fragments. Single sourc", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/app.py", + "source_location": "L1", + "id": "constants_app_rationale_1", + "community": 413, + "norm_label": "app-level identifiers used as path / keyring / branding fragments. single sourc" + }, + { + "label": "schema_versions.py", + "file_type": "code", + "source_file": "src/exlab_wizard/constants/schema_versions.py", + "source_location": "L1", + "id": "src_exlab_wizard_constants_schema_versions_py", + "community": 414, + "norm_label": "schema_versions.py" + }, + { + "label": "Schema version pins for every JSON/YAML artifact the wizard reads or writes. Ev", + "file_type": "rationale", + "source_file": "src/exlab_wizard/constants/schema_versions.py", + "source_location": "L1", + "id": "constants_schema_versions_rationale_1", + "community": 414, + "norm_label": "schema version pins for every json/yaml artifact the wizard reads or writes. ev" + }, + { + "label": "json_files.py", + "file_type": "code", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L1", + "id": "src_exlab_wizard_io_json_files_py", + "community": 92, + "norm_label": "json_files.py" + }, + { + "label": "require_schema_major()", + "file_type": "code", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L28", + "id": "io_json_files_require_schema_major", + "community": 92, + "norm_label": "require_schema_major()" + }, + { + "label": "read_msgspec_json()", + "file_type": "code", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L53", + "id": "io_json_files_read_msgspec_json", + "community": 92, + "norm_label": "read_msgspec_json()" + }, + { + "label": "read_msgspec_json_raw()", + "file_type": "code", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L73", + "id": "io_json_files_read_msgspec_json_raw", + "community": 92, + "norm_label": "read_msgspec_json_raw()" + }, + { + "label": "_peek_and_check_major()", + "file_type": "code", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L94", + "id": "io_json_files_peek_and_check_major", + "community": 92, + "norm_label": "_peek_and_check_major()" + }, + { + "label": "msgspec JSON readers with optional schema-major gating. Centralizes the ``path.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L1", + "id": "io_json_files_rationale_1", + "community": 92, + "norm_label": "msgspec json readers with optional schema-major gating. centralizes the ``path." + }, + { + "label": "Raise ``SchemaMajorMismatchError`` when ``version`` is a different major. B", + "file_type": "rationale", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L29", + "id": "io_json_files_rationale_29", + "community": 92, + "norm_label": "raise ``schemamajormismatcherror`` when ``version`` is a different major. b" + }, + { + "label": "Read ``path`` and decode it as ``type_``, optionally gating on major. When", + "file_type": "rationale", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L59", + "id": "io_json_files_rationale_59", + "community": 92, + "norm_label": "read ``path`` and decode it as ``type_``, optionally gating on major. when" + }, + { + "label": "Two-pass read returning the raw dict for migration-default patching. Some r", + "file_type": "rationale", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L78", + "id": "io_json_files_rationale_78", + "community": 92, + "norm_label": "two-pass read returning the raw dict for migration-default patching. some r" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/io/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_io_init_py", + "community": 415, + "norm_label": "__init__.py" + }, + { + "label": "Filesystem I/O helpers shared across the codebase. Backend Spec \u00a74.4 (file IO d", + "file_type": "rationale", + "source_file": "src/exlab_wizard/io/__init__.py", + "source_location": "L1", + "id": "io_init_rationale_1", + "community": 415, + "norm_label": "filesystem i/o helpers shared across the codebase. backend spec \u00a74.4 (file io d" + }, + { + "label": "atomic_write.py", + "file_type": "code", + "source_file": "src/exlab_wizard/io/atomic_write.py", + "source_location": "L1", + "id": "src_exlab_wizard_io_atomic_write_py", + "community": 210, + "norm_label": "atomic_write.py" + }, + { + "label": "atomic_write_bytes()", + "file_type": "code", + "source_file": "src/exlab_wizard/io/atomic_write.py", + "source_location": "L21", + "id": "io_atomic_write_atomic_write_bytes", + "community": 210, + "norm_label": "atomic_write_bytes()" + }, + { + "label": "Atomic file writes via the \u00a74.4.5 temp-file + ``os.replace`` recipe. This is th", + "file_type": "rationale", + "source_file": "src/exlab_wizard/io/atomic_write.py", + "source_location": "L1", + "id": "io_atomic_write_rationale_1", + "community": 210, + "norm_label": "atomic file writes via the \u00a74.4.5 temp-file + ``os.replace`` recipe. this is th" + }, + { + "label": "Write ``data`` to ``path`` atomically. Implementation follows the \u00a74.4.5 re", + "file_type": "rationale", + "source_file": "src/exlab_wizard/io/atomic_write.py", + "source_location": "L22", + "id": "io_atomic_write_rationale_22", + "community": 210, + "norm_label": "write ``data`` to ``path`` atomically. implementation follows the \u00a74.4.5 re" + }, + { + "label": "yaml_files.py", + "file_type": "code", + "source_file": "src/exlab_wizard/io/yaml_files.py", + "source_location": "L1", + "id": "src_exlab_wizard_io_yaml_files_py", + "community": 3, + "norm_label": "yaml_files.py" + }, + { + "label": "load_yaml_manifest()", + "file_type": "code", + "source_file": "src/exlab_wizard/io/yaml_files.py", + "source_location": "L20", + "id": "io_yaml_files_load_yaml_manifest", + "community": 3, + "norm_label": "load_yaml_manifest()" + }, + { + "label": "Shared YAML manifest reader (PyYAML safe-load). Used for read-only manifests wh", + "file_type": "rationale", + "source_file": "src/exlab_wizard/io/yaml_files.py", + "source_location": "L1", + "id": "io_yaml_files_rationale_1", + "community": 3, + "norm_label": "shared yaml manifest reader (pyyaml safe-load). used for read-only manifests wh" + }, + { + "label": "Read and ``safe_load`` a YAML manifest into a plain dict. Raises ``FileNotF", + "file_type": "rationale", + "source_file": "src/exlab_wizard/io/yaml_files.py", + "source_location": "L21", + "id": "io_yaml_files_rationale_21", + "community": 3, + "norm_label": "read and ``safe_load`` a yaml manifest into a plain dict. raises ``filenotf" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/template/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_template_init_py", + "community": 330, + "norm_label": "__init__.py" + }, + { + "label": "copier_driver.py", + "file_type": "code", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L1", + "id": "src_exlab_wizard_template_copier_driver_py", + "community": 38, + "norm_label": "copier_driver.py" + }, + { + "label": "ResolvedTemplate", + "file_type": "code", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L60", + "id": "template_copier_driver_resolvedtemplate", + "community": 6, + "norm_label": "resolvedtemplate" + }, + { + "label": "RenderResult", + "file_type": "code", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L95", + "id": "template_copier_driver_renderresult", + "community": 6, + "norm_label": "renderresult" + }, + { + "label": "TemplateEngine", + "file_type": "code", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L109", + "id": "template_copier_driver_templateengine", + "community": 38, + "norm_label": "templateengine" + }, + { + "label": ".resolve()", + "file_type": "code", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L112", + "id": "template_copier_driver_templateengine_resolve", + "community": 288, + "norm_label": ".resolve()" + }, + { + "label": "_extract_readme_fields()", + "file_type": "code", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L228", + "id": "template_copier_driver_extract_readme_fields", + "community": 38, + "norm_label": "_extract_readme_fields()" + }, + { + "label": ".render()", + "file_type": "code", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L257", + "id": "template_copier_driver_templateengine_render", + "community": 38, + "norm_label": ".render()" + }, + { + "label": "_snapshot_files()", + "file_type": "code", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L307", + "id": "template_copier_driver_snapshot_files", + "community": 38, + "norm_label": "_snapshot_files()" + }, + { + "label": "Copier template-engine wrapper. Backend Spec \u00a74.4.2 / \u00a75. This module wraps Cop", + "file_type": "rationale", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L1", + "id": "template_copier_driver_rationale_1", + "community": 38, + "norm_label": "copier template-engine wrapper. backend spec \u00a74.4.2 / \u00a75. this module wraps cop" + }, + { + "label": "A loaded template's metadata. Backend Spec \u00a75.2. Attributes: name:", + "file_type": "rationale", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L61", + "id": "template_copier_driver_rationale_61", + "community": 6, + "norm_label": "a loaded template's metadata. backend spec \u00a75.2. attributes: name:" + }, + { + "label": "Outcome of a render call. Attributes: dst_path: The absolute destin", + "file_type": "rationale", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L96", + "id": "template_copier_driver_rationale_96", + "community": 6, + "norm_label": "outcome of a render call. attributes: dst_path: the absolute destin" + }, + { + "label": "Wraps the Copier Python API behind the \u00a74.4.2 contract.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L110", + "id": "template_copier_driver_rationale_110", + "community": 38, + "norm_label": "wraps the copier python api behind the \u00a74.4.2 contract." + }, + { + "label": "Load + validate a template's ``copier.yml``. Args: template", + "file_type": "rationale", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L113", + "id": "template_copier_driver_rationale_113", + "community": 288, + "norm_label": "load + validate a template's ``copier.yml``. args: template" + }, + { + "label": "Pull ``_exlab_readme.fields`` and reject core-field collisions. Tolerat", + "file_type": "rationale", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L231", + "id": "template_copier_driver_rationale_231", + "community": 513, + "norm_label": "pull ``_exlab_readme.fields`` and reject core-field collisions. tolerat" + }, + { + "label": "Render the template into ``dst`` via Copier. Args: tpl: A p", + "file_type": "rationale", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L263", + "id": "template_copier_driver_rationale_263", + "community": 38, + "norm_label": "render the template into ``dst`` via copier. args: tpl: a p" + }, + { + "label": "Return the set of regular files under ``root`` (recursively). Returns the e", + "file_type": "rationale", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L308", + "id": "template_copier_driver_rationale_308", + "community": 38, + "norm_label": "return the set of regular files under ``root`` (recursively). returns the e" + }, + { + "label": "time.py", + "file_type": "code", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L1", + "id": "src_exlab_wizard_utils_time_py", + "community": 90, + "norm_label": "time.py" + }, + { + "label": "utc_now()", + "file_type": "code", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L28", + "id": "utils_time_utc_now", + "community": 5, + "norm_label": "utc_now()" + }, + { + "label": "utc_now_or()", + "file_type": "code", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L39", + "id": "utils_time_utc_now_or", + "community": 230, + "norm_label": "utc_now_or()" + }, + { + "label": "utc_now_iso()", + "file_type": "code", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L49", + "id": "utils_time_utc_now_iso", + "community": 90, + "norm_label": "utc_now_iso()" + }, + { + "label": "dt_to_iso()", + "file_type": "code", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L58", + "id": "utils_time_dt_to_iso", + "community": 90, + "norm_label": "dt_to_iso()" + }, + { + "label": "parse_utc_iso()", + "file_type": "code", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L69", + "id": "utils_time_parse_utc_iso", + "community": 90, + "norm_label": "parse_utc_iso()" + }, + { + "label": "parse_utc_iso_or_none()", + "file_type": "code", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L84", + "id": "utils_time_parse_utc_iso_or_none", + "community": 90, + "norm_label": "parse_utc_iso_or_none()" + }, + { + "label": "UTC ISO-8601 timestamp helpers. Backend Spec \u00a713.4 fixes the wire format used i", + "file_type": "rationale", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L1", + "id": "utils_time_rationale_1", + "community": 90, + "norm_label": "utc iso-8601 timestamp helpers. backend spec \u00a713.4 fixes the wire format used i" + }, + { + "label": "Return the current UTC time as a timezone-aware ``datetime``. Use this when", + "file_type": "rationale", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L29", + "id": "utils_time_rationale_29", + "community": 5, + "norm_label": "return the current utc time as a timezone-aware ``datetime``. use this when" + }, + { + "label": "Return ``dt`` when supplied, otherwise the current UTC time. Mirrors the ``", + "file_type": "rationale", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L40", + "id": "utils_time_rationale_40", + "community": 230, + "norm_label": "return ``dt`` when supplied, otherwise the current utc time. mirrors the ``" + }, + { + "label": "Return the current UTC time as ``YYYY-MM-DDTHH:MM:SSZ``. Seconds-resolution", + "file_type": "rationale", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L50", + "id": "utils_time_rationale_50", + "community": 90, + "norm_label": "return the current utc time as ``yyyy-mm-ddthh:mm:ssz``. seconds-resolution" + }, + { + "label": "Format a UTC-aware ``datetime`` as ``YYYY-MM-DDTHH:MM:SSZ``. Naive datetime", + "file_type": "rationale", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L59", + "id": "utils_time_rationale_59", + "community": 90, + "norm_label": "format a utc-aware ``datetime`` as ``yyyy-mm-ddthh:mm:ssz``. naive datetime" + }, + { + "label": "Parse an ISO-8601 string into a UTC-aware ``datetime``. Accepts both the ca", + "file_type": "rationale", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L70", + "id": "utils_time_rationale_70", + "community": 90, + "norm_label": "parse an iso-8601 string into a utc-aware ``datetime``. accepts both the ca" + }, + { + "label": "Like :func:`parse_utc_iso` but returns ``None`` on missing or bad input. Us", + "file_type": "rationale", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L85", + "id": "utils_time_rationale_85", + "community": 90, + "norm_label": "like :func:`parse_utc_iso` but returns ``none`` on missing or bad input. us" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/utils/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_utils_init_py", + "community": 416, + "norm_label": "__init__.py" + }, + { + "label": "Generic, dependency-free helpers used across the codebase. Backend Spec \u00a713.4 (", + "file_type": "rationale", + "source_file": "src/exlab_wizard/utils/__init__.py", + "source_location": "L1", + "id": "utils_init_rationale_1", + "community": 416, + "norm_label": "generic, dependency-free helpers used across the codebase. backend spec \u00a713.4 (" + }, + { + "label": "state.py", + "file_type": "code", + "source_file": "src/exlab_wizard/utils/state.py", + "source_location": "L1", + "id": "src_exlab_wizard_utils_state_py", + "community": 16, + "norm_label": "state.py" + }, + { + "label": "assert_forward_transition()", + "file_type": "code", + "source_file": "src/exlab_wizard/utils/state.py", + "source_location": "L14", + "id": "utils_state_assert_forward_transition", + "community": 16, + "norm_label": "assert_forward_transition()" + }, + { + "label": "Generic forward-transition guard for closed-set state machines. Used by both th", + "file_type": "rationale", + "source_file": "src/exlab_wizard/utils/state.py", + "source_location": "L1", + "id": "utils_state_rationale_1", + "community": 16, + "norm_label": "generic forward-transition guard for closed-set state machines. used by both th" + }, + { + "label": "Raise ``ValueError`` when ``current -> new_state`` is not in ``table``. ``t", + "file_type": "rationale", + "source_file": "src/exlab_wizard/utils/state.py", + "source_location": "L19", + "id": "utils_state_rationale_19", + "community": 16, + "norm_label": "raise ``valueerror`` when ``current -> new_state`` is not in ``table``. ``t" + }, + { + "label": "icon.py", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L1", + "id": "src_exlab_wizard_tray_icon_py", + "community": 81, + "norm_label": "icon.py" + }, + { + "label": "default_icon_image()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L39", + "id": "tray_icon_default_icon_image", + "community": 81, + "norm_label": "default_icon_image()" + }, + { + "label": "build_icon()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L58", + "id": "tray_icon_build_icon", + "community": 81, + "norm_label": "build_icon()" + }, + { + "label": "_import_pystray()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L94", + "id": "tray_icon_import_pystray", + "community": 81, + "norm_label": "_import_pystray()" + }, + { + "label": "_safe_call()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L101", + "id": "tray_icon_safe_call", + "community": 81, + "norm_label": "_safe_call()" + }, + { + "label": "pystray icon construction. Backend Spec \u00a74.3.2. The tray icon's menu has three", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L1", + "id": "tray_icon_rationale_1", + "community": 81, + "norm_label": "pystray icon construction. backend spec \u00a74.3.2. the tray icon's menu has three" + }, + { + "label": "Return a small PIL.Image used as the tray icon bitmap. Imported lazily so t", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L40", + "id": "tray_icon_rationale_40", + "community": 81, + "norm_label": "return a small pil.image used as the tray icon bitmap. imported lazily so t" + }, + { + "label": "Build the pystray icon with the \u00a74.1 menu. ``status_provider`` is invoked e", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L68", + "id": "tray_icon_rationale_68", + "community": 81, + "norm_label": "build the pystray icon with the \u00a74.1 menu. ``status_provider`` is invoked e" + }, + { + "label": "Lazy import so unit tests on headless hosts can mock pystray.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L95", + "id": "tray_icon_rationale_95", + "community": 81, + "norm_label": "lazy import so unit tests on headless hosts can mock pystray." + }, + { + "label": "Invoke a menu callback; log + swallow exceptions. The pystray menu handler", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L102", + "id": "tray_icon_rationale_102", + "community": 81, + "norm_label": "invoke a menu callback; log + swallow exceptions. the pystray menu handler" + }, + { + "label": "server_runner.py", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L1", + "id": "src_exlab_wizard_tray_server_runner_py", + "community": 58, + "norm_label": "server_runner.py" + }, + { + "label": "pick_free_port()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L41", + "id": "tray_server_runner_pick_free_port", + "community": 58, + "norm_label": "pick_free_port()" + }, + { + "label": "ServerRunner", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L55", + "id": "tray_server_runner_serverrunner", + "community": 58, + "norm_label": "serverrunner" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L61", + "id": "tray_server_runner_serverrunner_init", + "community": 58, + "norm_label": ".__init__()" + }, + { + "label": ".start()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L75", + "id": "tray_server_runner_serverrunner_start", + "community": 58, + "norm_label": ".start()" + }, + { + "label": ".stop()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L103", + "id": "tray_server_runner_serverrunner_stop", + "community": 58, + "norm_label": ".stop()" + }, + { + "label": "port()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L124", + "id": "tray_server_runner_port", + "community": 58, + "norm_label": "port()" + }, + { + "label": "is_running()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L135", + "id": "tray_server_runner_is_running", + "community": 58, + "norm_label": "is_running()" + }, + { + "label": "state_file()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L142", + "id": "tray_server_runner_state_file", + "community": 58, + "norm_label": "state_file()" + }, + { + "label": "._build_uvicorn()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L150", + "id": "tray_server_runner_serverrunner_build_uvicorn", + "community": 58, + "norm_label": "._build_uvicorn()" + }, + { + "label": "._write_state_file()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L170", + "id": "tray_server_runner_serverrunner_write_state_file", + "community": 58, + "norm_label": "._write_state_file()" + }, + { + "label": "._delete_state_file()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L183", + "id": "tray_server_runner_serverrunner_delete_state_file", + "community": 58, + "norm_label": "._delete_state_file()" + }, + { + "label": "Programmatic uvicorn launcher with atomic ``server.json`` writes. Backend Spec \u00a7", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L1", + "id": "tray_server_runner_rationale_1", + "community": 58, + "norm_label": "programmatic uvicorn launcher with atomic ``server.json`` writes. backend spec \u00a7" + }, + { + "label": "Return a free localhost port from the OS. Binds a SOCK_STREAM socket to ``(", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L42", + "id": "tray_server_runner_rationale_42", + "community": 58, + "norm_label": "return a free localhost port from the os. binds a sock_stream socket to ``(" + }, + { + "label": "Starts uvicorn on a free localhost port and tracks its state file. Backend", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L56", + "id": "tray_server_runner_rationale_56", + "community": 58, + "norm_label": "starts uvicorn on a free localhost port and tracks its state file. backend" + }, + { + "label": "Pick a port, launch uvicorn in a worker thread, write server.json. Retu", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L76", + "id": "tray_server_runner_rationale_76", + "community": 58, + "norm_label": "pick a port, launch uvicorn in a worker thread, write server.json. retu" + }, + { + "label": "Signal uvicorn to exit, join the worker thread, delete server.json. Ide", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L104", + "id": "tray_server_runner_rationale_104", + "community": 58, + "norm_label": "signal uvicorn to exit, join the worker thread, delete server.json. ide" + }, + { + "label": "Return the port the server is bound to. Raises ``RuntimeError`` when ca", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L125", + "id": "tray_server_runner_rationale_125", + "community": 514, + "norm_label": "return the port the server is bound to. raises ``runtimeerror`` when ca" + }, + { + "label": "Return ``True`` while the worker thread is alive.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L136", + "id": "tray_server_runner_rationale_136", + "community": 515, + "norm_label": "return ``true`` while the worker thread is alive." + }, + { + "label": "Return the absolute path of the ``server.json`` state file.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L143", + "id": "tray_server_runner_rationale_143", + "community": 516, + "norm_label": "return the absolute path of the ``server.json`` state file." + }, + { + "label": "Return ``(uvicorn.Config, uvicorn.Server)`` for the given port. Split o", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L151", + "id": "tray_server_runner_rationale_151", + "community": 58, + "norm_label": "return ``(uvicorn.config, uvicorn.server)`` for the given port. split o" + }, + { + "label": "Atomically write ``server.json``. Backend Spec \u00a74.4.5 idiom.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L171", + "id": "tray_server_runner_rationale_171", + "community": 58, + "norm_label": "atomically write ``server.json``. backend spec \u00a74.4.5 idiom." + }, + { + "label": "Best-effort delete; missing file is fine.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L184", + "id": "tray_server_runner_rationale_184", + "community": 58, + "norm_label": "best-effort delete; missing file is fine." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_tray_init_py", + "community": 331, + "norm_label": "__init__.py" + }, + { + "label": "autostart.py", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L1", + "id": "src_exlab_wizard_tray_autostart_py", + "community": 170, + "norm_label": "autostart.py" + }, + { + "label": "AutostartManager", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L54", + "id": "tray_autostart_autostartmanager", + "community": 50, + "norm_label": "autostartmanager" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L70", + "id": "tray_autostart_autostartmanager_init", + "community": 170, + "norm_label": ".__init__()" + }, + { + "label": ".is_registered()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L93", + "id": "tray_autostart_autostartmanager_is_registered", + "community": 50, + "norm_label": ".is_registered()" + }, + { + "label": ".register()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L103", + "id": "tray_autostart_autostartmanager_register", + "community": 50, + "norm_label": ".register()" + }, + { + "label": ".unregister()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L113", + "id": "tray_autostart_autostartmanager_unregister", + "community": 50, + "norm_label": ".unregister()" + }, + { + "label": "executable_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L125", + "id": "tray_autostart_executable_path", + "community": 170, + "norm_label": "executable_path()" + }, + { + "label": "platform()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L130", + "id": "tray_autostart_platform", + "community": 170, + "norm_label": "platform()" + }, + { + "label": "._plist_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L138", + "id": "tray_autostart_autostartmanager_plist_path", + "community": 50, + "norm_label": "._plist_path()" + }, + { + "label": "._write_plist()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L141", + "id": "tray_autostart_autostartmanager_write_plist", + "community": 50, + "norm_label": "._write_plist()" + }, + { + "label": "._systemd_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L151", + "id": "tray_autostart_autostartmanager_systemd_path", + "community": 50, + "norm_label": "._systemd_path()" + }, + { + "label": "._desktop_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L154", + "id": "tray_autostart_autostartmanager_desktop_path", + "community": 50, + "norm_label": "._desktop_path()" + }, + { + "label": "._register_linux()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L157", + "id": "tray_autostart_autostartmanager_register_linux", + "community": 50, + "norm_label": "._register_linux()" + }, + { + "label": "._write_systemd_unit()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L163", + "id": "tray_autostart_autostartmanager_write_systemd_unit", + "community": 50, + "norm_label": "._write_systemd_unit()" + }, + { + "label": "._write_desktop_file()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L168", + "id": "tray_autostart_autostartmanager_write_desktop_file", + "community": 170, + "norm_label": "._write_desktop_file()" + }, + { + "label": "._set_win_reg_value()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L177", + "id": "tray_autostart_autostartmanager_set_win_reg_value", + "community": 50, + "norm_label": "._set_win_reg_value()" + }, + { + "label": "._delete_win_reg_value()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L183", + "id": "tray_autostart_autostartmanager_delete_win_reg_value", + "community": 50, + "norm_label": "._delete_win_reg_value()" + }, + { + "label": "._win_reg_value()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L193", + "id": "tray_autostart_autostartmanager_win_reg_value", + "community": 50, + "norm_label": "._win_reg_value()" + }, + { + "label": "_render_plist()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L210", + "id": "tray_autostart_render_plist", + "community": 170, + "norm_label": "_render_plist()" + }, + { + "label": "_render_systemd_unit()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L236", + "id": "tray_autostart_render_systemd_unit", + "community": 50, + "norm_label": "_render_systemd_unit()" + }, + { + "label": "_render_desktop_file()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L251", + "id": "tray_autostart_render_desktop_file", + "community": 170, + "norm_label": "_render_desktop_file()" + }, + { + "label": "_detect_platform()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L268", + "id": "tray_autostart_detect_platform", + "community": 170, + "norm_label": "_detect_platform()" + }, + { + "label": "_silently_unlink()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L276", + "id": "tray_autostart_silently_unlink", + "community": 170, + "norm_label": "_silently_unlink()" + }, + { + "label": "_import_winreg()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L281", + "id": "tray_autostart_import_winreg", + "community": 50, + "norm_label": "_import_winreg()" + }, + { + "label": "Per-platform autostart registration. Backend Spec \u00a74.3.2 + \u00a715.7. Registers ``E", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L1", + "id": "tray_autostart_rationale_1", + "community": 170, + "norm_label": "per-platform autostart registration. backend spec \u00a74.3.2 + \u00a715.7. registers ``e" + }, + { + "label": "Per-platform autostart register / unregister / is_registered. Construction-", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L55", + "id": "tray_autostart_rationale_55", + "community": 50, + "norm_label": "per-platform autostart register / unregister / is_registered. construction-" + }, + { + "label": "Return True iff a per-platform autostart record exists.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L94", + "id": "tray_autostart_rationale_94", + "community": 50, + "norm_label": "return true iff a per-platform autostart record exists." + }, + { + "label": "Create the per-platform autostart record. Idempotent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L104", + "id": "tray_autostart_rationale_104", + "community": 50, + "norm_label": "create the per-platform autostart record. idempotent." + }, + { + "label": "Remove the per-platform autostart record. Idempotent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L114", + "id": "tray_autostart_rationale_114", + "community": 50, + "norm_label": "remove the per-platform autostart record. idempotent." + }, + { + "label": "Return the absolute path the autostart record points at.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L126", + "id": "tray_autostart_rationale_126", + "community": 517, + "norm_label": "return the absolute path the autostart record points at." + }, + { + "label": "Return the platform dispatch this manager is configured for.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L131", + "id": "tray_autostart_rationale_131", + "community": 518, + "norm_label": "return the platform dispatch this manager is configured for." + }, + { + "label": "Return the macOS LaunchAgent plist body. Backend Spec \u00a715.7.1.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L211", + "id": "tray_autostart_rationale_211", + "community": 170, + "norm_label": "return the macos launchagent plist body. backend spec \u00a715.7.1." + }, + { + "label": "Return the Linux systemd-user unit body. Backend Spec \u00a715.7.1.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L237", + "id": "tray_autostart_rationale_237", + "community": 50, + "norm_label": "return the linux systemd-user unit body. backend spec \u00a715.7.1." + }, + { + "label": "Return the XDG ``.desktop`` autostart body. Backend Spec \u00a715.7.1.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L252", + "id": "tray_autostart_rationale_252", + "community": 170, + "norm_label": "return the xdg ``.desktop`` autostart body. backend spec \u00a715.7.1." + }, + { + "label": "Import ``winreg`` lazily so the module loads on macOS / Linux too. Returns", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L282", + "id": "tray_autostart_rationale_282", + "community": 50, + "norm_label": "import ``winreg`` lazily so the module loads on macos / linux too. returns" + }, + { + "label": "quit_coordinator.py", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L1", + "id": "src_exlab_wizard_tray_quit_coordinator_py", + "community": 44, + "norm_label": "quit_coordinator.py" + }, + { + "label": "QuitCoordinator", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L49", + "id": "tray_quit_coordinator_quitcoordinator", + "community": 44, + "norm_label": "quitcoordinator" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L57", + "id": "tray_quit_coordinator_quitcoordinator_init", + "community": 44, + "norm_label": ".__init__()" + }, + { + "label": ".quit()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L82", + "id": "tray_quit_coordinator_quitcoordinator_quit", + "community": 44, + "norm_label": ".quit()" + }, + { + "label": "._is_idle()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L112", + "id": "tray_quit_coordinator_quitcoordinator_is_idle", + "community": 44, + "norm_label": "._is_idle()" + }, + { + "label": "._wait_for_idle()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L125", + "id": "tray_quit_coordinator_quitcoordinator_wait_for_idle", + "community": 44, + "norm_label": "._wait_for_idle()" + }, + { + "label": "._prompt_force_quit()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L147", + "id": "tray_quit_coordinator_quitcoordinator_prompt_force_quit", + "community": 44, + "norm_label": "._prompt_force_quit()" + }, + { + "label": "_safe_count()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L163", + "id": "tray_quit_coordinator_safe_count", + "community": 44, + "norm_label": "_safe_count()" + }, + { + "label": "Graceful tray shutdown coordinator. Backend Spec \u00a74.3.2. Steps documented in \u00a74", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L1", + "id": "tray_quit_coordinator_rationale_1", + "community": 44, + "norm_label": "graceful tray shutdown coordinator. backend spec \u00a74.3.2. steps documented in \u00a74" + }, + { + "label": "Drive the \u00a74.3.2 graceful-shutdown protocol. Construction-time dependencies", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L50", + "id": "tray_quit_coordinator_rationale_50", + "community": 44, + "norm_label": "drive the \u00a74.3.2 graceful-shutdown protocol. construction-time dependencies" + }, + { + "label": "Run the graceful-shutdown protocol. ``sigterm=True`` reduces the wait w", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L83", + "id": "tray_quit_coordinator_rationale_83", + "community": 44, + "norm_label": "run the graceful-shutdown protocol. ``sigterm=true`` reduces the wait w" + }, + { + "label": "Return True iff the \u00a74.3.2 predicate holds. ``SessionStore.active_sessi", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L113", + "id": "tray_quit_coordinator_rationale_113", + "community": 44, + "norm_label": "return true iff the \u00a74.3.2 predicate holds. ``sessionstore.active_sessi" + }, + { + "label": "Poll :meth:`_is_idle` up to ``deadline_seconds`` seconds. Returns True", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L126", + "id": "tray_quit_coordinator_rationale_126", + "community": 44, + "norm_label": "poll :meth:`_is_idle` up to ``deadline_seconds`` seconds. returns true" + }, + { + "label": "Invoke the operator-facing force-quit prompt. Returns ``True`` to indic", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L148", + "id": "tray_quit_coordinator_rationale_148", + "community": 44, + "norm_label": "invoke the operator-facing force-quit prompt. returns ``true`` to indic" + }, + { + "label": "Return ``int(obj.)`` defensively. Falls through ``None``, missing att", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L164", + "id": "tray_quit_coordinator_rationale_164", + "community": 44, + "norm_label": "return ``int(obj.)`` defensively. falls through ``none``, missing att" + }, + { + "label": "window_launcher.py", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L1", + "id": "src_exlab_wizard_tray_window_launcher_py", + "community": 65, + "norm_label": "window_launcher.py" + }, + { + "label": "_resolve_window_executable()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L35", + "id": "tray_window_launcher_resolve_window_executable", + "community": 65, + "norm_label": "_resolve_window_executable()" + }, + { + "label": "WindowLauncher", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L55", + "id": "tray_window_launcher_windowlauncher", + "community": 65, + "norm_label": "windowlauncher" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L63", + "id": "tray_window_launcher_windowlauncher_init", + "community": 65, + "norm_label": ".__init__()" + }, + { + "label": ".open()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L77", + "id": "tray_window_launcher_windowlauncher_open", + "community": 65, + "norm_label": ".open()" + }, + { + "label": ".close()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L89", + "id": "tray_window_launcher_windowlauncher_close", + "community": 65, + "norm_label": ".close()" + }, + { + "label": "is_alive()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L103", + "id": "tray_window_launcher_is_alive", + "community": 65, + "norm_label": "is_alive()" + }, + { + "label": "pid()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L110", + "id": "tray_window_launcher_pid", + "community": 65, + "norm_label": "pid()" + }, + { + "label": "._argv()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L120", + "id": "tray_window_launcher_windowlauncher_argv", + "community": 65, + "norm_label": "._argv()" + }, + { + "label": "._focus_existing()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L126", + "id": "tray_window_launcher_windowlauncher_focus_existing", + "community": 65, + "norm_label": "._focus_existing()" + }, + { + "label": "Spawn / focus the on-demand window subprocess. Backend Spec \u00a74.3.2. The tray cl", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L1", + "id": "tray_window_launcher_rationale_1", + "community": 65, + "norm_label": "spawn / focus the on-demand window subprocess. backend spec \u00a74.3.2. the tray cl" + }, + { + "label": "Return the argv prefix for spawning ``exlab-wizard-window``. Resolution ord", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L36", + "id": "tray_window_launcher_rationale_36", + "community": 65, + "norm_label": "return the argv prefix for spawning ``exlab-wizard-window``. resolution ord" + }, + { + "label": "Spawn ``exlab-wizard-window`` as a subprocess, track its PID. On a re-open", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L56", + "id": "tray_window_launcher_rationale_56", + "community": 65, + "norm_label": "spawn ``exlab-wizard-window`` as a subprocess, track its pid. on a re-open" + }, + { + "label": "Spawn a window subprocess, or focus the existing one.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L78", + "id": "tray_window_launcher_rationale_78", + "community": 65, + "norm_label": "spawn a window subprocess, or focus the existing one." + }, + { + "label": "Terminate the live window subprocess, if any. Idempotent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L90", + "id": "tray_window_launcher_rationale_90", + "community": 65, + "norm_label": "terminate the live window subprocess, if any. idempotent." + }, + { + "label": "Return ``True`` while the window subprocess is running.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L104", + "id": "tray_window_launcher_rationale_104", + "community": 519, + "norm_label": "return ``true`` while the window subprocess is running." + }, + { + "label": "Return the live window's PID, or ``None`` if no window is up.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L111", + "id": "tray_window_launcher_rationale_111", + "community": 520, + "norm_label": "return the live window's pid, or ``none`` if no window is up." + }, + { + "label": "Return the argv to spawn the window subprocess.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L121", + "id": "tray_window_launcher_rationale_121", + "community": 65, + "norm_label": "return the argv to spawn the window subprocess." + }, + { + "label": "Best-effort raise/focus of the existing window. v1 logs the request; th", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L127", + "id": "tray_window_launcher_rationale_127", + "community": 65, + "norm_label": "best-effort raise/focus of the existing window. v1 logs the request; th" + }, + { + "label": "notifications.py", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L1", + "id": "src_exlab_wizard_tray_notifications_py", + "community": 32, + "norm_label": "notifications.py" + }, + { + "label": "notify()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L50", + "id": "tray_notifications_notify", + "community": 32, + "norm_label": "notify()" + }, + { + "label": "_default_notifier()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L70", + "id": "tray_notifications_default_notifier", + "community": 32, + "norm_label": "_default_notifier()" + }, + { + "label": "_noop_notifier()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L80", + "id": "tray_notifications_noop_notifier", + "community": 32, + "norm_label": "_noop_notifier()" + }, + { + "label": "_Bucket", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L90", + "id": "tray_notifications_bucket", + "community": 32, + "norm_label": "_bucket" + }, + { + "label": "NotificationBus", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L99", + "id": "tray_notifications_notificationbus", + "community": 32, + "norm_label": "notificationbus" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L108", + "id": "tray_notifications_notificationbus_init", + "community": 32, + "norm_label": ".__init__()" + }, + { + "label": ".emit()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L125", + "id": "tray_notifications_notificationbus_emit", + "community": 32, + "norm_label": ".emit()" + }, + { + "label": ".flush_pending()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L153", + "id": "tray_notifications_notificationbus_flush_pending", + "community": 32, + "norm_label": ".flush_pending()" + }, + { + "label": ".cancel_all()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L166", + "id": "tray_notifications_notificationbus_cancel_all", + "community": 32, + "norm_label": ".cancel_all()" + }, + { + "label": "._flush()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L178", + "id": "tray_notifications_notificationbus_flush", + "community": 32, + "norm_label": "._flush()" + }, + { + "label": "_coalesced_message()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L192", + "id": "tray_notifications_coalesced_message", + "community": 32, + "norm_label": "_coalesced_message()" + }, + { + "label": "OS notifications via plyer with 5-second coalescing. Backend Spec \u00a715.7.3. Two", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L1", + "id": "tray_notifications_rationale_1", + "community": 32, + "norm_label": "os notifications via plyer with 5-second coalescing. backend spec \u00a715.7.3. two" + }, + { + "label": "Fire a plyer notification (or an injected stub). ``notifier`` defaults to `", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L56", + "id": "tray_notifications_rationale_56", + "community": 32, + "norm_label": "fire a plyer notification (or an injected stub). ``notifier`` defaults to `" + }, + { + "label": "Resolve the plyer notifier lazily; safe even when plyer's backend errors.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L71", + "id": "tray_notifications_rationale_71", + "community": 32, + "norm_label": "resolve the plyer notifier lazily; safe even when plyer's backend errors." + }, + { + "label": "Per-trigger coalescing bucket.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L91", + "id": "tray_notifications_rationale_91", + "community": 32, + "norm_label": "per-trigger coalescing bucket." + }, + { + "label": "Coalescing layer over :func:`notify`. The launcher constructs one bus and t", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L100", + "id": "tray_notifications_rationale_100", + "community": 32, + "norm_label": "coalescing layer over :func:`notify`. the launcher constructs one bus and t" + }, + { + "label": "Submit a notification trigger. If the window is foregrounded the call i", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L126", + "id": "tray_notifications_rationale_126", + "community": 32, + "norm_label": "submit a notification trigger. if the window is foregrounded the call i" + }, + { + "label": "Drain every active bucket synchronously. Returns the bucket count. Used", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L154", + "id": "tray_notifications_rationale_154", + "community": 32, + "norm_label": "drain every active bucket synchronously. returns the bucket count. used" + }, + { + "label": "Cancel every active timer without firing the notifications.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L167", + "id": "tray_notifications_rationale_167", + "community": 32, + "norm_label": "cancel every active timer without firing the notifications." + }, + { + "label": "Render the coalesced summary string for a burst of ``count`` events.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L193", + "id": "tray_notifications_rationale_193", + "community": 32, + "norm_label": "render the coalesced summary string for a burst of ``count`` events." + }, + { + "label": "main.py", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L1", + "id": "src_exlab_wizard_tray_main_py", + "community": 64, + "norm_label": "main.py" + }, + { + "label": "TrayApp", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L49", + "id": "tray_main_trayapp", + "community": 64, + "norm_label": "trayapp" + }, + { + "label": ".start_server()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L69", + "id": "tray_main_trayapp_start_server", + "community": 64, + "norm_label": ".start_server()" + }, + { + "label": ".open_window()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L73", + "id": "tray_main_trayapp_open_window", + "community": 64, + "norm_label": ".open_window()" + }, + { + "label": ".request_quit()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L77", + "id": "tray_main_trayapp_request_quit", + "community": 64, + "norm_label": ".request_quit()" + }, + { + "label": ".shutdown()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L91", + "id": "tray_main_trayapp_shutdown", + "community": 64, + "norm_label": ".shutdown()" + }, + { + "label": ".run()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L98", + "id": "tray_main_trayapp_run", + "community": 64, + "norm_label": ".run()" + }, + { + "label": "_build_default_app()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L129", + "id": "tray_main_build_default_app", + "community": 64, + "norm_label": "_build_default_app()" + }, + { + "label": "_build_default_components()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L153", + "id": "tray_main_build_default_components", + "community": 64, + "norm_label": "_build_default_components()" + }, + { + "label": "_tray_backend_available()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L194", + "id": "tray_main_tray_backend_available", + "community": 64, + "norm_label": "_tray_backend_available()" + }, + { + "label": "_parse_argv()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L207", + "id": "tray_main_parse_argv", + "community": 163, + "norm_label": "_parse_argv()" + }, + { + "label": "_bootstrap_test_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L272", + "id": "tray_main_bootstrap_test_config", + "community": 1, + "norm_label": "_bootstrap_test_config()" + }, + { + "label": "_run_smoke()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L357", + "id": "tray_main_run_smoke", + "community": 64, + "norm_label": "_run_smoke()" + }, + { + "label": "main()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L390", + "id": "tray_main_main", + "community": 64, + "norm_label": "main()" + }, + { + "label": "``exlab-wizard-tray`` console_scripts entry point. Backend Spec \u00a74.3.2. Wires t", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L1", + "id": "tray_main_rationale_1", + "community": 64, + "norm_label": "``exlab-wizard-tray`` console_scripts entry point. backend spec \u00a74.3.2. wires t" + }, + { + "label": "Bundle of long-lived tray components. The launcher constructs one and calls", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L50", + "id": "tray_main_rationale_50", + "community": 64, + "norm_label": "bundle of long-lived tray components. the launcher constructs one and calls" + }, + { + "label": "Start the in-process FastAPI server. Returns the bound port.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L70", + "id": "tray_main_rationale_70", + "community": 64, + "norm_label": "start the in-process fastapi server. returns the bound port." + }, + { + "label": "Spawn or focus the window subprocess.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L74", + "id": "tray_main_rationale_74", + "community": 64, + "norm_label": "spawn or focus the window subprocess." + }, + { + "label": "Trigger the graceful-shutdown protocol on the icon thread.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L78", + "id": "tray_main_rationale_78", + "community": 64, + "norm_label": "trigger the graceful-shutdown protocol on the icon thread." + }, + { + "label": "Tear down sub-components synchronously.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L92", + "id": "tray_main_rationale_92", + "community": 64, + "norm_label": "tear down sub-components synchronously." + }, + { + "label": "Start the server, build the icon, run the pystray loop. ``run_loop`` is", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L99", + "id": "tray_main_rationale_99", + "community": 64, + "norm_label": "start the server, build the icon, run the pystray loop. ``run_loop`` is" + }, + { + "label": "Return the production FastAPI app for the tray. Constructs the live :class:", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L130", + "id": "tray_main_rationale_130", + "community": 64, + "norm_label": "return the production fastapi app for the tray. constructs the live :class:" + }, + { + "label": "Construct the production TrayApp wiring. Split out so :func:`main` can stay", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L158", + "id": "tray_main_rationale_158", + "community": 64, + "norm_label": "construct the production trayapp wiring. split out so :func:`main` can stay" + }, + { + "label": "True when a ``pystray`` backend can be imported. When it cannot (e.g. a hea", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L195", + "id": "tray_main_rationale_195", + "community": 64, + "norm_label": "true when a ``pystray`` backend can be imported. when it cannot (e.g. a hea" + }, + { + "label": "Parse the tray's CLI arguments. The tray accepts: - ``--version`` -- p", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L208", + "id": "tray_main_rationale_208", + "community": 163, + "norm_label": "parse the tray's cli arguments. the tray accepts: - ``--version`` -- p" + }, + { + "label": "Write a starter test ``config.yaml`` if one does not already exist. Called", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L273", + "id": "tray_main_rationale_273", + "community": 1, + "norm_label": "write a starter test ``config.yaml`` if one does not already exist. called" + }, + { + "label": "Server-only loop. Boots the FastAPI server, prints the published port, waits", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L358", + "id": "tray_main_rationale_358", + "community": 64, + "norm_label": "server-only loop. boots the fastapi server, prints the published port, waits" + }, + { + "label": "``exlab-wizard-tray`` entry point. The main thread runs pystray; the FastAP", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L391", + "id": "tray_main_rationale_391", + "community": 64, + "norm_label": "``exlab-wizard-tray`` entry point. the main thread runs pystray; the fastap" + }, + { + "label": "dependencies.py", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L1", + "id": "src_exlab_wizard_tray_dependencies_py", + "community": 43, + "norm_label": "dependencies.py" + }, + { + "label": "build_production_dependencies()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L47", + "id": "tray_dependencies_build_production_dependencies", + "community": 43, + "norm_label": "build_production_dependencies()" + }, + { + "label": "apply_live_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L167", + "id": "tray_dependencies_apply_live_config", + "community": 106, + "norm_label": "apply_live_config()" + }, + { + "label": "_plugin_dir()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L264", + "id": "tray_dependencies_plugin_dir", + "community": 106, + "norm_label": "_plugin_dir()" + }, + { + "label": "_lims_identity()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L270", + "id": "tray_dependencies_lims_identity", + "community": 106, + "norm_label": "_lims_identity()" + }, + { + "label": "_refresh_plugin_host_status()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L282", + "id": "tray_dependencies_refresh_plugin_host_status", + "community": 106, + "norm_label": "_refresh_plugin_host_status()" + }, + { + "label": "_reload_lims_client()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L297", + "id": "tray_dependencies_reload_lims_client", + "community": 43, + "norm_label": "_reload_lims_client()" + }, + { + "label": "_reload_nas_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L318", + "id": "tray_dependencies_reload_nas_sync", + "community": 43, + "norm_label": "_reload_nas_sync()" + }, + { + "label": "_reload_quiescence_poller()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L349", + "id": "tray_dependencies_reload_quiescence_poller", + "community": 43, + "norm_label": "_reload_quiescence_poller()" + }, + { + "label": "_schedule_bringup()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L377", + "id": "tray_dependencies_schedule_bringup", + "community": 43, + "norm_label": "_schedule_bringup()" + }, + { + "label": "_fire_and_forget()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L402", + "id": "tray_dependencies_fire_and_forget", + "community": 43, + "norm_label": "_fire_and_forget()" + }, + { + "label": "_try()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L415", + "id": "tray_dependencies_try", + "community": 43, + "norm_label": "_try()" + }, + { + "label": "_load_config_safely()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L424", + "id": "tray_dependencies_load_config_safely", + "community": 62, + "norm_label": "_load_config_safely()" + }, + { + "label": "_make_save_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L432", + "id": "tray_dependencies_make_save_config", + "community": 43, + "norm_label": "_make_save_config()" + }, + { + "label": "_derive_validator_inputs()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L442", + "id": "tray_dependencies_derive_validator_inputs", + "community": 43, + "norm_label": "_derive_validator_inputs()" + }, + { + "label": "_build_validator()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L468", + "id": "tray_dependencies_build_validator", + "community": 43, + "norm_label": "_build_validator()" + }, + { + "label": "_build_session_store()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L479", + "id": "tray_dependencies_build_session_store", + "community": 43, + "norm_label": "_build_session_store()" + }, + { + "label": "_build_creation_writer()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L485", + "id": "tray_dependencies_build_creation_writer", + "community": 43, + "norm_label": "_build_creation_writer()" + }, + { + "label": "_build_equipment_writer()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L491", + "id": "tray_dependencies_build_equipment_writer", + "community": 43, + "norm_label": "_build_equipment_writer()" + }, + { + "label": "_build_template_engine()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L497", + "id": "tray_dependencies_build_template_engine", + "community": 43, + "norm_label": "_build_template_engine()" + }, + { + "label": "_build_plugin_host()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L503", + "id": "tray_dependencies_build_plugin_host", + "community": 43, + "norm_label": "_build_plugin_host()" + }, + { + "label": "_build_controller()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L525", + "id": "tray_dependencies_build_controller", + "community": 2, + "norm_label": "_build_controller()" + }, + { + "label": "_build_keyring_store()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L559", + "id": "tray_dependencies_build_keyring_store", + "community": 43, + "norm_label": "_build_keyring_store()" + }, + { + "label": "_lims_keyring_password()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L576", + "id": "tray_dependencies_lims_keyring_password", + "community": 43, + "norm_label": "_lims_keyring_password()" + }, + { + "label": "_check_keyring_present()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L596", + "id": "tray_dependencies_check_keyring_present", + "community": 43, + "norm_label": "_check_keyring_present()" + }, + { + "label": "_build_lims_client()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L606", + "id": "tray_dependencies_build_lims_client", + "community": 76, + "norm_label": "_build_lims_client()" + }, + { + "label": "_nas_keyring_password()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L624", + "id": "tray_dependencies_nas_keyring_password", + "community": 74, + "norm_label": "_nas_keyring_password()" + }, + { + "label": "_check_nas_passwords_present()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L643", + "id": "tray_dependencies_check_nas_passwords_present", + "community": 74, + "norm_label": "_check_nas_passwords_present()" + }, + { + "label": "_make_equipment_probe()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L667", + "id": "tray_dependencies_make_equipment_probe", + "community": 43, + "norm_label": "_make_equipment_probe()" + }, + { + "label": "_make_lims_probe()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L732", + "id": "tray_dependencies_make_lims_probe", + "community": 43, + "norm_label": "_make_lims_probe()" + }, + { + "label": "_build_nas_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L749", + "id": "tray_dependencies_build_nas_sync", + "community": 43, + "norm_label": "_build_nas_sync()" + }, + { + "label": "_make_nas_sync_snapshot()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L791", + "id": "tray_dependencies_make_nas_sync_snapshot", + "community": 43, + "norm_label": "_make_nas_sync_snapshot()" + }, + { + "label": "_build_sync_state_writer()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L803", + "id": "tray_dependencies_build_sync_state_writer", + "community": 43, + "norm_label": "_build_sync_state_writer()" + }, + { + "label": "_build_quiescence_poller()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L815", + "id": "tray_dependencies_build_quiescence_poller", + "community": 43, + "norm_label": "_build_quiescence_poller()" + }, + { + "label": "_make_autostart_toggle()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L848", + "id": "tray_dependencies_make_autostart_toggle", + "community": 43, + "norm_label": "_make_autostart_toggle()" + }, + { + "label": "_make_session_store_snapshot()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L860", + "id": "tray_dependencies_make_session_store_snapshot", + "community": 43, + "norm_label": "_make_session_store_snapshot()" + }, + { + "label": "Production :class:`AppDependencies` factory. Backend Spec \u00a74.5, \u00a74.6. The tray", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L1", + "id": "tray_dependencies_rationale_1", + "community": 43, + "norm_label": "production :class:`appdependencies` factory. backend spec \u00a74.5, \u00a74.6. the tray" + }, + { + "label": "Return a populated :class:`AppDependencies` for the live tray. Every per-co", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L48", + "id": "tray_dependencies_rationale_48", + "community": 43, + "norm_label": "return a populated :class:`appdependencies` for the live tray. every per-co" + }, + { + "label": "Push a freshly saved ``config.yaml`` into the running components. Replaces", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L168", + "id": "tray_dependencies_rationale_168", + "community": 106, + "norm_label": "push a freshly saved ``config.yaml`` into the running components. replaces" + }, + { + "label": "Return the ``(endpoint, email)`` pair that defines a LIMS client. Trailing", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L271", + "id": "tray_dependencies_rationale_271", + "community": 106, + "norm_label": "return the ``(endpoint, email)`` pair that defines a lims client. trailing" + }, + { + "label": "Re-derive the plugin-host status counters after a rebuild. Mirrors the boot", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L283", + "id": "tray_dependencies_rationale_283", + "community": 106, + "norm_label": "re-derive the plugin-host status counters after a rebuild. mirrors the boot" + }, + { + "label": "Rebuild ``deps.lims_client`` for a changed endpoint / email. Builds a fresh", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L298", + "id": "tray_dependencies_rationale_298", + "community": 43, + "norm_label": "rebuild ``deps.lims_client`` for a changed endpoint / email. builds a fresh" + }, + { + "label": "Reconfigure the NAS-sync client in place, or build it fresh. Returns ``True", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L319", + "id": "tray_dependencies_rationale_319", + "community": 43, + "norm_label": "reconfigure the nas-sync client in place, or build it fresh. returns ``true" + }, + { + "label": "Reconfigure the quiescence poller in place, or build it fresh. Returns ``Tr", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L350", + "id": "tray_dependencies_rationale_350", + "community": 43, + "norm_label": "reconfigure the quiescence poller in place, or build it fresh. returns ``tr" + }, + { + "label": "Schedule ``nas_sync.init()`` / ``poller.start()`` on the running loop. Used", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L378", + "id": "tray_dependencies_rationale_378", + "community": 43, + "norm_label": "schedule ``nas_sync.init()`` / ``poller.start()`` on the running loop. used" + }, + { + "label": "Run ``coro`` on the running loop, logging failures; no-op if loop-less.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L403", + "id": "tray_dependencies_rationale_403", + "community": 43, + "norm_label": "run ``coro`` on the running loop, logging failures; no-op if loop-less." + }, + { + "label": "Run ``fn(*args, **kwargs)`` swallowing exceptions with a WARN log.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L416", + "id": "tray_dependencies_rationale_416", + "community": 43, + "norm_label": "run ``fn(*args, **kwargs)`` swallowing exceptions with a warn log." + }, + { + "label": "Derive ``(validator_config, equipment_roots, staging_root)`` from config. S", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L443", + "id": "tray_dependencies_rationale_443", + "community": 43, + "norm_label": "derive ``(validator_config, equipment_roots, staging_root)`` from config. s" + }, + { + "label": "Build the LIMS/NAS secret store with an optional fallback passphrase. When", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L560", + "id": "tray_dependencies_rationale_560", + "community": 43, + "norm_label": "build the lims/nas secret store with an optional fallback passphrase. when" + }, + { + "label": "Return the stored LIMS password, or ``None`` if absent/unavailable. The cre", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L577", + "id": "tray_dependencies_rationale_577", + "community": 43, + "norm_label": "return the stored lims password, or ``none`` if absent/unavailable. the cre" + }, + { + "label": "Return the stored NAS password for ``equipment_id`` or ``None``. The creden", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L625", + "id": "tray_dependencies_rationale_625", + "community": 74, + "norm_label": "return the stored nas password for ``equipment_id`` or ``none``. the creden" + }, + { + "label": "Return the set of nas-mode equipment ids that have a keyring entry. Rclone-", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L644", + "id": "tray_dependencies_rationale_644", + "community": 74, + "norm_label": "return the set of nas-mode equipment ids that have a keyring entry. rclone-" + }, + { + "label": "Build the ``deps.equipment_probe`` callable. Rclone-only NAS sync migration", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L668", + "id": "tray_dependencies_rationale_668", + "community": 43, + "norm_label": "build the ``deps.equipment_probe`` callable. rclone-only nas sync migration" + }, + { + "label": "Build the :class:`NASSyncClient` -- the public NAS-sync surface. The client", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L757", + "id": "tray_dependencies_rationale_757", + "community": 43, + "norm_label": "build the :class:`nassyncclient` -- the public nas-sync surface. the client" + }, + { + "label": "Build the orchestrator-only ``sync_state.json`` writer. Operator-free per-f", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L804", + "id": "tray_dependencies_rationale_804", + "community": 43, + "norm_label": "build the orchestrator-only ``sync_state.json`` writer. operator-free per-f" + }, + { + "label": "status.py", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L1", + "id": "src_exlab_wizard_tray_status_py", + "community": 36, + "norm_label": "status.py" + }, + { + "label": "StatusSnapshot", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L45", + "id": "tray_status_statussnapshot", + "community": 36, + "norm_label": "statussnapshot" + }, + { + "label": "snapshot_status()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L53", + "id": "tray_status_snapshot_status", + "community": 36, + "norm_label": "snapshot_status()" + }, + { + "label": "format_status()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L76", + "id": "tray_status_format_status", + "community": 36, + "norm_label": "format_status()" + }, + { + "label": "StatusTicker", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L91", + "id": "tray_status_statusticker", + "community": 36, + "norm_label": "statusticker" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L100", + "id": "tray_status_statusticker_init", + "community": 36, + "norm_label": ".__init__()" + }, + { + "label": ".start()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L120", + "id": "tray_status_statusticker_start", + "community": 36, + "norm_label": ".start()" + }, + { + "label": ".stop()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L129", + "id": "tray_status_statusticker_stop", + "community": 36, + "norm_label": ".stop()" + }, + { + "label": ".tick_once()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L136", + "id": "tray_status_statusticker_tick_once", + "community": 36, + "norm_label": ".tick_once()" + }, + { + "label": "._run()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L156", + "id": "tray_status_statusticker_run", + "community": 36, + "norm_label": "._run()" + }, + { + "label": "_safe_int()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L162", + "id": "tray_status_safe_int", + "community": 36, + "norm_label": "_safe_int()" + }, + { + "label": "Status-submenu rendering. Backend Spec \u00a74.3.2. The tray's status submenu shows", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L1", + "id": "tray_status_rationale_1", + "community": 36, + "norm_label": "status-submenu rendering. backend spec \u00a74.3.2. the tray's status submenu shows" + }, + { + "label": "Immutable view over the \u00a74.3.2 status inputs.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L46", + "id": "tray_status_rationale_46", + "community": 36, + "norm_label": "immutable view over the \u00a74.3.2 status inputs." + }, + { + "label": "Build a :class:`StatusSnapshot` from live component references. Each compon", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L58", + "id": "tray_status_rationale_58", + "community": 36, + "norm_label": "build a :class:`statussnapshot` from live component references. each compon" + }, + { + "label": "Return the menu-label string for the \u00a74.3.2 formatter.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L77", + "id": "tray_status_rationale_77", + "community": 36, + "norm_label": "return the menu-label string for the \u00a74.3.2 formatter." + }, + { + "label": "Polls :func:`snapshot_status` on a fixed cadence. On every tick the formatt", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L92", + "id": "tray_status_rationale_92", + "community": 36, + "norm_label": "polls :func:`snapshot_status` on a fixed cadence. on every tick the formatt" + }, + { + "label": "Spawn the ticker thread. Idempotent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L121", + "id": "tray_status_rationale_121", + "community": 36, + "norm_label": "spawn the ticker thread. idempotent." + }, + { + "label": "Signal the ticker to exit. Idempotent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L130", + "id": "tray_status_rationale_130", + "community": 36, + "norm_label": "signal the ticker to exit. idempotent." + }, + { + "label": "Run a single tick synchronously. Returns the new label. Tests call this", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L137", + "id": "tray_status_rationale_137", + "community": 36, + "norm_label": "run a single tick synchronously. returns the new label. tests call this" + }, + { + "label": "Best-effort numeric read; missing / None / non-int returns 0.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L163", + "id": "tray_status_rationale_163", + "community": 36, + "norm_label": "best-effort numeric read; missing / none / non-int returns 0." + }, + { + "label": "storage_secret.py", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/storage_secret.py", + "source_location": "L1", + "id": "src_exlab_wizard_tray_storage_secret_py", + "community": 199, + "norm_label": "storage_secret.py" + }, + { + "label": "load_or_create_storage_secret()", + "file_type": "code", + "source_file": "src/exlab_wizard/tray/storage_secret.py", + "source_location": "L31", + "id": "tray_storage_secret_load_or_create_storage_secret", + "community": 199, + "norm_label": "load_or_create_storage_secret()" + }, + { + "label": "Per-installation NiceGUI ``storage_secret`` token. Backend Spec \u00a715.3. NiceGUI'", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/storage_secret.py", + "source_location": "L1", + "id": "tray_storage_secret_rationale_1", + "community": 199, + "norm_label": "per-installation nicegui ``storage_secret`` token. backend spec \u00a715.3. nicegui'" + }, + { + "label": "Return the per-installation storage secret, generating it if absent. The fi", + "file_type": "rationale", + "source_file": "src/exlab_wizard/tray/storage_secret.py", + "source_location": "L32", + "id": "tray_storage_secret_rationale_32", + "community": 199, + "norm_label": "return the per-installation storage secret, generating it if absent. the fi" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_readme_init_py", + "community": 332, + "norm_label": "__init__.py" + }, + { + "label": "generator.py", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L1", + "id": "src_exlab_wizard_readme_generator_py", + "community": 2, + "norm_label": "generator.py" + }, + { + "label": "CoreFields", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L96", + "id": "readme_generator_corefields", + "community": 80, + "norm_label": "corefields" + }, + { + "label": "TemplateFieldDecl", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L110", + "id": "readme_generator_templatefielddecl", + "community": 2, + "norm_label": "templatefielddecl" + }, + { + "label": "CustomField", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L128", + "id": "readme_generator_customfield", + "community": 2, + "norm_label": "customfield" + }, + { + "label": "SystemFields", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L140", + "id": "readme_generator_systemfields", + "community": 2, + "norm_label": "systemfields" + }, + { + "label": "ReadmeContext", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L153", + "id": "readme_generator_readmecontext", + "community": 80, + "norm_label": "readmecontext" + }, + { + "label": "ReadmeGenerator", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L176", + "id": "readme_generator_readmegenerator", + "community": 2, + "norm_label": "readmegenerator" + }, + { + "label": ".generate()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L179", + "id": "readme_generator_readmegenerator_generate", + "community": 2, + "norm_label": ".generate()" + }, + { + "label": "._generate_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L197", + "id": "readme_generator_readmegenerator_generate_sync", + "community": 2, + "norm_label": "._generate_sync()" + }, + { + "label": "_validate()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L228", + "id": "readme_generator_validate", + "community": 2, + "norm_label": "_validate()" + }, + { + "label": "_validate_core_fields()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L247", + "id": "readme_generator_validate_core_fields", + "community": 2, + "norm_label": "_validate_core_fields()" + }, + { + "label": "_reject_core_redeclaration()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L270", + "id": "readme_generator_reject_core_redeclaration", + "community": 2, + "norm_label": "_reject_core_redeclaration()" + }, + { + "label": "_validate_required_fields()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L283", + "id": "readme_generator_validate_required_fields", + "community": 2, + "norm_label": "_validate_required_fields()" + }, + { + "label": "_validate_field_id_uniqueness()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L298", + "id": "readme_generator_validate_field_id_uniqueness", + "community": 2, + "norm_label": "_validate_field_id_uniqueness()" + }, + { + "label": "_validate_typed_fields()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L313", + "id": "readme_generator_validate_typed_fields", + "community": 2, + "norm_label": "_validate_typed_fields()" + }, + { + "label": "_check_value_type()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L335", + "id": "readme_generator_check_value_type", + "community": 2, + "norm_label": "_check_value_type()" + }, + { + "label": "_validate_custom_field_labels()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L378", + "id": "readme_generator_validate_custom_field_labels", + "community": 2, + "norm_label": "_validate_custom_field_labels()" + }, + { + "label": "_is_present()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L397", + "id": "readme_generator_is_present", + "community": 2, + "norm_label": "_is_present()" + }, + { + "label": "_core_fields_dict()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L418", + "id": "readme_generator_core_fields_dict", + "community": 2, + "norm_label": "_core_fields_dict()" + }, + { + "label": "_custom_fields_list()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L422", + "id": "readme_generator_custom_fields_list", + "community": 2, + "norm_label": "_custom_fields_list()" + }, + { + "label": "_system_fields_dict()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L426", + "id": "readme_generator_system_fields_dict", + "community": 2, + "norm_label": "_system_fields_dict()" + }, + { + "label": "_build_front_matter()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L438", + "id": "readme_generator_build_front_matter", + "community": 2, + "norm_label": "_build_front_matter()" + }, + { + "label": "_render_readme_bytes()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L458", + "id": "readme_generator_render_readme_bytes", + "community": 2, + "norm_label": "_render_readme_bytes()" + }, + { + "label": "_build_readme_fields()", + "file_type": "code", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L476", + "id": "readme_generator_build_readme_fields", + "community": 2, + "norm_label": "_build_readme_fields()" + }, + { + "label": "README generator. Backend Spec \u00a710 / \u00a711.4. Renders ``README.md`` (YAML front m", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L1", + "id": "readme_generator_rationale_1", + "community": 2, + "norm_label": "readme generator. backend spec \u00a710 / \u00a711.4. renders ``readme.md`` (yaml front m" + }, + { + "label": "Mandatory core fields (User Interaction Spec \u00a72). All three are non-empty (", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L97", + "id": "readme_generator_rationale_97", + "community": 80, + "norm_label": "mandatory core fields (user interaction spec \u00a72). all three are non-empty (" + }, + { + "label": "Field declaration from a template's ``_exlab_readme.fields`` list or from ``", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L111", + "id": "readme_generator_rationale_111", + "community": 2, + "norm_label": "field declaration from a template's ``_exlab_readme.fields`` list or from ``" + }, + { + "label": "An ad-hoc user-added field. Backend Spec \u00a710.4. Custom fields are plain str", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L129", + "id": "readme_generator_rationale_129", + "community": 2, + "norm_label": "an ad-hoc user-added field. backend spec \u00a710.4. custom fields are plain str" + }, + { + "label": "Auto-populated, non-editable system fields. Backend Spec \u00a710.6.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L141", + "id": "readme_generator_rationale_141", + "community": 2, + "norm_label": "auto-populated, non-editable system fields. backend spec \u00a710.6." + }, + { + "label": "Inputs to :class:`ReadmeGenerator`. Composed by the controller. The control", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L154", + "id": "readme_generator_rationale_154", + "community": 80, + "norm_label": "inputs to :class:`readmegenerator`. composed by the controller. the control" + }, + { + "label": "Renders ``README.md`` + ``readme_fields.json``. Backend Spec \u00a710.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L177", + "id": "readme_generator_rationale_177", + "community": 2, + "norm_label": "renders ``readme.md`` + ``readme_fields.json``. backend spec \u00a710." + }, + { + "label": "Validate ``ctx``, write both files, return ``(readme, cache)``. The des", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L180", + "id": "readme_generator_rationale_180", + "community": 2, + "norm_label": "validate ``ctx``, write both files, return ``(readme, cache)``. the des" + }, + { + "label": "Run every validation gate. Raises on the first failure. Order matches the s", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L229", + "id": "readme_generator_rationale_229", + "community": 2, + "norm_label": "run every validation gate. raises on the first failure. order matches the s" + }, + { + "label": "Per-type validation. Spec \u00a710.3 type semantics. Skips fields whose value is", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L319", + "id": "readme_generator_rationale_319", + "community": 2, + "norm_label": "per-type validation. spec \u00a710.3 type semantics. skips fields whose value is" + }, + { + "label": "Ensure custom labels do not shadow any layer's field id. The four-layer set", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L379", + "id": "readme_generator_rationale_379", + "community": 2, + "norm_label": "ensure custom labels do not shadow any layer's field id. the four-layer set" + }, + { + "label": "Return True iff ``value`` carries a non-empty piece of content. Strings are", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L398", + "id": "readme_generator_rationale_398", + "community": 2, + "norm_label": "return true iff ``value`` carries a non-empty piece of content. strings are" + }, + { + "label": "Build the ordered front matter dict for ``yaml.safe_dump``. Order matches t", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L439", + "id": "readme_generator_rationale_439", + "community": 2, + "norm_label": "build the ordered front matter dict for ``yaml.safe_dump``. order matches t" + }, + { + "label": "Render the full README markdown into UTF-8 bytes. ``yaml.safe_dump`` is con", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L459", + "id": "readme_generator_rationale_459", + "community": 2, + "norm_label": "render the full readme markdown into utf-8 bytes. ``yaml.safe_dump`` is con" + }, + { + "label": "Build the typed :class:`ReadmeFieldsJson` payload for the cache file.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L481", + "id": "readme_generator_rationale_481", + "community": 2, + "norm_label": "build the typed :class:`readmefieldsjson` payload for the cache file." + }, + { + "label": "creation.py", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1", + "id": "src_exlab_wizard_controller_creation_py", + "community": 5, + "norm_label": "creation.py" + }, + { + "label": "ProjectCreateRequest", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L141", + "id": "controller_creation_projectcreaterequest", + "community": 6, + "norm_label": "projectcreaterequest" + }, + { + "label": "RunCreateRequest", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L160", + "id": "controller_creation_runcreaterequest", + "community": 6, + "norm_label": "runcreaterequest" + }, + { + "label": "SessionHandle", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L185", + "id": "controller_creation_sessionhandle", + "community": 6, + "norm_label": "sessionhandle" + }, + { + "label": "ReadmeGeneratorProtocol", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L199", + "id": "controller_creation_readmegeneratorprotocol", + "community": 6, + "norm_label": "readmegeneratorprotocol" + }, + { + "label": ".generate()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L207", + "id": "controller_creation_readmegeneratorprotocol_generate", + "community": 6, + "norm_label": ".generate()" + }, + { + "label": "NoOpReadmeGenerator", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L210", + "id": "controller_creation_noopreadmegenerator", + "community": 80, + "norm_label": "noopreadmegenerator" + }, + { + "label": ".generate()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L219", + "id": "controller_creation_noopreadmegenerator_generate", + "community": 80, + "norm_label": ".generate()" + }, + { + "label": "NASSyncProtocol", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L226", + "id": "controller_creation_nassyncprotocol", + "community": 6, + "norm_label": "nassyncprotocol" + }, + { + "label": ".enqueue()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L229", + "id": "controller_creation_nassyncprotocol_enqueue", + "community": 6, + "norm_label": ".enqueue()" + }, + { + "label": "NoOpNASSync", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L232", + "id": "controller_creation_noopnassync", + "community": 6, + "norm_label": "noopnassync" + }, + { + "label": ".enqueue()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L235", + "id": "controller_creation_noopnassync_enqueue", + "community": 6, + "norm_label": ".enqueue()" + }, + { + "label": "CreationController", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L244", + "id": "controller_creation_creationcontroller", + "community": 5, + "norm_label": "creationcontroller" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L252", + "id": "controller_creation_creationcontroller_init", + "community": 6, + "norm_label": ".__init__()" + }, + { + "label": "session_store()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L290", + "id": "controller_creation_session_store", + "community": 5, + "norm_label": "session_store()" + }, + { + "label": ".apply_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L294", + "id": "controller_creation_creationcontroller_apply_config", + "community": 5, + "norm_label": ".apply_config()" + }, + { + "label": ".create_project()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L311", + "id": "controller_creation_creationcontroller_create_project", + "community": 5, + "norm_label": ".create_project()" + }, + { + "label": ".create_run()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L324", + "id": "controller_creation_creationcontroller_create_run", + "community": 5, + "norm_label": ".create_run()" + }, + { + "label": ".resume()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L329", + "id": "controller_creation_creationcontroller_resume", + "community": 5, + "norm_label": ".resume()" + }, + { + "label": ".cancel()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L353", + "id": "controller_creation_creationcontroller_cancel", + "community": 5, + "norm_label": ".cancel()" + }, + { + "label": ".status()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L396", + "id": "controller_creation_creationcontroller_status", + "community": 5, + "norm_label": ".status()" + }, + { + "label": ".subscribe()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L403", + "id": "controller_creation_creationcontroller_subscribe", + "community": 5, + "norm_label": ".subscribe()" + }, + { + "label": "._launch()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L427", + "id": "controller_creation_creationcontroller_launch", + "community": 5, + "norm_label": "._launch()" + }, + { + "label": "._validate_inputs()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L465", + "id": "controller_creation_creationcontroller_validate_inputs", + "community": 5, + "norm_label": "._validate_inputs()" + }, + { + "label": "._run_pipeline()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L607", + "id": "controller_creation_creationcontroller_run_pipeline", + "community": 5, + "norm_label": "._run_pipeline()" + }, + { + "label": "._pipeline_states()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L627", + "id": "controller_creation_creationcontroller_pipeline_states", + "community": 5, + "norm_label": "._pipeline_states()" + }, + { + "label": "._resolve_template()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L728", + "id": "controller_creation_creationcontroller_resolve_template", + "community": 5, + "norm_label": "._resolve_template()" + }, + { + "label": "_short_id_for()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L733", + "id": "controller_creation_short_id_for", + "community": 5, + "norm_label": "_short_id_for()" + }, + { + "label": "_project_name_for()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L749", + "id": "controller_creation_project_name_for", + "community": 5, + "norm_label": "_project_name_for()" + }, + { + "label": "._resolve_run_lims_block()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L762", + "id": "controller_creation_creationcontroller_resolve_run_lims_block", + "community": 5, + "norm_label": "._resolve_run_lims_block()" + }, + { + "label": "_run_kind_value_for()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L782", + "id": "controller_creation_run_kind_value_for", + "community": 5, + "norm_label": "_run_kind_value_for()" + }, + { + "label": "._compose_destination_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L793", + "id": "controller_creation_creationcontroller_compose_destination_path", + "community": 5, + "norm_label": "._compose_destination_path()" + }, + { + "label": "._render()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L810", + "id": "controller_creation_creationcontroller_render", + "community": 5, + "norm_label": "._render()" + }, + { + "label": "._plugin_pass()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L837", + "id": "controller_creation_creationcontroller_plugin_pass", + "community": 5, + "norm_label": "._plugin_pass()" + }, + { + "label": "._build_readme_context()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L898", + "id": "controller_creation_creationcontroller_build_readme_context", + "community": 5, + "norm_label": "._build_readme_context()" + }, + { + "label": "._write_cache()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L963", + "id": "controller_creation_creationcontroller_write_cache", + "community": 5, + "norm_label": "._write_cache()" + }, + { + "label": "._write_equipment_json()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1078", + "id": "controller_creation_creationcontroller_write_equipment_json", + "community": 5, + "norm_label": "._write_equipment_json()" + }, + { + "label": "._post_validate()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1114", + "id": "controller_creation_creationcontroller_post_validate", + "community": 5, + "norm_label": "._post_validate()" + }, + { + "label": "._transition()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1162", + "id": "controller_creation_creationcontroller_transition", + "community": 5, + "norm_label": "._transition()" + }, + { + "label": "._publish()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1183", + "id": "controller_creation_creationcontroller_publish", + "community": 5, + "norm_label": "._publish()" + }, + { + "label": "._fail()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1188", + "id": "controller_creation_creationcontroller_fail", + "community": 5, + "norm_label": "._fail()" + }, + { + "label": "._cleanup()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1198", + "id": "controller_creation_creationcontroller_cleanup", + "community": 5, + "norm_label": "._cleanup()" + }, + { + "label": "._handle()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1217", + "id": "controller_creation_creationcontroller_handle", + "community": 5, + "norm_label": "._handle()" + }, + { + "label": "_format_error()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1226", + "id": "controller_creation_format_error", + "community": 5, + "norm_label": "_format_error()" + }, + { + "label": "._append_log()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1231", + "id": "controller_creation_creationcontroller_append_log", + "community": 5, + "norm_label": "._append_log()" + }, + { + "label": "_required_field_ids()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1256", + "id": "controller_creation_required_field_ids", + "community": 5, + "norm_label": "_required_field_ids()" + }, + { + "label": "_readme_decls_from_template()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1269", + "id": "controller_creation_readme_decls_from_template", + "community": 5, + "norm_label": "_readme_decls_from_template()" + }, + { + "label": "_readme_decls_from_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1301", + "id": "controller_creation_readme_decls_from_config", + "community": 5, + "norm_label": "_readme_decls_from_config()" + }, + { + "label": "_os_username()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1326", + "id": "controller_creation_os_username", + "community": 5, + "norm_label": "_os_username()" + }, + { + "label": "_has_hard_finding()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1339", + "id": "controller_creation_has_hard_finding", + "community": 5, + "norm_label": "_has_hard_finding()" + }, + { + "label": "_attach_resolved()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1343", + "id": "controller_creation_attach_resolved", + "community": 5, + "norm_label": "_attach_resolved()" + }, + { + "label": "Creation controller. Backend Spec \u00a74.4.1, \u00a74.7, \u00a74.8. Composes the validator, t", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1", + "id": "controller_creation_rationale_1", + "community": 5, + "norm_label": "creation controller. backend spec \u00a74.4.1, \u00a74.7, \u00a74.8. composes the validator, t" + }, + { + "label": "Inputs for :meth:`CreationController.create_project`. Backend Spec \u00a74.6.1 /", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L142", + "id": "controller_creation_rationale_142", + "community": 6, + "norm_label": "inputs for :meth:`creationcontroller.create_project`. backend spec \u00a74.6.1 /" + }, + { + "label": "Inputs for :meth:`CreationController.create_run`. Backend Spec \u00a74.6.1 / UI-", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L161", + "id": "controller_creation_rationale_161", + "community": 6, + "norm_label": "inputs for :meth:`creationcontroller.create_run`. backend spec \u00a74.6.1 / ui-" + }, + { + "label": "Snapshot of session state. Backend Spec \u00a74.4.1.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L186", + "id": "controller_creation_rationale_186", + "community": 6, + "norm_label": "snapshot of session state. backend spec \u00a74.4.1." + }, + { + "label": "The README generator surface the controller depends on. Backend \u00a710. Mirror", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L200", + "id": "controller_creation_rationale_200", + "community": 6, + "norm_label": "the readme generator surface the controller depends on. backend \u00a710. mirror" + }, + { + "label": "Lightweight README generator for tests / headless fixtures. Writes a tiny `", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L211", + "id": "controller_creation_rationale_211", + "community": 80, + "norm_label": "lightweight readme generator for tests / headless fixtures. writes a tiny `" + }, + { + "label": "The NAS sync surface the controller depends on. Phase 10.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L227", + "id": "controller_creation_rationale_227", + "community": 6, + "norm_label": "the nas sync surface the controller depends on. phase 10." + }, + { + "label": "No-op stand-in for :class:`NASSyncClient` until Phase 10 lands.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L233", + "id": "controller_creation_rationale_233", + "community": 6, + "norm_label": "no-op stand-in for :class:`nassyncclient` until phase 10 lands." + }, + { + "label": "Drives the \u00a74.7 state machine end-to-end. Composes the validator (Phase 4),", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L245", + "id": "controller_creation_rationale_245", + "community": 5, + "norm_label": "drives the \u00a74.7 state machine end-to-end. composes the validator (phase 4)," + }, + { + "label": "Expose the in-memory session store for the API surface.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L291", + "id": "controller_creation_rationale_291", + "community": 521, + "norm_label": "expose the in-memory session store for the api surface." + }, + { + "label": "Swap the controller's config (and optionally plugin host) in place. Eve", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L295", + "id": "controller_creation_rationale_295", + "community": 5, + "norm_label": "swap the controller's config (and optionally plugin host) in place. eve" + }, + { + "label": "Open a project-creation session and start the pipeline. The session is", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L312", + "id": "controller_creation_rationale_312", + "community": 5, + "norm_label": "open a project-creation session and start the pipeline. the session is" + }, + { + "label": "Open a run-creation session and start the pipeline.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L325", + "id": "controller_creation_rationale_325", + "community": 5, + "norm_label": "open a run-creation session and start the pipeline." + }, + { + "label": "Supply ``extra_inputs`` after a ``PluginInputRequired`` prompt. Pushes", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L330", + "id": "controller_creation_rationale_330", + "community": 5, + "norm_label": "supply ``extra_inputs`` after a ``plugininputrequired`` prompt. pushes" + }, + { + "label": "Abort an in-flight session. Pushes a ``None`` onto the resume queue (so", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L354", + "id": "controller_creation_rationale_354", + "community": 5, + "norm_label": "abort an in-flight session. pushes a ``none`` onto the resume queue (so" + }, + { + "label": "Return a snapshot :class:`SessionHandle` for ``session_id``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L397", + "id": "controller_creation_rationale_397", + "community": 5, + "norm_label": "return a snapshot :class:`sessionhandle` for ``session_id``." + }, + { + "label": "Yield WebSocket-event dicts for the named session. Wraps the session's", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L404", + "id": "controller_creation_rationale_404", + "community": 5, + "norm_label": "yield websocket-event dicts for the named session. wraps the session's" + }, + { + "label": "Validate the request, then spawn the pipeline as a background task. The", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L428", + "id": "controller_creation_rationale_428", + "community": 5, + "norm_label": "validate the request, then spawn the pipeline as a background task. the" + }, + { + "label": "Run the \u00a72 mandatory-core-field gate. Raises :class:`ValidationError` o", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L466", + "id": "controller_creation_rationale_466", + "community": 5, + "norm_label": "run the \u00a72 mandatory-core-field gate. raises :class:`validationerror` o" + }, + { + "label": "Drive the session from RENDERING to DONE / FAILED / ABORTED.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L608", + "id": "controller_creation_rationale_608", + "community": 5, + "norm_label": "drive the session from rendering to done / failed / aborted." + }, + { + "label": "Run the RENDERING \u2192 DONE pipeline once.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L628", + "id": "controller_creation_rationale_628", + "community": 5, + "norm_label": "run the rendering \u2192 done pipeline once." + }, + { + "label": "Return the LIMS project ``short_id`` for the request. For a project req", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L734", + "id": "controller_creation_rationale_734", + "community": 522, + "norm_label": "return the lims project ``short_id`` for the request. for a project req" + }, + { + "label": "Return the human-readable LIMS project name for the request. This is th", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L750", + "id": "controller_creation_rationale_750", + "community": 523, + "norm_label": "return the human-readable lims project name for the request. this is th" + }, + { + "label": "Read the parent project's ``lims_project`` block for a run. A run inher", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L763", + "id": "controller_creation_rationale_763", + "community": 5, + "norm_label": "read the parent project's ``lims_project`` block for a run. a run inher" + }, + { + "label": "Return the ``run_kind`` value to record on ``creation.json``. Project-l", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L783", + "id": "controller_creation_rationale_783", + "community": 524, + "norm_label": "return the ``run_kind`` value to record on ``creation.json``. project-l" + }, + { + "label": "Render the resolved template into ``dst``. Copier receives the request'", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L816", + "id": "controller_creation_rationale_816", + "community": 5, + "norm_label": "render the resolved template into ``dst``. copier receives the request'" + }, + { + "label": "Compose the \u00a710 four-layer :class:`ReadmeContext` for ``req``. Maps the", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L905", + "id": "controller_creation_rationale_905", + "community": 5, + "norm_label": "compose the \u00a710 four-layer :class:`readmecontext` for ``req``. maps the" + }, + { + "label": "Write README + creation.json into the destination tree.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L973", + "id": "controller_creation_rationale_973", + "community": 5, + "norm_label": "write readme + creation.json into the destination tree." + }, + { + "label": "Write the per-equipment ``equipment.json`` registry record. Backend Spe", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1083", + "id": "controller_creation_rationale_1083", + "community": 5, + "norm_label": "write the per-equipment ``equipment.json`` registry record. backend spe" + }, + { + "label": "Run :meth:`Validator.validate_creation` against the rendered tree. Catc", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1120", + "id": "controller_creation_rationale_1120", + "community": 5, + "norm_label": "run :meth:`validator.validate_creation` against the rendered tree. catc" + }, + { + "label": "Remove or leave the partial directory per the spec.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1199", + "id": "controller_creation_rationale_1199", + "community": 5, + "norm_label": "remove or leave the partial directory per the spec." + }, + { + "label": "Best-effort append to the equipment-level log. Backend Spec \u00a711.5. Comp", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1232", + "id": "controller_creation_rationale_1232", + "community": 5, + "norm_label": "best-effort append to the equipment-level log. backend spec \u00a711.5. comp" + }, + { + "label": "Return the ``id`` of every entry in ``extra_fields`` with ``required: true``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1257", + "id": "controller_creation_rationale_1257", + "community": 5, + "norm_label": "return the ``id`` of every entry in ``extra_fields`` with ``required: true``." + }, + { + "label": "Map a template's ``_exlab_readme.fields`` dicts to typed declarations. Entr", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1270", + "id": "controller_creation_rationale_1270", + "community": 5, + "norm_label": "map a template's ``_exlab_readme.fields`` dicts to typed declarations. entr" + }, + { + "label": "Map ``config.readme.defaults`` entries to typed declarations. Core field id", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1302", + "id": "controller_creation_rationale_1302", + "community": 5, + "norm_label": "map ``config.readme.defaults`` entries to typed declarations. core field id" + }, + { + "label": "Return the creating OS user for the README ``system.created_by``. Distinct", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1327", + "id": "controller_creation_rationale_1327", + "community": 5, + "norm_label": "return the creating os user for the readme ``system.created_by``. distinct" + }, + { + "label": "Stash the resolved template on the request so the pipeline can re-use it. T", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1346", + "id": "controller_creation_rationale_1346", + "community": 5, + "norm_label": "stash the resolved template on the request so the pipeline can re-use it. t" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_controller_init_py", + "community": 314, + "norm_label": "__init__.py" + }, + { + "label": "state_machine.py", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L1", + "id": "src_exlab_wizard_controller_state_machine_py", + "community": 6, + "norm_label": "state_machine.py" + }, + { + "label": "SessionState", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L45", + "id": "controller_state_machine_sessionstate", + "community": 6, + "norm_label": "sessionstate" + }, + { + "label": "Phase", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L66", + "id": "controller_state_machine_phase", + "community": 6, + "norm_label": "phase" + }, + { + "label": "state_to_phase()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L102", + "id": "controller_state_machine_state_to_phase", + "community": 16, + "norm_label": "state_to_phase()" + }, + { + "label": "_build_valid_transitions()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L139", + "id": "controller_state_machine_build_valid_transitions", + "community": 6, + "norm_label": "_build_valid_transitions()" + }, + { + "label": "assert_transition()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L159", + "id": "controller_state_machine_assert_transition", + "community": 16, + "norm_label": "assert_transition()" + }, + { + "label": "Creation-session state machine. Backend Spec \u00a74.7, \u00a74.7.1. Defines two enums an", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L1", + "id": "controller_state_machine_rationale_1", + "community": 6, + "norm_label": "creation-session state machine. backend spec \u00a74.7, \u00a74.7.1. defines two enums an" + }, + { + "label": "Internal creation-session state. Backend Spec \u00a74.7. Values mirror the \u00a74.7", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L46", + "id": "controller_state_machine_rationale_46", + "community": 6, + "norm_label": "internal creation-session state. backend spec \u00a74.7. values mirror the \u00a74.7" + }, + { + "label": "Externally-emitted ``phase`` event. Backend Spec \u00a74.6.2. Sent over the ``WS", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L67", + "id": "controller_state_machine_rationale_67", + "community": 6, + "norm_label": "externally-emitted ``phase`` event. backend spec \u00a74.6.2. sent over the ``ws" + }, + { + "label": "Return the :class:`Phase` event corresponding to ``state``. Backend Spec \u00a74", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L103", + "id": "controller_state_machine_rationale_103", + "community": 16, + "norm_label": "return the :class:`phase` event corresponding to ``state``. backend spec \u00a74" + }, + { + "label": "Augment forward transitions with cancel/fail edges.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L140", + "id": "controller_state_machine_rationale_140", + "community": 6, + "norm_label": "augment forward transitions with cancel/fail edges." + }, + { + "label": "Raise :class:`ValueError` if ``current -> new_state`` is illegal. Defensive", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L160", + "id": "controller_state_machine_rationale_160", + "community": 16, + "norm_label": "raise :class:`valueerror` if ``current -> new_state`` is illegal. defensive" + }, + { + "label": "session_store.py", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L1", + "id": "src_exlab_wizard_controller_session_store_py", + "community": 11, + "norm_label": "session_store.py" + }, + { + "label": "Session", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L46", + "id": "controller_session_store_session", + "community": 6, + "norm_label": "session" + }, + { + "label": ".is_terminal()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L87", + "id": "controller_session_store_session_is_terminal", + "community": 6, + "norm_label": ".is_terminal()" + }, + { + "label": "SessionStore", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L92", + "id": "controller_session_store_sessionstore", + "community": 11, + "norm_label": "sessionstore" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L99", + "id": "controller_session_store_sessionstore_init", + "community": 11, + "norm_label": ".__init__()" + }, + { + "label": ".open()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L104", + "id": "controller_session_store_sessionstore_open", + "community": 11, + "norm_label": ".open()" + }, + { + "label": ".get()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L125", + "id": "controller_session_store_sessionstore_get", + "community": 11, + "norm_label": ".get()" + }, + { + "label": ".iter_sorted()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L129", + "id": "controller_session_store_sessionstore_iter_sorted", + "community": 11, + "norm_label": ".iter_sorted()" + }, + { + "label": ".transition()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L138", + "id": "controller_session_store_sessionstore_transition", + "community": 11, + "norm_label": ".transition()" + }, + { + "label": ".attach_event_queue()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L159", + "id": "controller_session_store_sessionstore_attach_event_queue", + "community": 11, + "norm_label": ".attach_event_queue()" + }, + { + "label": ".heartbeat()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L171", + "id": "controller_session_store_sessionstore_heartbeat", + "community": 11, + "norm_label": ".heartbeat()" + }, + { + "label": ".close()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L182", + "id": "controller_session_store_sessionstore_close", + "community": 11, + "norm_label": ".close()" + }, + { + "label": ".abandoned_older_than()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L202", + "id": "controller_session_store_sessionstore_abandoned_older_than", + "community": 11, + "norm_label": ".abandoned_older_than()" + }, + { + "label": ".gc_loop()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L218", + "id": "controller_session_store_sessionstore_gc_loop", + "community": 11, + "norm_label": ".gc_loop()" + }, + { + "label": "._gc_once()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L236", + "id": "controller_session_store_sessionstore_gc_once", + "community": 11, + "norm_label": "._gc_once()" + }, + { + "label": "on_operations_panel()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L259", + "id": "controller_session_store_on_operations_panel", + "community": 290, + "norm_label": "on_operations_panel()" + }, + { + "label": "project_identifier()", + "file_type": "code", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L270", + "id": "controller_session_store_project_identifier", + "community": 11, + "norm_label": "project_identifier()" + }, + { + "label": "In-memory session store + GC for creation sessions. Backend Spec \u00a74.4.7. The :c", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L1", + "id": "controller_session_store_rationale_1", + "community": 11, + "norm_label": "in-memory session store + gc for creation sessions. backend spec \u00a74.4.7. the :c" + }, + { + "label": "One creation session. Backend Spec \u00a74.4.7. Attributes: session_id:", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L47", + "id": "controller_session_store_rationale_47", + "community": 6, + "norm_label": "one creation session. backend spec \u00a74.4.7. attributes: session_id:" + }, + { + "label": "Return ``True`` if the session reached a terminal state.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L88", + "id": "controller_session_store_rationale_88", + "community": 6, + "norm_label": "return ``true`` if the session reached a terminal state." + }, + { + "label": "In-memory session store. Backend Spec \u00a74.4.7. Sessions are keyed by UUID4 s", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L93", + "id": "controller_session_store_rationale_93", + "community": 11, + "norm_label": "in-memory session store. backend spec \u00a74.4.7. sessions are keyed by uuid4 s" + }, + { + "label": "Create a fresh session in :data:`SessionState.PENDING` state.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L105", + "id": "controller_session_store_rationale_105", + "community": 11, + "norm_label": "create a fresh session in :data:`sessionstate.pending` state." + }, + { + "label": "Return the session keyed by ``session_id``, or ``None``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L126", + "id": "controller_session_store_rationale_126", + "community": 11, + "norm_label": "return the session keyed by ``session_id``, or ``none``." + }, + { + "label": "Return ``(session_id, session)`` pairs, oldest-created first. The publi", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L130", + "id": "controller_session_store_rationale_130", + "community": 11, + "norm_label": "return ``(session_id, session)`` pairs, oldest-created first. the publi" + }, + { + "label": "Move ``session_id`` to ``new_state``, updating ``current_phase``. Valid", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L139", + "id": "controller_session_store_rationale_139", + "community": 11, + "norm_label": "move ``session_id`` to ``new_state``, updating ``current_phase``. valid" + }, + { + "label": "Attach a WebSocket fan-out queue to the session. The controller pushes", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L160", + "id": "controller_session_store_rationale_160", + "community": 11, + "norm_label": "attach a websocket fan-out queue to the session. the controller pushes" + }, + { + "label": "Refresh ``last_heartbeat`` so the GC will not close this session. No-op", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L172", + "id": "controller_session_store_rationale_172", + "community": 11, + "norm_label": "refresh ``last_heartbeat`` so the gc will not close this session. no-op" + }, + { + "label": "Stamp a terminal-state session with the outcome envelope. ``outcome`` i", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L183", + "id": "controller_session_store_rationale_183", + "community": 11, + "norm_label": "stamp a terminal-state session with the outcome envelope. ``outcome`` i" + }, + { + "label": "Return ids of :data:`SessionState.INPUT_REQUIRED` sessions whose ``last_", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L203", + "id": "controller_session_store_rationale_203", + "community": 11, + "norm_label": "return ids of :data:`sessionstate.input_required` sessions whose ``last_" + }, + { + "label": "Run the abandoned-session GC forever. Backend Spec \u00a74.4.7. Sleeps ``int", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L219", + "id": "controller_session_store_rationale_219", + "community": 11, + "norm_label": "run the abandoned-session gc forever. backend spec \u00a74.4.7. sleeps ``int" + }, + { + "label": "One GC pass: close every abandoned ``INPUT_REQUIRED`` session.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L237", + "id": "controller_session_store_rationale_237", + "community": 11, + "norm_label": "one gc pass: close every abandoned ``input_required`` session." + }, + { + "label": "Return ``True`` when ``session`` belongs on the Operations panel. Frontend", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L260", + "id": "controller_session_store_rationale_260", + "community": 290, + "norm_label": "return ``true`` when ``session`` belongs on the operations panel. frontend" + }, + { + "label": "Pluck a project identifier off a project / run creation request. A project", + "file_type": "rationale", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L271", + "id": "controller_session_store_rationale_271", + "community": 11, + "norm_label": "pluck a project identifier off a project / run creation request. a project" + }, + { + "label": "pywebview_app.py", + "file_type": "code", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L1", + "id": "src_exlab_wizard_window_pywebview_app_py", + "community": 10, + "norm_label": "pywebview_app.py" + }, + { + "label": "build_window_url()", + "file_type": "code", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L42", + "id": "window_pywebview_app_build_window_url", + "community": 10, + "norm_label": "build_window_url()" + }, + { + "label": "is_debug_enabled()", + "file_type": "code", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L51", + "id": "window_pywebview_app_is_debug_enabled", + "community": 10, + "norm_label": "is_debug_enabled()" + }, + { + "label": "run_window()", + "file_type": "code", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L59", + "id": "window_pywebview_app_run_window", + "community": 10, + "norm_label": "run_window()" + }, + { + "label": "_import_webview()", + "file_type": "code", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L93", + "id": "window_pywebview_app_import_webview", + "community": 10, + "norm_label": "_import_webview()" + }, + { + "label": "pywebview-driven native window. Backend Spec \u00a715.3.2. Opens a single pywebview", + "file_type": "rationale", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L1", + "id": "window_pywebview_app_rationale_1", + "community": 10, + "norm_label": "pywebview-driven native window. backend spec \u00a715.3.2. opens a single pywebview" + }, + { + "label": "Return the URL the window points at. Always loopback (Backend \u00a74.1: \"binds", + "file_type": "rationale", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L43", + "id": "window_pywebview_app_rationale_43", + "community": 10, + "norm_label": "return the url the window points at. always loopback (backend \u00a74.1: \"binds" + }, + { + "label": "True when ``EXLAB_DEBUG`` is set to a truthy string. Backend \u00a715.3.2.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L52", + "id": "window_pywebview_app_rationale_52", + "community": 10, + "norm_label": "true when ``exlab_debug`` is set to a truthy string. backend \u00a715.3.2." + }, + { + "label": "Open a single pywebview window pointed at the handshake's port. ``create_wi", + "file_type": "rationale", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L65", + "id": "window_pywebview_app_rationale_65", + "community": 10, + "norm_label": "open a single pywebview window pointed at the handshake's port. ``create_wi" + }, + { + "label": "Lazily import pywebview to keep the module import cheap.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L94", + "id": "window_pywebview_app_rationale_94", + "community": 10, + "norm_label": "lazily import pywebview to keep the module import cheap." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/window/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_window_init_py", + "community": 333, + "norm_label": "__init__.py" + }, + { + "label": "main.py", + "file_type": "code", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L1", + "id": "src_exlab_wizard_window_main_py", + "community": 10, + "norm_label": "main.py" + }, + { + "label": "ServerHandshake", + "file_type": "code", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L38", + "id": "window_main_serverhandshake", + "community": 10, + "norm_label": "serverhandshake" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L43", + "id": "window_main_serverhandshake_init", + "community": 10, + "norm_label": ".__init__()" + }, + { + "label": "read_server_handshake()", + "file_type": "code", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L49", + "id": "window_main_read_server_handshake", + "community": 10, + "norm_label": "read_server_handshake()" + }, + { + "label": "is_pid_alive()", + "file_type": "code", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L74", + "id": "window_main_is_pid_alive", + "community": 10, + "norm_label": "is_pid_alive()" + }, + { + "label": "_posix_is_pid_alive()", + "file_type": "code", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L92", + "id": "window_main_posix_is_pid_alive", + "community": 10, + "norm_label": "_posix_is_pid_alive()" + }, + { + "label": "_win_is_pid_alive()", + "file_type": "code", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L110", + "id": "window_main_win_is_pid_alive", + "community": 10, + "norm_label": "_win_is_pid_alive()" + }, + { + "label": "main()", + "file_type": "code", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L133", + "id": "window_main_main", + "community": 10, + "norm_label": "main()" + }, + { + "label": "_default_handoff()", + "file_type": "code", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L173", + "id": "window_main_default_handoff", + "community": 10, + "norm_label": "_default_handoff()" + }, + { + "label": "``exlab-wizard-window`` console_scripts entry point. Backend Spec \u00a715.3.2. Read", + "file_type": "rationale", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L1", + "id": "window_main_rationale_1", + "community": 10, + "norm_label": "``exlab-wizard-window`` console_scripts entry point. backend spec \u00a715.3.2. read" + }, + { + "label": "Resolved ``server.json`` contents: ``port`` / ``pid`` / ``started_at``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L39", + "id": "window_main_rationale_39", + "community": 10, + "norm_label": "resolved ``server.json`` contents: ``port`` / ``pid`` / ``started_at``." + }, + { + "label": "Read and validate ``/server.json``. Returns the handshake on suc", + "file_type": "rationale", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L50", + "id": "window_main_rationale_50", + "community": 10, + "norm_label": "read and validate ``/server.json``. returns the handshake on suc" + }, + { + "label": "Cross-platform \"is this PID a live process?\" check. Implementation: POSIX `", + "file_type": "rationale", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L75", + "id": "window_main_rationale_75", + "community": 10, + "norm_label": "cross-platform \"is this pid a live process?\" check. implementation: posix `" + }, + { + "label": "Entry point. Backend Spec \u00a715.3.2. ``argv`` is ignored at this phase (the s", + "file_type": "rationale", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L140", + "id": "window_main_rationale_140", + "community": 10, + "norm_label": "entry point. backend spec \u00a715.3.2. ``argv`` is ignored at this phase (the s" + }, + { + "label": "Hand off control to :mod:`pywebview_app`.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L174", + "id": "window_main_rationale_174", + "community": 10, + "norm_label": "hand off control to :mod:`pywebview_app`." + }, + { + "label": "health.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_health_py", + "community": 108, + "norm_label": "health.py" + }, + { + "label": "HealthResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L35", + "id": "api_health_healthresponse", + "community": 108, + "norm_label": "healthresponse" + }, + { + "label": "build_health_router()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L47", + "id": "api_health_build_health_router", + "community": 108, + "norm_label": "build_health_router()" + }, + { + "label": "_component_rollup()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L72", + "id": "api_health_component_rollup", + "community": 108, + "norm_label": "_component_rollup()" + }, + { + "label": "_validator_health()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L83", + "id": "api_health_validator_health", + "community": 108, + "norm_label": "_validator_health()" + }, + { + "label": "_nas_sync_health()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L91", + "id": "api_health_nas_sync_health", + "community": 108, + "norm_label": "_nas_sync_health()" + }, + { + "label": "_lims_health()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L116", + "id": "api_health_lims_health", + "community": 108, + "norm_label": "_lims_health()" + }, + { + "label": "_plugin_host_health()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L131", + "id": "api_health_plugin_host_health", + "community": 108, + "norm_label": "_plugin_host_health()" + }, + { + "label": "_session_store_health()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L144", + "id": "api_health_session_store_health", + "community": 108, + "norm_label": "_session_store_health()" + }, + { + "label": "_top_level_status()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L161", + "id": "api_health_top_level_status", + "community": 108, + "norm_label": "_top_level_status()" + }, + { + "label": "``GET /api/v1/health`` rollup. Backend Spec \u00a74.6.3. Returns a component-health", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L1", + "id": "api_health_rationale_1", + "community": 108, + "norm_label": "``get /api/v1/health`` rollup. backend spec \u00a74.6.3. returns a component-health" + }, + { + "label": "``GET /health`` response body. Backend Spec \u00a74.6.3.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L36", + "id": "api_health_rationale_36", + "community": 108, + "norm_label": "``get /health`` response body. backend spec \u00a74.6.3." + }, + { + "label": "Construct the health router. Always available.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L48", + "id": "api_health_rationale_48", + "community": 108, + "norm_label": "construct the health router. always available." + }, + { + "label": "Build the \u00a74.6.3 components block from the live dependencies.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L73", + "id": "api_health_rationale_73", + "community": 108, + "norm_label": "build the \u00a74.6.3 components block from the live dependencies." + }, + { + "label": "Aggregate per-component statuses into the \u00a74.6.3 top-level value. Top-level", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L162", + "id": "api_health_rationale_162", + "community": 108, + "norm_label": "aggregate per-component statuses into the \u00a74.6.3 top-level value. top-level" + }, + { + "label": "_dependencies.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_dependencies_py", + "community": 297, + "norm_label": "_dependencies.py" + }, + { + "label": "lims_password_present()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L31", + "id": "api_dependencies_lims_password_present", + "community": 297, + "norm_label": "lims_password_present()" + }, + { + "label": "nas_password_present()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L51", + "id": "api_dependencies_nas_password_present", + "community": 84, + "norm_label": "nas_password_present()" + }, + { + "label": "require_deps()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L75", + "id": "api_dependencies_require_deps", + "community": 118, + "norm_label": "require_deps()" + }, + { + "label": "require_controller()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L95", + "id": "api_dependencies_require_controller", + "community": 297, + "norm_label": "require_controller()" + }, + { + "label": "Shared FastAPI dependency helpers for the wizard's HTTP routers. The lifespan h", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L1", + "id": "api_dependencies_rationale_1", + "community": 297, + "norm_label": "shared fastapi dependency helpers for the wizard's http routers. the lifespan h" + }, + { + "label": "Return whether a LIMS password is stored -- the repo-wide reader. Every sur", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L32", + "id": "api_dependencies_rationale_32", + "community": 297, + "norm_label": "return whether a lims password is stored -- the repo-wide reader. every sur" + }, + { + "label": "Return whether the NAS keyring password is set for ``equipment_id``. Rclone", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L52", + "id": "api_dependencies_rationale_52", + "community": 84, + "norm_label": "return whether the nas keyring password is set for ``equipment_id``. rclone" + }, + { + "label": "Return ``app.state.dependencies`` or raise a structured 503. A missing depe", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L76", + "id": "api_dependencies_rationale_76", + "community": 118, + "norm_label": "return ``app.state.dependencies`` or raise a structured 503. a missing depe" + }, + { + "label": "Return ``deps.controller`` or raise a structured 503. Used by the routes th", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L96", + "id": "api_dependencies_rationale_96", + "community": 297, + "norm_label": "return ``deps.controller`` or raise a structured 503. used by the routes th" + }, + { + "label": "events.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_events_py", + "community": 13, + "norm_label": "events.py" + }, + { + "label": "PhaseEvent", + "file_type": "code", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L46", + "id": "api_events_phaseevent", + "community": 13, + "norm_label": "phaseevent" + }, + { + "label": "ProgressEvent", + "file_type": "code", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L63", + "id": "api_events_progressevent", + "community": 13, + "norm_label": "progressevent" + }, + { + "label": "InputRequiredEvent", + "file_type": "code", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L76", + "id": "api_events_inputrequiredevent", + "community": 13, + "norm_label": "inputrequiredevent" + }, + { + "label": "WarningEvent", + "file_type": "code", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L96", + "id": "api_events_warningevent", + "community": 13, + "norm_label": "warningevent" + }, + { + "label": "DoneEvent", + "file_type": "code", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L113", + "id": "api_events_doneevent", + "community": 13, + "norm_label": "doneevent" + }, + { + "label": "FailedEvent", + "file_type": "code", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L129", + "id": "api_events_failedevent", + "community": 13, + "norm_label": "failedevent" + }, + { + "label": "SnapshotEvent", + "file_type": "code", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L146", + "id": "api_events_snapshotevent", + "community": 13, + "norm_label": "snapshotevent" + }, + { + "label": "DeltaEvent", + "file_type": "code", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L163", + "id": "api_events_deltaevent", + "community": 13, + "norm_label": "deltaevent" + }, + { + "label": "encode_event()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L189", + "id": "api_events_encode_event", + "community": 13, + "norm_label": "encode_event()" + }, + { + "label": "event_from_dict()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L198", + "id": "api_events_event_from_dict", + "community": 13, + "norm_label": "event_from_dict()" + }, + { + "label": "WebSocket frame envelope types. Backend Spec \u00a74.6.2. These ``msgspec.Struct`` t", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L1", + "id": "api_events_rationale_1", + "community": 13, + "norm_label": "websocket frame envelope types. backend spec \u00a74.6.2. these ``msgspec.struct`` t" + }, + { + "label": "Per-state phase frame. Backend Spec \u00a74.6.2. Emitted on every state transiti", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L52", + "id": "api_events_rationale_52", + "community": 13, + "norm_label": "per-state phase frame. backend spec \u00a74.6.2. emitted on every state transiti" + }, + { + "label": "Progress frame for the long-running plugin pass. Backend Spec \u00a74.6.2.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L69", + "id": "api_events_rationale_69", + "community": 13, + "norm_label": "progress frame for the long-running plugin pass. backend spec \u00a74.6.2." + }, + { + "label": "Plugin escalation frame. Backend Spec \u00a74.6.2 / \u00a76.4. ``fields`` is the plug", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L82", + "id": "api_events_rationale_82", + "community": 13, + "norm_label": "plugin escalation frame. backend spec \u00a74.6.2 / \u00a76.4. ``fields`` is the plug" + }, + { + "label": "Non-fatal warning frame. Backend Spec \u00a74.6.2. Emitted by the controller whe", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L102", + "id": "api_events_rationale_102", + "community": 13, + "norm_label": "non-fatal warning frame. backend spec \u00a74.6.2. emitted by the controller whe" + }, + { + "label": "Terminal success frame. Backend Spec \u00a74.6.2. ``result`` carries the final s", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L119", + "id": "api_events_rationale_119", + "community": 13, + "norm_label": "terminal success frame. backend spec \u00a74.6.2. ``result`` carries the final s" + }, + { + "label": "Terminal failure frame. Backend Spec \u00a74.6.2. ``error`` follows the \u00a74.6.3 e", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L135", + "id": "api_events_rationale_135", + "community": 13, + "norm_label": "terminal failure frame. backend spec \u00a74.6.2. ``error`` follows the \u00a74.6.3 e" + }, + { + "label": "Full audit snapshot frame for the Problems pub-sub channel. Sent immediatel", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L152", + "id": "api_events_rationale_152", + "community": 13, + "norm_label": "full audit snapshot frame for the problems pub-sub channel. sent immediatel" + }, + { + "label": "Delta frame for the Problems pub-sub channel. Backend Spec \u00a74.6.2. Sent on", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L169", + "id": "api_events_rationale_169", + "community": 13, + "norm_label": "delta frame for the problems pub-sub channel. backend spec \u00a74.6.2. sent on" + }, + { + "label": "Encode a typed WebSocket frame to JSON bytes via ``msgspec.json``. Single d", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L190", + "id": "api_events_rationale_190", + "community": 13, + "norm_label": "encode a typed websocket frame to json bytes via ``msgspec.json``. single d" + }, + { + "label": "Convert a plain dict (e.g. from the controller's event queue) into the match", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L199", + "id": "api_events_rationale_199", + "community": 13, + "norm_label": "convert a plain dict (e.g. from the controller's event queue) into the match" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_init_py", + "community": 315, + "norm_label": "__init__.py" + }, + { + "label": "setup.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_setup_py", + "community": 84, + "norm_label": "setup.py" + }, + { + "label": "SetupStatusResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L72", + "id": "api_setup_setupstatusresponse", + "community": 84, + "norm_label": "setupstatusresponse" + }, + { + "label": "LIMSTestRequest", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L83", + "id": "api_setup_limstestrequest", + "community": 84, + "norm_label": "limstestrequest" + }, + { + "label": "EquipmentTestRequest", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L99", + "id": "api_setup_equipmenttestrequest", + "community": 84, + "norm_label": "equipmenttestrequest" + }, + { + "label": "ProbeResult", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L115", + "id": "api_setup_proberesult", + "community": 84, + "norm_label": "proberesult" + }, + { + "label": "AutostartRequest", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L133", + "id": "api_setup_autostartrequest", + "community": 84, + "norm_label": "autostartrequest" + }, + { + "label": "AutostartResult", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L141", + "id": "api_setup_autostartresult", + "community": 84, + "norm_label": "autostartresult" + }, + { + "label": "compute_setup_state()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L155", + "id": "api_setup_compute_setup_state", + "community": 84, + "norm_label": "compute_setup_state()" + }, + { + "label": "is_creation_blocked()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L172", + "id": "api_setup_is_creation_blocked", + "community": 84, + "norm_label": "is_creation_blocked()" + }, + { + "label": "setup_state_gate()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L182", + "id": "api_setup_setup_state_gate", + "community": 84, + "norm_label": "setup_state_gate()" + }, + { + "label": "build_setup_router()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L221", + "id": "api_setup_build_setup_router", + "community": 112, + "norm_label": "build_setup_router()" + }, + { + "label": "_coerce_probe_dict()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L312", + "id": "api_setup_coerce_probe_dict", + "community": 84, + "norm_label": "_coerce_probe_dict()" + }, + { + "label": "_resolve_equipment()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L329", + "id": "api_setup_resolve_equipment", + "community": 84, + "norm_label": "_resolve_equipment()" + }, + { + "label": "_await_or_call()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L348", + "id": "api_setup_await_or_call", + "community": 84, + "norm_label": "_await_or_call()" + }, + { + "label": "Setup-state gate + ``/setup/*`` endpoints. Backend Spec \u00a74.6, \u00a74.9. Two respons", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L1", + "id": "api_setup_rationale_1", + "community": 84, + "norm_label": "setup-state gate + ``/setup/*`` endpoints. backend spec \u00a74.6, \u00a74.9. two respons" + }, + { + "label": "``GET /setup/status`` response. Backend Spec \u00a74.9.3.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L73", + "id": "api_setup_rationale_73", + "community": 84, + "norm_label": "``get /setup/status`` response. backend spec \u00a74.9.3." + }, + { + "label": "``POST /setup/test-lims`` request body. Either reference the currently-conf", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L84", + "id": "api_setup_rationale_84", + "community": 84, + "norm_label": "``post /setup/test-lims`` request body. either reference the currently-conf" + }, + { + "label": "``POST /setup/test-equipment`` request body. Rclone-only NAS sync migration", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L100", + "id": "api_setup_rationale_100", + "community": 84, + "norm_label": "``post /setup/test-equipment`` request body. rclone-only nas sync migration" + }, + { + "label": "Common ``ok``/``reason`` payload for the diagnostics endpoints.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L116", + "id": "api_setup_rationale_116", + "community": 84, + "norm_label": "common ``ok``/``reason`` payload for the diagnostics endpoints." + }, + { + "label": "``POST /setup/autostart`` request body. Backend Spec \u00a74.9.5 step 0.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L134", + "id": "api_setup_rationale_134", + "community": 84, + "norm_label": "``post /setup/autostart`` request body. backend spec \u00a74.9.5 step 0." + }, + { + "label": "``POST /setup/autostart`` response.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L142", + "id": "api_setup_rationale_142", + "community": 84, + "norm_label": "``post /setup/autostart`` response." + }, + { + "label": "Evaluate the \u00a74.9.1 state for the app's current dependencies. The dependenc", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L156", + "id": "api_setup_rationale_156", + "community": 84, + "norm_label": "evaluate the \u00a74.9.1 state for the app's current dependencies. the dependenc" + }, + { + "label": "Return True when ``state`` should gate creation flows. Per \u00a74.9.4 the soft", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L173", + "id": "api_setup_rationale_173", + "community": 84, + "norm_label": "return true when ``state`` should gate creation flows. per \u00a74.9.4 the soft" + }, + { + "label": "FastAPI dependency that gates a route on setup state. Looks up the app's bo", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L183", + "id": "api_setup_rationale_183", + "community": 84, + "norm_label": "fastapi dependency that gates a route on setup state. looks up the app's bo" + }, + { + "label": "Construct the ``/setup/*`` router. Always-available endpoints.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L222", + "id": "api_setup_rationale_222", + "community": 112, + "norm_label": "construct the ``/setup/*`` router. always-available endpoints." + }, + { + "label": "Build a ``ProbeResult`` from a probe's plain-dict return value. Wired throu", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L313", + "id": "api_setup_rationale_313", + "community": 84, + "norm_label": "build a ``proberesult`` from a probe's plain-dict return value. wired throu" + }, + { + "label": "Resolve the equipment to probe by id through ``deps.config``. Rclone-only N", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L330", + "id": "api_setup_rationale_330", + "community": 84, + "norm_label": "resolve the equipment to probe by id through ``deps.config``. rclone-only n" + }, + { + "label": "Invoke a probe that may be sync or async; await the result. The probes are", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L349", + "id": "api_setup_rationale_349", + "community": 84, + "norm_label": "invoke a probe that may be sync or async; await the result. the probes are" + }, + { + "label": "schemas.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_schemas_py", + "community": 0, + "norm_label": "schemas.py" + }, + { + "label": "LimsProjectBlock", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L82", + "id": "api_schemas_limsprojectblock", + "community": 0, + "norm_label": "limsprojectblock" + }, + { + "label": "TemplateBlock", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L102", + "id": "api_schemas_templateblock", + "community": 6, + "norm_label": "templateblock" + }, + { + "label": "PluginIsolation", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L118", + "id": "api_schemas_pluginisolation", + "community": 0, + "norm_label": "pluginisolation" + }, + { + "label": "PluginApplied", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L130", + "id": "api_schemas_pluginapplied", + "community": 0, + "norm_label": "pluginapplied" + }, + { + "label": "PathsBlock", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L148", + "id": "api_schemas_pathsblock", + "community": 6, + "norm_label": "pathsblock" + }, + { + "label": "OrchestratorBlock", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L159", + "id": "api_schemas_orchestratorblock", + "community": 0, + "norm_label": "orchestratorblock" + }, + { + "label": "OverrideEntry", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L190", + "id": "api_schemas_overrideentry", + "community": 122, + "norm_label": "overrideentry" + }, + { + "label": "TombstoneEntry", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L212", + "id": "api_schemas_tombstoneentry", + "community": 0, + "norm_label": "tombstoneentry" + }, + { + "label": "override_entry_to_dict()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L232", + "id": "api_schemas_override_entry_to_dict", + "community": 122, + "norm_label": "override_entry_to_dict()" + }, + { + "label": "tombstone_entry_to_dict()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L242", + "id": "api_schemas_tombstone_entry_to_dict", + "community": 122, + "norm_label": "tombstone_entry_to_dict()" + }, + { + "label": "parse_validation_override_entry()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L249", + "id": "api_schemas_parse_validation_override_entry", + "community": 0, + "norm_label": "parse_validation_override_entry()" + }, + { + "label": "CreationJson", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L271", + "id": "api_schemas_creationjson", + "community": 6, + "norm_label": "creationjson" + }, + { + "label": "ReadmeFieldsJson", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L309", + "id": "api_schemas_readmefieldsjson", + "community": 0, + "norm_label": "readmefieldsjson" + }, + { + "label": "EquipmentJson", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L330", + "id": "api_schemas_equipmentjson", + "community": 0, + "norm_label": "equipmentjson" + }, + { + "label": "TestRunsJson", + "file_type": "code", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L351", + "id": "api_schemas_testrunsjson", + "community": 0, + "norm_label": "testrunsjson" + }, + { + "label": "msgspec.Struct types for the ExLab-Wizard cache files. This module is the singl", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L1", + "id": "api_schemas_rationale_1", + "community": 0, + "norm_label": "msgspec.struct types for the exlab-wizard cache files. this module is the singl" + }, + { + "label": "LIMS-side project identity captured at creation time. Spec \u00a711.3. Required", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L87", + "id": "api_schemas_rationale_87", + "community": 0, + "norm_label": "lims-side project identity captured at creation time. spec \u00a711.3. required" + }, + { + "label": "Template provenance captured at creation time. Spec \u00a711.3.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L107", + "id": "api_schemas_rationale_107", + "community": 6, + "norm_label": "template provenance captured at creation time. spec \u00a711.3." + }, + { + "label": "Plugin worker isolation telemetry. Spec \u00a76.2.4 / \u00a711.3 (added 1.3).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L123", + "id": "api_schemas_rationale_123", + "community": 0, + "norm_label": "plugin worker isolation telemetry. spec \u00a76.2.4 / \u00a711.3 (added 1.3)." + }, + { + "label": "Per-plugin invocation record written into ``plugins_applied``. Spec \u00a76.2.4", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L135", + "id": "api_schemas_rationale_135", + "community": 0, + "norm_label": "per-plugin invocation record written into ``plugins_applied``. spec \u00a76.2.4" + }, + { + "label": "Resolved on-disk paths captured at creation time. Spec \u00a711.3.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L153", + "id": "api_schemas_rationale_153", + "community": 6, + "norm_label": "resolved on-disk paths captured at creation time. spec \u00a711.3." + }, + { + "label": "Orchestrator-mode metadata. Spec \u00a711.3 / \u00a713 / Redesign Spec \u00a73.3. Always p", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L164", + "id": "api_schemas_rationale_164", + "community": 0, + "norm_label": "orchestrator-mode metadata. spec \u00a711.3 / \u00a713 / redesign spec \u00a73.3. always p" + }, + { + "label": "Operator-recorded validation override entry. Spec \u00a711.3. ``revoked`` is ``F", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L195", + "id": "api_schemas_rationale_195", + "community": 122, + "norm_label": "operator-recorded validation override entry. spec \u00a711.3. ``revoked`` is ``f" + }, + { + "label": "Tombstone entry that revokes a prior override by ``id``. Spec \u00a711.3. ``revo", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L217", + "id": "api_schemas_rationale_217", + "community": 0, + "norm_label": "tombstone entry that revokes a prior override by ``id``. spec \u00a711.3. ``revo" + }, + { + "label": "Serialize an ``OverrideEntry`` to a wire-form dict. Uses ``msgspec.structs.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L233", + "id": "api_schemas_rationale_233", + "community": 122, + "norm_label": "serialize an ``overrideentry`` to a wire-form dict. uses ``msgspec.structs." + }, + { + "label": "Serialize a ``TombstoneEntry`` to a wire-form dict. Mirrors ``override_entry", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L243", + "id": "api_schemas_rationale_243", + "community": 122, + "norm_label": "serialize a ``tombstoneentry`` to a wire-form dict. mirrors ``override_entry" + }, + { + "label": "Inspect ``entry[\"revoked\"]`` and ``entry[\"revokes\"]`` to decide which Struct", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L252", + "id": "api_schemas_rationale_252", + "community": 0, + "norm_label": "inspect ``entry[\"revoked\"]`` and ``entry[\"revokes\"]`` to decide which struct" + }, + { + "label": "Top-level ``creation.json`` payload at schema version 1.8. Reading: ``msgsp", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L276", + "id": "api_schemas_rationale_276", + "community": 6, + "norm_label": "top-level ``creation.json`` payload at schema version 1.8. reading: ``msgsp" + }, + { + "label": "``readme_fields.json`` at schema version 1.1. Spec \u00a711.4.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L314", + "id": "api_schemas_rationale_314", + "community": 0, + "norm_label": "``readme_fields.json`` at schema version 1.1. spec \u00a711.4." + }, + { + "label": "``equipment.json`` at schema version 1.0. Spec \u00a711.4.1.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L335", + "id": "api_schemas_rationale_335", + "community": 0, + "norm_label": "``equipment.json`` at schema version 1.0. spec \u00a711.4.1." + }, + { + "label": "``test_runs.json`` marker at schema version 1.0. Spec \u00a711.4.2. Filename ret", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L356", + "id": "api_schemas_rationale_356", + "community": 0, + "norm_label": "``test_runs.json`` marker at schema version 1.0. spec \u00a711.4.2. filename ret" + }, + { + "label": "app.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_app_py", + "community": 53, + "norm_label": "app.py" + }, + { + "label": "AuditChannel", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L77", + "id": "api_app_auditchannel", + "community": 53, + "norm_label": "auditchannel" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L85", + "id": "api_app_auditchannel_init", + "community": 53, + "norm_label": ".__init__()" + }, + { + "label": ".subscribe()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L89", + "id": "api_app_auditchannel_subscribe", + "community": 53, + "norm_label": ".subscribe()" + }, + { + "label": ".publish_snapshot()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L97", + "id": "api_app_auditchannel_publish_snapshot", + "community": 53, + "norm_label": ".publish_snapshot()" + }, + { + "label": ".publish_delta()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L106", + "id": "api_app_auditchannel_publish_delta", + "community": 53, + "norm_label": ".publish_delta()" + }, + { + "label": "._broadcast()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L123", + "id": "api_app_auditchannel_broadcast", + "community": 53, + "norm_label": "._broadcast()" + }, + { + "label": ".close()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L128", + "id": "api_app_auditchannel_close", + "community": 53, + "norm_label": ".close()" + }, + { + "label": "_drain()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L136", + "id": "api_app_drain", + "community": 53, + "norm_label": "_drain()" + }, + { + "label": "_finding_to_dict()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L152", + "id": "api_app_finding_to_dict", + "community": 53, + "norm_label": "_finding_to_dict()" + }, + { + "label": "AppDependencies", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L167", + "id": "api_app_appdependencies", + "community": 125, + "norm_label": "appdependencies" + }, + { + "label": "create_app()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L254", + "id": "api_app_create_app", + "community": 112, + "norm_label": "create_app()" + }, + { + "label": "_audit_loop()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L339", + "id": "api_app_audit_loop", + "community": 53, + "norm_label": "_audit_loop()" + }, + { + "label": "_diff_findings()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L381", + "id": "api_app_diff_findings", + "community": 53, + "norm_label": "_diff_findings()" + }, + { + "label": "FastAPI app + lifespan + dependency wiring. Backend Spec \u00a74.6. The :func:`creat", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L1", + "id": "api_app_rationale_1", + "community": 53, + "norm_label": "fastapi app + lifespan + dependency wiring. backend spec \u00a74.6. the :func:`creat" + }, + { + "label": "Multi-subscriber pub-sub for the Problems WebSocket. Backend Spec \u00a74.6.2. S", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L78", + "id": "api_app_rationale_78", + "community": 53, + "norm_label": "multi-subscriber pub-sub for the problems websocket. backend spec \u00a74.6.2. s" + }, + { + "label": "Return an async iterator that yields every published frame.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L90", + "id": "api_app_rationale_90", + "community": 53, + "norm_label": "return an async iterator that yields every published frame." + }, + { + "label": "Close every subscriber's queue. Idempotent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L129", + "id": "api_app_rationale_129", + "community": 53, + "norm_label": "close every subscriber's queue. idempotent." + }, + { + "label": "Yield from the subscriber queue until a sentinel arrives.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L140", + "id": "api_app_rationale_140", + "community": 53, + "norm_label": "yield from the subscriber queue until a sentinel arrives." + }, + { + "label": "Best-effort serialize a Finding-like object to dict.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L153", + "id": "api_app_rationale_153", + "community": 53, + "norm_label": "best-effort serialize a finding-like object to dict." + }, + { + "label": "Bundle of live components the API surface dispatches to. Production wiring", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L168", + "id": "api_app_rationale_168", + "community": 125, + "norm_label": "bundle of live components the api surface dispatches to. production wiring" + }, + { + "label": "Build the FastAPI app. Backend Spec \u00a74.6. ``config``: optional pre-loaded `", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L261", + "id": "api_app_rationale_261", + "community": 112, + "norm_label": "build the fastapi app. backend spec \u00a74.6. ``config``: optional pre-loaded `" + }, + { + "label": "Background task that re-runs the validator audit every interval. Diffs the", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L340", + "id": "api_app_rationale_340", + "community": 53, + "norm_label": "background task that re-runs the validator audit every interval. diffs the" + }, + { + "label": "Return ``(added, removed, changed)`` keyed on ``(rule, offending_path)``. T", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L384", + "id": "api_app_rationale_384", + "community": 53, + "norm_label": "return ``(added, removed, changed)`` keyed on ``(rule, offending_path)``. t" + }, + { + "label": "errors.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_errors_py", + "community": 20, + "norm_label": "errors.py" + }, + { + "label": "extract_or_create_trace_id()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L96", + "id": "api_errors_extract_or_create_trace_id", + "community": 20, + "norm_label": "extract_or_create_trace_id()" + }, + { + "label": "build_error_envelope()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L110", + "id": "api_errors_build_error_envelope", + "community": 20, + "norm_label": "build_error_envelope()" + }, + { + "label": "error_response()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L140", + "id": "api_errors_error_response", + "community": 20, + "norm_label": "error_response()" + }, + { + "label": "_exlab_validation_handler()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L175", + "id": "api_errors_exlab_validation_handler", + "community": 20, + "norm_label": "_exlab_validation_handler()" + }, + { + "label": "_pydantic_validation_handler()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L197", + "id": "api_errors_pydantic_validation_handler", + "community": 20, + "norm_label": "_pydantic_validation_handler()" + }, + { + "label": "_pydantic_error_to_dict()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L228", + "id": "api_errors_pydantic_error_to_dict", + "community": 20, + "norm_label": "_pydantic_error_to_dict()" + }, + { + "label": "_config_error_handler()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L237", + "id": "api_errors_config_error_handler", + "community": 20, + "norm_label": "_config_error_handler()" + }, + { + "label": "_keyring_unavailable_handler()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L246", + "id": "api_errors_keyring_unavailable_handler", + "community": 20, + "norm_label": "_keyring_unavailable_handler()" + }, + { + "label": "_schema_major_mismatch_handler()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L255", + "id": "api_errors_schema_major_mismatch_handler", + "community": 20, + "norm_label": "_schema_major_mismatch_handler()" + }, + { + "label": "_setup_incomplete_handler()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L265", + "id": "api_errors_setup_incomplete_handler", + "community": 20, + "norm_label": "_setup_incomplete_handler()" + }, + { + "label": "_template_load_error_handler()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L289", + "id": "api_errors_template_load_error_handler", + "community": 20, + "norm_label": "_template_load_error_handler()" + }, + { + "label": "_http_exception_handler()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L303", + "id": "api_errors_http_exception_handler", + "community": 20, + "norm_label": "_http_exception_handler()" + }, + { + "label": "_status_to_code()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L336", + "id": "api_errors_status_to_code", + "community": 20, + "norm_label": "_status_to_code()" + }, + { + "label": "_generic_handler()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L349", + "id": "api_errors_generic_handler", + "community": 20, + "norm_label": "_generic_handler()" + }, + { + "label": "register_exception_handlers()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L368", + "id": "api_errors_register_exception_handlers", + "community": 20, + "norm_label": "register_exception_handlers()" + }, + { + "label": "_register()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L395", + "id": "api_errors_register", + "community": 20, + "norm_label": "_register()" + }, + { + "label": "Error envelope helpers + FastAPI exception handlers. Backend Spec \u00a74.6.3. Every", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L1", + "id": "api_errors_rationale_1", + "community": 20, + "norm_label": "error envelope helpers + fastapi exception handlers. backend spec \u00a74.6.3. every" + }, + { + "label": "Return the request's ``X-Trace-Id`` header, else a fresh hex id. Server-gen", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L97", + "id": "api_errors_rationale_97", + "community": 20, + "norm_label": "return the request's ``x-trace-id`` header, else a fresh hex id. server-gen" + }, + { + "label": "Build the \u00a74.6.3 envelope dict. ``code`` is validated against :data:`ERROR_", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L118", + "id": "api_errors_rationale_118", + "community": 20, + "norm_label": "build the \u00a74.6.3 envelope dict. ``code`` is validated against :data:`error_" + }, + { + "label": "Build a FastAPI JSONResponse carrying the \u00a74.6.3 envelope. ``extra`` is mer", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L150", + "id": "api_errors_rationale_150", + "community": 20, + "norm_label": "build a fastapi jsonresponse carrying the \u00a74.6.3 envelope. ``extra`` is mer" + }, + { + "label": "Translate :class:`exlab_wizard.errors.ValidationError` to envelope. The con", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L176", + "id": "api_errors_rationale_176", + "community": 20, + "norm_label": "translate :class:`exlab_wizard.errors.validationerror` to envelope. the con" + }, + { + "label": "Translate Pydantic validation errors to the \u00a74.6.3 envelope. FastAPI raises", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L200", + "id": "api_errors_rationale_200", + "community": 20, + "norm_label": "translate pydantic validation errors to the \u00a74.6.3 envelope. fastapi raises" + }, + { + "label": "Strip Pydantic error dicts of unhashable / large fields.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L229", + "id": "api_errors_rationale_229", + "community": 20, + "norm_label": "strip pydantic error dicts of unhashable / large fields." + }, + { + "label": "Translate :class:`SetupIncompleteError` to the \u00a74.9.2 envelope. The control", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L266", + "id": "api_errors_rationale_266", + "community": 20, + "norm_label": "translate :class:`setupincompleteerror` to the \u00a74.9.2 envelope. the control" + }, + { + "label": "Translate an :class:`HTTPException` into the \u00a74.6.3 envelope. Routers raise", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L304", + "id": "api_errors_rationale_304", + "community": 20, + "norm_label": "translate an :class:`httpexception` into the \u00a74.6.3 envelope. routers raise" + }, + { + "label": "Best-effort default code for a bare ``HTTPException``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L337", + "id": "api_errors_rationale_337", + "community": 20, + "norm_label": "best-effort default code for a bare ``httpexception``." + }, + { + "label": "Catch-all 500 handler. Backend Spec \u00a74.6.3 last paragraph. The exception's", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L350", + "id": "api_errors_rationale_350", + "community": 20, + "norm_label": "catch-all 500 handler. backend spec \u00a74.6.3 last paragraph. the exception's" + }, + { + "label": "Attach the \u00a74.6.3 envelope handlers to a FastAPI app. Registered in priorit", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L369", + "id": "api_errors_rationale_369", + "community": 20, + "norm_label": "attach the \u00a74.6.3 envelope handlers to a fastapi app. registered in priorit" + }, + { + "label": "Wrap ``app.add_exception_handler`` so the handler is accepted as ``Any``. S", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L400", + "id": "api_errors_rationale_400", + "community": 20, + "norm_label": "wrap ``app.add_exception_handler`` so the handler is accepted as ``any``. s" + }, + { + "label": "browse.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_routers_browse_py", + "community": 151, + "norm_label": "browse.py" + }, + { + "label": "RunNode", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L67", + "id": "routers_browse_runnode", + "community": 151, + "norm_label": "runnode" + }, + { + "label": "ProjectNode", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L77", + "id": "routers_browse_projectnode", + "community": 151, + "norm_label": "projectnode" + }, + { + "label": "EquipmentNode", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L91", + "id": "routers_browse_equipmentnode", + "community": 151, + "norm_label": "equipmentnode" + }, + { + "label": "RelayEquipmentNode", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L109", + "id": "routers_browse_relayequipmentnode", + "community": 151, + "norm_label": "relayequipmentnode" + }, + { + "label": "TreeResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L125", + "id": "routers_browse_treeresponse", + "community": 37, + "norm_label": "treeresponse" + }, + { + "label": "FolderEntry", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L132", + "id": "routers_browse_folderentry", + "community": 1, + "norm_label": "folderentry" + }, + { + "label": "FolderResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L156", + "id": "routers_browse_folderresponse", + "community": 1, + "norm_label": "folderresponse" + }, + { + "label": "RunDetail", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L165", + "id": "routers_browse_rundetail", + "community": 37, + "norm_label": "rundetail" + }, + { + "label": "RunLogEntry", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L180", + "id": "routers_browse_runlogentry", + "community": 37, + "norm_label": "runlogentry" + }, + { + "label": "RunLogResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L199", + "id": "routers_browse_runlogresponse", + "community": 37, + "norm_label": "runlogresponse" + }, + { + "label": "build_browse_router()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L214", + "id": "routers_browse_build_browse_router", + "community": 418, + "norm_label": "build_browse_router()" + }, + { + "label": "_run_log_from_queue()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L341", + "id": "routers_browse_run_log_from_queue", + "community": 151, + "norm_label": "_run_log_from_queue()" + }, + { + "label": "_path_is_under_allowed_root()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L375", + "id": "routers_browse_path_is_under_allowed_root", + "community": 321, + "norm_label": "_path_is_under_allowed_root()" + }, + { + "label": "_build_equipment_node()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L405", + "id": "routers_browse_build_equipment_node", + "community": 151, + "norm_label": "_build_equipment_node()" + }, + { + "label": "build_received_equipment_nodes()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L420", + "id": "routers_browse_build_received_equipment_nodes", + "community": 151, + "norm_label": "build_received_equipment_nodes()" + }, + { + "label": "_relay_label_from_first_run()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L463", + "id": "routers_browse_relay_label_from_first_run", + "community": 211, + "norm_label": "_relay_label_from_first_run()" + }, + { + "label": "_find_run_root()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L494", + "id": "routers_browse_find_run_root", + "community": 187, + "norm_label": "_find_run_root()" + }, + { + "label": "_read_sync_state()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L515", + "id": "routers_browse_read_sync_state", + "community": 187, + "norm_label": "_read_sync_state()" + }, + { + "label": "_file_state_from_record()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L531", + "id": "routers_browse_file_state_from_record", + "community": 187, + "norm_label": "_file_state_from_record()" + }, + { + "label": "_per_file_sync_status()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L550", + "id": "routers_browse_per_file_sync_status", + "community": 187, + "norm_label": "_per_file_sync_status()" + }, + { + "label": "_run_relative_posix()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L571", + "id": "routers_browse_run_relative_posix", + "community": 187, + "norm_label": "_run_relative_posix()" + }, + { + "label": "_iter_run_or_project_subdirs()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L579", + "id": "routers_browse_iter_run_or_project_subdirs", + "community": 211, + "norm_label": "_iter_run_or_project_subdirs()" + }, + { + "label": "_scan_projects()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L602", + "id": "routers_browse_scan_projects", + "community": 151, + "norm_label": "_scan_projects()" + }, + { + "label": "_build_project_node()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L610", + "id": "routers_browse_build_project_node", + "community": 211, + "norm_label": "_build_project_node()" + }, + { + "label": "_scan_run_children()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L639", + "id": "routers_browse_scan_run_children", + "community": 211, + "norm_label": "_scan_run_children()" + }, + { + "label": "_build_run_node()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L652", + "id": "routers_browse_build_run_node", + "community": 211, + "norm_label": "_build_run_node()" + }, + { + "label": "_run_rollup_status()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L675", + "id": "routers_browse_run_rollup_status", + "community": 211, + "norm_label": "_run_rollup_status()" + }, + { + "label": "_read_readme()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L696", + "id": "routers_browse_read_readme", + "community": 417, + "norm_label": "_read_readme()" + }, + { + "label": "scan_folder_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L712", + "id": "routers_browse_scan_folder_sync", + "community": 187, + "norm_label": "scan_folder_sync()" + }, + { + "label": "_tombstone_entries()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L808", + "id": "routers_browse_tombstone_entries", + "community": 187, + "norm_label": "_tombstone_entries()" + }, + { + "label": "build_hierarchy_dict()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L853", + "id": "routers_browse_build_hierarchy_dict", + "community": 151, + "norm_label": "build_hierarchy_dict()" + }, + { + "label": "_projects_for_ui_tree()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L887", + "id": "routers_browse_projects_for_ui_tree", + "community": 151, + "norm_label": "_projects_for_ui_tree()" + }, + { + "label": "``/tree`` and ``/run/{path}`` browse endpoints. Backend Spec \u00a74.6.1. Two endpoi", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L1", + "id": "routers_browse_rationale_1", + "community": 151, + "norm_label": "``/tree`` and ``/run/{path}`` browse endpoints. backend spec \u00a74.6.1. two endpoi" + }, + { + "label": "An owned-equipment node in the tree (Redesign \u00a73.3). ``sync_mode`` (\"nas\" |", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L92", + "id": "routers_browse_rationale_92", + "community": 151, + "norm_label": "an owned-equipment node in the tree (redesign \u00a73.3). ``sync_mode`` (\"nas\" |" + }, + { + "label": "A received-equipment node auto-discovered from the staging area. Redesign \u00a7", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L110", + "id": "routers_browse_rationale_110", + "community": 151, + "norm_label": "a received-equipment node auto-discovered from the staging area. redesign \u00a7" + }, + { + "label": "One row in the new ``GET /folder/{path}`` response. Redesign \u00a74.3 / \u00a75. Ope", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L133", + "id": "routers_browse_rationale_133", + "community": 1, + "norm_label": "one row in the new ``get /folder/{path}`` response. redesign \u00a74.3 / \u00a75. ope" + }, + { + "label": "Immediate contents of one folder. Redesign \u00a75 (live file feed).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L157", + "id": "routers_browse_rationale_157", + "community": 1, + "norm_label": "immediate contents of one folder. redesign \u00a75 (live file feed)." + }, + { + "label": "One row in the ``GET /run/{path}/log`` response. The orchestrator does not", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L181", + "id": "routers_browse_rationale_181", + "community": 37, + "norm_label": "one row in the ``get /run/{path}/log`` response. the orchestrator does not" + }, + { + "label": "``GET /run/{path}/log`` response (Redesign \u00a74.6 View-log surface).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L200", + "id": "routers_browse_rationale_200", + "community": 37, + "norm_label": "``get /run/{path}/log`` response (redesign \u00a74.6 view-log surface)." + }, + { + "label": "Construct the ``/tree`` + ``/run`` router.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L215", + "id": "routers_browse_rationale_215", + "community": 418, + "norm_label": "construct the ``/tree`` + ``/run`` router." + }, + { + "label": "Derive a run's per-run log from its sync-queue job. Returns ``(history, cur", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L342", + "id": "routers_browse_rationale_342", + "community": 151, + "norm_label": "derive a run's per-run log from its sync-queue job. returns ``(history, cur" + }, + { + "label": "Return True if ``path`` is under any of the configured roots. Redesign \u00a75 /", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L376", + "id": "routers_browse_rationale_376", + "community": 321, + "norm_label": "return true if ``path`` is under any of the configured roots. redesign \u00a75 /" + }, + { + "label": "Walk the staging root and surface received-equipment nodes. Redesign \u00a73.3:", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L421", + "id": "routers_browse_rationale_421", + "community": 151, + "norm_label": "walk the staging root and surface received-equipment nodes. redesign \u00a73.3:" + }, + { + "label": "Best-effort: read the first creation.json under this equipment to pick up th", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L464", + "id": "routers_browse_rationale_464", + "community": 211, + "norm_label": "best-effort: read the first creation.json under this equipment to pick up th" + }, + { + "label": "Walk up from ``folder`` to the nearest run directory, or ``None``. A run di", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L495", + "id": "routers_browse_rationale_495", + "community": 187, + "norm_label": "walk up from ``folder`` to the nearest run directory, or ``none``. a run di" + }, + { + "label": "Read a run's ``sync_state.json`` via :class:`SyncStateWriter`. Returns the", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L516", + "id": "routers_browse_rationale_516", + "community": 187, + "norm_label": "read a run's ``sync_state.json`` via :class:`syncstatewriter`. returns the" + }, + { + "label": "Map a ``sync_state.json`` record + on-disk presence to a GUI state. The fiv", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L532", + "id": "routers_browse_rationale_532", + "community": 187, + "norm_label": "map a ``sync_state.json`` record + on-disk presence to a gui state. the fiv" + }, + { + "label": "Return the per-file GUI sync state for a folder-list row. Operator-free per", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L551", + "id": "routers_browse_rationale_551", + "community": 187, + "norm_label": "return the per-file gui sync state for a folder-list row. operator-free per" + }, + { + "label": "Return ``path`` relative to ``run_root`` as a POSIX string, or ``None``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L572", + "id": "routers_browse_rationale_572", + "community": 187, + "norm_label": "return ``path`` relative to ``run_root`` as a posix string, or ``none``." + }, + { + "label": "Return name-sorted real subdirectories of ``parent``, sans the cache. Hides", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L580", + "id": "routers_browse_rationale_580", + "community": 211, + "norm_label": "return name-sorted real subdirectories of ``parent``, sans the cache. hides" + }, + { + "label": "Return a sorted list of project nodes under an equipment dir.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L603", + "id": "routers_browse_rationale_603", + "community": 151, + "norm_label": "return a sorted list of project nodes under an equipment dir." + }, + { + "label": "Build a tree run node, deriving its rollup from ``sync_state.json``. Operat", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L653", + "id": "routers_browse_rationale_653", + "community": 211, + "norm_label": "build a tree run node, deriving its rollup from ``sync_state.json``. operat" + }, + { + "label": "Return a run's derived ``RunSyncState`` rollup value, or ``None``. Reads ``", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L676", + "id": "routers_browse_rationale_676", + "community": 211, + "norm_label": "return a run's derived ``runsyncstate`` rollup value, or ``none``. reads ``" + }, + { + "label": "Return the run's README.md text, or ``None`` if absent / unreadable.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L697", + "id": "routers_browse_rationale_697", + "community": 417, + "norm_label": "return the run's readme.md text, or ``none`` if absent / unreadable." + }, + { + "label": "Synchronous core of the ``GET /folder/{path}`` endpoint. Extracted so the N", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L713", + "id": "routers_browse_rationale_713", + "community": 187, + "norm_label": "synchronous core of the ``get /folder/{path}`` endpoint. extracted so the n" + }, + { + "label": "Build \"On NAS\" tombstone rows for cleared-run files absent on disk. Operato", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L814", + "id": "routers_browse_rationale_814", + "community": 187, + "norm_label": "build \"on nas\" tombstone rows for cleared-run files absent on disk. operato" + }, + { + "label": "Compose the nested hierarchy dict that ``ui.components.tree.build_tree`` expects", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L854", + "id": "routers_browse_rationale_854", + "community": 151, + "norm_label": "compose the nested hierarchy dict that ``ui.components.tree.build_tree`` expects" + }, + { + "label": "sessions.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_routers_sessions_py", + "community": 13, + "norm_label": "sessions.py" + }, + { + "label": "_ProjectSessionBody", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L63", + "id": "routers_sessions_projectsessionbody", + "community": 13, + "norm_label": "_projectsessionbody" + }, + { + "label": "_RunSessionBody", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L83", + "id": "routers_sessions_runsessionbody", + "community": 13, + "norm_label": "_runsessionbody" + }, + { + "label": "SessionHandleResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L105", + "id": "routers_sessions_sessionhandleresponse", + "community": 13, + "norm_label": "sessionhandleresponse" + }, + { + "label": "_ResumeBody", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L119", + "id": "routers_sessions_resumebody", + "community": 13, + "norm_label": "_resumebody" + }, + { + "label": "_CancelBody", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L127", + "id": "routers_sessions_cancelbody", + "community": 13, + "norm_label": "_cancelbody" + }, + { + "label": "build_sessions_router()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L140", + "id": "routers_sessions_build_sessions_router", + "community": 13, + "norm_label": "build_sessions_router()" + }, + { + "label": "_build_project_request()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L284", + "id": "routers_sessions_build_project_request", + "community": 13, + "norm_label": "_build_project_request()" + }, + { + "label": "_build_run_request()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L297", + "id": "routers_sessions_build_run_request", + "community": 13, + "norm_label": "_build_run_request()" + }, + { + "label": "_handle_to_response()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L316", + "id": "routers_sessions_handle_to_response", + "community": 13, + "norm_label": "_handle_to_response()" + }, + { + "label": "_stream_session_events()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L336", + "id": "routers_sessions_stream_session_events", + "community": 13, + "norm_label": "_stream_session_events()" + }, + { + "label": "``/sessions`` router. Backend Spec \u00a74.6.1, \u00a74.6.2. Endpoints: * ``POST /sessio", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L1", + "id": "routers_sessions_rationale_1", + "community": 13, + "norm_label": "``/sessions`` router. backend spec \u00a74.6.1, \u00a74.6.2. endpoints: * ``post /sessio" + }, + { + "label": "Body for a project-creation session. The ``kind`` discriminator selects thi", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L64", + "id": "routers_sessions_rationale_64", + "community": 13, + "norm_label": "body for a project-creation session. the ``kind`` discriminator selects thi" + }, + { + "label": "Body for a run / test-run creation session.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L84", + "id": "routers_sessions_rationale_84", + "community": 13, + "norm_label": "body for a run / test-run creation session." + }, + { + "label": "Response shape for the create / status endpoints.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L106", + "id": "routers_sessions_rationale_106", + "community": 13, + "norm_label": "response shape for the create / status endpoints." + }, + { + "label": "``POST /sessions/{id}/resume`` body.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L120", + "id": "routers_sessions_rationale_120", + "community": 13, + "norm_label": "``post /sessions/{id}/resume`` body." + }, + { + "label": "``POST /sessions/{id}/cancel`` body.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L128", + "id": "routers_sessions_rationale_128", + "community": 13, + "norm_label": "``post /sessions/{id}/cancel`` body." + }, + { + "label": "Construct the ``/sessions`` router. Routes are gated by the setup-state dep", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L141", + "id": "routers_sessions_rationale_141", + "community": 13, + "norm_label": "construct the ``/sessions`` router. routes are gated by the setup-state dep" + }, + { + "label": "Build the response model from a controller :class:`SessionHandle` and the live s", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L317", + "id": "routers_sessions_rationale_317", + "community": 13, + "norm_label": "build the response model from a controller :class:`sessionhandle` and the live s" + }, + { + "label": "Pump events from the controller's queue into the WebSocket. Each frame from", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L341", + "id": "routers_sessions_rationale_341", + "community": 13, + "norm_label": "pump events from the controller's queue into the websocket. each frame from" + }, + { + "label": "config.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_routers_config_py", + "community": 37, + "norm_label": "config.py" + }, + { + "label": "ConfigUpdateResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L46", + "id": "routers_config_configupdateresponse", + "community": 37, + "norm_label": "configupdateresponse" + }, + { + "label": "EquipmentAppendResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L57", + "id": "routers_config_equipmentappendresponse", + "community": 37, + "norm_label": "equipmentappendresponse" + }, + { + "label": "build_config_router()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L74", + "id": "routers_config_build_config_router", + "community": 112, + "norm_label": "build_config_router()" + }, + { + "label": "_await_or_call()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L163", + "id": "routers_config_await_or_call", + "community": 37, + "norm_label": "_await_or_call()" + }, + { + "label": "_apply_live_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L171", + "id": "routers_config_apply_live_config", + "community": 106, + "norm_label": "_apply_live_config()" + }, + { + "label": "``/config`` router. Backend Spec \u00a74.6.1, \u00a74.9. Endpoints: * ``GET /config`` --", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L1", + "id": "routers_config_rationale_1", + "community": 37, + "norm_label": "``/config`` router. backend spec \u00a74.6.1, \u00a74.9. endpoints: * ``get /config`` --" + }, + { + "label": "``PUT /config`` response with the new setup state.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L47", + "id": "routers_config_rationale_47", + "community": 37, + "norm_label": "``put /config`` response with the new setup state." + }, + { + "label": "``POST /config/equipment`` response: the new setup state + appended id. Red", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L58", + "id": "routers_config_rationale_58", + "community": 37, + "norm_label": "``post /config/equipment`` response: the new setup state + appended id. red" + }, + { + "label": "Construct the ``/config`` router. Routes are always available.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L75", + "id": "routers_config_rationale_75", + "community": 112, + "norm_label": "construct the ``/config`` router. routes are always available." + }, + { + "label": "Invoke a saver that may be sync or async.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L164", + "id": "routers_config_rationale_164", + "community": 37, + "norm_label": "invoke a saver that may be sync or async." + }, + { + "label": "Push ``cfg`` into the running components, then keep it as the live config.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L172", + "id": "routers_config_rationale_172", + "community": 106, + "norm_label": "push ``cfg`` into the running components, then keep it as the live config." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_routers_init_py", + "community": 419, + "norm_label": "__init__.py" + }, + { + "label": "API routers package. Backend Spec \u00a74.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/__init__.py", + "source_location": "L1", + "id": "routers_init_rationale_1", + "community": 419, + "norm_label": "api routers package. backend spec \u00a74." + }, + { + "label": "operations.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_routers_operations_py", + "community": 237, + "norm_label": "operations.py" + }, + { + "label": "OperationEntry", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L36", + "id": "routers_operations_operationentry", + "community": 237, + "norm_label": "operationentry" + }, + { + "label": "OperationsResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L51", + "id": "routers_operations_operationsresponse", + "community": 237, + "norm_label": "operationsresponse" + }, + { + "label": "build_operations_router()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L59", + "id": "routers_operations_build_operations_router", + "community": 237, + "norm_label": "build_operations_router()" + }, + { + "label": "_session_to_entry()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L89", + "id": "routers_operations_session_to_entry", + "community": 237, + "norm_label": "_session_to_entry()" + }, + { + "label": "``/operations`` router. Backend Spec \u00a74.6.1, Frontend \u00a79.5. Lists all in-flight", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L1", + "id": "routers_operations_rationale_1", + "community": 237, + "norm_label": "``/operations`` router. backend spec \u00a74.6.1, frontend \u00a79.5. lists all in-flight" + }, + { + "label": "One row in the Operations panel. Backend Spec \u00a74.6.1, Frontend \u00a79.5.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L37", + "id": "routers_operations_rationale_37", + "community": 237, + "norm_label": "one row in the operations panel. backend spec \u00a74.6.1, frontend \u00a79.5." + }, + { + "label": "``GET /operations`` response.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L52", + "id": "routers_operations_rationale_52", + "community": 237, + "norm_label": "``get /operations`` response." + }, + { + "label": "Construct the ``/operations`` router.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L60", + "id": "routers_operations_rationale_60", + "community": 237, + "norm_label": "construct the ``/operations`` router." + }, + { + "label": "problems.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_routers_problems_py", + "community": 118, + "norm_label": "problems.py" + }, + { + "label": "FindingResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L67", + "id": "routers_problems_findingresponse", + "community": 118, + "norm_label": "findingresponse" + }, + { + "label": "ProblemsResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L83", + "id": "routers_problems_problemsresponse", + "community": 118, + "norm_label": "problemsresponse" + }, + { + "label": "OverrideRequest", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L92", + "id": "routers_problems_overriderequest", + "community": 118, + "norm_label": "overriderequest" + }, + { + "label": "OverrideResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L103", + "id": "routers_problems_overrideresponse", + "community": 118, + "norm_label": "overrideresponse" + }, + { + "label": "RevokeRequest", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L117", + "id": "routers_problems_revokerequest", + "community": 118, + "norm_label": "revokerequest" + }, + { + "label": "TombstoneResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L127", + "id": "routers_problems_tombstoneresponse", + "community": 118, + "norm_label": "tombstoneresponse" + }, + { + "label": "RefreshResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L138", + "id": "routers_problems_refreshresponse", + "community": 118, + "norm_label": "refreshresponse" + }, + { + "label": "build_problems_router()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L152", + "id": "routers_problems_build_problems_router", + "community": 118, + "norm_label": "build_problems_router()" + }, + { + "label": "_build_scope()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L292", + "id": "routers_problems_build_scope", + "community": 29, + "norm_label": "_build_scope()" + }, + { + "label": "_matches_filters()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L321", + "id": "routers_problems_matches_filters", + "community": 118, + "norm_label": "_matches_filters()" + }, + { + "label": "_last_audit_at()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L327", + "id": "routers_problems_last_audit_at", + "community": 90, + "norm_label": "_last_audit_at()" + }, + { + "label": "_require_validator()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L334", + "id": "routers_problems_require_validator", + "community": 118, + "norm_label": "_require_validator()" + }, + { + "label": "_require_cache_writer()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L348", + "id": "routers_problems_require_cache_writer", + "community": 118, + "norm_label": "_require_cache_writer()" + }, + { + "label": "_require_creation_json()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L362", + "id": "routers_problems_require_creation_json", + "community": 118, + "norm_label": "_require_creation_json()" + }, + { + "label": "_stream_audit_channel()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L381", + "id": "routers_problems_stream_audit_channel", + "community": 13, + "norm_label": "_stream_audit_channel()" + }, + { + "label": "``/problems`` router. Backend Spec \u00a74.6.1, \u00a711.8. Endpoints: * ``GET /problems", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L1", + "id": "routers_problems_rationale_1", + "community": 118, + "norm_label": "``/problems`` router. backend spec \u00a74.6.1, \u00a711.8. endpoints: * ``get /problems" + }, + { + "label": "One finding row in the \u00a711.8 schema.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L68", + "id": "routers_problems_rationale_68", + "community": 118, + "norm_label": "one finding row in the \u00a711.8 schema." + }, + { + "label": "``GET /problems`` response.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L84", + "id": "routers_problems_rationale_84", + "community": 118, + "norm_label": "``get /problems`` response." + }, + { + "label": "``POST /problems/{run_path}/override`` body. Backend Spec \u00a711.3.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L93", + "id": "routers_problems_rationale_93", + "community": 118, + "norm_label": "``post /problems/{run_path}/override`` body. backend spec \u00a711.3." + }, + { + "label": "Override append response.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L104", + "id": "routers_problems_rationale_104", + "community": 118, + "norm_label": "override append response." + }, + { + "label": "``POST /problems/{run_path}/override/revoke`` body. Backend Spec \u00a711.3.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L118", + "id": "routers_problems_rationale_118", + "community": 118, + "norm_label": "``post /problems/{run_path}/override/revoke`` body. backend spec \u00a711.3." + }, + { + "label": "``POST /problems/refresh`` response.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L139", + "id": "routers_problems_rationale_139", + "community": 118, + "norm_label": "``post /problems/refresh`` response." + }, + { + "label": "Construct the ``/problems`` router.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L153", + "id": "routers_problems_rationale_153", + "community": 118, + "norm_label": "construct the ``/problems`` router." + }, + { + "label": "Resolve a ``run_path`` to its ``creation.json`` or raise 404. Used by the o", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L363", + "id": "routers_problems_rationale_363", + "community": 118, + "norm_label": "resolve a ``run_path`` to its ``creation.json`` or raise 404. used by the o" + }, + { + "label": "Forward each delta frame the audit channel publishes. The channel exposes a", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L382", + "id": "routers_problems_rationale_382", + "community": 13, + "norm_label": "forward each delta frame the audit channel publishes. the channel exposes a" + }, + { + "label": "staging.py", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L1", + "id": "src_exlab_wizard_api_routers_staging_py", + "community": 37, + "norm_label": "staging.py" + }, + { + "label": "StagedRunRow", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L59", + "id": "routers_staging_stagedrunrow", + "community": 37, + "norm_label": "stagedrunrow" + }, + { + "label": "StagingListResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L75", + "id": "routers_staging_staginglistresponse", + "community": 37, + "norm_label": "staginglistresponse" + }, + { + "label": "ForceSyncResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L83", + "id": "routers_staging_forcesyncresponse", + "community": 37, + "norm_label": "forcesyncresponse" + }, + { + "label": "ClearResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L93", + "id": "routers_staging_clearresponse", + "community": 37, + "norm_label": "clearresponse" + }, + { + "label": "ClearVerifiedResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L103", + "id": "routers_staging_clearverifiedresponse", + "community": 37, + "norm_label": "clearverifiedresponse" + }, + { + "label": "KeepLocalRequest", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L111", + "id": "routers_staging_keeplocalrequest", + "community": 37, + "norm_label": "keeplocalrequest" + }, + { + "label": "KeepLocalResponse", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L126", + "id": "routers_staging_keeplocalresponse", + "community": 37, + "norm_label": "keeplocalresponse" + }, + { + "label": "build_staging_router()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L141", + "id": "routers_staging_build_staging_router", + "community": 112, + "norm_label": "build_staging_router()" + }, + { + "label": "_row_from_summary()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L315", + "id": "routers_staging_row_from_summary", + "community": 37, + "norm_label": "_row_from_summary()" + }, + { + "label": "_is_real_run()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L329", + "id": "routers_staging_is_real_run", + "community": 321, + "norm_label": "_is_real_run()" + }, + { + "label": "_require_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L352", + "id": "routers_staging_require_config", + "community": 37, + "norm_label": "_require_config()" + }, + { + "label": "_require_nas_sync()", + "file_type": "code", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L370", + "id": "routers_staging_require_nas_sync", + "community": 37, + "norm_label": "_require_nas_sync()" + }, + { + "label": "``/staging`` router. Backend Spec \u00a713.7, \u00a713.8. Four endpoints back the orchest", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L1", + "id": "routers_staging_rationale_1", + "community": 37, + "norm_label": "``/staging`` router. backend spec \u00a713.7, \u00a713.8. four endpoints back the orchest" + }, + { + "label": "One staging-panel row. Backend Spec \u00a713.8.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L60", + "id": "routers_staging_rationale_60", + "community": 37, + "norm_label": "one staging-panel row. backend spec \u00a713.8." + }, + { + "label": "``GET /staging`` response.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L76", + "id": "routers_staging_rationale_76", + "community": 37, + "norm_label": "``get /staging`` response." + }, + { + "label": "``POST /staging/{run_path}/force-sync`` response.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L84", + "id": "routers_staging_rationale_84", + "community": 37, + "norm_label": "``post /staging/{run_path}/force-sync`` response." + }, + { + "label": "``POST /staging/{run_path}/clear`` response.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L94", + "id": "routers_staging_rationale_94", + "community": 37, + "norm_label": "``post /staging/{run_path}/clear`` response." + }, + { + "label": "``POST /staging/clear-verified`` response (Redesign \u00a74.6).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L104", + "id": "routers_staging_rationale_104", + "community": 37, + "norm_label": "``post /staging/clear-verified`` response (redesign \u00a74.6)." + }, + { + "label": "``POST /staging/{run_path}/keep-local`` request body. Operator-free per-fil", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L112", + "id": "routers_staging_rationale_112", + "community": 37, + "norm_label": "``post /staging/{run_path}/keep-local`` request body. operator-free per-fil" + }, + { + "label": "``POST /staging/{run_path}/keep-local`` response.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L127", + "id": "routers_staging_rationale_127", + "community": 37, + "norm_label": "``post /staging/{run_path}/keep-local`` response." + }, + { + "label": "Construct the ``/staging`` router. Backend Spec \u00a713.7, \u00a713.8.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L142", + "id": "routers_staging_rationale_142", + "community": 112, + "norm_label": "construct the ``/staging`` router. backend spec \u00a713.7, \u00a713.8." + }, + { + "label": "Return True when ``run_path`` is a real run inside an allowed root. A \"real", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L330", + "id": "routers_staging_rationale_330", + "community": 321, + "norm_label": "return true when ``run_path`` is a real run inside an allowed root. a \"real" + }, + { + "label": "Return the live :class:`Config` or raise 503 when no config is wired. Redes", + "file_type": "rationale", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L353", + "id": "routers_staging_rationale_353", + "community": 37, + "norm_label": "return the live :class:`config` or raise 503 when no config is wired. redes" + }, + { + "label": "queue.py", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L1", + "id": "src_exlab_wizard_sync_queue_py", + "community": 188, + "norm_label": "queue.py" + }, + { + "label": "SyncJobState", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L69", + "id": "sync_queue_syncjobstate", + "community": 236, + "norm_label": "syncjobstate" + }, + { + "label": "SyncJobRow", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L116", + "id": "sync_queue_syncjobrow", + "community": 188, + "norm_label": "syncjobrow" + }, + { + "label": "_decode_files()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L134", + "id": "sync_queue_decode_files", + "community": 188, + "norm_label": "_decode_files()" + }, + { + "label": "_encode_files()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L151", + "id": "sync_queue_encode_files", + "community": 188, + "norm_label": "_encode_files()" + }, + { + "label": "_row_to_job()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L156", + "id": "sync_queue_row_to_job", + "community": 188, + "norm_label": "_row_to_job()" + }, + { + "label": "compute_next_attempt_at()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L175", + "id": "sync_queue_compute_next_attempt_at", + "community": 230, + "norm_label": "compute_next_attempt_at()" + }, + { + "label": "SyncQueue", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L190", + "id": "sync_queue_syncqueue", + "community": 94, + "norm_label": "syncqueue" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L197", + "id": "sync_queue_syncqueue_init", + "community": 94, + "norm_label": ".__init__()" + }, + { + "label": "db_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L202", + "id": "sync_queue_db_path", + "community": 188, + "norm_label": "db_path()" + }, + { + "label": ".close()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L229", + "id": "sync_queue_syncqueue_close", + "community": 94, + "norm_label": ".close()" + }, + { + "label": "._require_conn()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L235", + "id": "sync_queue_syncqueue_require_conn", + "community": 94, + "norm_label": "._require_conn()" + }, + { + "label": "._require_job()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L241", + "id": "sync_queue_syncqueue_require_job", + "community": 94, + "norm_label": "._require_job()" + }, + { + "label": ".insert()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L256", + "id": "sync_queue_syncqueue_insert", + "community": 188, + "norm_label": ".insert()" + }, + { + "label": ".get_by_id()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L310", + "id": "sync_queue_syncqueue_get_by_id", + "community": 94, + "norm_label": ".get_by_id()" + }, + { + "label": ".get_by_run_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L323", + "id": "sync_queue_syncqueue_get_by_run_path", + "community": 94, + "norm_label": ".get_by_run_path()" + }, + { + "label": ".list_in_state()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L336", + "id": "sync_queue_syncqueue_list_in_state", + "community": 94, + "norm_label": ".list_in_state()" + }, + { + "label": ".list_all()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L347", + "id": "sync_queue_syncqueue_list_all", + "community": 94, + "norm_label": ".list_all()" + }, + { + "label": ".transition()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L357", + "id": "sync_queue_syncqueue_transition", + "community": 94, + "norm_label": ".transition()" + }, + { + "label": ".record_failure()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L425", + "id": "sync_queue_syncqueue_record_failure", + "community": 230, + "norm_label": ".record_failure()" + }, + { + "label": ".reset_to_queued()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L475", + "id": "sync_queue_syncqueue_reset_to_queued", + "community": 94, + "norm_label": ".reset_to_queued()" + }, + { + "label": ".requeue_with_files()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L500", + "id": "sync_queue_syncqueue_requeue_with_files", + "community": 94, + "norm_label": ".requeue_with_files()" + }, + { + "label": ".delete()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L534", + "id": "sync_queue_syncqueue_delete", + "community": 94, + "norm_label": ".delete()" + }, + { + "label": "is_terminal()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L541", + "id": "sync_queue_is_terminal", + "community": 188, + "norm_label": "is_terminal()" + }, + { + "label": "Durable SQLite-backed sync-job queue. Backend Spec \u00a77.1.1, \u00a77.1.2, \u00a77.1.5. The", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L1", + "id": "sync_queue_rationale_1", + "community": 188, + "norm_label": "durable sqlite-backed sync-job queue. backend spec \u00a77.1.1, \u00a77.1.2, \u00a77.1.5. the" + }, + { + "label": "State machine for a sync job. Backend Spec \u00a77.1.2.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L70", + "id": "sync_queue_rationale_70", + "community": 236, + "norm_label": "state machine for a sync job. backend spec \u00a77.1.2." + }, + { + "label": "One row in the ``jobs`` table. Backend Spec \u00a77.1.1.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L117", + "id": "sync_queue_rationale_117", + "community": 188, + "norm_label": "one row in the ``jobs`` table. backend spec \u00a77.1.1." + }, + { + "label": "Decode the ``files`` JSON column into a tuple of run-relative paths. A ``NU", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L135", + "id": "sync_queue_rationale_135", + "community": 188, + "norm_label": "decode the ``files`` json column into a tuple of run-relative paths. a ``nu" + }, + { + "label": "Encode a run-relative path tuple into the ``files`` JSON column.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L152", + "id": "sync_queue_rationale_152", + "community": 188, + "norm_label": "encode a run-relative path tuple into the ``files`` json column." + }, + { + "label": "Materialize an ``aiosqlite.Row`` (or tuple) into a :class:`SyncJobRow`.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L157", + "id": "sync_queue_rationale_157", + "community": 188, + "norm_label": "materialize an ``aiosqlite.row`` (or tuple) into a :class:`syncjobrow`." + }, + { + "label": "Return the ISO timestamp of the next retry attempt. ``attempts_after`` is t", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L176", + "id": "sync_queue_rationale_176", + "community": 230, + "norm_label": "return the iso timestamp of the next retry attempt. ``attempts_after`` is t" + }, + { + "label": "Async SQLite-backed durable sync queue. Backend Spec \u00a77.1.1. Use :meth:`ini", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L191", + "id": "sync_queue_rationale_191", + "community": 94, + "norm_label": "async sqlite-backed durable sync queue. backend spec \u00a77.1.1. use :meth:`ini" + }, + { + "label": "The on-disk path of the queue database file.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L203", + "id": "sync_queue_rationale_203", + "community": 525, + "norm_label": "the on-disk path of the queue database file." + }, + { + "label": "Open the connection, ensure the schema, and replay in-flight rows. Repl", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L207", + "id": "sync_queue_rationale_207", + "community": 94, + "norm_label": "open the connection, ensure the schema, and replay in-flight rows. repl" + }, + { + "label": "Close the underlying connection (idempotent).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L230", + "id": "sync_queue_rationale_230", + "community": 94, + "norm_label": "close the underlying connection (idempotent)." + }, + { + "label": "Return the row for ``job_id`` or raise ``ValueError``. Centralizes the", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L242", + "id": "sync_queue_rationale_242", + "community": 94, + "norm_label": "return the row for ``job_id`` or raise ``valueerror``. centralizes the" + }, + { + "label": "Insert a new ``QUEUED`` row for ``run_path``. ``files`` is the per-file", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L265", + "id": "sync_queue_rationale_265", + "community": 188, + "norm_label": "insert a new ``queued`` row for ``run_path``. ``files`` is the per-file" + }, + { + "label": "Return the row with the given ``job_id`` or ``None``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L311", + "id": "sync_queue_rationale_311", + "community": 94, + "norm_label": "return the row with the given ``job_id`` or ``none``." + }, + { + "label": "Return the row whose ``run_path`` matches, or ``None``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L324", + "id": "sync_queue_rationale_324", + "community": 94, + "norm_label": "return the row whose ``run_path`` matches, or ``none``." + }, + { + "label": "Return every row currently in ``state`` ordered by ``enqueued_at``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L337", + "id": "sync_queue_rationale_337", + "community": 94, + "norm_label": "return every row currently in ``state`` ordered by ``enqueued_at``." + }, + { + "label": "Return every row in the queue ordered by ``enqueued_at``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L348", + "id": "sync_queue_rationale_348", + "community": 94, + "norm_label": "return every row in the queue ordered by ``enqueued_at``." + }, + { + "label": "Transition a job to ``new_state`` and patch the auxiliary columns. The", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L370", + "id": "sync_queue_rationale_370", + "community": 94, + "norm_label": "transition a job to ``new_state`` and patch the auxiliary columns. the" + }, + { + "label": "Record a transport failure on ``job_id``. If ``terminal`` is True (auth", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L433", + "id": "sync_queue_rationale_433", + "community": 230, + "norm_label": "record a transport failure on ``job_id``. if ``terminal`` is true (auth" + }, + { + "label": "Reset a ``FAILED`` job back to ``QUEUED`` for a manual retry. Per \u00a77.1.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L476", + "id": "sync_queue_rationale_476", + "community": 94, + "norm_label": "reset a ``failed`` job back to ``queued`` for a manual retry. per \u00a77.1." + }, + { + "label": "Reset a terminal job back to ``QUEUED`` carrying a new ``files`` list.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L505", + "id": "sync_queue_rationale_505", + "community": 94, + "norm_label": "reset a terminal job back to ``queued`` carrying a new ``files`` list." + }, + { + "label": "Remove a job row entirely. Used by the cleanup reaper after CLEANED.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L535", + "id": "sync_queue_rationale_535", + "community": 94, + "norm_label": "remove a job row entirely. used by the cleanup reaper after cleaned." + }, + { + "label": "Return True if the state is a terminal state (no further work).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L542", + "id": "sync_queue_rationale_542", + "community": 526, + "norm_label": "return true if the state is a terminal state (no further work)." + }, + { + "label": "nas_client.py", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1", + "id": "src_exlab_wizard_sync_nas_client_py", + "community": 91, + "norm_label": "nas_client.py" + }, + { + "label": "SyncJobHandle", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L98", + "id": "sync_nas_client_syncjobhandle", + "community": 7, + "norm_label": "syncjobhandle" + }, + { + "label": "_remote_name_for()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L117", + "id": "sync_nas_client_remote_name_for", + "community": 91, + "norm_label": "_remote_name_for()" + }, + { + "label": "_build_target_for()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L128", + "id": "sync_nas_client_build_target_for", + "community": 91, + "norm_label": "_build_target_for()" + }, + { + "label": "_resolve_env_for_equipment()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L143", + "id": "sync_nas_client_resolve_env_for_equipment", + "community": 7, + "norm_label": "_resolve_env_for_equipment()" + }, + { + "label": "_build_transport_driver()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L189", + "id": "sync_nas_client_build_transport_driver", + "community": 7, + "norm_label": "_build_transport_driver()" + }, + { + "label": "NASSyncClient", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L257", + "id": "sync_nas_client_nassyncclient", + "community": 31, + "norm_label": "nassyncclient" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L277", + "id": "sync_nas_client_nassyncclient_init", + "community": 284, + "norm_label": ".__init__()" + }, + { + "label": ".apply_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L313", + "id": "sync_nas_client_nassyncclient_apply_config", + "community": 31, + "norm_label": ".apply_config()" + }, + { + "label": ".close()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L334", + "id": "sync_nas_client_nassyncclient_close", + "community": 91, + "norm_label": ".close()" + }, + { + "label": ".enqueue()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L347", + "id": "sync_nas_client_nassyncclient_enqueue", + "community": 264, + "norm_label": ".enqueue()" + }, + { + "label": ".status()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L441", + "id": "sync_nas_client_nassyncclient_status", + "community": 31, + "norm_label": ".status()" + }, + { + "label": ".retry()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L452", + "id": "sync_nas_client_nassyncclient_retry", + "community": 31, + "norm_label": ".retry()" + }, + { + "label": ".force_verify()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L457", + "id": "sync_nas_client_nassyncclient_force_verify", + "community": 91, + "norm_label": ".force_verify()" + }, + { + "label": "._worker_loop()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L502", + "id": "sync_nas_client_nassyncclient_worker_loop", + "community": 284, + "norm_label": "._worker_loop()" + }, + { + "label": "._next_due_job()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L522", + "id": "sync_nas_client_nassyncclient_next_due_job", + "community": 284, + "norm_label": "._next_due_job()" + }, + { + "label": "._drive_job()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L533", + "id": "sync_nas_client_nassyncclient_drive_job", + "community": 91, + "norm_label": "._drive_job()" + }, + { + "label": "._build_push()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L754", + "id": "sync_nas_client_nassyncclient_build_push", + "community": 91, + "norm_label": "._build_push()" + }, + { + "label": "._build_check()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L766", + "id": "sync_nas_client_nassyncclient_build_check", + "community": 91, + "norm_label": "._build_check()" + }, + { + "label": "._compute_local_shas()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L779", + "id": "sync_nas_client_nassyncclient_compute_local_shas", + "community": 91, + "norm_label": "._compute_local_shas()" + }, + { + "label": "._handle_push_failure()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L822", + "id": "sync_nas_client_nassyncclient_handle_push_failure", + "community": 91, + "norm_label": "._handle_push_failure()" + }, + { + "label": "._reconcile_synced_files()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L846", + "id": "sync_nas_client_nassyncclient_reconcile_synced_files", + "community": 91, + "norm_label": "._reconcile_synced_files()" + }, + { + "label": "_discover_run_files()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L887", + "id": "sync_nas_client_discover_run_files", + "community": 91, + "norm_label": "_discover_run_files()" + }, + { + "label": "_file_signature()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L912", + "id": "sync_nas_client_file_signature", + "community": 91, + "norm_label": "_file_signature()" + }, + { + "label": "_write_files_from()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L921", + "id": "sync_nas_client_write_files_from", + "community": 91, + "norm_label": "_write_files_from()" + }, + { + "label": "._maybe_cleanup()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L940", + "id": "sync_nas_client_nassyncclient_maybe_cleanup", + "community": 229, + "norm_label": "._maybe_cleanup()" + }, + { + "label": "._delete_local()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1002", + "id": "sync_nas_client_nassyncclient_delete_local", + "community": 229, + "norm_label": "._delete_local()" + }, + { + "label": "._infer_equipment_id()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1023", + "id": "sync_nas_client_nassyncclient_infer_equipment_id", + "community": 264, + "norm_label": "._infer_equipment_id()" + }, + { + "label": "_compute_nas_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1046", + "id": "sync_nas_client_compute_nas_path", + "community": 264, + "norm_label": "_compute_nas_path()" + }, + { + "label": "._mark_blocked()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1050", + "id": "sync_nas_client_nassyncclient_mark_blocked", + "community": 264, + "norm_label": "._mark_blocked()" + }, + { + "label": "._mark_synced()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1059", + "id": "sync_nas_client_nassyncclient_mark_synced", + "community": 91, + "norm_label": "._mark_synced()" + }, + { + "label": "._mark_cleaned()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1072", + "id": "sync_nas_client_nassyncclient_mark_cleaned", + "community": 229, + "norm_label": "._mark_cleaned()" + }, + { + "label": "NAS sync client. Backend Spec \u00a77.1, \u00a77.3. The :class:`NASSyncClient` is the pub", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1", + "id": "sync_nas_client_rationale_1", + "community": 91, + "norm_label": "nas sync client. backend spec \u00a77.1, \u00a77.3. the :class:`nassyncclient` is the pub" + }, + { + "label": "Lightweight handle returned by :meth:`NASSyncClient.enqueue`. ``job_id`` is", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L99", + "id": "sync_nas_client_rationale_99", + "community": 7, + "norm_label": "lightweight handle returned by :meth:`nassyncclient.enqueue`. ``job_id`` is" + }, + { + "label": "Return the inline rclone remote name used for ``equipment``. The remote nam", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L118", + "id": "sync_nas_client_rationale_118", + "community": 91, + "norm_label": "return the inline rclone remote name used for ``equipment``. the remote nam" + }, + { + "label": "Compose the rclone destination string for a run directory.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L133", + "id": "sync_nas_client_rationale_133", + "community": 91, + "norm_label": "compose the rclone destination string for a run directory." + }, + { + "label": "Look up the password, obscure it, build the rclone env. Returns ``(env, mas", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L147", + "id": "sync_nas_client_rationale_147", + "community": 7, + "norm_label": "look up the password, obscure it, build the rclone env. returns ``(env, mas" + }, + { + "label": "Return a ``(driver, push_callable, check_callable)`` triple. Both supported", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L193", + "id": "sync_nas_client_rationale_193", + "community": 7, + "norm_label": "return a ``(driver, push_callable, check_callable)`` triple. both supported" + }, + { + "label": "Durable, per-equipment NAS sync queue with Pre-Sync Gate. Backend Spec \u00a77.1", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L258", + "id": "sync_nas_client_rationale_258", + "community": 31, + "norm_label": "durable, per-equipment nas sync queue with pre-sync gate. backend spec \u00a77.1" + }, + { + "label": "Swap the cached config + equipment map in place (no relaunch). The ``eq", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L314", + "id": "sync_nas_client_rationale_314", + "community": 31, + "norm_label": "swap the cached config + equipment map in place (no relaunch). the ``eq" + }, + { + "label": "Open the queue and start the worker task. Backend Spec \u00a77.1.2.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L329", + "id": "sync_nas_client_rationale_329", + "community": 284, + "norm_label": "open the queue and start the worker task. backend spec \u00a77.1.2." + }, + { + "label": "Stop the worker and close the queue DB. Idempotent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L335", + "id": "sync_nas_client_rationale_335", + "community": 91, + "norm_label": "stop the worker and close the queue db. idempotent." + }, + { + "label": "Pre-Sync Gate -> if hard-tier finding without override, mark ``sync_stat", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L352", + "id": "sync_nas_client_rationale_352", + "community": 264, + "norm_label": "pre-sync gate -> if hard-tier finding without override, mark ``sync_stat" + }, + { + "label": "Return the queue state of the job for ``run_path``. ``\"none\"`` when no", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L442", + "id": "sync_nas_client_rationale_442", + "community": 31, + "norm_label": "return the queue state of the job for ``run_path``. ``\"none\"`` when no" + }, + { + "label": "Re-arm a ``FAILED`` job. Backend Spec \u00a77.1.5 (Problems-tab Retry).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L453", + "id": "sync_nas_client_rationale_453", + "community": 31, + "norm_label": "re-arm a ``failed`` job. backend spec \u00a77.1.5 (problems-tab retry)." + }, + { + "label": "Re-run ``rclone check --download`` against the configured remote. Used", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L458", + "id": "sync_nas_client_rationale_458", + "community": 91, + "norm_label": "re-run ``rclone check --download`` against the configured remote. used" + }, + { + "label": "Pick the next due job and drive it through the state machine.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L503", + "id": "sync_nas_client_rationale_503", + "community": 284, + "norm_label": "pick the next due job and drive it through the state machine." + }, + { + "label": "Return the next QUEUED row whose backoff has passed (or None).", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L523", + "id": "sync_nas_client_rationale_523", + "community": 284, + "norm_label": "return the next queued row whose backoff has passed (or none)." + }, + { + "label": "Drive ``job`` from QUEUED through one transport+verify pass. Worker sem", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L534", + "id": "sync_nas_client_rationale_534", + "community": 91, + "norm_label": "drive ``job`` from queued through one transport+verify pass. worker sem" + }, + { + "label": "Resolve the push callable for ``equipment.transport``. Tests can inject", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L755", + "id": "sync_nas_client_rationale_755", + "community": 91, + "norm_label": "resolve the push callable for ``equipment.transport``. tests can inject" + }, + { + "label": "Resolve the ``rclone check`` callable for ``equipment.transport``. Test", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L767", + "id": "sync_nas_client_rationale_767", + "community": 91, + "norm_label": "resolve the ``rclone check`` callable for ``equipment.transport``. test" + }, + { + "label": "Compute the SHA-256 hex digest of each file in ``files``. Slot A of the", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L784", + "id": "sync_nas_client_rationale_784", + "community": 91, + "norm_label": "compute the sha-256 hex digest of each file in ``files``. slot a of the" + }, + { + "label": "Translate a transport failure into a queue update.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L823", + "id": "sync_nas_client_rationale_823", + "community": 91, + "norm_label": "translate a transport failure into a queue update." + }, + { + "label": "Credit every individually-verified file in ``sync_state.json``. Per-fil", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L852", + "id": "sync_nas_client_rationale_852", + "community": 91, + "norm_label": "credit every individually-verified file in ``sync_state.json``. per-fil" + }, + { + "label": "Return every non-cache regular file under ``run_path`` as POSIX rel paths.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L888", + "id": "sync_nas_client_rationale_888", + "community": 527, + "norm_label": "return every non-cache regular file under ``run_path`` as posix rel paths." + }, + { + "label": "Return the ``(st_size, st_mtime_ns)`` signature for ``path``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L913", + "id": "sync_nas_client_rationale_913", + "community": 528, + "norm_label": "return the ``(st_size, st_mtime_ns)`` signature for ``path``." + }, + { + "label": "Write a transport ``--files-from`` list and return its path. One run-re", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L922", + "id": "sync_nas_client_rationale_922", + "community": 529, + "norm_label": "write a transport ``--files-from`` list and return its path. one run-re" + }, + { + "label": "Apply the \u00a77.1.6 interlocks; if all pass, run the cleanup. Operator-fre", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L941", + "id": "sync_nas_client_rationale_941", + "community": 229, + "norm_label": "apply the \u00a77.1.6 interlocks; if all pass, run the cleanup. operator-fre" + }, + { + "label": "Delete ``run_path`` data files honoring ``retain_cache`` and ``keep_local``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1007", + "id": "sync_nas_client_rationale_1007", + "community": 229, + "norm_label": "delete ``run_path`` data files honoring ``retain_cache`` and ``keep_local``." + }, + { + "label": "Return the equipment id for a run path. Prefers an explicit equipment i", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1024", + "id": "sync_nas_client_rationale_1024", + "community": 264, + "norm_label": "return the equipment id for a run path. prefers an explicit equipment i" + }, + { + "label": "Return the recorded NAS-side path from a creation payload.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1047", + "id": "sync_nas_client_rationale_1047", + "community": 530, + "norm_label": "return the recorded nas-side path from a creation payload." + }, + { + "label": "Mutate ``creation.json`` ``sync_status`` to ``blocked_by_validation``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1051", + "id": "sync_nas_client_rationale_1051", + "community": 264, + "norm_label": "mutate ``creation.json`` ``sync_status`` to ``blocked_by_validation``." + }, + { + "label": "Mutate ``creation.json`` ``sync_status`` to ``synced``. Backend Spec \u00a77.1.4.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1060", + "id": "sync_nas_client_rationale_1060", + "community": 91, + "norm_label": "mutate ``creation.json`` ``sync_status`` to ``synced``. backend spec \u00a77.1.4." + }, + { + "label": "Mutate ``creation.json`` ``sync_status`` to ``cleaned``. Backend Spec \u00a77.1.10.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1073", + "id": "sync_nas_client_rationale_1073", + "community": 229, + "norm_label": "mutate ``creation.json`` ``sync_status`` to ``cleaned``. backend spec \u00a77.1.10." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_sync_init_py", + "community": 334, + "norm_label": "__init__.py" + }, + { + "label": "cleanup.py", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L1", + "id": "src_exlab_wizard_sync_cleanup_py", + "community": 93, + "norm_label": "cleanup.py" + }, + { + "label": "has_recent_revocation()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L39", + "id": "sync_cleanup_has_recent_revocation", + "community": 93, + "norm_label": "has_recent_revocation()" + }, + { + "label": "cleanup_interlocks_satisfied()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L65", + "id": "sync_cleanup_cleanup_interlocks_satisfied", + "community": 93, + "norm_label": "cleanup_interlocks_satisfied()" + }, + { + "label": "Cleanup safety interlocks. Backend Spec \u00a77.1.6. The cleanup reaper deletes loca", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L1", + "id": "sync_cleanup_rationale_1", + "community": 93, + "norm_label": "cleanup safety interlocks. backend spec \u00a77.1.6. the cleanup reaper deletes loca" + }, + { + "label": "Return True if any tombstone was recorded within ``min_age_hours``. A tombs", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L45", + "id": "sync_cleanup_rationale_45", + "community": 93, + "norm_label": "return true if any tombstone was recorded within ``min_age_hours``. a tombs" + }, + { + "label": "Evaluate every \u00a77.1.6 interlock; return True iff all pass. Logs a debug ent", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L74", + "id": "sync_cleanup_rationale_74", + "community": 93, + "norm_label": "evaluate every \u00a77.1.6 interlock; return true iff all pass. logs a debug ent" + }, + { + "label": "bandwidth.py", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L1", + "id": "src_exlab_wizard_sync_bandwidth_py", + "community": 73, + "norm_label": "bandwidth.py" + }, + { + "label": "mbps_to_kibps()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L41", + "id": "sync_bandwidth_mbps_to_kibps", + "community": 73, + "norm_label": "mbps_to_kibps()" + }, + { + "label": "_parse_hhmm()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L55", + "id": "sync_bandwidth_parse_hhmm", + "community": 73, + "norm_label": "_parse_hhmm()" + }, + { + "label": "is_window_active()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L63", + "id": "sync_bandwidth_is_window_active", + "community": 73, + "norm_label": "is_window_active()" + }, + { + "label": "effective_bandwidth_limit_kibps()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L84", + "id": "sync_bandwidth_effective_bandwidth_limit_kibps", + "community": 73, + "norm_label": "effective_bandwidth_limit_kibps()" + }, + { + "label": "Bandwidth schedule evaluator. Backend Spec \u00a77.1.7. The \u00a77.1.7 bandwidth limiter", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L1", + "id": "sync_bandwidth_rationale_1", + "community": 73, + "norm_label": "bandwidth schedule evaluator. backend spec \u00a77.1.7. the \u00a77.1.7 bandwidth limiter" + }, + { + "label": "Convert ``upload_mbps`` (megabits/s) into ``--bwlimit`` KiB/s. Per \u00a77.1.7:", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L42", + "id": "sync_bandwidth_rationale_42", + "community": 73, + "norm_label": "convert ``upload_mbps`` (megabits/s) into ``--bwlimit`` kib/s. per \u00a77.1.7:" + }, + { + "label": "Parse an ``HH:MM`` string. Pydantic validated it on input; :func:`is_window_", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L56", + "id": "sync_bandwidth_rationale_56", + "community": 73, + "norm_label": "parse an ``hh:mm`` string. pydantic validated it on input; :func:`is_window_" + }, + { + "label": "Return True iff ``now_local`` is inside ``window``. The window is defined b", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L64", + "id": "sync_bandwidth_rationale_64", + "community": 73, + "norm_label": "return true iff ``now_local`` is inside ``window``. the window is defined b" + }, + { + "label": "Return the effective ``--bwlimit`` in KiB/s for ``now_local``. Decision tre", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L89", + "id": "sync_bandwidth_rationale_89", + "community": 73, + "norm_label": "return the effective ``--bwlimit`` in kib/s for ``now_local``. decision tre" + }, + { + "label": "pre_sync_gate.py", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L1", + "id": "src_exlab_wizard_sync_pre_sync_gate_py", + "community": 138, + "norm_label": "pre_sync_gate.py" + }, + { + "label": "_file_names_in_run()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L32", + "id": "sync_pre_sync_gate_file_names_in_run", + "community": 138, + "norm_label": "_file_names_in_run()" + }, + { + "label": "is_eligible()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L46", + "id": "sync_pre_sync_gate_is_eligible", + "community": 138, + "norm_label": "is_eligible()" + }, + { + "label": "Pre-Sync Gate. Backend Spec \u00a77.3. The Pre-Sync Gate is the contract by which va", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L1", + "id": "sync_pre_sync_gate_rationale_1", + "community": 138, + "norm_label": "pre-sync gate. backend spec \u00a77.3. the pre-sync gate is the contract by which va" + }, + { + "label": "Return the bare file names directly under ``run_path``. The Pre-Sync Gate i", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L33", + "id": "sync_pre_sync_gate_rationale_33", + "community": 138, + "norm_label": "return the bare file names directly under ``run_path``. the pre-sync gate i" + }, + { + "label": "Evaluate the \u00a77.3 eligibility rule for a run. Returns ``(True, [])`` iff th", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L52", + "id": "sync_pre_sync_gate_rationale_52", + "community": 138, + "norm_label": "evaluate the \u00a77.3 eligibility rule for a run. returns ``(true, [])`` iff th" + }, + { + "label": "verifier.py", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L1", + "id": "src_exlab_wizard_sync_verifier_py", + "community": 223, + "norm_label": "verifier.py" + }, + { + "label": "VerifyResult", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L42", + "id": "sync_verifier_verifyresult", + "community": 223, + "norm_label": "verifyresult" + }, + { + "label": "from_check_result()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L72", + "id": "sync_verifier_from_check_result", + "community": 223, + "norm_label": "from_check_result()" + }, + { + "label": "Verifier", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L93", + "id": "sync_verifier_verifier", + "community": 223, + "norm_label": "verifier" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L102", + "id": "sync_verifier_verifier_init", + "community": 223, + "norm_label": ".__init__()" + }, + { + "label": ".verify()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L109", + "id": "sync_verifier_verifier_verify", + "community": 223, + "norm_label": ".verify()" + }, + { + "label": "SHA-256 verifier wrapper around ``rclone check --download``. Rclone-only NAS sy", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L1", + "id": "sync_verifier_rationale_1", + "community": 223, + "norm_label": "sha-256 verifier wrapper around ``rclone check --download``. rclone-only nas sy" + }, + { + "label": "Outcome of one ``rclone check --download`` pass against a remote. ``ok`` is", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L43", + "id": "sync_verifier_rationale_43", + "community": 223, + "norm_label": "outcome of one ``rclone check --download`` pass against a remote. ``ok`` is" + }, + { + "label": "Translate a successful ``rclone check`` into a :class:`VerifyResult`. `", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L73", + "id": "sync_verifier_rationale_73", + "community": 531, + "norm_label": "translate a successful ``rclone check`` into a :class:`verifyresult`. `" + }, + { + "label": "Verifier: ``rclone check`` wrapper, no Python SHA pipeline. Constructed wit", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L94", + "id": "sync_verifier_rationale_94", + "community": 223, + "norm_label": "verifier: ``rclone check`` wrapper, no python sha pipeline. constructed wit" + }, + { + "label": "Run ``rclone check --download`` over ``files_from`` and translate. Rais", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L118", + "id": "sync_verifier_rationale_118", + "community": 223, + "norm_label": "run ``rclone check --download`` over ``files_from`` and translate. rais" + }, + { + "label": "run_delete.py", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/run_delete.py", + "source_location": "L1", + "id": "src_exlab_wizard_sync_run_delete_py", + "community": 228, + "norm_label": "run_delete.py" + }, + { + "label": "delete_run_files()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/run_delete.py", + "source_location": "L38", + "id": "sync_run_delete_delete_run_files", + "community": 228, + "norm_label": "delete_run_files()" + }, + { + "label": "_prune_empty_dirs()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/run_delete.py", + "source_location": "L94", + "id": "sync_run_delete_prune_empty_dirs", + "community": 228, + "norm_label": "_prune_empty_dirs()" + }, + { + "label": "Keep-local-aware, symlink-safe deletion of a run's staging copy. Operator-free", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/run_delete.py", + "source_location": "L1", + "id": "sync_run_delete_rationale_1", + "community": 228, + "norm_label": "keep-local-aware, symlink-safe deletion of a run's staging copy. operator-free" + }, + { + "label": "Delete ``run_path`` data files honoring ``retain_cache`` and ``keep_local``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/run_delete.py", + "source_location": "L44", + "id": "sync_run_delete_rationale_44", + "community": 228, + "norm_label": "delete ``run_path`` data files honoring ``retain_cache`` and ``keep_local``." + }, + { + "label": "Remove now-empty real directories under ``run_path`` (deepest first). The r", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/run_delete.py", + "source_location": "L95", + "id": "sync_run_delete_rationale_95", + "community": 228, + "norm_label": "remove now-empty real directories under ``run_path`` (deepest first). the r" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_sync_transports_init_py", + "community": 171, + "norm_label": "__init__.py" + }, + { + "label": "TransportErrorKind", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L21", + "id": "transports_init_transporterrorkind", + "community": 171, + "norm_label": "transporterrorkind" + }, + { + "label": "TransportResult", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L45", + "id": "transports_init_transportresult", + "community": 171, + "norm_label": "transportresult" + }, + { + "label": "TransportError", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L60", + "id": "transports_init_transporterror", + "community": 171, + "norm_label": "transporterror" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L80", + "id": "transports_init_transporterror_init", + "community": 171, + "norm_label": ".__init__()" + }, + { + "label": "Sync transports package. Backend Spec \u00a77.1.3. Each transport is a thin async wr", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L1", + "id": "transports_init_rationale_1", + "community": 171, + "norm_label": "sync transports package. backend spec \u00a77.1.3. each transport is a thin async wr" + }, + { + "label": "Kind of failure that the queue worker uses to drive the retry policy. Backe", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L22", + "id": "transports_init_rationale_22", + "community": 171, + "norm_label": "kind of failure that the queue worker uses to drive the retry policy. backe" + }, + { + "label": "Outcome of a transport push. ``ok`` is True iff the transport reported succ", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L46", + "id": "transports_init_rationale_46", + "community": 171, + "norm_label": "outcome of a transport push. ``ok`` is true iff the transport reported succ" + }, + { + "label": "Raised when a transport probe cannot complete. Distinct from :class:`Transp", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L61", + "id": "transports_init_rationale_61", + "community": 171, + "norm_label": "raised when a transport probe cannot complete. distinct from :class:`transp" + }, + { + "label": "rclone.py", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L1", + "id": "src_exlab_wizard_sync_transports_rclone_py", + "community": 7, + "norm_label": "rclone.py" + }, + { + "label": "_classify_failure()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L69", + "id": "transports_rclone_classify_failure", + "community": 218, + "norm_label": "_classify_failure()" + }, + { + "label": "CheckResult", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L93", + "id": "transports_rclone_checkresult", + "community": 7, + "norm_label": "checkresult" + }, + { + "label": "AboutResult", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L116", + "id": "transports_rclone_aboutresult", + "community": 7, + "norm_label": "aboutresult" + }, + { + "label": "build_rclone_env()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L135", + "id": "transports_rclone_build_rclone_env", + "community": 7, + "norm_label": "build_rclone_env()" + }, + { + "label": "pass_env_keys_for()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L173", + "id": "transports_rclone_pass_env_keys_for", + "community": 7, + "norm_label": "pass_env_keys_for()" + }, + { + "label": "obscure()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L188", + "id": "transports_rclone_obscure", + "community": 171, + "norm_label": "obscure()" + }, + { + "label": "RcloneDriver", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L220", + "id": "transports_rclone_rclonedriver", + "community": 103, + "norm_label": "rclonedriver" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L223", + "id": "transports_rclone_rclonedriver_init", + "community": 103, + "norm_label": ".__init__()" + }, + { + "label": ".push()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L226", + "id": "transports_rclone_rclonedriver_push", + "community": 171, + "norm_label": ".push()" + }, + { + "label": ".check()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L277", + "id": "transports_rclone_rclonedriver_check", + "community": 218, + "norm_label": ".check()" + }, + { + "label": ".about()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L358", + "id": "transports_rclone_rclonedriver_about", + "community": 218, + "norm_label": ".about()" + }, + { + "label": "_parse_combined()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L400", + "id": "transports_rclone_parse_combined", + "community": 218, + "norm_label": "_parse_combined()" + }, + { + "label": "rclone transport driver. Backend Spec \u00a77.1.3. Single transport binary for the N", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L1", + "id": "transports_rclone_rationale_1", + "community": 7, + "norm_label": "rclone transport driver. backend spec \u00a77.1.3. single transport binary for the n" + }, + { + "label": "Map a (returncode, stderr) into a :class:`TransportErrorKind`. Auth failure", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L70", + "id": "transports_rclone_rationale_70", + "community": 218, + "norm_label": "map a (returncode, stderr) into a :class:`transporterrorkind`. auth failure" + }, + { + "label": "Parsed result of a ``rclone check --combined`` run. The combined-output for", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L94", + "id": "transports_rclone_rationale_94", + "community": 7, + "norm_label": "parsed result of a ``rclone check --combined`` run. the combined-output for" + }, + { + "label": "Outcome of ``rclone about --json``. Surfaces as the equipment-prob", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L117", + "id": "transports_rclone_rationale_117", + "community": 7, + "norm_label": "outcome of ``rclone about --json``. surfaces as the equipment-prob" + }, + { + "label": "Build the ``RCLONE_CONFIG__*`` env dict for an inline backend. The", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L141", + "id": "transports_rclone_rationale_141", + "community": 7, + "norm_label": "build the ``rclone_config__*`` env dict for an inline backend. the" + }, + { + "label": "Return the env-key tuple that must be redacted from subprocess logs. The on", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L174", + "id": "transports_rclone_rationale_174", + "community": 7, + "norm_label": "return the env-key tuple that must be redacted from subprocess logs. the on" + }, + { + "label": "Return the rclone-obscured form of ``password``. rclone refuses raw passwor", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L189", + "id": "transports_rclone_rationale_189", + "community": 171, + "norm_label": "return the rclone-obscured form of ``password``. rclone refuses raw passwor" + }, + { + "label": "rclone transport driver. Backend Spec \u00a77.1.3.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L221", + "id": "transports_rclone_rationale_221", + "community": 103, + "norm_label": "rclone transport driver. backend spec \u00a77.1.3." + }, + { + "label": "Run ``rclone copy --checksum`` from ``local`` to ``remote``. ``remote``", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L236", + "id": "transports_rclone_rationale_236", + "community": 171, + "norm_label": "run ``rclone copy --checksum`` from ``local`` to ``remote``. ``remote``" + }, + { + "label": "Run ``rclone check --download --files-from --combined`` over ``files_from``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L286", + "id": "transports_rclone_rationale_286", + "community": 218, + "norm_label": "run ``rclone check --download --files-from --combined`` over ``files_from``." + }, + { + "label": "Run ``rclone about --json`` -- the equipment probe. Used by th", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L365", + "id": "transports_rclone_rationale_365", + "community": 218, + "norm_label": "run ``rclone about --json`` -- the equipment probe. used by th" + }, + { + "label": "Parse ``rclone check --combined`` output into a :class:`CheckResult`. Each", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L401", + "id": "transports_rclone_rationale_401", + "community": 218, + "norm_label": "parse ``rclone check --combined`` output into a :class:`checkresult`. each" + }, + { + "label": "_run.py", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/_run.py", + "source_location": "L1", + "id": "src_exlab_wizard_sync_transports_run_py", + "community": 159, + "norm_label": "_run.py" + }, + { + "label": "run_subprocess()", + "file_type": "code", + "source_file": "src/exlab_wizard/sync/transports/_run.py", + "source_location": "L29", + "id": "transports_run_run_subprocess", + "community": 159, + "norm_label": "run_subprocess()" + }, + { + "label": "Shared asyncio subprocess helper for transport drivers. Backend Spec \u00a77.1.3. Th", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/_run.py", + "source_location": "L1", + "id": "transports_run_rationale_1", + "community": 159, + "norm_label": "shared asyncio subprocess helper for transport drivers. backend spec \u00a77.1.3. th" + }, + { + "label": "Launch ``cmd`` and return ``(returncode, stdout, stderr)`` as text. ``env``", + "file_type": "rationale", + "source_file": "src/exlab_wizard/sync/transports/_run.py", + "source_location": "L36", + "id": "transports_run_rationale_36", + "community": 159, + "norm_label": "launch ``cmd`` and return ``(returncode, stdout, stderr)`` as text. ``env``" + }, + { + "label": "handlers.py", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L1", + "id": "src_exlab_wizard_logging_handlers_py", + "community": 123, + "norm_label": "handlers.py" + }, + { + "label": "EquipmentScopedFileHandler", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L37", + "id": "logging_handlers_equipmentscopedfilehandler", + "community": 123, + "norm_label": "equipmentscopedfilehandler" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L57", + "id": "logging_handlers_equipmentscopedfilehandler_init", + "community": 123, + "norm_label": ".__init__()" + }, + { + "label": ".emit()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L74", + "id": "logging_handlers_equipmentscopedfilehandler_emit", + "community": 123, + "norm_label": ".emit()" + }, + { + "label": ".close()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L90", + "id": "logging_handlers_equipmentscopedfilehandler_close", + "community": 123, + "norm_label": ".close()" + }, + { + "label": "._open_for()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L105", + "id": "logging_handlers_equipmentscopedfilehandler_open_for", + "community": 123, + "norm_label": "._open_for()" + }, + { + "label": "._compose_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L124", + "id": "logging_handlers_equipmentscopedfilehandler_compose_path", + "community": 123, + "norm_label": "._compose_path()" + }, + { + "label": "_OpenLogFile", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L139", + "id": "logging_handlers_openlogfile", + "community": 123, + "norm_label": "_openlogfile" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L152", + "id": "logging_handlers_openlogfile_init", + "community": 123, + "norm_label": ".__init__()" + }, + { + "label": "open()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L158", + "id": "logging_handlers_open", + "community": 123, + "norm_label": "open()" + }, + { + "label": ".write()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L183", + "id": "logging_handlers_openlogfile_write", + "community": 123, + "norm_label": ".write()" + }, + { + "label": ".fsync()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L189", + "id": "logging_handlers_openlogfile_fsync", + "community": 123, + "norm_label": ".fsync()" + }, + { + "label": ".close()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L197", + "id": "logging_handlers_openlogfile_close", + "community": 123, + "norm_label": ".close()" + }, + { + "label": "Equipment-scoped file handler. Backend Spec \u00a716.2.4. The :class:`EquipmentScope", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L1", + "id": "logging_handlers_rationale_1", + "community": 123, + "norm_label": "equipment-scoped file handler. backend spec \u00a716.2.4. the :class:`equipmentscope" + }, + { + "label": "Per-equipment ``wizard..log`` writer. Resolves ``/.log`` writer. resolves ``///.exlab-wizard/wizard..log``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L125", + "id": "logging_handlers_rationale_125", + "community": 123, + "norm_label": "return ``//.exlab-wizard/wizard..log``." + }, + { + "label": "Append-mode log file with platform-appropriate share / append flags. The wr", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L140", + "id": "logging_handlers_rationale_140", + "community": 123, + "norm_label": "append-mode log file with platform-appropriate share / append flags. the wr" + }, + { + "label": "Open ``path`` in append mode with the platform-appropriate flags.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L159", + "id": "logging_handlers_rationale_159", + "community": 532, + "norm_label": "open ``path`` in append mode with the platform-appropriate flags." + }, + { + "label": "Append ``line`` (already newline-terminated) to the file.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L184", + "id": "logging_handlers_rationale_184", + "community": 123, + "norm_label": "append ``line`` (already newline-terminated) to the file." + }, + { + "label": "``os.fsync`` the underlying file descriptor. Called only on ``ERROR``-l", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L190", + "id": "logging_handlers_rationale_190", + "community": 123, + "norm_label": "``os.fsync`` the underlying file descriptor. called only on ``error``-l" + }, + { + "label": "Flush and close the file. Idempotent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L198", + "id": "logging_handlers_rationale_198", + "community": 123, + "norm_label": "flush and close the file. idempotent." + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_logging_init_py", + "community": 421, + "norm_label": "__init__.py" + }, + { + "label": "Canonical logger package. Backend Spec \u00a716. This package owns the runtime logge", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/__init__.py", + "source_location": "L1", + "id": "logging_init_rationale_1", + "community": 421, + "norm_label": "canonical logger package. backend spec \u00a716. this package owns the runtime logge" + }, + { + "label": "format.py", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L1", + "id": "src_exlab_wizard_logging_format_py", + "community": 269, + "norm_label": "format.py" + }, + { + "label": "StructuredTagFormatter", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L71", + "id": "logging_format_structuredtagformatter", + "community": 95, + "norm_label": "structuredtagformatter" + }, + { + "label": ".format()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L90", + "id": "logging_format_structuredtagformatter_format", + "community": 269, + "norm_label": ".format()" + }, + { + "label": "_format_utc_timestamp()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L104", + "id": "logging_format_format_utc_timestamp", + "community": 269, + "norm_label": "_format_utc_timestamp()" + }, + { + "label": "_render_tags()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L115", + "id": "logging_format_render_tags", + "community": 269, + "norm_label": "_render_tags()" + }, + { + "label": "redact_secret()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L135", + "id": "logging_format_redact_secret", + "community": 95, + "norm_label": "redact_secret()" + }, + { + "label": "Structured log formatter and secret-redaction helpers. Backend Spec \u00a716.4, \u00a716.1", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L1", + "id": "logging_format_rationale_1", + "community": 269, + "norm_label": "structured log formatter and secret-redaction helpers. backend spec \u00a716.4, \u00a716.1" + }, + { + "label": "Formatter that renders the \u00a716.4 structured-tag log line. Reads the active", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L72", + "id": "logging_format_rationale_72", + "community": 95, + "norm_label": "formatter that renders the \u00a716.4 structured-tag log line. reads the active" + }, + { + "label": "Render ``epoch_seconds`` as a UTC ISO 8601 timestamp with ``Z`` suffix. Exa", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L105", + "id": "logging_format_rationale_105", + "community": 269, + "norm_label": "render ``epoch_seconds`` as a utc iso 8601 timestamp with ``z`` suffix. exa" + }, + { + "label": "Render the active context as ``[host:..] [equip:..] ...``. Returns the empt", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L116", + "id": "logging_format_rationale_116", + "community": 269, + "norm_label": "render the active context as ``[host:..] [equip:..] ...``. returns the empt" + }, + { + "label": "Mask credential-bearing substrings inside ``value``. Replaces three classes", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L136", + "id": "logging_format_rationale_136", + "community": 95, + "norm_label": "mask credential-bearing substrings inside ``value``. replaces three classes" + }, + { + "label": "context.py", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L1", + "id": "src_exlab_wizard_logging_context_py", + "community": 161, + "norm_label": "context.py" + }, + { + "label": "set_run_context()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L68", + "id": "logging_context_set_run_context", + "community": 161, + "norm_label": "set_run_context()" + }, + { + "label": "get_run_context()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L114", + "id": "logging_context_get_run_context", + "community": 161, + "norm_label": "get_run_context()" + }, + { + "label": "clear_run_context()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L124", + "id": "logging_context_clear_run_context", + "community": 238, + "norm_label": "clear_run_context()" + }, + { + "label": "Per-task structured-tag context vars for the logging system. Backend Spec \u00a716.2.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L1", + "id": "logging_context_rationale_1", + "community": 161, + "norm_label": "per-task structured-tag context vars for the logging system. backend spec \u00a716.2." + }, + { + "label": "Push the supplied context vars on entry and reset them on exit. Vars whose", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L76", + "id": "logging_context_rationale_76", + "community": 161, + "norm_label": "push the supplied context vars on entry and reset them on exit. vars whose" + }, + { + "label": "Return a snapshot of the active context as a plain ``dict``. Used by the fo", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L115", + "id": "logging_context_rationale_115", + "community": 161, + "norm_label": "return a snapshot of the active context as a plain ``dict``. used by the fo" + }, + { + "label": "Reset every context var to ``None``. Provided for test fixtures that want t", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L125", + "id": "logging_context_rationale_125", + "community": 238, + "norm_label": "reset every context var to ``none``. provided for test fixtures that want t" + }, + { + "label": "manager.py", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L1", + "id": "src_exlab_wizard_logging_manager_py", + "community": 28, + "norm_label": "manager.py" + }, + { + "label": "get_logger()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L70", + "id": "logging_manager_get_logger", + "community": 28, + "norm_label": "get_logger()" + }, + { + "label": "configure_logging()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L88", + "id": "logging_manager_configure_logging", + "community": 28, + "norm_label": "configure_logging()" + }, + { + "label": "_shutdown_logging()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L155", + "id": "logging_manager_shutdown_logging", + "community": 28, + "norm_label": "_shutdown_logging()" + }, + { + "label": "_teardown_locked()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L170", + "id": "logging_manager_teardown_locked", + "community": 28, + "norm_label": "_teardown_locked()" + }, + { + "label": "_resolve_threshold()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L189", + "id": "logging_manager_resolve_threshold", + "community": 28, + "norm_label": "_resolve_threshold()" + }, + { + "label": "_resolve_rotation()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L204", + "id": "logging_manager_resolve_rotation", + "community": 28, + "norm_label": "_resolve_rotation()" + }, + { + "label": "_resolve_local_root()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L214", + "id": "logging_manager_resolve_local_root", + "community": 28, + "norm_label": "_resolve_local_root()" + }, + { + "label": "_build_real_handlers()", + "file_type": "code", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L225", + "id": "logging_manager_build_real_handlers", + "community": 196, + "norm_label": "_build_real_handlers()" + }, + { + "label": "Canonical logger factory + configuration. Backend Spec \u00a716.2.1, \u00a716.2.2, \u00a716.2.5", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L1", + "id": "logging_manager_rationale_1", + "community": 28, + "norm_label": "canonical logger factory + configuration. backend spec \u00a716.2.1, \u00a716.2.2, \u00a716.2.5" + }, + { + "label": "Return a logger for ``name``. The ONLY place in the codebase that may call", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L71", + "id": "logging_manager_rationale_71", + "community": 28, + "norm_label": "return a logger for ``name``. the only place in the codebase that may call" + }, + { + "label": "Install the \u00a716.2.5 queue-based handler chain. Idempotent: calling this a s", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L89", + "id": "logging_manager_rationale_89", + "community": 28, + "norm_label": "install the \u00a716.2.5 queue-based handler chain. idempotent: calling this a s" + }, + { + "label": "Drain the queue, stop the listener thread, and detach the queue handler. Ca", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L156", + "id": "logging_manager_rationale_156", + "community": 28, + "norm_label": "drain the queue, stop the listener thread, and detach the queue handler. ca" + }, + { + "label": "Tear down the active listener. Must be called with ``_state_lock`` held.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L171", + "id": "logging_manager_rationale_171", + "community": 28, + "norm_label": "tear down the active listener. must be called with ``_state_lock`` held." + }, + { + "label": "Return the numeric level threshold for the root logger. ``LoggingConfig`` a", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L190", + "id": "logging_manager_rationale_190", + "community": 28, + "norm_label": "return the numeric level threshold for the root logger. ``loggingconfig`` a" + }, + { + "label": "Return ``(central_log_max_mb, central_log_keep)`` from ``config`` or defaults.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L205", + "id": "logging_manager_rationale_205", + "community": 28, + "norm_label": "return ``(central_log_max_mb, central_log_keep)`` from ``config`` or defaults." + }, + { + "label": "Return the configured ``local_root`` for the equipment-scoped handler. Phas", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L215", + "id": "logging_manager_rationale_215", + "community": 28, + "norm_label": "return the configured ``local_root`` for the equipment-scoped handler. phas" + }, + { + "label": "Build the listener's downstream handler chain. Order is fixed: equipment-sc", + "file_type": "rationale", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L232", + "id": "logging_manager_rationale_232", + "community": 196, + "norm_label": "build the listener's downstream handler chain. order is fixed: equipment-sc" + }, + { + "label": "quiescence_poller.py", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L1", + "id": "src_exlab_wizard_orchestrator_quiescence_poller_py", + "community": 134, + "norm_label": "quiescence_poller.py" + }, + { + "label": "NASSyncLike", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L73", + "id": "orchestrator_quiescence_poller_nassynclike", + "community": 134, + "norm_label": "nassynclike" + }, + { + "label": ".enqueue()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L83", + "id": "orchestrator_quiescence_poller_nassynclike_enqueue", + "community": 134, + "norm_label": ".enqueue()" + }, + { + "label": ".status()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L84", + "id": "orchestrator_quiescence_poller_nassynclike_status", + "community": 134, + "norm_label": ".status()" + }, + { + "label": ".get_by_run_path()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L85", + "id": "orchestrator_quiescence_poller_nassynclike_get_by_run_path", + "community": 134, + "norm_label": ".get_by_run_path()" + }, + { + "label": ".list_all()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L86", + "id": "orchestrator_quiescence_poller_nassynclike_list_all", + "community": 134, + "norm_label": ".list_all()" + }, + { + "label": "FileSnapshot", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L90", + "id": "orchestrator_quiescence_poller_filesnapshot", + "community": 134, + "norm_label": "filesnapshot" + }, + { + "label": "QuiescenceSyncPoller", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L103", + "id": "orchestrator_quiescence_poller_quiescencesyncpoller", + "community": 27, + "norm_label": "quiescencesyncpoller" + }, + { + "label": ".__init__()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L115", + "id": "orchestrator_quiescence_poller_quiescencesyncpoller_init", + "community": 27, + "norm_label": ".__init__()" + }, + { + "label": ".apply_config()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L131", + "id": "orchestrator_quiescence_poller_quiescencesyncpoller_apply_config", + "community": 27, + "norm_label": ".apply_config()" + }, + { + "label": ".start()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L144", + "id": "orchestrator_quiescence_poller_quiescencesyncpoller_start", + "community": 27, + "norm_label": ".start()" + }, + { + "label": ".stop()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L160", + "id": "orchestrator_quiescence_poller_quiescencesyncpoller_stop", + "community": 27, + "norm_label": ".stop()" + }, + { + "label": "._loop()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L173", + "id": "orchestrator_quiescence_poller_quiescencesyncpoller_loop", + "community": 27, + "norm_label": "._loop()" + }, + { + "label": ".poll_once()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L194", + "id": "orchestrator_quiescence_poller_quiescencesyncpoller_poll_once", + "community": 134, + "norm_label": ".poll_once()" + }, + { + "label": "._discover_runs()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L243", + "id": "orchestrator_quiescence_poller_quiescencesyncpoller_discover_runs", + "community": 9, + "norm_label": "._discover_runs()" + }, + { + "label": "._iter_run_files()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L283", + "id": "orchestrator_quiescence_poller_quiescencesyncpoller_iter_run_files", + "community": 134, + "norm_label": "._iter_run_files()" + }, + { + "label": "_signature()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L315", + "id": "orchestrator_quiescence_poller_signature", + "community": 134, + "norm_label": "_signature()" + }, + { + "label": "._eligible_files()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L323", + "id": "orchestrator_quiescence_poller_quiescencesyncpoller_eligible_files", + "community": 134, + "norm_label": "._eligible_files()" + }, + { + "label": "_matches_any_glob()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L362", + "id": "orchestrator_quiescence_poller_matches_any_glob", + "community": 134, + "norm_label": "_matches_any_glob()" + }, + { + "label": "_safe_resolve()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L367", + "id": "orchestrator_quiescence_poller_safe_resolve", + "community": 134, + "norm_label": "_safe_resolve()" + }, + { + "label": "Operator-free, per-file quiescence-driven NAS sync poller. Operator-free per-fi", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L1", + "id": "orchestrator_quiescence_poller_rationale_1", + "community": 134, + "norm_label": "operator-free, per-file quiescence-driven nas sync poller. operator-free per-fi" + }, + { + "label": "The NAS-sync surface the poller and the Phase 3 staging code use. ``enqueue", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L74", + "id": "orchestrator_quiescence_poller_rationale_74", + "community": 134, + "norm_label": "the nas-sync surface the poller and the phase 3 staging code use. ``enqueue" + }, + { + "label": "One file's observation record carried forward across sweeps. * ``signature`", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L91", + "id": "orchestrator_quiescence_poller_rationale_91", + "community": 134, + "norm_label": "one file's observation record carried forward across sweeps. * ``signature`" + }, + { + "label": "Polls every run pending NAS sync and enqueues runs with eligible files. Con", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L104", + "id": "orchestrator_quiescence_poller_rationale_104", + "community": 27, + "norm_label": "polls every run pending nas sync and enqueues runs with eligible files. con" + }, + { + "label": "Swap the cached config in place so a live settings save applies. ``poll", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L132", + "id": "orchestrator_quiescence_poller_rationale_132", + "community": 27, + "norm_label": "swap the cached config in place so a live settings save applies. ``poll" + }, + { + "label": "Start the background polling task. Idempotent. Returns immediately; the", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L145", + "id": "orchestrator_quiescence_poller_rationale_145", + "community": 27, + "norm_label": "start the background polling task. idempotent. returns immediately; the" + }, + { + "label": "Cancel the background task and wait for it to exit. Idempotent.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L161", + "id": "orchestrator_quiescence_poller_rationale_161", + "community": 27, + "norm_label": "cancel the background task and wait for it to exit. idempotent." + }, + { + "label": "Run one discovery + quiescence + enqueue sweep. ``now_monotonic`` is in", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L195", + "id": "orchestrator_quiescence_poller_rationale_195", + "community": 134, + "norm_label": "run one discovery + quiescence + enqueue sweep. ``now_monotonic`` is in" + }, + { + "label": "Return every run-leaf directory pending NAS sync. Stage-mode runs sit u", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L244", + "id": "orchestrator_quiescence_poller_rationale_244", + "community": 9, + "norm_label": "return every run-leaf directory pending nas sync. stage-mode runs sit u" + }, + { + "label": "Return every non-ignored file under ``run_path``. Skips the ``.exlab-wi", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L284", + "id": "orchestrator_quiescence_poller_rationale_284", + "community": 134, + "norm_label": "return every non-ignored file under ``run_path``. skips the ``.exlab-wi" + }, + { + "label": "Return ``(st_size, st_mtime_ns)`` for ``file_path`` or None.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L316", + "id": "orchestrator_quiescence_poller_rationale_316", + "community": 533, + "norm_label": "return ``(st_size, st_mtime_ns)`` for ``file_path`` or none." + }, + { + "label": "Return the run-relative paths of quiet files needing a (re-)sync. A qui", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L328", + "id": "orchestrator_quiescence_poller_rationale_328", + "community": 134, + "norm_label": "return the run-relative paths of quiet files needing a (re-)sync. a qui" + }, + { + "label": "Return True if ``name`` matches any glob in ``globs``.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L363", + "id": "orchestrator_quiescence_poller_rationale_363", + "community": 134, + "norm_label": "return true if ``name`` matches any glob in ``globs``." + }, + { + "label": "Resolve ``path`` for de-dup, falling back to the path itself.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L368", + "id": "orchestrator_quiescence_poller_rationale_368", + "community": 134, + "norm_label": "resolve ``path`` for de-dup, falling back to the path itself." + }, + { + "label": "_scan.py", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L1", + "id": "src_exlab_wizard_orchestrator_scan_py", + "community": 9, + "norm_label": "_scan.py" + }, + { + "label": "iter_subdirs()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L30", + "id": "orchestrator_scan_iter_subdirs", + "community": 9, + "norm_label": "iter_subdirs()" + }, + { + "label": "walk_equipment_run_leaves()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L55", + "id": "orchestrator_scan_walk_equipment_run_leaves", + "community": 9, + "norm_label": "walk_equipment_run_leaves()" + }, + { + "label": "walk_run_leaves()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L89", + "id": "orchestrator_scan_walk_run_leaves", + "community": 9, + "norm_label": "walk_run_leaves()" + }, + { + "label": "count_files_and_bytes()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L105", + "id": "orchestrator_scan_count_files_and_bytes", + "community": 9, + "norm_label": "count_files_and_bytes()" + }, + { + "label": "Shared filesystem helpers for the orchestrator. Backend Spec \u00a713.2. Both :mod:`", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L1", + "id": "orchestrator_scan_rationale_1", + "community": 9, + "norm_label": "shared filesystem helpers for the orchestrator. backend spec \u00a713.2. both :mod:`" + }, + { + "label": "Return immediate sub-directories of ``parent``. Skips ``.exlab-wizard/``, h", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L31", + "id": "orchestrator_scan_rationale_31", + "community": 9, + "norm_label": "return immediate sub-directories of ``parent``. skips ``.exlab-wizard/``, h" + }, + { + "label": "Return every ``Run_*`` / ``TestRun_*`` directory under one equipment dir. `", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L56", + "id": "orchestrator_scan_rationale_56", + "community": 9, + "norm_label": "return every ``run_*`` / ``testrun_*`` directory under one equipment dir. `" + }, + { + "label": "Return every ``Run_*`` / ``TestRun_*`` directory under ``staging_root``. Pe", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L90", + "id": "orchestrator_scan_rationale_90", + "community": 9, + "norm_label": "return every ``run_*`` / ``testrun_*`` directory under ``staging_root``. pe" + }, + { + "label": "Sum file count + total bytes under ``run_path``. With ``exclude_cache=True`", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L106", + "id": "orchestrator_scan_rationale_106", + "community": 9, + "norm_label": "sum file count + total bytes under ``run_path``. with ``exclude_cache=true`" + }, + { + "label": "__init__.py", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/__init__.py", + "source_location": "L1", + "id": "src_exlab_wizard_orchestrator_init_py", + "community": 422, + "norm_label": "__init__.py" + }, + { + "label": "Orchestrator-mode runtime. Backend Spec \u00a712, \u00a713. This package implements the o", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/__init__.py", + "source_location": "L1", + "id": "orchestrator_init_rationale_1", + "community": 422, + "norm_label": "orchestrator-mode runtime. backend spec \u00a712, \u00a713. this package implements the o" + }, + { + "label": "staging_clear.py", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/staging_clear.py", + "source_location": "L1", + "id": "src_exlab_wizard_orchestrator_staging_clear_py", + "community": 228, + "norm_label": "staging_clear.py" + }, + { + "label": "clear_run_dir()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/staging_clear.py", + "source_location": "L33", + "id": "orchestrator_staging_clear_clear_run_dir", + "community": 228, + "norm_label": "clear_run_dir()" + }, + { + "label": "Operator-facing staging-clear helper. Backend Spec \u00a713.7. The operator-free per", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/staging_clear.py", + "source_location": "L1", + "id": "orchestrator_staging_clear_rationale_1", + "community": 228, + "norm_label": "operator-facing staging-clear helper. backend spec \u00a713.7. the operator-free per" + }, + { + "label": "Delete a staged run's data files; return ``(file_count, bytes_freed)``. Ide", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/staging_clear.py", + "source_location": "L34", + "id": "orchestrator_staging_clear_rationale_34", + "community": 228, + "norm_label": "delete a staged run's data files; return ``(file_count, bytes_freed)``. ide" + }, + { + "label": "staging_query.py", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L1", + "id": "src_exlab_wizard_orchestrator_staging_query_py", + "community": 9, + "norm_label": "staging_query.py" + }, + { + "label": "StagedRunSummary", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L44", + "id": "orchestrator_staging_query_stagedrunsummary", + "community": 37, + "norm_label": "stagedrunsummary" + }, + { + "label": "list_staged_runs()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L73", + "id": "orchestrator_staging_query_list_staged_runs", + "community": 9, + "norm_label": "list_staged_runs()" + }, + { + "label": "_summarize_run()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L119", + "id": "orchestrator_staging_query_summarize_run", + "community": 9, + "norm_label": "_summarize_run()" + }, + { + "label": "_rollup_value()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L149", + "id": "orchestrator_staging_query_rollup_value", + "community": 9, + "norm_label": "_rollup_value()" + }, + { + "label": "_path_identity()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L165", + "id": "orchestrator_staging_query_path_identity", + "community": 9, + "norm_label": "_path_identity()" + }, + { + "label": "_dir_mtime_iso()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L189", + "id": "orchestrator_staging_query_dir_mtime_iso", + "community": 90, + "norm_label": "_dir_mtime_iso()" + }, + { + "label": "_parse_iso()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L198", + "id": "orchestrator_staging_query_parse_iso", + "community": 9, + "norm_label": "_parse_iso()" + }, + { + "label": "_iso_to_epoch()", + "file_type": "code", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L204", + "id": "orchestrator_staging_query_iso_to_epoch", + "community": 9, + "norm_label": "_iso_to_epoch()" + }, + { + "label": "Read-only enumeration of runs pending NAS sync. Backend Spec \u00a713.8. The orchest", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L1", + "id": "orchestrator_staging_query_rationale_1", + "community": 9, + "norm_label": "read-only enumeration of runs pending nas sync. backend spec \u00a713.8. the orchest" + }, + { + "label": "One row in the orchestrator's staging panel. Backend Spec \u00a713.8: * ``p", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L45", + "id": "orchestrator_staging_query_rationale_45", + "community": 37, + "norm_label": "one row in the orchestrator's staging panel. backend spec \u00a713.8: * ``p" + }, + { + "label": "Enumerate every staged run with its derived lifecycle state. ``staging_root", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L80", + "id": "orchestrator_staging_query_rationale_80", + "community": 9, + "norm_label": "enumerate every staged run with its derived lifecycle state. ``staging_root" + }, + { + "label": "Build a :class:`StagedRunSummary` for ``run_path``. Equipment id / project", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L125", + "id": "orchestrator_staging_query_rationale_125", + "community": 9, + "norm_label": "build a :class:`stagedrunsummary` for ``run_path``. equipment id / project" + }, + { + "label": "Return the derived ``sync_state.json`` rollup for ``run_path``. Reads the r", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L150", + "id": "orchestrator_staging_query_rationale_150", + "community": 9, + "norm_label": "return the derived ``sync_state.json`` rollup for ``run_path``. reads the r" + }, + { + "label": "Return ``(equipment_id, project_name, run_kind)`` from the run path. Falls", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L166", + "id": "orchestrator_staging_query_rationale_166", + "community": 9, + "norm_label": "return ``(equipment_id, project_name, run_kind)`` from the run path. falls" + }, + { + "label": "Return the run directory mtime as a UTC ISO-8601 string.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L190", + "id": "orchestrator_staging_query_rationale_190", + "community": 90, + "norm_label": "return the run directory mtime as a utc iso-8601 string." + }, + { + "label": "Parse an ISO-8601 ``Z``-suffixed timestamp; fall back on error.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L199", + "id": "orchestrator_staging_query_rationale_199", + "community": 9, + "norm_label": "parse an iso-8601 ``z``-suffixed timestamp; fall back on error." + }, + { + "label": "Sort key helper -- returns 0.0 if ``value`` cannot be parsed.", + "file_type": "rationale", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L205", + "id": "orchestrator_staging_query_rationale_205", + "community": 9, + "norm_label": "sort key helper -- returns 0.0 if ``value`` cannot be parsed." + }, + { + "label": "README.md", + "file_type": "document", + "source_file": "README.md", + "source_location": "L1", + "id": "readme_md", + "community": 178, + "norm_label": "readme.md" + }, + { + "label": "ExLabWizard", + "file_type": "document", + "source_file": "README.md", + "source_location": "L1", + "id": "exlabwizard_readme_exlabwizard", + "community": 178, + "norm_label": "exlabwizard" + }, + { + "label": "Context", + "file_type": "document", + "source_file": "README.md", + "source_location": "L10", + "id": "exlabwizard_readme_context", + "community": 178, + "norm_label": "context" + }, + { + "label": "Installation", + "file_type": "document", + "source_file": "README.md", + "source_location": "L20", + "id": "exlabwizard_readme_installation", + "community": 178, + "norm_label": "installation" + }, + { + "label": "Prerequisites", + "file_type": "document", + "source_file": "README.md", + "source_location": "L22", + "id": "exlabwizard_readme_prerequisites", + "community": 178, + "norm_label": "prerequisites" + }, + { + "label": "From source (development)", + "file_type": "document", + "source_file": "README.md", + "source_location": "L32", + "id": "exlabwizard_readme_from_source_development", + "community": 178, + "norm_label": "from source (development)" + }, + { + "label": "code:bash (git clone https://github.com/exfab/ExLabWizard.git)", + "file_type": "document", + "source_file": "README.md", + "source_location": "L37", + "id": "exlabwizard_readme_codeblock_1", + "community": 178, + "norm_label": "code:bash (git clone https://github.com/exfab/exlabwizard.git)" + }, + { + "label": "Pre-built binary", + "file_type": "document", + "source_file": "README.md", + "source_location": "L53", + "id": "exlabwizard_readme_pre_built_binary", + "community": 178, + "norm_label": "pre-built binary" + }, + { + "label": "Running ExLab-Wizard", + "file_type": "document", + "source_file": "README.md", + "source_location": "L61", + "id": "exlabwizard_readme_running_exlab_wizard", + "community": 178, + "norm_label": "running exlab-wizard" + }, + { + "label": "code:bash (uv run exlab-wizard-tray # or: source .venv/bin/activate)", + "file_type": "document", + "source_file": "README.md", + "source_location": "L73", + "id": "exlabwizard_readme_codeblock_2", + "community": 178, + "norm_label": "code:bash (uv run exlab-wizard-tray # or: source .venv/bin/activate)" + }, + { + "label": "Building a distributable binary", + "file_type": "document", + "source_file": "README.md", + "source_location": "L89", + "id": "exlabwizard_readme_building_a_distributable_binary", + "community": 178, + "norm_label": "building a distributable binary" + }, + { + "label": "code:bash (./scripts/build_local.sh # macOS / Linux)", + "file_type": "document", + "source_file": "README.md", + "source_location": "L91", + "id": "exlabwizard_readme_codeblock_3", + "community": 178, + "norm_label": "code:bash (./scripts/build_local.sh # macos / linux)" + }, + { + "label": "Tests, lint, type-check", + "file_type": "document", + "source_file": "README.md", + "source_location": "L100", + "id": "exlabwizard_readme_tests_lint_type_check", + "community": 178, + "norm_label": "tests, lint, type-check" + }, + { + "label": "code:bash (uv run pytest tests/unit tests/integration # fast suite)", + "file_type": "document", + "source_file": "README.md", + "source_location": "L102", + "id": "exlabwizard_readme_codeblock_4", + "community": 178, + "norm_label": "code:bash (uv run pytest tests/unit tests/integration # fast suite)" + }, + { + "label": "Documentation", + "file_type": "document", + "source_file": "README.md", + "source_location": "L114", + "id": "exlabwizard_readme_documentation", + "community": 178, + "norm_label": "documentation" + }, + { + "label": "DESIGN.md", + "file_type": "document", + "source_file": "DESIGN.md", + "source_location": "L1", + "id": "design_md", + "community": 23, + "norm_label": "design.md" + }, + { + "label": "Frontend Design Style Guide", + "file_type": "document", + "source_file": "DESIGN.md", + "source_location": "L1", + "id": "exlabwizard_design_frontend_design_style_guide", + "community": 23, + "norm_label": "frontend design style guide" + }, + { + "label": "Absolute Constraints", + "file_type": "document", + "source_file": "DESIGN.md", + "source_location": "L12", + "id": "exlabwizard_design_absolute_constraints", + "community": 23, + "norm_label": "absolute constraints" + }, + { + "label": "00 -- Logo and Branding", + "file_type": "document", + "source_file": "DESIGN.md", + "source_location": "L37", + "id": "exlabwizard_design_00_logo_and_branding", + "community": 23, + "norm_label": "00 -- logo and branding" + }, + { + "label": "01 -- Color Palette", + "file_type": "document", + "source_file": "DESIGN.md", + "source_location": "L44", + "id": "exlabwizard_design_01_color_palette", + "community": 23, + "norm_label": "01 -- color palette" + }, + { + "label": "Primary Colors -- UI Only", + "file_type": "document", + "source_file": "DESIGN.md", + "source_location": "L46", + "id": "exlabwizard_design_primary_colors_ui_only", + "community": 23, + "norm_label": "primary colors -- ui only" + }, + { + "label": "Data Colors -- Okabe-Ito -- Visualization Only", + "file_type": "document", + "source_file": "DESIGN.md", + "source_location": "L59", + "id": "exlabwizard_design_data_colors_okabe_ito_visualization_only", + "community": 23, + "norm_label": "data colors -- okabe-ito -- visualization only" + }, + { + "label": "Surface & Neutral Tokens", + "file_type": "document", + "source_file": "DESIGN.md", + "source_location": "L90", + "id": "exlabwizard_design_surface_neutral_tokens", + "community": 23, + "norm_label": "surface & neutral tokens" + }, + { + "label": "Semantic Color Assignments", + "file_type": "document", + "source_file": "DESIGN.md", + "source_location": "L100", + "id": "exlabwizard_design_semantic_color_assignments", + "community": 23, + "norm_label": "semantic color assignments" + }, + { + "label": "Color Selection Decision Logic", + "file_type": "document", + "source_file": "DESIGN.md", + "source_location": "L109", + "id": "exlabwizard_design_color_selection_decision_logic", + "community": 23, + "norm_label": "color selection decision logic" + }, + { + "label": "02 -- Typography", + "file_type": "document", + "source_file": "DESIGN.md", + "source_location": "L131", + "id": "exlabwizard_design_02_typography", + "community": 23, + "norm_label": "02 -- typography" + }, + { + "label": "code:css (--font-display: 'DM Serif Display', Georgia, serif;)", + "file_type": "document", + "source_file": "DESIGN.md", + "source_location": "L136", + "id": "exlabwizard_design_codeblock_1", + "community": 23, + "norm_label": "code:css (--font-display: 'dm serif display', georgia, serif;)" + }, + { + "label": "code:html (/)", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L113", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_codeblock_1", + "community": 82, + "norm_label": "code:block1 (/)" + }, + { + "label": "4. Main window redesign", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L141", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", + "community": 82, + "norm_label": "4. main window redesign" + }, + { + "label": "4.1 Layout", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L143", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_1_layout", + "community": 82, + "norm_label": "4.1 layout" + }, + { + "label": "code:block2 (\u250c\u2500 Header toolbar: New Project \u00b7 New Run \u00b7 New Test Run \u00b7 Ad)", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L147", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_codeblock_2", + "community": 82, + "norm_label": "code:block2 (\u250c\u2500 header toolbar: new project \u00b7 new run \u00b7 new test run \u00b7 ad)" + }, + { + "label": "4.2 Left \u2014 tree", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L162", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_2_left_tree", + "community": 82, + "norm_label": "4.2 left \u2014 tree" + }, + { + "label": "4.3 Centre \u2014 live file list", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L174", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_3_centre_live_file_list", + "community": 82, + "norm_label": "4.3 centre \u2014 live file list" + }, + { + "label": "4.4 Right \u2014 Metadata / Problems pane (collapsible)", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L189", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_4_right_metadata_problems_pane_collapsible", + "community": 82, + "norm_label": "4.4 right \u2014 metadata / problems pane (collapsible)" + }, + { + "label": "4.5 Travelling problem badge", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L211", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_5_travelling_problem_badge", + "community": 82, + "norm_label": "4.5 travelling problem badge" + }, + { + "label": "4.6 Footer status bar & relocated staging actions", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L222", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_6_footer_status_bar_relocated_staging_actions", + "community": 82, + "norm_label": "4.6 footer status bar & relocated staging actions" + }, + { + "label": "4.7 Header toolbar & breadcrumb", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L239", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_4_7_header_toolbar_breadcrumb", + "community": 82, + "norm_label": "4.7 header toolbar & breadcrumb" + }, + { + "label": "5. Live file feed (Approach 1 \u2014 poll-only)", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L248", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_5_live_file_feed_approach_1_poll_only", + "community": 82, + "norm_label": "5. live file feed (approach 1 \u2014 poll-only)" + }, + { + "label": "6. Add-Equipment wizard", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L276", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_6_add_equipment_wizard", + "community": 82, + "norm_label": "6. add-equipment wizard" + }, + { + "label": "7. Interaction decisions", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L299", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_7_interaction_decisions", + "community": 82, + "norm_label": "7. interaction decisions" + }, + { + "label": "8. Configuration schema changes", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L313", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_8_configuration_schema_changes", + "community": 82, + "norm_label": "8. configuration schema changes" + }, + { + "label": "9. Code impact map", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L327", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_9_code_impact_map", + "community": 82, + "norm_label": "9. code impact map" + }, + { + "label": "9.1 GUI wiring", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L349", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_9_1_gui_wiring", + "community": 82, + "norm_label": "9.1 gui wiring" + }, + { + "label": "10. Error handling", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L401", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_10_error_handling", + "community": 82, + "norm_label": "10. error handling" + }, + { + "label": "11. Testing strategy", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L430", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_11_testing_strategy", + "community": 82, + "norm_label": "11. testing strategy" + }, + { + "label": "12. Future (v1.x)", + "file_type": "document", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L477", + "id": "specs_2026_05_14_gui_orchestrator_redesign_design_12_future_v1_x", + "community": 82, + "norm_label": "12. future (v1.x)" + }, + { + "label": "manifest_schema.md", + "file_type": "document", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L1", + "id": "docs_source_plugin_guide_manifest_schema_md", + "community": 220, + "norm_label": "manifest_schema.md" + }, + { + "label": "Manifest Schema", + "file_type": "document", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L1", + "id": "plugin_guide_manifest_schema_manifest_schema", + "community": 220, + "norm_label": "manifest schema" + }, + { + "label": "Required identity fields", + "file_type": "document", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L9", + "id": "plugin_guide_manifest_schema_required_identity_fields", + "community": 220, + "norm_label": "required identity fields" + }, + { + "label": "code:yaml (name: \"xlsx_field_filler\")", + "file_type": "document", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L11", + "id": "plugin_guide_manifest_schema_codeblock_1", + "community": 220, + "norm_label": "code:yaml (name: \"xlsx_field_filler\")" + }, + { + "label": "Required dispatch fields", + "file_type": "document", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L18", + "id": "plugin_guide_manifest_schema_required_dispatch_fields", + "community": 220, + "norm_label": "required dispatch fields" + }, + { + "label": "code:yaml (supported_extensions: [\".xlsx\"] # file-extension or \"readm)", + "file_type": "document", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L20", + "id": "plugin_guide_manifest_schema_codeblock_2", + "community": 220, + "norm_label": "code:yaml (supported_extensions: [\".xlsx\"] # file-extension or \"readm)" + }, + { + "label": "Optional declaration block", + "file_type": "document", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L30", + "id": "plugin_guide_manifest_schema_optional_declaration_block", + "community": 220, + "norm_label": "optional declaration block" + }, + { + "label": "code:yaml (required_variables:)", + "file_type": "document", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L32", + "id": "plugin_guide_manifest_schema_codeblock_3", + "community": 220, + "norm_label": "code:yaml (required_variables:)" + }, + { + "label": "Optional execution policy", + "file_type": "document", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L48", + "id": "plugin_guide_manifest_schema_optional_execution_policy", + "community": 220, + "norm_label": "optional execution policy" + }, + { + "label": "code:yaml (isolation:)", + "file_type": "document", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L50", + "id": "plugin_guide_manifest_schema_codeblock_4", + "community": 220, + "norm_label": "code:yaml (isolation:)" + }, + { + "label": "Discovery rules", + "file_type": "document", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L61", + "id": "plugin_guide_manifest_schema_discovery_rules", + "community": 220, + "norm_label": "discovery rules" + }, + { + "label": "ipc_envelope.md", + "file_type": "document", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L1", + "id": "docs_source_plugin_guide_ipc_envelope_md", + "community": 257, + "norm_label": "ipc_envelope.md" + }, + { + "label": "IPC Envelope", + "file_type": "document", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L1", + "id": "plugin_guide_ipc_envelope_ipc_envelope", + "community": 257, + "norm_label": "ipc envelope" + }, + { + "label": "Stdin (host to worker)", + "file_type": "document", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L12", + "id": "plugin_guide_ipc_envelope_stdin_host_to_worker", + "community": 257, + "norm_label": "stdin (host to worker)" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L16", + "id": "plugin_guide_ipc_envelope_codeblock_1", + "community": 257, + "norm_label": "code:json ({)" + }, + { + "label": "Stdout (worker to host)", + "file_type": "document", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L31", + "id": "plugin_guide_ipc_envelope_stdout_worker_to_host", + "community": 257, + "norm_label": "stdout (worker to host)" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L35", + "id": "plugin_guide_ipc_envelope_codeblock_2", + "community": 257, + "norm_label": "code:json ({)" + }, + { + "label": "Stderr (structured log channel)", + "file_type": "document", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L54", + "id": "plugin_guide_ipc_envelope_stderr_structured_log_channel", + "community": 257, + "norm_label": "stderr (structured log channel)" + }, + { + "label": "Exit codes", + "file_type": "document", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L61", + "id": "plugin_guide_ipc_envelope_exit_codes", + "community": 257, + "norm_label": "exit codes" + }, + { + "label": "index.md", + "file_type": "document", + "source_file": "docs/source/plugin_guide/index.md", + "source_location": "L1", + "id": "docs_source_plugin_guide_index_md", + "community": 276, + "norm_label": "index.md" + }, + { + "label": "Plugin Author Guide", + "file_type": "document", + "source_file": "docs/source/plugin_guide/index.md", + "source_location": "L1", + "id": "plugin_guide_index_plugin_author_guide", + "community": 276, + "norm_label": "plugin author guide" + }, + { + "label": "What plugins do", + "file_type": "document", + "source_file": "docs/source/plugin_guide/index.md", + "source_location": "L9", + "id": "plugin_guide_index_what_plugins_do", + "community": 276, + "norm_label": "what plugins do" + }, + { + "label": "Where plugins fit in the pipeline", + "file_type": "document", + "source_file": "docs/source/plugin_guide/index.md", + "source_location": "L21", + "id": "plugin_guide_index_where_plugins_fit_in_the_pipeline", + "community": 276, + "norm_label": "where plugins fit in the pipeline" + }, + { + "label": "code:block1 (Creation Controller)", + "file_type": "document", + "source_file": "docs/source/plugin_guide/index.md", + "source_location": "L27", + "id": "plugin_guide_index_codeblock_1", + "community": 276, + "norm_label": "code:block1 (creation controller)" + }, + { + "label": "code:{toctree} (:maxdepth: 1)", + "file_type": "document", + "source_file": "docs/source/plugin_guide/index.md", + "source_location": "L43", + "id": "plugin_guide_index_codeblock_2", + "community": 276, + "norm_label": "code:{toctree} (:maxdepth: 1)" + }, + { + "label": "Where to look in the codebase", + "file_type": "document", + "source_file": "docs/source/plugin_guide/index.md", + "source_location": "L52", + "id": "plugin_guide_index_where_to_look_in_the_codebase", + "community": 276, + "norm_label": "where to look in the codebase" + }, + { + "label": "worked_examples.md", + "file_type": "document", + "source_file": "docs/source/plugin_guide/worked_examples.md", + "source_location": "L1", + "id": "docs_source_plugin_guide_worked_examples_md", + "community": 277, + "norm_label": "worked_examples.md" + }, + { + "label": "Worked Examples", + "file_type": "document", + "source_file": "docs/source/plugin_guide/worked_examples.md", + "source_location": "L1", + "id": "plugin_guide_worked_examples_worked_examples", + "community": 277, + "norm_label": "worked examples" + }, + { + "label": "Hello plugin", + "file_type": "document", + "source_file": "docs/source/plugin_guide/worked_examples.md", + "source_location": "L8", + "id": "plugin_guide_worked_examples_hello_plugin", + "community": 277, + "norm_label": "hello plugin" + }, + { + "label": "xlsx_field_filler", + "file_type": "document", + "source_file": "docs/source/plugin_guide/worked_examples.md", + "source_location": "L19", + "id": "plugin_guide_worked_examples_xlsx_field_filler", + "community": 277, + "norm_label": "xlsx_field_filler" + }, + { + "label": "docx_variable_replacer", + "file_type": "document", + "source_file": "docs/source/plugin_guide/worked_examples.md", + "source_location": "L39", + "id": "plugin_guide_worked_examples_docx_variable_replacer", + "community": 277, + "norm_label": "docx_variable_replacer" + }, + { + "label": "Where to look in the codebase", + "file_type": "document", + "source_file": "docs/source/plugin_guide/worked_examples.md", + "source_location": "L49", + "id": "plugin_guide_worked_examples_where_to_look_in_the_codebase", + "community": 277, + "norm_label": "where to look in the codebase" + }, + { + "label": "code:block1 (pip install -e .[plugin-examples])", + "file_type": "document", + "source_file": "docs/source/plugin_guide/worked_examples.md", + "source_location": "L62", + "id": "plugin_guide_worked_examples_codeblock_1", + "community": 277, + "norm_label": "code:block1 (pip install -e .[plugin-examples])" + }, + { + "label": "2026-05-21-operator-free-per-file-nas-sync-design.md", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L1", + "id": "docs_superpowers_specs_2026_05_21_operator_free_per_file_nas_sync_design_md", + "community": 139, + "norm_label": "2026-05-21-operator-free-per-file-nas-sync-design.md" + }, + { + "label": "Operator-free, per-file quiescence-driven NAS sync \u2014 design", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L1", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "community": 139, + "norm_label": "operator-free, per-file quiescence-driven nas sync \u2014 design" + }, + { + "label": "Context", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L7", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_context", + "community": 139, + "norm_label": "context" + }, + { + "label": "Goals", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L23", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_goals", + "community": 139, + "norm_label": "goals" + }, + { + "label": "Non-goals", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L31", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_non_goals", + "community": 139, + "norm_label": "non-goals" + }, + { + "label": "The model", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L38", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_the_model", + "community": 139, + "norm_label": "the model" + }, + { + "label": "Config changes (`config/models.py`)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L63", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_config_changes_config_models_py", + "community": 139, + "norm_label": "config changes (`config/models.py`)" + }, + { + "label": "Run lifecycle \u2014 rollup (Approach 1)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L86", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_run_lifecycle_rollup_approach_1", + "community": 139, + "norm_label": "run lifecycle \u2014 rollup (approach 1)" + }, + { + "label": "Per-file sync state \u2014 `sync_state.json`", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L101", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_per_file_sync_state_sync_state_json", + "community": 139, + "norm_label": "per-file sync state \u2014 `sync_state.json`" + }, + { + "label": "code:block1 ({)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L107", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_codeblock_1", + "community": 139, + "norm_label": "code:block1 ({)" + }, + { + "label": "`ingest.json` contract (risk 2 resolution)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L124", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_ingest_json_contract_risk_2_resolution", + "community": 139, + "norm_label": "`ingest.json` contract (risk 2 resolution)" + }, + { + "label": "`keep-local` (per-file)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L137", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_keep_local_per_file", + "community": 139, + "norm_label": "`keep-local` (per-file)" + }, + { + "label": "GUI per-file display state", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L146", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_gui_per_file_display_state", + "community": 139, + "norm_label": "gui per-file display state" + }, + { + "label": "Failure handling", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L167", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_failure_handling", + "community": 139, + "norm_label": "failure handling" + }, + { + "label": "Cleanup \u2014 rollup", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L176", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_cleanup_rollup", + "community": 139, + "norm_label": "cleanup \u2014 rollup" + }, + { + "label": "Transport batching (risk 1 resolution)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L183", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_transport_batching_risk_1_resolution", + "community": 139, + "norm_label": "transport batching (risk 1 resolution)" + }, + { + "label": "Components touched", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L203", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_components_touched", + "community": 139, + "norm_label": "components touched" + }, + { + "label": "Testing", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L228", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_testing", + "community": 139, + "norm_label": "testing" + }, + { + "label": "Migration", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L244", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_migration", + "community": 139, + "norm_label": "migration" + }, + { + "label": "Open questions / out of scope", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L252", + "id": "specs_2026_05_21_operator_free_per_file_nas_sync_design_open_questions_out_of_scope", + "community": 139, + "norm_label": "open questions / out of scope" + }, + { + "label": "2026-05-26-rclone-only-nas-sync-design.md", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L1", + "id": "docs_superpowers_specs_2026_05_26_rclone_only_nas_sync_design_md", + "community": 104, + "norm_label": "2026-05-26-rclone-only-nas-sync-design.md" + }, + { + "label": "Rclone-only NAS sync with password auth (SFTP + SMB)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L1", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", + "community": 104, + "norm_label": "rclone-only nas sync with password auth (sftp + smb)" + }, + { + "label": "Context", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L9", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_context", + "community": 104, + "norm_label": "context" + }, + { + "label": "Goals", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L43", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_goals", + "community": 104, + "norm_label": "goals" + }, + { + "label": "Non-goals", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L63", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_non_goals", + "community": 104, + "norm_label": "non-goals" + }, + { + "label": "Architecture", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L77", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_architecture", + "community": 104, + "norm_label": "architecture" + }, + { + "label": "code:block1 (+-------------------------------+)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L79", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_1", + "community": 104, + "norm_label": "code:block1 (+-------------------------------+)" + }, + { + "label": "Components", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L117", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_components", + "community": 104, + "norm_label": "components" + }, + { + "label": "1. Config models", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L119", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_1_config_models", + "community": 104, + "norm_label": "1. config models" + }, + { + "label": "code:python (class RcloneSftpTransport(BaseModel):)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L128", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_2", + "community": 104, + "norm_label": "code:python (class rclonesftptransport(basemodel):)" + }, + { + "label": "2. Keyring + dependencies + setup gate", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L159", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_2_keyring_dependencies_setup_gate", + "community": 104, + "norm_label": "2. keyring + dependencies + setup gate" + }, + { + "label": "3. Rclone driver", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L197", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_3_rclone_driver", + "community": 104, + "norm_label": "3. rclone driver" + }, + { + "label": "code:python (class RcloneDriver:)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L203", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_3", + "community": 104, + "norm_label": "code:python (class rclonedriver:)" + }, + { + "label": "code:python (def build_rclone_env()", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L246", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_4", + "community": 104, + "norm_label": "code:python (def build_rclone_env()" + }, + { + "label": "4. NAS sync client", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L261", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_4_nas_sync_client", + "community": 104, + "norm_label": "4. nas sync client" + }, + { + "label": "5. Verifier collapse", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L299", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_5_verifier_collapse", + "community": 104, + "norm_label": "5. verifier collapse" + }, + { + "label": "code:python (class Verifier:)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L312", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_5", + "community": 104, + "norm_label": "code:python (class verifier:)" + }, + { + "label": "6. Wizard + Settings UI", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L344", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_6_wizard_settings_ui", + "community": 104, + "norm_label": "6. wizard + settings ui" + }, + { + "label": "7. Sync state schema", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L390", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_7_sync_state_schema", + "community": 104, + "norm_label": "7. sync state schema" + }, + { + "label": "code:python (class FileSyncRecord(Struct):)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L395", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_6", + "community": 104, + "norm_label": "code:python (class filesyncrecord(struct):)" + }, + { + "label": "8. Error classification", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L407", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_8_error_classification", + "community": 104, + "norm_label": "8. error classification" + }, + { + "label": "Data flow (one sync cycle)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L417", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_data_flow_one_sync_cycle", + "community": 104, + "norm_label": "data flow (one sync cycle)" + }, + { + "label": "Error handling", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L444", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_error_handling", + "community": 104, + "norm_label": "error handling" + }, + { + "label": "Testing", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L460", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_testing", + "community": 104, + "norm_label": "testing" + }, + { + "label": "Open follow-up: Slot B (drift audit)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L489", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_open_follow_up_slot_b_drift_audit", + "community": 104, + "norm_label": "open follow-up: slot b (drift audit)" + }, + { + "label": "Risks / notes", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L500", + "id": "specs_2026_05_26_rclone_only_nas_sync_design_risks_notes", + "community": 104, + "norm_label": "risks / notes" + }, + { + "label": "2026-05-28-staging-root-opt-in-design.md", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L1", + "id": "docs_superpowers_specs_2026_05_28_staging_root_opt_in_design_md", + "community": 132, + "norm_label": "2026-05-28-staging-root-opt-in-design.md" + }, + { + "label": "Opt-in `staging_root` \u2014 Design Spec", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L1", + "id": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", + "community": 132, + "norm_label": "opt-in `staging_root` \u2014 design spec" + }, + { + "label": "1. Summary", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L12", + "id": "specs_2026_05_28_staging_root_opt_in_design_1_summary", + "community": 132, + "norm_label": "1. summary" + }, + { + "label": "2. Goals & non-goals", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L39", + "id": "specs_2026_05_28_staging_root_opt_in_design_2_goals_non_goals", + "community": 132, + "norm_label": "2. goals & non-goals" + }, + { + "label": "Goals", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L41", + "id": "specs_2026_05_28_staging_root_opt_in_design_goals", + "community": 132, + "norm_label": "goals" + }, + { + "label": "Non-goals", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L50", + "id": "specs_2026_05_28_staging_root_opt_in_design_non_goals", + "community": 132, + "norm_label": "non-goals" + }, + { + "label": "3. Design", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L59", + "id": "specs_2026_05_28_staging_root_opt_in_design_3_design", + "community": 132, + "norm_label": "3. design" + }, + { + "label": "3.1 Setup-state gate \u2014 `paths.py`", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L61", + "id": "specs_2026_05_28_staging_root_opt_in_design_3_1_setup_state_gate_paths_py", + "community": 132, + "norm_label": "3.1 setup-state gate \u2014 `paths.py`" + }, + { + "label": "3.2 Suggestion helper \u2014 `paths.py`", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L76", + "id": "specs_2026_05_28_staging_root_opt_in_design_3_2_suggestion_helper_paths_py", + "community": 132, + "norm_label": "3.2 suggestion helper \u2014 `paths.py`" + }, + { + "label": "3.3 Settings UI \u2014 `ui/pages/settings.py`", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L95", + "id": "specs_2026_05_28_staging_root_opt_in_design_3_3_settings_ui_ui_pages_settings_py", + "community": 132, + "norm_label": "3.3 settings ui \u2014 `ui/pages/settings.py`" + }, + { + "label": "3.4 Create-on-save \u2014 `ui/mount.py` `_persist_config`", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L104", + "id": "specs_2026_05_28_staging_root_opt_in_design_3_4_create_on_save_ui_mount_py_persist_config", + "community": 132, + "norm_label": "3.4 create-on-save \u2014 `ui/mount.py` `_persist_config`" + }, + { + "label": "3.5 Verified, not modified", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L121", + "id": "specs_2026_05_28_staging_root_opt_in_design_3_5_verified_not_modified", + "community": 132, + "norm_label": "3.5 verified, not modified" + }, + { + "label": "3.6 Test mode \u2014 unchanged", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L143", + "id": "specs_2026_05_28_staging_root_opt_in_design_3_6_test_mode_unchanged", + "community": 132, + "norm_label": "3.6 test mode \u2014 unchanged" + }, + { + "label": "4. Data flow", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L152", + "id": "specs_2026_05_28_staging_root_opt_in_design_4_data_flow", + "community": 132, + "norm_label": "4. data flow" + }, + { + "label": "code:block1 (staging_root BLANK)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L156", + "id": "specs_2026_05_28_staging_root_opt_in_design_codeblock_1", + "community": 132, + "norm_label": "code:block1 (staging_root blank)" + }, + { + "label": "5. Error handling & edge cases", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L171", + "id": "specs_2026_05_28_staging_root_opt_in_design_5_error_handling_edge_cases", + "community": 132, + "norm_label": "5. error handling & edge cases" + }, + { + "label": "6. Testing", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L183", + "id": "specs_2026_05_28_staging_root_opt_in_design_6_testing", + "community": 132, + "norm_label": "6. testing" + }, + { + "label": "`tests/unit/test_paths.py`", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L185", + "id": "specs_2026_05_28_staging_root_opt_in_design_tests_unit_test_paths_py", + "community": 132, + "norm_label": "`tests/unit/test_paths.py`" + }, + { + "label": "`tests/unit/ui/test_settings_page.py`", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L197", + "id": "specs_2026_05_28_staging_root_opt_in_design_tests_unit_ui_test_settings_page_py", + "community": 132, + "norm_label": "`tests/unit/ui/test_settings_page.py`" + }, + { + "label": "`tests/unit/ui/test_mount.py` (new cases)", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L200", + "id": "specs_2026_05_28_staging_root_opt_in_design_tests_unit_ui_test_mount_py_new_cases", + "community": 132, + "norm_label": "`tests/unit/ui/test_mount.py` (new cases)" + }, + { + "label": "Regression sweep", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L206", + "id": "specs_2026_05_28_staging_root_opt_in_design_regression_sweep", + "community": 132, + "norm_label": "regression sweep" + }, + { + "label": "7. Affected files", + "file_type": "document", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L213", + "id": "specs_2026_05_28_staging_root_opt_in_design_7_affected_files", + "community": 132, + "norm_label": "7. affected files" + }, + { + "label": "ExLab-Wizard_Frontend_Spec.md", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1", + "id": "design_specs_exlab_wizard_frontend_spec_md", + "community": 179, + "norm_label": "exlab-wizard_frontend_spec.md" + }, + { + "label": "ExLab-Wizard: Frontend Design Specification", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1", + "id": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "community": 179, + "norm_label": "exlab-wizard: frontend design specification" + }, + { + "label": "Table of Contents", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L9", + "id": "design_specs_exlab_wizard_frontend_spec_table_of_contents", + "community": 179, + "norm_label": "table of contents" + }, + { + "label": "1. Purpose and Scope", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L27", + "id": "design_specs_exlab_wizard_frontend_spec_1_purpose_and_scope", + "community": 179, + "norm_label": "1. purpose and scope" + }, + { + "label": "2. Framework Choice", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L39", + "id": "design_specs_exlab_wizard_frontend_spec_2_framework_choice", + "community": 172, + "norm_label": "2. framework choice" + }, + { + "label": "2.1 Visual tokens and the design system", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L56", + "id": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", + "community": 172, + "norm_label": "2.1 visual tokens and the design system" + }, + { + "label": "2.1.1 The `design.py` module", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L60", + "id": "design_specs_exlab_wizard_frontend_spec_2_1_1_the_design_py_module", + "community": 172, + "norm_label": "2.1.1 the `design.py` module" + }, + { + "label": "code:python (# exlab_wizard/ui/design.py \u2014 mirrors DESIGN.md; update both)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L66", + "id": "design_specs_exlab_wizard_frontend_spec_codeblock_1", + "community": 172, + "norm_label": "code:python (# exlab_wizard/ui/design.py \u2014 mirrors design.md; update both)" + }, + { + "label": "2.1.2 What lives in DESIGN.md vs in this spec", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L123", + "id": "design_specs_exlab_wizard_frontend_spec_2_1_2_what_lives_in_design_md_vs_in_this_spec", + "community": 172, + "norm_label": "2.1.2 what lives in design.md vs in this spec" + }, + { + "label": "2.1.3 ExLab-Wizard typography overrides", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L130", + "id": "design_specs_exlab_wizard_frontend_spec_2_1_3_exlab_wizard_typography_overrides", + "community": 172, + "norm_label": "2.1.3 exlab-wizard typography overrides" + }, + { + "label": "2.1.4 Warning-tier color (resolves OQ #3)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L143", + "id": "design_specs_exlab_wizard_frontend_spec_2_1_4_warning_tier_color_resolves_oq_3", + "community": 172, + "norm_label": "2.1.4 warning-tier color (resolves oq #3)" + }, + { + "label": "2.1.5 CSS styling reference rule", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L160", + "id": "design_specs_exlab_wizard_frontend_spec_2_1_5_css_styling_reference_rule", + "community": 172, + "norm_label": "2.1.5 css styling reference rule" + }, + { + "label": "2.1.6 DESIGN.md absolute constraints (binding)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L173", + "id": "design_specs_exlab_wizard_frontend_spec_2_1_6_design_md_absolute_constraints_binding", + "community": 172, + "norm_label": "2.1.6 design.md absolute constraints (binding)" + }, + { + "label": "2.2 Notification taxonomy", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L183", + "id": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", + "community": 172, + "norm_label": "2.2 notification taxonomy" + }, + { + "label": "2.2.1 Pattern selection rule", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L187", + "id": "design_specs_exlab_wizard_frontend_spec_2_2_1_pattern_selection_rule", + "community": 172, + "norm_label": "2.2.1 pattern selection rule" + }, + { + "label": "2.2.2 Toast specifications", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L205", + "id": "design_specs_exlab_wizard_frontend_spec_2_2_2_toast_specifications", + "community": 172, + "norm_label": "2.2.2 toast specifications" + }, + { + "label": "2.2.3 Banner specifications", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L228", + "id": "design_specs_exlab_wizard_frontend_spec_2_2_3_banner_specifications", + "community": 172, + "norm_label": "2.2.3 banner specifications" + }, + { + "label": "2.2.4 Inline message specifications", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L252", + "id": "design_specs_exlab_wizard_frontend_spec_2_2_4_inline_message_specifications", + "community": 172, + "norm_label": "2.2.4 inline message specifications" + }, + { + "label": "2.2.5 The `notify()` helper API", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L268", + "id": "design_specs_exlab_wizard_frontend_spec_2_2_5_the_notify_helper_api", + "community": 172, + "norm_label": "2.2.5 the `notify()` helper api" + }, + { + "label": "code:python (# Action results -> toasts (\u00a72.2.2))", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L272", + "id": "design_specs_exlab_wizard_frontend_spec_codeblock_2", + "community": 172, + "norm_label": "code:python (# action results -> toasts (\u00a72.2.2))" + }, + { + "label": "3. Main Window", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L307", + "id": "design_specs_exlab_wizard_frontend_spec_3_main_window", + "community": 212, + "norm_label": "3. main window" + }, + { + "label": "3.1 Application Lifecycle and First-Launch State", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L311", + "id": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", + "community": 212, + "norm_label": "3.1 application lifecycle and first-launch state" + }, + { + "label": "3.1.1 Setup-complete definition", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L319", + "id": "design_specs_exlab_wizard_frontend_spec_3_1_1_setup_complete_definition", + "community": 212, + "norm_label": "3.1.1 setup-complete definition" + }, + { + "label": "3.1.2 Boot flow", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L329", + "id": "design_specs_exlab_wizard_frontend_spec_3_1_2_boot_flow", + "community": 212, + "norm_label": "3.1.2 boot flow" + }, + { + "label": "3.1.3 Welcome Card (first launch only)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L356", + "id": "design_specs_exlab_wizard_frontend_spec_3_1_3_welcome_card_first_launch_only", + "community": 212, + "norm_label": "3.1.3 welcome card (first launch only)" + }, + { + "label": "3.1.4 Setup-Incomplete state on the Main Window", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L376", + "id": "design_specs_exlab_wizard_frontend_spec_3_1_4_setup_incomplete_state_on_the_main_window", + "community": 212, + "norm_label": "3.1.4 setup-incomplete state on the main window" + }, + { + "label": "3.1.5 First-launch defaults", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L393", + "id": "design_specs_exlab_wizard_frontend_spec_3_1_5_first_launch_defaults", + "community": 212, + "norm_label": "3.1.5 first-launch defaults" + }, + { + "label": "3.1.6 Bundled content discovery", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L404", + "id": "design_specs_exlab_wizard_frontend_spec_3_1_6_bundled_content_discovery", + "community": 212, + "norm_label": "3.1.6 bundled content discovery" + }, + { + "label": "3.1.7 LIMS configuration: online and offline workstations", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L412", + "id": "design_specs_exlab_wizard_frontend_spec_3_1_7_lims_configuration_online_and_offline_workstations", + "community": 212, + "norm_label": "3.1.7 lims configuration: online and offline workstations" + }, + { + "label": "3.2 Layout", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L418", + "id": "design_specs_exlab_wizard_frontend_spec_3_2_layout", + "community": 212, + "norm_label": "3.2 layout" + }, + { + "label": "3.3 Refresh Semantics", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L433", + "id": "design_specs_exlab_wizard_frontend_spec_3_3_refresh_semantics", + "community": 212, + "norm_label": "3.3 refresh semantics" + }, + { + "label": "3.4 Tray Icon and Window Lifecycle", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L437", + "id": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", + "community": 258, + "norm_label": "3.4 tray icon and window lifecycle" + }, + { + "label": "3.4.1 Tray menu", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L441", + "id": "design_specs_exlab_wizard_frontend_spec_3_4_1_tray_menu", + "community": 258, + "norm_label": "3.4.1 tray menu" + }, + { + "label": "3.4.2 Status submenu", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L453", + "id": "design_specs_exlab_wizard_frontend_spec_3_4_2_status_submenu", + "community": 258, + "norm_label": "3.4.2 status submenu" + }, + { + "label": "3.4.3 Window lifecycle", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L469", + "id": "design_specs_exlab_wizard_frontend_spec_3_4_3_window_lifecycle", + "community": 258, + "norm_label": "3.4.3 window lifecycle" + }, + { + "label": "3.4.4 Why this lifecycle matters for the lab workflow", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L486", + "id": "design_specs_exlab_wizard_frontend_spec_3_4_4_why_this_lifecycle_matters_for_the_lab_workflow", + "community": 258, + "norm_label": "3.4.4 why this lifecycle matters for the lab workflow" + }, + { + "label": "3.4.5 OS notifications", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L494", + "id": "design_specs_exlab_wizard_frontend_spec_3_4_5_os_notifications", + "community": 258, + "norm_label": "3.4.5 os notifications" + }, + { + "label": "3.4.6 Quitting the app", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L503", + "id": "design_specs_exlab_wizard_frontend_spec_3_4_6_quitting_the_app", + "community": 258, + "norm_label": "3.4.6 quitting the app" + }, + { + "label": "3.4.7 Linux fallback (no system tray)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L510", + "id": "design_specs_exlab_wizard_frontend_spec_3_4_7_linux_fallback_no_system_tray", + "community": 258, + "norm_label": "3.4.7 linux fallback (no system tray)" + }, + { + "label": "3.5 Tree details, filters, and status bar", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L521", + "id": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", + "community": 262, + "norm_label": "3.5 tree details, filters, and status bar" + }, + { + "label": "3.5.1 LIMS name resolution", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L525", + "id": "design_specs_exlab_wizard_frontend_spec_3_5_1_lims_name_resolution", + "community": 262, + "norm_label": "3.5.1 lims name resolution" + }, + { + "label": "3.5.2 Tree node display format", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L535", + "id": "design_specs_exlab_wizard_frontend_spec_3_5_2_tree_node_display_format", + "community": 262, + "norm_label": "3.5.2 tree node display format" + }, + { + "label": "3.5.3 Archived and deleted LIMS-project handling", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L546", + "id": "design_specs_exlab_wizard_frontend_spec_3_5_3_archived_and_deleted_lims_project_handling", + "community": 262, + "norm_label": "3.5.3 archived and deleted lims-project handling" + }, + { + "label": "3.5.4 Search and filter chips", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L558", + "id": "design_specs_exlab_wizard_frontend_spec_3_5_4_search_and_filter_chips", + "community": 262, + "norm_label": "3.5.4 search and filter chips" + }, + { + "label": "code:block3 ([ search by name, short_id, or run label ... ] [Active \u2713] )", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L562", + "id": "design_specs_exlab_wizard_frontend_spec_codeblock_3", + "community": 262, + "norm_label": "code:block3 ([ search by name, short_id, or run label ... ] [active \u2713] )" + }, + { + "label": "3.5.5 Status bar (bottom of the main window)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L580", + "id": "design_specs_exlab_wizard_frontend_spec_3_5_5_status_bar_bottom_of_the_main_window", + "community": 262, + "norm_label": "3.5.5 status bar (bottom of the main window)" + }, + { + "label": "3.5.6 Empty states", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L594", + "id": "design_specs_exlab_wizard_frontend_spec_3_5_6_empty_states", + "community": 262, + "norm_label": "3.5.6 empty states" + }, + { + "label": "3.6 Detail pane (right panel)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L604", + "id": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", + "community": 259, + "norm_label": "3.6 detail pane (right panel)" + }, + { + "label": "3.6.1 Title bar", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L610", + "id": "design_specs_exlab_wizard_frontend_spec_3_6_1_title_bar", + "community": 259, + "norm_label": "3.6.1 title bar" + }, + { + "label": "3.6.2 Project detail sections", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L622", + "id": "design_specs_exlab_wizard_frontend_spec_3_6_2_project_detail_sections", + "community": 259, + "norm_label": "3.6.2 project detail sections" + }, + { + "label": "3.6.3 Run detail sections", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L633", + "id": "design_specs_exlab_wizard_frontend_spec_3_6_3_run_detail_sections", + "community": 259, + "norm_label": "3.6.3 run detail sections" + }, + { + "label": "3.6.4 Validation and override summary", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L646", + "id": "design_specs_exlab_wizard_frontend_spec_3_6_4_validation_and_override_summary", + "community": 259, + "norm_label": "3.6.4 validation and override summary" + }, + { + "label": "code:block4 (\u26a0 Unresolved placeholder token \u00b7 Run_)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L654", + "id": "design_specs_exlab_wizard_frontend_spec_codeblock_4", + "community": 259, + "norm_label": "code:block4 (\u26a0 unresolved placeholder token \u00b7 run_)" + }, + { + "label": "3.6.5 Action affordances", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L668", + "id": "design_specs_exlab_wizard_frontend_spec_3_6_5_action_affordances", + "community": 259, + "norm_label": "3.6.5 action affordances" + }, + { + "label": "3.6.6 Empty selection", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L690", + "id": "design_specs_exlab_wizard_frontend_spec_3_6_6_empty_selection", + "community": 259, + "norm_label": "3.6.6 empty selection" + }, + { + "label": "3.7 Keyboard shortcuts", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L698", + "id": "design_specs_exlab_wizard_frontend_spec_3_7_keyboard_shortcuts", + "community": 212, + "norm_label": "3.7 keyboard shortcuts" + }, + { + "label": "4. New Project Wizard", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L723", + "id": "design_specs_exlab_wizard_frontend_spec_4_new_project_wizard", + "community": 179, + "norm_label": "4. new project wizard" + }, + { + "label": "4.1 LIMS Picker Behavior", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L739", + "id": "design_specs_exlab_wizard_frontend_spec_4_1_lims_picker_behavior", + "community": 179, + "norm_label": "4.1 lims picker behavior" + }, + { + "label": "5. New Run Wizard (Experimental and Test Modes)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L750", + "id": "design_specs_exlab_wizard_frontend_spec_5_new_run_wizard_experimental_and_test_modes", + "community": 179, + "norm_label": "5. new run wizard (experimental and test modes)" + }, + { + "label": "5.1 Mode Binding at Launch", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L754", + "id": "design_specs_exlab_wizard_frontend_spec_5_1_mode_binding_at_launch", + "community": 179, + "norm_label": "5.1 mode binding at launch" + }, + { + "label": "5.2 Steps", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L761", + "id": "design_specs_exlab_wizard_frontend_spec_5_2_steps", + "community": 179, + "norm_label": "5.2 steps" + }, + { + "label": "5.3 Visual Differentiation", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L772", + "id": "design_specs_exlab_wizard_frontend_spec_5_3_visual_differentiation", + "community": 179, + "norm_label": "5.3 visual differentiation" + }, + { + "label": "6. README Authoring Step", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L780", + "id": "design_specs_exlab_wizard_frontend_spec_6_readme_authoring_step", + "community": 311, + "norm_label": "6. readme authoring step" + }, + { + "label": "6.1 Layout", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L784", + "id": "design_specs_exlab_wizard_frontend_spec_6_1_layout", + "community": 311, + "norm_label": "6.1 layout" + }, + { + "label": "6.2 Pre-fill Rules", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L796", + "id": "design_specs_exlab_wizard_frontend_spec_6_2_pre_fill_rules", + "community": 311, + "norm_label": "6.2 pre-fill rules" + }, + { + "label": "6.3 Preview Behavior", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L806", + "id": "design_specs_exlab_wizard_frontend_spec_6_3_preview_behavior", + "community": 311, + "norm_label": "6.3 preview behavior" + }, + { + "label": "6.4 Required-Field Error Messaging", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L810", + "id": "design_specs_exlab_wizard_frontend_spec_6_4_required_field_error_messaging", + "community": 311, + "norm_label": "6.4 required-field error messaging" + }, + { + "label": "7. Settings Dialog", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L816", + "id": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "community": 140, + "norm_label": "7. settings dialog" + }, + { + "label": "7.1 Modality", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L822", + "id": "design_specs_exlab_wizard_frontend_spec_7_1_modality", + "community": 140, + "norm_label": "7.1 modality" + }, + { + "label": "7.2 Layout \u2014 sidebar navigation", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L828", + "id": "design_specs_exlab_wizard_frontend_spec_7_2_layout_sidebar_navigation", + "community": 140, + "norm_label": "7.2 layout \u2014 sidebar navigation" + }, + { + "label": "7.3 Save and Discard model", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L839", + "id": "design_specs_exlab_wizard_frontend_spec_7_3_save_and_discard_model", + "community": 140, + "norm_label": "7.3 save and discard model" + }, + { + "label": "7.4 Reusable patterns", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L851", + "id": "design_specs_exlab_wizard_frontend_spec_7_4_reusable_patterns", + "community": 140, + "norm_label": "7.4 reusable patterns" + }, + { + "label": "7.4.1 Credential field", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L853", + "id": "design_specs_exlab_wizard_frontend_spec_7_4_1_credential_field", + "community": 140, + "norm_label": "7.4.1 credential field" + }, + { + "label": "7.4.2 Test-connection feedback panel", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L865", + "id": "design_specs_exlab_wizard_frontend_spec_7_4_2_test_connection_feedback_panel", + "community": 140, + "norm_label": "7.4.2 test-connection feedback panel" + }, + { + "label": "7.5 Paths section", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L877", + "id": "design_specs_exlab_wizard_frontend_spec_7_5_paths_section", + "community": 140, + "norm_label": "7.5 paths section" + }, + { + "label": "7.6 LIMS section", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L889", + "id": "design_specs_exlab_wizard_frontend_spec_7_6_lims_section", + "community": 140, + "norm_label": "7.6 lims section" + }, + { + "label": "7.7 Equipment List section", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L907", + "id": "design_specs_exlab_wizard_frontend_spec_7_7_equipment_list_section", + "community": 140, + "norm_label": "7.7 equipment list section" + }, + { + "label": "7.7.1 List table", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L911", + "id": "design_specs_exlab_wizard_frontend_spec_7_7_1_list_table", + "community": 140, + "norm_label": "7.7.1 list table" + }, + { + "label": "7.7.2 Add / Edit sub-dialog", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L929", + "id": "design_specs_exlab_wizard_frontend_spec_7_7_2_add_edit_sub_dialog", + "community": 140, + "norm_label": "7.7.2 add / edit sub-dialog" + }, + { + "label": "7.7.3 Bandwidth schedule editor", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L962", + "id": "design_specs_exlab_wizard_frontend_spec_7_7_3_bandwidth_schedule_editor", + "community": 140, + "norm_label": "7.7.3 bandwidth schedule editor" + }, + { + "label": "7.8 NAS Cleanup section", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L990", + "id": "design_specs_exlab_wizard_frontend_spec_7_8_nas_cleanup_section", + "community": 140, + "norm_label": "7.8 nas cleanup section" + }, + { + "label": "7.9 Operators section", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1003", + "id": "design_specs_exlab_wizard_frontend_spec_7_9_operators_section", + "community": 140, + "norm_label": "7.9 operators section" + }, + { + "label": "7.10 Validator section", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1009", + "id": "design_specs_exlab_wizard_frontend_spec_7_10_validator_section", + "community": 140, + "norm_label": "7.10 validator section" + }, + { + "label": "7.11 Logging section", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1018", + "id": "design_specs_exlab_wizard_frontend_spec_7_11_logging_section", + "community": 140, + "norm_label": "7.11 logging section" + }, + { + "label": "7.12 Orchestrator Mode section", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1028", + "id": "design_specs_exlab_wizard_frontend_spec_7_12_orchestrator_mode_section", + "community": 140, + "norm_label": "7.12 orchestrator mode section" + }, + { + "label": "7.13 Application section", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1042", + "id": "design_specs_exlab_wizard_frontend_spec_7_13_application_section", + "community": 140, + "norm_label": "7.13 application section" + }, + { + "label": "7.14 Setup-incomplete state", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1054", + "id": "design_specs_exlab_wizard_frontend_spec_7_14_setup_incomplete_state", + "community": 140, + "norm_label": "7.14 setup-incomplete state" + }, + { + "label": "8. Orchestrator Mode Surfaces", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1064", + "id": "design_specs_exlab_wizard_frontend_spec_8_orchestrator_mode_surfaces", + "community": 322, + "norm_label": "8. orchestrator mode surfaces" + }, + { + "label": "8.1 Equipment Selector", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1068", + "id": "design_specs_exlab_wizard_frontend_spec_8_1_equipment_selector", + "community": 322, + "norm_label": "8.1 equipment selector" + }, + { + "label": "8.2 Staging Panel", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1072", + "id": "design_specs_exlab_wizard_frontend_spec_8_2_staging_panel", + "community": 322, + "norm_label": "8.2 staging panel" + }, + { + "label": "8.3 Clear Verified Runs Action", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1085", + "id": "design_specs_exlab_wizard_frontend_spec_8_3_clear_verified_runs_action", + "community": 322, + "norm_label": "8.3 clear verified runs action" + }, + { + "label": "9. Plugin Input Escalation", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1091", + "id": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", + "community": 260, + "norm_label": "9. plugin input escalation" + }, + { + "label": "9.1 Escalation dialog layout", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1095", + "id": "design_specs_exlab_wizard_frontend_spec_9_1_escalation_dialog_layout", + "community": 260, + "norm_label": "9.1 escalation dialog layout" + }, + { + "label": "9.2 Multiple consecutive escalations from one session (sequential)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1112", + "id": "design_specs_exlab_wizard_frontend_spec_9_2_multiple_consecutive_escalations_from_one_session_sequential", + "community": 260, + "norm_label": "9.2 multiple consecutive escalations from one session (sequential)" + }, + { + "label": "9.3 Mid-plugin-pass progress (per-plugin sub-progress)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1120", + "id": "design_specs_exlab_wizard_frontend_spec_9_3_mid_plugin_pass_progress_per_plugin_sub_progress", + "community": 260, + "norm_label": "9.3 mid-plugin-pass progress (per-plugin sub-progress)" + }, + { + "label": "code:block5 (Running plugins )", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1124", + "id": "design_specs_exlab_wizard_frontend_spec_codeblock_5", + "community": 260, + "norm_label": "code:block5 (running plugins )" + }, + { + "label": "9.4 Cancel during escalation -- confirmation dialog", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1139", + "id": "design_specs_exlab_wizard_frontend_spec_9_4_cancel_during_escalation_confirmation_dialog", + "community": 260, + "norm_label": "9.4 cancel during escalation -- confirmation dialog" + }, + { + "label": "9.5 Disconnect and resume -- the in-flight operations panel", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1154", + "id": "design_specs_exlab_wizard_frontend_spec_9_5_disconnect_and_resume_the_in_flight_operations_panel", + "community": 260, + "norm_label": "9.5 disconnect and resume -- the in-flight operations panel" + }, + { + "label": "9.6 Concurrent suspended sessions", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1181", + "id": "design_specs_exlab_wizard_frontend_spec_9_6_concurrent_suspended_sessions", + "community": 260, + "norm_label": "9.6 concurrent suspended sessions" + }, + { + "label": "10. Error, Progress, and Summary Presentation", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1192", + "id": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", + "community": 232, + "norm_label": "10. error, progress, and summary presentation" + }, + { + "label": "10.1 Progress", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1194", + "id": "design_specs_exlab_wizard_frontend_spec_10_1_progress", + "community": 232, + "norm_label": "10.1 progress" + }, + { + "label": "10.2 Errors", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1198", + "id": "design_specs_exlab_wizard_frontend_spec_10_2_errors", + "community": 232, + "norm_label": "10.2 errors" + }, + { + "label": "10.3 Success Summary", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1206", + "id": "design_specs_exlab_wizard_frontend_spec_10_3_success_summary", + "community": 232, + "norm_label": "10.3 success summary" + }, + { + "label": "10.4 Sync-Blocked Banner", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1216", + "id": "design_specs_exlab_wizard_frontend_spec_10_4_sync_blocked_banner", + "community": 232, + "norm_label": "10.4 sync-blocked banner" + }, + { + "label": "10.5 Recovery flows", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1226", + "id": "design_specs_exlab_wizard_frontend_spec_10_5_recovery_flows", + "community": 232, + "norm_label": "10.5 recovery flows" + }, + { + "label": "10.5.1 NAS sync failure recovery", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1230", + "id": "design_specs_exlab_wizard_frontend_spec_10_5_1_nas_sync_failure_recovery", + "community": 232, + "norm_label": "10.5.1 nas sync failure recovery" + }, + { + "label": "10.5.2 LIMS unreachability mid-wizard", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1252", + "id": "design_specs_exlab_wizard_frontend_spec_10_5_2_lims_unreachability_mid_wizard", + "community": 232, + "norm_label": "10.5.2 lims unreachability mid-wizard" + }, + { + "label": "10.5.3 Crash and orphan recovery", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1270", + "id": "design_specs_exlab_wizard_frontend_spec_10_5_3_crash_and_orphan_recovery", + "community": 232, + "norm_label": "10.5.3 crash and orphan recovery" + }, + { + "label": "10.5.4 Pre-flight checks before creation", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1287", + "id": "design_specs_exlab_wizard_frontend_spec_10_5_4_pre_flight_checks_before_creation", + "community": 232, + "norm_label": "10.5.4 pre-flight checks before creation" + }, + { + "label": "11. Problems Tab", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1301", + "id": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", + "community": 261, + "norm_label": "11. problems tab" + }, + { + "label": "11.1 Layout", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1305", + "id": "design_specs_exlab_wizard_frontend_spec_11_1_layout", + "community": 261, + "norm_label": "11.1 layout" + }, + { + "label": "11.2 Severity Tier Visual Treatment", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1330", + "id": "design_specs_exlab_wizard_frontend_spec_11_2_severity_tier_visual_treatment", + "community": 261, + "norm_label": "11.2 severity tier visual treatment" + }, + { + "label": "11.3 Per-Row Actions", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1336", + "id": "design_specs_exlab_wizard_frontend_spec_11_3_per_row_actions", + "community": 261, + "norm_label": "11.3 per-row actions" + }, + { + "label": "11.4 Empty State", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1347", + "id": "design_specs_exlab_wizard_frontend_spec_11_4_empty_state", + "community": 261, + "norm_label": "11.4 empty state" + }, + { + "label": "11.4.1 New-finding surfacing during the session", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1355", + "id": "design_specs_exlab_wizard_frontend_spec_11_4_1_new_finding_surfacing_during_the_session", + "community": 261, + "norm_label": "11.4.1 new-finding surfacing during the session" + }, + { + "label": "11.5 Override-and-Allow-Sync Dialog", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1365", + "id": "design_specs_exlab_wizard_frontend_spec_11_5_override_and_allow_sync_dialog", + "community": 261, + "norm_label": "11.5 override-and-allow-sync dialog" + }, + { + "label": "11.6 Cross-Surface Links", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1381", + "id": "design_specs_exlab_wizard_frontend_spec_11_6_cross_surface_links", + "community": 261, + "norm_label": "11.6 cross-surface links" + }, + { + "label": "12. Widget Mappings", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1394", + "id": "design_specs_exlab_wizard_frontend_spec_12_widget_mappings", + "community": 179, + "norm_label": "12. widget mappings" + }, + { + "label": "12.1 Template Variable Form (from `copier.yml` questions)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1398", + "id": "design_specs_exlab_wizard_frontend_spec_12_1_template_variable_form_from_copier_yml_questions", + "community": 179, + "norm_label": "12.1 template variable form (from `copier.yml` questions)" + }, + { + "label": "12.2 README Form Fields", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1408", + "id": "design_specs_exlab_wizard_frontend_spec_12_2_readme_form_fields", + "community": 179, + "norm_label": "12.2 readme form fields" + }, + { + "label": "12.3 Required-Field Indication", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1418", + "id": "design_specs_exlab_wizard_frontend_spec_12_3_required_field_indication", + "community": 179, + "norm_label": "12.3 required-field indication" + }, + { + "label": "13. Open Questions", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1426", + "id": "design_specs_exlab_wizard_frontend_spec_13_open_questions", + "community": 179, + "norm_label": "13. open questions" + }, + { + "label": "ExLab-Wizard_Design_Spec.md", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L1", + "id": "design_specs_exlab_wizard_design_spec_md", + "community": 144, + "norm_label": "exlab-wizard_design_spec.md" + }, + { + "label": "ExLab-Wizard: Design Specification", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L2", + "id": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "community": 144, + "norm_label": "exlab-wizard: design specification" + }, + { + "label": "Table of Contents", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L10", + "id": "design_specs_exlab_wizard_design_spec_table_of_contents", + "community": 144, + "norm_label": "table of contents" + }, + { + "label": "1. Purpose and Goals", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L31", + "id": "design_specs_exlab_wizard_design_spec_1_purpose_and_goals", + "community": 144, + "norm_label": "1. purpose and goals" + }, + { + "label": "2. User Capabilities (Reference)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L39", + "id": "design_specs_exlab_wizard_design_spec_2_user_capabilities_reference", + "community": 144, + "norm_label": "2. user capabilities (reference)" + }, + { + "label": "3. Directory Structure Convention", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L63", + "id": "design_specs_exlab_wizard_design_spec_3_directory_structure_convention", + "community": 144, + "norm_label": "3. directory structure convention" + }, + { + "label": "4. Backend Architecture", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L71", + "id": "design_specs_exlab_wizard_design_spec_4_backend_architecture", + "community": 144, + "norm_label": "4. backend architecture" + }, + { + "label": "5. Template Format", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L79", + "id": "design_specs_exlab_wizard_design_spec_5_template_format", + "community": 144, + "norm_label": "5. template format" + }, + { + "label": "6. Plugin System", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L87", + "id": "design_specs_exlab_wizard_design_spec_6_plugin_system", + "community": 144, + "norm_label": "6. plugin system" + }, + { + "label": "7. Sync and Database Integration", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L95", + "id": "design_specs_exlab_wizard_design_spec_7_sync_and_database_integration", + "community": 144, + "norm_label": "7. sync and database integration" + }, + { + "label": "8. Error Handling Principles", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L103", + "id": "design_specs_exlab_wizard_design_spec_8_error_handling_principles", + "community": 144, + "norm_label": "8. error handling principles" + }, + { + "label": "9. Configuration File", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L111", + "id": "design_specs_exlab_wizard_design_spec_9_configuration_file", + "community": 144, + "norm_label": "9. configuration file" + }, + { + "label": "10. README Generation", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L119", + "id": "design_specs_exlab_wizard_design_spec_10_readme_generation", + "community": 144, + "norm_label": "10. readme generation" + }, + { + "label": "11. `.exlab-wizard` Cache Folders", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L127", + "id": "design_specs_exlab_wizard_design_spec_11_exlab_wizard_cache_folders", + "community": 144, + "norm_label": "11. `.exlab-wizard` cache folders" + }, + { + "label": "12. Orchestrator Mode (Multi-Equipment Workstations)", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L135", + "id": "design_specs_exlab_wizard_design_spec_12_orchestrator_mode_multi_equipment_workstations", + "community": 144, + "norm_label": "12. orchestrator mode (multi-equipment workstations)" + }, + { + "label": "13. Equipment-to-Orchestrator Data Flow", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L143", + "id": "design_specs_exlab_wizard_design_spec_13_equipment_to_orchestrator_data_flow", + "community": 144, + "norm_label": "13. equipment-to-orchestrator data flow" + }, + { + "label": "15. Distribution and Installation", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L151", + "id": "design_specs_exlab_wizard_design_spec_15_distribution_and_installation", + "community": 144, + "norm_label": "15. distribution and installation" + }, + { + "label": "16. Logging Architecture", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L159", + "id": "design_specs_exlab_wizard_design_spec_16_logging_architecture", + "community": 144, + "norm_label": "16. logging architecture" + }, + { + "label": "14. Open Questions", + "file_type": "document", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L167", + "id": "design_specs_exlab_wizard_design_spec_14_open_questions", + "community": 144, + "norm_label": "14. open questions" + }, + { + "label": "IMPLEMENTATION_PLAN.md", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L1", + "id": "design_specs_implementation_plan_md", + "community": 87, + "norm_label": "implementation_plan.md" + }, + { + "label": "ExLab-Wizard Implementation Plan", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L1", + "id": "design_specs_implementation_plan_exlab_wizard_implementation_plan", + "community": 87, + "norm_label": "exlab-wizard implementation plan" + }, + { + "label": "Context", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L3", + "id": "design_specs_implementation_plan_context", + "community": 87, + "norm_label": "context" + }, + { + "label": "Goals", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L39", + "id": "design_specs_implementation_plan_goals", + "community": 87, + "norm_label": "goals" + }, + { + "label": "First Action (before phase 1)", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L57", + "id": "design_specs_implementation_plan_first_action_before_phase_1", + "community": 87, + "norm_label": "first action (before phase 1)" + }, + { + "label": "Subagent Strategy (used at every phase)", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L66", + "id": "design_specs_implementation_plan_subagent_strategy_used_at_every_phase", + "community": 87, + "norm_label": "subagent strategy (used at every phase)" + }, + { + "label": "Per-Phase Definition of Done", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L88", + "id": "design_specs_implementation_plan_per_phase_definition_of_done", + "community": 87, + "norm_label": "per-phase definition of done" + }, + { + "label": "code:block1 (\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500)", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L90", + "id": "design_specs_implementation_plan_codeblock_1", + "community": 87, + "norm_label": "code:block1 (\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500)" + }, + { + "label": "Test Plan (merged with spec \u00a74.10 + \u00a711.8 + Frontend \u00a71)", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L133", + "id": "design_specs_implementation_plan_test_plan_merged_with_spec_4_10_11_8_frontend_1", + "community": 87, + "norm_label": "test plan (merged with spec \u00a74.10 + \u00a711.8 + frontend \u00a71)" + }, + { + "label": "Phase Sequence", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L199", + "id": "design_specs_implementation_plan_phase_sequence", + "community": 87, + "norm_label": "phase sequence" + }, + { + "label": "Phase 1: Project scaffolding & constants foundations", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L215", + "id": "design_specs_implementation_plan_phase_1_project_scaffolding_constants_foundations", + "community": 87, + "norm_label": "phase 1: project scaffolding & constants foundations" + }, + { + "label": "Phase 2: Configuration system & paths", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L254", + "id": "design_specs_implementation_plan_phase_2_configuration_system_paths", + "community": 87, + "norm_label": "phase 2: configuration system & paths" + }, + { + "label": "Phase 3: Logging package + cache writers + schema models", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L295", + "id": "design_specs_implementation_plan_phase_3_logging_package_cache_writers_schema_models", + "community": 87, + "norm_label": "phase 3: logging package + cache writers + schema models" + }, + { + "label": "Phase 4: Validator engine & rules", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L335", + "id": "design_specs_implementation_plan_phase_4_validator_engine_rules", + "community": 87, + "norm_label": "phase 4: validator engine & rules" + }, + { + "label": "Phase 5: Template engine (Copier)", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L375", + "id": "design_specs_implementation_plan_phase_5_template_engine_copier", + "community": 87, + "norm_label": "phase 5: template engine (copier)" + }, + { + "label": "Phase 6: Plugin system (host + worker + isolation)", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L406", + "id": "design_specs_implementation_plan_phase_6_plugin_system_host_worker_isolation", + "community": 87, + "norm_label": "phase 6: plugin system (host + worker + isolation)" + }, + { + "label": "Phase 7: Creation controller & state machine", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L459", + "id": "design_specs_implementation_plan_phase_7_creation_controller_state_machine", + "community": 87, + "norm_label": "phase 7: creation controller & state machine" + }, + { + "label": "Phase 8: README generator", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L496", + "id": "design_specs_implementation_plan_phase_8_readme_generator", + "community": 87, + "norm_label": "phase 8: readme generator" + }, + { + "label": "Phase 9: LIMS client & cache + keyring", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L520", + "id": "design_specs_implementation_plan_phase_9_lims_client_cache_keyring", + "community": 87, + "norm_label": "phase 9: lims client & cache + keyring" + }, + { + "label": "Phase 10: NAS sync client", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L558", + "id": "design_specs_implementation_plan_phase_10_nas_sync_client", + "community": 87, + "norm_label": "phase 10: nas sync client" + }, + { + "label": "Phase 11: FastAPI app + routers + WebSocket + setup gate", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L601", + "id": "design_specs_implementation_plan_phase_11_fastapi_app_routers_websocket_setup_gate", + "community": 87, + "norm_label": "phase 11: fastapi app + routers + websocket + setup gate" + }, + { + "label": "Phase 12: NiceGUI frontend (design tokens, pages, components)", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L648", + "id": "design_specs_implementation_plan_phase_12_nicegui_frontend_design_tokens_pages_components", + "community": 87, + "norm_label": "phase 12: nicegui frontend (design tokens, pages, components)" + }, + { + "label": "Phase 13: Tray + window processes", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L726", + "id": "design_specs_implementation_plan_phase_13_tray_window_processes", + "community": 87, + "norm_label": "phase 13: tray + window processes" + }, + { + "label": "Phase 14: Orchestrator mode + ingest", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L765", + "id": "design_specs_implementation_plan_phase_14_orchestrator_mode_ingest", + "community": 87, + "norm_label": "phase 14: orchestrator mode + ingest" + }, + { + "label": "Phase 15: Distribution / PyInstaller bundling", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L790", + "id": "design_specs_implementation_plan_phase_15_distribution_pyinstaller_bundling", + "community": 87, + "norm_label": "phase 15: distribution / pyinstaller bundling" + }, + { + "label": "Phase 16: E2E hardening pass", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L818", + "id": "design_specs_implementation_plan_phase_16_e2e_hardening_pass", + "community": 87, + "norm_label": "phase 16: e2e hardening pass" + }, + { + "label": "Critical Files (Reference)", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L839", + "id": "design_specs_implementation_plan_critical_files_reference", + "community": 87, + "norm_label": "critical files (reference)" + }, + { + "label": "Verification (final state)", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L862", + "id": "design_specs_implementation_plan_verification_final_state", + "community": 87, + "norm_label": "verification (final state)" + }, + { + "label": "Risks & Mitigations", + "file_type": "document", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L885", + "id": "design_specs_implementation_plan_risks_mitigations", + "community": 87, + "norm_label": "risks & mitigations" + }, + { + "label": "07_Sync_and_Database_Integration.md", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L1", + "id": "design_specs_design_spec_sections_07_sync_and_database_integration_md", + "community": 39, + "norm_label": "07_sync_and_database_integration.md" + }, + { + "label": "7. Sync and Database Integration", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L1", + "id": "design_spec_sections_07_sync_and_database_integration_7_sync_and_database_integration", + "community": 39, + "norm_label": "7. sync and database integration" + }, + { + "label": "7.1 NAS Sync (Internal Module)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L7", + "id": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", + "community": 39, + "norm_label": "7.1 nas sync (internal module)" + }, + { + "label": "7.1.1 Component model", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L13", + "id": "design_spec_sections_07_sync_and_database_integration_7_1_1_component_model", + "community": 39, + "norm_label": "7.1.1 component model" + }, + { + "label": "code:block1 (\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L17", + "id": "design_spec_sections_07_sync_and_database_integration_codeblock_1", + "community": 39, + "norm_label": "code:block1 (\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500)" + }, + { + "label": "7.1.2 Job lifecycle", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L41", + "id": "design_spec_sections_07_sync_and_database_integration_7_1_2_job_lifecycle", + "community": 39, + "norm_label": "7.1.2 job lifecycle" + }, + { + "label": "code:block2 (QUEUED \u2192 RUNNING \u2192 AWAITING_VERIFY \u2192 VERIFIED \u2192 CLEANUP_ELIG)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L45", + "id": "design_spec_sections_07_sync_and_database_integration_codeblock_2", + "community": 39, + "norm_label": "code:block2 (queued \u2192 running \u2192 awaiting_verify \u2192 verified \u2192 cleanup_elig)" + }, + { + "label": "7.1.3 Transport drivers", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L63", + "id": "design_spec_sections_07_sync_and_database_integration_7_1_3_transport_drivers", + "community": 39, + "norm_label": "7.1.3 transport drivers" + }, + { + "label": "7.1.4 Hash verification", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L73", + "id": "design_spec_sections_07_sync_and_database_integration_7_1_4_hash_verification", + "community": 39, + "norm_label": "7.1.4 hash verification" + }, + { + "label": "7.1.5 Retry policy", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L84", + "id": "design_spec_sections_07_sync_and_database_integration_7_1_5_retry_policy", + "community": 39, + "norm_label": "7.1.5 retry policy" + }, + { + "label": "7.1.6 Cleanup safety interlocks", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L95", + "id": "design_spec_sections_07_sync_and_database_integration_7_1_6_cleanup_safety_interlocks", + "community": 39, + "norm_label": "7.1.6 cleanup safety interlocks" + }, + { + "label": "7.1.7 Bandwidth limiting", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L108", + "id": "design_spec_sections_07_sync_and_database_integration_7_1_7_bandwidth_limiting", + "community": 39, + "norm_label": "7.1.7 bandwidth limiting" + }, + { + "label": "code:yaml (equipment:)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L112", + "id": "design_spec_sections_07_sync_and_database_integration_codeblock_3", + "community": 39, + "norm_label": "code:yaml (equipment:)" + }, + { + "label": "7.1.8 Credential storage", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L128", + "id": "design_spec_sections_07_sync_and_database_integration_7_1_8_credential_storage", + "community": 39, + "norm_label": "7.1.8 credential storage" + }, + { + "label": "7.1.9 What NASSync does not do", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L132", + "id": "design_spec_sections_07_sync_and_database_integration_7_1_9_what_nassync_does_not_do", + "community": 39, + "norm_label": "7.1.9 what nassync does not do" + }, + { + "label": "7.1.10 Cache file syncing and metadata-only retention on cleanup", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L139", + "id": "design_spec_sections_07_sync_and_database_integration_7_1_10_cache_file_syncing_and_metadata_only_retention_on_cleanup", + "community": 39, + "norm_label": "7.1.10 cache file syncing and metadata-only retention on cleanup" + }, + { + "label": "7.2 LIMS Integration", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L149", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", + "community": 39, + "norm_label": "7.2 lims integration" + }, + { + "label": "7.2.0 Empirical facts about the LIMS", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L155", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_0_empirical_facts_about_the_lims", + "community": 39, + "norm_label": "7.2.0 empirical facts about the lims" + }, + { + "label": "7.2.1 Project mapping (Mapping B, committed)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L166", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_1_project_mapping_mapping_b_committed", + "community": 39, + "norm_label": "7.2.1 project mapping (mapping b, committed)" + }, + { + "label": "7.2.2 Run-level LIMS integration (deferred to v1.x)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L176", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_2_run_level_lims_integration_deferred_to_v1_x", + "community": 39, + "norm_label": "7.2.2 run-level lims integration (deferred to v1.x)" + }, + { + "label": "7.2.3 `LIMSClient` interface (v1)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L184", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_3_limsclient_interface_v1", + "community": 39, + "norm_label": "7.2.3 `limsclient` interface (v1)" + }, + { + "label": "code:python (class LIMSClient:)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L186", + "id": "design_spec_sections_07_sync_and_database_integration_codeblock_4", + "community": 39, + "norm_label": "code:python (class limsclient:)" + }, + { + "label": "code:python (@dataclass(frozen=True))", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L199", + "id": "design_spec_sections_07_sync_and_database_integration_codeblock_5", + "community": 39, + "norm_label": "code:python (@dataclass(frozen=true))" + }, + { + "label": "code:python (@dataclass(frozen=True))", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L215", + "id": "design_spec_sections_07_sync_and_database_integration_codeblock_6", + "community": 39, + "norm_label": "code:python (@dataclass(frozen=true))" + }, + { + "label": "7.2.4 Project cache and offline behavior", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L229", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_4_project_cache_and_offline_behavior", + "community": 39, + "norm_label": "7.2.4 project cache and offline behavior" + }, + { + "label": "7.2.5 Authentication (cookie session)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L241", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_5_authentication_cookie_session", + "community": 39, + "norm_label": "7.2.5 authentication (cookie session)" + }, + { + "label": "7.2.6 Asks for the LIMS team (deferred)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L252", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_6_asks_for_the_lims_team_deferred", + "community": 39, + "norm_label": "7.2.6 asks for the lims team (deferred)" + }, + { + "label": "7.2.7 v1.x run-level record (specification target)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L263", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_7_v1_x_run_level_record_specification_target", + "community": 39, + "norm_label": "7.2.7 v1.x run-level record (specification target)" + }, + { + "label": "7.2.8 What ExLab-Wizard does not write to LIMS in v1", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L293", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_8_what_exlab_wizard_does_not_write_to_lims_in_v1", + "community": 39, + "norm_label": "7.2.8 what exlab-wizard does not write to lims in v1" + }, + { + "label": "7.2.9 Offline Catalogue (NAS-shared LIMS project list)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L304", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", + "community": 39, + "norm_label": "7.2.9 offline catalogue (nas-shared lims project list)" + }, + { + "label": "7.2.9.1 File location and format", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L310", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_9_1_file_location_and_format", + "community": 39, + "norm_label": "7.2.9.1 file location and format" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L316", + "id": "design_spec_sections_07_sync_and_database_integration_codeblock_7", + "community": 39, + "norm_label": "code:json ({)" + }, + { + "label": "7.2.9.2 Producer behavior", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L338", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_9_2_producer_behavior", + "community": 39, + "norm_label": "7.2.9.2 producer behavior" + }, + { + "label": "7.2.9.3 Consumer behavior", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L350", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_9_3_consumer_behavior", + "community": 39, + "norm_label": "7.2.9.3 consumer behavior" + }, + { + "label": "7.2.9.4 Failure modes", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L369", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_9_4_failure_modes", + "community": 39, + "norm_label": "7.2.9.4 failure modes" + }, + { + "label": "7.2.9.5 Security and trust", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L380", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_9_5_security_and_trust", + "community": 39, + "norm_label": "7.2.9.5 security and trust" + }, + { + "label": "7.2.9.6 Out of scope for v1", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L386", + "id": "design_spec_sections_07_sync_and_database_integration_7_2_9_6_out_of_scope_for_v1", + "community": 39, + "norm_label": "7.2.9.6 out of scope for v1" + }, + { + "label": "7.3 Pre-Sync Gate", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L393", + "id": "design_spec_sections_07_sync_and_database_integration_7_3_pre_sync_gate", + "community": 39, + "norm_label": "7.3 pre-sync gate" + }, + { + "label": "7.4 Credential Storage (OS Keyring)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L409", + "id": "design_spec_sections_07_sync_and_database_integration_7_4_credential_storage_os_keyring", + "community": 39, + "norm_label": "7.4 credential storage (os keyring)" + }, + { + "label": "7.4.1 Keyring entry naming convention", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L421", + "id": "design_spec_sections_07_sync_and_database_integration_7_4_1_keyring_entry_naming_convention", + "community": 39, + "norm_label": "7.4.1 keyring entry naming convention" + }, + { + "label": "7.4.2 Settings UI for credentials", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L435", + "id": "design_spec_sections_07_sync_and_database_integration_7_4_2_settings_ui_for_credentials", + "community": 39, + "norm_label": "7.4.2 settings ui for credentials" + }, + { + "label": "7.4.3 Credential lifecycle", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L439", + "id": "design_spec_sections_07_sync_and_database_integration_7_4_3_credential_lifecycle", + "community": 39, + "norm_label": "7.4.3 credential lifecycle" + }, + { + "label": "7.4.4 Fallback when no keyring backend is available", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L447", + "id": "design_spec_sections_07_sync_and_database_integration_7_4_4_fallback_when_no_keyring_backend_is_available", + "community": 39, + "norm_label": "7.4.4 fallback when no keyring backend is available" + }, + { + "label": "03_Directory_Structure_Convention.md", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/03_Directory_Structure_Convention.md", + "source_location": "L1", + "id": "design_specs_design_spec_sections_03_directory_structure_convention_md", + "community": 300, + "norm_label": "03_directory_structure_convention.md" + }, + { + "label": "3. Directory Structure Convention", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/03_Directory_Structure_Convention.md", + "source_location": "L1", + "id": "design_spec_sections_03_directory_structure_convention_3_directory_structure_convention", + "community": 300, + "norm_label": "3. directory structure convention" + }, + { + "label": "code:block1 (/)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/03_Directory_Structure_Convention.md", + "source_location": "L7", + "id": "design_spec_sections_03_directory_structure_convention_codeblock_1", + "community": 300, + "norm_label": "code:block1 (/)" + }, + { + "label": "code:block2 (/data/lab/CONFOCAL_01/UCR-000-I-D_WHEELDON/Runs/Run_2026-04-)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/03_Directory_Structure_Convention.md", + "source_location": "L20", + "id": "design_spec_sections_03_directory_structure_convention_codeblock_2", + "community": 300, + "norm_label": "code:block2 (/data/lab/confocal_01/ucr-000-i-d_wheeldon/runs/run_2026-04-)" + }, + { + "label": "3.1 Equipment-ID format", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/03_Directory_Structure_Convention.md", + "source_location": "L28", + "id": "design_spec_sections_03_directory_structure_convention_3_1_equipment_id_format", + "community": 300, + "norm_label": "3.1 equipment-id format" + }, + { + "label": "3.2 Project-folder name", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/03_Directory_Structure_Convention.md", + "source_location": "L41", + "id": "design_spec_sections_03_directory_structure_convention_3_2_project_folder_name", + "community": 300, + "norm_label": "3.2 project-folder name" + }, + { + "label": "12_Orchestrator_Mode.md", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/12_Orchestrator_Mode.md", + "source_location": "L1", + "id": "design_specs_design_spec_sections_12_orchestrator_mode_md", + "community": 301, + "norm_label": "12_orchestrator_mode.md" + }, + { + "label": "12. Orchestrator Mode (Multi-Equipment Workstations)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/12_Orchestrator_Mode.md", + "source_location": "L1", + "id": "design_spec_sections_12_orchestrator_mode_12_orchestrator_mode_multi_equipment_workstations", + "community": 301, + "norm_label": "12. orchestrator mode (multi-equipment workstations)" + }, + { + "label": "12.1 What Changes in Orchestrator Mode", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/12_Orchestrator_Mode.md", + "source_location": "L7", + "id": "design_spec_sections_12_orchestrator_mode_12_1_what_changes_in_orchestrator_mode", + "community": 301, + "norm_label": "12.1 what changes in orchestrator mode" + }, + { + "label": "12.2 Configuration", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/12_Orchestrator_Mode.md", + "source_location": "L20", + "id": "design_spec_sections_12_orchestrator_mode_12_2_configuration", + "community": 301, + "norm_label": "12.2 configuration" + }, + { + "label": "12.3 Concurrent Run Handling", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/12_Orchestrator_Mode.md", + "source_location": "L24", + "id": "design_spec_sections_12_orchestrator_mode_12_3_concurrent_run_handling", + "community": 301, + "norm_label": "12.3 concurrent run handling" + }, + { + "label": "12.4 Logging and DB Changes", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/12_Orchestrator_Mode.md", + "source_location": "L28", + "id": "design_spec_sections_12_orchestrator_mode_12_4_logging_and_db_changes", + "community": 301, + "norm_label": "12.4 logging and db changes" + }, + { + "label": "06_Plugin_System.md", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L1", + "id": "design_specs_design_spec_sections_06_plugin_system_md", + "community": 195, + "norm_label": "06_plugin_system.md" + }, + { + "label": "6. Plugin System", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L1", + "id": "design_spec_sections_06_plugin_system_6_plugin_system", + "community": 195, + "norm_label": "6. plugin system" + }, + { + "label": "6.0 Where Plugins Sit in the Pipeline", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L9", + "id": "design_spec_sections_06_plugin_system_6_0_where_plugins_sit_in_the_pipeline", + "community": 195, + "norm_label": "6.0 where plugins sit in the pipeline" + }, + { + "label": "code:block1 (\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L11", + "id": "design_spec_sections_06_plugin_system_codeblock_1", + "community": 195, + "norm_label": "code:block1 (\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500)" + }, + { + "label": "6.1 Plugin Contract", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L52", + "id": "design_spec_sections_06_plugin_system_6_1_plugin_contract", + "community": 234, + "norm_label": "6.1 plugin contract" + }, + { + "label": "6.1.1 Package layout", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L56", + "id": "design_spec_sections_06_plugin_system_6_1_1_package_layout", + "community": 234, + "norm_label": "6.1.1 package layout" + }, + { + "label": "code:block2 (/)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L58", + "id": "design_spec_sections_06_plugin_system_codeblock_2", + "community": 234, + "norm_label": "code:block2 (/)" + }, + { + "label": "6.1.2 `manifest.yml` schema", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L70", + "id": "design_spec_sections_06_plugin_system_6_1_2_manifest_yml_schema", + "community": 234, + "norm_label": "6.1.2 `manifest.yml` schema" + }, + { + "label": "code:yaml (# Required identity fields)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L74", + "id": "design_spec_sections_06_plugin_system_codeblock_3", + "community": 234, + "norm_label": "code:yaml (# required identity fields)" + }, + { + "label": "6.1.3 The `Plugin` base class", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L104", + "id": "design_spec_sections_06_plugin_system_6_1_3_the_plugin_base_class", + "community": 234, + "norm_label": "6.1.3 the `plugin` base class" + }, + { + "label": "code:python (# exlab_wizard/plugins/__init__.py -- shipped with the app)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L106", + "id": "design_spec_sections_06_plugin_system_codeblock_4", + "community": 234, + "norm_label": "code:python (# exlab_wizard/plugins/__init__.py -- shipped with the app)" + }, + { + "label": "6.1.5 What plugins must not touch", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L254", + "id": "design_spec_sections_06_plugin_system_6_1_5_what_plugins_must_not_touch", + "community": 234, + "norm_label": "6.1.5 what plugins must not touch" + }, + { + "label": "6.1.4 The `PluginContext` object", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L266", + "id": "design_spec_sections_06_plugin_system_6_1_4_the_plugincontext_object", + "community": 234, + "norm_label": "6.1.4 the `plugincontext` object" + }, + { + "label": "code:python (@dataclass(frozen=True))", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L270", + "id": "design_spec_sections_06_plugin_system_codeblock_5", + "community": 234, + "norm_label": "code:python (@dataclass(frozen=true))" + }, + { + "label": "6.2 Plugin Registry", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L287", + "id": "design_spec_sections_06_plugin_system_6_2_plugin_registry", + "community": 278, + "norm_label": "6.2 plugin registry" + }, + { + "label": "6.2.1 Discovery", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L289", + "id": "design_spec_sections_06_plugin_system_6_2_1_discovery", + "community": 278, + "norm_label": "6.2.1 discovery" + }, + { + "label": "6.2.2 Resolution per creation session", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L308", + "id": "design_spec_sections_06_plugin_system_6_2_2_resolution_per_creation_session", + "community": 278, + "norm_label": "6.2.2 resolution per creation session" + }, + { + "label": "6.2.3 Order control via `_exlab_plugins`", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L319", + "id": "design_spec_sections_06_plugin_system_6_2_3_order_control_via_exlab_plugins", + "community": 278, + "norm_label": "6.2.3 order control via `_exlab_plugins`" + }, + { + "label": "code:yaml (_exlab_plugins:)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L323", + "id": "design_spec_sections_06_plugin_system_codeblock_6", + "community": 278, + "norm_label": "code:yaml (_exlab_plugins:)" + }, + { + "label": "6.2.4 What gets recorded in `creation.json`", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L334", + "id": "design_spec_sections_06_plugin_system_6_2_4_what_gets_recorded_in_creation_json", + "community": 278, + "norm_label": "6.2.4 what gets recorded in `creation.json`" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L338", + "id": "design_spec_sections_06_plugin_system_codeblock_7", + "community": 278, + "norm_label": "code:json ({)" + }, + { + "label": "6.3 Subprocess Isolation", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L354", + "id": "design_spec_sections_06_plugin_system_6_3_subprocess_isolation", + "community": 240, + "norm_label": "6.3 subprocess isolation" + }, + { + "label": "6.3.1 Process model", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L358", + "id": "design_spec_sections_06_plugin_system_6_3_1_process_model", + "community": 240, + "norm_label": "6.3.1 process model" + }, + { + "label": "6.3.2 IPC envelope", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L370", + "id": "design_spec_sections_06_plugin_system_6_3_2_ipc_envelope", + "community": 240, + "norm_label": "6.3.2 ipc envelope" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L376", + "id": "design_spec_sections_06_plugin_system_codeblock_8", + "community": 240, + "norm_label": "code:json ({)" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L387", + "id": "design_spec_sections_06_plugin_system_codeblock_9", + "community": 240, + "norm_label": "code:json ({)" + }, + { + "label": "6.3.3 Resource limits", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L401", + "id": "design_spec_sections_06_plugin_system_6_3_3_resource_limits", + "community": 240, + "norm_label": "6.3.3 resource limits" + }, + { + "label": "6.3.4 Failure handling", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L422", + "id": "design_spec_sections_06_plugin_system_6_3_4_failure_handling", + "community": 240, + "norm_label": "6.3.4 failure handling" + }, + { + "label": "6.3.6 Validation-worker subprocess (mode = `validate`)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L439", + "id": "design_spec_sections_06_plugin_system_6_3_6_validation_worker_subprocess_mode_validate", + "community": 240, + "norm_label": "6.3.6 validation-worker subprocess (mode = `validate`)" + }, + { + "label": "6.3.5 Security model: what isolation does and does not solve", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L460", + "id": "design_spec_sections_06_plugin_system_6_3_5_security_model_what_isolation_does_and_does_not_solve", + "community": 240, + "norm_label": "6.3.5 security model: what isolation does and does not solve" + }, + { + "label": "6.4 Plugin Input Escalation (`PluginInputRequired`)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L487", + "id": "design_spec_sections_06_plugin_system_6_4_plugin_input_escalation_plugininputrequired", + "community": 195, + "norm_label": "6.4 plugin input escalation (`plugininputrequired`)" + }, + { + "label": "6.4.1 Suspend / resume flow", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L494", + "id": "design_spec_sections_06_plugin_system_6_4_1_suspend_resume_flow", + "community": 195, + "norm_label": "6.4.1 suspend / resume flow" + }, + { + "label": "6.4.2 Resume contract (what the plugin author must guarantee)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L504", + "id": "design_spec_sections_06_plugin_system_6_4_2_resume_contract_what_the_plugin_author_must_guarantee", + "community": 195, + "norm_label": "6.4.2 resume contract (what the plugin author must guarantee)" + }, + { + "label": "6.5 Base Plugin Scaffold (`hello_plugin`)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L517", + "id": "design_spec_sections_06_plugin_system_6_5_base_plugin_scaffold_hello_plugin", + "community": 233, + "norm_label": "6.5 base plugin scaffold (`hello_plugin`)" + }, + { + "label": "6.5.1 Directory", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L521", + "id": "design_spec_sections_06_plugin_system_6_5_1_directory", + "community": 233, + "norm_label": "6.5.1 directory" + }, + { + "label": "code:block10 (hello_plugin/)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L523", + "id": "design_spec_sections_06_plugin_system_codeblock_10", + "community": 233, + "norm_label": "code:block10 (hello_plugin/)" + }, + { + "label": "6.5.2 `__init__.py`", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L531", + "id": "design_spec_sections_06_plugin_system_6_5_2_init_py", + "community": 233, + "norm_label": "6.5.2 `__init__.py`" + }, + { + "label": "code:python (\"\"\"hello_plugin -- minimal example plugin for ExLab-Wizard.)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L533", + "id": "design_spec_sections_06_plugin_system_codeblock_11", + "community": 233, + "norm_label": "code:python (\"\"\"hello_plugin -- minimal example plugin for exlab-wizard.)" + }, + { + "label": "6.5.3 `manifest.yml`", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L544", + "id": "design_spec_sections_06_plugin_system_6_5_3_manifest_yml", + "community": 233, + "norm_label": "6.5.3 `manifest.yml`" + }, + { + "label": "code:yaml (name: \"hello_plugin\")", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L546", + "id": "design_spec_sections_06_plugin_system_codeblock_12", + "community": 233, + "norm_label": "code:yaml (name: \"hello_plugin\")" + }, + { + "label": "6.5.4 `plugin.py`", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L564", + "id": "design_spec_sections_06_plugin_system_6_5_4_plugin_py", + "community": 233, + "norm_label": "6.5.4 `plugin.py`" + }, + { + "label": "code:python (from pathlib import Path)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L566", + "id": "design_spec_sections_06_plugin_system_codeblock_13", + "community": 233, + "norm_label": "code:python (from pathlib import path)" + }, + { + "label": "6.5.5 `README.md`", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L598", + "id": "design_spec_sections_06_plugin_system_6_5_5_readme_md", + "community": 233, + "norm_label": "6.5.5 `readme.md`" + }, + { + "label": "6.6 Worked Example: `xlsx_field_filler`", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L602", + "id": "design_spec_sections_06_plugin_system_6_6_worked_example_xlsx_field_filler", + "community": 279, + "norm_label": "6.6 worked example: `xlsx_field_filler`" + }, + { + "label": "6.6.1 What it does", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L606", + "id": "design_spec_sections_06_plugin_system_6_6_1_what_it_does", + "community": 279, + "norm_label": "6.6.1 what it does" + }, + { + "label": "6.6.2 `manifest.yml`", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L610", + "id": "design_spec_sections_06_plugin_system_6_6_2_manifest_yml", + "community": 279, + "norm_label": "6.6.2 `manifest.yml`" + }, + { + "label": "code:yaml (name: \"xlsx_field_filler\")", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L612", + "id": "design_spec_sections_06_plugin_system_codeblock_14", + "community": 279, + "norm_label": "code:yaml (name: \"xlsx_field_filler\")" + }, + { + "label": "6.6.3 `plugin.py`", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L635", + "id": "design_spec_sections_06_plugin_system_6_6_3_plugin_py", + "community": 279, + "norm_label": "6.6.3 `plugin.py`" + }, + { + "label": "code:python (from pathlib import Path)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L637", + "id": "design_spec_sections_06_plugin_system_codeblock_15", + "community": 279, + "norm_label": "code:python (from pathlib import path)" + }, + { + "label": "6.6.4 What this exercises", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L809", + "id": "design_spec_sections_06_plugin_system_6_6_4_what_this_exercises", + "community": 279, + "norm_label": "6.6.4 what this exercises" + }, + { + "label": "6.7 Example Plugins (Illustrative Catalog)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L825", + "id": "design_spec_sections_06_plugin_system_6_7_example_plugins_illustrative_catalog", + "community": 195, + "norm_label": "6.7 example plugins (illustrative catalog)" + }, + { + "label": "6.8 Plugin Authoring Checklist", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L835", + "id": "design_spec_sections_06_plugin_system_6_8_plugin_authoring_checklist", + "community": 195, + "norm_label": "6.8 plugin authoring checklist" + }, + { + "label": "6.9 Lint CLI: `exlab-wizard plugins lint`", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L849", + "id": "design_spec_sections_06_plugin_system_6_9_lint_cli_exlab_wizard_plugins_lint", + "community": 195, + "norm_label": "6.9 lint cli: `exlab-wizard plugins lint`" + }, + { + "label": "code:block16 (exlab-wizard plugins lint )", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L855", + "id": "design_spec_sections_06_plugin_system_codeblock_16", + "community": 195, + "norm_label": "code:block16 (exlab-wizard plugins lint )" + }, + { + "label": "6.10 Test / Debug CLI: `exlab-wizard plugins exec`", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L899", + "id": "design_spec_sections_06_plugin_system_6_10_test_debug_cli_exlab_wizard_plugins_exec", + "community": 195, + "norm_label": "6.10 test / debug cli: `exlab-wizard plugins exec`" + }, + { + "label": "code:block17 (exlab-wizard plugins exec --against --against /)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L9", + "id": "design_spec_sections_11_cache_folders_codeblock_1", + "community": 61, + "norm_label": "code:block1 (/)" + }, + { + "label": "11.2 File Inventory per Level", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L50", + "id": "design_spec_sections_11_cache_folders_11_2_file_inventory_per_level", + "community": 61, + "norm_label": "11.2 file inventory per level" + }, + { + "label": "11.3 `creation.json` Schema", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L93", + "id": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", + "community": 61, + "norm_label": "11.3 `creation.json` schema" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L97", + "id": "design_spec_sections_11_cache_folders_codeblock_2", + "community": 61, + "norm_label": "code:json ({)" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L167", + "id": "design_spec_sections_11_cache_folders_codeblock_3", + "community": 61, + "norm_label": "code:json ({)" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L181", + "id": "design_spec_sections_11_cache_folders_codeblock_4", + "community": 61, + "norm_label": "code:json ({)" + }, + { + "label": "code:block5 ({ entry \u2208 validation_overrides)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L206", + "id": "design_spec_sections_11_cache_folders_codeblock_5", + "community": 61, + "norm_label": "code:block5 ({ entry \u2208 validation_overrides)" + }, + { + "label": "code:block6 (\"paths\": {)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L220", + "id": "design_spec_sections_11_cache_folders_codeblock_6", + "community": 61, + "norm_label": "code:block6 (\"paths\": {)" + }, + { + "label": "Schema-version history", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L227", + "id": "design_spec_sections_11_cache_folders_schema_version_history", + "community": 61, + "norm_label": "schema-version history" + }, + { + "label": "11.4 `readme_fields.json` Schema", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L243", + "id": "design_spec_sections_11_cache_folders_11_4_readme_fields_json_schema", + "community": 61, + "norm_label": "11.4 `readme_fields.json` schema" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L249", + "id": "design_spec_sections_11_cache_folders_codeblock_7", + "community": 61, + "norm_label": "code:json ({)" + }, + { + "label": "11.4.1 `equipment.json` Schema", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L285", + "id": "design_spec_sections_11_cache_folders_11_4_1_equipment_json_schema", + "community": 61, + "norm_label": "11.4.1 `equipment.json` schema" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L287", + "id": "design_spec_sections_11_cache_folders_codeblock_8", + "community": 61, + "norm_label": "code:json ({)" + }, + { + "label": "11.4.2 `test_runs.json` Schema", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L311", + "id": "design_spec_sections_11_cache_folders_11_4_2_test_runs_json_schema", + "community": 61, + "norm_label": "11.4.2 `test_runs.json` schema" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L313", + "id": "design_spec_sections_11_cache_folders_codeblock_9", + "community": 61, + "norm_label": "code:json ({)" + }, + { + "label": "11.4.3 `runs.json` Schema", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L327", + "id": "design_spec_sections_11_cache_folders_11_4_3_runs_json_schema", + "community": 61, + "norm_label": "11.4.3 `runs.json` schema" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L329", + "id": "design_spec_sections_11_cache_folders_codeblock_10", + "community": 61, + "norm_label": "code:json ({)" + }, + { + "label": "11.5 `wizard..log` Format", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L343", + "id": "design_spec_sections_11_cache_folders_11_5_wizard_hostname_log_format", + "community": 61, + "norm_label": "11.5 `wizard..log` format" + }, + { + "label": "code:block11 (2026-04-17T14:31:55Z [INFO ] [host:labpc-04] [equip:CONFOCAL)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L351", + "id": "design_spec_sections_11_cache_folders_codeblock_11", + "community": 61, + "norm_label": "code:block11 (2026-04-17t14:31:55z [info ] [host:labpc-04] [equip:confocal)" + }, + { + "label": "11.5.1 Log Levels, Rotation, and the Central App Log", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L366", + "id": "design_spec_sections_11_cache_folders_11_5_1_log_levels_rotation_and_the_central_app_log", + "community": 61, + "norm_label": "11.5.1 log levels, rotation, and the central app log" + }, + { + "label": "11.6 NAS Sync Behavior for Cache Files", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L397", + "id": "design_spec_sections_11_cache_folders_11_6_nas_sync_behavior_for_cache_files", + "community": 61, + "norm_label": "11.6 nas sync behavior for cache files" + }, + { + "label": "11.7 Discovery and Validation Use Cases", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L401", + "id": "design_spec_sections_11_cache_folders_11_7_discovery_and_validation_use_cases", + "community": 61, + "norm_label": "11.7 discovery and validation use cases" + }, + { + "label": "11.8 Validator Engine and Problem Query Contract", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L413", + "id": "design_spec_sections_11_cache_folders_11_8_validator_engine_and_problem_query_contract", + "community": 61, + "norm_label": "11.8 validator engine and problem query contract" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L430", + "id": "design_spec_sections_11_cache_folders_codeblock_12", + "community": 61, + "norm_label": "code:json ({)" + }, + { + "label": "11.9 Schema Versioning and Migration Policy", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L452", + "id": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", + "community": 61, + "norm_label": "11.9 schema versioning and migration policy" + }, + { + "label": "11.9.1 Versioning rules", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L456", + "id": "design_spec_sections_11_cache_folders_11_9_1_versioning_rules", + "community": 61, + "norm_label": "11.9.1 versioning rules" + }, + { + "label": "11.9.2 Reader policy", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L462", + "id": "design_spec_sections_11_cache_folders_11_9_2_reader_policy", + "community": 61, + "norm_label": "11.9.2 reader policy" + }, + { + "label": "11.9.3 Writer policy", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L472", + "id": "design_spec_sections_11_cache_folders_11_9_3_writer_policy", + "community": 61, + "norm_label": "11.9.3 writer policy" + }, + { + "label": "11.9.4 Cross-major migration (v1 \u2192 v2)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L480", + "id": "design_spec_sections_11_cache_folders_11_9_4_cross_major_migration_v1_v2", + "community": 61, + "norm_label": "11.9.4 cross-major migration (v1 \u2192 v2)" + }, + { + "label": "11.9.5 Directory-layout migration (v0.5 \u2192 v0.6)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L488", + "id": "design_spec_sections_11_cache_folders_11_9_5_directory_layout_migration_v0_5_v0_6", + "community": 61, + "norm_label": "11.9.5 directory-layout migration (v0.5 \u2192 v0.6)" + }, + { + "label": "11.9.6 What about `config.yaml`?", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L492", + "id": "design_spec_sections_11_cache_folders_11_9_6_what_about_config_yaml", + "community": 61, + "norm_label": "11.9.6 what about `config.yaml`?" + }, + { + "label": "05_Template_Format.md", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L1", + "id": "design_specs_design_spec_sections_05_template_format_md", + "community": 180, + "norm_label": "05_template_format.md" + }, + { + "label": "5. Template Format", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L1", + "id": "design_spec_sections_05_template_format_5_template_format", + "community": 180, + "norm_label": "5. template format" + }, + { + "label": "5.0 Template Locations (Global and Per-Equipment)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L9", + "id": "design_spec_sections_05_template_format_5_0_template_locations_global_and_per_equipment", + "community": 180, + "norm_label": "5.0 template locations (global and per-equipment)" + }, + { + "label": "5.1 Template Structure", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L32", + "id": "design_spec_sections_05_template_format_5_1_template_structure", + "community": 180, + "norm_label": "5.1 template structure" + }, + { + "label": "code:block1 (my_template/)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L36", + "id": "design_spec_sections_05_template_format_codeblock_1", + "community": 180, + "norm_label": "code:block1 (my_template/)" + }, + { + "label": "5.2 Copier Manifest (`copier.yml`)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L48", + "id": "design_spec_sections_05_template_format_5_2_copier_manifest_copier_yml", + "community": 180, + "norm_label": "5.2 copier manifest (`copier.yml`)" + }, + { + "label": "code:yaml (# --- Copier settings ---)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L52", + "id": "design_spec_sections_05_template_format_codeblock_2", + "community": 180, + "norm_label": "code:yaml (# --- copier settings ---)" + }, + { + "label": "5.3 Copier Python API Integration", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L100", + "id": "design_spec_sections_05_template_format_5_3_copier_python_api_integration", + "community": 180, + "norm_label": "5.3 copier python api integration" + }, + { + "label": "code:python (# Illustrative -- not implementation code)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L104", + "id": "design_spec_sections_05_template_format_codeblock_3", + "community": 180, + "norm_label": "code:python (# illustrative -- not implementation code)" + }, + { + "label": "5.4 Copier Answers File (`.exlab-answers.yml`)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L125", + "id": "design_spec_sections_05_template_format_5_4_copier_answers_file_exlab_answers_yml", + "community": 180, + "norm_label": "5.4 copier answers file (`.exlab-answers.yml`)" + }, + { + "label": "5.5 Plugin Pass (Post-Render, Controller-Driven)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L136", + "id": "design_spec_sections_05_template_format_5_5_plugin_pass_post_render_controller_driven", + "community": 180, + "norm_label": "5.5 plugin pass (post-render, controller-driven)" + }, + { + "label": "5.6 Jinja2 Templating in File Contents", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L155", + "id": "design_spec_sections_05_template_format_5_6_jinja2_templating_in_file_contents", + "community": 180, + "norm_label": "5.6 jinja2 templating in file contents" + }, + { + "label": "5.7 Template Versioning", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L165", + "id": "design_spec_sections_05_template_format_5_7_template_versioning", + "community": 180, + "norm_label": "5.7 template versioning" + }, + { + "label": "5.8 Lint CLI: `exlab-wizard templates lint`", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L175", + "id": "design_spec_sections_05_template_format_5_8_lint_cli_exlab_wizard_templates_lint", + "community": 180, + "norm_label": "5.8 lint cli: `exlab-wizard templates lint`" + }, + { + "label": "code:block4 (exlab-wizard templates lint )", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L181", + "id": "design_spec_sections_05_template_format_codeblock_4", + "community": 180, + "norm_label": "code:block4 (exlab-wizard templates lint )" + }, + { + "label": "13_Equipment_to_Orchestrator_Data_Flow.md", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L1", + "id": "design_specs_design_spec_sections_13_equipment_to_orchestrator_data_flow_md", + "community": 190, + "norm_label": "13_equipment_to_orchestrator_data_flow.md" + }, + { + "label": "13. Equipment-to-Orchestrator Data Flow", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L1", + "id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", + "community": 190, + "norm_label": "13. equipment-to-orchestrator data flow" + }, + { + "label": "13.1 Topology", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L7", + "id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_1_topology", + "community": 190, + "norm_label": "13.1 topology" + }, + { + "label": "code:block1 ([Equipment Machine A] --push--> [Orchestrator /staging/EQU)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L9", + "id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_1", + "community": 190, + "norm_label": "code:block1 ([equipment machine a] --push--> [orchestrator /staging/equ)" + }, + { + "label": "13.2 Staging Area Layout", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L26", + "id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_2_staging_area_layout", + "community": 190, + "norm_label": "13.2 staging area layout" + }, + { + "label": "code:block2 (/staging/)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L28", + "id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_2", + "community": 190, + "norm_label": "code:block2 (/staging/)" + }, + { + "label": "13.3 Run Lifecycle States", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L52", + "id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_3_run_lifecycle_states", + "community": 190, + "norm_label": "13.3 run lifecycle states" + }, + { + "label": "13.4 `ingest.json` Schema", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L64", + "id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_4_ingest_json_schema", + "community": 190, + "norm_label": "13.4 `ingest.json` schema" + }, + { + "label": "code:json ({)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L66", + "id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_3", + "community": 190, + "norm_label": "code:json ({)" + }, + { + "label": "13.5 Run Completeness Signal", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L108", + "id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_5_run_completeness_signal", + "community": 190, + "norm_label": "13.5 run completeness signal" + }, + { + "label": "13.6 Transport Handling", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L119", + "id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_6_transport_handling", + "community": 190, + "norm_label": "13.6 transport handling" + }, + { + "label": "13.7 Staging Cleanup", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L123", + "id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_7_staging_cleanup", + "community": 190, + "norm_label": "13.7 staging cleanup" + }, + { + "label": "code:yaml (orchestrator:)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L127", + "id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_4", + "community": 190, + "norm_label": "code:yaml (orchestrator:)" + }, + { + "label": "13.8 Staging State Query (Backend Contract)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L140", + "id": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_8_staging_state_query_backend_contract", + "community": 190, + "norm_label": "13.8 staging state query (backend contract)" + }, + { + "label": "08_Error_Handling_Principles.md", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L1", + "id": "design_specs_design_spec_sections_08_error_handling_principles_md", + "community": 241, + "norm_label": "08_error_handling_principles.md" + }, + { + "label": "8. Error Handling Principles", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L1", + "id": "design_spec_sections_08_error_handling_principles_8_error_handling_principles", + "community": 241, + "norm_label": "8. error handling principles" + }, + { + "label": "8.1 Path Validation Rules", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L11", + "id": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", + "community": 241, + "norm_label": "8.1 path validation rules" + }, + { + "label": "8.1.1 Unresolved-placeholder rule (hard tier)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L15", + "id": "design_spec_sections_08_error_handling_principles_8_1_1_unresolved_placeholder_rule_hard_tier", + "community": 241, + "norm_label": "8.1.1 unresolved-placeholder rule (hard tier)" + }, + { + "label": "8.1.2 Illegal-filesystem-character rule (hard tier)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L39", + "id": "design_spec_sections_08_error_handling_principles_8_1_2_illegal_filesystem_character_rule_hard_tier", + "community": 241, + "norm_label": "8.1.2 illegal-filesystem-character rule (hard tier)" + }, + { + "label": "8.1.3 Mode-prefix mismatch rule (hard tier)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L51", + "id": "design_spec_sections_08_error_handling_principles_8_1_3_mode_prefix_mismatch_rule_hard_tier", + "community": 241, + "norm_label": "8.1.3 mode-prefix mismatch rule (hard tier)" + }, + { + "label": "8.1.4 Orphan rule (soft tier)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L60", + "id": "design_spec_sections_08_error_handling_principles_8_1_4_orphan_rule_soft_tier", + "community": 241, + "norm_label": "8.1.4 orphan rule (soft tier)" + }, + { + "label": "8.1.5 Missing-required-field rule (soft tier)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L66", + "id": "design_spec_sections_08_error_handling_principles_8_1_5_missing_required_field_rule_soft_tier", + "community": 241, + "norm_label": "8.1.5 missing-required-field rule (soft tier)" + }, + { + "label": "8.1.6 Tier mapping", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L70", + "id": "design_spec_sections_08_error_handling_principles_8_1_6_tier_mapping", + "community": 241, + "norm_label": "8.1.6 tier mapping" + }, + { + "label": "10_README_Generation.md", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L1", + "id": "design_specs_design_spec_sections_10_readme_generation_md", + "community": 173, + "norm_label": "10_readme_generation.md" + }, + { + "label": "10. README Generation", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L1", + "id": "design_spec_sections_10_readme_generation_10_readme_generation", + "community": 173, + "norm_label": "10. readme generation" + }, + { + "label": "10.1 When It Runs", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L9", + "id": "design_spec_sections_10_readme_generation_10_1_when_it_runs", + "community": 173, + "norm_label": "10.1 when it runs" + }, + { + "label": "code:yaml (# In a template's copier.yml)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L15", + "id": "design_spec_sections_10_readme_generation_codeblock_1", + "community": 173, + "norm_label": "code:yaml (# in a template's copier.yml)" + }, + { + "label": "10.2 Field Sources (Merged Layers)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L26", + "id": "design_spec_sections_10_readme_generation_10_2_field_sources_merged_layers", + "community": 173, + "norm_label": "10.2 field sources (merged layers)" + }, + { + "label": "10.3 Field Types", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L39", + "id": "design_spec_sections_10_readme_generation_10_3_field_types", + "community": 173, + "norm_label": "10.3 field types" + }, + { + "label": "code:yaml (_exlab_readme:)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L53", + "id": "design_spec_sections_10_readme_generation_codeblock_2", + "community": 173, + "norm_label": "code:yaml (_exlab_readme:)" + }, + { + "label": "10.4 User-Added Custom Fields", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L72", + "id": "design_spec_sections_10_readme_generation_10_4_user_added_custom_fields", + "community": 173, + "norm_label": "10.4 user-added custom fields" + }, + { + "label": "10.5 Pre-fill Behavior", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L80", + "id": "design_spec_sections_10_readme_generation_10_5_pre_fill_behavior", + "community": 173, + "norm_label": "10.5 pre-fill behavior" + }, + { + "label": "10.6 Auto-Filled System Fields", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L86", + "id": "design_spec_sections_10_readme_generation_10_6_auto_filled_system_fields", + "community": 173, + "norm_label": "10.6 auto-filled system fields" + }, + { + "label": "10.7 Output Format", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L101", + "id": "design_spec_sections_10_readme_generation_10_7_output_format", + "community": 173, + "norm_label": "10.7 output format" + }, + { + "label": "code:markdown (---)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L115", + "id": "design_spec_sections_10_readme_generation_codeblock_3", + "community": 173, + "norm_label": "code:markdown (---)" + }, + { + "label": "10.7.1 Machine Query Examples", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L169", + "id": "design_spec_sections_10_readme_generation_10_7_1_machine_query_examples", + "community": 173, + "norm_label": "10.7.1 machine query examples" + }, + { + "label": "code:python (# Illustrative -- not implementation code)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L173", + "id": "design_spec_sections_10_readme_generation_codeblock_4", + "community": 173, + "norm_label": "code:python (# illustrative -- not implementation code)" + }, + { + "label": "10.7.2 Prose Body", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L209", + "id": "design_spec_sections_10_readme_generation_10_7_2_prose_body", + "community": 173, + "norm_label": "10.7.2 prose body" + }, + { + "label": "10.8 README Plugin Hook (Removed in v0.7)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L215", + "id": "design_spec_sections_10_readme_generation_10_8_readme_plugin_hook_removed_in_v0_7", + "community": 173, + "norm_label": "10.8 readme plugin hook (removed in v0.7)" + }, + { + "label": "16_Logging.md", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L1", + "id": "design_specs_design_spec_sections_16_logging_md", + "community": 96, + "norm_label": "16_logging.md" + }, + { + "label": "16. Logging Architecture", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L1", + "id": "design_spec_sections_16_logging_16_logging_architecture", + "community": 96, + "norm_label": "16. logging architecture" + }, + { + "label": "16.1 Goals", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L14", + "id": "design_spec_sections_16_logging_16_1_goals", + "community": 96, + "norm_label": "16.1 goals" + }, + { + "label": "16.2 The `logging/` package", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L23", + "id": "design_spec_sections_16_logging_16_2_the_logging_package", + "community": 96, + "norm_label": "16.2 the `logging/` package" + }, + { + "label": "code:block1 (exlab_wizard/logging/)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L25", + "id": "design_spec_sections_16_logging_codeblock_1", + "community": 96, + "norm_label": "code:block1 (exlab_wizard/logging/)" + }, + { + "label": "16.2.1 The `get_logger(name)` entry point", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L34", + "id": "design_spec_sections_16_logging_16_2_1_the_get_logger_name_entry_point", + "community": 96, + "norm_label": "16.2.1 the `get_logger(name)` entry point" + }, + { + "label": "code:python (from exlab_wizard.logging import get_logger)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L38", + "id": "design_spec_sections_16_logging_codeblock_2", + "community": 96, + "norm_label": "code:python (from exlab_wizard.logging import get_logger)" + }, + { + "label": "16.2.2 `configure_logging(config)` at startup", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L55", + "id": "design_spec_sections_16_logging_16_2_2_configure_logging_config_at_startup", + "community": 96, + "norm_label": "16.2.2 `configure_logging(config)` at startup" + }, + { + "label": "code:python (from exlab_wizard.logging import configure_logging)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L59", + "id": "design_spec_sections_16_logging_codeblock_3", + "community": 96, + "norm_label": "code:python (from exlab_wizard.logging import configure_logging)" + }, + { + "label": "16.2.3 Context vars", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L72", + "id": "design_spec_sections_16_logging_16_2_3_context_vars", + "community": 96, + "norm_label": "16.2.3 context vars" + }, + { + "label": "code:python (from exlab_wizard.logging.context import set_run_context, cl)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L76", + "id": "design_spec_sections_16_logging_codeblock_4", + "community": 96, + "norm_label": "code:python (from exlab_wizard.logging.context import set_run_context, cl)" + }, + { + "label": "16.2.4 Equipment-scoped handlers", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L91", + "id": "design_spec_sections_16_logging_16_2_4_equipment_scoped_handlers", + "community": 96, + "norm_label": "16.2.4 equipment-scoped handlers" + }, + { + "label": "16.2.5 Non-blocking emit via `QueueHandler` + `QueueListener`", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L102", + "id": "design_spec_sections_16_logging_16_2_5_non_blocking_emit_via_queuehandler_queuelistener", + "community": 96, + "norm_label": "16.2.5 non-blocking emit via `queuehandler` + `queuelistener`" + }, + { + "label": "16.3 Log file layout (where-to-look quick reference)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L114", + "id": "design_spec_sections_16_logging_16_3_log_file_layout_where_to_look_quick_reference", + "community": 96, + "norm_label": "16.3 log file layout (where-to-look quick reference)" + }, + { + "label": "16.4 Format", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L132", + "id": "design_spec_sections_16_logging_16_4_format", + "community": 96, + "norm_label": "16.4 format" + }, + { + "label": "code:block5 ( [] [host:] [equi)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L136", + "id": "design_spec_sections_16_logging_codeblock_5", + "community": 96, + "norm_label": "code:block5 ( [] [host:] [equi)" + }, + { + "label": "16.5 Levels and configuration", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L154", + "id": "design_spec_sections_16_logging_16_5_levels_and_configuration", + "community": 96, + "norm_label": "16.5 levels and configuration" + }, + { + "label": "16.6 Rotation", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L169", + "id": "design_spec_sections_16_logging_16_6_rotation", + "community": 96, + "norm_label": "16.6 rotation" + }, + { + "label": "16.7 Debugging recipes", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L185", + "id": "design_spec_sections_16_logging_16_7_debugging_recipes", + "community": 96, + "norm_label": "16.7 debugging recipes" + }, + { + "label": "16.7.1 \"A run failed; what happened?\"", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L189", + "id": "design_spec_sections_16_logging_16_7_1_a_run_failed_what_happened", + "community": 96, + "norm_label": "16.7.1 \"a run failed; what happened?\"" + }, + { + "label": "16.7.2 \"Sync is failing for many runs\"", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L195", + "id": "design_spec_sections_16_logging_16_7_2_sync_is_failing_for_many_runs", + "community": 96, + "norm_label": "16.7.2 \"sync is failing for many runs\"" + }, + { + "label": "16.7.3 \"A plugin is misbehaving in production\"", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L201", + "id": "design_spec_sections_16_logging_16_7_3_a_plugin_is_misbehaving_in_production", + "community": 96, + "norm_label": "16.7.3 \"a plugin is misbehaving in production\"" + }, + { + "label": "16.7.4 \"I don't trust my config; what's actually loaded?\"", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L209", + "id": "design_spec_sections_16_logging_16_7_4_i_don_t_trust_my_config_what_s_actually_loaded", + "community": 96, + "norm_label": "16.7.4 \"i don't trust my config; what's actually loaded?\"" + }, + { + "label": "16.7.5 \"Increase verbosity for one debug session\"", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L214", + "id": "design_spec_sections_16_logging_16_7_5_increase_verbosity_for_one_debug_session", + "community": 96, + "norm_label": "16.7.5 \"increase verbosity for one debug session\"" + }, + { + "label": "16.8 Plugin worker logging", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L223", + "id": "design_spec_sections_16_logging_16_8_plugin_worker_logging", + "community": 96, + "norm_label": "16.8 plugin worker logging" + }, + { + "label": "16.9 Operator-facing log access", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L237", + "id": "design_spec_sections_16_logging_16_9_operator_facing_log_access", + "community": 96, + "norm_label": "16.9 operator-facing log access" + }, + { + "label": "16.10 Anti-patterns", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L247", + "id": "design_spec_sections_16_logging_16_10_anti_patterns", + "community": 96, + "norm_label": "16.10 anti-patterns" + }, + { + "label": "02_User_Interaction.md", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L1", + "id": "design_specs_design_spec_sections_02_user_interaction_md", + "community": 124, + "norm_label": "02_user_interaction.md" + }, + { + "label": "2. User Interaction", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L1", + "id": "design_spec_sections_02_user_interaction_2_user_interaction", + "community": 124, + "norm_label": "2. user interaction" + }, + { + "label": "Table of Contents", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L13", + "id": "design_spec_sections_02_user_interaction_table_of_contents", + "community": 124, + "norm_label": "table of contents" + }, + { + "label": "1. Purpose and Scope", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L33", + "id": "design_spec_sections_02_user_interaction_1_purpose_and_scope", + "community": 124, + "norm_label": "1. purpose and scope" + }, + { + "label": "2. Mandatory Core Fields (Creation Gate)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L46", + "id": "design_spec_sections_02_user_interaction_2_mandatory_core_fields_creation_gate", + "community": 124, + "norm_label": "2. mandatory core fields (creation gate)" + }, + { + "label": "3. User Capabilities", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L69", + "id": "design_spec_sections_02_user_interaction_3_user_capabilities", + "community": 124, + "norm_label": "3. user capabilities" + }, + { + "label": "3.1 Create a New Project", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L73", + "id": "design_spec_sections_02_user_interaction_3_1_create_a_new_project", + "community": 124, + "norm_label": "3.1 create a new project" + }, + { + "label": "3.2 Create a New Experimental Run", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L82", + "id": "design_spec_sections_02_user_interaction_3_2_create_a_new_experimental_run", + "community": 124, + "norm_label": "3.2 create a new experimental run" + }, + { + "label": "3.3 Create a New Test Run", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L89", + "id": "design_spec_sections_02_user_interaction_3_3_create_a_new_test_run", + "community": 124, + "norm_label": "3.3 create a new test run" + }, + { + "label": "3.4 Browse Existing Equipment, Projects, and Runs", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L98", + "id": "design_spec_sections_02_user_interaction_3_4_browse_existing_equipment_projects_and_runs", + "community": 124, + "norm_label": "3.4 browse existing equipment, projects, and runs" + }, + { + "label": "3.5 Author a README at Creation Time", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L104", + "id": "design_spec_sections_02_user_interaction_3_5_author_a_readme_at_creation_time", + "community": 124, + "norm_label": "3.5 author a readme at creation time" + }, + { + "label": "3.6 Configure Equipment, Paths, and Integrations", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L112", + "id": "design_spec_sections_02_user_interaction_3_6_configure_equipment_paths_and_integrations", + "community": 124, + "norm_label": "3.6 configure equipment, paths, and integrations" + }, + { + "label": "3.7 Monitor Orchestrator Staging (Orchestrator Mode Only)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L119", + "id": "design_spec_sections_02_user_interaction_3_7_monitor_orchestrator_staging_orchestrator_mode_only", + "community": 124, + "norm_label": "3.7 monitor orchestrator staging (orchestrator mode only)" + }, + { + "label": "3.8 Review and Resolve Naming and Validation Problems", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L125", + "id": "design_spec_sections_02_user_interaction_3_8_review_and_resolve_naming_and_validation_problems", + "community": 124, + "norm_label": "3.8 review and resolve naming and validation problems" + }, + { + "label": "4. Mode Invariants and Safety Boundaries", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L144", + "id": "design_spec_sections_02_user_interaction_4_mode_invariants_and_safety_boundaries", + "community": 124, + "norm_label": "4. mode invariants and safety boundaries" + }, + { + "label": "5. Validation Order and Error Surfacing", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L157", + "id": "design_spec_sections_02_user_interaction_5_validation_order_and_error_surfacing", + "community": 124, + "norm_label": "5. validation order and error surfacing" + }, + { + "label": "6. User-Visible State Across Surfaces", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L172", + "id": "design_spec_sections_02_user_interaction_6_user_visible_state_across_surfaces", + "community": 124, + "norm_label": "6. user-visible state across surfaces" + }, + { + "label": "7. Pre-Sync Gate", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L186", + "id": "design_spec_sections_02_user_interaction_7_pre_sync_gate", + "community": 124, + "norm_label": "7. pre-sync gate" + }, + { + "label": "7.1 What the gate blocks", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L190", + "id": "design_spec_sections_02_user_interaction_7_1_what_the_gate_blocks", + "community": 124, + "norm_label": "7.1 what the gate blocks" + }, + { + "label": "7.2 What the user sees", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L196", + "id": "design_spec_sections_02_user_interaction_7_2_what_the_user_sees", + "community": 124, + "norm_label": "7.2 what the user sees" + }, + { + "label": "7.3 How the gate is cleared", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L202", + "id": "design_spec_sections_02_user_interaction_7_3_how_the_gate_is_cleared", + "community": 124, + "norm_label": "7.3 how the gate is cleared" + }, + { + "label": "7.4 Override audit contract", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L211", + "id": "design_spec_sections_02_user_interaction_7_4_override_audit_contract", + "community": 124, + "norm_label": "7.4 override audit contract" + }, + { + "label": "7.5 Gate semantics on retroactive problems", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L219", + "id": "design_spec_sections_02_user_interaction_7_5_gate_semantics_on_retroactive_problems", + "community": 124, + "norm_label": "7.5 gate semantics on retroactive problems" + }, + { + "label": "09_Configuration_File.md", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/09_Configuration_File.md", + "source_location": "L1", + "id": "design_specs_design_spec_sections_09_configuration_file_md", + "community": 342, + "norm_label": "09_configuration_file.md" + }, + { + "label": "9. Configuration File", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/09_Configuration_File.md", + "source_location": "L1", + "id": "design_spec_sections_09_configuration_file_9_configuration_file", + "community": 342, + "norm_label": "9. configuration file" + }, + { + "label": "code:yaml (paths:)", + "file_type": "document", + "source_file": "design_specs/design_spec_sections/09_Configuration_File.md", + "source_location": "L19", + "id": "design_spec_sections_09_configuration_file_codeblock_1", + "community": 342, + "norm_label": "code:yaml (paths:)" + } + ], + "links": [ + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_exlab_error_is_subclass_of_exception", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_exlab_error_can_be_raised_and_caught", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_config_error_is_subclass_of_exlab_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_config_error_can_be_raised_and_caught", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L57", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_validation_error_is_subclass_of_exlab_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L61", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_validation_error_can_be_raised_and_caught", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L66", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_template_load_error_is_subclass_of_exlab_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L70", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_template_load_error_can_be_raised_and_caught", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L75", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_plugin_error_is_subclass_of_exlab_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L79", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_plugin_error_can_be_raised_and_caught", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L84", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_keyring_unavailable_error_is_subclass_of_exlab_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L88", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_keyring_unavailable_error_can_be_raised_and_caught", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_setup_incomplete_error_is_subclass_of_exlab_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L97", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_setup_incomplete_error_can_be_raised_and_caught", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L107", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_template_core_field_redeclared_is_subclass_of_template_load_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L112", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_template_core_field_redeclared_is_also_subclass_of_exlab_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L116", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_template_core_field_redeclared_can_be_caught_as_template_load_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L121", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_template_core_field_redeclared_can_be_caught_as_exlab_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L131", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_plugin_input_required_is_subclass_of_exlab_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L135", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_plugin_input_required_sets_fields_attribute", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L141", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_plugin_input_required_accepts_empty_fields_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L146", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_plugin_input_required_reason_property_returns_message_string", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L151", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_plugin_input_required_str_equals_reason", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L157", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_plugin_input_required_can_be_raised_and_caught", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L164", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_plugin_input_required_can_be_caught_as_exlab_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L174", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_schema_major_mismatch_is_subclass_of_exlab_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L178", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_schema_major_mismatch_sets_expected_major_attribute", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L183", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_schema_major_mismatch_sets_found_attribute", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L188", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_schema_major_mismatch_str_contains_expected_and_found", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L195", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_schema_major_mismatch_can_be_raised_and_caught", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L202", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_schema_major_mismatch_can_be_caught_as_exlab_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L212", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_all_lists_every_public_exception_class", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L229", + "weight": 1.0, + "source": "tests_unit_test_errors_py", + "target": "unit_test_errors_test_all_entries_resolve_to_module_attributes", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_errors.py", + "source_location": "L1", + "weight": 1.0, + "source": "unit_test_errors_rationale_1", + "target": "tests_unit_test_errors_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L39", + "weight": 1.0, + "source": "unit_test_errors_test_exlab_error_can_be_raised_and_caught", + "target": "exlab_wizard_errors_exlaberror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L54", + "weight": 1.0, + "source": "unit_test_errors_test_config_error_can_be_raised_and_caught", + "target": "exlab_wizard_errors_configerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L63", + "weight": 1.0, + "source": "unit_test_errors_test_validation_error_can_be_raised_and_caught", + "target": "exlab_wizard_errors_validationerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L72", + "weight": 1.0, + "source": "unit_test_errors_test_template_load_error_can_be_raised_and_caught", + "target": "exlab_wizard_errors_templateloaderror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L81", + "weight": 1.0, + "source": "unit_test_errors_test_plugin_error_can_be_raised_and_caught", + "target": "exlab_wizard_errors_pluginerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L90", + "weight": 1.0, + "source": "unit_test_errors_test_keyring_unavailable_error_can_be_raised_and_caught", + "target": "exlab_wizard_errors_keyringunavailableerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L99", + "weight": 1.0, + "source": "unit_test_errors_test_setup_incomplete_error_can_be_raised_and_caught", + "target": "exlab_wizard_errors_setupincompleteerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L118", + "weight": 1.0, + "source": "unit_test_errors_test_template_core_field_redeclared_can_be_caught_as_template_load_error", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L123", + "weight": 1.0, + "source": "unit_test_errors_test_template_core_field_redeclared_can_be_caught_as_exlab_error", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L137", + "weight": 1.0, + "source": "unit_test_errors_test_plugin_input_required_sets_fields_attribute", + "target": "exlab_wizard_errors_plugininputrequired" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L142", + "weight": 1.0, + "source": "unit_test_errors_test_plugin_input_required_accepts_empty_fields_list", + "target": "exlab_wizard_errors_plugininputrequired" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L147", + "weight": 1.0, + "source": "unit_test_errors_test_plugin_input_required_reason_property_returns_message_string", + "target": "exlab_wizard_errors_plugininputrequired" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L153", + "weight": 1.0, + "source": "unit_test_errors_test_plugin_input_required_str_equals_reason", + "target": "exlab_wizard_errors_plugininputrequired" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L159", + "weight": 1.0, + "source": "unit_test_errors_test_plugin_input_required_can_be_raised_and_caught", + "target": "exlab_wizard_errors_plugininputrequired" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L166", + "weight": 1.0, + "source": "unit_test_errors_test_plugin_input_required_can_be_caught_as_exlab_error", + "target": "exlab_wizard_errors_plugininputrequired" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L179", + "weight": 1.0, + "source": "unit_test_errors_test_schema_major_mismatch_sets_expected_major_attribute", + "target": "exlab_wizard_errors_schemamajormismatcherror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L184", + "weight": 1.0, + "source": "unit_test_errors_test_schema_major_mismatch_sets_found_attribute", + "target": "exlab_wizard_errors_schemamajormismatcherror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L189", + "weight": 1.0, + "source": "unit_test_errors_test_schema_major_mismatch_str_contains_expected_and_found", + "target": "exlab_wizard_errors_schemamajormismatcherror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L197", + "weight": 1.0, + "source": "unit_test_errors_test_schema_major_mismatch_can_be_raised_and_caught", + "target": "exlab_wizard_errors_schemamajormismatcherror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_errors.py", + "source_location": "L204", + "weight": 1.0, + "source": "unit_test_errors_test_schema_major_mismatch_can_be_caught_as_exlab_error", + "target": "exlab_wizard_errors_schemamajormismatcherror" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L70", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_make_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L80", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L105", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_fake_home", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L128", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_config_path_macos", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L134", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_config_path_windows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L142", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_config_path_linux_with_xdg", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L150", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_config_path_linux_without_xdg", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L161", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_state_path_macos", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L167", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_state_path_windows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L175", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_state_path_linux_with_xdg", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L183", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_state_path_linux_without_xdg", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L194", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_cache_path_macos", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L200", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_cache_path_windows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L208", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_cache_path_linux_with_xdg", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L216", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_cache_path_linux_without_xdg", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L227", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_central_log_path_macos", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L233", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_central_log_path_windows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L241", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_central_log_path_linux_with_xdg", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L251", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_os_central_log_path_linux_without_xdg", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L268", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_suggested_staging_root_linux_fallback", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L276", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_suggested_staging_root_linux_honors_xdg_data_home", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L285", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_suggested_staging_root_macos", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L293", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_suggested_staging_root_windows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L316", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_test_mode_suffixes_os_config_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L325", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_test_mode_suffixes_os_state_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L332", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_test_mode_suffixes_os_cache_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L339", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_test_mode_suffixes_os_central_log_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L348", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_test_mode_suffixes_suggested_staging_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L359", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_test_mode_off_does_not_suffix", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L378", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_ensure_dir_creates_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L386", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_ensure_dir_idempotent_when_exists", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L395", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_ensure_state_dir_creates_state_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L404", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_ensure_central_log_dir_creates_parent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L418", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_canonicalize_equipment_id_accepts_canonical", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L426", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_canonicalize_equipment_id_accepts_other_canonical_examples", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L430", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_lowercase", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L435", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_hyphen", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L440", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_leading_digit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L445", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_space", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L450", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_non_ascii", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L455", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_too_long", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L463", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_canonicalize_equipment_id_accepts_max_length", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L468", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L473", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L480", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_int", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L488", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_canonicalize_equipment_id_does_not_mutate_input", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L506", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_compose_run_path_experimental", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L518", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_compose_run_path_test", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L530", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_compose_run_path_strftime_format", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L547", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_compose_run_path_experimental_under_runs_subdir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L560", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_compose_run_path_same_minute_collision_returns_same_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L581", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_compose_run_path_rejects_invalid_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L592", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_compose_run_path_rejects_unsafe_project_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L603", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_compose_project_path_basic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L613", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_compose_project_path_rejects_invalid_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L622", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_compose_project_path_rejects_unsafe_project_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L631", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_compose_run_path_rejects_non_str_project_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L644", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_compose_run_path_rejects_empty_project_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L657", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_compose_project_path_rejects_non_str_project_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L672", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_validate_project_name_accepts_human_readable_names", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L696", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_validate_project_name_rejects_unsafe_names", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L702", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_validate_project_name_rejects_overlong_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L708", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_validate_project_name_does_not_mutate_input", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L719", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_no_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L723", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_missing_paths", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L732", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L746", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_no_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L759", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_no_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L772", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L788", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L805", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L822", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_no_lims", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L836", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L856", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_lims_unreachable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L863", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_ready", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L867", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_keyring_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L876", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_nas_keyring_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L883", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_nas_state_precedes_lims_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L895", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_nas_state_resolves_once_password_added", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L905", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_missing_for_no_nas_credential_lists_per_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L919", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_next_action_for_no_nas_credential", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L928", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L959", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_next_action_table", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L968", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_missing_when_no_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L976", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_missing_when_ready", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L980", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_missing_when_lims_unreachable_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L985", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_missing_for_paths_lists_each_unset", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L996", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_missing_for_no_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1001", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1018", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_missing_for_missing_paths_with_none_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1029", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_missing_for_no_lims_with_none_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1037", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1063", + "weight": 1.0, + "source": "tests_unit_test_paths_py", + "target": "unit_test_paths_test_setup_state_missing_unrecognized_state_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1", + "weight": 1.0, + "source": "unit_test_paths_rationale_1", + "target": "tests_unit_test_paths_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L96", + "weight": 1.0, + "source": "unit_test_paths_ready_config", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L726", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_missing_paths", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L740", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L767", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_orchestrator", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L782", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L799", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L815", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L830", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_lims", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L849", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L937", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1009", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1051", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L53", + "weight": 1.0, + "source": "unit_test_paths_rationale_53", + "target": "unit_test_paths_make_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L727", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_missing_paths", + "target": "unit_test_paths_make_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L741", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", + "target": "unit_test_paths_make_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L754", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_equipment", + "target": "unit_test_paths_make_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L831", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_lims", + "target": "unit_test_paths_make_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L850", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", + "target": "unit_test_paths_make_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L938", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", + "target": "unit_test_paths_make_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1010", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", + "target": "unit_test_paths_make_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1052", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", + "target": "unit_test_paths_make_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L71", + "weight": 1.0, + "source": "unit_test_paths_rationale_71", + "target": "unit_test_paths_make_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L74", + "weight": 1.0, + "source": "unit_test_paths_make_orchestrator", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L857", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_lims_unreachable", + "target": "unit_test_paths_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L864", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_ready", + "target": "unit_test_paths_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L869", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_keyring_missing", + "target": "unit_test_paths_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L878", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_nas_keyring_missing", + "target": "unit_test_paths_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L885", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_nas_state_precedes_lims_state", + "target": "unit_test_paths_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L897", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_nas_state_resolves_once_password_added", + "target": "unit_test_paths_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L909", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_nas_credential_lists_per_equipment", + "target": "unit_test_paths_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L977", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_when_ready", + "target": "unit_test_paths_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L982", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_when_lims_unreachable_returns_empty", + "target": "unit_test_paths_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L997", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_equipment", + "target": "unit_test_paths_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L81", + "weight": 1.0, + "source": "unit_test_paths_rationale_81", + "target": "unit_test_paths_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L90", + "weight": 1.0, + "source": "unit_test_paths_ready_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L95", + "weight": 1.0, + "source": "unit_test_paths_ready_config", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L97", + "weight": 1.0, + "source": "unit_test_paths_ready_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L106", + "weight": 1.0, + "source": "unit_test_paths_rationale_106", + "target": "unit_test_paths_fake_home", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L131", + "weight": 1.0, + "source": "unit_test_paths_test_os_config_path_macos", + "target": "exlab_wizard_paths_os_config_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L139", + "weight": 1.0, + "source": "unit_test_paths_test_os_config_path_windows", + "target": "exlab_wizard_paths_os_config_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L147", + "weight": 1.0, + "source": "unit_test_paths_test_os_config_path_linux_with_xdg", + "target": "exlab_wizard_paths_os_config_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L153", + "weight": 1.0, + "source": "unit_test_paths_test_os_config_path_linux_without_xdg", + "target": "exlab_wizard_paths_os_config_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L164", + "weight": 1.0, + "source": "unit_test_paths_test_os_state_path_macos", + "target": "exlab_wizard_paths_os_state_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L172", + "weight": 1.0, + "source": "unit_test_paths_test_os_state_path_windows", + "target": "exlab_wizard_paths_os_state_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L180", + "weight": 1.0, + "source": "unit_test_paths_test_os_state_path_linux_with_xdg", + "target": "exlab_wizard_paths_os_state_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L186", + "weight": 1.0, + "source": "unit_test_paths_test_os_state_path_linux_without_xdg", + "target": "exlab_wizard_paths_os_state_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L197", + "weight": 1.0, + "source": "unit_test_paths_test_os_cache_path_macos", + "target": "exlab_wizard_paths_os_cache_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L205", + "weight": 1.0, + "source": "unit_test_paths_test_os_cache_path_windows", + "target": "exlab_wizard_paths_os_cache_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L213", + "weight": 1.0, + "source": "unit_test_paths_test_os_cache_path_linux_with_xdg", + "target": "exlab_wizard_paths_os_cache_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L219", + "weight": 1.0, + "source": "unit_test_paths_test_os_cache_path_linux_without_xdg", + "target": "exlab_wizard_paths_os_cache_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L230", + "weight": 1.0, + "source": "unit_test_paths_test_os_central_log_path_macos", + "target": "exlab_wizard_paths_os_central_log_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L238", + "weight": 1.0, + "source": "unit_test_paths_test_os_central_log_path_windows", + "target": "exlab_wizard_paths_os_central_log_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L248", + "weight": 1.0, + "source": "unit_test_paths_test_os_central_log_path_linux_with_xdg", + "target": "exlab_wizard_paths_os_central_log_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L256", + "weight": 1.0, + "source": "unit_test_paths_test_os_central_log_path_linux_without_xdg", + "target": "exlab_wizard_paths_os_central_log_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L273", + "weight": 1.0, + "source": "unit_test_paths_test_suggested_staging_root_linux_fallback", + "target": "exlab_wizard_paths_suggested_staging_root" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L282", + "weight": 1.0, + "source": "unit_test_paths_test_suggested_staging_root_linux_honors_xdg_data_home", + "target": "exlab_wizard_paths_suggested_staging_root" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L290", + "weight": 1.0, + "source": "unit_test_paths_test_suggested_staging_root_macos", + "target": "exlab_wizard_paths_suggested_staging_root" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L300", + "weight": 1.0, + "source": "unit_test_paths_test_suggested_staging_root_windows", + "target": "exlab_wizard_paths_suggested_staging_root" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L322", + "weight": 1.0, + "source": "unit_test_paths_test_test_mode_suffixes_os_config_path", + "target": "exlab_wizard_paths_os_config_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L329", + "weight": 1.0, + "source": "unit_test_paths_test_test_mode_suffixes_os_state_path", + "target": "exlab_wizard_paths_os_state_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L336", + "weight": 1.0, + "source": "unit_test_paths_test_test_mode_suffixes_os_cache_path", + "target": "exlab_wizard_paths_os_cache_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L345", + "weight": 1.0, + "source": "unit_test_paths_test_test_mode_suffixes_os_central_log_path", + "target": "exlab_wizard_paths_os_central_log_path" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L351", + "weight": 1.0, + "source": "unit_test_paths_rationale_351", + "target": "unit_test_paths_test_test_mode_suffixes_suggested_staging_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L356", + "weight": 1.0, + "source": "unit_test_paths_test_test_mode_suffixes_suggested_staging_root", + "target": "exlab_wizard_paths_suggested_staging_root" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L360", + "weight": 1.0, + "source": "unit_test_paths_rationale_360", + "target": "unit_test_paths_test_test_mode_off_does_not_suffix", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L363", + "weight": 1.0, + "source": "unit_test_paths_test_test_mode_off_does_not_suffix", + "target": "exlab_wizard_paths_os_config_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L381", + "weight": 1.0, + "source": "unit_test_paths_test_ensure_dir_creates_missing", + "target": "exlab_wizard_paths_ensure_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L390", + "weight": 1.0, + "source": "unit_test_paths_test_ensure_dir_idempotent_when_exists", + "target": "exlab_wizard_paths_ensure_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L399", + "weight": 1.0, + "source": "unit_test_paths_test_ensure_state_dir_creates_state_dir", + "target": "exlab_wizard_paths_ensure_state_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L401", + "weight": 1.0, + "source": "unit_test_paths_test_ensure_state_dir_creates_state_dir", + "target": "exlab_wizard_paths_os_state_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L408", + "weight": 1.0, + "source": "unit_test_paths_test_ensure_central_log_dir_creates_parent", + "target": "exlab_wizard_paths_ensure_central_log_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L410", + "weight": 1.0, + "source": "unit_test_paths_test_ensure_central_log_dir_creates_parent", + "target": "exlab_wizard_paths_os_central_log_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L419", + "weight": 1.0, + "source": "unit_test_paths_test_canonicalize_equipment_id_accepts_canonical", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L427", + "weight": 1.0, + "source": "unit_test_paths_test_canonicalize_equipment_id_accepts_other_canonical_examples", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L432", + "weight": 1.0, + "source": "unit_test_paths_test_canonicalize_equipment_id_rejects_lowercase", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L437", + "weight": 1.0, + "source": "unit_test_paths_test_canonicalize_equipment_id_rejects_hyphen", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L442", + "weight": 1.0, + "source": "unit_test_paths_test_canonicalize_equipment_id_rejects_leading_digit", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L447", + "weight": 1.0, + "source": "unit_test_paths_test_canonicalize_equipment_id_rejects_space", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L452", + "weight": 1.0, + "source": "unit_test_paths_test_canonicalize_equipment_id_rejects_non_ascii", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L458", + "weight": 1.0, + "source": "unit_test_paths_test_canonicalize_equipment_id_rejects_too_long", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L465", + "weight": 1.0, + "source": "unit_test_paths_test_canonicalize_equipment_id_accepts_max_length", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L470", + "weight": 1.0, + "source": "unit_test_paths_test_canonicalize_equipment_id_rejects_empty", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L474", + "weight": 1.0, + "source": "unit_test_paths_rationale_474", + "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_none", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L476", + "weight": 1.0, + "source": "unit_test_paths_test_canonicalize_equipment_id_rejects_none", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L481", + "weight": 1.0, + "source": "unit_test_paths_rationale_481", + "target": "unit_test_paths_test_canonicalize_equipment_id_rejects_int", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L483", + "weight": 1.0, + "source": "unit_test_paths_test_canonicalize_equipment_id_rejects_int", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L489", + "weight": 1.0, + "source": "unit_test_paths_rationale_489", + "target": "unit_test_paths_test_canonicalize_equipment_id_does_not_mutate_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L491", + "weight": 1.0, + "source": "unit_test_paths_test_canonicalize_equipment_id_does_not_mutate_input", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L507", + "weight": 1.0, + "source": "unit_test_paths_test_compose_run_path_experimental", + "target": "exlab_wizard_paths_compose_run_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L519", + "weight": 1.0, + "source": "unit_test_paths_test_compose_run_path_test", + "target": "exlab_wizard_paths_compose_run_path" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L531", + "weight": 1.0, + "source": "unit_test_paths_rationale_531", + "target": "unit_test_paths_test_compose_run_path_strftime_format", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L536", + "weight": 1.0, + "source": "unit_test_paths_test_compose_run_path_strftime_format", + "target": "exlab_wizard_paths_compose_run_path" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L548", + "weight": 1.0, + "source": "unit_test_paths_rationale_548", + "target": "unit_test_paths_test_compose_run_path_experimental_under_runs_subdir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L549", + "weight": 1.0, + "source": "unit_test_paths_test_compose_run_path_experimental_under_runs_subdir", + "target": "exlab_wizard_paths_compose_run_path" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L561", + "weight": 1.0, + "source": "unit_test_paths_rationale_561", + "target": "unit_test_paths_test_compose_run_path_same_minute_collision_returns_same_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L563", + "weight": 1.0, + "source": "unit_test_paths_test_compose_run_path_same_minute_collision_returns_same_path", + "target": "exlab_wizard_paths_compose_run_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L583", + "weight": 1.0, + "source": "unit_test_paths_test_compose_run_path_rejects_invalid_equipment_id", + "target": "exlab_wizard_paths_compose_run_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L594", + "weight": 1.0, + "source": "unit_test_paths_test_compose_run_path_rejects_unsafe_project_name", + "target": "exlab_wizard_paths_compose_run_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L604", + "weight": 1.0, + "source": "unit_test_paths_test_compose_project_path_basic", + "target": "exlab_wizard_paths_compose_project_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L615", + "weight": 1.0, + "source": "unit_test_paths_test_compose_project_path_rejects_invalid_equipment_id", + "target": "exlab_wizard_paths_compose_project_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L624", + "weight": 1.0, + "source": "unit_test_paths_test_compose_project_path_rejects_unsafe_project_name", + "target": "exlab_wizard_paths_compose_project_path" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L632", + "weight": 1.0, + "source": "unit_test_paths_rationale_632", + "target": "unit_test_paths_test_compose_run_path_rejects_non_str_project_name", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L634", + "weight": 1.0, + "source": "unit_test_paths_test_compose_run_path_rejects_non_str_project_name", + "target": "exlab_wizard_paths_compose_run_path" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L645", + "weight": 1.0, + "source": "unit_test_paths_rationale_645", + "target": "unit_test_paths_test_compose_run_path_rejects_empty_project_name", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L647", + "weight": 1.0, + "source": "unit_test_paths_test_compose_run_path_rejects_empty_project_name", + "target": "exlab_wizard_paths_compose_run_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L659", + "weight": 1.0, + "source": "unit_test_paths_test_compose_project_path_rejects_non_str_project_name", + "target": "exlab_wizard_paths_compose_project_path" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L673", + "weight": 1.0, + "source": "unit_test_paths_rationale_673", + "target": "unit_test_paths_test_validate_project_name_accepts_human_readable_names", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L675", + "weight": 1.0, + "source": "unit_test_paths_test_validate_project_name_accepts_human_readable_names", + "target": "exlab_wizard_paths_validate_project_name" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L676", + "weight": 1.0, + "source": "unit_test_paths_test_validate_project_name_accepts_human_readable_names", + "target": "exlab_wizard_paths_project_name_violations" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L698", + "weight": 1.0, + "source": "unit_test_paths_test_validate_project_name_rejects_unsafe_names", + "target": "exlab_wizard_paths_validate_project_name" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L699", + "weight": 1.0, + "source": "unit_test_paths_test_validate_project_name_rejects_unsafe_names", + "target": "exlab_wizard_paths_project_name_violations" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L704", + "weight": 1.0, + "source": "unit_test_paths_test_validate_project_name_rejects_overlong_name", + "target": "exlab_wizard_paths_validate_project_name" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L709", + "weight": 1.0, + "source": "unit_test_paths_rationale_709", + "target": "unit_test_paths_test_validate_project_name_does_not_mutate_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L711", + "weight": 1.0, + "source": "unit_test_paths_test_validate_project_name_does_not_mutate_input", + "target": "exlab_wizard_paths_validate_project_name" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L720", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_config", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L725", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_missing_paths", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L729", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_missing_paths", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L733", + "weight": 1.0, + "source": "unit_test_paths_rationale_733", + "target": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L735", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L743", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_missing_paths_partial", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L748", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_equipment", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L756", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_equipment", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L760", + "weight": 1.0, + "source": "unit_test_paths_rationale_760", + "target": "unit_test_paths_test_evaluate_setup_state_no_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L762", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_orchestrator", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L769", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_orchestrator", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L773", + "weight": 1.0, + "source": "unit_test_paths_rationale_773", + "target": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L777", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L783", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L785", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_orchestrator_when_only_staging_set", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L789", + "weight": 1.0, + "source": "unit_test_paths_rationale_789", + "target": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L793", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L798", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L800", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L802", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_blank_staging_root_is_allowed", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L806", + "weight": 1.0, + "source": "unit_test_paths_rationale_806", + "target": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L810", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L816", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L818", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_orchestrator_lists_only_label", + "target": "exlab_wizard_paths_setup_state_missing" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L824", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_lims", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L829", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_lims", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L833", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_no_lims", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L837", + "weight": 1.0, + "source": "unit_test_paths_rationale_837", + "target": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L839", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L844", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L853", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_lims_via_offline_catalogue", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L859", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_lims_unreachable", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L864", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_ready", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L868", + "weight": 1.0, + "source": "unit_test_paths_rationale_868", + "target": "unit_test_paths_test_evaluate_setup_state_keyring_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L871", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_keyring_missing", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L877", + "weight": 1.0, + "source": "unit_test_paths_rationale_877", + "target": "unit_test_paths_test_evaluate_setup_state_nas_keyring_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L879", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_nas_keyring_missing", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L884", + "weight": 1.0, + "source": "unit_test_paths_rationale_884", + "target": "unit_test_paths_test_evaluate_setup_state_nas_state_precedes_lims_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L886", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_nas_state_precedes_lims_state", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L896", + "weight": 1.0, + "source": "unit_test_paths_rationale_896", + "target": "unit_test_paths_test_evaluate_setup_state_nas_state_resolves_once_password_added", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L898", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_nas_state_resolves_once_password_added", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L906", + "weight": 1.0, + "source": "unit_test_paths_rationale_906", + "target": "unit_test_paths_test_setup_state_missing_for_no_nas_credential_lists_per_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L910", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_nas_credential_lists_per_equipment", + "target": "exlab_wizard_paths_setup_state_missing" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L923", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_next_action_for_no_nas_credential", + "target": "exlab_wizard_paths_setup_state_next_action" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L929", + "weight": 1.0, + "source": "unit_test_paths_rationale_929", + "target": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L931", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L936", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L940", + "weight": 1.0, + "source": "unit_test_paths_test_evaluate_setup_state_endpoint_only_missing_email", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L960", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_next_action_table", + "target": "exlab_wizard_paths_setup_state_next_action" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L969", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_when_no_config", + "target": "exlab_wizard_paths_setup_state_missing" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L977", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_when_ready", + "target": "exlab_wizard_paths_setup_state_missing" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L981", + "weight": 1.0, + "source": "unit_test_paths_rationale_981", + "target": "unit_test_paths_test_setup_state_missing_when_lims_unreachable_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L982", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_when_lims_unreachable_returns_empty", + "target": "exlab_wizard_paths_setup_state_missing" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L987", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_paths_lists_each_unset", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L989", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_paths_lists_each_unset", + "target": "exlab_wizard_paths_setup_state_missing" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L997", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_equipment", + "target": "exlab_wizard_paths_setup_state_missing" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L1003", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L1008", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L1012", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_lims_lists_endpoint_email", + "target": "exlab_wizard_paths_setup_state_missing" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1019", + "weight": 1.0, + "source": "unit_test_paths_rationale_1019", + "target": "unit_test_paths_test_setup_state_missing_for_missing_paths_with_none_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L1022", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_missing_paths_with_none_config", + "target": "exlab_wizard_paths_setup_state_missing" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1030", + "weight": 1.0, + "source": "unit_test_paths_rationale_1030", + "target": "unit_test_paths_test_setup_state_missing_for_no_lims_with_none_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L1033", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_lims_with_none_config", + "target": "exlab_wizard_paths_setup_state_missing" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1038", + "weight": 1.0, + "source": "unit_test_paths_rationale_1038", + "target": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L1041", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L1046", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L1054", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_for_no_lims_flags_keyring_when_endpoint_email_set", + "target": "exlab_wizard_paths_setup_state_missing" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_paths.py", + "source_location": "L1064", + "weight": 1.0, + "source": "unit_test_paths_rationale_1064", + "target": "unit_test_paths_test_setup_state_missing_unrecognized_state_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/test_paths.py", + "source_location": "L1077", + "weight": 1.0, + "source": "unit_test_paths_test_setup_state_missing_unrecognized_state_returns_empty", + "target": "exlab_wizard_paths_setup_state_missing" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_main.py", + "source_location": "L14", + "weight": 1.0, + "source": "tests_unit_test_main_py", + "target": "unit_test_main_test_main_returns_zero", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_main.py", + "source_location": "L19", + "weight": 1.0, + "source": "tests_unit_test_main_py", + "target": "unit_test_main_test_main_prints_hint", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/test_main.py", + "source_location": "L1", + "weight": 1.0, + "source": "unit_test_main_rationale_1", + "target": "tests_unit_test_main_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L34", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_run_page_py", + "target": "ui_test_wizard_run_page_test_can_advance_template_step_requires_selection", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_run_page_py", + "target": "ui_test_wizard_run_page_test_can_advance_variables_step_always_true", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L46", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_run_page_py", + "target": "ui_test_wizard_run_page_test_can_advance_preview_step_blocks_on_validator_findings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_run_page_py", + "target": "ui_test_wizard_run_page_test_can_advance_confirm_step_always_true", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L58", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_run_page_py", + "target": "ui_test_wizard_run_page_test_can_advance_default_step_is_project_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L68", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_run_page_py", + "target": "ui_test_wizard_run_page_test_can_advance_readme_blocks_on_partial_core_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L81", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_run_page_py", + "target": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L98", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_run_page_py", + "target": "ui_test_wizard_run_page_test_preview_path_segments_experimental_uses_run_prefix", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L109", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_run_page_py", + "target": "ui_test_wizard_run_page_test_preview_path_segments_test_uses_testrun_prefix_and_folder", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L126", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_run_page_py", + "target": "ui_test_wizard_run_page_test_render_run_wizard_experimental_with_choices_does_not_raise", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L136", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_run_page_py", + "target": "ui_test_wizard_run_page_test_render_run_wizard_test_with_choices_does_not_raise", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L146", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_run_page_py", + "target": "ui_test_wizard_run_page_test_render_run_wizard_with_empty_choices_does_not_raise", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L155", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_run_page_py", + "target": "ui_test_wizard_run_page_test_wizard_run_step_titles_cover_every_step", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_wizard_run_page_rationale_1", + "target": "tests_unit_ui_test_wizard_run_page_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L35", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_can_advance_template_step_requires_selection", + "target": "pages_wizard_run_runwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L42", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_can_advance_variables_step_always_true", + "target": "pages_wizard_run_runwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L47", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_can_advance_preview_step_blocks_on_validator_findings", + "target": "pages_wizard_run_runwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L54", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_can_advance_confirm_step_always_true", + "target": "pages_wizard_run_runwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L59", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_can_advance_default_step_is_project_equipment", + "target": "pages_wizard_run_runwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L69", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_can_advance_readme_blocks_on_partial_core_fields", + "target": "pages_wizard_run_runwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L82", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", + "target": "pages_wizard_run_runwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L87", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", + "target": "pages_wizard_run_title_text" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L88", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", + "target": "pages_wizard_run_primary_button_color" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L90", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_state_run_kind_is_bound_and_drives_helpers", + "target": "pages_wizard_run_primary_button_label" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L99", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_preview_path_segments_experimental_uses_run_prefix", + "target": "pages_wizard_run_runwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L100", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_preview_path_segments_experimental_uses_run_prefix", + "target": "pages_wizard_run_preview_path_segments" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L110", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_preview_path_segments_test_uses_testrun_prefix_and_folder", + "target": "pages_wizard_run_runwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L115", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_preview_path_segments_test_uses_testrun_prefix_and_folder", + "target": "pages_wizard_run_preview_path_segments" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L127", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_render_run_wizard_experimental_with_choices_does_not_raise", + "target": "pages_wizard_run_render_run_wizard" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L128", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_render_run_wizard_experimental_with_choices_does_not_raise", + "target": "pages_wizard_run_runwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L137", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_render_run_wizard_test_with_choices_does_not_raise", + "target": "pages_wizard_run_render_run_wizard" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L138", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_render_run_wizard_test_with_choices_does_not_raise", + "target": "pages_wizard_run_runwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L147", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_render_run_wizard_with_empty_choices_does_not_raise", + "target": "pages_wizard_run_render_run_wizard" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_run_page.py", + "source_location": "L148", + "weight": 1.0, + "source": "ui_test_wizard_run_page_test_render_run_wizard_with_empty_choices_does_not_raise", + "target": "pages_wizard_run_runwizardstate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_mode_badge_test_uses_warning_token", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L45", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_mode_badge_experimental_uses_navy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_mode_badge_none_falls_back_to_navy_with_placeholder", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L60", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_mode_badge_accepts_label_override", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L72", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_test_run_badge_uses_orange_aa_text", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L80", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_override_badge_active_uses_sky_aa_text", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L88", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_override_badge_inactive_uses_muted", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L100", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_sync_status_pending_uses_muted", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L106", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_sync_status_synced_uses_success", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L111", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_sync_status_failed_uses_danger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L116", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_sync_status_blocked_uses_warning", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L123", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_sync_status_override_uses_info", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L128", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_sync_status_cleaned_uses_success_with_cloud_icon", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L136", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_sync_status_acquiring_uses_muted", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L145", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_sync_status_syncing_uses_info", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L154", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_sync_status_on_nas_uses_muted_cloud", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L163", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_sync_status_retrying_with_counter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L171", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_sync_status_unknown_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L183", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_session_progress_phase_order_is_canonical", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L199", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_apply_frame_advances_phase_and_marks_predecessors_done", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L207", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_apply_frame_progress_sets_plugin_sub_row", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L217", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_apply_frame_done_completes_all_phases", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L224", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_apply_frame_ignores_unknown_kinds_and_phases", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L231", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_session_progress_active_phase_marked", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L244", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_session_progress_plugin_sub_row_present", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L266", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_credential_field_states_default_to_not_set", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L273", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_credential_field_set_state_offers_replace_and_clear", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L280", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_credential_field_editing_offers_save_and_cancel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L291", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_begin_edit_from_not_set_enters_editing_remembering_not_set", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L301", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_begin_edit_from_set_remembers_set_as_resting", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L311", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_cancel_edit_returns_to_remembered_resting_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L318", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_cancel_edit_from_fresh_edit_returns_to_not_set", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L325", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_commit_edit_with_value_transitions_to_set_and_signals_save", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L333", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_commit_edit_with_empty_value_stays_editing_and_skips_save", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L342", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_clear_credential_returns_to_not_set", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L354", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_connection_panel_hidden_when_no_result", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L359", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_connection_panel_visible_after_result", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L371", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_connection_panel_failure_color_is_danger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L381", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_connection_panel_stale_appends_disclaimer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L393", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_filter_chips_initial_state_respects_default_on", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L403", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_filter_chips_toggle_flips_membership", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L412", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_filter_chips_list_active_preserves_definition_order", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L426", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_status_bar_segment_normal_uses_muted", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L432", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_status_bar_segment_warning_prefix_glyph", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L440", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_status_bar_segment_danger_prefix_glyph", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L453", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_banner_stack_shows_visible_and_overflow_split", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L489", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_operations_modal_columns_match_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L502", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_operations_modal_sort_suspended_first_oldest_first", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L535", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_operations_modal_state_glyph_known_states", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L541", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_operation_row_from_session_maps_state_buckets_and_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L593", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_collect_default_values_seeds_from_declared_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L607", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_input_required_dialog_builds_without_raising", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L629", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_bandwidth_window_validates_from_before_to", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L636", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_bandwidth_window_passes_when_correct", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L643", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_bandwidth_overlap_detected_for_shared_day_and_time", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L649", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_bandwidth_no_overlap_for_disjoint_days", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L660", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_validation_summary_hard_findings_use_warning", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L667", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_validation_summary_override_takes_priority", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L679", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_validation_summary_first_two_excerpts_returned_in_payload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L693", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_validation_summary_override_line_includes_attribution", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L714", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_tree_filter_archived_default_off_hides_archived", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L725", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_tree_filter_archived_chip_on_shows_archived", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L734", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_tree_filter_deleted_always_shown", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L745", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_tree_filter_test_runs_chip_off_hides_test_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L753", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_tree_build_nodes_yields_canonical_kinds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L766", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_tree_test_run_carries_test_badge", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L781", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_tree_run_node_propagates_sync_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L798", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_to_nicegui_nodes_cleared_run_uses_cloud_icon", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L823", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_to_nicegui_nodes_local_run_uses_local_icon", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L849", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L871", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_equipment_node_relay_flag_emits_received_equipment_kind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L885", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L909", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_slot_template_emits_testid_data_node_id_and_context_menus", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L949", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_factories_smoke_outside_nicegui", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L982", + "weight": 1.0, + "source": "tests_unit_ui_test_components_py", + "target": "ui_test_components_test_no_stray_ui_notify_calls_in_ui_package", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_components_rationale_1", + "target": "tests_unit_ui_test_components_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L38", + "weight": 1.0, + "source": "ui_test_components_rationale_38", + "target": "ui_test_components_test_mode_badge_test_uses_warning_token", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L46", + "weight": 1.0, + "source": "ui_test_components_rationale_46", + "target": "ui_test_components_test_mode_badge_experimental_uses_navy", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L53", + "weight": 1.0, + "source": "ui_test_components_rationale_53", + "target": "ui_test_components_test_mode_badge_none_falls_back_to_navy_with_placeholder", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L61", + "weight": 1.0, + "source": "ui_test_components_rationale_61", + "target": "ui_test_components_test_mode_badge_accepts_label_override", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L73", + "weight": 1.0, + "source": "ui_test_components_rationale_73", + "target": "ui_test_components_test_test_run_badge_uses_orange_aa_text", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L81", + "weight": 1.0, + "source": "ui_test_components_rationale_81", + "target": "ui_test_components_test_override_badge_active_uses_sky_aa_text", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L89", + "weight": 1.0, + "source": "ui_test_components_rationale_89", + "target": "ui_test_components_test_override_badge_inactive_uses_muted", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L117", + "weight": 1.0, + "source": "ui_test_components_rationale_117", + "target": "ui_test_components_test_sync_status_blocked_uses_warning", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L129", + "weight": 1.0, + "source": "ui_test_components_rationale_129", + "target": "ui_test_components_test_sync_status_cleaned_uses_success_with_cloud_icon", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L137", + "weight": 1.0, + "source": "ui_test_components_rationale_137", + "target": "ui_test_components_test_sync_status_acquiring_uses_muted", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L146", + "weight": 1.0, + "source": "ui_test_components_rationale_146", + "target": "ui_test_components_test_sync_status_syncing_uses_info", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L155", + "weight": 1.0, + "source": "ui_test_components_rationale_155", + "target": "ui_test_components_test_sync_status_on_nas_uses_muted_cloud", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L164", + "weight": 1.0, + "source": "ui_test_components_rationale_164", + "target": "ui_test_components_test_sync_status_retrying_with_counter", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L172", + "weight": 1.0, + "source": "ui_test_components_rationale_172", + "target": "ui_test_components_test_sync_status_unknown_raises", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L184", + "weight": 1.0, + "source": "ui_test_components_rationale_184", + "target": "ui_test_components_test_session_progress_phase_order_is_canonical", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L232", + "weight": 1.0, + "source": "ui_test_components_rationale_232", + "target": "ui_test_components_test_session_progress_active_phase_marked", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L245", + "weight": 1.0, + "source": "ui_test_components_rationale_245", + "target": "ui_test_components_test_session_progress_plugin_sub_row_present", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L292", + "weight": 1.0, + "source": "ui_test_components_rationale_292", + "target": "ui_test_components_test_begin_edit_from_not_set_enters_editing_remembering_not_set", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L302", + "weight": 1.0, + "source": "ui_test_components_rationale_302", + "target": "ui_test_components_test_begin_edit_from_set_remembers_set_as_resting", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L334", + "weight": 1.0, + "source": "ui_test_components_rationale_334", + "target": "ui_test_components_test_commit_edit_with_empty_value_stays_editing_and_skips_save", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L454", + "weight": 1.0, + "source": "ui_test_components_rationale_454", + "target": "ui_test_components_test_banner_stack_shows_visible_and_overflow_split", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L503", + "weight": 1.0, + "source": "ui_test_components_rationale_503", + "target": "ui_test_components_test_operations_modal_sort_suspended_first_oldest_first", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L603", + "weight": 1.0, + "source": "ui_test_components_test_collect_default_values_seeds_from_declared_defaults", + "target": "components_input_required_dialog_collect_default_values" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L610", + "weight": 1.0, + "source": "ui_test_components_test_input_required_dialog_builds_without_raising", + "target": "components_input_required_dialog_input_required_dialog" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L715", + "weight": 1.0, + "source": "ui_test_components_rationale_715", + "target": "ui_test_components_test_tree_filter_archived_default_off_hides_archived", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L735", + "weight": 1.0, + "source": "ui_test_components_rationale_735", + "target": "ui_test_components_test_tree_filter_deleted_always_shown", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L782", + "weight": 1.0, + "source": "ui_test_components_rationale_782", + "target": "ui_test_components_test_tree_run_node_propagates_sync_status", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L799", + "weight": 1.0, + "source": "ui_test_components_rationale_799", + "target": "ui_test_components_test_to_nicegui_nodes_cleared_run_uses_cloud_icon", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L824", + "weight": 1.0, + "source": "ui_test_components_rationale_824", + "target": "ui_test_components_test_to_nicegui_nodes_local_run_uses_local_icon", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L850", + "weight": 1.0, + "source": "ui_test_components_rationale_850", + "target": "ui_test_components_test_to_nicegui_nodes_equipment_and_project_have_no_sync_icon", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L872", + "weight": 1.0, + "source": "ui_test_components_rationale_872", + "target": "ui_test_components_test_equipment_node_relay_flag_emits_received_equipment_kind", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L886", + "weight": 1.0, + "source": "ui_test_components_rationale_886", + "target": "ui_test_components_test_to_nicegui_nodes_emits_testid_kind", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L910", + "weight": 1.0, + "source": "ui_test_components_rationale_910", + "target": "ui_test_components_test_slot_template_emits_testid_data_node_id_and_context_menus", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L950", + "weight": 1.0, + "source": "ui_test_components_rationale_950", + "target": "ui_test_components_test_factories_smoke_outside_nicegui", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_components.py", + "source_location": "L983", + "weight": 1.0, + "source": "ui_test_components_rationale_983", + "target": "ui_test_components_test_no_stray_ui_notify_calls_in_ui_package", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_welcome_card_spec_default_autostart_on", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L36", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_welcome_card_three_bullets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L56", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_main_default_chips_match_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L66", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_main_chip_state_to_tree_filters_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L76", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_main_problems_badge_simple_count_when_no_soft", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L81", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_main_problems_badge_compound_when_soft_present", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_main_setup_incomplete_banner_uses_warning", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L94", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_main_setup_banner_subline_tailored_for_nas_credentials", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L109", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_project_seven_steps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L117", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_project_can_advance_blocks_until_lims_picked", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L126", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_project_can_advance_blocks_until_template_picked", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L133", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_project_readme_requires_core_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L140", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_project_preview_blocks_with_validator_findings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L148", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_project_preview_blocks_with_low_disk", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L160", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_project_preview_blocks_when_plugin_host_unhealthy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L168", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_project_preview_passes_when_clear", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L182", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_run_six_steps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L186", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_run_test_mode_title", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L191", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_run_experimental_mode_title", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L196", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_run_test_button_uses_warning_color", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L204", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_run_experimental_button_uses_primary_color", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L210", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_run_preview_test_path_highlights", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L224", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_run_preview_experimental_no_test_marker", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L235", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_run_can_advance_blocks_until_project_and_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L243", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_wizard_run_readme_blocks_until_core_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L255", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_settings_nine_sections_includes_operators", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L268", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_settings_first_incomplete_returns_canonical_first", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L275", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_settings_first_incomplete_resolves_nas_credentials", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L283", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_settings_save_button_label_setup_incomplete", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L288", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_settings_save_button_label_no_changes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L293", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_settings_save_button_label_with_count_badge", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L298", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_settings_section_warning_only_for_incomplete", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L309", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_sample_findings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L336", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_problems_filter_default_shows_hard_only", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L345", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_problems_filter_show_soft_when_chip_on", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L352", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_problems_filter_search_path_substring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L358", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_problems_filter_scope_filters_by_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L364", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_problems_override_reason_min_length", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L372", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_problems_override_reason_max_length", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L381", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_problems_override_reason_accepts_valid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L387", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_problems_override_reason_trims_whitespace", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L394", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_problems_near_limit_flag", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L401", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_problems_empty_state_default", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L406", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_problems_empty_state_with_hidden_soft_count", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L412", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_problems_empty_state_with_active_filter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L418", + "weight": 1.0, + "source": "tests_unit_ui_test_pages_py", + "target": "ui_test_pages_test_problems_chip_definitions_match_spec", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_pages_rationale_1", + "target": "tests_unit_ui_test_pages_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L26", + "weight": 1.0, + "source": "ui_test_pages_rationale_26", + "target": "ui_test_pages_test_welcome_card_spec_default_autostart_on", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L37", + "weight": 1.0, + "source": "ui_test_pages_rationale_37", + "target": "ui_test_pages_test_welcome_card_three_bullets", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L57", + "weight": 1.0, + "source": "ui_test_pages_rationale_57", + "target": "ui_test_pages_test_main_default_chips_match_spec", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L67", + "weight": 1.0, + "source": "ui_test_pages_rationale_67", + "target": "ui_test_pages_test_main_chip_state_to_tree_filters_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L87", + "weight": 1.0, + "source": "ui_test_pages_rationale_87", + "target": "ui_test_pages_test_main_setup_incomplete_banner_uses_warning", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L95", + "weight": 1.0, + "source": "ui_test_pages_rationale_95", + "target": "ui_test_pages_test_main_setup_banner_subline_tailored_for_nas_credentials", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L110", + "weight": 1.0, + "source": "ui_test_pages_rationale_110", + "target": "ui_test_pages_test_wizard_project_seven_steps", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L118", + "weight": 1.0, + "source": "ui_test_pages_rationale_118", + "target": "ui_test_pages_test_wizard_project_can_advance_blocks_until_lims_picked", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L149", + "weight": 1.0, + "source": "ui_test_pages_rationale_149", + "target": "ui_test_pages_test_wizard_project_preview_blocks_with_low_disk", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L197", + "weight": 1.0, + "source": "ui_test_pages_rationale_197", + "target": "ui_test_pages_test_wizard_run_test_button_uses_warning_color", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L211", + "weight": 1.0, + "source": "ui_test_pages_rationale_211", + "target": "ui_test_pages_test_wizard_run_preview_test_path_highlights", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L256", + "weight": 1.0, + "source": "ui_test_pages_rationale_256", + "target": "ui_test_pages_test_settings_nine_sections_includes_operators", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L269", + "weight": 1.0, + "source": "ui_test_pages_rationale_269", + "target": "ui_test_pages_test_settings_first_incomplete_returns_canonical_first", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L276", + "weight": 1.0, + "source": "ui_test_pages_rationale_276", + "target": "ui_test_pages_test_settings_first_incomplete_resolves_nas_credentials", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L340", + "weight": 1.0, + "source": "ui_test_pages_test_problems_filter_default_shows_hard_only", + "target": "ui_test_pages_sample_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L348", + "weight": 1.0, + "source": "ui_test_pages_test_problems_filter_show_soft_when_chip_on", + "target": "ui_test_pages_sample_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L354", + "weight": 1.0, + "source": "ui_test_pages_test_problems_filter_search_path_substring", + "target": "ui_test_pages_sample_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L360", + "weight": 1.0, + "source": "ui_test_pages_test_problems_filter_scope_filters_by_equipment", + "target": "ui_test_pages_sample_findings", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L337", + "weight": 1.0, + "source": "ui_test_pages_rationale_337", + "target": "ui_test_pages_test_problems_filter_default_shows_hard_only", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L365", + "weight": 1.0, + "source": "ui_test_pages_rationale_365", + "target": "ui_test_pages_test_problems_override_reason_min_length", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L373", + "weight": 1.0, + "source": "ui_test_pages_rationale_373", + "target": "ui_test_pages_test_problems_override_reason_max_length", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L388", + "weight": 1.0, + "source": "ui_test_pages_rationale_388", + "target": "ui_test_pages_test_problems_override_reason_trims_whitespace", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L395", + "weight": 1.0, + "source": "ui_test_pages_rationale_395", + "target": "ui_test_pages_test_problems_near_limit_flag", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_pages.py", + "source_location": "L419", + "weight": 1.0, + "source": "ui_test_pages_rationale_419", + "target": "ui_test_pages_test_problems_chip_definitions_match_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L43", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L79", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_fluent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L98", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_fakeui", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L116", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_boomui", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L128", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_fakecontroller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L175", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_is_setup_ready_false_when_deps_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L179", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_is_setup_ready_false_when_config_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L183", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_is_setup_ready_false_when_keyring_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L194", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_is_setup_ready_false_when_lims_unreachable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L204", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_is_setup_ready_true_when_all_satisfied", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L214", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_is_setup_ready_false_when_nas_credential_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L225", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_is_setup_ready_true_with_offline_catalogue_lims", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L246", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_build_main_state_marks_incomplete_without_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L255", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_build_main_state_sources_problems_counts_from_audit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L263", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_build_main_state_always_on_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L281", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L302", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_operation_counts_zero_without_controller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L311", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_missing_sections_when_deps_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L315", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_missing_sections_when_config_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L322", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_missing_sections_with_paths_unset", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L331", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_missing_sections_with_keyring_absent_reports_lims", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L336", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_missing_sections_empty_when_fully_configured", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L341", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_nas_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L385", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_missing_sections_includes_nas_credentials_when_password_absent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L394", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_missing_sections_excludes_nas_credentials_when_password_present", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L408", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_raisingvalidator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L414", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_okvalidator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L422", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_safe_audit_returns_empty_list_when_validator_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L426", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_safe_audit_swallows_validator_exception", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L434", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_safe_audit_forwards_validator_output", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L445", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_staging_state_when_staging_root_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L460", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_staging_state_none_when_no_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L464", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_staging_state_returns_empty_rows_on_query_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L492", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L500", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_persist_config_writes_and_applies_live", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L523", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_persist_config_returns_false_when_no_saver", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L535", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_persist_config_returns_false_when_saver_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L552", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L575", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_persist_config_creates_staging_root_when_set", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L590", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L604", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L630", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_apply_live_config_falls_back_to_setting_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L656", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_render_unavailable_renders_headline_and_subline", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L663", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_render_unavailable_swallows_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L674", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_show_toast_positive_and_negative_never_raise", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L681", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_show_toast_swallows_notification_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L700", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_recordingkeyringstore", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L721", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_lims_credential_handlers_save_writes_under_lims_username", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L730", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_lims_credential_handlers_clear_deletes_under_lims_username", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L739", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_lims_credential_handlers_tolerate_missing_keyring_store", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L748", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_lims_credential_handlers_swallow_backend_errors", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L763", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_nas_credential_handlers_save_writes_under_nas_username", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L779", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_nas_credential_handlers_clear_deletes_and_discards", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L793", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_nas_credential_handlers_isolate_per_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L806", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_nas_credential_handlers_tolerate_missing_keyring_store", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L819", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_apply_autostart_noop_when_deps_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L823", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_apply_autostart_noop_when_toggle_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L827", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_apply_autostart_invokes_toggle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L834", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_apply_autostart_returns_real_registration_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L843", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_apply_autostart_swallows_toggle_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L860", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_templates_dir_none_when_deps_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L864", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_templates_dir_none_when_config_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L868", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_templates_dir_none_when_unset", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L872", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_templates_dir_returns_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L877", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_equipment_ids_empty_without_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L881", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_equipment_ids_lists_configured_ids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L893", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_template_names_empty_without_templates_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L897", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_template_names_lists_summary_names", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L909", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_template_names_swallows_scan_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L929", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_lims_projects_empty_without_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L933", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_lims_projects_empty_without_catalogue_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L937", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_lims_projects_empty_when_catalogue_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L942", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_lims_projects_reads_offline_catalogue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L963", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_lims_projects_swallows_read_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L980", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_fakelimsclient", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L996", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_lims_projects_uses_live_lims", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1010", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_lims_projects_skips_live_lims_when_unreachable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1017", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1052", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_template_questions_map_empty_without_templates_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1056", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_template_questions_map_resolves_questions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1077", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1102", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_await_session_awaits_pending_task", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1115", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_await_session_without_pending_task", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1127", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_run_creation_navigates_home_on_done", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1134", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_run_creation_reports_failure_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1142", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_run_creation_swallows_create_exception", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1160", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_submit_project_toasts_when_controller_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1166", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_submit_project_toasts_without_template", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1174", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_submit_project_builds_request_and_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1195", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_submit_run_toasts_when_controller_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1201", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_submit_run_builds_request_and_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1226", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_build_main_query_omits_empty_params", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1234", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_build_main_query_url_encodes_special_chars", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1246", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_classify_node_returns_none_for_empty_selection", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1251", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_classify_node_discriminates_kinds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1272", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_classify_node_rejects_unknown_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1288", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_build_metadata_payload_returns_empty_when_node_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1294", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_build_metadata_payload_owned_equipment_reads_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1312", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_build_metadata_payload_unknown_equipment_id_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1319", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1338", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1383", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1392", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_build_main_state_threads_selection_into_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1408", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_open_in_os_returns_false_on_unhandled_platform", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1416", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_open_in_os_linux_invokes_xdg_open", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1430", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_open_in_os_darwin_invokes_open", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1439", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_open_in_os_returns_false_when_popen_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1455", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_clipboardspy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1463", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1486", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_file_context_action_open_in_os_dispatches_to_helper", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1498", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_file_context_action_open_in_os_failure_toasts_negative", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1509", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_file_context_action_copy_path_writes_clipboard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1517", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_file_context_action_unknown_action_no_raise", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1524", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_file_context_action_empty_path_toasts_negative", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1535", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1544", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_drain_background", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1559", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1572", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_run_staging_action_force_sync_missing_nas_sync_toasts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1579", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_run_staging_action_no_config_toasts_negative", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1586", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1598", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_run_staging_action_unknown_action_no_raise", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1605", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1630", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1659", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_bulk_clear_verified_no_config_toasts_and_returns", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1666", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1688", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_stubtabstorage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1692", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_stubapp", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1703", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_drive_folder_feed_returns_empty_when_no_selection", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1711", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_drive_folder_feed_creates_feed_on_first_render", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1724", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1766", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_fetch_folder_async_skips_when_coord_says_skip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1783", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_fetch_folder_async_records_refresh_on_success", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1802", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_fetch_folder_async_swallows_helper_exceptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1820", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_open_log_dialog_no_queue_job_renders_dialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1829", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1855", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_build_metadata_payload_returns_empty_on_builder_exception", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1868", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_metadata_for_relay_equipment_emits_id_label_source_host", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1886", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_metadata_for_relay_equipment_unknown_id_falls_back", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1893", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_metadata_for_project_returns_empty_for_single_segment_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1899", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_count_dir_children_returns_zero_for_missing_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1904", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_count_dir_children_filters_by_prefix", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1913", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_metadata_for_run_returns_partial_on_decode_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1924", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1940", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1956", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1969", + "weight": 1.0, + "source": "tests_unit_ui_test_mount_py", + "target": "ui_test_mount_test_file_context_action_clipboard_failure_toasts", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_mount_rationale_1", + "target": "tests_unit_ui_test_mount_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L180", + "weight": 1.0, + "source": "ui_test_mount_test_is_setup_ready_false_when_config_missing", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L185", + "weight": 1.0, + "source": "ui_test_mount_test_is_setup_ready_false_when_keyring_missing", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L195", + "weight": 1.0, + "source": "ui_test_mount_test_is_setup_ready_false_when_lims_unreachable", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L205", + "weight": 1.0, + "source": "ui_test_mount_test_is_setup_ready_true_when_all_satisfied", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L216", + "weight": 1.0, + "source": "ui_test_mount_test_is_setup_ready_false_when_nas_credential_missing", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L232", + "weight": 1.0, + "source": "ui_test_mount_test_is_setup_ready_true_with_offline_catalogue_lims", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L247", + "weight": 1.0, + "source": "ui_test_mount_test_build_main_state_marks_incomplete_without_config", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L258", + "weight": 1.0, + "source": "ui_test_mount_test_build_main_state_sources_problems_counts_from_audit", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L265", + "weight": 1.0, + "source": "ui_test_mount_test_build_main_state_always_on_orchestrator", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L319", + "weight": 1.0, + "source": "ui_test_mount_test_missing_sections_when_config_none", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L323", + "weight": 1.0, + "source": "ui_test_mount_test_missing_sections_with_paths_unset", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L332", + "weight": 1.0, + "source": "ui_test_mount_test_missing_sections_with_keyring_absent_reports_lims", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L337", + "weight": 1.0, + "source": "ui_test_mount_test_missing_sections_empty_when_fully_configured", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L386", + "weight": 1.0, + "source": "ui_test_mount_test_missing_sections_includes_nas_credentials_when_password_absent", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L395", + "weight": 1.0, + "source": "ui_test_mount_test_missing_sections_excludes_nas_credentials_when_password_present", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L423", + "weight": 1.0, + "source": "ui_test_mount_test_safe_audit_returns_empty_list_when_validator_missing", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L427", + "weight": 1.0, + "source": "ui_test_mount_test_safe_audit_swallows_validator_exception", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L436", + "weight": 1.0, + "source": "ui_test_mount_test_safe_audit_forwards_validator_output", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L448", + "weight": 1.0, + "source": "ui_test_mount_test_staging_state_when_staging_root_missing", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L461", + "weight": 1.0, + "source": "ui_test_mount_test_staging_state_none_when_no_config", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L467", + "weight": 1.0, + "source": "ui_test_mount_test_staging_state_returns_empty_rows_on_query_failure", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L511", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_writes_and_applies_live", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L527", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_returns_false_when_no_saver", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L544", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_returns_false_when_saver_raises", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L564", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L582", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_creates_staging_root_when_set", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L596", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L621", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L641", + "weight": 1.0, + "source": "ui_test_mount_test_apply_live_config_falls_back_to_setting_config", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L723", + "weight": 1.0, + "source": "ui_test_mount_test_lims_credential_handlers_save_writes_under_lims_username", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L732", + "weight": 1.0, + "source": "ui_test_mount_test_lims_credential_handlers_clear_deletes_under_lims_username", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L742", + "weight": 1.0, + "source": "ui_test_mount_test_lims_credential_handlers_tolerate_missing_keyring_store", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L752", + "weight": 1.0, + "source": "ui_test_mount_test_lims_credential_handlers_swallow_backend_errors", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L768", + "weight": 1.0, + "source": "ui_test_mount_test_nas_credential_handlers_save_writes_under_nas_username", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L784", + "weight": 1.0, + "source": "ui_test_mount_test_nas_credential_handlers_clear_deletes_and_discards", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L796", + "weight": 1.0, + "source": "ui_test_mount_test_nas_credential_handlers_isolate_per_equipment_id", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L808", + "weight": 1.0, + "source": "ui_test_mount_test_nas_credential_handlers_tolerate_missing_keyring_store", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L824", + "weight": 1.0, + "source": "ui_test_mount_test_apply_autostart_noop_when_toggle_missing", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L829", + "weight": 1.0, + "source": "ui_test_mount_test_apply_autostart_invokes_toggle", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L837", + "weight": 1.0, + "source": "ui_test_mount_test_apply_autostart_returns_real_registration_state", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L851", + "weight": 1.0, + "source": "ui_test_mount_test_apply_autostart_swallows_toggle_failure", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L865", + "weight": 1.0, + "source": "ui_test_mount_test_templates_dir_none_when_config_none", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L869", + "weight": 1.0, + "source": "ui_test_mount_test_templates_dir_none_when_unset", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L873", + "weight": 1.0, + "source": "ui_test_mount_test_templates_dir_returns_path", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L878", + "weight": 1.0, + "source": "ui_test_mount_test_equipment_ids_empty_without_config", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L882", + "weight": 1.0, + "source": "ui_test_mount_test_equipment_ids_lists_configured_ids", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L894", + "weight": 1.0, + "source": "ui_test_mount_test_template_names_empty_without_templates_dir", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L905", + "weight": 1.0, + "source": "ui_test_mount_test_template_names_lists_summary_names", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L920", + "weight": 1.0, + "source": "ui_test_mount_test_template_names_swallows_scan_failure", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L930", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_empty_without_config", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L934", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_empty_without_catalogue_path", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L938", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_empty_when_catalogue_missing", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L952", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_reads_offline_catalogue", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L974", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_swallows_read_failure", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L998", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_uses_live_lims", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1012", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_skips_live_lims_when_unreachable", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1028", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1053", + "weight": 1.0, + "source": "ui_test_mount_test_template_questions_map_empty_without_templates_dir", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1073", + "weight": 1.0, + "source": "ui_test_mount_test_template_questions_map_resolves_questions", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1093", + "weight": 1.0, + "source": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1162", + "weight": 1.0, + "source": "ui_test_mount_test_submit_project_toasts_when_controller_missing", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1169", + "weight": 1.0, + "source": "ui_test_mount_test_submit_project_toasts_without_template", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1177", + "weight": 1.0, + "source": "ui_test_mount_test_submit_project_builds_request_and_runs", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1197", + "weight": 1.0, + "source": "ui_test_mount_test_submit_run_toasts_when_controller_missing", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1204", + "weight": 1.0, + "source": "ui_test_mount_test_submit_run_builds_request_and_runs", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1290", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_returns_empty_when_node_missing", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1304", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_owned_equipment_reads_config", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1315", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_unknown_equipment_id_returns_empty", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1332", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1373", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1388", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1395", + "weight": 1.0, + "source": "ui_test_mount_test_build_main_state_threads_selection_into_state", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1562", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1574", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_force_sync_missing_nas_sync_toasts", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1581", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_no_config_toasts_negative", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1592", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1600", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_unknown_action_no_raise", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1616", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1649", + "weight": 1.0, + "source": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1661", + "weight": 1.0, + "source": "ui_test_mount_test_bulk_clear_verified_no_config_toasts_and_returns", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1675", + "weight": 1.0, + "source": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1706", + "weight": 1.0, + "source": "ui_test_mount_test_drive_folder_feed_returns_empty_when_no_selection", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1718", + "weight": 1.0, + "source": "ui_test_mount_test_drive_folder_feed_creates_feed_on_first_render", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1755", + "weight": 1.0, + "source": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1778", + "weight": 1.0, + "source": "ui_test_mount_test_fetch_folder_async_skips_when_coord_says_skip", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1797", + "weight": 1.0, + "source": "ui_test_mount_test_fetch_folder_async_records_refresh_on_success", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1811", + "weight": 1.0, + "source": "ui_test_mount_test_fetch_folder_async_swallows_helper_exceptions", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1823", + "weight": 1.0, + "source": "ui_test_mount_test_open_log_dialog_no_queue_job_renders_dialog", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1844", + "weight": 1.0, + "source": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1864", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_returns_empty_on_builder_exception", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1933", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1949", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1962", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L30", + "weight": 1.0, + "source": "ui_test_mount_rationale_30", + "target": "ui_test_mount_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L266", + "weight": 1.0, + "source": "ui_test_mount_test_build_main_state_always_on_orchestrator", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L324", + "weight": 1.0, + "source": "ui_test_mount_test_missing_sections_with_paths_unset", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L332", + "weight": 1.0, + "source": "ui_test_mount_test_missing_sections_with_keyring_absent_reports_lims", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L337", + "weight": 1.0, + "source": "ui_test_mount_test_missing_sections_empty_when_fully_configured", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L449", + "weight": 1.0, + "source": "ui_test_mount_test_staging_state_when_staging_root_missing", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L468", + "weight": 1.0, + "source": "ui_test_mount_test_staging_state_returns_empty_rows_on_query_failure", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L581", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_creates_staging_root_when_set", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L595", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L620", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L869", + "weight": 1.0, + "source": "ui_test_mount_test_templates_dir_none_when_unset", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L873", + "weight": 1.0, + "source": "ui_test_mount_test_templates_dir_returns_path", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L883", + "weight": 1.0, + "source": "ui_test_mount_test_equipment_ids_lists_configured_ids", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L905", + "weight": 1.0, + "source": "ui_test_mount_test_template_names_lists_summary_names", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L920", + "weight": 1.0, + "source": "ui_test_mount_test_template_names_swallows_scan_failure", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L934", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_empty_without_catalogue_path", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L938", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_empty_when_catalogue_missing", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L952", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_reads_offline_catalogue", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L974", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_swallows_read_failure", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L998", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_uses_live_lims", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1012", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_skips_live_lims_when_unreachable", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1029", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1073", + "weight": 1.0, + "source": "ui_test_mount_test_template_questions_map_resolves_questions", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1093", + "weight": 1.0, + "source": "ui_test_mount_test_template_questions_map_skips_unresolvable_template", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1169", + "weight": 1.0, + "source": "ui_test_mount_test_submit_project_toasts_without_template", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1177", + "weight": 1.0, + "source": "ui_test_mount_test_submit_project_builds_request_and_runs", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1204", + "weight": 1.0, + "source": "ui_test_mount_test_submit_run_builds_request_and_runs", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1303", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_owned_equipment_reads_config", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1314", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_unknown_equipment_id_returns_empty", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1331", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1372", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1387", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1562", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1574", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_force_sync_missing_nas_sync_toasts", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1592", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1600", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_unknown_action_no_raise", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1616", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1649", + "weight": 1.0, + "source": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1675", + "weight": 1.0, + "source": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1864", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_returns_empty_on_builder_exception", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1878", + "weight": 1.0, + "source": "ui_test_mount_test_metadata_for_relay_equipment_emits_id_label_source_host", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1888", + "weight": 1.0, + "source": "ui_test_mount_test_metadata_for_relay_equipment_unknown_id_falls_back", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1895", + "weight": 1.0, + "source": "ui_test_mount_test_metadata_for_project_returns_empty_for_single_segment_id", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1933", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1949", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1962", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", + "target": "ui_test_mount_config", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L82", + "weight": 1.0, + "source": "ui_test_mount_fluent", + "target": "ui_test_mount_fluent_props", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L85", + "weight": 1.0, + "source": "ui_test_mount_fluent", + "target": "ui_test_mount_fluent_style", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L88", + "weight": 1.0, + "source": "ui_test_mount_fluent", + "target": "ui_test_mount_fluent_classes", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L91", + "weight": 1.0, + "source": "ui_test_mount_fluent", + "target": "ui_test_mount_fluent_enter", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L94", + "weight": 1.0, + "source": "ui_test_mount_fluent", + "target": "ui_test_mount_fluent_exit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L109", + "weight": 1.0, + "source": "ui_test_mount_fakeui_card", + "target": "ui_test_mount_fluent", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L113", + "weight": 1.0, + "source": "ui_test_mount_fakeui_label", + "target": "ui_test_mount_fluent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L80", + "weight": 1.0, + "source": "ui_test_mount_rationale_80", + "target": "ui_test_mount_fluent", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_fluent", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fluent", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fluent", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fluent", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fluent", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fluent", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fluent", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fluent", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fluent", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fluent", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fluent", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_fluent", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_fluent", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L101", + "weight": 1.0, + "source": "ui_test_mount_fakeui", + "target": "ui_test_mount_fakeui_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L107", + "weight": 1.0, + "source": "ui_test_mount_fakeui", + "target": "ui_test_mount_fakeui_card", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L111", + "weight": 1.0, + "source": "ui_test_mount_fakeui", + "target": "ui_test_mount_fakeui_label", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L657", + "weight": 1.0, + "source": "ui_test_mount_test_render_unavailable_renders_headline_and_subline", + "target": "ui_test_mount_fakeui", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L99", + "weight": 1.0, + "source": "ui_test_mount_rationale_99", + "target": "ui_test_mount_fakeui", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_fakeui", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakeui", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakeui", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakeui", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakeui", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakeui", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakeui", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fakeui", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fakeui", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fakeui", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fakeui", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_fakeui", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_fakeui", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L119", + "weight": 1.0, + "source": "ui_test_mount_boomui", + "target": "ui_test_mount_boomui_card", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L123", + "weight": 1.0, + "source": "ui_test_mount_boomui", + "target": "ui_test_mount_boomui_label", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L665", + "weight": 1.0, + "source": "ui_test_mount_test_render_unavailable_swallows_failure", + "target": "ui_test_mount_boomui", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L117", + "weight": 1.0, + "source": "ui_test_mount_rationale_117", + "target": "ui_test_mount_boomui", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_boomui", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_boomui", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_boomui", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_boomui", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_boomui", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_boomui", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_boomui", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_boomui", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_boomui", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_boomui", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_boomui", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_boomui", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_boomui", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L131", + "weight": 1.0, + "source": "ui_test_mount_fakecontroller", + "target": "ui_test_mount_fakecontroller_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L147", + "weight": 1.0, + "source": "ui_test_mount_fakecontroller", + "target": "ui_test_mount_fakecontroller_status", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L150", + "weight": 1.0, + "source": "ui_test_mount_fakecontroller", + "target": "ui_test_mount_fakecontroller_create_project", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L157", + "weight": 1.0, + "source": "ui_test_mount_fakecontroller", + "target": "ui_test_mount_fakecontroller_create_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1108", + "weight": 1.0, + "source": "ui_test_mount_test_await_session_awaits_pending_task", + "target": "ui_test_mount_fakecontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1116", + "weight": 1.0, + "source": "ui_test_mount_test_await_session_without_pending_task", + "target": "ui_test_mount_fakecontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1129", + "weight": 1.0, + "source": "ui_test_mount_test_run_creation_navigates_home_on_done", + "target": "ui_test_mount_fakecontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1137", + "weight": 1.0, + "source": "ui_test_mount_test_run_creation_reports_failure_state", + "target": "ui_test_mount_fakecontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1146", + "weight": 1.0, + "source": "ui_test_mount_test_run_creation_swallows_create_exception", + "target": "ui_test_mount_fakecontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1168", + "weight": 1.0, + "source": "ui_test_mount_test_submit_project_toasts_without_template", + "target": "ui_test_mount_fakecontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1176", + "weight": 1.0, + "source": "ui_test_mount_test_submit_project_builds_request_and_runs", + "target": "ui_test_mount_fakecontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1203", + "weight": 1.0, + "source": "ui_test_mount_test_submit_run_builds_request_and_runs", + "target": "ui_test_mount_fakecontroller", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L129", + "weight": 1.0, + "source": "ui_test_mount_rationale_129", + "target": "ui_test_mount_fakecontroller", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_fakecontroller", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakecontroller", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakecontroller", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakecontroller", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakecontroller", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakecontroller", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakecontroller", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fakecontroller", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fakecontroller", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fakecontroller", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fakecontroller", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_fakecontroller", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_fakecontroller", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L158", + "weight": 1.0, + "source": "ui_test_mount_fakecontroller_create_run", + "target": "ui_test_mount_fakecontroller_create_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L186", + "weight": 1.0, + "source": "ui_test_mount_test_is_setup_ready_false_when_keyring_missing", + "target": "ui_test_mount_nas_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L184", + "weight": 1.0, + "source": "ui_test_mount_rationale_184", + "target": "ui_test_mount_test_is_setup_ready_false_when_keyring_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L196", + "weight": 1.0, + "source": "ui_test_mount_test_is_setup_ready_false_when_lims_unreachable", + "target": "ui_test_mount_nas_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L206", + "weight": 1.0, + "source": "ui_test_mount_test_is_setup_ready_true_when_all_satisfied", + "target": "ui_test_mount_nas_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L217", + "weight": 1.0, + "source": "ui_test_mount_test_is_setup_ready_false_when_nas_credential_missing", + "target": "ui_test_mount_nas_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L215", + "weight": 1.0, + "source": "ui_test_mount_rationale_215", + "target": "ui_test_mount_test_is_setup_ready_false_when_nas_credential_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L233", + "weight": 1.0, + "source": "ui_test_mount_test_is_setup_ready_true_with_offline_catalogue_lims", + "target": "ui_test_mount_nas_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L226", + "weight": 1.0, + "source": "ui_test_mount_rationale_226", + "target": "ui_test_mount_test_is_setup_ready_true_with_offline_catalogue_lims", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L264", + "weight": 1.0, + "source": "ui_test_mount_rationale_264", + "target": "ui_test_mount_test_build_main_state_always_on_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L284", + "weight": 1.0, + "source": "ui_test_mount_test_operation_counts_distinguishes_panel_active_and_input_required", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L387", + "weight": 1.0, + "source": "ui_test_mount_test_missing_sections_includes_nas_credentials_when_password_absent", + "target": "ui_test_mount_nas_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L396", + "weight": 1.0, + "source": "ui_test_mount_test_missing_sections_excludes_nas_credentials_when_password_present", + "target": "ui_test_mount_nas_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L342", + "weight": 1.0, + "source": "ui_test_mount_rationale_342", + "target": "ui_test_mount_nas_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L360", + "weight": 1.0, + "source": "ui_test_mount_nas_config", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L365", + "weight": 1.0, + "source": "ui_test_mount_nas_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L368", + "weight": 1.0, + "source": "ui_test_mount_nas_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L373", + "weight": 1.0, + "source": "ui_test_mount_nas_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L381", + "weight": 1.0, + "source": "ui_test_mount_nas_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L409", + "weight": 1.0, + "source": "ui_test_mount_raisingvalidator", + "target": "ui_test_mount_raisingvalidator_audit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L427", + "weight": 1.0, + "source": "ui_test_mount_test_safe_audit_swallows_validator_exception", + "target": "ui_test_mount_raisingvalidator", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_raisingvalidator", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_raisingvalidator", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_raisingvalidator", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_raisingvalidator", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_raisingvalidator", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_raisingvalidator", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_raisingvalidator", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_raisingvalidator", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_raisingvalidator", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_raisingvalidator", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_raisingvalidator", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_raisingvalidator", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_raisingvalidator", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L415", + "weight": 1.0, + "source": "ui_test_mount_okvalidator", + "target": "ui_test_mount_okvalidator_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L418", + "weight": 1.0, + "source": "ui_test_mount_okvalidator", + "target": "ui_test_mount_okvalidator_audit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L436", + "weight": 1.0, + "source": "ui_test_mount_test_safe_audit_forwards_validator_output", + "target": "ui_test_mount_okvalidator", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_okvalidator", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_okvalidator", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_okvalidator", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_okvalidator", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_okvalidator", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_okvalidator", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_okvalidator", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_okvalidator", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_okvalidator", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_okvalidator", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_okvalidator", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_okvalidator", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_okvalidator", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L446", + "weight": 1.0, + "source": "ui_test_mount_rationale_446", + "target": "ui_test_mount_test_staging_state_when_staging_root_missing", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L495", + "weight": 1.0, + "source": "ui_test_mount_navspy", + "target": "ui_test_mount_navspy_init", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L507", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_writes_and_applies_live", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L524", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_returns_false_when_no_saver", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L536", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_returns_false_when_saver_raises", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L556", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_warns_when_saver_returns_awaitable", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L584", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_creates_staging_root_when_set", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L598", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L623", + "weight": 1.0, + "source": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1128", + "weight": 1.0, + "source": "ui_test_mount_test_run_creation_navigates_home_on_done", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1135", + "weight": 1.0, + "source": "ui_test_mount_test_run_creation_reports_failure_state", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1145", + "weight": 1.0, + "source": "ui_test_mount_test_run_creation_swallows_create_exception", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1161", + "weight": 1.0, + "source": "ui_test_mount_test_submit_project_toasts_when_controller_missing", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1167", + "weight": 1.0, + "source": "ui_test_mount_test_submit_project_toasts_without_template", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1175", + "weight": 1.0, + "source": "ui_test_mount_test_submit_project_builds_request_and_runs", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1196", + "weight": 1.0, + "source": "ui_test_mount_test_submit_run_toasts_when_controller_missing", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1202", + "weight": 1.0, + "source": "ui_test_mount_test_submit_run_builds_request_and_runs", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L493", + "weight": 1.0, + "source": "ui_test_mount_rationale_493", + "target": "ui_test_mount_navspy", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_navspy", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_navspy", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_navspy", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_navspy", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_navspy", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_navspy", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_navspy", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_navspy", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_navspy", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_navspy", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_navspy", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_navspy", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_navspy", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L501", + "weight": 1.0, + "source": "ui_test_mount_rationale_501", + "target": "ui_test_mount_test_persist_config_writes_and_applies_live", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L578", + "weight": 1.0, + "source": "ui_test_mount_rationale_578", + "target": "ui_test_mount_test_persist_config_creates_staging_root_when_set", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L593", + "weight": 1.0, + "source": "ui_test_mount_rationale_593", + "target": "ui_test_mount_test_persist_config_does_not_create_staging_root_when_blank", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L607", + "weight": 1.0, + "source": "ui_test_mount_rationale_607", + "target": "ui_test_mount_test_persist_config_staging_dir_failure_is_non_fatal", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L634", + "weight": 1.0, + "source": "ui_test_mount_rationale_634", + "target": "ui_test_mount_test_apply_live_config_falls_back_to_setting_config", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L703", + "weight": 1.0, + "source": "ui_test_mount_recordingkeyringstore", + "target": "ui_test_mount_recordingkeyringstore_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L708", + "weight": 1.0, + "source": "ui_test_mount_recordingkeyringstore", + "target": "ui_test_mount_recordingkeyringstore_set_password", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L714", + "weight": 1.0, + "source": "ui_test_mount_recordingkeyringstore", + "target": "ui_test_mount_recordingkeyringstore_delete_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L722", + "weight": 1.0, + "source": "ui_test_mount_test_lims_credential_handlers_save_writes_under_lims_username", + "target": "ui_test_mount_recordingkeyringstore", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L731", + "weight": 1.0, + "source": "ui_test_mount_test_lims_credential_handlers_clear_deletes_under_lims_username", + "target": "ui_test_mount_recordingkeyringstore", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L751", + "weight": 1.0, + "source": "ui_test_mount_test_lims_credential_handlers_swallow_backend_errors", + "target": "ui_test_mount_recordingkeyringstore", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L766", + "weight": 1.0, + "source": "ui_test_mount_test_nas_credential_handlers_save_writes_under_nas_username", + "target": "ui_test_mount_recordingkeyringstore", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L782", + "weight": 1.0, + "source": "ui_test_mount_test_nas_credential_handlers_clear_deletes_and_discards", + "target": "ui_test_mount_recordingkeyringstore", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L794", + "weight": 1.0, + "source": "ui_test_mount_test_nas_credential_handlers_isolate_per_equipment_id", + "target": "ui_test_mount_recordingkeyringstore", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L701", + "weight": 1.0, + "source": "ui_test_mount_rationale_701", + "target": "ui_test_mount_recordingkeyringstore", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_recordingkeyringstore", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_recordingkeyringstore", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_recordingkeyringstore", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_recordingkeyringstore", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_recordingkeyringstore", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_recordingkeyringstore", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_recordingkeyringstore", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_recordingkeyringstore", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_recordingkeyringstore", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_recordingkeyringstore", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_recordingkeyringstore", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_recordingkeyringstore", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_recordingkeyringstore", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L740", + "weight": 1.0, + "source": "ui_test_mount_rationale_740", + "target": "ui_test_mount_test_lims_credential_handlers_tolerate_missing_keyring_store", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L749", + "weight": 1.0, + "source": "ui_test_mount_rationale_749", + "target": "ui_test_mount_test_lims_credential_handlers_swallow_backend_errors", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L773", + "weight": 1.0, + "source": "ui_test_mount_test_nas_credential_handlers_save_writes_under_nas_username", + "target": "constants_keyring_keyring_nas_username" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L789", + "weight": 1.0, + "source": "ui_test_mount_test_nas_credential_handlers_clear_deletes_and_discards", + "target": "constants_keyring_keyring_nas_username" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L983", + "weight": 1.0, + "source": "ui_test_mount_fakelimsclient", + "target": "ui_test_mount_fakelimsclient_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L988", + "weight": 1.0, + "source": "ui_test_mount_fakelimsclient", + "target": "ui_test_mount_fakelimsclient_list_projects", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L997", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_uses_live_lims", + "target": "ui_test_mount_fakelimsclient", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1011", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_skips_live_lims_when_unreachable", + "target": "ui_test_mount_fakelimsclient", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1027", + "weight": 1.0, + "source": "ui_test_mount_test_lims_projects_falls_back_to_catalogue_on_live_failure", + "target": "ui_test_mount_fakelimsclient", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L981", + "weight": 1.0, + "source": "ui_test_mount_rationale_981", + "target": "ui_test_mount_fakelimsclient", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_fakelimsclient", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakelimsclient", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakelimsclient", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakelimsclient", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakelimsclient", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakelimsclient", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_fakelimsclient", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fakelimsclient", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fakelimsclient", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fakelimsclient", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_fakelimsclient", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_fakelimsclient", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_fakelimsclient", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1227", + "weight": 1.0, + "source": "ui_test_mount_rationale_1227", + "target": "ui_test_mount_test_build_main_query_omits_empty_params", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1235", + "weight": 1.0, + "source": "ui_test_mount_rationale_1235", + "target": "ui_test_mount_test_build_main_query_url_encodes_special_chars", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1252", + "weight": 1.0, + "source": "ui_test_mount_rationale_1252", + "target": "ui_test_mount_test_classify_node_discriminates_kinds", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1273", + "weight": 1.0, + "source": "ui_test_mount_rationale_1273", + "target": "ui_test_mount_test_classify_node_rejects_unknown_root", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1295", + "weight": 1.0, + "source": "ui_test_mount_rationale_1295", + "target": "ui_test_mount_test_build_metadata_payload_owned_equipment_reads_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1313", + "weight": 1.0, + "source": "ui_test_mount_rationale_1313", + "target": "ui_test_mount_test_build_metadata_payload_unknown_equipment_id_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1320", + "weight": 1.0, + "source": "ui_test_mount_rationale_1320", + "target": "ui_test_mount_test_build_metadata_payload_project_scans_run_counts", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1339", + "weight": 1.0, + "source": "ui_test_mount_rationale_1339", + "target": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1355", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1361", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1364", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1368", + "weight": 1.0, + "source": "ui_test_mount_test_build_metadata_payload_run_parses_creation_json", + "target": "api_schemas_pathsblock" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1384", + "weight": 1.0, + "source": "ui_test_mount_rationale_1384", + "target": "ui_test_mount_test_build_metadata_payload_run_missing_creation_returns_path_only", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1393", + "weight": 1.0, + "source": "ui_test_mount_rationale_1393", + "target": "ui_test_mount_test_build_main_state_threads_selection_into_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1411", + "weight": 1.0, + "source": "ui_test_mount_rationale_1411", + "target": "ui_test_mount_test_open_in_os_returns_false_on_unhandled_platform", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1417", + "weight": 1.0, + "source": "ui_test_mount_rationale_1417", + "target": "ui_test_mount_test_open_in_os_linux_invokes_xdg_open", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1431", + "weight": 1.0, + "source": "ui_test_mount_rationale_1431", + "target": "ui_test_mount_test_open_in_os_darwin_invokes_open", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1440", + "weight": 1.0, + "source": "ui_test_mount_rationale_1440", + "target": "ui_test_mount_test_open_in_os_returns_false_when_popen_raises", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1456", + "weight": 1.0, + "source": "ui_test_mount_clipboardspy", + "target": "ui_test_mount_clipboardspy_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1459", + "weight": 1.0, + "source": "ui_test_mount_clipboardspy", + "target": "ui_test_mount_clipboardspy_write", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1468", + "weight": 1.0, + "source": "ui_test_mount_uispy_init", + "target": "ui_test_mount_clipboardspy", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_clipboardspy", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_clipboardspy", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_clipboardspy", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_clipboardspy", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_clipboardspy", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_clipboardspy", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_clipboardspy", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_clipboardspy", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_clipboardspy", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_clipboardspy", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_clipboardspy", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_clipboardspy", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_clipboardspy", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1466", + "weight": 1.0, + "source": "ui_test_mount_uispy", + "target": "ui_test_mount_uispy_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1479", + "weight": 1.0, + "source": "ui_test_mount_uispy", + "target": "ui_test_mount_uispy_getattr", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1492", + "weight": 1.0, + "source": "ui_test_mount_test_file_context_action_open_in_os_dispatches_to_helper", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1503", + "weight": 1.0, + "source": "ui_test_mount_test_file_context_action_open_in_os_failure_toasts_negative", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1511", + "weight": 1.0, + "source": "ui_test_mount_test_file_context_action_copy_path_writes_clipboard", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1519", + "weight": 1.0, + "source": "ui_test_mount_test_file_context_action_unknown_action_no_raise", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1526", + "weight": 1.0, + "source": "ui_test_mount_test_file_context_action_empty_path_toasts_negative", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1563", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1575", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_force_sync_missing_nas_sync_toasts", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1582", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_no_config_toasts_negative", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1593", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1601", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_unknown_action_no_raise", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1617", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1650", + "weight": 1.0, + "source": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1662", + "weight": 1.0, + "source": "ui_test_mount_test_bulk_clear_verified_no_config_toasts_and_returns", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1676", + "weight": 1.0, + "source": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1822", + "weight": 1.0, + "source": "ui_test_mount_test_open_log_dialog_no_queue_job_renders_dialog", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1843", + "weight": 1.0, + "source": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1934", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1950", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1963", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1978", + "weight": 1.0, + "source": "ui_test_mount_test_file_context_action_clipboard_failure_toasts", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1464", + "weight": 1.0, + "source": "ui_test_mount_rationale_1464", + "target": "ui_test_mount_uispy", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_uispy", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_uispy", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_uispy", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_uispy", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_uispy", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_uispy", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_uispy", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_uispy", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_uispy", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_uispy", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_uispy", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_uispy", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_uispy", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1489", + "weight": 1.0, + "source": "ui_test_mount_rationale_1489", + "target": "ui_test_mount_test_file_context_action_open_in_os_dispatches_to_helper", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1501", + "weight": 1.0, + "source": "ui_test_mount_rationale_1501", + "target": "ui_test_mount_test_file_context_action_open_in_os_failure_toasts_negative", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1510", + "weight": 1.0, + "source": "ui_test_mount_rationale_1510", + "target": "ui_test_mount_test_file_context_action_copy_path_writes_clipboard", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1518", + "weight": 1.0, + "source": "ui_test_mount_rationale_1518", + "target": "ui_test_mount_test_file_context_action_unknown_action_no_raise", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1525", + "weight": 1.0, + "source": "ui_test_mount_rationale_1525", + "target": "ui_test_mount_test_file_context_action_empty_path_toasts_negative", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1536", + "weight": 1.0, + "source": "ui_test_mount_stubnassync", + "target": "ui_test_mount_stubnassync_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1539", + "weight": 1.0, + "source": "ui_test_mount_stubnassync", + "target": "ui_test_mount_stubnassync_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1561", + "weight": 1.0, + "source": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", + "target": "ui_test_mount_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_stubnassync", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubnassync", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubnassync", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubnassync", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubnassync", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubnassync", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubnassync", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_stubnassync", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_stubnassync", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_stubnassync", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_stubnassync", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_stubnassync", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_stubnassync", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1545", + "weight": 1.0, + "source": "ui_test_mount_rationale_1545", + "target": "ui_test_mount_drain_background", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1560", + "weight": 1.0, + "source": "ui_test_mount_rationale_1560", + "target": "ui_test_mount_test_run_staging_action_force_sync_invokes_nas_sync_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1573", + "weight": 1.0, + "source": "ui_test_mount_rationale_1573", + "target": "ui_test_mount_test_run_staging_action_force_sync_missing_nas_sync_toasts", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1580", + "weight": 1.0, + "source": "ui_test_mount_rationale_1580", + "target": "ui_test_mount_test_run_staging_action_no_config_toasts_negative", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1589", + "weight": 1.0, + "source": "ui_test_mount_rationale_1589", + "target": "ui_test_mount_test_run_staging_action_view_log_invokes_log_dialog", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1599", + "weight": 1.0, + "source": "ui_test_mount_rationale_1599", + "target": "ui_test_mount_test_run_staging_action_unknown_action_no_raise", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1608", + "weight": 1.0, + "source": "ui_test_mount_rationale_1608", + "target": "ui_test_mount_test_run_staging_action_clear_verified_invokes_clear", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1633", + "weight": 1.0, + "source": "ui_test_mount_rationale_1633", + "target": "ui_test_mount_test_bulk_clear_verified_clears_verified_rows", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1660", + "weight": 1.0, + "source": "ui_test_mount_rationale_1660", + "target": "ui_test_mount_test_bulk_clear_verified_no_config_toasts_and_returns", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1669", + "weight": 1.0, + "source": "ui_test_mount_rationale_1669", + "target": "ui_test_mount_test_bulk_clear_verified_logs_helper_exception", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1688", + "weight": 1.0, + "source": "ui_test_mount_stubtabstorage", + "target": "dict", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_stubtabstorage", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubtabstorage", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubtabstorage", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubtabstorage", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubtabstorage", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubtabstorage", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubtabstorage", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_stubtabstorage", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_stubtabstorage", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_stubtabstorage", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_stubtabstorage", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_stubtabstorage", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_stubtabstorage", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L436", + "weight": 1.0, + "source": "validator_test_engine_creation_test_creation_validation_input_defaults", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L49", + "weight": 1.0, + "source": "cache_test_creation_writer_build_minimal_payload", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L396", + "weight": 1.0, + "source": "config_test_models_test_sftp_transport_rejects_missing_host", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L403", + "weight": 1.0, + "source": "config_test_models_test_sftp_transport_rejects_empty_user", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L410", + "weight": 1.0, + "source": "config_test_models_test_sftp_transport_rejects_empty_remote_path", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L417", + "weight": 1.0, + "source": "config_test_models_test_sftp_transport_rejects_out_of_range_port", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L424", + "weight": 1.0, + "source": "config_test_models_test_sftp_transport_rejects_wrong_type_tag", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L444", + "weight": 1.0, + "source": "config_test_models_test_smb_transport_accepts_optional_domain_and_subpath", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L453", + "weight": 1.0, + "source": "config_test_models_test_smb_transport_rejects_missing_share", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L98", + "weight": 1.0, + "source": "api_test_sessions_stubcontroller_resume", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L55", + "weight": 1.0, + "source": "api_test_schemas_minimal_creation_json", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L225", + "weight": 1.0, + "source": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L101", + "weight": 1.0, + "source": "plugins_test_host_isolation_ctx", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L109", + "weight": 1.0, + "source": "fixtures_mock_lims_make_mock_lims_app", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1825", + "weight": 1.0, + "source": "ui_mount_submit_project", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1857", + "weight": 1.0, + "source": "ui_mount_submit_run", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/components/sync_status_icon.py", + "source_location": "L124", + "weight": 1.0, + "source": "components_sync_status_icon_sync_status_props", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L480", + "weight": 1.0, + "source": "pages_main_render_right_pane", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L259", + "weight": 1.0, + "source": "validator_engine_validator_init", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L292", + "weight": 1.0, + "source": "validator_engine_validator_reconfigure", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L352", + "weight": 1.0, + "source": "validator_engine_validator_validate_creation", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L601", + "weight": 1.0, + "source": "plugins_host_pluginhost_run_one", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L121", + "weight": 1.0, + "source": "plugins_worker_build_context", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L302", + "weight": 1.0, + "source": "plugins_worker_serialize_change", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L430", + "weight": 1.0, + "source": "readme_generator_system_fields_dict", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L451", + "weight": 1.0, + "source": "readme_generator_build_front_matter", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L486", + "weight": 1.0, + "source": "readme_generator_build_readme_fields", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L347", + "weight": 1.0, + "source": "controller_creation_creationcontroller_resume", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L827", + "weight": 1.0, + "source": "controller_creation_creationcontroller_render", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L855", + "weight": 1.0, + "source": "controller_creation_creationcontroller_plugin_pass", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L998", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1151", + "weight": 1.0, + "source": "controller_creation_creationcontroller_post_validate", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1228", + "weight": 1.0, + "source": "controller_creation_format_error", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L134", + "weight": 1.0, + "source": "api_errors_build_error_envelope", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L185", + "weight": 1.0, + "source": "api_errors_exlab_validation_handler", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L288", + "weight": 1.0, + "source": "routers_sessions_build_project_request", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L306", + "weight": 1.0, + "source": "routers_sessions_build_run_request", + "target": "dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/transports/_run.py", + "source_location": "L60", + "weight": 1.0, + "source": "transports_run_run_subprocess", + "target": "dict" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1695", + "weight": 1.0, + "source": "ui_test_mount_stubapp", + "target": "ui_test_mount_stubapp_init", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1705", + "weight": 1.0, + "source": "ui_test_mount_test_drive_folder_feed_returns_empty_when_no_selection", + "target": "ui_test_mount_stubapp", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1717", + "weight": 1.0, + "source": "ui_test_mount_test_drive_folder_feed_creates_feed_on_first_render", + "target": "ui_test_mount_stubapp", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1733", + "weight": 1.0, + "source": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", + "target": "ui_test_mount_stubapp", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1693", + "weight": 1.0, + "source": "ui_test_mount_rationale_1693", + "target": "ui_test_mount_stubapp", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L282", + "weight": 0.8, + "source": "ui_test_mount_stubapp", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubapp", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubapp", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubapp", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubapp", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubapp", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L350", + "weight": 0.8, + "source": "ui_test_mount_stubapp", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_stubapp", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_stubapp", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_stubapp", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1344", + "weight": 0.8, + "source": "ui_test_mount_stubapp", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_stubapp", + "target": "routers_browse_folderentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1729", + "weight": 0.8, + "source": "ui_test_mount_stubapp", + "target": "routers_browse_folderresponse", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1704", + "weight": 1.0, + "source": "ui_test_mount_rationale_1704", + "target": "ui_test_mount_test_drive_folder_feed_returns_empty_when_no_selection", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1714", + "weight": 1.0, + "source": "ui_test_mount_rationale_1714", + "target": "ui_test_mount_test_drive_folder_feed_creates_feed_on_first_render", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1727", + "weight": 1.0, + "source": "ui_test_mount_rationale_1727", + "target": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1735", + "weight": 1.0, + "source": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", + "target": "routers_browse_folderresponse" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1738", + "weight": 1.0, + "source": "ui_test_mount_test_drive_folder_feed_converts_cached_payload_to_entries", + "target": "routers_browse_folderentry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1769", + "weight": 1.0, + "source": "ui_test_mount_rationale_1769", + "target": "ui_test_mount_test_fetch_folder_async_skips_when_coord_says_skip", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1786", + "weight": 1.0, + "source": "ui_test_mount_rationale_1786", + "target": "ui_test_mount_test_fetch_folder_async_records_refresh_on_success", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1805", + "weight": 1.0, + "source": "ui_test_mount_rationale_1805", + "target": "ui_test_mount_test_fetch_folder_async_swallows_helper_exceptions", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1821", + "weight": 1.0, + "source": "ui_test_mount_rationale_1821", + "target": "ui_test_mount_test_open_log_dialog_no_queue_job_renders_dialog", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1830", + "weight": 1.0, + "source": "ui_test_mount_rationale_1830", + "target": "ui_test_mount_test_open_log_dialog_with_queue_job_renders_dialog", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1858", + "weight": 1.0, + "source": "ui_test_mount_rationale_1858", + "target": "ui_test_mount_test_build_metadata_payload_returns_empty_on_builder_exception", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1871", + "weight": 1.0, + "source": "ui_test_mount_rationale_1871", + "target": "ui_test_mount_test_metadata_for_relay_equipment_emits_id_label_source_host", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1887", + "weight": 1.0, + "source": "ui_test_mount_rationale_1887", + "target": "ui_test_mount_test_metadata_for_relay_equipment_unknown_id_falls_back", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1894", + "weight": 1.0, + "source": "ui_test_mount_rationale_1894", + "target": "ui_test_mount_test_metadata_for_project_returns_empty_for_single_segment_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1900", + "weight": 1.0, + "source": "ui_test_mount_rationale_1900", + "target": "ui_test_mount_test_count_dir_children_returns_zero_for_missing_dir", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1905", + "weight": 1.0, + "source": "ui_test_mount_rationale_1905", + "target": "ui_test_mount_test_count_dir_children_filters_by_prefix", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1914", + "weight": 1.0, + "source": "ui_test_mount_rationale_1914", + "target": "ui_test_mount_test_metadata_for_run_returns_partial_on_decode_failure", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1927", + "weight": 1.0, + "source": "ui_test_mount_rationale_1927", + "target": "ui_test_mount_test_run_staging_action_force_sync_exception_path_no_raise", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1943", + "weight": 1.0, + "source": "ui_test_mount_rationale_1943", + "target": "ui_test_mount_test_run_staging_action_clear_verified_exception_path_no_raise", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1959", + "weight": 1.0, + "source": "ui_test_mount_rationale_1959", + "target": "ui_test_mount_test_run_staging_action_clear_verified_zero_files_branch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_mount.py", + "source_location": "L1972", + "weight": 1.0, + "source": "ui_test_mount_rationale_1972", + "target": "ui_test_mount_test_file_context_action_clipboard_failure_toasts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L27", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_page_py", + "target": "ui_test_settings_page_test_build_draft_from_none_yields_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L36", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_page_py", + "target": "ui_test_settings_page_test_build_draft_copies_existing_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L49", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_page_py", + "target": "ui_test_settings_page_test_draft_edits_do_not_leak_into_source", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L60", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_page_py", + "target": "ui_test_settings_page_test_finalize_coerces_widget_floats_back_to_int", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L73", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_page_py", + "target": "ui_test_settings_page_test_finalize_round_trips_edited_scalar_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L90", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_page_py", + "target": "ui_test_settings_page_test_finalize_allows_blank_staging_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L104", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_page_py", + "target": "ui_test_settings_page_test_finalize_raises_on_invalid_edit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L113", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_page_py", + "target": "ui_test_settings_page_test_lims_credential_initial_state_not_set_when_keyring_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L118", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_page_py", + "target": "ui_test_settings_page_test_lims_credential_initial_state_set_when_keyring_has_password", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_settings_page_rationale_1", + "target": "tests_unit_ui_test_settings_page_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L28", + "weight": 1.0, + "source": "ui_test_settings_page_test_build_draft_from_none_yields_defaults", + "target": "pages_settings_build_settings_draft" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L41", + "weight": 1.0, + "source": "ui_test_settings_page_test_build_draft_copies_existing_config", + "target": "pages_settings_build_settings_draft" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L51", + "weight": 1.0, + "source": "ui_test_settings_page_test_draft_edits_do_not_leak_into_source", + "target": "pages_settings_build_settings_draft" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L61", + "weight": 1.0, + "source": "ui_test_settings_page_test_finalize_coerces_widget_floats_back_to_int", + "target": "pages_settings_build_settings_draft" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L66", + "weight": 1.0, + "source": "ui_test_settings_page_test_finalize_coerces_widget_floats_back_to_int", + "target": "pages_settings_finalize_settings_draft" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L74", + "weight": 1.0, + "source": "ui_test_settings_page_test_finalize_round_trips_edited_scalar_fields", + "target": "pages_settings_build_settings_draft" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L83", + "weight": 1.0, + "source": "ui_test_settings_page_test_finalize_round_trips_edited_scalar_fields", + "target": "pages_settings_finalize_settings_draft" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L91", + "weight": 1.0, + "source": "ui_test_settings_page_rationale_91", + "target": "ui_test_settings_page_test_finalize_allows_blank_staging_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L94", + "weight": 1.0, + "source": "ui_test_settings_page_test_finalize_allows_blank_staging_root", + "target": "pages_settings_build_settings_draft" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L98", + "weight": 1.0, + "source": "ui_test_settings_page_test_finalize_allows_blank_staging_root", + "target": "pages_settings_finalize_settings_draft" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L105", + "weight": 1.0, + "source": "ui_test_settings_page_test_finalize_raises_on_invalid_edit", + "target": "pages_settings_build_settings_draft" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L110", + "weight": 1.0, + "source": "ui_test_settings_page_test_finalize_raises_on_invalid_edit", + "target": "pages_settings_finalize_settings_draft" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L114", + "weight": 1.0, + "source": "ui_test_settings_page_test_lims_credential_initial_state_not_set_when_keyring_empty", + "target": "pages_settings_lims_credential_initial_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L119", + "weight": 1.0, + "source": "ui_test_settings_page_rationale_119", + "target": "ui_test_settings_page_test_lims_credential_initial_state_set_when_keyring_has_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_page.py", + "source_location": "L121", + "weight": 1.0, + "source": "ui_test_settings_page_test_lims_credential_initial_state_set_when_keyring_has_password", + "target": "pages_settings_lims_credential_initial_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_init_rationale_1", + "target": "tests_unit_ui_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_init_rationale_1", + "target": "src_exlab_wizard_ui_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L17", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_equipment_py", + "target": "ui_test_wizard_equipment_test_wizard_has_four_steps_without_signal_step", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L24", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_equipment_py", + "target": "ui_test_wizard_equipment_state_filled_for", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L39", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_equipment_py", + "target": "ui_test_wizard_equipment_test_can_advance_identity_requires_id_and_label", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_equipment_py", + "target": "ui_test_wizard_equipment_test_can_advance_identity_rejects_invalid_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L55", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_equipment_py", + "target": "ui_test_wizard_equipment_test_can_advance_paths_requires_both_roots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L62", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_equipment_py", + "target": "ui_test_wizard_equipment_test_can_advance_sync_mode_nas_requires_rclone_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L69", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_equipment_py", + "target": "ui_test_wizard_equipment_test_can_advance_sync_mode_stage_requires_staging_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L78", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_equipment_py", + "target": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_nas", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_equipment_py", + "target": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_stage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L97", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_equipment_py", + "target": "ui_test_wizard_equipment_test_assemble_rejects_invalid_input", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_wizard_equipment_rationale_1", + "target": "tests_unit_ui_test_wizard_equipment_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L18", + "weight": 1.0, + "source": "ui_test_wizard_equipment_rationale_18", + "target": "ui_test_wizard_equipment_test_wizard_has_four_steps_without_signal_step", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L56", + "weight": 1.0, + "source": "ui_test_wizard_equipment_test_can_advance_paths_requires_both_roots", + "target": "ui_test_wizard_equipment_state_filled_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L63", + "weight": 1.0, + "source": "ui_test_wizard_equipment_test_can_advance_sync_mode_nas_requires_rclone_fields", + "target": "ui_test_wizard_equipment_state_filled_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L70", + "weight": 1.0, + "source": "ui_test_wizard_equipment_test_can_advance_sync_mode_stage_requires_staging_fields", + "target": "ui_test_wizard_equipment_state_filled_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L79", + "weight": 1.0, + "source": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_nas", + "target": "ui_test_wizard_equipment_state_filled_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L87", + "weight": 1.0, + "source": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_stage", + "target": "ui_test_wizard_equipment_state_filled_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L98", + "weight": 1.0, + "source": "ui_test_wizard_equipment_test_assemble_rejects_invalid_input", + "target": "ui_test_wizard_equipment_state_filled_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L25", + "weight": 1.0, + "source": "ui_test_wizard_equipment_state_filled_for", + "target": "pages_wizard_equipment_equipmentwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L40", + "weight": 1.0, + "source": "ui_test_wizard_equipment_test_can_advance_identity_requires_id_and_label", + "target": "pages_wizard_equipment_equipmentwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L49", + "weight": 1.0, + "source": "ui_test_wizard_equipment_test_can_advance_identity_rejects_invalid_id", + "target": "pages_wizard_equipment_equipmentwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L80", + "weight": 1.0, + "source": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_nas", + "target": "pages_wizard_equipment_assemble_equipment_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L91", + "weight": 1.0, + "source": "ui_test_wizard_equipment_test_assemble_round_trips_to_valid_equipment_config_stage", + "target": "pages_wizard_equipment_assemble_equipment_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_equipment.py", + "source_location": "L101", + "weight": 1.0, + "source": "ui_test_wizard_equipment_test_assemble_rejects_invalid_input", + "target": "pages_wizard_equipment_assemble_equipment_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_staging_dock_height_is_120_px", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_staging_table_columns_match_brief_order", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L50", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_format_bytes_handles_negative_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L54", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_format_bytes_renders_sub_kib_in_bytes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L59", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_format_bytes_renders_kib_with_one_decimal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L64", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_format_bytes_renders_mib_and_gib", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L74", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_format_elapsed_seconds_only", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L79", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_format_elapsed_minutes_and_seconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L83", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_format_elapsed_hours_and_minutes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_format_elapsed_days_and_hours", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L91", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_format_elapsed_handles_negative", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L100", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_state_pill_props_returns_label_and_color_for_each_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L112", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_state_pill_props_falls_back_for_unknown_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L123", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_make_row", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L144", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_row_props_emits_run_label_as_leaf", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L149", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_row_props_marks_synced_rollup_as_clearable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L155", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_row_props_does_not_mark_other_rollups_as_clearable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L163", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_row_props_formats_bytes_and_elapsed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L174", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L191", + "weight": 1.0, + "source": "tests_unit_ui_test_staging_page_py", + "target": "ui_test_staging_page_test_staging_dock_state_defaults", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_staging_page_rationale_1", + "target": "tests_unit_ui_test_staging_page_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L51", + "weight": 1.0, + "source": "ui_test_staging_page_test_format_bytes_handles_negative_values", + "target": "pages_staging_format_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L55", + "weight": 1.0, + "source": "ui_test_staging_page_test_format_bytes_renders_sub_kib_in_bytes", + "target": "pages_staging_format_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L60", + "weight": 1.0, + "source": "ui_test_staging_page_test_format_bytes_renders_kib_with_one_decimal", + "target": "pages_staging_format_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L65", + "weight": 1.0, + "source": "ui_test_staging_page_test_format_bytes_renders_mib_and_gib", + "target": "pages_staging_format_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L75", + "weight": 1.0, + "source": "ui_test_staging_page_test_format_elapsed_seconds_only", + "target": "pages_staging_format_elapsed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L80", + "weight": 1.0, + "source": "ui_test_staging_page_test_format_elapsed_minutes_and_seconds", + "target": "pages_staging_format_elapsed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L84", + "weight": 1.0, + "source": "ui_test_staging_page_test_format_elapsed_hours_and_minutes", + "target": "pages_staging_format_elapsed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L88", + "weight": 1.0, + "source": "ui_test_staging_page_test_format_elapsed_days_and_hours", + "target": "pages_staging_format_elapsed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L92", + "weight": 1.0, + "source": "ui_test_staging_page_test_format_elapsed_handles_negative", + "target": "pages_staging_format_elapsed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L106", + "weight": 1.0, + "source": "ui_test_staging_page_test_state_pill_props_returns_label_and_color_for_each_state", + "target": "pages_staging_state_pill_props" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L113", + "weight": 1.0, + "source": "ui_test_staging_page_test_state_pill_props_falls_back_for_unknown_state", + "target": "pages_staging_state_pill_props" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L145", + "weight": 1.0, + "source": "ui_test_staging_page_test_row_props_emits_run_label_as_leaf", + "target": "ui_test_staging_page_make_row", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L151", + "weight": 1.0, + "source": "ui_test_staging_page_test_row_props_marks_synced_rollup_as_clearable", + "target": "ui_test_staging_page_make_row", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L159", + "weight": 1.0, + "source": "ui_test_staging_page_test_row_props_does_not_mark_other_rollups_as_clearable", + "target": "ui_test_staging_page_make_row", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L164", + "weight": 1.0, + "source": "ui_test_staging_page_test_row_props_formats_bytes_and_elapsed", + "target": "ui_test_staging_page_make_row", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L183", + "weight": 1.0, + "source": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", + "target": "ui_test_staging_page_make_row", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L131", + "weight": 1.0, + "source": "ui_test_staging_page_make_row", + "target": "orchestrator_staging_query_stagedrunsummary" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L145", + "weight": 1.0, + "source": "ui_test_staging_page_test_row_props_emits_run_label_as_leaf", + "target": "pages_staging_row_props" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L150", + "weight": 1.0, + "source": "ui_test_staging_page_rationale_150", + "target": "ui_test_staging_page_test_row_props_marks_synced_rollup_as_clearable", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L151", + "weight": 1.0, + "source": "ui_test_staging_page_test_row_props_marks_synced_rollup_as_clearable", + "target": "pages_staging_row_props" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L159", + "weight": 1.0, + "source": "ui_test_staging_page_test_row_props_does_not_mark_other_rollups_as_clearable", + "target": "pages_staging_row_props" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L164", + "weight": 1.0, + "source": "ui_test_staging_page_test_row_props_formats_bytes_and_elapsed", + "target": "pages_staging_row_props" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L175", + "weight": 1.0, + "source": "ui_test_staging_page_rationale_175", + "target": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L183", + "weight": 1.0, + "source": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", + "target": "pages_staging_stagingdockstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L184", + "weight": 1.0, + "source": "ui_test_staging_page_test_render_staging_dock_returns_dict_when_nicegui_unavailable", + "target": "pages_staging_render_staging_dock" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L192", + "weight": 1.0, + "source": "ui_test_staging_page_rationale_192", + "target": "ui_test_staging_page_test_staging_dock_state_defaults", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_staging_page.py", + "source_location": "L193", + "weight": 1.0, + "source": "ui_test_staging_page_test_staging_dock_state_defaults", + "target": "pages_staging_stagingdockstate" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_reset_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_notify_success_uses_positive_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L45", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_notify_info_default_timeout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L54", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_notify_warning_extended_timeout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L63", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_notify_error_extended_timeout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L72", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_notify_with_action_extends_to_12_seconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L85", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_show_banner_rejects_unknown_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L97", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_show_banner_records_active", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L111", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_clear_banner_removes_record", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L124", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_banner_overflow_count_when_exceeding_two", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L148", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_field_errors_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L157", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_form_errors_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L166", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_banner_id_closed_set_matches_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L178", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_severity_closed_set_matches_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L189", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_container_id_closed_set_matches_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L199", + "weight": 1.0, + "source": "tests_unit_ui_test_notifications_py", + "target": "ui_test_notifications_test_action_spec_is_frozen", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_notifications_rationale_1", + "target": "tests_unit_ui_test_notifications_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L26", + "weight": 1.0, + "source": "ui_test_notifications_rationale_26", + "target": "ui_test_notifications_reset_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L34", + "weight": 1.0, + "source": "ui_test_notifications_rationale_34", + "target": "ui_test_notifications_test_notify_success_uses_positive_type", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L46", + "weight": 1.0, + "source": "ui_test_notifications_rationale_46", + "target": "ui_test_notifications_test_notify_info_default_timeout", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L55", + "weight": 1.0, + "source": "ui_test_notifications_rationale_55", + "target": "ui_test_notifications_test_notify_warning_extended_timeout", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L64", + "weight": 1.0, + "source": "ui_test_notifications_rationale_64", + "target": "ui_test_notifications_test_notify_error_extended_timeout", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L73", + "weight": 1.0, + "source": "ui_test_notifications_rationale_73", + "target": "ui_test_notifications_test_notify_with_action_extends_to_12_seconds", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L75", + "weight": 1.0, + "source": "ui_test_notifications_test_notify_with_action_extends_to_12_seconds", + "target": "ui_notifications_actionspec" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L86", + "weight": 1.0, + "source": "ui_test_notifications_rationale_86", + "target": "ui_test_notifications_test_show_banner_rejects_unknown_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L98", + "weight": 1.0, + "source": "ui_test_notifications_rationale_98", + "target": "ui_test_notifications_test_show_banner_records_active", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L112", + "weight": 1.0, + "source": "ui_test_notifications_rationale_112", + "target": "ui_test_notifications_test_clear_banner_removes_record", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L125", + "weight": 1.0, + "source": "ui_test_notifications_rationale_125", + "target": "ui_test_notifications_test_banner_overflow_count_when_exceeding_two", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L149", + "weight": 1.0, + "source": "ui_test_notifications_rationale_149", + "target": "ui_test_notifications_test_field_errors_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L158", + "weight": 1.0, + "source": "ui_test_notifications_rationale_158", + "target": "ui_test_notifications_test_form_errors_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L167", + "weight": 1.0, + "source": "ui_test_notifications_rationale_167", + "target": "ui_test_notifications_test_banner_id_closed_set_matches_spec", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L179", + "weight": 1.0, + "source": "ui_test_notifications_rationale_179", + "target": "ui_test_notifications_test_severity_closed_set_matches_spec", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L190", + "weight": 1.0, + "source": "ui_test_notifications_rationale_190", + "target": "ui_test_notifications_test_container_id_closed_set_matches_spec", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L200", + "weight": 1.0, + "source": "ui_test_notifications_rationale_200", + "target": "ui_test_notifications_test_action_spec_is_frozen", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_notifications.py", + "source_location": "L204", + "weight": 1.0, + "source": "ui_test_notifications_test_action_spec_is_frozen", + "target": "ui_notifications_actionspec" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L35", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_create_template_scaffolds_dir_with_manifest_and_content", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L50", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_create_template_strips_whitespace_from_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L55", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_create_template_writes_description_into_manifest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L69", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_create_run_template_records_run_scope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L81", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_create_project_template_omits_run_scope_key", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L92", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_create_template_rejects_empty_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L97", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_create_template_rejects_unknown_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L102", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_create_run_template_requires_run_scope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L107", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_create_run_template_rejects_invalid_run_scope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L112", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_create_template_rejects_duplicate_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L123", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_scaffolded_project_template_resolves_with_engine", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L139", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_scaffolded_run_template_resolves_with_engine", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L156", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_list_templates_returns_empty_for_missing_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L160", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_list_templates_returns_empty_for_dir_with_no_templates", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L166", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_list_templates_summarizes_each_template", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L189", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_list_templates_is_sorted", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L199", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_list_templates_skips_dirs_without_manifest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L209", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_list_templates_filters_by_template_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L225", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_list_templates_skips_malformed_manifest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L237", + "weight": 1.0, + "source": "tests_unit_ui_test_templates_page_py", + "target": "ui_test_templates_page_test_list_templates_skips_non_mapping_manifest", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_templates_page_rationale_1", + "target": "tests_unit_ui_test_templates_page_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L38", + "weight": 1.0, + "source": "ui_test_templates_page_test_create_template_scaffolds_dir_with_manifest_and_content", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L51", + "weight": 1.0, + "source": "ui_test_templates_page_test_create_template_strips_whitespace_from_name", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L58", + "weight": 1.0, + "source": "ui_test_templates_page_test_create_template_writes_description_into_manifest", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L70", + "weight": 1.0, + "source": "ui_test_templates_page_test_create_run_template_records_run_scope", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L82", + "weight": 1.0, + "source": "ui_test_templates_page_test_create_project_template_omits_run_scope_key", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L94", + "weight": 1.0, + "source": "ui_test_templates_page_test_create_template_rejects_empty_name", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L99", + "weight": 1.0, + "source": "ui_test_templates_page_test_create_template_rejects_unknown_type", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L104", + "weight": 1.0, + "source": "ui_test_templates_page_test_create_run_template_requires_run_scope", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L109", + "weight": 1.0, + "source": "ui_test_templates_page_test_create_run_template_rejects_invalid_run_scope", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L113", + "weight": 1.0, + "source": "ui_test_templates_page_test_create_template_rejects_duplicate_name", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L126", + "weight": 1.0, + "source": "ui_test_templates_page_test_scaffolded_project_template_resolves_with_engine", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L132", + "weight": 1.0, + "source": "ui_test_templates_page_test_scaffolded_project_template_resolves_with_engine", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L140", + "weight": 1.0, + "source": "ui_test_templates_page_test_scaffolded_run_template_resolves_with_engine", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L146", + "weight": 1.0, + "source": "ui_test_templates_page_test_scaffolded_run_template_resolves_with_engine", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L157", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_returns_empty_for_missing_dir", + "target": "pages_templates_list_templates" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L163", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_returns_empty_for_dir_with_no_templates", + "target": "pages_templates_list_templates" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L167", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_summarizes_each_template", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L176", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_summarizes_each_template", + "target": "pages_templates_list_templates" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L191", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_is_sorted", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L192", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_is_sorted", + "target": "pages_templates_list_templates" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L200", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_skips_dirs_without_manifest", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L204", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_skips_dirs_without_manifest", + "target": "pages_templates_list_templates" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L210", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_filters_by_template_type", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L218", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_filters_by_template_type", + "target": "pages_templates_list_templates" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L226", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_skips_malformed_manifest", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L232", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_skips_malformed_manifest", + "target": "pages_templates_list_templates" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L238", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_skips_non_mapping_manifest", + "target": "pages_templates_create_template" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_templates_page.py", + "source_location": "L244", + "weight": 1.0, + "source": "ui_test_templates_page_test_list_templates_skips_non_mapping_manifest", + "target": "pages_templates_list_templates" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L26", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_all_documented_shortcuts_in_registry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L43", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_new_project_combo_macos_and_other", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L51", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_new_run_combo_macos_and_other", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L59", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_new_test_run_combo_macos_and_other", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L67", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_open_settings_uses_comma_key", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L75", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_refresh_tree_combo", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L83", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_open_problems_combo", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L91", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_focus_tree_search_is_unmodified_slash", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L99", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_wizard_next_uses_enter_with_modifier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L107", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_wizard_cancel_uses_escape", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L115", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_combo_for_current_os_returns_other_on_linux", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L123", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_combo_for_current_os_returns_macos_on_darwin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L131", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_resolve_finds_known_combo_on_linux", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L139", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_resolve_returns_none_for_unknown_combo", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L145", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_get_binding_raises_for_unknown", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L155", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_registry_register_and_dispatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L165", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_registry_dispatch_returns_false_when_unbound", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L172", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_registry_double_register_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L181", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_keycombo_matches_returns_true_for_same_modifiers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L189", + "weight": 1.0, + "source": "tests_unit_ui_test_keyboard_py", + "target": "ui_test_keyboard_test_descriptions_match_spec", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_1", + "target": "tests_unit_ui_test_keyboard_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L27", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_27", + "target": "ui_test_keyboard_test_all_documented_shortcuts_in_registry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L29", + "weight": 1.0, + "source": "ui_test_keyboard_test_all_documented_shortcuts_in_registry", + "target": "ui_keyboard_list_bindings" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L44", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_44", + "target": "ui_test_keyboard_test_new_project_combo_macos_and_other", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L46", + "weight": 1.0, + "source": "ui_test_keyboard_test_new_project_combo_macos_and_other", + "target": "ui_keyboard_get_binding" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L47", + "weight": 1.0, + "source": "ui_test_keyboard_test_new_project_combo_macos_and_other", + "target": "ui_keyboard_keycombo" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L52", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_52", + "target": "ui_test_keyboard_test_new_run_combo_macos_and_other", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L54", + "weight": 1.0, + "source": "ui_test_keyboard_test_new_run_combo_macos_and_other", + "target": "ui_keyboard_get_binding" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L55", + "weight": 1.0, + "source": "ui_test_keyboard_test_new_run_combo_macos_and_other", + "target": "ui_keyboard_keycombo" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L60", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_60", + "target": "ui_test_keyboard_test_new_test_run_combo_macos_and_other", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L62", + "weight": 1.0, + "source": "ui_test_keyboard_test_new_test_run_combo_macos_and_other", + "target": "ui_keyboard_get_binding" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L63", + "weight": 1.0, + "source": "ui_test_keyboard_test_new_test_run_combo_macos_and_other", + "target": "ui_keyboard_keycombo" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L68", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_68", + "target": "ui_test_keyboard_test_open_settings_uses_comma_key", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L70", + "weight": 1.0, + "source": "ui_test_keyboard_test_open_settings_uses_comma_key", + "target": "ui_keyboard_get_binding" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L76", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_76", + "target": "ui_test_keyboard_test_refresh_tree_combo", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L78", + "weight": 1.0, + "source": "ui_test_keyboard_test_refresh_tree_combo", + "target": "ui_keyboard_get_binding" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L79", + "weight": 1.0, + "source": "ui_test_keyboard_test_refresh_tree_combo", + "target": "ui_keyboard_keycombo" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L84", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_84", + "target": "ui_test_keyboard_test_open_problems_combo", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L86", + "weight": 1.0, + "source": "ui_test_keyboard_test_open_problems_combo", + "target": "ui_keyboard_get_binding" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L87", + "weight": 1.0, + "source": "ui_test_keyboard_test_open_problems_combo", + "target": "ui_keyboard_keycombo" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L92", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_92", + "target": "ui_test_keyboard_test_focus_tree_search_is_unmodified_slash", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L94", + "weight": 1.0, + "source": "ui_test_keyboard_test_focus_tree_search_is_unmodified_slash", + "target": "ui_keyboard_get_binding" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L95", + "weight": 1.0, + "source": "ui_test_keyboard_test_focus_tree_search_is_unmodified_slash", + "target": "ui_keyboard_keycombo" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L100", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_100", + "target": "ui_test_keyboard_test_wizard_next_uses_enter_with_modifier", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L102", + "weight": 1.0, + "source": "ui_test_keyboard_test_wizard_next_uses_enter_with_modifier", + "target": "ui_keyboard_get_binding" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L103", + "weight": 1.0, + "source": "ui_test_keyboard_test_wizard_next_uses_enter_with_modifier", + "target": "ui_keyboard_keycombo" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L108", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_108", + "target": "ui_test_keyboard_test_wizard_cancel_uses_escape", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L110", + "weight": 1.0, + "source": "ui_test_keyboard_test_wizard_cancel_uses_escape", + "target": "ui_keyboard_get_binding" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L111", + "weight": 1.0, + "source": "ui_test_keyboard_test_wizard_cancel_uses_escape", + "target": "ui_keyboard_keycombo" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L116", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_116", + "target": "ui_test_keyboard_test_combo_for_current_os_returns_other_on_linux", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L119", + "weight": 1.0, + "source": "ui_test_keyboard_test_combo_for_current_os_returns_other_on_linux", + "target": "ui_keyboard_combo_for_current_os" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L120", + "weight": 1.0, + "source": "ui_test_keyboard_test_combo_for_current_os_returns_other_on_linux", + "target": "ui_keyboard_keycombo" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L124", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_124", + "target": "ui_test_keyboard_test_combo_for_current_os_returns_macos_on_darwin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L127", + "weight": 1.0, + "source": "ui_test_keyboard_test_combo_for_current_os_returns_macos_on_darwin", + "target": "ui_keyboard_combo_for_current_os" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L128", + "weight": 1.0, + "source": "ui_test_keyboard_test_combo_for_current_os_returns_macos_on_darwin", + "target": "ui_keyboard_keycombo" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L132", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_132", + "target": "ui_test_keyboard_test_resolve_finds_known_combo_on_linux", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L140", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_140", + "target": "ui_test_keyboard_test_resolve_returns_none_for_unknown_combo", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L146", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_146", + "target": "ui_test_keyboard_test_get_binding_raises_for_unknown", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L152", + "weight": 1.0, + "source": "ui_test_keyboard_test_get_binding_raises_for_unknown", + "target": "ui_keyboard_get_binding" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L156", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_156", + "target": "ui_test_keyboard_test_registry_register_and_dispatch", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L158", + "weight": 1.0, + "source": "ui_test_keyboard_test_registry_register_and_dispatch", + "target": "ui_keyboard_shortcutregistry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L166", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_166", + "target": "ui_test_keyboard_test_registry_dispatch_returns_false_when_unbound", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L168", + "weight": 1.0, + "source": "ui_test_keyboard_test_registry_dispatch_returns_false_when_unbound", + "target": "ui_keyboard_shortcutregistry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L173", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_173", + "target": "ui_test_keyboard_test_registry_double_register_raises", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L175", + "weight": 1.0, + "source": "ui_test_keyboard_test_registry_double_register_raises", + "target": "ui_keyboard_shortcutregistry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L182", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_182", + "target": "ui_test_keyboard_test_keycombo_matches_returns_true_for_same_modifiers", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L184", + "weight": 1.0, + "source": "ui_test_keyboard_test_keycombo_matches_returns_true_for_same_modifiers", + "target": "ui_keyboard_keycombo" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L190", + "weight": 1.0, + "source": "ui_test_keyboard_rationale_190", + "target": "ui_test_keyboard_test_descriptions_match_spec", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_keyboard.py", + "source_location": "L192", + "weight": 1.0, + "source": "ui_test_keyboard_test_descriptions_match_spec", + "target": "ui_keyboard_list_bindings" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_ui_test_dynamic_form_py", + "target": "ui_test_dynamic_form_test_template_questions_skips_underscore_keys", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L42", + "weight": 1.0, + "source": "tests_unit_ui_test_dynamic_form_py", + "target": "ui_test_dynamic_form_test_template_questions_long_form_types", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L60", + "weight": 1.0, + "source": "tests_unit_ui_test_dynamic_form_py", + "target": "ui_test_dynamic_form_test_template_questions_choice_from_list_and_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L73", + "weight": 1.0, + "source": "tests_unit_ui_test_dynamic_form_py", + "target": "ui_test_dynamic_form_test_template_questions_short_form_infers_kind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L94", + "weight": 1.0, + "source": "tests_unit_ui_test_dynamic_form_py", + "target": "ui_test_dynamic_form_test_render_question_field_seeds_default_into_answers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L104", + "weight": 1.0, + "source": "tests_unit_ui_test_dynamic_form_py", + "target": "ui_test_dynamic_form_test_render_question_field_preserves_existing_answer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L119", + "weight": 1.0, + "source": "tests_unit_ui_test_dynamic_form_py", + "target": "ui_test_dynamic_form_equipment_kwargs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L140", + "weight": 1.0, + "source": "tests_unit_ui_test_dynamic_form_py", + "target": "ui_test_dynamic_form_test_build_equipment_sftp", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L147", + "weight": 1.0, + "source": "tests_unit_ui_test_dynamic_form_py", + "target": "ui_test_dynamic_form_test_build_equipment_smb", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L168", + "weight": 1.0, + "source": "tests_unit_ui_test_dynamic_form_py", + "target": "ui_test_dynamic_form_test_build_equipment_rejects_bad_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_dynamic_form_rationale_1", + "target": "tests_unit_ui_test_dynamic_form_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L39", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_template_questions_skips_underscore_keys", + "target": "pages_templates_template_questions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L51", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_template_questions_long_form_types", + "target": "pages_templates_template_questions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L66", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_template_questions_choice_from_list_and_dict", + "target": "pages_templates_template_questions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L81", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_template_questions_short_form_infers_kind", + "target": "pages_templates_template_questions" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L96", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_render_question_field_seeds_default_into_answers", + "target": "pages_templates_render_question_field" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L97", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_render_question_field_seeds_default_into_answers", + "target": "pages_templates_templatequestion" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L106", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_render_question_field_preserves_existing_answer", + "target": "pages_templates_render_question_field" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L107", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_render_question_field_preserves_existing_answer", + "target": "pages_templates_templatequestion" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L141", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_build_equipment_sftp", + "target": "ui_test_dynamic_form_equipment_kwargs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L149", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_build_equipment_smb", + "target": "ui_test_dynamic_form_equipment_kwargs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L170", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_build_equipment_rejects_bad_id", + "target": "ui_test_dynamic_form_equipment_kwargs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L141", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_build_equipment_sftp", + "target": "ui_equipment_form_build_equipment_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L148", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_build_equipment_smb", + "target": "ui_equipment_form_build_equipment_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_dynamic_form.py", + "source_location": "L170", + "weight": 1.0, + "source": "ui_test_dynamic_form_test_build_equipment_rejects_bad_id", + "target": "ui_equipment_form_build_equipment_config" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L14", + "weight": 1.0, + "source": "tests_unit_ui_test_file_list_py", + "target": "ui_test_file_list_entry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L27", + "weight": 1.0, + "source": "tests_unit_ui_test_file_list_py", + "target": "ui_test_file_list_test_diff_detects_additions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_unit_ui_test_file_list_py", + "target": "ui_test_file_list_test_diff_detects_removals", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L47", + "weight": 1.0, + "source": "tests_unit_ui_test_file_list_py", + "target": "ui_test_file_list_test_diff_detects_size_change_as_modification", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L57", + "weight": 1.0, + "source": "tests_unit_ui_test_file_list_py", + "target": "ui_test_file_list_test_diff_detects_sync_status_change_as_modification", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L65", + "weight": 1.0, + "source": "tests_unit_ui_test_file_list_py", + "target": "ui_test_file_list_test_diff_unchanged_is_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L78", + "weight": 1.0, + "source": "tests_unit_ui_test_file_list_py", + "target": "ui_test_file_list_test_file_list_entry_defaults_keep_local_and_tombstone_false", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L85", + "weight": 1.0, + "source": "tests_unit_ui_test_file_list_py", + "target": "ui_test_file_list_test_diff_detects_keep_local_change_as_modification", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_ui_test_file_list_py", + "target": "ui_test_file_list_test_diff_detects_tombstone_change_as_modification", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L101", + "weight": 1.0, + "source": "tests_unit_ui_test_file_list_py", + "target": "ui_test_file_list_test_keep_local_action_constant_is_distinct", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L106", + "weight": 1.0, + "source": "tests_unit_ui_test_file_list_py", + "target": "ui_test_file_list_test_render_file_list_keep_local_menu_and_tombstone", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_file_list_rationale_1", + "target": "tests_unit_ui_test_file_list_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L30", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_detects_additions", + "target": "ui_test_file_list_entry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L39", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_detects_removals", + "target": "ui_test_file_list_entry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L49", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_detects_size_change_as_modification", + "target": "ui_test_file_list_entry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L59", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_detects_sync_status_change_as_modification", + "target": "ui_test_file_list_entry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L66", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_unchanged_is_empty", + "target": "ui_test_file_list_entry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L80", + "weight": 1.0, + "source": "ui_test_file_list_test_file_list_entry_defaults_keep_local_and_tombstone_false", + "target": "ui_test_file_list_entry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L17", + "weight": 1.0, + "source": "ui_test_file_list_entry", + "target": "components_file_list_filelistentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L28", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_detects_additions", + "target": "components_file_list_diff_file_lists" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L38", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_detects_removals", + "target": "components_file_list_diff_file_lists" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L48", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_detects_size_change_as_modification", + "target": "components_file_list_diff_file_lists" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L58", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_detects_sync_status_change_as_modification", + "target": "components_file_list_diff_file_lists" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L67", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_unchanged_is_empty", + "target": "components_file_list_diff_file_lists" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L79", + "weight": 1.0, + "source": "ui_test_file_list_rationale_79", + "target": "ui_test_file_list_test_file_list_entry_defaults_keep_local_and_tombstone_false", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L86", + "weight": 1.0, + "source": "ui_test_file_list_rationale_86", + "target": "ui_test_file_list_test_diff_detects_keep_local_change_as_modification", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L87", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_detects_keep_local_change_as_modification", + "target": "components_file_list_filelistentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L89", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_detects_keep_local_change_as_modification", + "target": "components_file_list_diff_file_lists" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L94", + "weight": 1.0, + "source": "ui_test_file_list_rationale_94", + "target": "ui_test_file_list_test_diff_detects_tombstone_change_as_modification", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L95", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_detects_tombstone_change_as_modification", + "target": "components_file_list_filelistentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L97", + "weight": 1.0, + "source": "ui_test_file_list_test_diff_detects_tombstone_change_as_modification", + "target": "components_file_list_diff_file_lists" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L102", + "weight": 1.0, + "source": "ui_test_file_list_rationale_102", + "target": "ui_test_file_list_test_keep_local_action_constant_is_distinct", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_file_list.py", + "source_location": "L107", + "weight": 1.0, + "source": "ui_test_file_list_rationale_107", + "target": "ui_test_file_list_test_render_file_list_keep_local_menu_and_tombstone", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L13", + "weight": 1.0, + "source": "tests_unit_ui_test_theme_py", + "target": "ui_test_theme_test_root_css_contains_primary_palette", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L28", + "weight": 1.0, + "source": "tests_unit_ui_test_theme_py", + "target": "ui_test_theme_test_root_css_contains_okabe_ito_palette", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L43", + "weight": 1.0, + "source": "tests_unit_ui_test_theme_py", + "target": "ui_test_theme_test_root_css_contains_semantic_aliases", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L51", + "weight": 1.0, + "source": "tests_unit_ui_test_theme_py", + "target": "ui_test_theme_test_root_css_contains_typography_tokens", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L59", + "weight": 1.0, + "source": "tests_unit_ui_test_theme_py", + "target": "ui_test_theme_test_root_css_contains_spacing_scale", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L65", + "weight": 1.0, + "source": "tests_unit_ui_test_theme_py", + "target": "ui_test_theme_test_root_css_contains_radius_tokens", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L72", + "weight": 1.0, + "source": "tests_unit_ui_test_theme_py", + "target": "ui_test_theme_test_root_css_contains_shadow_tokens", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L81", + "weight": 1.0, + "source": "tests_unit_ui_test_theme_py", + "target": "ui_test_theme_test_root_css_navy_tinted_shadows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L88", + "weight": 1.0, + "source": "tests_unit_ui_test_theme_py", + "target": "ui_test_theme_test_root_css_motion_tokens", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L94", + "weight": 1.0, + "source": "tests_unit_ui_test_theme_py", + "target": "ui_test_theme_test_root_css_starts_with_root_block", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L101", + "weight": 1.0, + "source": "tests_unit_ui_test_theme_py", + "target": "ui_test_theme_test_root_css_includes_body_resets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L110", + "weight": 1.0, + "source": "tests_unit_ui_test_theme_py", + "target": "ui_test_theme_test_resolve_assets_dir_points_at_repo_assets_in_source_layout", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_theme_rationale_1", + "target": "tests_unit_ui_test_theme_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L82", + "weight": 1.0, + "source": "ui_test_theme_rationale_82", + "target": "ui_test_theme_test_root_css_navy_tinted_shadows", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L95", + "weight": 1.0, + "source": "ui_test_theme_rationale_95", + "target": "ui_test_theme_test_root_css_starts_with_root_block", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L102", + "weight": 1.0, + "source": "ui_test_theme_rationale_102", + "target": "ui_test_theme_test_root_css_includes_body_resets", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_theme.py", + "source_location": "L111", + "weight": 1.0, + "source": "ui_test_theme_rationale_111", + "target": "ui_test_theme_test_resolve_assets_dir_points_at_repo_assets_in_source_layout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L11", + "weight": 1.0, + "source": "tests_unit_ui_test_breadcrumb_py", + "target": "ui_test_breadcrumb_test_segments_from_none_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L15", + "weight": 1.0, + "source": "tests_unit_ui_test_breadcrumb_py", + "target": "ui_test_breadcrumb_test_segments_from_empty_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L19", + "weight": 1.0, + "source": "tests_unit_ui_test_breadcrumb_py", + "target": "ui_test_breadcrumb_test_segments_for_run_node", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L32", + "weight": 1.0, + "source": "tests_unit_ui_test_breadcrumb_py", + "target": "ui_test_breadcrumb_test_segments_strip_empty_components", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_breadcrumb_rationale_1", + "target": "tests_unit_ui_test_breadcrumb_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L12", + "weight": 1.0, + "source": "ui_test_breadcrumb_test_segments_from_none_returns_empty", + "target": "components_breadcrumb_segments_from_node_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L16", + "weight": 1.0, + "source": "ui_test_breadcrumb_test_segments_from_empty_returns_empty", + "target": "components_breadcrumb_segments_from_node_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L20", + "weight": 1.0, + "source": "ui_test_breadcrumb_test_segments_for_run_node", + "target": "components_breadcrumb_segments_from_node_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L22", + "weight": 1.0, + "source": "ui_test_breadcrumb_test_segments_for_run_node", + "target": "components_breadcrumb_breadcrumbsegment" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L33", + "weight": 1.0, + "source": "ui_test_breadcrumb_rationale_33", + "target": "ui_test_breadcrumb_test_segments_strip_empty_components", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L34", + "weight": 1.0, + "source": "ui_test_breadcrumb_test_segments_strip_empty_components", + "target": "components_breadcrumb_segments_from_node_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_breadcrumb.py", + "source_location": "L36", + "weight": 1.0, + "source": "ui_test_breadcrumb_test_segments_strip_empty_components", + "target": "components_breadcrumb_breadcrumbsegment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_nas_credentials_py", + "target": "ui_test_settings_nas_credentials_nas_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_nas_credentials_py", + "target": "ui_test_settings_nas_credentials_stage_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L56", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_nas_credentials_py", + "target": "ui_test_settings_nas_credentials_config_with", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L64", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_nas_credentials_py", + "target": "ui_test_settings_nas_credentials_testids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L77", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_nas_credentials_py", + "target": "ui_test_settings_nas_credentials_test_sections_omit_nas_credentials_without_password_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L85", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_nas_credentials_py", + "target": "ui_test_settings_nas_credentials_test_sections_insert_nas_credentials_after_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L99", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_nas_credentials_py", + "target": "ui_test_settings_nas_credentials_test_section_renders_one_row_per_password_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L118", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_nas_credentials_py", + "target": "ui_test_settings_nas_credentials_test_section_nav_entry_present_when_password_equipment_exists", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L130", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_nas_credentials_py", + "target": "ui_test_settings_nas_credentials_test_section_nav_entry_absent_for_stage_only_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L141", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_nas_credentials_py", + "target": "ui_test_settings_nas_credentials_test_present_password_opens_set_state_with_clear_action", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L155", + "weight": 1.0, + "source": "tests_unit_ui_test_settings_nas_credentials_py", + "target": "ui_test_settings_nas_credentials_test_handlers_factory_called_per_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_rationale_1", + "target": "tests_unit_ui_test_settings_nas_credentials_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L86", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_sections_insert_nas_credentials_after_equipment", + "target": "ui_test_settings_nas_credentials_nas_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L100", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_section_renders_one_row_per_password_equipment", + "target": "ui_test_settings_nas_credentials_nas_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L119", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_section_nav_entry_present_when_password_equipment_exists", + "target": "ui_test_settings_nas_credentials_nas_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L142", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_present_password_opens_set_state_with_clear_action", + "target": "ui_test_settings_nas_credentials_nas_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L156", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_handlers_factory_called_per_equipment_id", + "target": "ui_test_settings_nas_credentials_nas_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L26", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_nas_equipment", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L32", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_nas_equipment", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L78", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_sections_omit_nas_credentials_without_password_equipment", + "target": "ui_test_settings_nas_credentials_stage_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L131", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_section_nav_entry_absent_for_stage_only_config", + "target": "ui_test_settings_nas_credentials_stage_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L42", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_stage_equipment", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L48", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_stage_equipment", + "target": "config_models_orchestratorstagingtransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L78", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_sections_omit_nas_credentials_without_password_equipment", + "target": "ui_test_settings_nas_credentials_config_with", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L86", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_sections_insert_nas_credentials_after_equipment", + "target": "ui_test_settings_nas_credentials_config_with", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L100", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_section_renders_one_row_per_password_equipment", + "target": "ui_test_settings_nas_credentials_config_with", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L119", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_section_nav_entry_present_when_password_equipment_exists", + "target": "ui_test_settings_nas_credentials_config_with", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L131", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_section_nav_entry_absent_for_stage_only_config", + "target": "ui_test_settings_nas_credentials_config_with", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L142", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_present_password_opens_set_state_with_clear_action", + "target": "ui_test_settings_nas_credentials_config_with", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L156", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_handlers_factory_called_per_equipment_id", + "target": "ui_test_settings_nas_credentials_config_with", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L58", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_config_with", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L60", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_config_with", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L109", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_section_renders_one_row_per_password_equipment", + "target": "ui_test_settings_nas_credentials_testids", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L126", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_section_nav_entry_present_when_password_equipment_exists", + "target": "ui_test_settings_nas_credentials_testids", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L137", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_section_nav_entry_absent_for_stage_only_config", + "target": "ui_test_settings_nas_credentials_testids", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_settings_nas_credentials.py", + "source_location": "L150", + "weight": 1.0, + "source": "ui_test_settings_nas_credentials_test_present_password_opens_set_state_with_clear_action", + "target": "ui_test_settings_nas_credentials_testids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L50", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L56", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_mode_badge_renders_in_slot", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L65", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_test_run_badge_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L71", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_override_badge_renders_with_callback", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L81", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_sync_status_icon_renders_each_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L97", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_session_progress_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L112", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_credential_field_renders_each_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L128", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_credential_testids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L138", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L160", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_credential_field_not_set_state_renders_set_button_without_input", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L174", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_credential_field_set_state_renders_replace_and_clear_buttons", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L188", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_test_connection_panel_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L204", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_filter_chips_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L214", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_status_bar_segment_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L233", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_banner_stack_renders_with_active_banners", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L247", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_operations_modal_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L277", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_bandwidth_schedule_editor_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L301", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_validation_summary_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L326", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_tree_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L348", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_welcome_page_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L356", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_complete", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L373", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_incomplete", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L389", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_wizard_project_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L397", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_wizard_run_renders_test_mode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L405", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_wizard_run_renders_experimental_mode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L413", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_settings_page_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L422", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_settings_page_each_section_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L432", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_settings_page_setup_incomplete_auto_selects_first", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L446", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_settings_lims_section_renders_credential_field_with_e2e_hooks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L461", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_settings_lims_section_credential_field_opens_set_when_password_present", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L475", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_problems_page_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L507", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_problems_page_renders_empty_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L520", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_register_theme_returns_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L525", + "weight": 1.0, + "source": "tests_unit_ui_test_factories_smoke_py", + "target": "ui_test_factories_smoke_test_smoke_bind_global_shortcuts_does_not_raise", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_factories_smoke_rationale_1", + "target": "tests_unit_ui_test_factories_smoke_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L57", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_mode_badge_renders_in_slot", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L66", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_test_run_badge_renders", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L73", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_override_badge_renders_with_callback", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L89", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_sync_status_icon_renders_each_state", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L98", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_session_progress_renders", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L118", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_credential_field_renders_each_state", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L141", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L161", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_credential_field_not_set_state_renders_set_button_without_input", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L175", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_credential_field_set_state_renders_replace_and_clear_buttons", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L189", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_test_connection_panel_renders", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L209", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_filter_chips_renders", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L216", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_status_bar_segment_renders", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L241", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_banner_stack_renders_with_active_banners", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L267", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_operations_modal_renders", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L278", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_bandwidth_schedule_editor_renders", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L302", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_validation_summary_renders", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L335", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_tree_renders", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L51", + "weight": 1.0, + "source": "ui_test_factories_smoke_rationale_51", + "target": "ui_test_factories_smoke_slot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L156", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", + "target": "ui_test_factories_smoke_credential_testids", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L169", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_credential_field_not_set_state_renders_set_button_without_input", + "target": "ui_test_factories_smoke_credential_testids", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L183", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_credential_field_set_state_renders_replace_and_clear_buttons", + "target": "ui_test_factories_smoke_credential_testids", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L457", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_settings_lims_section_renders_credential_field_with_e2e_hooks", + "target": "ui_test_factories_smoke_credential_testids", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L470", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_settings_lims_section_credential_field_opens_set_when_password_present", + "target": "ui_test_factories_smoke_credential_testids", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L129", + "weight": 1.0, + "source": "ui_test_factories_smoke_rationale_129", + "target": "ui_test_factories_smoke_credential_testids", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L139", + "weight": 1.0, + "source": "ui_test_factories_smoke_rationale_139", + "target": "ui_test_factories_smoke_test_credential_field_editing_state_renders_a_password_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L234", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_banner_stack_renders_with_active_banners", + "target": "ui_notifications_reset_for_tests" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L235", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_banner_stack_renders_with_active_banners", + "target": "ui_notifications_show_banner" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L374", + "weight": 1.0, + "source": "ui_test_factories_smoke_test_smoke_file_explorer_page_renders_setup_incomplete", + "target": "ui_notifications_reset_for_tests" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_factories_smoke.py", + "source_location": "L447", + "weight": 1.0, + "source": "ui_test_factories_smoke_rationale_447", + "target": "ui_test_factories_smoke_test_settings_lims_section_renders_credential_field_with_e2e_hooks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L14", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_primary_palette_matches_designmd", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_okabe_ito_palette_matches_designmd", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L42", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_semantic_aliases_are_okabe_ito", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L51", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_warning_token_is_oi_orange", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L57", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_typography_uses_frontend_override", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L67", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_type_scale_matches_designmd", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L81", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_spacing_scale_4px_grid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L98", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_radius_tokens_match_designmd", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L107", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_shadows_are_navy_tinted", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L114", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_motion_tokens_match_designmd", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L121", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_okabe_ito_series_order_is_fixed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L135", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_vermilion_is_last_in_series", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L141", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_no_blue_collision_in_series_first_six", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L152", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_badge_text_variants_are_wcag_aa", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L164", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_alert_text_variants_match_designmd", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L175", + "weight": 1.0, + "source": "tests_unit_ui_test_design_py", + "target": "ui_test_design_test_yellow_is_present_but_only_for_fills", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_design_rationale_1", + "target": "tests_unit_ui_test_design_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L15", + "weight": 1.0, + "source": "ui_test_design_rationale_15", + "target": "ui_test_design_test_primary_palette_matches_designmd", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L30", + "weight": 1.0, + "source": "ui_test_design_rationale_30", + "target": "ui_test_design_test_okabe_ito_palette_matches_designmd", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L43", + "weight": 1.0, + "source": "ui_test_design_rationale_43", + "target": "ui_test_design_test_semantic_aliases_are_okabe_ito", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L52", + "weight": 1.0, + "source": "ui_test_design_rationale_52", + "target": "ui_test_design_test_warning_token_is_oi_orange", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L58", + "weight": 1.0, + "source": "ui_test_design_rationale_58", + "target": "ui_test_design_test_typography_uses_frontend_override", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L68", + "weight": 1.0, + "source": "ui_test_design_rationale_68", + "target": "ui_test_design_test_type_scale_matches_designmd", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L82", + "weight": 1.0, + "source": "ui_test_design_rationale_82", + "target": "ui_test_design_test_spacing_scale_4px_grid", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L99", + "weight": 1.0, + "source": "ui_test_design_rationale_99", + "target": "ui_test_design_test_radius_tokens_match_designmd", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L108", + "weight": 1.0, + "source": "ui_test_design_rationale_108", + "target": "ui_test_design_test_shadows_are_navy_tinted", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L115", + "weight": 1.0, + "source": "ui_test_design_rationale_115", + "target": "ui_test_design_test_motion_tokens_match_designmd", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L122", + "weight": 1.0, + "source": "ui_test_design_rationale_122", + "target": "ui_test_design_test_okabe_ito_series_order_is_fixed", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L136", + "weight": 1.0, + "source": "ui_test_design_rationale_136", + "target": "ui_test_design_test_vermilion_is_last_in_series", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L142", + "weight": 1.0, + "source": "ui_test_design_rationale_142", + "target": "ui_test_design_test_no_blue_collision_in_series_first_six", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L153", + "weight": 1.0, + "source": "ui_test_design_rationale_153", + "target": "ui_test_design_test_badge_text_variants_are_wcag_aa", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L165", + "weight": 1.0, + "source": "ui_test_design_rationale_165", + "target": "ui_test_design_test_alert_text_variants_match_designmd", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_design.py", + "source_location": "L176", + "weight": 1.0, + "source": "ui_test_design_rationale_176", + "target": "ui_test_design_test_yellow_is_present_but_only_for_fills", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L17", + "weight": 1.0, + "source": "tests_unit_ui_test_travelling_badge_py", + "target": "ui_test_travelling_badge_hard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L21", + "weight": 1.0, + "source": "tests_unit_ui_test_travelling_badge_py", + "target": "ui_test_travelling_badge_soft", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_unit_ui_test_travelling_badge_py", + "target": "ui_test_travelling_badge_test_badge_on_root_when_all_collapsed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L34", + "weight": 1.0, + "source": "tests_unit_ui_test_travelling_badge_py", + "target": "ui_test_travelling_badge_test_badge_travels_inward_as_nodes_expand", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_unit_ui_test_travelling_badge_py", + "target": "ui_test_travelling_badge_test_badge_lands_on_leaf_when_fully_expanded", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_unit_ui_test_travelling_badge_py", + "target": "ui_test_travelling_badge_test_red_beats_amber_when_aggregated_on_same_node", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L62", + "weight": 1.0, + "source": "tests_unit_ui_test_travelling_badge_py", + "target": "ui_test_travelling_badge_test_amber_only_when_no_hard_findings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L68", + "weight": 1.0, + "source": "tests_unit_ui_test_travelling_badge_py", + "target": "ui_test_travelling_badge_test_two_equipment_get_independent_badges", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_travelling_badge_rationale_1", + "target": "tests_unit_ui_test_travelling_badge_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L28", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_badge_on_root_when_all_collapsed", + "target": "ui_test_travelling_badge_hard", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L36", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_badge_travels_inward_as_nodes_expand", + "target": "ui_test_travelling_badge_hard", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L42", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_badge_lands_on_leaf_when_fully_expanded", + "target": "ui_test_travelling_badge_hard", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L54", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_red_beats_amber_when_aggregated_on_same_node", + "target": "ui_test_travelling_badge_hard", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L70", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_two_equipment_get_independent_badges", + "target": "ui_test_travelling_badge_hard", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L18", + "weight": 1.0, + "source": "ui_test_travelling_badge_hard", + "target": "components_travelling_badge_findinglocation" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L55", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_red_beats_amber_when_aggregated_on_same_node", + "target": "ui_test_travelling_badge_soft", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L63", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_amber_only_when_no_hard_findings", + "target": "ui_test_travelling_badge_soft", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L71", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_two_equipment_get_independent_badges", + "target": "ui_test_travelling_badge_soft", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L22", + "weight": 1.0, + "source": "ui_test_travelling_badge_soft", + "target": "components_travelling_badge_findinglocation" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L26", + "weight": 1.0, + "source": "ui_test_travelling_badge_rationale_26", + "target": "ui_test_travelling_badge_test_badge_on_root_when_all_collapsed", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L30", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_badge_on_root_when_all_collapsed", + "target": "components_travelling_badge_travelling_badges" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L31", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_badge_on_root_when_all_collapsed", + "target": "components_travelling_badge_badgeprops" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L35", + "weight": 1.0, + "source": "ui_test_travelling_badge_rationale_35", + "target": "ui_test_travelling_badge_test_badge_travels_inward_as_nodes_expand", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L37", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_badge_travels_inward_as_nodes_expand", + "target": "components_travelling_badge_travelling_badges" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L38", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_badge_travels_inward_as_nodes_expand", + "target": "components_travelling_badge_badgeprops" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L48", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_badge_lands_on_leaf_when_fully_expanded", + "target": "components_travelling_badge_travelling_badges" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L49", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_badge_lands_on_leaf_when_fully_expanded", + "target": "components_travelling_badge_badgeprops" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L57", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_red_beats_amber_when_aggregated_on_same_node", + "target": "components_travelling_badge_travelling_badges" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L59", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_red_beats_amber_when_aggregated_on_same_node", + "target": "components_travelling_badge_badgeprops" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L64", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_amber_only_when_no_hard_findings", + "target": "components_travelling_badge_travelling_badges" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L65", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_amber_only_when_no_hard_findings", + "target": "components_travelling_badge_badgeprops" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L73", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_two_equipment_get_independent_badges", + "target": "components_travelling_badge_travelling_badges" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_travelling_badge.py", + "source_location": "L75", + "weight": 1.0, + "source": "ui_test_travelling_badge_test_two_equipment_get_independent_badges", + "target": "components_travelling_badge_badgeprops" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L30", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_project_page_py", + "target": "ui_test_wizard_project_page_test_can_advance_equipment_step_requires_selection", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_project_page_py", + "target": "ui_test_wizard_project_page_test_can_advance_variables_step_always_true", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L45", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_project_page_py", + "target": "ui_test_wizard_project_page_test_can_advance_confirm_step_always_true", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L49", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_project_page_py", + "target": "ui_test_wizard_project_page_test_can_advance_default_step_is_lims_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L58", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_project_page_py", + "target": "ui_test_wizard_project_page_test_can_advance_readme_blocks_on_partial_core_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L71", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_project_page_py", + "target": "ui_test_wizard_project_page_test_disk_space_message_none_when_unknown", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L76", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_project_page_py", + "target": "ui_test_wizard_project_page_test_disk_space_message_none_when_ample", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L81", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_project_page_py", + "target": "ui_test_wizard_project_page_test_disk_space_message_present_just_below_threshold", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L92", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_project_page_py", + "target": "ui_test_wizard_project_page_test_state_lims_project_name_defaults_empty_and_is_settable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L104", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_project_page_py", + "target": "ui_test_wizard_project_page_test_render_project_wizard_with_choices_does_not_raise", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L114", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_project_page_py", + "target": "ui_test_wizard_project_page_test_render_project_wizard_with_empty_choices_does_not_raise", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L123", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_project_page_py", + "target": "ui_test_wizard_project_page_test_render_project_wizard_defaults_state_when_omitted", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L128", + "weight": 1.0, + "source": "tests_unit_ui_test_wizard_project_page_py", + "target": "ui_test_wizard_project_page_test_wizard_project_step_titles_cover_every_step", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_wizard_project_page_rationale_1", + "target": "tests_unit_ui_test_wizard_project_page_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L31", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_can_advance_equipment_step_requires_selection", + "target": "pages_wizard_project_projectwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L39", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_can_advance_variables_step_always_true", + "target": "pages_wizard_project_projectwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L46", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_can_advance_confirm_step_always_true", + "target": "pages_wizard_project_projectwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L51", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_can_advance_default_step_is_lims_project", + "target": "pages_wizard_project_projectwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L59", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_can_advance_readme_blocks_on_partial_core_fields", + "target": "pages_wizard_project_projectwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L72", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_disk_space_message_none_when_unknown", + "target": "pages_wizard_project_projectwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L73", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_disk_space_message_none_when_unknown", + "target": "pages_wizard_project_disk_space_pre_flight_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L77", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_disk_space_message_none_when_ample", + "target": "pages_wizard_project_projectwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L78", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_disk_space_message_none_when_ample", + "target": "pages_wizard_project_disk_space_pre_flight_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L82", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_disk_space_message_present_just_below_threshold", + "target": "pages_wizard_project_projectwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L83", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_disk_space_message_present_just_below_threshold", + "target": "pages_wizard_project_disk_space_pre_flight_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L93", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_state_lims_project_name_defaults_empty_and_is_settable", + "target": "pages_wizard_project_projectwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L105", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_render_project_wizard_with_choices_does_not_raise", + "target": "pages_wizard_project_render_project_wizard" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L106", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_render_project_wizard_with_choices_does_not_raise", + "target": "pages_wizard_project_projectwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L115", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_render_project_wizard_with_empty_choices_does_not_raise", + "target": "pages_wizard_project_render_project_wizard" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L116", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_render_project_wizard_with_empty_choices_does_not_raise", + "target": "pages_wizard_project_projectwizardstate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_wizard_project_page.py", + "source_location": "L124", + "weight": 1.0, + "source": "ui_test_wizard_project_page_test_render_project_wizard_defaults_state_when_omitted", + "target": "pages_wizard_project_render_project_wizard" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_unit_ui_test_folder_feed_py", + "target": "ui_test_folder_feed_test_folder_feed_start_then_stop_calls_fetch_at_least_once", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L34", + "weight": 1.0, + "source": "tests_unit_ui_test_folder_feed_py", + "target": "ui_test_folder_feed_test_folder_feed_switching_paths_stops_previous", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_unit_ui_test_folder_feed_py", + "target": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L73", + "weight": 1.0, + "source": "tests_unit_ui_test_folder_feed_py", + "target": "ui_test_folder_feed_test_refresh_coordinator_coalesces_within_window", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_test_folder_feed_rationale_1", + "target": "tests_unit_ui_test_folder_feed_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L25", + "weight": 1.0, + "source": "ui_test_folder_feed_test_folder_feed_start_then_stop_calls_fetch_at_least_once", + "target": "client_folder_feed_folderfeed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L41", + "weight": 1.0, + "source": "ui_test_folder_feed_test_folder_feed_switching_paths_stops_previous", + "target": "client_folder_feed_folderfeed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L60", + "weight": 1.0, + "source": "ui_test_folder_feed_test_folder_feed_pause_skips_fetch", + "target": "client_folder_feed_folderfeed" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/ui/test_folder_feed.py", + "source_location": "L74", + "weight": 1.0, + "source": "ui_test_folder_feed_test_refresh_coordinator_coalesces_within_window", + "target": "client_refresh_coordinator_refreshcoordinator" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L14", + "weight": 1.0, + "source": "tests_unit_lims_test_catalogue_py", + "target": "lims_test_catalogue_make_catalogue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L36", + "weight": 1.0, + "source": "tests_unit_lims_test_catalogue_py", + "target": "lims_test_catalogue_test_round_trip_via_write_then_read", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_unit_lims_test_catalogue_py", + "target": "lims_test_catalogue_test_read_missing_file_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_unit_lims_test_catalogue_py", + "target": "lims_test_catalogue_test_read_invalid_json_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L60", + "weight": 1.0, + "source": "tests_unit_lims_test_catalogue_py", + "target": "lims_test_catalogue_test_read_non_object_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L67", + "weight": 1.0, + "source": "tests_unit_lims_test_catalogue_py", + "target": "lims_test_catalogue_test_schema_version_mismatch_treated_as_absent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L85", + "weight": 1.0, + "source": "tests_unit_lims_test_catalogue_py", + "target": "lims_test_catalogue_test_endpoint_mismatch_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_lims_test_catalogue_py", + "target": "lims_test_catalogue_test_write_creates_parent_directory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L100", + "weight": 1.0, + "source": "tests_unit_lims_test_catalogue_py", + "target": "lims_test_catalogue_test_write_atomic_replaces_previous_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L121", + "weight": 1.0, + "source": "tests_unit_lims_test_catalogue_py", + "target": "lims_test_catalogue_test_read_handles_missing_projects_array", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L1", + "weight": 1.0, + "source": "lims_test_catalogue_rationale_1", + "target": "tests_unit_lims_test_catalogue_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L38", + "weight": 1.0, + "source": "lims_test_catalogue_test_round_trip_via_write_then_read", + "target": "lims_test_catalogue_make_catalogue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L87", + "weight": 1.0, + "source": "lims_test_catalogue_test_endpoint_mismatch_raises", + "target": "lims_test_catalogue_make_catalogue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L95", + "weight": 1.0, + "source": "lims_test_catalogue_test_write_creates_parent_directory", + "target": "lims_test_catalogue_make_catalogue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L102", + "weight": 1.0, + "source": "lims_test_catalogue_test_write_atomic_replaces_previous_file", + "target": "lims_test_catalogue_make_catalogue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L15", + "weight": 1.0, + "source": "lims_test_catalogue_make_catalogue", + "target": "lims_catalogue_offlinecatalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L21", + "weight": 1.0, + "source": "lims_test_catalogue_make_catalogue", + "target": "lims_schemas_limsproject" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L39", + "weight": 1.0, + "source": "lims_test_catalogue_test_round_trip_via_write_then_read", + "target": "lims_catalogue_write_catalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L40", + "weight": 1.0, + "source": "lims_test_catalogue_test_round_trip_via_write_then_read", + "target": "lims_catalogue_read_catalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L50", + "weight": 1.0, + "source": "lims_test_catalogue_test_read_missing_file_raises", + "target": "lims_catalogue_read_catalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L57", + "weight": 1.0, + "source": "lims_test_catalogue_test_read_invalid_json_raises", + "target": "lims_catalogue_read_catalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L64", + "weight": 1.0, + "source": "lims_test_catalogue_test_read_non_object_raises", + "target": "lims_catalogue_read_catalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L80", + "weight": 1.0, + "source": "lims_test_catalogue_test_schema_version_mismatch_treated_as_absent", + "target": "lims_catalogue_read_catalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L88", + "weight": 1.0, + "source": "lims_test_catalogue_test_endpoint_mismatch_raises", + "target": "lims_catalogue_write_catalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L90", + "weight": 1.0, + "source": "lims_test_catalogue_test_endpoint_mismatch_raises", + "target": "lims_catalogue_read_catalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L96", + "weight": 1.0, + "source": "lims_test_catalogue_test_write_creates_parent_directory", + "target": "lims_catalogue_write_catalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L103", + "weight": 1.0, + "source": "lims_test_catalogue_test_write_atomic_replaces_previous_file", + "target": "lims_catalogue_write_catalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L106", + "weight": 1.0, + "source": "lims_test_catalogue_test_write_atomic_replaces_previous_file", + "target": "lims_catalogue_offlinecatalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L116", + "weight": 1.0, + "source": "lims_test_catalogue_test_write_atomic_replaces_previous_file", + "target": "lims_catalogue_read_catalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_catalogue.py", + "source_location": "L130", + "weight": 1.0, + "source": "lims_test_catalogue_test_read_handles_missing_projects_array", + "target": "lims_catalogue_read_catalogue" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L45", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L61", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L70", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L79", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_get_returns_none_for_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L85", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_delete_missing_is_silent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_is_keyring_available_true", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L99", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_is_keyring_available_false_on_broken_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L105", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L122", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_delete", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L138", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L155", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_no_passphrase_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L162", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_empty_passphrase_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L169", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_file_format_integrity", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L185", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_corrupt_file_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L198", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_unsupported_version_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L212", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_missing_fields_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L224", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_set_then_overwrite", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L236", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_keyring_set_failure_falls_back", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L249", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_is_keyring_available_false_on_unexpected_exception", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L269", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L281", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_delete_when_no_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L292", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_delete_when_username_absent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L306", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L324", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L360", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_envelope_must_be_object", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L373", + "weight": 1.0, + "source": "tests_unit_lims_test_keyring_store_py", + "target": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L1", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_1", + "target": "tests_unit_lims_test_keyring_store_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L30", + "weight": 1.0, + "source": "lims_test_keyring_store_inmemorykeyring", + "target": "lims_test_keyring_store_inmemorykeyring_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L33", + "weight": 1.0, + "source": "lims_test_keyring_store_inmemorykeyring", + "target": "lims_test_keyring_store_inmemorykeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L36", + "weight": 1.0, + "source": "lims_test_keyring_store_inmemorykeyring", + "target": "lims_test_keyring_store_inmemorykeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L39", + "weight": 1.0, + "source": "lims_test_keyring_store_inmemorykeyring", + "target": "lims_test_keyring_store_inmemorykeyring_delete_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L71", + "weight": 1.0, + "source": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", + "target": "lims_test_keyring_store_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L80", + "weight": 1.0, + "source": "lims_test_keyring_store_test_get_returns_none_for_missing", + "target": "lims_test_keyring_store_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L86", + "weight": 1.0, + "source": "lims_test_keyring_store_test_delete_missing_is_silent", + "target": "lims_test_keyring_store_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L94", + "weight": 1.0, + "source": "lims_test_keyring_store_test_is_keyring_available_true", + "target": "lims_test_keyring_store_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L386", + "weight": 1.0, + "source": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", + "target": "lims_test_keyring_store_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L26", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_26", + "target": "lims_test_keyring_store_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L21", + "weight": 0.8, + "source": "lims_test_keyring_store_inmemorykeyring", + "target": "exlab_wizard_errors_keyringunavailableerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L22", + "weight": 0.8, + "source": "lims_test_keyring_store_inmemorykeyring", + "target": "lims_keyring_store_keyringstore", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L50", + "weight": 1.0, + "source": "lims_test_keyring_store_brokenkeyring", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L53", + "weight": 1.0, + "source": "lims_test_keyring_store_brokenkeyring", + "target": "lims_test_keyring_store_brokenkeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L56", + "weight": 1.0, + "source": "lims_test_keyring_store_brokenkeyring", + "target": "lims_test_keyring_store_brokenkeyring_delete_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L100", + "weight": 1.0, + "source": "lims_test_keyring_store_test_is_keyring_available_false_on_broken_backend", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L107", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_round_trip", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L123", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L139", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L156", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_no_passphrase_raises", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L163", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_empty_passphrase_raises", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L171", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_file_format_integrity", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L189", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_corrupt_file_raises", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L203", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_unsupported_version_raises", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L215", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_missing_fields_raises", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L226", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_set_then_overwrite", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L240", + "weight": 1.0, + "source": "lims_test_keyring_store_test_keyring_set_failure_falls_back", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L273", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L283", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete_when_no_file", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L294", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete_when_username_absent", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L315", + "weight": 1.0, + "source": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L351", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L364", + "weight": 1.0, + "source": "lims_test_keyring_store_test_envelope_must_be_object", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L378", + "weight": 1.0, + "source": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L46", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_46", + "target": "lims_test_keyring_store_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L21", + "weight": 0.8, + "source": "lims_test_keyring_store_brokenkeyring", + "target": "exlab_wizard_errors_keyringunavailableerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L22", + "weight": 0.8, + "source": "lims_test_keyring_store_brokenkeyring", + "target": "lims_keyring_store_keyringstore", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L74", + "weight": 1.0, + "source": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L82", + "weight": 1.0, + "source": "lims_test_keyring_store_test_get_returns_none_for_missing", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L119", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_round_trip", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L135", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L152", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L195", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_corrupt_file_raises", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L209", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_unsupported_version_raises", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L221", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_missing_fields_raises", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L233", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_set_then_overwrite", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L246", + "weight": 1.0, + "source": "lims_test_keyring_store_test_keyring_set_failure_falls_back", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L278", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L303", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete_when_username_absent", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L321", + "weight": 1.0, + "source": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L357", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L370", + "weight": 1.0, + "source": "lims_test_keyring_store_test_envelope_must_be_object", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L391", + "weight": 1.0, + "source": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", + "target": "lims_test_keyring_store_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L73", + "weight": 1.0, + "source": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", + "target": "lims_test_keyring_store_brokenkeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L112", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_round_trip", + "target": "lims_test_keyring_store_brokenkeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L128", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete", + "target": "lims_test_keyring_store_brokenkeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L144", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", + "target": "lims_test_keyring_store_brokenkeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L159", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_no_passphrase_raises", + "target": "lims_test_keyring_store_brokenkeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L166", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_empty_passphrase_raises", + "target": "lims_test_keyring_store_brokenkeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L176", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_file_format_integrity", + "target": "lims_test_keyring_store_brokenkeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L231", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_set_then_overwrite", + "target": "lims_test_keyring_store_brokenkeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L245", + "weight": 1.0, + "source": "lims_test_keyring_store_test_keyring_set_failure_falls_back", + "target": "lims_test_keyring_store_brokenkeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L299", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete_when_username_absent", + "target": "lims_test_keyring_store_brokenkeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L383", + "weight": 1.0, + "source": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", + "target": "lims_test_keyring_store_brokenkeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L75", + "weight": 1.0, + "source": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", + "target": "lims_test_keyring_store_brokenkeyring_delete_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L90", + "weight": 1.0, + "source": "lims_test_keyring_store_test_delete_missing_is_silent", + "target": "lims_test_keyring_store_brokenkeyring_delete_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L129", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete", + "target": "lims_test_keyring_store_brokenkeyring_delete_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L289", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete_when_no_file", + "target": "lims_test_keyring_store_brokenkeyring_delete_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L302", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete_when_username_absent", + "target": "lims_test_keyring_store_brokenkeyring_delete_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L71", + "weight": 1.0, + "source": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L80", + "weight": 1.0, + "source": "lims_test_keyring_store_test_get_returns_none_for_missing", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L86", + "weight": 1.0, + "source": "lims_test_keyring_store_test_delete_missing_is_silent", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L94", + "weight": 1.0, + "source": "lims_test_keyring_store_test_is_keyring_available_true", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L100", + "weight": 1.0, + "source": "lims_test_keyring_store_test_is_keyring_available_false_on_broken_backend", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L107", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_round_trip", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L123", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L139", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L156", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_no_passphrase_raises", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L163", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_empty_passphrase_raises", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L171", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_file_format_integrity", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L189", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_corrupt_file_raises", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L203", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_unsupported_version_raises", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L215", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_missing_fields_raises", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L226", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_set_then_overwrite", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L240", + "weight": 1.0, + "source": "lims_test_keyring_store_test_keyring_set_failure_falls_back", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L264", + "weight": 1.0, + "source": "lims_test_keyring_store_test_is_keyring_available_false_on_unexpected_exception", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L273", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L283", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete_when_no_file", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L294", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete_when_username_absent", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L315", + "weight": 1.0, + "source": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L351", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L364", + "weight": 1.0, + "source": "lims_test_keyring_store_test_envelope_must_be_object", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L378", + "weight": 1.0, + "source": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", + "target": "lims_test_keyring_store_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L72", + "weight": 1.0, + "source": "lims_test_keyring_store_test_set_get_delete_via_os_keyring", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L81", + "weight": 1.0, + "source": "lims_test_keyring_store_test_get_returns_none_for_missing", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L87", + "weight": 1.0, + "source": "lims_test_keyring_store_test_delete_missing_is_silent", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L95", + "weight": 1.0, + "source": "lims_test_keyring_store_test_is_keyring_available_true", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L101", + "weight": 1.0, + "source": "lims_test_keyring_store_test_is_keyring_available_false_on_broken_backend", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L106", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_106", + "target": "lims_test_keyring_store_test_fallback_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L108", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_round_trip", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L124", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L140", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_wrong_passphrase_raises", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L157", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_no_passphrase_raises", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L164", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_empty_passphrase_raises", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L170", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_170", + "target": "lims_test_keyring_store_test_fallback_file_format_integrity", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L172", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_file_format_integrity", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L190", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_corrupt_file_raises", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L204", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_unsupported_version_raises", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L216", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_missing_fields_raises", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L225", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_225", + "target": "lims_test_keyring_store_test_fallback_set_then_overwrite", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L227", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_set_then_overwrite", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L237", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_237", + "target": "lims_test_keyring_store_test_keyring_set_failure_falls_back", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L241", + "weight": 1.0, + "source": "lims_test_keyring_store_test_keyring_set_failure_falls_back", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L250", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_250", + "target": "lims_test_keyring_store_test_is_keyring_available_false_on_unexpected_exception", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L265", + "weight": 1.0, + "source": "lims_test_keyring_store_test_is_keyring_available_false_on_unexpected_exception", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L270", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_270", + "target": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L274", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_get_when_no_secrets_file", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L282", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_282", + "target": "lims_test_keyring_store_test_fallback_delete_when_no_file", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L284", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete_when_no_file", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L293", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_293", + "target": "lims_test_keyring_store_test_fallback_delete_when_username_absent", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L295", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_delete_when_username_absent", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L307", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_307", + "target": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L316", + "weight": 1.0, + "source": "lims_test_keyring_store_test_load_fallback_unreadable_path_raises", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L325", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_325", + "target": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L352", + "weight": 1.0, + "source": "lims_test_keyring_store_test_fallback_plaintext_must_be_object", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L361", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_361", + "target": "lims_test_keyring_store_test_envelope_must_be_object", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L365", + "weight": 1.0, + "source": "lims_test_keyring_store_test_envelope_must_be_object", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L374", + "weight": 1.0, + "source": "lims_test_keyring_store_rationale_374", + "target": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_keyring_store.py", + "source_location": "L379", + "weight": 1.0, + "source": "lims_test_keyring_store_test_get_consults_fallback_when_keyring_missing", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "lims_init_rationale_1", + "target": "tests_unit_lims_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "lims_init_rationale_1", + "target": "src_exlab_wizard_lims_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L22", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L35", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_login_happy_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_login_uses_explicit_password_over_provider", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L59", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_login_wrong_password_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L69", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_login_with_no_password_raises_config_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L79", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_list_projects_returns_typed_rows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_list_projects_status_filter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L122", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_get_project_by_uid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L134", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_get_project_by_short_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L146", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_get_project_404_returns_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L157", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_get_me", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L169", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_health_check_ok", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L182", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_health_check_failure_returns_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L197", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_relogin_after_401", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L213", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_health_check_returns_non200_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L243", + "weight": 1.0, + "source": "tests_unit_lims_test_client_py", + "target": "lims_test_client_test_endpoint_strips_trailing_slash", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L1", + "weight": 1.0, + "source": "lims_test_client_rationale_1", + "target": "tests_unit_lims_test_client_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L37", + "weight": 1.0, + "source": "lims_test_client_test_login_happy_path", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L50", + "weight": 1.0, + "source": "lims_test_client_test_login_uses_explicit_password_over_provider", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L61", + "weight": 1.0, + "source": "lims_test_client_test_login_wrong_password_raises", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L71", + "weight": 1.0, + "source": "lims_test_client_test_login_with_no_password_raises_config_error", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L81", + "weight": 1.0, + "source": "lims_test_client_test_list_projects_returns_typed_rows", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L113", + "weight": 1.0, + "source": "lims_test_client_test_list_projects_status_filter", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L124", + "weight": 1.0, + "source": "lims_test_client_test_get_project_by_uid", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L136", + "weight": 1.0, + "source": "lims_test_client_test_get_project_by_short_id", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L148", + "weight": 1.0, + "source": "lims_test_client_test_get_project_404_returns_none", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L159", + "weight": 1.0, + "source": "lims_test_client_test_get_me", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L171", + "weight": 1.0, + "source": "lims_test_client_test_health_check_ok", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L185", + "weight": 1.0, + "source": "lims_test_client_test_health_check_failure_returns_status", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L202", + "weight": 1.0, + "source": "lims_test_client_test_relogin_after_401", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L233", + "weight": 1.0, + "source": "lims_test_client_test_health_check_returns_non200_status", + "target": "lims_test_client_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L23", + "weight": 1.0, + "source": "lims_test_client_make_client", + "target": "lims_client_limsclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L36", + "weight": 1.0, + "source": "lims_test_client_test_login_happy_path", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L49", + "weight": 1.0, + "source": "lims_test_client_test_login_uses_explicit_password_over_provider", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L60", + "weight": 1.0, + "source": "lims_test_client_test_login_wrong_password_raises", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L70", + "weight": 1.0, + "source": "lims_test_client_test_login_with_no_password_raises_config_error", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L80", + "weight": 1.0, + "source": "lims_test_client_test_list_projects_returns_typed_rows", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L112", + "weight": 1.0, + "source": "lims_test_client_test_list_projects_status_filter", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L123", + "weight": 1.0, + "source": "lims_test_client_test_get_project_by_uid", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L135", + "weight": 1.0, + "source": "lims_test_client_test_get_project_by_short_id", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L147", + "weight": 1.0, + "source": "lims_test_client_test_get_project_404_returns_none", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L158", + "weight": 1.0, + "source": "lims_test_client_test_get_me", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L170", + "weight": 1.0, + "source": "lims_test_client_test_health_check_ok", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L183", + "weight": 1.0, + "source": "lims_test_client_rationale_183", + "target": "lims_test_client_test_health_check_failure_returns_status", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L184", + "weight": 1.0, + "source": "lims_test_client_test_health_check_failure_returns_status", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L198", + "weight": 1.0, + "source": "lims_test_client_rationale_198", + "target": "lims_test_client_test_relogin_after_401", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L201", + "weight": 1.0, + "source": "lims_test_client_test_relogin_after_401", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L214", + "weight": 1.0, + "source": "lims_test_client_rationale_214", + "target": "lims_test_client_test_health_check_returns_non200_status", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_client.py", + "source_location": "L244", + "weight": 1.0, + "source": "lims_test_client_test_endpoint_strips_trailing_slash", + "target": "lims_client_limsclient" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L19", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L39", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_init_creates_table_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L47", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_upsert_many_then_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L59", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_upsert_many_empty_is_noop", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L70", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_upsert_updates_existing_row", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L95", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_get_project_by_uid_or_short_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L108", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_get_project_missing_returns_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L118", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_list_projects_status_filter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L135", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_is_fresh_true_when_within_ttl", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L145", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_is_fresh_false_when_stale", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L156", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_is_fresh_false_when_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L165", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_is_fresh_handles_zulu_suffix", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L179", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_is_fresh_ignores_invalid_timestamp", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L192", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_endpoint_isolates_rows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L206", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_require_conn_before_init_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L212", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_close_is_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L220", + "weight": 1.0, + "source": "tests_unit_lims_test_cache_py", + "target": "lims_test_cache_test_is_fresh_handles_naive_timestamp", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L1", + "weight": 1.0, + "source": "lims_test_cache_rationale_1", + "target": "tests_unit_lims_test_cache_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L51", + "weight": 1.0, + "source": "lims_test_cache_test_upsert_many_then_list", + "target": "lims_test_cache_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L74", + "weight": 1.0, + "source": "lims_test_cache_test_upsert_updates_existing_row", + "target": "lims_test_cache_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L99", + "weight": 1.0, + "source": "lims_test_cache_test_get_project_by_uid_or_short_id", + "target": "lims_test_cache_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L125", + "weight": 1.0, + "source": "lims_test_cache_test_list_projects_status_filter", + "target": "lims_test_cache_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L139", + "weight": 1.0, + "source": "lims_test_cache_test_is_fresh_true_when_within_ttl", + "target": "lims_test_cache_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L150", + "weight": 1.0, + "source": "lims_test_cache_test_is_fresh_false_when_stale", + "target": "lims_test_cache_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L172", + "weight": 1.0, + "source": "lims_test_cache_test_is_fresh_handles_zulu_suffix", + "target": "lims_test_cache_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L185", + "weight": 1.0, + "source": "lims_test_cache_test_is_fresh_ignores_invalid_timestamp", + "target": "lims_test_cache_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L196", + "weight": 1.0, + "source": "lims_test_cache_test_endpoint_isolates_rows", + "target": "lims_test_cache_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L227", + "weight": 1.0, + "source": "lims_test_cache_test_is_fresh_handles_naive_timestamp", + "target": "lims_test_cache_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L26", + "weight": 1.0, + "source": "lims_test_cache_project", + "target": "lims_schemas_limsproject" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L40", + "weight": 1.0, + "source": "lims_test_cache_test_init_creates_table_idempotent", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L48", + "weight": 1.0, + "source": "lims_test_cache_test_upsert_many_then_list", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L60", + "weight": 1.0, + "source": "lims_test_cache_test_upsert_many_empty_is_noop", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L71", + "weight": 1.0, + "source": "lims_test_cache_test_upsert_updates_existing_row", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L77", + "weight": 1.0, + "source": "lims_test_cache_test_upsert_updates_existing_row", + "target": "lims_schemas_limsproject" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L96", + "weight": 1.0, + "source": "lims_test_cache_test_get_project_by_uid_or_short_id", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L109", + "weight": 1.0, + "source": "lims_test_cache_test_get_project_missing_returns_none", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L119", + "weight": 1.0, + "source": "lims_test_cache_test_list_projects_status_filter", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L136", + "weight": 1.0, + "source": "lims_test_cache_test_is_fresh_true_when_within_ttl", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L146", + "weight": 1.0, + "source": "lims_test_cache_test_is_fresh_false_when_stale", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L157", + "weight": 1.0, + "source": "lims_test_cache_test_is_fresh_false_when_empty", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L166", + "weight": 1.0, + "source": "lims_test_cache_test_is_fresh_handles_zulu_suffix", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L180", + "weight": 1.0, + "source": "lims_test_cache_test_is_fresh_ignores_invalid_timestamp", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L193", + "weight": 1.0, + "source": "lims_test_cache_test_endpoint_isolates_rows", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L207", + "weight": 1.0, + "source": "lims_test_cache_test_require_conn_before_init_raises", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L213", + "weight": 1.0, + "source": "lims_test_cache_test_close_is_idempotent", + "target": "lims_cache_limscache" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L221", + "weight": 1.0, + "source": "lims_test_cache_rationale_221", + "target": "lims_test_cache_test_is_fresh_handles_naive_timestamp", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/lims/test_cache.py", + "source_location": "L222", + "weight": 1.0, + "source": "lims_test_cache_test_is_fresh_handles_naive_timestamp", + "target": "lims_cache_limscache" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L38", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L85", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_split_path_segments_posix_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L90", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_split_path_segments_windows_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L96", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_split_path_segments_empty_string", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L100", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_split_path_segments_drops_trailing_slash", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L110", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_validator_default_config_uses_spec_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L119", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_validator_accepts_explicit_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L131", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_clean_input_returns_empty_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L136", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_clean_input_with_test_run_returns_empty_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L152", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_unresolved_placeholder_in_path_segment_triggers_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L167", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_unresolved_placeholder_in_file_name_triggers_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L183", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_leftover_jinja_marker_in_file_content_triggers_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L195", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_illegal_filesystem_character_in_file_name_triggers_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L211", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_reserved_filesystem_name_triggers_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L225", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_run_leaf_with_test_run_kind_triggers_mode_prefix_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L238", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_test_run_leaf_with_experimental_run_kind_triggers_mode_prefix_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L254", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_missing_required_field_triggers_soft_tier_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L272", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_required_field_present_does_not_trigger_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L288", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_malformed_yaml_front_matter_triggers_soft_tier_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L304", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_no_readme_md_skips_front_matter_rule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L320", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_multiple_findings_aggregate_in_one_call", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L342", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_findings_are_sorted_with_hard_tier_first", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L366", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_findings_sorted_lexicographically_within_same_tier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L386", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_findings_carry_run_path_from_proposed_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L395", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_findings_default_audit_flags_to_false", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L408", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_findings_are_finding_instances", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L424", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_creation_validation_input_is_frozen", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L431", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_creation_py", + "target": "validator_test_engine_creation_test_creation_validation_input_defaults", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L1", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_1", + "target": "tests_unit_validator_test_engine_creation_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L132", + "weight": 1.0, + "source": "validator_test_engine_creation_test_clean_input_returns_empty_list", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L139", + "weight": 1.0, + "source": "validator_test_engine_creation_test_clean_input_with_test_run_returns_empty_list", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L155", + "weight": 1.0, + "source": "validator_test_engine_creation_test_unresolved_placeholder_in_path_segment_triggers_finding", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L169", + "weight": 1.0, + "source": "validator_test_engine_creation_test_unresolved_placeholder_in_file_name_triggers_finding", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L185", + "weight": 1.0, + "source": "validator_test_engine_creation_test_leftover_jinja_marker_in_file_content_triggers_finding", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L198", + "weight": 1.0, + "source": "validator_test_engine_creation_test_illegal_filesystem_character_in_file_name_triggers_finding", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L214", + "weight": 1.0, + "source": "validator_test_engine_creation_test_reserved_filesystem_name_triggers_finding", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L228", + "weight": 1.0, + "source": "validator_test_engine_creation_test_run_leaf_with_test_run_kind_triggers_mode_prefix_mismatch", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L241", + "weight": 1.0, + "source": "validator_test_engine_creation_test_test_run_leaf_with_experimental_run_kind_triggers_mode_prefix_mismatch", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L257", + "weight": 1.0, + "source": "validator_test_engine_creation_test_missing_required_field_triggers_soft_tier_finding", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L275", + "weight": 1.0, + "source": "validator_test_engine_creation_test_required_field_present_does_not_trigger_finding", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L291", + "weight": 1.0, + "source": "validator_test_engine_creation_test_malformed_yaml_front_matter_triggers_soft_tier_finding", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L307", + "weight": 1.0, + "source": "validator_test_engine_creation_test_no_readme_md_skips_front_matter_rule", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L323", + "weight": 1.0, + "source": "validator_test_engine_creation_test_multiple_findings_aggregate_in_one_call", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L345", + "weight": 1.0, + "source": "validator_test_engine_creation_test_findings_are_sorted_with_hard_tier_first", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L369", + "weight": 1.0, + "source": "validator_test_engine_creation_test_findings_sorted_lexicographically_within_same_tier", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L389", + "weight": 1.0, + "source": "validator_test_engine_creation_test_findings_carry_run_path_from_proposed_path", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L398", + "weight": 1.0, + "source": "validator_test_engine_creation_test_findings_default_audit_flags_to_false", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L411", + "weight": 1.0, + "source": "validator_test_engine_creation_test_findings_are_finding_instances", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L426", + "weight": 1.0, + "source": "validator_test_engine_creation_test_creation_validation_input_is_frozen", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L39", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_39", + "target": "validator_test_engine_creation_clean_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L77", + "weight": 1.0, + "source": "validator_test_engine_creation_clean_input", + "target": "validator_engine_creationvalidationinput" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L86", + "weight": 1.0, + "source": "validator_test_engine_creation_test_split_path_segments_posix_path", + "target": "validator_engine_split_path_segments" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L91", + "weight": 1.0, + "source": "validator_test_engine_creation_test_split_path_segments_windows_path", + "target": "validator_engine_split_path_segments" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L97", + "weight": 1.0, + "source": "validator_test_engine_creation_test_split_path_segments_empty_string", + "target": "validator_engine_split_path_segments" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L101", + "weight": 1.0, + "source": "validator_test_engine_creation_test_split_path_segments_drops_trailing_slash", + "target": "validator_engine_split_path_segments" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L111", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_111", + "target": "validator_test_engine_creation_test_validator_default_config_uses_spec_defaults", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L120", + "weight": 1.0, + "source": "validator_test_engine_creation_test_validator_accepts_explicit_config", + "target": "config_models_validatorconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L137", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_137", + "target": "validator_test_engine_creation_test_clean_input_with_test_run_returns_empty_list", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L153", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_153", + "target": "validator_test_engine_creation_test_unresolved_placeholder_in_path_segment_triggers_finding", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L196", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_196", + "target": "validator_test_engine_creation_test_illegal_filesystem_character_in_file_name_triggers_finding", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L212", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_212", + "target": "validator_test_engine_creation_test_reserved_filesystem_name_triggers_finding", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L226", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_226", + "target": "validator_test_engine_creation_test_run_leaf_with_test_run_kind_triggers_mode_prefix_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L239", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_239", + "target": "validator_test_engine_creation_test_test_run_leaf_with_experimental_run_kind_triggers_mode_prefix_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L255", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_255", + "target": "validator_test_engine_creation_test_missing_required_field_triggers_soft_tier_finding", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L273", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_273", + "target": "validator_test_engine_creation_test_required_field_present_does_not_trigger_finding", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L289", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_289", + "target": "validator_test_engine_creation_test_malformed_yaml_front_matter_triggers_soft_tier_finding", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L305", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_305", + "target": "validator_test_engine_creation_test_no_readme_md_skips_front_matter_rule", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L321", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_321", + "target": "validator_test_engine_creation_test_multiple_findings_aggregate_in_one_call", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L343", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_343", + "target": "validator_test_engine_creation_test_findings_are_sorted_with_hard_tier_first", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L367", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_367", + "target": "validator_test_engine_creation_test_findings_sorted_lexicographically_within_same_tier", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L387", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_387", + "target": "validator_test_engine_creation_test_findings_carry_run_path_from_proposed_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L396", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_396", + "target": "validator_test_engine_creation_test_findings_default_audit_flags_to_false", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L409", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_409", + "target": "validator_test_engine_creation_test_findings_are_finding_instances", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L425", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_425", + "target": "validator_test_engine_creation_test_creation_validation_input_is_frozen", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L432", + "weight": 1.0, + "source": "validator_test_engine_creation_rationale_432", + "target": "validator_test_engine_creation_test_creation_validation_input_defaults", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_engine_creation.py", + "source_location": "L433", + "weight": 1.0, + "source": "validator_test_engine_creation_test_creation_validation_input_defaults", + "target": "validator_engine_creationvalidationinput" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_reconfigure.py", + "source_location": "L16", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_reconfigure_py", + "target": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_reconfigure.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_reconfigure_py", + "target": "validator_test_engine_reconfigure_test_reconfigure_defaults_to_empty_roots", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_reconfigure.py", + "source_location": "L1", + "weight": 1.0, + "source": "validator_test_engine_reconfigure_rationale_1", + "target": "tests_unit_validator_test_engine_reconfigure_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_engine_reconfigure.py", + "source_location": "L18", + "weight": 1.0, + "source": "validator_test_engine_reconfigure_test_reconfigure_refreshes_scan_limits_and_roots", + "target": "config_models_validatorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_engine_reconfigure.py", + "source_location": "L39", + "weight": 1.0, + "source": "validator_test_engine_reconfigure_test_reconfigure_defaults_to_empty_roots", + "target": "config_models_validatorconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L45", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_finding_instantiation_with_all_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L58", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_finding_minimum_required_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L74", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_finding_is_frozen", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_to_dict_contains_all_spec_keys", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L103", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_to_dict_values_match_field_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L113", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_to_dict_from_dict_round_trip_identity", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L119", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_from_dict_accepts_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L135", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_from_dict_ignores_unknown_keys", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L149", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_to_dict_preserves_none_matched_token", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L169", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_finding_is_hashable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L176", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_findings_in_set_dedupe_by_value", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L184", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_findings_in_set_distinguish_by_value", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L198", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_findings_can_be_sorted_by_to_dict_key", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L206", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_findings_sort_by_tier_then_rule_then_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L224", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_equality_with_same_field_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L230", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_inequality_when_one_field_differs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L236", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_finding_equality_is_not_identity", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L243", + "weight": 1.0, + "source": "tests_unit_validator_test_findings_py", + "target": "validator_test_findings_test_audit_mode_flags_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L1", + "weight": 1.0, + "source": "validator_test_findings_rationale_1", + "target": "tests_unit_validator_test_findings_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L46", + "weight": 1.0, + "source": "validator_test_findings_test_finding_instantiation_with_all_fields", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L76", + "weight": 1.0, + "source": "validator_test_findings_test_finding_is_frozen", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L87", + "weight": 1.0, + "source": "validator_test_findings_test_to_dict_contains_all_spec_keys", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L104", + "weight": 1.0, + "source": "validator_test_findings_test_to_dict_values_match_field_values", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L114", + "weight": 1.0, + "source": "validator_test_findings_test_to_dict_from_dict_round_trip_identity", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L170", + "weight": 1.0, + "source": "validator_test_findings_test_finding_is_hashable", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L178", + "weight": 1.0, + "source": "validator_test_findings_test_findings_in_set_dedupe_by_value", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L187", + "weight": 1.0, + "source": "validator_test_findings_test_findings_in_set_distinguish_by_value", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L200", + "weight": 1.0, + "source": "validator_test_findings_test_findings_can_be_sorted_by_to_dict_key", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L208", + "weight": 1.0, + "source": "validator_test_findings_test_findings_sort_by_tier_then_rule_then_path", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L225", + "weight": 1.0, + "source": "validator_test_findings_test_equality_with_same_field_values", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L231", + "weight": 1.0, + "source": "validator_test_findings_test_inequality_when_one_field_differs", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L237", + "weight": 1.0, + "source": "validator_test_findings_test_finding_equality_is_not_identity", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L247", + "weight": 1.0, + "source": "validator_test_findings_test_audit_mode_flags_round_trip", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L24", + "weight": 1.0, + "source": "validator_test_findings_rationale_24", + "target": "validator_test_findings_make_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L381", + "weight": 1.0, + "source": "validator_rules_check_mode_prefix_mismatch", + "target": "validator_test_findings_make_finding" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L59", + "weight": 1.0, + "source": "validator_test_findings_rationale_59", + "target": "validator_test_findings_test_finding_minimum_required_fields", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L75", + "weight": 1.0, + "source": "validator_test_findings_rationale_75", + "target": "validator_test_findings_test_finding_is_frozen", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L120", + "weight": 1.0, + "source": "validator_test_findings_rationale_120", + "target": "validator_test_findings_test_from_dict_accepts_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L136", + "weight": 1.0, + "source": "validator_test_findings_rationale_136", + "target": "validator_test_findings_test_from_dict_ignores_unknown_keys", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L150", + "weight": 1.0, + "source": "validator_test_findings_rationale_150", + "target": "validator_test_findings_test_to_dict_preserves_none_matched_token", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L177", + "weight": 1.0, + "source": "validator_test_findings_rationale_177", + "target": "validator_test_findings_test_findings_in_set_dedupe_by_value", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L185", + "weight": 1.0, + "source": "validator_test_findings_rationale_185", + "target": "validator_test_findings_test_findings_in_set_distinguish_by_value", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L199", + "weight": 1.0, + "source": "validator_test_findings_rationale_199", + "target": "validator_test_findings_test_findings_can_be_sorted_by_to_dict_key", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L207", + "weight": 1.0, + "source": "validator_test_findings_rationale_207", + "target": "validator_test_findings_test_findings_sort_by_tier_then_rule_then_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_findings.py", + "source_location": "L244", + "weight": 1.0, + "source": "validator_test_findings_rationale_244", + "target": "validator_test_findings_test_audit_mode_flags_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "validator_init_rationale_1", + "target": "tests_unit_validator_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "validator_init_rationale_1", + "target": "src_exlab_wizard_validator_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_angle_bracket_token_in_segment_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L64", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_non_token_angle_brackets_pass", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L75", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_jinja_var_marker_in_filename_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L88", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_jinja_block_marker_in_content_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L101", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_unresolved_placeholder_in_content_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L110", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_no_findings_on_clean_inputs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L119", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_large_text_file_skipped_from_content_scan", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L131", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_under_size_cap_content_is_scanned", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L142", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_multiple_matches_in_same_input_each_yield_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L152", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_empty_file_contents_dict_is_path_only_scan", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L180", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_windows_illegal_char_in_segment_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L191", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_nul_byte_in_name_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L200", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_low_ascii_control_char_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L210", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_trailing_dot_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L218", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_trailing_space_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L237", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_normal_names_pass", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L245", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_findings_have_hard_tier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L276", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_reserved_name_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L297", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_non_reserved_name_passes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L320", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_unsafe_project_name_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L340", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_safe_project_name_passes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L349", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_experimental_with_run_prefix_under_runs_parent_passes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L359", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_experimental_with_run_prefix_at_project_level_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L372", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_experimental_with_test_run_prefix_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L382", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_experimental_under_test_runs_parent_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L391", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_test_with_test_run_prefix_under_test_runs_passes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L400", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_test_with_run_prefix_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L409", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_test_with_test_run_prefix_but_wrong_parent_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L418", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_run_kind_none_returns_no_findings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L432", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_project_without_creation_json_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L439", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_run_without_creation_json_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L445", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_equipment_without_creation_json_does_not_fire", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L450", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_project_with_creation_json_passes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L455", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_run_with_creation_json_passes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L465", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_missing_id_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L479", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_empty_string_value_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L492", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_present_id_with_non_empty_value_passes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L504", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_field_present_in_template_fields_layer_passes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L516", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_none_readme_fields_treats_all_required_as_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L524", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_value_explicit_none_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L541", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_well_formed_front_matter_passes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L546", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_unterminated_front_matter_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L554", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_malformed_yaml_in_block_fires", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L562", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_no_front_matter_passes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L567", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_empty_content_passes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L571", + "weight": 1.0, + "source": "tests_unit_validator_test_rules_py", + "target": "validator_test_rules_test_front_matter_with_nested_yaml_passes", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L1", + "weight": 1.0, + "source": "validator_test_rules_rationale_1", + "target": "tests_unit_validator_test_rules_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L38", + "weight": 1.0, + "source": "validator_test_rules_test_angle_bracket_token_in_segment_fires", + "target": "validator_rules_check_unresolved_placeholder" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L65", + "weight": 1.0, + "source": "validator_test_rules_test_non_token_angle_brackets_pass", + "target": "validator_rules_check_unresolved_placeholder" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L76", + "weight": 1.0, + "source": "validator_test_rules_test_jinja_var_marker_in_filename_fires", + "target": "validator_rules_check_unresolved_placeholder" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L89", + "weight": 1.0, + "source": "validator_test_rules_test_jinja_block_marker_in_content_fires", + "target": "validator_rules_check_unresolved_placeholder" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L102", + "weight": 1.0, + "source": "validator_test_rules_test_unresolved_placeholder_in_content_fires", + "target": "validator_rules_check_unresolved_placeholder" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L111", + "weight": 1.0, + "source": "validator_test_rules_test_no_findings_on_clean_inputs", + "target": "validator_rules_check_unresolved_placeholder" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L123", + "weight": 1.0, + "source": "validator_test_rules_test_large_text_file_skipped_from_content_scan", + "target": "validator_rules_check_unresolved_placeholder" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L134", + "weight": 1.0, + "source": "validator_test_rules_test_under_size_cap_content_is_scanned", + "target": "validator_rules_check_unresolved_placeholder" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L143", + "weight": 1.0, + "source": "validator_test_rules_test_multiple_matches_in_same_input_each_yield_finding", + "target": "validator_rules_check_unresolved_placeholder" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L153", + "weight": 1.0, + "source": "validator_test_rules_test_empty_file_contents_dict_is_path_only_scan", + "target": "validator_rules_check_unresolved_placeholder" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L181", + "weight": 1.0, + "source": "validator_test_rules_test_windows_illegal_char_in_segment_fires", + "target": "validator_rules_check_illegal_filesystem_character" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L193", + "weight": 1.0, + "source": "validator_test_rules_test_nul_byte_in_name_fires", + "target": "validator_rules_check_illegal_filesystem_character" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L203", + "weight": 1.0, + "source": "validator_test_rules_test_low_ascii_control_char_fires", + "target": "validator_rules_check_illegal_filesystem_character" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L211", + "weight": 1.0, + "source": "validator_test_rules_test_trailing_dot_fires", + "target": "validator_rules_check_illegal_filesystem_character" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L219", + "weight": 1.0, + "source": "validator_test_rules_test_trailing_space_fires", + "target": "validator_rules_check_illegal_filesystem_character" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L238", + "weight": 1.0, + "source": "validator_test_rules_test_normal_names_pass", + "target": "validator_rules_check_illegal_filesystem_character" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L246", + "weight": 1.0, + "source": "validator_test_rules_test_findings_have_hard_tier", + "target": "validator_rules_check_illegal_filesystem_character" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L277", + "weight": 1.0, + "source": "validator_test_rules_test_reserved_name_fires", + "target": "validator_rules_check_reserved_filesystem_name" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L298", + "weight": 1.0, + "source": "validator_test_rules_test_non_reserved_name_passes", + "target": "validator_rules_check_reserved_filesystem_name" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L321", + "weight": 1.0, + "source": "validator_test_rules_test_unsafe_project_name_fires", + "target": "validator_rules_check_unsafe_project_name" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L341", + "weight": 1.0, + "source": "validator_test_rules_test_safe_project_name_passes", + "target": "validator_rules_check_unsafe_project_name" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L350", + "weight": 1.0, + "source": "validator_test_rules_rationale_350", + "target": "validator_test_rules_test_experimental_with_run_prefix_under_runs_parent_passes", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L351", + "weight": 1.0, + "source": "validator_test_rules_test_experimental_with_run_prefix_under_runs_parent_passes", + "target": "validator_rules_check_mode_prefix_mismatch" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L360", + "weight": 1.0, + "source": "validator_test_rules_rationale_360", + "target": "validator_test_rules_test_experimental_with_run_prefix_at_project_level_fires", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L362", + "weight": 1.0, + "source": "validator_test_rules_test_experimental_with_run_prefix_at_project_level_fires", + "target": "validator_rules_check_mode_prefix_mismatch" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L373", + "weight": 1.0, + "source": "validator_test_rules_test_experimental_with_test_run_prefix_fires", + "target": "validator_rules_check_mode_prefix_mismatch" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L383", + "weight": 1.0, + "source": "validator_test_rules_test_experimental_under_test_runs_parent_fires", + "target": "validator_rules_check_mode_prefix_mismatch" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L392", + "weight": 1.0, + "source": "validator_test_rules_test_test_with_test_run_prefix_under_test_runs_passes", + "target": "validator_rules_check_mode_prefix_mismatch" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L401", + "weight": 1.0, + "source": "validator_test_rules_test_test_with_run_prefix_fires", + "target": "validator_rules_check_mode_prefix_mismatch" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L410", + "weight": 1.0, + "source": "validator_test_rules_test_test_with_test_run_prefix_but_wrong_parent_fires", + "target": "validator_rules_check_mode_prefix_mismatch" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L419", + "weight": 1.0, + "source": "validator_test_rules_test_run_kind_none_returns_no_findings", + "target": "validator_rules_check_mode_prefix_mismatch" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L433", + "weight": 1.0, + "source": "validator_test_rules_test_project_without_creation_json_fires", + "target": "validator_rules_check_orphan" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L440", + "weight": 1.0, + "source": "validator_test_rules_test_run_without_creation_json_fires", + "target": "validator_rules_check_orphan" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L446", + "weight": 1.0, + "source": "validator_test_rules_test_equipment_without_creation_json_does_not_fire", + "target": "validator_rules_check_orphan" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L451", + "weight": 1.0, + "source": "validator_test_rules_test_project_with_creation_json_passes", + "target": "validator_rules_check_orphan" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L456", + "weight": 1.0, + "source": "validator_test_rules_test_run_with_creation_json_passes", + "target": "validator_rules_check_orphan" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L466", + "weight": 1.0, + "source": "validator_test_rules_test_missing_id_fires", + "target": "validator_rules_check_missing_required_field" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L480", + "weight": 1.0, + "source": "validator_test_rules_test_empty_string_value_fires", + "target": "validator_rules_check_missing_required_field" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L493", + "weight": 1.0, + "source": "validator_test_rules_test_present_id_with_non_empty_value_passes", + "target": "validator_rules_check_missing_required_field" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L505", + "weight": 1.0, + "source": "validator_test_rules_test_field_present_in_template_fields_layer_passes", + "target": "validator_rules_check_missing_required_field" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L517", + "weight": 1.0, + "source": "validator_test_rules_test_none_readme_fields_treats_all_required_as_missing", + "target": "validator_rules_check_missing_required_field" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L525", + "weight": 1.0, + "source": "validator_test_rules_test_value_explicit_none_fires", + "target": "validator_rules_check_missing_required_field" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L543", + "weight": 1.0, + "source": "validator_test_rules_test_well_formed_front_matter_passes", + "target": "validator_rules_check_malformed_yaml_front_matter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L548", + "weight": 1.0, + "source": "validator_test_rules_test_unterminated_front_matter_fires", + "target": "validator_rules_check_malformed_yaml_front_matter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L557", + "weight": 1.0, + "source": "validator_test_rules_test_malformed_yaml_in_block_fires", + "target": "validator_rules_check_malformed_yaml_front_matter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L564", + "weight": 1.0, + "source": "validator_test_rules_test_no_front_matter_passes", + "target": "validator_rules_check_malformed_yaml_front_matter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L568", + "weight": 1.0, + "source": "validator_test_rules_test_empty_content_passes", + "target": "validator_rules_check_malformed_yaml_front_matter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_rules.py", + "source_location": "L585", + "weight": 1.0, + "source": "validator_test_rules_test_front_matter_with_nested_yaml_passes", + "target": "validator_rules_check_malformed_yaml_front_matter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L46", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L96", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L140", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L164", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_by_rule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L173", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_clean_tree_returns_empty_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L181", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L202", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L219", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L238", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_clean_project_name_has_no_unsafe_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L246", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L268", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L291", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L324", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L348", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L374", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_respects_content_scan_max_mib_cap", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L398", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_respects_extensions_allowlist", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L417", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_detects_binary_files_via_null_byte_sniff", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L436", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_scans_text_file_content_when_within_limits", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L452", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L474", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L487", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L524", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L549", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L584", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_scope_unknown_equipment_id_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L591", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_skips_cache_directory_contents", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L607", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L644", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_file_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L660", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L680", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L695", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L722", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L760", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_unknown_scope_kind_raises_value_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L767", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_root_does_not_exist_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L775", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_root_is_a_file_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L783", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_handles_unreadable_directory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L803", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L819", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L835", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L854", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_creation_json_unreadable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L876", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L888", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L908", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_readme_fields_json_decode_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L920", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L956", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L991", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1021", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_content_scan_eligibility_returns_false_on_stat_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1048", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_audit_read_text_for_scan_handles_oserror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1075", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_classify_level_value_error_returns_other", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1089", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_finding_sort_unknown_tier_sorts_after_committed_tiers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1113", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_level_for_orphan_returns_none_for_unmapped_levels", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1122", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_validator_from_config_builds_engine", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1140", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_validator_from_config_orchestrator_disabled", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1154", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_validator_from_config_no_orchestrator_attr", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1165", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_classify_level_unrelated_dir_returns_other", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1175", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_compute_run_path_unrelated_other_returns_input", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1187", + "weight": 1.0, + "source": "tests_unit_validator_test_engine_audit_py", + "target": "validator_test_engine_audit_test_compute_run_path_root_other_returns_root", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_1", + "target": "tests_unit_validator_test_engine_audit_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L187", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_187", + "target": "tests_unit_validator_test_engine_audit_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L121", + "weight": 1.0, + "source": "validator_test_engine_audit_make_clean_tree", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L190", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L208", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L227", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L252", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L277", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L309", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L332", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L361", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L462", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L479", + "weight": 1.0, + "source": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L495", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L531", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L557", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L631", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L667", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L686", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L702", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L731", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L809", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L826", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L898", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L927", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L964", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L998", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L56", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_56", + "target": "validator_test_engine_audit_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L119", + "weight": 1.0, + "source": "validator_test_engine_audit_make_clean_tree", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L188", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L208", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L227", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L252", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L277", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L309", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L332", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L361", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L462", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L479", + "weight": 1.0, + "source": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L493", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L531", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L555", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L631", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L667", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L686", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L702", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L731", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L809", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L826", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L898", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L931", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L968", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L998", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L88", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_88", + "target": "validator_test_engine_audit_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L175", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_clean_tree_returns_empty_list", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L240", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_clean_project_name_has_no_unsafe_finding", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L376", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_respects_content_scan_max_mib_cap", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L400", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_respects_extensions_allowlist", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L419", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_detects_binary_files_via_null_byte_sniff", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L438", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_scans_text_file_content_when_within_limits", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L476", + "weight": 1.0, + "source": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L593", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_skips_cache_directory_contents", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L646", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_file_name", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L837", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L859", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_creation_json_unreadable", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L878", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L910", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_readme_fields_json_decode_failure", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1026", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_content_scan_eligibility_returns_false_on_stat_failure", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1053", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_read_text_for_scan_handles_oserror", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L106", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_106", + "target": "validator_test_engine_audit_make_clean_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L176", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_clean_tree_returns_empty_list", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L193", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L211", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L230", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L241", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_clean_project_name_has_no_unsafe_finding", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L258", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L283", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L315", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L338", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L367", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L383", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_respects_content_scan_max_mib_cap", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L404", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_respects_extensions_allowlist", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L426", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_detects_binary_files_via_null_byte_sniff", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L442", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_scans_text_file_content_when_within_limits", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L464", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L481", + "weight": 1.0, + "source": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L542", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L586", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_scope_unknown_equipment_id_returns_empty", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L599", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_skips_cache_directory_contents", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L637", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L650", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_file_name", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L673", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L689", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L734", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L762", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_unknown_scope_kind_raises_value_error", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L798", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_handles_unreadable_directory", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L811", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L828", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L843", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L870", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_creation_json_unreadable", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L882", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L900", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L914", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_readme_fields_json_decode_failure", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L949", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L985", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1009", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1038", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_content_scan_eligibility_returns_false_on_stat_failure", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1065", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_read_text_for_scan_handles_oserror", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L148", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_148", + "target": "validator_test_engine_audit_make_validator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L149", + "weight": 1.0, + "source": "validator_test_engine_audit_make_validator", + "target": "config_models_validatorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L195", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", + "target": "validator_test_engine_audit_by_rule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L213", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", + "target": "validator_test_engine_audit_by_rule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L232", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", + "target": "validator_test_engine_audit_by_rule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L243", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_clean_project_name_has_no_unsafe_finding", + "target": "validator_test_engine_audit_by_rule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L260", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", + "target": "validator_test_engine_audit_by_rule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L285", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", + "target": "validator_test_engine_audit_by_rule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L317", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", + "target": "validator_test_engine_audit_by_rule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L340", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", + "target": "validator_test_engine_audit_by_rule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L369", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", + "target": "validator_test_engine_audit_by_rule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L639", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", + "target": "validator_test_engine_audit_by_rule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L675", + "weight": 1.0, + "source": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", + "target": "validator_test_engine_audit_by_rule", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L174", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_174", + "target": "validator_test_engine_audit_test_audit_clean_tree_returns_empty_list", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L182", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_182", + "target": "validator_test_engine_audit_test_audit_project_missing_creation_json_returns_orphan", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L203", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_203", + "target": "validator_test_engine_audit_test_audit_run_missing_creation_json_returns_orphan", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L220", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_220", + "target": "validator_test_engine_audit_test_audit_unsafe_project_name_returns_soft_finding", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L239", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_239", + "target": "validator_test_engine_audit_test_audit_clean_project_name_has_no_unsafe_finding", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L247", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_247", + "target": "validator_test_engine_audit_test_audit_mode_prefix_mismatch_run_with_test_kind", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L269", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_269", + "target": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_directory_name", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L294", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_294", + "target": "validator_test_engine_audit_test_audit_override_active_flag_set_when_problem_class_overridden", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L327", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_327", + "target": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_synced_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L351", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_351", + "target": "validator_test_engine_audit_test_audit_synced_under_prior_policy_flag_for_hard_finding_on_cleaned_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L375", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_375", + "target": "validator_test_engine_audit_test_audit_respects_content_scan_max_mib_cap", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L399", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_399", + "target": "validator_test_engine_audit_test_audit_respects_extensions_allowlist", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L418", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_418", + "target": "validator_test_engine_audit_test_audit_detects_binary_files_via_null_byte_sniff", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L437", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_437", + "target": "validator_test_engine_audit_test_audit_scans_text_file_content_when_within_limits", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L455", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_455", + "target": "validator_test_engine_audit_test_audit_findings_are_sorted_by_tier_then_rule_then_offending_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L475", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_475", + "target": "validator_test_engine_audit_test_query_problems_is_alias_for_audit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L488", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_488", + "target": "validator_test_engine_audit_test_audit_scope_equipment_id_resolves_to_configured_root", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L525", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_525", + "target": "validator_test_engine_audit_test_audit_scope_project_path_walks_one_subtree", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L550", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_550", + "target": "validator_test_engine_audit_test_audit_scope_all_walks_every_configured_equipment", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L585", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_585", + "target": "validator_test_engine_audit_test_audit_scope_unknown_equipment_id_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L592", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_592", + "target": "validator_test_engine_audit_test_audit_skips_cache_directory_contents", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L608", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_608", + "target": "validator_test_engine_audit_test_audit_revoked_override_does_not_set_override_active", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L645", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_645", + "target": "validator_test_engine_audit_test_audit_unresolved_placeholder_in_file_name", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L661", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_661", + "target": "validator_test_engine_audit_test_audit_test_run_with_experimental_kind_flagged", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L681", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_681", + "target": "validator_test_engine_audit_test_audit_returns_list_of_finding_dataclass_instances", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L696", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_696", + "target": "validator_test_engine_audit_test_audit_includes_staging_root_when_orchestrator_on", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L726", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_726", + "target": "validator_test_engine_audit_test_audit_findings_carry_full_section_11_8_shape", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L761", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_761", + "target": "validator_test_engine_audit_test_audit_unknown_scope_kind_raises_value_error", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L768", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_768", + "target": "validator_test_engine_audit_test_audit_root_does_not_exist_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L776", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_776", + "target": "validator_test_engine_audit_test_audit_root_is_a_file_returns_empty", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L784", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_784", + "target": "validator_test_engine_audit_test_audit_handles_unreadable_directory", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L804", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_804", + "target": "validator_test_engine_audit_test_audit_other_level_subfolder_under_project", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L820", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_820", + "target": "validator_test_engine_audit_test_audit_other_under_test_runs_unknown_leaf", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L836", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_836", + "target": "validator_test_engine_audit_test_audit_deeply_nested_other_subfolder", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L858", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_858", + "target": "validator_test_engine_audit_test_audit_creation_json_unreadable", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L877", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_877", + "target": "validator_test_engine_audit_test_audit_creation_json_malformed_raw_decode", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L889", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_889", + "target": "validator_test_engine_audit_test_audit_creation_json_missing_required_struct_field", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L909", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_909", + "target": "validator_test_engine_audit_test_audit_readme_fields_json_decode_failure", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L921", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_921", + "target": "validator_test_engine_audit_test_audit_missing_required_field_with_required_ids", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L957", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_957", + "target": "validator_test_engine_audit_test_audit_missing_required_field_required_ids_not_a_list", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L992", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_992", + "target": "validator_test_engine_audit_test_audit_content_scan_skips_test_runs_marker_file", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1025", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_1025", + "target": "validator_test_engine_audit_test_audit_content_scan_eligibility_returns_false_on_stat_failure", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1052", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_1052", + "target": "validator_test_engine_audit_test_audit_read_text_for_scan_handles_oserror", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1076", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_1076", + "target": "validator_test_engine_audit_test_classify_level_value_error_returns_other", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1090", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_1090", + "target": "validator_test_engine_audit_test_finding_sort_unknown_tier_sorts_after_committed_tiers", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1114", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_1114", + "target": "validator_test_engine_audit_test_level_for_orphan_returns_none_for_unmapped_levels", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1117", + "weight": 1.0, + "source": "validator_test_engine_audit_test_level_for_orphan_returns_none_for_unmapped_levels", + "target": "validator_engine_level_for_orphan" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1123", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_1123", + "target": "validator_test_engine_audit_test_validator_from_config_builds_engine", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1132", + "weight": 1.0, + "source": "validator_test_engine_audit_test_validator_from_config_builds_engine", + "target": "config_models_validatorconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1141", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_1141", + "target": "validator_test_engine_audit_test_validator_from_config_orchestrator_disabled", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1155", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_1155", + "target": "validator_test_engine_audit_test_validator_from_config_no_orchestrator_attr", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1166", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_1166", + "target": "validator_test_engine_audit_test_classify_level_unrelated_dir_returns_other", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1176", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_1176", + "target": "validator_test_engine_audit_test_compute_run_path_unrelated_other_returns_input", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/validator/test_engine_audit.py", + "source_location": "L1188", + "weight": 1.0, + "source": "validator_test_engine_audit_rationale_1188", + "target": "validator_test_engine_audit_test_compute_run_path_root_other_returns_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_with_all_tags_matches_spec_example", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_with_run_id_includes_run_tag", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L70", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_omits_unset_tags", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_partial_tags_skipped_individually", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L102", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_level_is_padded_to_five_chars", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L115", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_timestamp_is_zero_padded_iso_with_z", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L123", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_naive_datetime_treated_as_utc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L130", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_aware_non_utc_datetime_converts_to_utc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L142", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_short_message_unchanged", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L152", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_truncates_long_messages_with_marker", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L165", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_truncation_preserves_prefix_and_tags", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L179", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_truncation_at_exact_boundary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L199", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_append_log_line_creates_parent_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L208", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_append_log_line_writes_single_line_with_newline", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L215", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_append_log_line_appends_to_existing_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L225", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_append_log_line_concurrent_writes_do_not_interleave", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L255", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_append_log_line_idempotent_directory_creation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L268", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_truncation_prefix_alone_too_big_emits_marker_only", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L286", + "weight": 1.0, + "source": "tests_unit_cache_test_log_writer_py", + "target": "cache_test_log_writer_test_format_log_line_truncation_prefix_alone_exhausts_budget", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L1", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_1", + "target": "tests_unit_cache_test_log_writer_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L34", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_34", + "target": "cache_test_log_writer_test_format_log_line_with_all_tags_matches_spec_example", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L35", + "weight": 1.0, + "source": "cache_test_log_writer_test_format_log_line_with_all_tags_matches_spec_example", + "target": "cache_log_writer_format_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L53", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_53", + "target": "cache_test_log_writer_test_format_log_line_with_run_id_includes_run_tag", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L54", + "weight": 1.0, + "source": "cache_test_log_writer_test_format_log_line_with_run_id_includes_run_tag", + "target": "cache_log_writer_format_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L71", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_71", + "target": "cache_test_log_writer_test_format_log_line_omits_unset_tags", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L72", + "weight": 1.0, + "source": "cache_test_log_writer_test_format_log_line_omits_unset_tags", + "target": "cache_log_writer_format_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L87", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_87", + "target": "cache_test_log_writer_test_format_log_line_partial_tags_skipped_individually", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L88", + "weight": 1.0, + "source": "cache_test_log_writer_test_format_log_line_partial_tags_skipped_individually", + "target": "cache_log_writer_format_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L103", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_103", + "target": "cache_test_log_writer_test_format_log_line_level_is_padded_to_five_chars", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L104", + "weight": 1.0, + "source": "cache_test_log_writer_test_format_log_line_level_is_padded_to_five_chars", + "target": "cache_log_writer_format_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L116", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_116", + "target": "cache_test_log_writer_test_format_log_line_timestamp_is_zero_padded_iso_with_z", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L118", + "weight": 1.0, + "source": "cache_test_log_writer_test_format_log_line_timestamp_is_zero_padded_iso_with_z", + "target": "cache_log_writer_format_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L124", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_124", + "target": "cache_test_log_writer_test_format_log_line_naive_datetime_treated_as_utc", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L126", + "weight": 1.0, + "source": "cache_test_log_writer_test_format_log_line_naive_datetime_treated_as_utc", + "target": "cache_log_writer_format_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L131", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_131", + "target": "cache_test_log_writer_test_format_log_line_aware_non_utc_datetime_converts_to_utc", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L138", + "weight": 1.0, + "source": "cache_test_log_writer_test_format_log_line_aware_non_utc_datetime_converts_to_utc", + "target": "cache_log_writer_format_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L143", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_143", + "target": "cache_test_log_writer_test_format_log_line_short_message_unchanged", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L144", + "weight": 1.0, + "source": "cache_test_log_writer_test_format_log_line_short_message_unchanged", + "target": "cache_log_writer_format_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L153", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_153", + "target": "cache_test_log_writer_test_format_log_line_truncates_long_messages_with_marker", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L155", + "weight": 1.0, + "source": "cache_test_log_writer_test_format_log_line_truncates_long_messages_with_marker", + "target": "cache_log_writer_format_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L166", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_166", + "target": "cache_test_log_writer_test_format_log_line_truncation_preserves_prefix_and_tags", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L167", + "weight": 1.0, + "source": "cache_test_log_writer_test_format_log_line_truncation_preserves_prefix_and_tags", + "target": "cache_log_writer_format_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L180", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_180", + "target": "cache_test_log_writer_test_format_log_line_truncation_at_exact_boundary", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L182", + "weight": 1.0, + "source": "cache_test_log_writer_test_format_log_line_truncation_at_exact_boundary", + "target": "cache_log_writer_format_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L200", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_200", + "target": "cache_test_log_writer_test_append_log_line_creates_parent_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L203", + "weight": 1.0, + "source": "cache_test_log_writer_test_append_log_line_creates_parent_cache_dir", + "target": "cache_log_writer_append_log_line" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L210", + "weight": 1.0, + "source": "cache_test_log_writer_test_append_log_line_writes_single_line_with_newline", + "target": "cache_log_writer_append_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L216", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_216", + "target": "cache_test_log_writer_test_append_log_line_appends_to_existing_file", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L218", + "weight": 1.0, + "source": "cache_test_log_writer_test_append_log_line_appends_to_existing_file", + "target": "cache_log_writer_append_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L226", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_226", + "target": "cache_test_log_writer_test_append_log_line_concurrent_writes_do_not_interleave", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L256", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_256", + "target": "cache_test_log_writer_test_append_log_line_idempotent_directory_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L258", + "weight": 1.0, + "source": "cache_test_log_writer_test_append_log_line_idempotent_directory_creation", + "target": "cache_log_writer_append_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L271", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_271", + "target": "cache_test_log_writer_test_format_log_line_truncation_prefix_alone_too_big_emits_marker_only", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_log_writer.py", + "source_location": "L289", + "weight": 1.0, + "source": "cache_test_log_writer_rationale_289", + "target": "cache_test_log_writer_test_format_log_line_truncation_prefix_alone_exhausts_budget", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L74", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_writer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L79", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_creation_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L89", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_write_creation_emits_valid_current_version_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L101", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_write_creation_pins_schema_version_to_writer_default", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L117", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_update_creation_atomic_mutates_target_field", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L133", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L152", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_update_creation_atomic_appends_validation_override", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L178", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L219", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_read_creation_snapshot_returns_typed_struct", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L229", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L247", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_reading_2_0_file_raises_schema_major_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L260", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L273", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_reading_1_0_file_applies_documented_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L312", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_reading_1_7_file_backfills_lims_project_subfields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L345", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_writer_bumps_schema_version_on_mutation_of_old_minor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L382", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_writing_always_emits_current_schema_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L397", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_select_active_overrides_returns_empty_for_empty_input", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L401", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_select_active_overrides_keeps_unrevoked_unexpired_entries", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L418", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_select_active_overrides_drops_revoked_entry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L443", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L473", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L493", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L519", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_select_active_overrides_treats_malformed_expires_at_as_expired", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L539", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_round_trip_preserves_plugins_applied_with_isolation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L566", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_reading_file_with_missing_required_field_raises_validation_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L579", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_select_active_overrides_skips_tombstone_with_null_revokes_target", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L609", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L629", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_reading_file_missing_schema_version_raises_schema_major_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L640", + "weight": 1.0, + "source": "tests_unit_cache_test_creation_writer_py", + "target": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L1", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_1", + "target": "tests_unit_cache_test_creation_writer_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L92", + "weight": 1.0, + "source": "cache_test_creation_writer_test_write_creation_emits_valid_current_version_file", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L105", + "weight": 1.0, + "source": "cache_test_creation_writer_test_write_creation_pins_schema_version_to_writer_default", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L120", + "weight": 1.0, + "source": "cache_test_creation_writer_test_update_creation_atomic_mutates_target_field", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L137", + "weight": 1.0, + "source": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L155", + "weight": 1.0, + "source": "cache_test_creation_writer_test_update_creation_atomic_appends_validation_override", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L187", + "weight": 1.0, + "source": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L222", + "weight": 1.0, + "source": "cache_test_creation_writer_test_read_creation_snapshot_returns_typed_struct", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L233", + "weight": 1.0, + "source": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L250", + "weight": 1.0, + "source": "cache_test_creation_writer_test_reading_2_0_file_raises_schema_major_mismatch", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L265", + "weight": 1.0, + "source": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L386", + "weight": 1.0, + "source": "cache_test_creation_writer_test_writing_always_emits_current_schema_version", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L542", + "weight": 1.0, + "source": "cache_test_creation_writer_test_round_trip_preserves_plugins_applied_with_isolation", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L645", + "weight": 1.0, + "source": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", + "target": "cache_test_creation_writer_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L55", + "weight": 1.0, + "source": "cache_test_creation_writer_build_minimal_payload", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L60", + "weight": 1.0, + "source": "cache_test_creation_writer_build_minimal_payload", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L67", + "weight": 1.0, + "source": "cache_test_creation_writer_build_minimal_payload", + "target": "api_schemas_pathsblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L70", + "weight": 1.0, + "source": "cache_test_creation_writer_build_minimal_payload", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L75", + "weight": 1.0, + "source": "cache_test_creation_writer_writer", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L104", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_104", + "target": "cache_test_creation_writer_test_write_creation_pins_schema_version_to_writer_default", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L136", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_136", + "target": "cache_test_creation_writer_test_update_creation_atomic_preserves_unknown_top_level_fields", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L181", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_181", + "target": "cache_test_creation_writer_test_update_creation_atomic_serializes_concurrent_calls", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L232", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_232", + "target": "cache_test_creation_writer_test_read_creation_snapshot_supports_concurrent_readers", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L263", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_263", + "target": "cache_test_creation_writer_test_reading_malformed_schema_version_raises_schema_major_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L276", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_276", + "target": "cache_test_creation_writer_test_reading_1_0_file_applies_documented_defaults", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L315", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_315", + "target": "cache_test_creation_writer_test_reading_1_7_file_backfills_lims_project_subfields", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L348", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_348", + "target": "cache_test_creation_writer_test_writer_bumps_schema_version_on_mutation_of_old_minor", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L385", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_385", + "target": "cache_test_creation_writer_test_writing_always_emits_current_schema_version", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L398", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_returns_empty_for_empty_input", + "target": "cache_creation_writer_select_active_overrides" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L403", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_keeps_unrevoked_unexpired_entries", + "target": "api_schemas_override_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L404", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_keeps_unrevoked_unexpired_entries", + "target": "api_schemas_overrideentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L413", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_keeps_unrevoked_unexpired_entries", + "target": "cache_creation_writer_select_active_overrides" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L420", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_drops_revoked_entry", + "target": "api_schemas_override_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L421", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_drops_revoked_entry", + "target": "api_schemas_overrideentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L429", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_drops_revoked_entry", + "target": "api_schemas_tombstone_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L439", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_drops_revoked_entry", + "target": "cache_creation_writer_select_active_overrides" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L447", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", + "target": "api_schemas_override_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L448", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", + "target": "api_schemas_overrideentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L468", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_drops_expired_entry", + "target": "cache_creation_writer_select_active_overrides" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L474", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_474", + "target": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L477", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", + "target": "api_schemas_override_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L478", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", + "target": "api_schemas_overrideentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L489", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_uses_explicit_now_for_determinism", + "target": "cache_creation_writer_select_active_overrides" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L494", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_494", + "target": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L496", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", + "target": "api_schemas_tombstone_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L505", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", + "target": "api_schemas_override_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L506", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", + "target": "api_schemas_overrideentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L515", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_ignores_tombstone_for_unknown_id", + "target": "cache_creation_writer_select_active_overrides" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L520", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_520", + "target": "cache_test_creation_writer_test_select_active_overrides_treats_malformed_expires_at_as_expired", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L530", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_treats_malformed_expires_at_as_expired", + "target": "cache_creation_writer_select_active_overrides" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L544", + "weight": 1.0, + "source": "cache_test_creation_writer_test_round_trip_preserves_plugins_applied_with_isolation", + "target": "api_schemas_pluginapplied" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L549", + "weight": 1.0, + "source": "cache_test_creation_writer_test_round_trip_preserves_plugins_applied_with_isolation", + "target": "api_schemas_pluginisolation" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L580", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_580", + "target": "cache_test_creation_writer_test_select_active_overrides_skips_tombstone_with_null_revokes_target", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L595", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_skips_tombstone_with_null_revokes_target", + "target": "api_schemas_override_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L596", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_skips_tombstone_with_null_revokes_target", + "target": "api_schemas_overrideentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L605", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_skips_tombstone_with_null_revokes_target", + "target": "cache_creation_writer_select_active_overrides" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L610", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_610", + "target": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L614", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", + "target": "api_schemas_override_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L615", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", + "target": "api_schemas_overrideentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L624", + "weight": 1.0, + "source": "cache_test_creation_writer_test_select_active_overrides_naive_expires_at_is_treated_as_utc", + "target": "cache_creation_writer_select_active_overrides" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L632", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_632", + "target": "cache_test_creation_writer_test_reading_file_missing_schema_version_raises_schema_major_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_creation_writer.py", + "source_location": "L643", + "weight": 1.0, + "source": "cache_test_creation_writer_rationale_643", + "target": "cache_test_creation_writer_test_update_creation_atomic_backfills_missing_override_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "cache_init_rationale_1", + "target": "tests_unit_cache_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "cache_init_rationale_1", + "target": "src_exlab_wizard_cache_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L35", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_make_equipment_payload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L62", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_make_test_runs_payload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L83", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L104", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_write_equipment_creates_parent_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L114", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L131", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L146", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_read_equipment_round_trips", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L163", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_read_equipment_raises_when_file_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L171", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L193", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_write_test_runs_marker_creates_v1_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L206", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_write_test_runs_marker_creates_parent_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L215", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L239", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L266", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_read_test_runs_marker_round_trips", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L282", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_require_schema_major_raises_on_none_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L291", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_require_schema_major_raises_on_empty_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L300", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_require_schema_major_raises_on_garbage_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L309", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_require_schema_major_passes_on_same_major", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L319", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_read_equipment_skips_check_for_malformed_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L332", + "weight": 1.0, + "source": "tests_unit_cache_test_equipment_py", + "target": "cache_test_equipment_test_read_equipment_skips_check_when_schema_version_missing", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L1", + "weight": 1.0, + "source": "cache_test_equipment_rationale_1", + "target": "tests_unit_cache_test_equipment_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L87", + "weight": 1.0, + "source": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", + "target": "cache_test_equipment_make_equipment_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L109", + "weight": 1.0, + "source": "cache_test_equipment_test_write_equipment_creates_parent_cache_dir", + "target": "cache_test_equipment_make_equipment_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L118", + "weight": 1.0, + "source": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", + "target": "cache_test_equipment_make_equipment_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L135", + "weight": 1.0, + "source": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", + "target": "cache_test_equipment_make_equipment_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L150", + "weight": 1.0, + "source": "cache_test_equipment_test_read_equipment_round_trips", + "target": "cache_test_equipment_make_equipment_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L181", + "weight": 1.0, + "source": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", + "target": "cache_test_equipment_make_equipment_payload", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L44", + "weight": 1.0, + "source": "cache_test_equipment_rationale_44", + "target": "cache_test_equipment_make_equipment_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L51", + "weight": 1.0, + "source": "cache_test_equipment_make_equipment_payload", + "target": "api_schemas_equipmentjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L196", + "weight": 1.0, + "source": "cache_test_equipment_test_write_test_runs_marker_creates_v1_file", + "target": "cache_test_equipment_make_test_runs_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L210", + "weight": 1.0, + "source": "cache_test_equipment_test_write_test_runs_marker_creates_parent_dir", + "target": "cache_test_equipment_make_test_runs_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L224", + "weight": 1.0, + "source": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", + "target": "cache_test_equipment_make_test_runs_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L249", + "weight": 1.0, + "source": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", + "target": "cache_test_equipment_make_test_runs_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L270", + "weight": 1.0, + "source": "cache_test_equipment_test_read_test_runs_marker_round_trips", + "target": "cache_test_equipment_make_test_runs_payload", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L84", + "weight": 1.0, + "source": "cache_test_equipment_rationale_84", + "target": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L85", + "weight": 1.0, + "source": "cache_test_equipment_test_write_equipment_produces_valid_v1_file", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L105", + "weight": 1.0, + "source": "cache_test_equipment_rationale_105", + "target": "cache_test_equipment_test_write_equipment_creates_parent_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L106", + "weight": 1.0, + "source": "cache_test_equipment_test_write_equipment_creates_parent_cache_dir", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L115", + "weight": 1.0, + "source": "cache_test_equipment_rationale_115", + "target": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L116", + "weight": 1.0, + "source": "cache_test_equipment_test_write_equipment_preserves_first_seen_at_on_rewrite", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L132", + "weight": 1.0, + "source": "cache_test_equipment_rationale_132", + "target": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L133", + "weight": 1.0, + "source": "cache_test_equipment_test_write_equipment_updates_last_modified_at_on_rewrite", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L147", + "weight": 1.0, + "source": "cache_test_equipment_rationale_147", + "target": "cache_test_equipment_test_read_equipment_round_trips", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L148", + "weight": 1.0, + "source": "cache_test_equipment_test_read_equipment_round_trips", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L164", + "weight": 1.0, + "source": "cache_test_equipment_test_read_equipment_raises_when_file_missing", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L172", + "weight": 1.0, + "source": "cache_test_equipment_rationale_172", + "target": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L178", + "weight": 1.0, + "source": "cache_test_equipment_test_write_equipment_corrupt_existing_file_recovers", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L194", + "weight": 1.0, + "source": "cache_test_equipment_test_write_test_runs_marker_creates_v1_file", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L207", + "weight": 1.0, + "source": "cache_test_equipment_test_write_test_runs_marker_creates_parent_dir", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L216", + "weight": 1.0, + "source": "cache_test_equipment_rationale_216", + "target": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L222", + "weight": 1.0, + "source": "cache_test_equipment_test_write_test_runs_marker_is_idempotent", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L240", + "weight": 1.0, + "source": "cache_test_equipment_rationale_240", + "target": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L246", + "weight": 1.0, + "source": "cache_test_equipment_test_write_test_runs_marker_concurrent_first_writes_safe", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L267", + "weight": 1.0, + "source": "cache_test_equipment_rationale_267", + "target": "cache_test_equipment_test_read_test_runs_marker_round_trips", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L268", + "weight": 1.0, + "source": "cache_test_equipment_test_read_test_runs_marker_round_trips", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L283", + "weight": 1.0, + "source": "cache_test_equipment_rationale_283", + "target": "cache_test_equipment_test_require_schema_major_raises_on_none_version", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L288", + "weight": 1.0, + "source": "cache_test_equipment_test_require_schema_major_raises_on_none_version", + "target": "io_json_files_require_schema_major" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L292", + "weight": 1.0, + "source": "cache_test_equipment_rationale_292", + "target": "cache_test_equipment_test_require_schema_major_raises_on_empty_version", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L297", + "weight": 1.0, + "source": "cache_test_equipment_test_require_schema_major_raises_on_empty_version", + "target": "io_json_files_require_schema_major" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L301", + "weight": 1.0, + "source": "cache_test_equipment_rationale_301", + "target": "cache_test_equipment_test_require_schema_major_raises_on_garbage_version", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L306", + "weight": 1.0, + "source": "cache_test_equipment_test_require_schema_major_raises_on_garbage_version", + "target": "io_json_files_require_schema_major" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L310", + "weight": 1.0, + "source": "cache_test_equipment_rationale_310", + "target": "cache_test_equipment_test_require_schema_major_passes_on_same_major", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L314", + "weight": 1.0, + "source": "cache_test_equipment_test_require_schema_major_passes_on_same_major", + "target": "io_json_files_require_schema_major" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L320", + "weight": 1.0, + "source": "cache_test_equipment_rationale_320", + "target": "cache_test_equipment_test_read_equipment_skips_check_for_malformed_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L322", + "weight": 1.0, + "source": "cache_test_equipment_test_read_equipment_skips_check_for_malformed_json", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L335", + "weight": 1.0, + "source": "cache_test_equipment_rationale_335", + "target": "cache_test_equipment_test_read_equipment_skips_check_when_schema_version_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_equipment.py", + "source_location": "L337", + "weight": 1.0, + "source": "cache_test_equipment_test_read_equipment_skips_check_when_schema_version_missing", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_state_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L34", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_read_when_absent_returns_empty_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_upsert_file_creates_a_record", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L72", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_upsert_file_updates_existing_record", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L90", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_upsert_file_preserves_keep_local", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L112", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_set_keep_local_creates_record_if_absent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L123", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_set_keep_local_toggles_and_preserves_sync_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L148", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_mark_cleared_sets_cleared_at", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L163", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_mark_cleared_on_absent_file_creates_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L172", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L203", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_rollup_state_syncing_when_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L208", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_rollup_state_syncing_when_some_unverified", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L219", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_rollup_state_synced_when_all_verified", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L230", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_rollup_state_cleared_takes_precedence_over_unverified", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L244", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_sync_state_json_round_trips_through_msgspec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L272", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L302", + "weight": 1.0, + "source": "tests_unit_cache_test_sync_state_writer_py", + "target": "cache_test_sync_state_writer_test_concurrent_upserts_on_distinct_files_both_survive", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L1", + "weight": 1.0, + "source": "cache_test_sync_state_writer_rationale_1", + "target": "tests_unit_cache_test_sync_state_writer_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L44", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_read_when_absent_returns_empty_state", + "target": "cache_test_sync_state_writer_state_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L62", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_upsert_file_creates_a_record", + "target": "cache_test_sync_state_writer_state_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L169", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_mark_cleared_on_absent_file_creates_state", + "target": "cache_test_sync_state_writer_state_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L192", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", + "target": "cache_test_sync_state_writer_state_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L278", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", + "target": "cache_test_sync_state_writer_state_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L26", + "weight": 1.0, + "source": "cache_test_sync_state_writer_state_path", + "target": "exlab_wizard_paths_cache_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L35", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_read_when_absent_returns_empty_state", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L53", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_upsert_file_creates_a_record", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L73", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_upsert_file_updates_existing_record", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L91", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_upsert_file_preserves_keep_local", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L113", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_set_keep_local_creates_record_if_absent", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L124", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_set_keep_local_toggles_and_preserves_sync_fields", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L149", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_mark_cleared_sets_cleared_at", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L164", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_mark_cleared_on_absent_file_creates_state", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L173", + "weight": 1.0, + "source": "cache_test_sync_state_writer_rationale_173", + "target": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L179", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_mutators_create_missing_exlab_wizard_dir", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L204", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_rollup_state_syncing_when_empty", + "target": "cache_sync_state_schema_syncstatejson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L209", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_rollup_state_syncing_when_some_unverified", + "target": "cache_sync_state_schema_syncstatejson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L212", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_rollup_state_syncing_when_some_unverified", + "target": "cache_sync_state_schema_filesyncrecord" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L220", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_rollup_state_synced_when_all_verified", + "target": "cache_sync_state_schema_syncstatejson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L223", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_rollup_state_synced_when_all_verified", + "target": "cache_sync_state_schema_filesyncrecord" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L231", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_rollup_state_cleared_takes_precedence_over_unverified", + "target": "cache_sync_state_schema_syncstatejson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L234", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_rollup_state_cleared_takes_precedence_over_unverified", + "target": "cache_sync_state_schema_filesyncrecord" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L245", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_sync_state_json_round_trips_through_msgspec", + "target": "cache_sync_state_schema_syncstatejson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L249", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_sync_state_json_round_trips_through_msgspec", + "target": "cache_sync_state_schema_filesyncrecord" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L273", + "weight": 1.0, + "source": "cache_test_sync_state_writer_rationale_273", + "target": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L290", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_read_raises_on_schema_major_mismatch", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L303", + "weight": 1.0, + "source": "cache_test_sync_state_writer_rationale_303", + "target": "cache_test_sync_state_writer_test_concurrent_upserts_on_distinct_files_both_survive", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/cache/test_sync_state_writer.py", + "source_location": "L308", + "weight": 1.0, + "source": "cache_test_sync_state_writer_test_concurrent_upserts_on_distinct_files_both_survive", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L46", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_load_config_complete_yaml", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L83", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_load_config_missing_file_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L91", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_load_config_invalid_yaml_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L100", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_load_config_top_level_not_mapping_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L108", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_load_config_validation_error_raises_config_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L132", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_load_config_from_text_empty_returns_empty_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L141", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_load_config_unreadable_path_raises_config_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L163", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_save_config_atomic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L175", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_save_config_preserves_comments_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L189", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_save_config_preserves_key_order", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L205", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_save_config_creates_parent_dirs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L215", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_save_config_without_original_text_writes_fresh", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L234", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_dump_config_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L306", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_test_mode_unset_leaves_equipment_ids_unchanged", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L313", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_test_mode_enabled_prefixes_every_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L326", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_test_mode_is_idempotent_on_already_prefixed_ids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L358", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_test_mode_preserves_unique_id_invariant", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L374", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_test_mode_truthy_values_trigger_prefix", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L386", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_test_mode_falsy_values_do_not_trigger_prefix", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L395", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_test_mode_unset_via_delenv_does_not_trigger_prefix", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L404", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_apply_test_mode_prefix_helper_is_a_pure_function", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L423", + "weight": 1.0, + "source": "tests_unit_config_test_loader_py", + "target": "config_test_loader_test_load_config_uses_ruamel_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L1", + "weight": 1.0, + "source": "config_test_loader_rationale_1", + "target": "tests_unit_config_test_loader_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L47", + "weight": 1.0, + "source": "config_test_loader_test_load_config_complete_yaml", + "target": "config_loader_load_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L86", + "weight": 1.0, + "source": "config_test_loader_test_load_config_missing_file_raises", + "target": "config_loader_load_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L96", + "weight": 1.0, + "source": "config_test_loader_test_load_config_invalid_yaml_raises", + "target": "config_loader_load_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L104", + "weight": 1.0, + "source": "config_test_loader_test_load_config_top_level_not_mapping_raises", + "target": "config_loader_load_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L127", + "weight": 1.0, + "source": "config_test_loader_test_load_config_validation_error_raises_config_error", + "target": "config_loader_load_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L135", + "weight": 1.0, + "source": "config_test_loader_test_load_config_from_text_empty_returns_empty_config", + "target": "config_loader_load_config_from_text" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L149", + "weight": 1.0, + "source": "config_test_loader_test_load_config_unreadable_path_raises_config_error", + "target": "config_loader_load_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L164", + "weight": 1.0, + "source": "config_test_loader_test_save_config_atomic", + "target": "config_loader_load_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L167", + "weight": 1.0, + "source": "config_test_loader_test_save_config_atomic", + "target": "config_loader_save_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L178", + "weight": 1.0, + "source": "config_test_loader_test_save_config_preserves_comments_round_trip", + "target": "config_loader_load_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L181", + "weight": 1.0, + "source": "config_test_loader_test_save_config_preserves_comments_round_trip", + "target": "config_loader_save_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L192", + "weight": 1.0, + "source": "config_test_loader_test_save_config_preserves_key_order", + "target": "config_loader_load_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L195", + "weight": 1.0, + "source": "config_test_loader_test_save_config_preserves_key_order", + "target": "config_loader_save_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L206", + "weight": 1.0, + "source": "config_test_loader_test_save_config_creates_parent_dirs", + "target": "config_loader_load_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L209", + "weight": 1.0, + "source": "config_test_loader_test_save_config_creates_parent_dirs", + "target": "config_loader_save_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L216", + "weight": 1.0, + "source": "config_test_loader_test_save_config_without_original_text_writes_fresh", + "target": "config_loader_load_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L219", + "weight": 1.0, + "source": "config_test_loader_test_save_config_without_original_text_writes_fresh", + "target": "config_loader_save_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L264", + "weight": 1.0, + "source": "config_test_loader_test_dump_config_round_trip", + "target": "config_loader_dump_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L265", + "weight": 1.0, + "source": "config_test_loader_test_dump_config_round_trip", + "target": "config_loader_load_config_from_text" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L307", + "weight": 1.0, + "source": "config_test_loader_rationale_307", + "target": "config_test_loader_test_test_mode_unset_leaves_equipment_ids_unchanged", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L309", + "weight": 1.0, + "source": "config_test_loader_test_test_mode_unset_leaves_equipment_ids_unchanged", + "target": "config_loader_load_config_from_text" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L314", + "weight": 1.0, + "source": "config_test_loader_rationale_314", + "target": "config_test_loader_test_test_mode_enabled_prefixes_every_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L316", + "weight": 1.0, + "source": "config_test_loader_test_test_mode_enabled_prefixes_every_equipment_id", + "target": "config_loader_load_config_from_text" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L329", + "weight": 1.0, + "source": "config_test_loader_rationale_329", + "target": "config_test_loader_test_test_mode_is_idempotent_on_already_prefixed_ids", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L352", + "weight": 1.0, + "source": "config_test_loader_test_test_mode_is_idempotent_on_already_prefixed_ids", + "target": "config_loader_load_config_from_text" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L359", + "weight": 1.0, + "source": "config_test_loader_rationale_359", + "target": "config_test_loader_test_test_mode_preserves_unique_id_invariant", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L361", + "weight": 1.0, + "source": "config_test_loader_test_test_mode_preserves_unique_id_invariant", + "target": "config_loader_load_config_from_text" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L377", + "weight": 1.0, + "source": "config_test_loader_rationale_377", + "target": "config_test_loader_test_test_mode_truthy_values_trigger_prefix", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L379", + "weight": 1.0, + "source": "config_test_loader_test_test_mode_truthy_values_trigger_prefix", + "target": "config_loader_load_config_from_text" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L389", + "weight": 1.0, + "source": "config_test_loader_rationale_389", + "target": "config_test_loader_test_test_mode_falsy_values_do_not_trigger_prefix", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L391", + "weight": 1.0, + "source": "config_test_loader_test_test_mode_falsy_values_do_not_trigger_prefix", + "target": "config_loader_load_config_from_text" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L398", + "weight": 1.0, + "source": "config_test_loader_rationale_398", + "target": "config_test_loader_test_test_mode_unset_via_delenv_does_not_trigger_prefix", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L400", + "weight": 1.0, + "source": "config_test_loader_test_test_mode_unset_via_delenv_does_not_trigger_prefix", + "target": "config_loader_load_config_from_text" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L407", + "weight": 1.0, + "source": "config_test_loader_rationale_407", + "target": "config_test_loader_test_apply_test_mode_prefix_helper_is_a_pure_function", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L413", + "weight": 1.0, + "source": "config_test_loader_test_apply_test_mode_prefix_helper_is_a_pure_function", + "target": "config_loader_load_config_from_text" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L414", + "weight": 1.0, + "source": "config_test_loader_test_apply_test_mode_prefix_helper_is_a_pure_function", + "target": "config_loader_apply_test_mode_prefix" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L430", + "weight": 1.0, + "source": "config_test_loader_test_load_config_uses_ruamel_round_trip", + "target": "config_loader_load_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_loader.py", + "source_location": "L433", + "weight": 1.0, + "source": "config_test_loader_test_load_config_uses_ruamel_round_trip", + "target": "config_loader_save_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "config_init_rationale_1", + "target": "tests_unit_config_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "config_init_rationale_1", + "target": "src_exlab_wizard_config_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_sftp_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L59", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_smb_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L69", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L84", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_full_config_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L208", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_paths_config_defaults_are_empty_strings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L215", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_paths_config_rejects_unknown_keys", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L225", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_lims_config_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L233", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_lims_config_rejects_negative_cache_ttl_hours", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L238", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_lims_config_zero_cache_ttl_is_allowed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L249", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_readme_default_field_minimal_string_field", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L256", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_readme_default_field_id_must_match_template_question_id_pattern", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L261", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_readme_default_field_id_rejects_leading_digit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L266", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_readme_default_field_label_must_be_non_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L271", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_readme_default_field_rejects_unknown_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L276", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_readme_choice_field_requires_options", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L282", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_readme_choice_field_rejects_empty_options_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L287", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_readme_choice_field_accepts_non_empty_options", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L292", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_readme_non_choice_field_does_not_require_options", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L304", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_readme_config_default_is_empty_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L314", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_bandwidth_window_happy_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L321", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_bandwidth_window_rejects_empty_days_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L326", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_bandwidth_window_rejects_invalid_day", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L331", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_bandwidth_window_from_must_be_before_to", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L336", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_bandwidth_window_equal_from_and_to_is_invalid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L342", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_bandwidth_window_rejects_non_hhmm_time", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L347", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_bandwidth_window_rejects_invalid_hour", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L352", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_bandwidth_window_rejects_invalid_minute", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L362", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_bandwidth_config_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L368", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_bandwidth_config_rejects_zero_upload_mbps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L373", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_bandwidth_config_rejects_negative_upload_mbps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L378", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_bandwidth_config_accepts_positive_upload_mbps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L388", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sftp_transport_minimal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L395", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sftp_transport_rejects_missing_host", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L402", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sftp_transport_rejects_empty_user", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L409", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sftp_transport_rejects_empty_remote_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L416", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sftp_transport_rejects_out_of_range_port", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L423", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sftp_transport_rejects_wrong_type_tag", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L435", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_smb_transport_minimal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L443", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_smb_transport_accepts_optional_domain_and_subpath", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L452", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_smb_transport_rejects_missing_share", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L464", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_requires_keyring_password_true_for_sftp_and_smb", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L471", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_requires_keyring_password_false_for_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L480", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_transport_discriminates_on_type_sftp", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L485", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_transport_discriminates_on_type_smb", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L495", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_transport_rejects_unknown_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L507", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_orchestrator_staging_transport_smb_mount", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L514", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_orchestrator_staging_transport_file_transfer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L521", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_orchestrator_staging_transport_rejects_unknown_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L535", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_id_regex_accepts_canonical_form", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L540", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_id_rejects_lowercase", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L545", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_id_rejects_hyphen", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L550", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_id_rejects_leading_digit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L555", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_id_rejects_too_long", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L561", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_id_accepts_max_length", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L567", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_config_rejects_removed_completeness_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L578", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_label_must_be_non_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L585", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_local_root_must_be_non_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L592", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_nas_root_must_be_non_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L599", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_equipment_orchestrator_staging_transport_optional", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L609", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_orch_staging_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L617", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_mode_defaults_to_nas_when_absent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L622", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_mode_nas_requires_transport_block", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L631", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_mode_nas_forbids_orchestrator_staging_transport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L640", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_mode_stage_requires_orchestrator_staging_transport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L649", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_mode_stage_forbids_transport_block", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L659", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_mode_stage_with_only_orchestrator_transport_is_valid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L670", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_mode_serializes_to_string", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L678", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_mode_rejects_unknown_value", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L685", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_mode_stage_round_trip_via_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L704", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_nas_cleanup_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L712", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_nas_cleanup_min_verify_passes_at_least_one", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L717", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_nas_cleanup_min_age_hours_non_negative", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L727", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_logging_level_normalized_to_uppercase", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L732", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_logging_level_rejects_unknown", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L737", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_logging_level_accepts_all_canonical_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L743", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_logging_level_strips_whitespace_and_normalizes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L748", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_logging_level_rejects_non_string", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L758", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_logging_level_rejects_non_string_directly", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L766", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_logging_central_log_max_mb_at_least_one", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L771", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_logging_central_log_keep_at_least_one", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L781", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_operators_config_defaults_to_empty_allowlist", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L786", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_operators_config_accepts_arbitrary_strings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L796", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_validator_config_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L803", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_validator_content_scan_max_mib_at_least_one", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L808", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_validator_extensions_must_start_with_dot", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L813", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_validator_extensions_rejects_dotless_among_others", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L823", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_plugins_config_default_allow_network_false", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L833", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_config_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L842", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_config_retry_attempts_non_negative", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L847", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_config_quiescence_minutes_at_least_one", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L852", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_config_poll_interval_seconds_at_least_one", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L857", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_config_accepts_custom_quiescence_settings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L868", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_sync_config_ignore_globs_default_is_independent_per_instance", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L881", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_orchestrator_staging_cleanup_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L887", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_orchestrator_staging_cleanup_scheduled_requires_positive_hours", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L893", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_orchestrator_staging_cleanup_rejects_unknown_mode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L903", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_orchestrator_config_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L918", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_config_fully_default_is_valid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L928", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_unique_equipment_ids_required", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L940", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_distinct_equipment_ids_accepted", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L954", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_orchestrator_legacy_enabled_field_rejected", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L970", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_orchestrator_label_and_staging_root_load_independently", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L985", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_orchestrator_with_both_fields_is_valid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L999", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_config_rejects_unknown_top_level_key", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1009", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_full_config_round_trip_via_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1030", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_round_trip_preserves_bandwidth_alias_for_from", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1044", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_config_with_equipment_appended_seeds_from_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1052", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1069", + "weight": 1.0, + "source": "tests_unit_config_test_models_py", + "target": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1", + "weight": 1.0, + "source": "config_test_models_rationale_1", + "target": "tests_unit_config_test_models_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L80", + "weight": 1.0, + "source": "config_test_models_equipment_dict", + "target": "config_test_models_sftp_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L389", + "weight": 1.0, + "source": "config_test_models_test_sftp_transport_minimal", + "target": "config_test_models_sftp_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L396", + "weight": 1.0, + "source": "config_test_models_test_sftp_transport_rejects_missing_host", + "target": "config_test_models_sftp_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L403", + "weight": 1.0, + "source": "config_test_models_test_sftp_transport_rejects_empty_user", + "target": "config_test_models_sftp_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L410", + "weight": 1.0, + "source": "config_test_models_test_sftp_transport_rejects_empty_remote_path", + "target": "config_test_models_sftp_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L417", + "weight": 1.0, + "source": "config_test_models_test_sftp_transport_rejects_out_of_range_port", + "target": "config_test_models_sftp_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L424", + "weight": 1.0, + "source": "config_test_models_test_sftp_transport_rejects_wrong_type_tag", + "target": "config_test_models_sftp_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L465", + "weight": 1.0, + "source": "config_test_models_test_requires_keyring_password_true_for_sftp_and_smb", + "target": "config_test_models_sftp_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L49", + "weight": 1.0, + "source": "config_test_models_rationale_49", + "target": "config_test_models_sftp_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L436", + "weight": 1.0, + "source": "config_test_models_test_smb_transport_minimal", + "target": "config_test_models_smb_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L444", + "weight": 1.0, + "source": "config_test_models_test_smb_transport_accepts_optional_domain_and_subpath", + "target": "config_test_models_smb_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L453", + "weight": 1.0, + "source": "config_test_models_test_smb_transport_rejects_missing_share", + "target": "config_test_models_smb_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L466", + "weight": 1.0, + "source": "config_test_models_test_requires_keyring_password_true_for_sftp_and_smb", + "target": "config_test_models_smb_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L489", + "weight": 1.0, + "source": "config_test_models_test_equipment_transport_discriminates_on_type_smb", + "target": "config_test_models_smb_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L946", + "weight": 1.0, + "source": "config_test_models_test_distinct_equipment_ids_accepted", + "target": "config_test_models_smb_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1059", + "weight": 1.0, + "source": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", + "target": "config_test_models_smb_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L60", + "weight": 1.0, + "source": "config_test_models_rationale_60", + "target": "config_test_models_smb_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L481", + "weight": 1.0, + "source": "config_test_models_test_equipment_transport_discriminates_on_type_sftp", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L487", + "weight": 1.0, + "source": "config_test_models_test_equipment_transport_discriminates_on_type_smb", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L496", + "weight": 1.0, + "source": "config_test_models_test_equipment_transport_rejects_unknown_type", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L536", + "weight": 1.0, + "source": "config_test_models_test_equipment_id_regex_accepts_canonical_form", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L542", + "weight": 1.0, + "source": "config_test_models_test_equipment_id_rejects_lowercase", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L547", + "weight": 1.0, + "source": "config_test_models_test_equipment_id_rejects_hyphen", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L552", + "weight": 1.0, + "source": "config_test_models_test_equipment_id_rejects_leading_digit", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L558", + "weight": 1.0, + "source": "config_test_models_test_equipment_id_rejects_too_long", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L563", + "weight": 1.0, + "source": "config_test_models_test_equipment_id_accepts_max_length", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L571", + "weight": 1.0, + "source": "config_test_models_test_equipment_config_rejects_removed_completeness_fields", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L579", + "weight": 1.0, + "source": "config_test_models_test_equipment_label_must_be_non_empty", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L586", + "weight": 1.0, + "source": "config_test_models_test_equipment_local_root_must_be_non_empty", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L593", + "weight": 1.0, + "source": "config_test_models_test_equipment_nas_root_must_be_non_empty", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L600", + "weight": 1.0, + "source": "config_test_models_test_equipment_orchestrator_staging_transport_optional", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L618", + "weight": 1.0, + "source": "config_test_models_test_sync_mode_defaults_to_nas_when_absent", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L623", + "weight": 1.0, + "source": "config_test_models_test_sync_mode_nas_requires_transport_block", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L632", + "weight": 1.0, + "source": "config_test_models_test_sync_mode_nas_forbids_orchestrator_staging_transport", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L641", + "weight": 1.0, + "source": "config_test_models_test_sync_mode_stage_requires_orchestrator_staging_transport", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L650", + "weight": 1.0, + "source": "config_test_models_test_sync_mode_stage_forbids_transport_block", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L660", + "weight": 1.0, + "source": "config_test_models_test_sync_mode_stage_with_only_orchestrator_transport_is_valid", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L671", + "weight": 1.0, + "source": "config_test_models_test_sync_mode_serializes_to_string", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L679", + "weight": 1.0, + "source": "config_test_models_test_sync_mode_rejects_unknown_value", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L687", + "weight": 1.0, + "source": "config_test_models_test_sync_mode_stage_round_trip_via_dict", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L931", + "weight": 1.0, + "source": "config_test_models_test_unique_equipment_ids_required", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L943", + "weight": 1.0, + "source": "config_test_models_test_distinct_equipment_ids_accepted", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1046", + "weight": 1.0, + "source": "config_test_models_test_config_with_equipment_appended_seeds_from_none", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1054", + "weight": 1.0, + "source": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1071", + "weight": 1.0, + "source": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L74", + "weight": 1.0, + "source": "config_test_models_rationale_74", + "target": "config_test_models_equipment_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1018", + "weight": 1.0, + "source": "config_test_models_test_full_config_round_trip_via_dict", + "target": "config_test_models_full_config_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1031", + "weight": 1.0, + "source": "config_test_models_test_round_trip_preserves_bandwidth_alias_for_from", + "target": "config_test_models_full_config_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L85", + "weight": 1.0, + "source": "config_test_models_rationale_85", + "target": "config_test_models_full_config_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L209", + "weight": 1.0, + "source": "config_test_models_test_paths_config_defaults_are_empty_strings", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L217", + "weight": 1.0, + "source": "config_test_models_test_paths_config_rejects_unknown_keys", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L226", + "weight": 1.0, + "source": "config_test_models_test_lims_config_defaults", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L235", + "weight": 1.0, + "source": "config_test_models_test_lims_config_rejects_negative_cache_ttl_hours", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L240", + "weight": 1.0, + "source": "config_test_models_test_lims_config_zero_cache_ttl_is_allowed", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L250", + "weight": 1.0, + "source": "config_test_models_test_readme_default_field_minimal_string_field", + "target": "config_models_readmedefaultfield" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L258", + "weight": 1.0, + "source": "config_test_models_test_readme_default_field_id_must_match_template_question_id_pattern", + "target": "config_models_readmedefaultfield" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L263", + "weight": 1.0, + "source": "config_test_models_test_readme_default_field_id_rejects_leading_digit", + "target": "config_models_readmedefaultfield" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L268", + "weight": 1.0, + "source": "config_test_models_test_readme_default_field_label_must_be_non_empty", + "target": "config_models_readmedefaultfield" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L273", + "weight": 1.0, + "source": "config_test_models_test_readme_default_field_rejects_unknown_type", + "target": "config_models_readmedefaultfield" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L278", + "weight": 1.0, + "source": "config_test_models_test_readme_choice_field_requires_options", + "target": "config_models_readmedefaultfield" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L284", + "weight": 1.0, + "source": "config_test_models_test_readme_choice_field_rejects_empty_options_list", + "target": "config_models_readmedefaultfield" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L288", + "weight": 1.0, + "source": "config_test_models_test_readme_choice_field_accepts_non_empty_options", + "target": "config_models_readmedefaultfield" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L294", + "weight": 1.0, + "source": "config_test_models_test_readme_non_choice_field_does_not_require_options", + "target": "config_models_readmedefaultfield" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L305", + "weight": 1.0, + "source": "config_test_models_test_readme_config_default_is_empty_list", + "target": "config_models_readmeconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L363", + "weight": 1.0, + "source": "config_test_models_test_bandwidth_config_defaults", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L370", + "weight": 1.0, + "source": "config_test_models_test_bandwidth_config_rejects_zero_upload_mbps", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L375", + "weight": 1.0, + "source": "config_test_models_test_bandwidth_config_rejects_negative_upload_mbps", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L379", + "weight": 1.0, + "source": "config_test_models_test_bandwidth_config_accepts_positive_upload_mbps", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L467", + "weight": 1.0, + "source": "config_test_models_test_requires_keyring_password_true_for_sftp_and_smb", + "target": "config_models_transport_requires_keyring_password" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L472", + "weight": 1.0, + "source": "config_test_models_test_requires_keyring_password_false_for_none", + "target": "config_models_transport_requires_keyring_password" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L508", + "weight": 1.0, + "source": "config_test_models_test_orchestrator_staging_transport_smb_mount", + "target": "config_models_orchestratorstagingtransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L515", + "weight": 1.0, + "source": "config_test_models_test_orchestrator_staging_transport_file_transfer", + "target": "config_models_orchestratorstagingtransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L523", + "weight": 1.0, + "source": "config_test_models_test_orchestrator_staging_transport_rejects_unknown_type", + "target": "config_models_orchestratorstagingtransport" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L568", + "weight": 1.0, + "source": "config_test_models_rationale_568", + "target": "config_test_models_test_equipment_config_rejects_removed_completeness_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L634", + "weight": 1.0, + "source": "config_test_models_test_sync_mode_nas_forbids_orchestrator_staging_transport", + "target": "config_test_models_orch_staging_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L652", + "weight": 1.0, + "source": "config_test_models_test_sync_mode_stage_forbids_transport_block", + "target": "config_test_models_orch_staging_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L663", + "weight": 1.0, + "source": "config_test_models_test_sync_mode_stage_with_only_orchestrator_transport_is_valid", + "target": "config_test_models_orch_staging_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L690", + "weight": 1.0, + "source": "config_test_models_test_sync_mode_stage_round_trip_via_dict", + "target": "config_test_models_orch_staging_transport_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L686", + "weight": 1.0, + "source": "config_test_models_rationale_686", + "target": "config_test_models_test_sync_mode_stage_round_trip_via_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L705", + "weight": 1.0, + "source": "config_test_models_test_nas_cleanup_defaults", + "target": "config_models_nascleanupconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L714", + "weight": 1.0, + "source": "config_test_models_test_nas_cleanup_min_verify_passes_at_least_one", + "target": "config_models_nascleanupconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L719", + "weight": 1.0, + "source": "config_test_models_test_nas_cleanup_min_age_hours_non_negative", + "target": "config_models_nascleanupconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L728", + "weight": 1.0, + "source": "config_test_models_test_logging_level_normalized_to_uppercase", + "target": "config_models_loggingconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L734", + "weight": 1.0, + "source": "config_test_models_test_logging_level_rejects_unknown", + "target": "config_models_loggingconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L739", + "weight": 1.0, + "source": "config_test_models_test_logging_level_accepts_all_canonical_values", + "target": "config_models_loggingconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L744", + "weight": 1.0, + "source": "config_test_models_test_logging_level_strips_whitespace_and_normalizes", + "target": "config_models_loggingconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L762", + "weight": 1.0, + "source": "config_test_models_test_logging_level_rejects_non_string_directly", + "target": "config_models_loggingconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L768", + "weight": 1.0, + "source": "config_test_models_test_logging_central_log_max_mb_at_least_one", + "target": "config_models_loggingconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L773", + "weight": 1.0, + "source": "config_test_models_test_logging_central_log_keep_at_least_one", + "target": "config_models_loggingconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L782", + "weight": 1.0, + "source": "config_test_models_test_operators_config_defaults_to_empty_allowlist", + "target": "config_models_operatorsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L787", + "weight": 1.0, + "source": "config_test_models_test_operators_config_accepts_arbitrary_strings", + "target": "config_models_operatorsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L797", + "weight": 1.0, + "source": "config_test_models_test_validator_config_defaults", + "target": "config_models_validatorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L805", + "weight": 1.0, + "source": "config_test_models_test_validator_content_scan_max_mib_at_least_one", + "target": "config_models_validatorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L810", + "weight": 1.0, + "source": "config_test_models_test_validator_extensions_must_start_with_dot", + "target": "config_models_validatorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L815", + "weight": 1.0, + "source": "config_test_models_test_validator_extensions_rejects_dotless_among_others", + "target": "config_models_validatorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L824", + "weight": 1.0, + "source": "config_test_models_test_plugins_config_default_allow_network_false", + "target": "config_models_pluginsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L834", + "weight": 1.0, + "source": "config_test_models_test_sync_config_defaults", + "target": "config_models_syncconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L844", + "weight": 1.0, + "source": "config_test_models_test_sync_config_retry_attempts_non_negative", + "target": "config_models_syncconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L849", + "weight": 1.0, + "source": "config_test_models_test_sync_config_quiescence_minutes_at_least_one", + "target": "config_models_syncconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L854", + "weight": 1.0, + "source": "config_test_models_test_sync_config_poll_interval_seconds_at_least_one", + "target": "config_models_syncconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L858", + "weight": 1.0, + "source": "config_test_models_test_sync_config_accepts_custom_quiescence_settings", + "target": "config_models_syncconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L870", + "weight": 1.0, + "source": "config_test_models_test_sync_config_ignore_globs_default_is_independent_per_instance", + "target": "config_models_syncconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L882", + "weight": 1.0, + "source": "config_test_models_test_orchestrator_staging_cleanup_defaults", + "target": "config_models_orchestratorstagingcleanup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L890", + "weight": 1.0, + "source": "config_test_models_test_orchestrator_staging_cleanup_scheduled_requires_positive_hours", + "target": "config_models_orchestratorstagingcleanup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L895", + "weight": 1.0, + "source": "config_test_models_test_orchestrator_staging_cleanup_rejects_unknown_mode", + "target": "config_models_orchestratorstagingcleanup" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L904", + "weight": 1.0, + "source": "config_test_models_rationale_904", + "target": "config_test_models_test_orchestrator_config_defaults", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L907", + "weight": 1.0, + "source": "config_test_models_test_orchestrator_config_defaults", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L955", + "weight": 1.0, + "source": "config_test_models_rationale_955", + "target": "config_test_models_test_orchestrator_legacy_enabled_field_rejected", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L971", + "weight": 1.0, + "source": "config_test_models_rationale_971", + "target": "config_test_models_test_orchestrator_label_and_staging_root_load_independently", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1010", + "weight": 1.0, + "source": "config_test_models_rationale_1010", + "target": "config_test_models_test_full_config_round_trip_via_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1045", + "weight": 1.0, + "source": "config_test_models_rationale_1045", + "target": "config_test_models_test_config_with_equipment_appended_seeds_from_none", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1047", + "weight": 1.0, + "source": "config_test_models_test_config_with_equipment_appended_seeds_from_none", + "target": "config_models_config_with_equipment_appended" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1053", + "weight": 1.0, + "source": "config_test_models_rationale_1053", + "target": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1055", + "weight": 1.0, + "source": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", + "target": "config_models_loggingconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1062", + "weight": 1.0, + "source": "config_test_models_test_config_with_equipment_appended_preserves_existing_state", + "target": "config_models_config_with_equipment_appended" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1070", + "weight": 1.0, + "source": "config_test_models_rationale_1070", + "target": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/config/test_models.py", + "source_location": "L1075", + "weight": 1.0, + "source": "config_test_models_test_config_with_equipment_appended_rejects_duplicate_id", + "target": "config_models_config_with_equipment_appended" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L35", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L89", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_loads_a_valid_plugin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L106", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_loaded_record_carries_isolation_block", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L118", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_required_and_optional_variables_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L140", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_rejects_plugin_directory_without_manifest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L152", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_rejects_plugin_with_malformed_yaml", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L164", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_rejects_plugin_missing_required_field", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L174", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_rejects_plugin_with_unsupported_api_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L184", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_rejects_plugin_with_invalid_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L202", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_rejects_plugin_with_timeout_above_cap", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L211", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_rejects_plugin_with_memory_above_cap", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L220", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_rejects_supported_extensions_when_not_a_list_of_strings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L238", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_rejects_network_plugin_when_allow_network_false", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L247", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_loads_network_plugin_when_allow_network_true", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L263", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_lab_dir_wins_on_name_collision", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L278", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_bundled_only_when_no_lab_collision", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L292", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_lab_only_plugins_are_loaded_too", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L311", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_reload_replaces_previous_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L326", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_reload_returns_registry_report_dataclass", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L340", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_get_returns_none_for_unknown_plugin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L346", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_list_all_returns_records_sorted_by_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L357", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_list_all_returns_record_instances", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L372", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_candidates_for_matches_by_extension", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L392", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_candidates_for_excludes_plugins_with_zero_matches", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L402", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_candidates_for_returns_pluginplan_instances", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L414", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_candidates_for_supports_multi_extension_plugin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L430", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_registry_with_no_dirs_loads_nothing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L438", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_registry_skips_files_in_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L450", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_registry_handles_nonexistent_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L465", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_registry_accepts_isolation_at_cap_boundary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L473", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_pluginplan_dataclass_shape", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L484", + "weight": 1.0, + "source": "tests_unit_plugins_test_registry_py", + "target": "plugins_test_registry_test_pluginrecord_dataclass_shape", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L1", + "weight": 1.0, + "source": "plugins_test_registry_rationale_1", + "target": "tests_unit_plugins_test_registry_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L91", + "weight": 1.0, + "source": "plugins_test_registry_test_loads_a_valid_plugin", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L108", + "weight": 1.0, + "source": "plugins_test_registry_test_loaded_record_carries_isolation_block", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L120", + "weight": 1.0, + "source": "plugins_test_registry_test_required_and_optional_variables_round_trip", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L166", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_plugin_missing_required_field", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L176", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_plugin_with_unsupported_api_version", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L204", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_plugin_with_timeout_above_cap", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L213", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_plugin_with_memory_above_cap", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L240", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_network_plugin_when_allow_network_false", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L249", + "weight": 1.0, + "source": "plugins_test_registry_test_loads_network_plugin_when_allow_network_true", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L266", + "weight": 1.0, + "source": "plugins_test_registry_test_lab_dir_wins_on_name_collision", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L282", + "weight": 1.0, + "source": "plugins_test_registry_test_bundled_only_when_no_lab_collision", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L296", + "weight": 1.0, + "source": "plugins_test_registry_test_lab_only_plugins_are_loaded_too", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L313", + "weight": 1.0, + "source": "plugins_test_registry_test_reload_replaces_previous_state", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L328", + "weight": 1.0, + "source": "plugins_test_registry_test_reload_returns_registry_report_dataclass", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L348", + "weight": 1.0, + "source": "plugins_test_registry_test_list_all_returns_records_sorted_by_name", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L359", + "weight": 1.0, + "source": "plugins_test_registry_test_list_all_returns_record_instances", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L374", + "weight": 1.0, + "source": "plugins_test_registry_test_candidates_for_matches_by_extension", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L394", + "weight": 1.0, + "source": "plugins_test_registry_test_candidates_for_excludes_plugins_with_zero_matches", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L404", + "weight": 1.0, + "source": "plugins_test_registry_test_candidates_for_returns_pluginplan_instances", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L416", + "weight": 1.0, + "source": "plugins_test_registry_test_candidates_for_supports_multi_extension_plugin", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L443", + "weight": 1.0, + "source": "plugins_test_registry_test_registry_skips_files_in_root", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L467", + "weight": 1.0, + "source": "plugins_test_registry_test_registry_accepts_isolation_at_cap_boundary", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L476", + "weight": 1.0, + "source": "plugins_test_registry_test_pluginplan_dataclass_shape", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L486", + "weight": 1.0, + "source": "plugins_test_registry_test_pluginrecord_dataclass_shape", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L50", + "weight": 1.0, + "source": "plugins_test_registry_rationale_50", + "target": "plugins_test_registry_write_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L92", + "weight": 1.0, + "source": "plugins_test_registry_test_loads_a_valid_plugin", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L109", + "weight": 1.0, + "source": "plugins_test_registry_test_loaded_record_carries_isolation_block", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L126", + "weight": 1.0, + "source": "plugins_test_registry_test_required_and_optional_variables_round_trip", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L144", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_plugin_directory_without_manifest", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L157", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_plugin_with_malformed_yaml", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L167", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_plugin_missing_required_field", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L177", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_plugin_with_unsupported_api_version", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L196", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_plugin_with_invalid_name", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L205", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_plugin_with_timeout_above_cap", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L214", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_plugin_with_memory_above_cap", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L228", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_supported_extensions_when_not_a_list_of_strings", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L241", + "weight": 1.0, + "source": "plugins_test_registry_test_rejects_network_plugin_when_allow_network_false", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L250", + "weight": 1.0, + "source": "plugins_test_registry_test_loads_network_plugin_when_allow_network_true", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L269", + "weight": 1.0, + "source": "plugins_test_registry_test_lab_dir_wins_on_name_collision", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L284", + "weight": 1.0, + "source": "plugins_test_registry_test_bundled_only_when_no_lab_collision", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L298", + "weight": 1.0, + "source": "plugins_test_registry_test_lab_only_plugins_are_loaded_too", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L314", + "weight": 1.0, + "source": "plugins_test_registry_test_reload_replaces_previous_state", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L329", + "weight": 1.0, + "source": "plugins_test_registry_test_reload_returns_registry_report_dataclass", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L341", + "weight": 1.0, + "source": "plugins_test_registry_test_get_returns_none_for_unknown_plugin", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L351", + "weight": 1.0, + "source": "plugins_test_registry_test_list_all_returns_records_sorted_by_name", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L360", + "weight": 1.0, + "source": "plugins_test_registry_test_list_all_returns_record_instances", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L376", + "weight": 1.0, + "source": "plugins_test_registry_test_candidates_for_matches_by_extension", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L395", + "weight": 1.0, + "source": "plugins_test_registry_test_candidates_for_excludes_plugins_with_zero_matches", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L405", + "weight": 1.0, + "source": "plugins_test_registry_test_candidates_for_returns_pluginplan_instances", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L417", + "weight": 1.0, + "source": "plugins_test_registry_test_candidates_for_supports_multi_extension_plugin", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L431", + "weight": 1.0, + "source": "plugins_test_registry_test_registry_with_no_dirs_loads_nothing", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L439", + "weight": 1.0, + "source": "plugins_test_registry_rationale_439", + "target": "plugins_test_registry_test_registry_skips_files_in_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L445", + "weight": 1.0, + "source": "plugins_test_registry_test_registry_skips_files_in_root", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L451", + "weight": 1.0, + "source": "plugins_test_registry_rationale_451", + "target": "plugins_test_registry_test_registry_handles_nonexistent_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L452", + "weight": 1.0, + "source": "plugins_test_registry_test_registry_handles_nonexistent_dir", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L468", + "weight": 1.0, + "source": "plugins_test_registry_test_registry_accepts_isolation_at_cap_boundary", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L474", + "weight": 1.0, + "source": "plugins_test_registry_rationale_474", + "target": "plugins_test_registry_test_pluginplan_dataclass_shape", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L477", + "weight": 1.0, + "source": "plugins_test_registry_test_pluginplan_dataclass_shape", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_registry.py", + "source_location": "L487", + "weight": 1.0, + "source": "plugins_test_registry_test_pluginrecord_dataclass_shape", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "plugins_init_rationale_1", + "target": "tests_unit_plugins_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "plugins_init_rationale_1", + "target": "tests_integration_plugins_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "plugins_init_rationale_1", + "target": "tests_fixtures_plugins_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "plugins_init_rationale_1", + "target": "src_exlab_wizard_plugins_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L34", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_minimalplugin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L49", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_make_ctx", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L71", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_plugin_abc_cannot_be_instantiated_directly", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L76", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_plugin_subclass_missing_can_handle_is_abstract", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L89", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_plugin_subclass_missing_transform_is_abstract", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L102", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_minimal_plugin_can_be_instantiated", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L113", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_default_validate_variables_returns_empty_when_no_required", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L118", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_default_validate_variables_reports_missing_required", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L128", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_default_validate_variables_reports_empty_string_as_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L140", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_default_validate_variables_lists_all_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L154", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_pre_transform_all_default_is_noop", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L160", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_post_transform_all_default_is_noop", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L166", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_on_plugin_failure_default_is_noop", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L173", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_describe_changes_default_returns_single_modify_change", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L189", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_filechange_is_frozen_dataclass", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L195", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_filechange_default_detail_is_empty_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L200", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_filechange_accepts_detail_payload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L215", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_plugincontext_is_frozen_dataclass", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L221", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_plugincontext_carries_full_session_metadata", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L244", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_pluginerror_reexport_is_canonical_class", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L249", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_plugininputrequired_reexport_is_canonical_class", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L253", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_plugininputrequired_carries_fields_and_reason", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L266", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_plugin_api_version_defaults_to_one", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L271", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_plugin_required_variables_default_is_empty_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L275", + "weight": 1.0, + "source": "tests_unit_plugins_test_base_py", + "target": "plugins_test_base_test_plugin_optional_variables_default_is_empty_list", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L1", + "weight": 1.0, + "source": "plugins_test_base_rationale_1", + "target": "tests_unit_plugins_test_base_py", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L34", + "weight": 1.0, + "source": "plugins_test_base_minimalplugin", + "target": "plugin", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L42", + "weight": 1.0, + "source": "plugins_test_base_minimalplugin", + "target": "plugins_test_base_minimalplugin_can_handle", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L45", + "weight": 1.0, + "source": "plugins_test_base_minimalplugin", + "target": "plugins_test_base_minimalplugin_transform", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L104", + "weight": 1.0, + "source": "plugins_test_base_test_minimal_plugin_can_be_instantiated", + "target": "plugins_test_base_minimalplugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L114", + "weight": 1.0, + "source": "plugins_test_base_test_default_validate_variables_returns_empty_when_no_required", + "target": "plugins_test_base_minimalplugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L155", + "weight": 1.0, + "source": "plugins_test_base_test_pre_transform_all_default_is_noop", + "target": "plugins_test_base_minimalplugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L161", + "weight": 1.0, + "source": "plugins_test_base_test_post_transform_all_default_is_noop", + "target": "plugins_test_base_minimalplugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L167", + "weight": 1.0, + "source": "plugins_test_base_test_on_plugin_failure_default_is_noop", + "target": "plugins_test_base_minimalplugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L174", + "weight": 1.0, + "source": "plugins_test_base_test_describe_changes_default_returns_single_modify_change", + "target": "plugins_test_base_minimalplugin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L35", + "weight": 1.0, + "source": "plugins_test_base_rationale_35", + "target": "plugins_test_base_minimalplugin", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L18", + "weight": 0.8, + "source": "plugins_test_base_minimalplugin", + "target": "exlab_wizard_errors_pluginerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L19", + "weight": 0.8, + "source": "plugins_test_base_minimalplugin", + "target": "exlab_wizard_errors_plugininputrequired", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L20", + "weight": 0.8, + "source": "plugins_test_base_minimalplugin", + "target": "plugins_base_filechange", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L20", + "weight": 0.8, + "source": "plugins_test_base_minimalplugin", + "target": "plugins_base_plugin", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L20", + "weight": 0.8, + "source": "plugins_test_base_minimalplugin", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L27", + "weight": 0.8, + "source": "plugins_test_base_minimalplugin", + "target": "plugins_logger_hostpluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L73", + "weight": 1.0, + "source": "plugins_test_base_test_plugin_abc_cannot_be_instantiated_directly", + "target": "plugin", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/hello_plugin/plugin.py", + "source_location": "L20", + "weight": 1.0, + "source": "hello_plugin_plugin_helloplugin", + "target": "plugin", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L17", + "weight": 1.0, + "source": "error_plugin_plugin_errorplugin", + "target": "plugin", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", + "source_location": "L18", + "weight": 1.0, + "source": "policy_violation_plugin_plugin_policyviolationplugin", + "target": "plugin", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", + "source_location": "L20", + "weight": 1.0, + "source": "input_required_plugin_plugin_inputrequiredplugin", + "target": "plugin", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/plugin.py", + "source_location": "L18", + "weight": 1.0, + "source": "crash_plugin_plugin_crashplugin", + "target": "plugin", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", + "source_location": "L19", + "weight": 1.0, + "source": "timeout_plugin_plugin_timeoutplugin", + "target": "plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L156", + "weight": 1.0, + "source": "plugins_test_base_test_pre_transform_all_default_is_noop", + "target": "plugins_test_base_make_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L162", + "weight": 1.0, + "source": "plugins_test_base_test_post_transform_all_default_is_noop", + "target": "plugins_test_base_make_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L168", + "weight": 1.0, + "source": "plugins_test_base_test_on_plugin_failure_default_is_noop", + "target": "plugins_test_base_make_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L175", + "weight": 1.0, + "source": "plugins_test_base_test_describe_changes_default_returns_single_modify_change", + "target": "plugins_test_base_make_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L216", + "weight": 1.0, + "source": "plugins_test_base_test_plugincontext_is_frozen_dataclass", + "target": "plugins_test_base_make_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L222", + "weight": 1.0, + "source": "plugins_test_base_test_plugincontext_carries_full_session_metadata", + "target": "plugins_test_base_make_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L60", + "weight": 1.0, + "source": "plugins_test_base_make_ctx", + "target": "plugins_logger_hostpluginlogger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L63", + "weight": 1.0, + "source": "plugins_test_base_make_ctx", + "target": "plugins_base_plugincontext" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L103", + "weight": 1.0, + "source": "plugins_test_base_rationale_103", + "target": "plugins_test_base_test_minimal_plugin_can_be_instantiated", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L129", + "weight": 1.0, + "source": "plugins_test_base_rationale_129", + "target": "plugins_test_base_test_default_validate_variables_reports_empty_string_as_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L190", + "weight": 1.0, + "source": "plugins_test_base_test_filechange_is_frozen_dataclass", + "target": "plugins_base_filechange" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L196", + "weight": 1.0, + "source": "plugins_test_base_test_filechange_default_detail_is_empty_dict", + "target": "plugins_base_filechange" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L201", + "weight": 1.0, + "source": "plugins_test_base_test_filechange_accepts_detail_payload", + "target": "plugins_base_filechange" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L245", + "weight": 1.0, + "source": "plugins_test_base_rationale_245", + "target": "plugins_test_base_test_pluginerror_reexport_is_canonical_class", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L254", + "weight": 1.0, + "source": "plugins_test_base_rationale_254", + "target": "plugins_test_base_test_plugininputrequired_carries_fields_and_reason", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L256", + "weight": 1.0, + "source": "plugins_test_base_test_plugininputrequired_carries_fields_and_reason", + "target": "exlab_wizard_errors_plugininputrequired" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_base.py", + "source_location": "L267", + "weight": 1.0, + "source": "plugins_test_base_rationale_267", + "target": "plugins_test_base_test_plugin_api_version_defaults_to_one", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_plugins_test_logger_py", + "target": "plugins_test_logger_test_host_plugin_logger_forwards_info_to_stdlib_logger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L44", + "weight": 1.0, + "source": "tests_unit_plugins_test_logger_py", + "target": "plugins_test_logger_test_host_plugin_logger_forwards_debug", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L51", + "weight": 1.0, + "source": "tests_unit_plugins_test_logger_py", + "target": "plugins_test_logger_test_host_plugin_logger_forwards_warning", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L58", + "weight": 1.0, + "source": "tests_unit_plugins_test_logger_py", + "target": "plugins_test_logger_test_host_plugin_logger_forwards_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L65", + "weight": 1.0, + "source": "tests_unit_plugins_test_logger_py", + "target": "plugins_test_logger_test_host_plugin_logger_passes_structured_fields_via_extra", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L77", + "weight": 1.0, + "source": "tests_unit_plugins_test_logger_py", + "target": "plugins_test_logger_test_host_plugin_logger_uses_default_logger_name_when_unspecified", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L94", + "weight": 1.0, + "source": "tests_unit_plugins_test_logger_py", + "target": "plugins_test_logger_test_worker_plugin_logger_emits_json_frame_to_stream", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L106", + "weight": 1.0, + "source": "tests_unit_plugins_test_logger_py", + "target": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L119", + "weight": 1.0, + "source": "tests_unit_plugins_test_logger_py", + "target": "plugins_test_logger_test_worker_plugin_logger_emits_one_frame_per_call", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L129", + "weight": 1.0, + "source": "tests_unit_plugins_test_logger_py", + "target": "plugins_test_logger_test_worker_plugin_logger_emits_empty_context_when_no_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L137", + "weight": 1.0, + "source": "tests_unit_plugins_test_logger_py", + "target": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L153", + "weight": 1.0, + "source": "tests_unit_plugins_test_logger_py", + "target": "plugins_test_logger_test_plugin_log_frame_fields_are_pinned", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L160", + "weight": 1.0, + "source": "tests_unit_plugins_test_logger_py", + "target": "plugins_test_logger_test_plugin_log_frame_default_context_is_empty_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L1", + "weight": 1.0, + "source": "plugins_test_logger_rationale_1", + "target": "tests_unit_plugins_test_logger_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L36", + "weight": 1.0, + "source": "plugins_test_logger_test_host_plugin_logger_forwards_info_to_stdlib_logger", + "target": "plugins_logger_hostpluginlogger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L45", + "weight": 1.0, + "source": "plugins_test_logger_test_host_plugin_logger_forwards_debug", + "target": "plugins_logger_hostpluginlogger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L52", + "weight": 1.0, + "source": "plugins_test_logger_test_host_plugin_logger_forwards_warning", + "target": "plugins_logger_hostpluginlogger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L59", + "weight": 1.0, + "source": "plugins_test_logger_test_host_plugin_logger_forwards_error", + "target": "plugins_logger_hostpluginlogger" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L68", + "weight": 1.0, + "source": "plugins_test_logger_rationale_68", + "target": "plugins_test_logger_test_host_plugin_logger_passes_structured_fields_via_extra", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L69", + "weight": 1.0, + "source": "plugins_test_logger_test_host_plugin_logger_passes_structured_fields_via_extra", + "target": "plugins_logger_hostpluginlogger" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L80", + "weight": 1.0, + "source": "plugins_test_logger_rationale_80", + "target": "plugins_test_logger_test_host_plugin_logger_uses_default_logger_name_when_unspecified", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L81", + "weight": 1.0, + "source": "plugins_test_logger_test_host_plugin_logger_uses_default_logger_name_when_unspecified", + "target": "plugins_logger_hostpluginlogger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L96", + "weight": 1.0, + "source": "plugins_test_logger_test_worker_plugin_logger_emits_json_frame_to_stream", + "target": "plugins_logger_workerpluginlogger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L108", + "weight": 1.0, + "source": "plugins_test_logger_test_worker_plugin_logger_each_level_emits_correct_level_string", + "target": "plugins_logger_workerpluginlogger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L121", + "weight": 1.0, + "source": "plugins_test_logger_test_worker_plugin_logger_emits_one_frame_per_call", + "target": "plugins_logger_workerpluginlogger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L131", + "weight": 1.0, + "source": "plugins_test_logger_test_worker_plugin_logger_emits_empty_context_when_no_fields", + "target": "plugins_logger_workerpluginlogger" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L138", + "weight": 1.0, + "source": "plugins_test_logger_rationale_138", + "target": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L141", + "weight": 1.0, + "source": "plugins_test_logger_test_worker_plugin_logger_default_stream_is_stderr", + "target": "plugins_logger_workerpluginlogger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L154", + "weight": 1.0, + "source": "plugins_test_logger_test_plugin_log_frame_fields_are_pinned", + "target": "plugins_logger_pluginlogframe" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/plugins/test_logger.py", + "source_location": "L161", + "weight": 1.0, + "source": "plugins_test_logger_test_plugin_log_frame_default_context_is_empty_dict", + "target": "plugins_logger_pluginlogframe" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L13", + "weight": 1.0, + "source": "tests_unit_constants_test_schema_versions_py", + "target": "constants_test_schema_versions_test_creation_json_version_is_pinned", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_unit_constants_test_schema_versions_py", + "target": "constants_test_schema_versions_test_readme_fields_json_version_is_pinned", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_unit_constants_test_schema_versions_py", + "target": "constants_test_schema_versions_test_sync_state_json_version_is_pinned", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L28", + "weight": 1.0, + "source": "tests_unit_constants_test_schema_versions_py", + "target": "constants_test_schema_versions_test_equipment_json_version_is_pinned", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_constants_test_schema_versions_py", + "target": "constants_test_schema_versions_test_test_runs_json_version_is_pinned", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L38", + "weight": 1.0, + "source": "tests_unit_constants_test_schema_versions_py", + "target": "constants_test_schema_versions_test_offline_catalogue_version_is_pinned", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L43", + "weight": 1.0, + "source": "tests_unit_constants_test_schema_versions_py", + "target": "constants_test_schema_versions_test_readme_front_matter_schema_version_is_pinned", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_unit_constants_test_schema_versions_py", + "target": "constants_test_schema_versions_test_all_schema_versions_are_strings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L63", + "weight": 1.0, + "source": "tests_unit_constants_test_schema_versions_py", + "target": "constants_test_schema_versions_test_schema_versions_re_exported_from_package", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_schema_versions.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_test_schema_versions_rationale_1", + "target": "tests_unit_constants_test_schema_versions_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L19", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_equipment_id_regex_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_equipment_id_pattern_is_compiled", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L28", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_equipment_id_pattern_accepts_valid_ids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_equipment_id_pattern_rejects_invalid_ids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L56", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_equipment_id_max_length", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L66", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_placeholder_angle_bracket_regex_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L70", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_placeholder_angle_bracket_pattern_finds_tokens", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L76", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_placeholder_angle_bracket_pattern_ignores_non_tokens", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L83", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_placeholder_jinja_var_regex_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_placeholder_jinja_var_pattern_finds_markers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_placeholder_jinja_var_pattern_ignores_plain_text", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L98", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_placeholder_jinja_block_regex_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L102", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_placeholder_jinja_block_pattern_finds_blocks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L108", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_placeholder_jinja_block_pattern_ignores_unrelated_content", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L117", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_project_short_id_regex_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L121", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_project_short_id_pattern_accepts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L126", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_project_short_id_pattern_rejects", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L137", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_template_question_id_regex_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L141", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_template_question_id_pattern_accepts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L146", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_template_question_id_pattern_rejects", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L156", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_plugin_name_regex_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L160", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_plugin_name_pattern_accepts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L165", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_plugin_name_pattern_rejects", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L175", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_run_date_strftime_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L181", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_run_date_strftime_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L193", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_run_dir_prefix_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L197", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_test_run_dir_prefix_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L201", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_test_runs_dir_name_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L210", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_windows_reserved_names_membership", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L220", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_windows_reserved_names_is_frozenset", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L224", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_windows_reserved_names_size", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L229", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_windows_reserved_names_are_uppercase", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L236", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_windows_reserved_names_case_insensitive_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L248", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_windows_illegal_chars_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L253", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_windows_illegal_chars_membership", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L258", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_windows_illegal_chars_excludes_safe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L268", + "weight": 1.0, + "source": "tests_unit_constants_test_patterns_py", + "target": "constants_test_patterns_test_patterns_re_exported_from_package", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_patterns.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_test_patterns_rationale_1", + "target": "tests_unit_constants_test_patterns_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_init_rationale_1", + "target": "tests_unit_constants_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_init_rationale_1", + "target": "src_exlab_wizard_constants_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enum_literal_alignment.py", + "source_location": "L67", + "weight": 1.0, + "source": "tests_unit_constants_test_enum_literal_alignment_py", + "target": "constants_test_enum_literal_alignment_test_enum_values_match_expected_literal_set", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enum_literal_alignment.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_test_enum_literal_alignment_rationale_1", + "target": "tests_unit_constants_test_enum_literal_alignment_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L15", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_run_kind_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_run_kind_is_str", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L30", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_sync_status_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L47", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_tier_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L55", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_problem_class_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L80", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_finding_kind_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_template_type_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L102", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_run_scope_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L111", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_lims_project_status_values_pascal_case", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L126", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_lims_project_source_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L139", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_ingest_state_enum_is_removed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L145", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_run_sync_state_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L151", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_setup_state_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L173", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_transport_type_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L181", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_completeness_signal_enum_removed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L186", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_staging_cleanup_mode_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L194", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_plugin_status_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L211", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_creation_level_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L219", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_orchestrator_transport_type_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L227", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_field_type_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L238", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_bandwidth_day_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L246", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_session_kind_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L254", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_next_action_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L262", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_audit_scope_kind_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L271", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_directory_level_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L279", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_platform_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L287", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_setup_next_action_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L295", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_sync_handle_state_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L303", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_plugin_source_root_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L311", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_tree_project_status_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L319", + "weight": 1.0, + "source": "tests_unit_constants_test_enums_py", + "target": "constants_test_enums_test_enums_re_exported_from_package", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_enums.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_test_enums_rationale_1", + "target": "tests_unit_constants_test_enums_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L13", + "weight": 1.0, + "source": "tests_unit_constants_test_keyring_py", + "target": "constants_test_keyring_test_keyring_service_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_unit_constants_test_keyring_py", + "target": "constants_test_keyring_test_keyring_username_lims_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_unit_constants_test_keyring_py", + "target": "constants_test_keyring_test_keyring_username_nas_template_literal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L28", + "weight": 1.0, + "source": "tests_unit_constants_test_keyring_py", + "target": "constants_test_keyring_test_keyring_nas_username_formats_template", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_constants_test_keyring_py", + "target": "constants_test_keyring_test_keyring_nas_username_handles_various_ids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L46", + "weight": 1.0, + "source": "tests_unit_constants_test_keyring_py", + "target": "constants_test_keyring_test_keyring_re_exported_from_package", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_keyring.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_test_keyring_rationale_1", + "target": "tests_unit_constants_test_keyring_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L12", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_plugin_timeout_max_seconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L17", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_plugin_memory_max_mb", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L22", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_plugin_validation_cpu_seconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L27", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_plugin_validation_memory_mb", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L32", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_plugin_validation_wall_seconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_plugin_rlimit_nofile", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L42", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_plugin_ipc_frame_cap_bytes_is_one_mib", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_plugin_api_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L54", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_plugin_supported_api_versions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L62", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_plugin_forbidden_path_prefixes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L72", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_label_max_length", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L77", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_objective_max_length", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L82", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_validator_binary_detect_bytes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_log_line_max_bytes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L92", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_session_gc_after_seconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L97", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_audit_refresh_seconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L102", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_quit_drain_timeout_seconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L107", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_sigterm_drain_timeout_seconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L112", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_tray_status_refresh_seconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L117", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_worker_timeout_grace_seconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L122", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_window_default_size", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L128", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_notification_coalesce_seconds", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L133", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_disk_space_preflight_mib", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L138", + "weight": 1.0, + "source": "tests_unit_constants_test_limits_py", + "target": "constants_test_limits_test_limits_re_exported_from_package", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_limits.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_test_limits_rationale_1", + "target": "tests_unit_constants_test_limits_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L12", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_cache_dir_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L17", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_creation_json_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L22", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_readme_fields_json_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L27", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_equipment_json_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L32", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_sync_state_filename", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_test_runs_json_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L42", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_answers_file_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L47", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_log_file_template", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_log_file_template_formats", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L58", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_readme_file_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L63", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_copier_manifest_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L68", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_plugin_manifest_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L73", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_server_state_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L78", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_lims_cache_db_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L83", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_sync_queue_db_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L88", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_central_log_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_secrets_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L98", + "weight": 1.0, + "source": "tests_unit_constants_test_filenames_py", + "target": "constants_test_filenames_test_filenames_re_exported_from_package", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/constants/test_filenames.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_test_filenames_rationale_1", + "target": "tests_unit_constants_test_filenames_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L13", + "weight": 1.0, + "source": "tests_unit_io_test_yaml_files_py", + "target": "io_test_yaml_files_test_load_yaml_manifest_returns_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L19", + "weight": 1.0, + "source": "tests_unit_io_test_yaml_files_py", + "target": "io_test_yaml_files_test_load_yaml_manifest_empty_file_returns_empty_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_unit_io_test_yaml_files_py", + "target": "io_test_yaml_files_test_load_yaml_manifest_non_dict_returns_empty_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L32", + "weight": 1.0, + "source": "tests_unit_io_test_yaml_files_py", + "target": "io_test_yaml_files_test_load_yaml_manifest_propagates_yaml_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L39", + "weight": 1.0, + "source": "tests_unit_io_test_yaml_files_py", + "target": "io_test_yaml_files_test_load_yaml_manifest_missing_file_raises", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L1", + "weight": 1.0, + "source": "io_test_yaml_files_rationale_1", + "target": "tests_unit_io_test_yaml_files_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L16", + "weight": 1.0, + "source": "io_test_yaml_files_test_load_yaml_manifest_returns_dict", + "target": "io_yaml_files_load_yaml_manifest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L22", + "weight": 1.0, + "source": "io_test_yaml_files_test_load_yaml_manifest_empty_file_returns_empty_dict", + "target": "io_yaml_files_load_yaml_manifest" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L26", + "weight": 1.0, + "source": "io_test_yaml_files_rationale_26", + "target": "io_test_yaml_files_test_load_yaml_manifest_non_dict_returns_empty_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L29", + "weight": 1.0, + "source": "io_test_yaml_files_test_load_yaml_manifest_non_dict_returns_empty_dict", + "target": "io_yaml_files_load_yaml_manifest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L36", + "weight": 1.0, + "source": "io_test_yaml_files_test_load_yaml_manifest_propagates_yaml_error", + "target": "io_yaml_files_load_yaml_manifest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_yaml_files.py", + "source_location": "L41", + "weight": 1.0, + "source": "io_test_yaml_files_test_load_yaml_manifest_missing_file_raises", + "target": "io_yaml_files_load_yaml_manifest" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L13", + "weight": 1.0, + "source": "tests_unit_io_test_atomic_write_py", + "target": "io_test_atomic_write_test_atomic_write_creates_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L19", + "weight": 1.0, + "source": "tests_unit_io_test_atomic_write_py", + "target": "io_test_atomic_write_test_atomic_write_overwrites_existing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L26", + "weight": 1.0, + "source": "tests_unit_io_test_atomic_write_py", + "target": "io_test_atomic_write_test_atomic_write_leaves_no_temp_file_on_success", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_io_test_atomic_write_py", + "target": "io_test_atomic_write_test_atomic_write_cleans_up_temp_on_replace_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_unit_io_test_atomic_write_py", + "target": "io_test_atomic_write_test_atomic_write_skip_fsync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L56", + "weight": 1.0, + "source": "tests_unit_io_test_atomic_write_py", + "target": "io_test_atomic_write_test_atomic_write_calls_fsync_by_default", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L1", + "weight": 1.0, + "source": "io_test_atomic_write_rationale_1", + "target": "tests_unit_io_test_atomic_write_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L15", + "weight": 1.0, + "source": "io_test_atomic_write_test_atomic_write_creates_file", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L22", + "weight": 1.0, + "source": "io_test_atomic_write_test_atomic_write_overwrites_existing", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L28", + "weight": 1.0, + "source": "io_test_atomic_write_test_atomic_write_leaves_no_temp_file_on_success", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L41", + "weight": 1.0, + "source": "io_test_atomic_write_test_atomic_write_cleans_up_temp_on_replace_failure", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L51", + "weight": 1.0, + "source": "io_test_atomic_write_test_atomic_write_skip_fsync", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_atomic_write.py", + "source_location": "L59", + "weight": 1.0, + "source": "io_test_atomic_write_test_atomic_write_calls_fsync_by_default", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_dummy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_test_require_schema_major_accepts_matching_major", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L27", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_test_require_schema_major_rejects_different_major", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L34", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_test_require_schema_major_rejects_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L39", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_test_require_schema_major_rejects_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L44", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_test_require_schema_major_rejects_unparseable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L49", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_test_read_msgspec_json_decodes_to_struct", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L57", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_test_read_msgspec_json_with_matching_major", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L64", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_test_read_msgspec_json_rejects_wrong_major", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L71", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_test_read_msgspec_json_passes_through_malformed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L79", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_test_read_msgspec_json_raw_returns_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_test_read_msgspec_json_raw_with_matching_major", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_test_read_msgspec_json_raw_rejects_wrong_major", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L100", + "weight": 1.0, + "source": "tests_unit_io_test_json_files_py", + "target": "io_test_json_files_test_read_msgspec_json_raw_skips_check_when_version_missing", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L1", + "weight": 1.0, + "source": "io_test_json_files_rationale_1", + "target": "tests_unit_io_test_json_files_py", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L10", + "weight": 0.8, + "source": "io_test_json_files_dummy", + "target": "exlab_wizard_errors_schemamajormismatcherror", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L24", + "weight": 1.0, + "source": "io_test_json_files_test_require_schema_major_accepts_matching_major", + "target": "io_json_files_require_schema_major" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L29", + "weight": 1.0, + "source": "io_test_json_files_test_require_schema_major_rejects_different_major", + "target": "io_json_files_require_schema_major" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L36", + "weight": 1.0, + "source": "io_test_json_files_test_require_schema_major_rejects_empty", + "target": "io_json_files_require_schema_major" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L41", + "weight": 1.0, + "source": "io_test_json_files_test_require_schema_major_rejects_none", + "target": "io_json_files_require_schema_major" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L46", + "weight": 1.0, + "source": "io_test_json_files_test_require_schema_major_rejects_unparseable", + "target": "io_json_files_require_schema_major" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L52", + "weight": 1.0, + "source": "io_test_json_files_test_read_msgspec_json_decodes_to_struct", + "target": "io_json_files_read_msgspec_json" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L60", + "weight": 1.0, + "source": "io_test_json_files_test_read_msgspec_json_with_matching_major", + "target": "io_json_files_read_msgspec_json" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L68", + "weight": 1.0, + "source": "io_test_json_files_test_read_msgspec_json_rejects_wrong_major", + "target": "io_json_files_read_msgspec_json" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L72", + "weight": 1.0, + "source": "io_test_json_files_rationale_72", + "target": "io_test_json_files_test_read_msgspec_json_passes_through_malformed", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L76", + "weight": 1.0, + "source": "io_test_json_files_test_read_msgspec_json_passes_through_malformed", + "target": "io_json_files_read_msgspec_json" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L82", + "weight": 1.0, + "source": "io_test_json_files_test_read_msgspec_json_raw_returns_dict", + "target": "io_json_files_read_msgspec_json_raw" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L89", + "weight": 1.0, + "source": "io_test_json_files_test_read_msgspec_json_raw_with_matching_major", + "target": "io_json_files_read_msgspec_json_raw" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L97", + "weight": 1.0, + "source": "io_test_json_files_test_read_msgspec_json_raw_rejects_wrong_major", + "target": "io_json_files_read_msgspec_json_raw" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L103", + "weight": 1.0, + "source": "io_test_json_files_rationale_103", + "target": "io_test_json_files_test_read_msgspec_json_raw_skips_check_when_version_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/io/test_json_files.py", + "source_location": "L107", + "weight": 1.0, + "source": "io_test_json_files_test_read_msgspec_json_raw_skips_check_when_version_missing", + "target": "io_json_files_read_msgspec_json_raw" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "template_init_rationale_1", + "target": "tests_unit_template_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "template_init_rationale_1", + "target": "src_exlab_wizard_template_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L59", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_core_readme_field_ids_pins_the_three_core_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L70", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_project_basic_returns_resolved_template", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L90", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_run_basic_experimental_sets_run_scope_experimental", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L100", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_run_basic_test_sets_run_scope_test", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L108", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_run_basic_both_sets_run_scope_both", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L121", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_missing_version_raises_template_load_error_mentioning_field", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L130", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_redeclares_core_raises_core_field_redeclared_naming_offender", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L138", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_redeclares_core_is_also_caught_as_template_load_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L146", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_missing_copier_yml_raises_template_load_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L156", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_scope_mismatch_raises_template_load_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L165", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_run_template_missing_run_scope_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L179", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_run_template_invalid_run_scope_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L198", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_with_tasks_does_not_raise", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L208", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_with_tasks_emits_warning_log", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L227", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_render_project_basic_writes_readme", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L245", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_render_project_basic_files_written_lists_the_readme", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L263", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_render_with_tasks_silently_ignores_tasks_and_writes_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L288", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_render_into_dst_with_conflicting_files_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L322", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_render_calls_copier_run_copy_with_spec_kwargs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L350", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_unreadable_copier_yml_raises_template_load_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L371", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_malformed_yaml_raises_template_load_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L387", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L403", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_non_mapping_yaml_raises_template_load_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L421", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_missing_exlab_type_raises_template_load_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L436", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_invalid_exlab_type_value_raises_template_load_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L461", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_readme_fields_with_non_core_entries_passes_through", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L488", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_readme_block_not_a_mapping_yields_empty_extra_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L505", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_readme_fields_not_a_list_yields_empty_extra_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L532", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_non_string_description_falls_back_to_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L548", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_plugin_order_preserved", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L567", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_resolve_non_list_plugin_order_falls_back_to_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L587", + "weight": 1.0, + "source": "tests_unit_template_test_copier_driver_py", + "target": "template_test_copier_driver_test_render_snapshots_existing_regular_file_at_dst", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L1", + "weight": 1.0, + "source": "template_test_copier_driver_rationale_1", + "target": "tests_unit_template_test_copier_driver_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L71", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_project_basic_returns_resolved_template", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L91", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_run_basic_experimental_sets_run_scope_experimental", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L101", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_run_basic_test_sets_run_scope_test", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L109", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_run_basic_both_sets_run_scope_both", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L124", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_missing_version_raises_template_load_error_mentioning_field", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L131", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_redeclares_core_raises_core_field_redeclared_naming_offender", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L141", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_redeclares_core_is_also_caught_as_template_load_error", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L148", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_missing_copier_yml_raises_template_load_error", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L158", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_scope_mismatch_raises_template_load_error", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L173", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_run_template_missing_run_scope_raises", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L187", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_run_template_invalid_run_scope_raises", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L200", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_with_tasks_does_not_raise", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L211", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_with_tasks_emits_warning_log", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L228", + "weight": 1.0, + "source": "template_test_copier_driver_test_render_project_basic_writes_readme", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L248", + "weight": 1.0, + "source": "template_test_copier_driver_test_render_project_basic_files_written_lists_the_readme", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L272", + "weight": 1.0, + "source": "template_test_copier_driver_test_render_with_tasks_silently_ignores_tasks_and_writes_file", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L297", + "weight": 1.0, + "source": "template_test_copier_driver_test_render_into_dst_with_conflicting_files_raises", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L327", + "weight": 1.0, + "source": "template_test_copier_driver_test_render_calls_copier_run_copy_with_spec_kwargs", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L362", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_unreadable_copier_yml_raises_template_load_error", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L381", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_malformed_yaml_raises_template_load_error", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L397", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_empty_copier_yml_treats_manifest_as_empty_and_rejects_missing_type", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L415", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_non_mapping_yaml_raises_template_load_error", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L430", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_missing_exlab_type_raises_template_load_error", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L448", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_invalid_exlab_type_value_raises_template_load_error", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L481", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_readme_fields_with_non_core_entries_passes_through", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L500", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_readme_block_not_a_mapping_yields_empty_extra_fields", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L522", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_readme_fields_not_a_list_yields_empty_extra_fields", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L543", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_non_string_description_falls_back_to_empty", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L562", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_plugin_order_preserved", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L577", + "weight": 1.0, + "source": "template_test_copier_driver_test_resolve_non_list_plugin_order_falls_back_to_empty", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/template/test_copier_driver.py", + "source_location": "L592", + "weight": 1.0, + "source": "template_test_copier_driver_test_render_snapshots_existing_regular_file_at_dst", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L20", + "weight": 1.0, + "source": "tests_unit_utils_test_time_py", + "target": "utils_test_time_test_utc_now_iso_format", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_unit_utils_test_time_py", + "target": "utils_test_time_test_dt_to_iso_naive_assumed_utc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L30", + "weight": 1.0, + "source": "tests_unit_utils_test_time_py", + "target": "utils_test_time_test_dt_to_iso_utc_aware", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L35", + "weight": 1.0, + "source": "tests_unit_utils_test_time_py", + "target": "utils_test_time_test_dt_to_iso_non_utc_zone_converts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L42", + "weight": 1.0, + "source": "tests_unit_utils_test_time_py", + "target": "utils_test_time_test_parse_utc_iso_z_form", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L47", + "weight": 1.0, + "source": "tests_unit_utils_test_time_py", + "target": "utils_test_time_test_parse_utc_iso_offset_form", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_unit_utils_test_time_py", + "target": "utils_test_time_test_parse_utc_iso_naive_input_tagged_utc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L57", + "weight": 1.0, + "source": "tests_unit_utils_test_time_py", + "target": "utils_test_time_test_parse_utc_iso_round_trip_with_now", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L63", + "weight": 1.0, + "source": "tests_unit_utils_test_time_py", + "target": "utils_test_time_test_parse_utc_iso_raises_on_garbage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L68", + "weight": 1.0, + "source": "tests_unit_utils_test_time_py", + "target": "utils_test_time_test_parse_utc_iso_or_none_handles_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L72", + "weight": 1.0, + "source": "tests_unit_utils_test_time_py", + "target": "utils_test_time_test_parse_utc_iso_or_none_handles_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L76", + "weight": 1.0, + "source": "tests_unit_utils_test_time_py", + "target": "utils_test_time_test_parse_utc_iso_or_none_handles_malformed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L80", + "weight": 1.0, + "source": "tests_unit_utils_test_time_py", + "target": "utils_test_time_test_parse_utc_iso_or_none_returns_datetime_for_valid", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L1", + "weight": 1.0, + "source": "utils_test_time_rationale_1", + "target": "tests_unit_utils_test_time_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L21", + "weight": 1.0, + "source": "utils_test_time_test_utc_now_iso_format", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L27", + "weight": 1.0, + "source": "utils_test_time_test_dt_to_iso_naive_assumed_utc", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L32", + "weight": 1.0, + "source": "utils_test_time_test_dt_to_iso_utc_aware", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L39", + "weight": 1.0, + "source": "utils_test_time_test_dt_to_iso_non_utc_zone_converts", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L43", + "weight": 1.0, + "source": "utils_test_time_test_parse_utc_iso_z_form", + "target": "utils_time_parse_utc_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L48", + "weight": 1.0, + "source": "utils_test_time_test_parse_utc_iso_offset_form", + "target": "utils_time_parse_utc_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L53", + "weight": 1.0, + "source": "utils_test_time_test_parse_utc_iso_naive_input_tagged_utc", + "target": "utils_time_parse_utc_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L58", + "weight": 1.0, + "source": "utils_test_time_test_parse_utc_iso_round_trip_with_now", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L59", + "weight": 1.0, + "source": "utils_test_time_test_parse_utc_iso_round_trip_with_now", + "target": "utils_time_parse_utc_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L60", + "weight": 1.0, + "source": "utils_test_time_test_parse_utc_iso_round_trip_with_now", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L65", + "weight": 1.0, + "source": "utils_test_time_test_parse_utc_iso_raises_on_garbage", + "target": "utils_time_parse_utc_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L69", + "weight": 1.0, + "source": "utils_test_time_test_parse_utc_iso_or_none_handles_none", + "target": "utils_time_parse_utc_iso_or_none" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L73", + "weight": 1.0, + "source": "utils_test_time_test_parse_utc_iso_or_none_handles_empty", + "target": "utils_time_parse_utc_iso_or_none" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L77", + "weight": 1.0, + "source": "utils_test_time_test_parse_utc_iso_or_none_handles_malformed", + "target": "utils_time_parse_utc_iso_or_none" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_time.py", + "source_location": "L81", + "weight": 1.0, + "source": "utils_test_time_test_parse_utc_iso_or_none_returns_datetime_for_valid", + "target": "utils_time_parse_utc_iso_or_none" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L12", + "weight": 1.0, + "source": "tests_unit_utils_test_state_py", + "target": "utils_test_state_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_unit_utils_test_state_py", + "target": "utils_test_state_test_allowed_transition_returns_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_unit_utils_test_state_py", + "target": "utils_test_state_test_disallowed_transition_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L34", + "weight": 1.0, + "source": "tests_unit_utils_test_state_py", + "target": "utils_test_state_test_terminal_transition_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L39", + "weight": 1.0, + "source": "tests_unit_utils_test_state_py", + "target": "utils_test_state_test_unknown_source_raises", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L1", + "weight": 1.0, + "source": "utils_test_state_rationale_1", + "target": "tests_unit_utils_test_state_py", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L12", + "weight": 1.0, + "source": "utils_test_state_state", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L35", + "weight": 1.0, + "source": "ui_notifications_severity", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L44", + "weight": 1.0, + "source": "ui_notifications_bannerid", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L58", + "weight": 1.0, + "source": "ui_notifications_containerid", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L24", + "weight": 1.0, + "source": "ui_keyboard_shortcut", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L14", + "weight": 1.0, + "source": "constants_enums_runkind", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L24", + "weight": 1.0, + "source": "constants_enums_syncstatus", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L41", + "weight": 1.0, + "source": "constants_enums_tier", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L48", + "weight": 1.0, + "source": "constants_enums_problemclass", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L65", + "weight": 1.0, + "source": "constants_enums_findingkind", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L76", + "weight": 1.0, + "source": "constants_enums_templatetype", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L84", + "weight": 1.0, + "source": "constants_enums_runscope", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L95", + "weight": 1.0, + "source": "constants_enums_limsprojectstatus", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L109", + "weight": 1.0, + "source": "constants_enums_limsprojectsource", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L117", + "weight": 1.0, + "source": "constants_enums_runsyncstate", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L137", + "weight": 1.0, + "source": "constants_enums_setupstate", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L159", + "weight": 1.0, + "source": "constants_enums_transporttype", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L173", + "weight": 1.0, + "source": "constants_enums_syncmode", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L187", + "weight": 1.0, + "source": "constants_enums_stagingcleanupmode", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L194", + "weight": 1.0, + "source": "constants_enums_pluginstatus", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L204", + "weight": 1.0, + "source": "constants_enums_creationlevel", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L214", + "weight": 1.0, + "source": "constants_enums_orchestratortransporttype", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L225", + "weight": 1.0, + "source": "constants_enums_fieldtype", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L235", + "weight": 1.0, + "source": "constants_enums_bandwidthday", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L247", + "weight": 1.0, + "source": "constants_enums_sessionkind", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L259", + "weight": 1.0, + "source": "constants_enums_nextaction", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L266", + "weight": 1.0, + "source": "constants_enums_auditscopekind", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L279", + "weight": 1.0, + "source": "constants_enums_directorylevel", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L296", + "weight": 1.0, + "source": "constants_enums_platform", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L304", + "weight": 1.0, + "source": "constants_enums_setupnextaction", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L318", + "weight": 1.0, + "source": "constants_enums_synchandlestate", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L330", + "weight": 1.0, + "source": "constants_enums_pluginsourceroot", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L337", + "weight": 1.0, + "source": "constants_enums_treeprojectstatus", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L45", + "weight": 1.0, + "source": "controller_state_machine_sessionstate", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L66", + "weight": 1.0, + "source": "controller_state_machine_phase", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L69", + "weight": 1.0, + "source": "sync_queue_syncjobstate", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L21", + "weight": 1.0, + "source": "transports_init_transporterrorkind", + "target": "strenum", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L26", + "weight": 1.0, + "source": "utils_test_state_test_allowed_transition_returns_none", + "target": "utils_state_assert_forward_transition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L31", + "weight": 1.0, + "source": "utils_test_state_test_disallowed_transition_raises", + "target": "utils_state_assert_forward_transition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L36", + "weight": 1.0, + "source": "utils_test_state_test_terminal_transition_raises", + "target": "utils_state_assert_forward_transition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/utils/test_state.py", + "source_location": "L44", + "weight": 1.0, + "source": "utils_test_state_test_unknown_source_raises", + "target": "utils_state_assert_forward_transition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_unit_tray_test_storage_secret_py", + "target": "tray_test_storage_secret_test_generates_secret_on_first_call", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L31", + "weight": 1.0, + "source": "tests_unit_tray_test_storage_secret_py", + "target": "tray_test_storage_secret_test_idempotent_across_calls", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L38", + "weight": 1.0, + "source": "tests_unit_tray_test_storage_secret_py", + "target": "tray_test_storage_secret_test_secret_file_mode_is_0600", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L45", + "weight": 1.0, + "source": "tests_unit_tray_test_storage_secret_py", + "target": "tray_test_storage_secret_test_regenerates_on_empty_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_unit_tray_test_storage_secret_py", + "target": "tray_test_storage_secret_test_regenerates_on_whitespace_only_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L61", + "weight": 1.0, + "source": "tests_unit_tray_test_storage_secret_py", + "target": "tray_test_storage_secret_test_creates_state_dir_if_missing", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_test_storage_secret_rationale_1", + "target": "tests_unit_tray_test_storage_secret_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L24", + "weight": 1.0, + "source": "tray_test_storage_secret_test_generates_secret_on_first_call", + "target": "tray_storage_secret_load_or_create_storage_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L32", + "weight": 1.0, + "source": "tray_test_storage_secret_test_idempotent_across_calls", + "target": "tray_storage_secret_load_or_create_storage_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L39", + "weight": 1.0, + "source": "tray_test_storage_secret_test_secret_file_mode_is_0600", + "target": "tray_storage_secret_load_or_create_storage_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L48", + "weight": 1.0, + "source": "tray_test_storage_secret_test_regenerates_on_empty_file", + "target": "tray_storage_secret_load_or_create_storage_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L56", + "weight": 1.0, + "source": "tray_test_storage_secret_test_regenerates_on_whitespace_only_file", + "target": "tray_storage_secret_load_or_create_storage_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_storage_secret.py", + "source_location": "L63", + "weight": 1.0, + "source": "tray_test_storage_secret_test_creates_state_dir_if_missing", + "target": "tray_storage_secret_load_or_create_storage_secret" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L44", + "weight": 1.0, + "source": "tests_unit_tray_test_dependencies_py", + "target": "tray_test_dependencies_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L63", + "weight": 1.0, + "source": "tests_unit_tray_test_dependencies_py", + "target": "tray_test_dependencies_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L72", + "weight": 1.0, + "source": "tests_unit_tray_test_dependencies_py", + "target": "tray_test_dependencies_test_build_production_dependencies_exposes_keyring_store", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L80", + "weight": 1.0, + "source": "tests_unit_tray_test_dependencies_py", + "target": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L120", + "weight": 1.0, + "source": "tests_unit_tray_test_dependencies_py", + "target": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L137", + "weight": 1.0, + "source": "tests_unit_tray_test_dependencies_py", + "target": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L159", + "weight": 1.0, + "source": "tests_unit_tray_test_dependencies_py", + "target": "tray_test_dependencies_nas_config_with_two_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L194", + "weight": 1.0, + "source": "tests_unit_tray_test_dependencies_py", + "target": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L208", + "weight": 1.0, + "source": "tests_unit_tray_test_dependencies_py", + "target": "tray_test_dependencies_test_check_nas_passwords_present_handles_none_store_and_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L214", + "weight": 1.0, + "source": "tests_unit_tray_test_dependencies_py", + "target": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L237", + "weight": 1.0, + "source": "tests_unit_tray_test_dependencies_py", + "target": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_test_dependencies_rationale_1", + "target": "tests_unit_tray_test_dependencies_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L49", + "weight": 1.0, + "source": "tray_test_dependencies_inmemorykeyring", + "target": "tray_test_dependencies_inmemorykeyring_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L52", + "weight": 1.0, + "source": "tray_test_dependencies_inmemorykeyring", + "target": "tray_test_dependencies_inmemorykeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L55", + "weight": 1.0, + "source": "tray_test_dependencies_inmemorykeyring", + "target": "tray_test_dependencies_inmemorykeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L58", + "weight": 1.0, + "source": "tray_test_dependencies_inmemorykeyring", + "target": "tray_test_dependencies_inmemorykeyring_delete_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L128", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", + "target": "tray_test_dependencies_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L142", + "weight": 1.0, + "source": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", + "target": "tray_test_dependencies_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L197", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", + "target": "tray_test_dependencies_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L220", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", + "target": "tray_test_dependencies_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L260", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", + "target": "tray_test_dependencies_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L45", + "weight": 1.0, + "source": "tray_test_dependencies_rationale_45", + "target": "tray_test_dependencies_inmemorykeyring", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L23", + "weight": 0.8, + "source": "tray_test_dependencies_inmemorykeyring", + "target": "config_models_bandwidthconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L23", + "weight": 0.8, + "source": "tray_test_dependencies_inmemorykeyring", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L23", + "weight": 0.8, + "source": "tray_test_dependencies_inmemorykeyring", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L23", + "weight": 0.8, + "source": "tray_test_dependencies_inmemorykeyring", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L23", + "weight": 0.8, + "source": "tray_test_dependencies_inmemorykeyring", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L32", + "weight": 0.8, + "source": "tray_test_dependencies_inmemorykeyring", + "target": "lims_keyring_store_keyringstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L33", + "weight": 0.8, + "source": "tray_test_dependencies_inmemorykeyring", + "target": "sync_nas_client_nassyncclient", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L130", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", + "target": "tray_test_dependencies_inmemorykeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L144", + "weight": 1.0, + "source": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", + "target": "tray_test_dependencies_inmemorykeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L200", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", + "target": "tray_test_dependencies_inmemorykeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L263", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", + "target": "tray_test_dependencies_inmemorykeyring_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L128", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", + "target": "tray_test_dependencies_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L142", + "weight": 1.0, + "source": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", + "target": "tray_test_dependencies_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L197", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", + "target": "tray_test_dependencies_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L220", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", + "target": "tray_test_dependencies_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L260", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", + "target": "tray_test_dependencies_swap_keyring", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L73", + "weight": 1.0, + "source": "tray_test_dependencies_rationale_73", + "target": "tray_test_dependencies_test_build_production_dependencies_exposes_keyring_store", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L75", + "weight": 1.0, + "source": "tray_test_dependencies_test_build_production_dependencies_exposes_keyring_store", + "target": "tray_dependencies_build_production_dependencies" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L83", + "weight": 1.0, + "source": "tray_test_dependencies_rationale_83", + "target": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L93", + "weight": 1.0, + "source": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L95", + "weight": 1.0, + "source": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L101", + "weight": 1.0, + "source": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L106", + "weight": 1.0, + "source": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L113", + "weight": 1.0, + "source": "tray_test_dependencies_test_build_production_dependencies_nas_sync_is_a_client", + "target": "tray_dependencies_build_production_dependencies" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L121", + "weight": 1.0, + "source": "tray_test_dependencies_rationale_121", + "target": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L129", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L134", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_keyring_present_true_when_lims_password_stored", + "target": "tray_dependencies_check_keyring_present" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L140", + "weight": 1.0, + "source": "tray_test_dependencies_rationale_140", + "target": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L143", + "weight": 1.0, + "source": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L149", + "weight": 1.0, + "source": "tray_test_dependencies_test_lims_client_password_provider_reads_keyring_under_lims_username", + "target": "tray_dependencies_build_lims_client" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L201", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", + "target": "tray_test_dependencies_nas_config_with_two_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L209", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_nas_passwords_present_handles_none_store_and_config", + "target": "tray_test_dependencies_nas_config_with_two_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L222", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", + "target": "tray_test_dependencies_nas_config_with_two_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L262", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", + "target": "tray_test_dependencies_nas_config_with_two_equipment", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L160", + "weight": 1.0, + "source": "tray_test_dependencies_rationale_160", + "target": "tray_test_dependencies_nas_config_with_two_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L162", + "weight": 1.0, + "source": "tray_test_dependencies_nas_config_with_two_equipment", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L164", + "weight": 1.0, + "source": "tray_test_dependencies_nas_config_with_two_equipment", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L170", + "weight": 1.0, + "source": "tray_test_dependencies_nas_config_with_two_equipment", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L198", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L200", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", + "target": "constants_keyring_keyring_nas_username" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L203", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_nas_passwords_present_returns_only_populated_ids", + "target": "tray_dependencies_check_nas_passwords_present" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L210", + "weight": 1.0, + "source": "tray_test_dependencies_test_check_nas_passwords_present_handles_none_store_and_config", + "target": "tray_dependencies_check_nas_passwords_present" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L217", + "weight": 1.0, + "source": "tray_test_dependencies_rationale_217", + "target": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L221", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L224", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", + "target": "tray_dependencies_build_production_dependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L230", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_short_circuits_when_password_missing", + "target": "tray_dependencies_make_equipment_probe" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L240", + "weight": 1.0, + "source": "tray_test_dependencies_rationale_240", + "target": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L261", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L263", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", + "target": "constants_keyring_keyring_nas_username" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L265", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", + "target": "tray_dependencies_build_production_dependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_dependencies.py", + "source_location": "L269", + "weight": 1.0, + "source": "tray_test_dependencies_test_make_equipment_probe_targets_remote_root_with_colon", + "target": "tray_dependencies_make_equipment_probe" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_unit_tray_test_icon_py", + "target": "tray_test_icon_fakemenu", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_unit_tray_test_icon_py", + "target": "tray_test_icon_fakemenuitem", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L40", + "weight": 1.0, + "source": "tests_unit_tray_test_icon_py", + "target": "tray_test_icon_fakeicon", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_unit_tray_test_icon_py", + "target": "tray_test_icon_fakepystray", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L54", + "weight": 1.0, + "source": "tests_unit_tray_test_icon_py", + "target": "tray_test_icon_test_build_icon_returns_icon_object", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L71", + "weight": 1.0, + "source": "tests_unit_tray_test_icon_py", + "target": "tray_test_icon_test_open_menu_item_invokes_callback", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L85", + "weight": 1.0, + "source": "tests_unit_tray_test_icon_py", + "target": "tray_test_icon_test_quit_menu_item_invokes_callback", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L99", + "weight": 1.0, + "source": "tests_unit_tray_test_icon_py", + "target": "tray_test_icon_test_status_label_callable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L112", + "weight": 1.0, + "source": "tests_unit_tray_test_icon_py", + "target": "tray_test_icon_test_callback_exception_is_swallowed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L127", + "weight": 1.0, + "source": "tests_unit_tray_test_icon_py", + "target": "tray_test_icon_test_default_icon_image_returns_pillow_image", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L133", + "weight": 1.0, + "source": "tests_unit_tray_test_icon_py", + "target": "tray_test_icon_test_lazy_pystray_import", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L148", + "weight": 1.0, + "source": "tests_unit_tray_test_icon_py", + "target": "tray_test_icon_test_separator_present", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L158", + "weight": 1.0, + "source": "tests_unit_tray_test_icon_py", + "target": "tray_test_icon_test_import_pystray_returns_module", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_test_icon_rationale_1", + "target": "tests_unit_tray_test_icon_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L21", + "weight": 1.0, + "source": "tray_test_icon_fakemenu", + "target": "tray_test_icon_fakemenu_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L26", + "weight": 1.0, + "source": "tray_test_icon_fakemenuitem", + "target": "tray_test_icon_fakemenuitem_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L41", + "weight": 1.0, + "source": "tray_test_icon_fakeicon", + "target": "tray_test_icon_fakeicon_init", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L57", + "weight": 1.0, + "source": "tray_test_icon_test_build_icon_returns_icon_object", + "target": "tray_icon_build_icon" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L73", + "weight": 1.0, + "source": "tray_test_icon_test_open_menu_item_invokes_callback", + "target": "tray_icon_build_icon" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L87", + "weight": 1.0, + "source": "tray_test_icon_test_quit_menu_item_invokes_callback", + "target": "tray_icon_build_icon" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L100", + "weight": 1.0, + "source": "tray_test_icon_test_status_label_callable", + "target": "tray_icon_build_icon" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L116", + "weight": 1.0, + "source": "tray_test_icon_test_callback_exception_is_swallowed", + "target": "tray_icon_build_icon" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L128", + "weight": 1.0, + "source": "tray_test_icon_test_default_icon_image_returns_pillow_image", + "target": "tray_icon_default_icon_image" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L134", + "weight": 1.0, + "source": "tray_test_icon_rationale_134", + "target": "tray_test_icon_test_lazy_pystray_import", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L140", + "weight": 1.0, + "source": "tray_test_icon_test_lazy_pystray_import", + "target": "tray_icon_build_icon" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L149", + "weight": 1.0, + "source": "tray_test_icon_test_separator_present", + "target": "tray_icon_build_icon" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L159", + "weight": 1.0, + "source": "tray_test_icon_rationale_159", + "target": "tray_test_icon_test_import_pystray_returns_module", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_icon.py", + "source_location": "L166", + "weight": 1.0, + "source": "tray_test_icon_test_import_pystray_returns_module", + "target": "tray_icon_import_pystray" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L40", + "weight": 1.0, + "source": "tests_unit_tray_test_live_reload_py", + "target": "tray_test_live_reload_stub_configure_logging", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L54", + "weight": 1.0, + "source": "tests_unit_tray_test_live_reload_py", + "target": "tray_test_live_reload_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L70", + "weight": 1.0, + "source": "tests_unit_tray_test_live_reload_py", + "target": "tray_test_live_reload_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_unit_tray_test_live_reload_py", + "target": "tray_test_live_reload_recordingcomponent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L98", + "weight": 1.0, + "source": "tests_unit_tray_test_live_reload_py", + "target": "tray_test_live_reload_recordingvalidator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L106", + "weight": 1.0, + "source": "tests_unit_tray_test_live_reload_py", + "target": "tray_test_live_reload_asyncstub", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L120", + "weight": 1.0, + "source": "tests_unit_tray_test_live_reload_py", + "target": "tray_test_live_reload_running_deps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L136", + "weight": 1.0, + "source": "tests_unit_tray_test_live_reload_py", + "target": "tray_test_live_reload_test_reconfigures_existing_components_in_place", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L150", + "weight": 1.0, + "source": "tests_unit_tray_test_live_reload_py", + "target": "tray_test_live_reload_test_skips_logging_reconfigure_when_unchanged", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L156", + "weight": 1.0, + "source": "tests_unit_tray_test_live_reload_py", + "target": "tray_test_live_reload_test_component_failure_is_isolated", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L182", + "weight": 1.0, + "source": "tests_unit_tray_test_live_reload_py", + "target": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L201", + "weight": 1.0, + "source": "tests_unit_tray_test_live_reload_py", + "target": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L226", + "weight": 1.0, + "source": "tests_unit_tray_test_live_reload_py", + "target": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_test_live_reload_rationale_1", + "target": "tests_unit_tray_test_live_reload_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L41", + "weight": 1.0, + "source": "tray_test_live_reload_rationale_41", + "target": "tray_test_live_reload_stub_configure_logging", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L82", + "weight": 1.0, + "source": "tray_test_live_reload_config", + "target": "tray_test_live_reload_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L138", + "weight": 1.0, + "source": "tray_test_live_reload_test_reconfigures_existing_components_in_place", + "target": "tray_test_live_reload_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L166", + "weight": 1.0, + "source": "tray_test_live_reload_test_component_failure_is_isolated", + "target": "tray_test_live_reload_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L55", + "weight": 1.0, + "source": "tray_test_live_reload_equipment", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L60", + "weight": 1.0, + "source": "tray_test_live_reload_equipment", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L65", + "weight": 1.0, + "source": "tray_test_live_reload_equipment", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L123", + "weight": 1.0, + "source": "tray_test_live_reload_running_deps", + "target": "tray_test_live_reload_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L138", + "weight": 1.0, + "source": "tray_test_live_reload_test_reconfigures_existing_components_in_place", + "target": "tray_test_live_reload_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L152", + "weight": 1.0, + "source": "tray_test_live_reload_test_skips_logging_reconfigure_when_unchanged", + "target": "tray_test_live_reload_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L166", + "weight": 1.0, + "source": "tray_test_live_reload_test_component_failure_is_isolated", + "target": "tray_test_live_reload_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L186", + "weight": 1.0, + "source": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", + "target": "tray_test_live_reload_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L205", + "weight": 1.0, + "source": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", + "target": "tray_test_live_reload_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L242", + "weight": 1.0, + "source": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", + "target": "tray_test_live_reload_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L79", + "weight": 1.0, + "source": "tray_test_live_reload_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L80", + "weight": 1.0, + "source": "tray_test_live_reload_config", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L81", + "weight": 1.0, + "source": "tray_test_live_reload_config", + "target": "config_models_loggingconfig" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L89", + "weight": 1.0, + "source": "tray_test_live_reload_recordingcomponent", + "target": "tray_test_live_reload_recordingcomponent_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L93", + "weight": 1.0, + "source": "tray_test_live_reload_recordingcomponent", + "target": "tray_test_live_reload_recordingcomponent_apply_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L125", + "weight": 1.0, + "source": "tray_test_live_reload_running_deps", + "target": "tray_test_live_reload_recordingcomponent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L87", + "weight": 1.0, + "source": "tray_test_live_reload_rationale_87", + "target": "tray_test_live_reload_recordingcomponent", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L21", + "weight": 0.8, + "source": "tray_test_live_reload_recordingcomponent", + "target": "api_app_appdependencies", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingcomponent", + "target": "config_models_bandwidthconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingcomponent", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingcomponent", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingcomponent", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingcomponent", + "target": "config_models_loggingconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingcomponent", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingcomponent", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L99", + "weight": 1.0, + "source": "tray_test_live_reload_recordingvalidator", + "target": "tray_test_live_reload_recordingvalidator_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L102", + "weight": 1.0, + "source": "tray_test_live_reload_recordingvalidator", + "target": "tray_test_live_reload_recordingvalidator_reconfigure", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L124", + "weight": 1.0, + "source": "tray_test_live_reload_running_deps", + "target": "tray_test_live_reload_recordingvalidator", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L21", + "weight": 0.8, + "source": "tray_test_live_reload_recordingvalidator", + "target": "api_app_appdependencies", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingvalidator", + "target": "config_models_bandwidthconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingvalidator", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingvalidator", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingvalidator", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingvalidator", + "target": "config_models_loggingconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingvalidator", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_recordingvalidator", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L113", + "weight": 1.0, + "source": "tray_test_live_reload_asyncstub", + "target": "tray_test_live_reload_asyncstub_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L116", + "weight": 1.0, + "source": "tray_test_live_reload_asyncstub", + "target": "tray_test_live_reload_asyncstub_start", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L231", + "weight": 1.0, + "source": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", + "target": "tray_test_live_reload_asyncstub", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L107", + "weight": 1.0, + "source": "tray_test_live_reload_rationale_107", + "target": "tray_test_live_reload_asyncstub", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L21", + "weight": 0.8, + "source": "tray_test_live_reload_asyncstub", + "target": "api_app_appdependencies", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_asyncstub", + "target": "config_models_bandwidthconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_asyncstub", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_asyncstub", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_asyncstub", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_asyncstub", + "target": "config_models_loggingconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_asyncstub", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L22", + "weight": 0.8, + "source": "tray_test_live_reload_asyncstub", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L137", + "weight": 1.0, + "source": "tray_test_live_reload_test_reconfigures_existing_components_in_place", + "target": "tray_test_live_reload_running_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L151", + "weight": 1.0, + "source": "tray_test_live_reload_test_skips_logging_reconfigure_when_unchanged", + "target": "tray_test_live_reload_running_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L164", + "weight": 1.0, + "source": "tray_test_live_reload_test_component_failure_is_isolated", + "target": "tray_test_live_reload_running_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L185", + "weight": 1.0, + "source": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", + "target": "tray_test_live_reload_running_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L204", + "weight": 1.0, + "source": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", + "target": "tray_test_live_reload_running_deps", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L121", + "weight": 1.0, + "source": "tray_test_live_reload_rationale_121", + "target": "tray_test_live_reload_running_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L122", + "weight": 1.0, + "source": "tray_test_live_reload_running_deps", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L140", + "weight": 1.0, + "source": "tray_test_live_reload_test_reconfigures_existing_components_in_place", + "target": "tray_dependencies_apply_live_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L152", + "weight": 1.0, + "source": "tray_test_live_reload_test_skips_logging_reconfigure_when_unchanged", + "target": "tray_dependencies_apply_live_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L157", + "weight": 1.0, + "source": "tray_test_live_reload_rationale_157", + "target": "tray_test_live_reload_test_component_failure_is_isolated", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L168", + "weight": 1.0, + "source": "tray_test_live_reload_test_component_failure_is_isolated", + "target": "tray_dependencies_apply_live_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L191", + "weight": 1.0, + "source": "tray_test_live_reload_test_rebuilds_lims_only_on_endpoint_change", + "target": "tray_dependencies_apply_live_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L209", + "weight": 1.0, + "source": "tray_test_live_reload_test_rebuilds_plugin_host_only_on_dir_change", + "target": "tray_dependencies_apply_live_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L229", + "weight": 1.0, + "source": "tray_test_live_reload_rationale_229", + "target": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L240", + "weight": 1.0, + "source": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_live_reload.py", + "source_location": "L244", + "weight": 1.0, + "source": "tray_test_live_reload_test_builds_and_starts_components_on_fresh_install", + "target": "tray_dependencies_apply_live_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_init_rationale_1", + "target": "tests_unit_tray_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_init_rationale_1", + "target": "src_exlab_wizard_tray_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L17", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_stubstore", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_stubsync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L28", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_format_status_idle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_format_status_sync_jobs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L38", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_format_status_single_job_uses_singular", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L43", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_format_status_input_required_singular", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_format_status_input_required_plural", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_format_status_combines_sync_and_input_required", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L58", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_snapshot_status_with_none_components", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L65", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_snapshot_status_reads_components", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L75", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_snapshot_status_callable_attributes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L84", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_ticker_invokes_callback_on_first_tick", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L97", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_ticker_does_not_invoke_callback_when_label_unchanged", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L109", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_ticker_start_and_stop_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L117", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_ticker_callback_exception_is_swallowed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L127", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_ticker_thread_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L149", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_default_refresh_matches_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L154", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_safe_int_handles_callable_that_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L164", + "weight": 1.0, + "source": "tests_unit_tray_test_status_py", + "target": "tray_test_status_test_safe_int_handles_non_numeric", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_test_status_rationale_1", + "target": "tests_unit_tray_test_status_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L18", + "weight": 1.0, + "source": "tray_test_status_stubstore", + "target": "tray_test_status_stubstore_init", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L67", + "weight": 1.0, + "source": "tray_test_status_test_snapshot_status_reads_components", + "target": "tray_test_status_stubstore", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L87", + "weight": 1.0, + "source": "tray_test_status_test_ticker_invokes_callback_on_first_tick", + "target": "tray_test_status_stubstore", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L100", + "weight": 1.0, + "source": "tray_test_status_test_ticker_does_not_invoke_callback_when_label_unchanged", + "target": "tray_test_status_stubstore", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L137", + "weight": 1.0, + "source": "tray_test_status_test_ticker_thread_runs", + "target": "tray_test_status_stubstore", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L8", + "weight": 0.8, + "source": "tray_test_status_stubstore", + "target": "tray_status_statussnapshot", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L8", + "weight": 0.8, + "source": "tray_test_status_stubstore", + "target": "tray_status_statusticker", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L24", + "weight": 1.0, + "source": "tray_test_status_stubsync", + "target": "tray_test_status_stubsync_init", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L68", + "weight": 1.0, + "source": "tray_test_status_test_snapshot_status_reads_components", + "target": "tray_test_status_stubsync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L88", + "weight": 1.0, + "source": "tray_test_status_test_ticker_invokes_callback_on_first_tick", + "target": "tray_test_status_stubsync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L101", + "weight": 1.0, + "source": "tray_test_status_test_ticker_does_not_invoke_callback_when_label_unchanged", + "target": "tray_test_status_stubsync", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L8", + "weight": 0.8, + "source": "tray_test_status_stubsync", + "target": "tray_status_statussnapshot", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L8", + "weight": 0.8, + "source": "tray_test_status_stubsync", + "target": "tray_status_statusticker", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L29", + "weight": 1.0, + "source": "tray_test_status_test_format_status_idle", + "target": "tray_status_statussnapshot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L30", + "weight": 1.0, + "source": "tray_test_status_test_format_status_idle", + "target": "tray_status_format_status" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L34", + "weight": 1.0, + "source": "tray_test_status_test_format_status_sync_jobs", + "target": "tray_status_statussnapshot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L35", + "weight": 1.0, + "source": "tray_test_status_test_format_status_sync_jobs", + "target": "tray_status_format_status" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L39", + "weight": 1.0, + "source": "tray_test_status_test_format_status_single_job_uses_singular", + "target": "tray_status_statussnapshot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L40", + "weight": 1.0, + "source": "tray_test_status_test_format_status_single_job_uses_singular", + "target": "tray_status_format_status" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L44", + "weight": 1.0, + "source": "tray_test_status_test_format_status_input_required_singular", + "target": "tray_status_statussnapshot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L45", + "weight": 1.0, + "source": "tray_test_status_test_format_status_input_required_singular", + "target": "tray_status_format_status" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L49", + "weight": 1.0, + "source": "tray_test_status_test_format_status_input_required_plural", + "target": "tray_status_statussnapshot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L50", + "weight": 1.0, + "source": "tray_test_status_test_format_status_input_required_plural", + "target": "tray_status_format_status" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L54", + "weight": 1.0, + "source": "tray_test_status_test_format_status_combines_sync_and_input_required", + "target": "tray_status_statussnapshot" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L55", + "weight": 1.0, + "source": "tray_test_status_test_format_status_combines_sync_and_input_required", + "target": "tray_status_format_status" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L59", + "weight": 1.0, + "source": "tray_test_status_test_snapshot_status_with_none_components", + "target": "tray_status_snapshot_status" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L66", + "weight": 1.0, + "source": "tray_test_status_test_snapshot_status_reads_components", + "target": "tray_status_snapshot_status" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L80", + "weight": 1.0, + "source": "tray_test_status_test_snapshot_status_callable_attributes", + "target": "tray_status_snapshot_status" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L86", + "weight": 1.0, + "source": "tray_test_status_test_ticker_invokes_callback_on_first_tick", + "target": "tray_status_statusticker" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L99", + "weight": 1.0, + "source": "tray_test_status_test_ticker_does_not_invoke_callback_when_label_unchanged", + "target": "tray_status_statusticker" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L110", + "weight": 1.0, + "source": "tray_test_status_test_ticker_start_and_stop_idempotent", + "target": "tray_status_statusticker" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L121", + "weight": 1.0, + "source": "tray_test_status_test_ticker_callback_exception_is_swallowed", + "target": "tray_status_statusticker" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L128", + "weight": 1.0, + "source": "tray_test_status_rationale_128", + "target": "tray_test_status_test_ticker_thread_runs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L136", + "weight": 1.0, + "source": "tray_test_status_test_ticker_thread_runs", + "target": "tray_status_statusticker" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L161", + "weight": 1.0, + "source": "tray_test_status_test_safe_int_handles_callable_that_raises", + "target": "tray_status_safe_int" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_status.py", + "source_location": "L170", + "weight": 1.0, + "source": "tray_test_status_test_safe_int_handles_non_numeric", + "target": "tray_status_safe_int" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L21", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_fakeuvicornserver", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L44", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_make_runner", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L60", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_test_pick_free_port_returns_bindable_port", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L72", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_test_start_writes_server_json_atomically", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L89", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_test_stop_deletes_state_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L98", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_test_double_start_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L108", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_test_port_property_before_start_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L114", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_test_port_property_after_start", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L123", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_test_state_file_property_returns_expected_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L128", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_test_stop_is_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L135", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_test_start_creates_state_dir_if_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L145", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_test_is_running_tracks_thread_lifecycle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L157", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_test_real_uvicorn_resolves_lazily", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L170", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_test_delete_state_file_handles_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L176", + "weight": 1.0, + "source": "tests_unit_tray_test_server_runner_py", + "target": "tray_test_server_runner_test_stop_handles_attribute_error_on_should_exit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_test_server_runner_rationale_1", + "target": "tests_unit_tray_test_server_runner_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L24", + "weight": 1.0, + "source": "tray_test_server_runner_fakeuvicornserver", + "target": "tray_test_server_runner_fakeuvicornserver_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L30", + "weight": 1.0, + "source": "tray_test_server_runner_fakeuvicornserver", + "target": "tray_test_server_runner_fakeuvicornserver_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L49", + "weight": 1.0, + "source": "tray_test_server_runner_make_runner", + "target": "tray_test_server_runner_fakeuvicornserver", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L22", + "weight": 1.0, + "source": "tray_test_server_runner_rationale_22", + "target": "tray_test_server_runner_fakeuvicornserver", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L14", + "weight": 0.8, + "source": "tray_test_server_runner_fakeuvicornserver", + "target": "tray_server_runner_serverrunner", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L73", + "weight": 1.0, + "source": "tray_test_server_runner_test_start_writes_server_json_atomically", + "target": "tray_test_server_runner_make_runner", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L90", + "weight": 1.0, + "source": "tray_test_server_runner_test_stop_deletes_state_file", + "target": "tray_test_server_runner_make_runner", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L99", + "weight": 1.0, + "source": "tray_test_server_runner_test_double_start_raises", + "target": "tray_test_server_runner_make_runner", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L109", + "weight": 1.0, + "source": "tray_test_server_runner_test_port_property_before_start_raises", + "target": "tray_test_server_runner_make_runner", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L115", + "weight": 1.0, + "source": "tray_test_server_runner_test_port_property_after_start", + "target": "tray_test_server_runner_make_runner", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L124", + "weight": 1.0, + "source": "tray_test_server_runner_test_state_file_property_returns_expected_path", + "target": "tray_test_server_runner_make_runner", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L129", + "weight": 1.0, + "source": "tray_test_server_runner_test_stop_is_idempotent", + "target": "tray_test_server_runner_make_runner", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L137", + "weight": 1.0, + "source": "tray_test_server_runner_test_start_creates_state_dir_if_missing", + "target": "tray_test_server_runner_make_runner", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L146", + "weight": 1.0, + "source": "tray_test_server_runner_test_is_running_tracks_thread_lifecycle", + "target": "tray_test_server_runner_make_runner", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L178", + "weight": 1.0, + "source": "tray_test_server_runner_test_stop_handles_attribute_error_on_should_exit", + "target": "tray_test_server_runner_make_runner", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L55", + "weight": 1.0, + "source": "tray_test_server_runner_make_runner", + "target": "tray_server_runner_serverrunner" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L61", + "weight": 1.0, + "source": "tray_test_server_runner_test_pick_free_port_returns_bindable_port", + "target": "tray_server_runner_pick_free_port" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L158", + "weight": 1.0, + "source": "tray_test_server_runner_rationale_158", + "target": "tray_test_server_runner_test_real_uvicorn_resolves_lazily", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L164", + "weight": 1.0, + "source": "tray_test_server_runner_test_real_uvicorn_resolves_lazily", + "target": "tray_server_runner_serverrunner" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L171", + "weight": 1.0, + "source": "tray_test_server_runner_test_delete_state_file_handles_missing", + "target": "tray_server_runner_serverrunner" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_server_runner.py", + "source_location": "L177", + "weight": 1.0, + "source": "tray_test_server_runner_rationale_177", + "target": "tray_test_server_runner_test_stop_handles_attribute_error_on_should_exit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L19", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_notify_calls_injected_callable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_notify_swallows_notifier_exceptions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_bus_emits_after_coalescing_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L63", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_bus_suppresses_when_window_foregrounded", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L74", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_bus_separate_kinds_separate_buckets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L89", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_bus_cancel_all_drops_pending", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L102", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_bus_emits_singleton_message_unchanged", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L114", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_coalescing_window_constant_matches_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L118", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_coalesced_message_plugin_input_required_plural", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L122", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_coalesced_message_plugin_input_required_singular", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L126", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_coalesced_message_sync_failed_plural", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L130", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_coalesced_message_sync_failed_singular", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L134", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_coalesced_message_unknown_kind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L138", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_bus_timer_fires_after_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L153", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_default_notifier_returns_callable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L161", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_noop_notifier_swallows_arbitrary_kwargs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L168", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_notify_uses_default_notifier_when_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L180", + "weight": 1.0, + "source": "tests_unit_tray_test_notifications_py", + "target": "tray_test_notifications_test_flush_with_already_drained_bucket", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_test_notifications_rationale_1", + "target": "tests_unit_tray_test_notifications_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L25", + "weight": 1.0, + "source": "tray_test_notifications_test_notify_calls_injected_callable", + "target": "tray_notifications_notify" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L34", + "weight": 1.0, + "source": "tray_test_notifications_test_notify_swallows_notifier_exceptions", + "target": "tray_notifications_notify" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L43", + "weight": 1.0, + "source": "tray_test_notifications_test_bus_emits_after_coalescing_window", + "target": "tray_notifications_notificationbus" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L65", + "weight": 1.0, + "source": "tray_test_notifications_test_bus_suppresses_when_window_foregrounded", + "target": "tray_notifications_notificationbus" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L76", + "weight": 1.0, + "source": "tray_test_notifications_test_bus_separate_kinds_separate_buckets", + "target": "tray_notifications_notificationbus" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L91", + "weight": 1.0, + "source": "tray_test_notifications_test_bus_cancel_all_drops_pending", + "target": "tray_notifications_notificationbus" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L104", + "weight": 1.0, + "source": "tray_test_notifications_test_bus_emits_singleton_message_unchanged", + "target": "tray_notifications_notificationbus" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L119", + "weight": 1.0, + "source": "tray_test_notifications_test_coalesced_message_plugin_input_required_plural", + "target": "tray_notifications_coalesced_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L123", + "weight": 1.0, + "source": "tray_test_notifications_test_coalesced_message_plugin_input_required_singular", + "target": "tray_notifications_coalesced_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L127", + "weight": 1.0, + "source": "tray_test_notifications_test_coalesced_message_sync_failed_plural", + "target": "tray_notifications_coalesced_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L131", + "weight": 1.0, + "source": "tray_test_notifications_test_coalesced_message_sync_failed_singular", + "target": "tray_notifications_coalesced_message" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L135", + "weight": 1.0, + "source": "tray_test_notifications_test_coalesced_message_unknown_kind", + "target": "tray_notifications_coalesced_message" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L139", + "weight": 1.0, + "source": "tray_test_notifications_rationale_139", + "target": "tray_test_notifications_test_bus_timer_fires_after_window", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L141", + "weight": 1.0, + "source": "tray_test_notifications_test_bus_timer_fires_after_window", + "target": "tray_notifications_notificationbus" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L154", + "weight": 1.0, + "source": "tray_test_notifications_rationale_154", + "target": "tray_test_notifications_test_default_notifier_returns_callable", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L157", + "weight": 1.0, + "source": "tray_test_notifications_test_default_notifier_returns_callable", + "target": "tray_notifications_default_notifier" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L162", + "weight": 1.0, + "source": "tray_test_notifications_rationale_162", + "target": "tray_test_notifications_test_noop_notifier_swallows_arbitrary_kwargs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L165", + "weight": 1.0, + "source": "tray_test_notifications_test_noop_notifier_swallows_arbitrary_kwargs", + "target": "tray_notifications_noop_notifier" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L176", + "weight": 1.0, + "source": "tray_test_notifications_test_notify_uses_default_notifier_when_none", + "target": "tray_notifications_notify" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L181", + "weight": 1.0, + "source": "tray_test_notifications_rationale_181", + "target": "tray_test_notifications_test_flush_with_already_drained_bucket", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_notifications.py", + "source_location": "L183", + "weight": 1.0, + "source": "tray_test_notifications_test_flush_with_already_drained_bucket", + "target": "tray_notifications_notificationbus" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L17", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_stubserver", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_stubwindow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_counted", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L38", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_make_coordinator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L64", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_test_idle_predicate_short_circuits", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L72", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_test_busy_predicate_times_out_and_force_quits", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L91", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_test_busy_predicate_wait_resets_timer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L111", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_test_sigterm_uses_short_timeout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L137", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_test_quit_handles_missing_window_launcher", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L152", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_test_safe_count_handles_callable_attribute", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L158", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_test_safe_count_handles_callable_that_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L168", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_test_safe_count_handles_none_obj", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L172", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_test_safe_count_handles_non_numeric", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L179", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_test_force_quit_prompt_exception_defaults_to_force", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L192", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_test_default_timeout_constants_match_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L199", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_test_idle_predicate_returns_true_immediately", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L208", + "weight": 1.0, + "source": "tests_unit_tray_test_quit_coordinator_py", + "target": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_test_quit_coordinator_rationale_1", + "target": "tests_unit_tray_test_quit_coordinator_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L18", + "weight": 1.0, + "source": "tray_test_quit_coordinator_stubserver", + "target": "tray_test_quit_coordinator_stubserver_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L21", + "weight": 1.0, + "source": "tray_test_quit_coordinator_stubserver", + "target": "tray_test_quit_coordinator_stubserver_stop", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L46", + "weight": 1.0, + "source": "tray_test_quit_coordinator_make_coordinator", + "target": "tray_test_quit_coordinator_stubserver", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L138", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_quit_handles_missing_window_launcher", + "target": "tray_test_quit_coordinator_stubserver", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L210", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", + "target": "tray_test_quit_coordinator_stubserver", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L9", + "weight": 0.8, + "source": "tray_test_quit_coordinator_stubserver", + "target": "tray_quit_coordinator_quitcoordinator", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L26", + "weight": 1.0, + "source": "tray_test_quit_coordinator_stubwindow", + "target": "tray_test_quit_coordinator_stubwindow_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L29", + "weight": 1.0, + "source": "tray_test_quit_coordinator_stubwindow", + "target": "tray_test_quit_coordinator_stubwindow_close", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L47", + "weight": 1.0, + "source": "tray_test_quit_coordinator_make_coordinator", + "target": "tray_test_quit_coordinator_stubwindow", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L211", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", + "target": "tray_test_quit_coordinator_stubwindow", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L9", + "weight": 0.8, + "source": "tray_test_quit_coordinator_stubwindow", + "target": "tray_quit_coordinator_quitcoordinator", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L34", + "weight": 1.0, + "source": "tray_test_quit_coordinator_counted", + "target": "tray_test_quit_coordinator_counted_init", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L48", + "weight": 1.0, + "source": "tray_test_quit_coordinator_make_coordinator", + "target": "tray_test_quit_coordinator_counted", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L142", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_quit_handles_missing_window_launcher", + "target": "tray_test_quit_coordinator_counted", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L153", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_safe_count_handles_callable_attribute", + "target": "tray_test_quit_coordinator_counted", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L159", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_safe_count_handles_callable_that_raises", + "target": "tray_test_quit_coordinator_counted", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L173", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_safe_count_handles_non_numeric", + "target": "tray_test_quit_coordinator_counted", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L224", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", + "target": "tray_test_quit_coordinator_counted", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L9", + "weight": 0.8, + "source": "tray_test_quit_coordinator_counted", + "target": "tray_quit_coordinator_quitcoordinator", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L65", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_idle_predicate_short_circuits", + "target": "tray_test_quit_coordinator_make_coordinator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L79", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_busy_predicate_times_out_and_force_quits", + "target": "tray_test_quit_coordinator_make_coordinator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L98", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_busy_predicate_wait_resets_timer", + "target": "tray_test_quit_coordinator_make_coordinator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L117", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_sigterm_uses_short_timeout", + "target": "tray_test_quit_coordinator_make_coordinator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L183", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_force_quit_prompt_exception_defaults_to_force", + "target": "tray_test_quit_coordinator_make_coordinator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L200", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_idle_predicate_returns_true_immediately", + "target": "tray_test_quit_coordinator_make_coordinator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L50", + "weight": 1.0, + "source": "tray_test_quit_coordinator_make_coordinator", + "target": "tray_quit_coordinator_quitcoordinator" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L139", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_quit_handles_missing_window_launcher", + "target": "tray_quit_coordinator_quitcoordinator" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L155", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_safe_count_handles_callable_attribute", + "target": "tray_quit_coordinator_safe_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L165", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_safe_count_handles_callable_that_raises", + "target": "tray_quit_coordinator_safe_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L169", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_safe_count_handles_none_obj", + "target": "tray_quit_coordinator_safe_count" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L175", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_safe_count_handles_non_numeric", + "target": "tray_quit_coordinator_safe_count" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L209", + "weight": 1.0, + "source": "tray_test_quit_coordinator_rationale_209", + "target": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_quit_coordinator.py", + "source_location": "L225", + "weight": 1.0, + "source": "tray_test_quit_coordinator_test_predicate_eventually_becomes_true", + "target": "tray_quit_coordinator_quitcoordinator" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_unit_tray_test_window_launcher_py", + "target": "tray_test_window_launcher_python_window_argv", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_unit_tray_test_window_launcher_py", + "target": "tray_test_window_launcher_test_open_spawns_subprocess", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L42", + "weight": 1.0, + "source": "tests_unit_tray_test_window_launcher_py", + "target": "tray_test_window_launcher_test_close_terminates_subprocess", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_unit_tray_test_window_launcher_py", + "target": "tray_test_window_launcher_test_close_is_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L60", + "weight": 1.0, + "source": "tests_unit_tray_test_window_launcher_py", + "target": "tray_test_window_launcher_test_open_focuses_existing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L71", + "weight": 1.0, + "source": "tests_unit_tray_test_window_launcher_py", + "target": "tray_test_window_launcher_test_resolve_window_executable_prefers_env_var", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L76", + "weight": 1.0, + "source": "tests_unit_tray_test_window_launcher_py", + "target": "tray_test_window_launcher_test_resolve_window_executable_uses_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L85", + "weight": 1.0, + "source": "tests_unit_tray_test_window_launcher_py", + "target": "tray_test_window_launcher_test_resolve_window_executable_falls_back_to_module", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L95", + "weight": 1.0, + "source": "tests_unit_tray_test_window_launcher_py", + "target": "tray_test_window_launcher_test_window_executable_override", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L103", + "weight": 1.0, + "source": "tests_unit_tray_test_window_launcher_py", + "target": "tray_test_window_launcher_test_argv_falls_through_resolve_helper", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L113", + "weight": 1.0, + "source": "tests_unit_tray_test_window_launcher_py", + "target": "tray_test_window_launcher_test_pid_is_none_before_open", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L119", + "weight": 1.0, + "source": "tests_unit_tray_test_window_launcher_py", + "target": "tray_test_window_launcher_test_close_kills_unresponsive_process", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_test_window_launcher_rationale_1", + "target": "tests_unit_tray_test_window_launcher_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L31", + "weight": 1.0, + "source": "tray_test_window_launcher_test_open_spawns_subprocess", + "target": "tray_test_window_launcher_python_window_argv", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L44", + "weight": 1.0, + "source": "tray_test_window_launcher_test_close_terminates_subprocess", + "target": "tray_test_window_launcher_python_window_argv", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L62", + "weight": 1.0, + "source": "tray_test_window_launcher_test_open_focuses_existing", + "target": "tray_test_window_launcher_python_window_argv", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L19", + "weight": 1.0, + "source": "tray_test_window_launcher_rationale_19", + "target": "tray_test_window_launcher_python_window_argv", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L30", + "weight": 1.0, + "source": "tray_test_window_launcher_test_open_spawns_subprocess", + "target": "tray_window_launcher_windowlauncher" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L43", + "weight": 1.0, + "source": "tray_test_window_launcher_test_close_terminates_subprocess", + "target": "tray_window_launcher_windowlauncher" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L54", + "weight": 1.0, + "source": "tray_test_window_launcher_test_close_is_idempotent", + "target": "tray_window_launcher_windowlauncher" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L61", + "weight": 1.0, + "source": "tray_test_window_launcher_test_open_focuses_existing", + "target": "tray_window_launcher_windowlauncher" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L73", + "weight": 1.0, + "source": "tray_test_window_launcher_test_resolve_window_executable_prefers_env_var", + "target": "tray_window_launcher_resolve_window_executable" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L82", + "weight": 1.0, + "source": "tray_test_window_launcher_test_resolve_window_executable_uses_path", + "target": "tray_window_launcher_resolve_window_executable" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L90", + "weight": 1.0, + "source": "tray_test_window_launcher_test_resolve_window_executable_falls_back_to_module", + "target": "tray_window_launcher_resolve_window_executable" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L96", + "weight": 1.0, + "source": "tray_test_window_launcher_test_window_executable_override", + "target": "tray_window_launcher_windowlauncher" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L104", + "weight": 1.0, + "source": "tray_test_window_launcher_rationale_104", + "target": "tray_test_window_launcher_test_argv_falls_through_resolve_helper", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L105", + "weight": 1.0, + "source": "tray_test_window_launcher_test_argv_falls_through_resolve_helper", + "target": "tray_window_launcher_windowlauncher" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L114", + "weight": 1.0, + "source": "tray_test_window_launcher_test_pid_is_none_before_open", + "target": "tray_window_launcher_windowlauncher" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_window_launcher.py", + "source_location": "L120", + "weight": 1.0, + "source": "tray_test_window_launcher_test_close_kills_unresponsive_process", + "target": "tray_window_launcher_windowlauncher" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L24", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_macos_register_writes_plist", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L40", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_macos_unregister_removes_plist", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L51", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_macos_register_is_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L63", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_linux_register_writes_systemd_and_desktop", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L80", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_linux_unregister_removes_both_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_linux_is_registered_when_only_desktop_present", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L100", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_fakekey", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L112", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_fakewinreg", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L155", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_fake_winreg", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L161", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_windows_register_sets_run_value", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L173", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_windows_unregister_deletes_run_value", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L185", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_windows_unregister_when_value_missing_is_safe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L193", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_windows_open_key_handles_filenotfound_on_query", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L211", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_silently_unlink_tolerates_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L223", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_env_var_root_overrides_constructor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L238", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_executable_path_property", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L244", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_default_executable_falls_back_to_sys_executable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L250", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_detect_platform_returns_known_value", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L255", + "weight": 1.0, + "source": "tests_unit_tray_test_autostart_py", + "target": "tray_test_autostart_test_detect_platform_dispatch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_test_autostart_rationale_1", + "target": "tests_unit_tray_test_autostart_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L25", + "weight": 1.0, + "source": "tray_test_autostart_test_macos_register_writes_plist", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L41", + "weight": 1.0, + "source": "tray_test_autostart_test_macos_unregister_removes_plist", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L52", + "weight": 1.0, + "source": "tray_test_autostart_test_macos_register_is_idempotent", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L64", + "weight": 1.0, + "source": "tray_test_autostart_test_linux_register_writes_systemd_and_desktop", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L81", + "weight": 1.0, + "source": "tray_test_autostart_test_linux_unregister_removes_both_files", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L88", + "weight": 1.0, + "source": "tray_test_autostart_test_linux_is_registered_when_only_desktop_present", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L101", + "weight": 1.0, + "source": "tray_test_autostart_fakekey", + "target": "tray_test_autostart_fakekey_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L105", + "weight": 1.0, + "source": "tray_test_autostart_fakekey", + "target": "tray_test_autostart_fakekey_enter", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L108", + "weight": 1.0, + "source": "tray_test_autostart_fakekey", + "target": "tray_test_autostart_fakekey_exit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L131", + "weight": 1.0, + "source": "tray_test_autostart_fakewinreg_openkey", + "target": "tray_test_autostart_fakekey", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L10", + "weight": 0.8, + "source": "tray_test_autostart_fakekey", + "target": "tray_autostart_autostartmanager", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L118", + "weight": 1.0, + "source": "tray_test_autostart_fakewinreg", + "target": "tray_test_autostart_fakewinreg_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L122", + "weight": 1.0, + "source": "tray_test_autostart_fakewinreg", + "target": "tray_test_autostart_fakewinreg_openkey", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L133", + "weight": 1.0, + "source": "tray_test_autostart_fakewinreg", + "target": "tray_test_autostart_fakewinreg_setvalueex", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L145", + "weight": 1.0, + "source": "tray_test_autostart_fakewinreg", + "target": "tray_test_autostart_fakewinreg_queryvalueex", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L150", + "weight": 1.0, + "source": "tray_test_autostart_fakewinreg", + "target": "tray_test_autostart_fakewinreg_deletevalue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L156", + "weight": 1.0, + "source": "tray_test_autostart_fake_winreg", + "target": "tray_test_autostart_fakewinreg", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L10", + "weight": 0.8, + "source": "tray_test_autostart_fakewinreg", + "target": "tray_autostart_autostartmanager", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L162", + "weight": 1.0, + "source": "tray_test_autostart_test_windows_register_sets_run_value", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L174", + "weight": 1.0, + "source": "tray_test_autostart_test_windows_unregister_deletes_run_value", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L189", + "weight": 1.0, + "source": "tray_test_autostart_test_windows_unregister_when_value_missing_is_safe", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L196", + "weight": 1.0, + "source": "tray_test_autostart_rationale_196", + "target": "tray_test_autostart_test_windows_open_key_handles_filenotfound_on_query", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L205", + "weight": 1.0, + "source": "tray_test_autostart_test_windows_open_key_handles_filenotfound_on_query", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L212", + "weight": 1.0, + "source": "tray_test_autostart_rationale_212", + "target": "tray_test_autostart_test_silently_unlink_tolerates_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L215", + "weight": 1.0, + "source": "tray_test_autostart_test_silently_unlink_tolerates_missing", + "target": "tray_autostart_silently_unlink" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L229", + "weight": 1.0, + "source": "tray_test_autostart_test_env_var_root_overrides_constructor", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L239", + "weight": 1.0, + "source": "tray_test_autostart_test_executable_path_property", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L245", + "weight": 1.0, + "source": "tray_test_autostart_test_default_executable_falls_back_to_sys_executable", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L251", + "weight": 1.0, + "source": "tray_test_autostart_test_detect_platform_returns_known_value", + "target": "tray_autostart_detect_platform" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_autostart.py", + "source_location": "L257", + "weight": 1.0, + "source": "tray_test_autostart_test_detect_platform_dispatch", + "target": "tray_autostart_detect_platform" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L15", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_stubserverrunner", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L30", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_stubwindowlauncher", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L42", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_stubquitcoordinator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L51", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_stubstatusticker", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L68", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_stubbus", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L76", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_stubautostart", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L80", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_make_tray", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L91", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_start_server_calls_runner", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L98", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_open_window_delegates", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L104", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_request_quit_runs_coordinator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L110", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_request_quit_calls_icon_stop_when_set", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L118", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_request_quit_handles_icon_stop_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L126", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_shutdown_tears_components_down", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L135", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_run_wires_icon_and_invokes_run_loop", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L166", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_build_default_components", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L178", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_main_uses_run_helper", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L201", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_main_handles_keyboard_interrupt", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L218", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_run_returns_one_on_icon_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L232", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_request_quit_uses_running_loop_when_present", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L269", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_build_default_app", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L302", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_build_default_components_falls_back_to_default_app", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L314", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_parse_argv_defaults_no_smoke", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L323", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_parse_argv_smoke_flag", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L331", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_parse_argv_no_autostart_prompt_silently_accepted", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L339", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_run_smoke_starts_server_and_stops_on_signal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L376", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_main_smoke_dispatches_to_run_smoke", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L397", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_parse_argv_version_flag", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L405", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_main_version_prints_version_and_exits_zero", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L423", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_parse_argv_defaults_no_test_flags", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L432", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_parse_argv_test_flag", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L440", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_parse_argv_test_with_samples", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L448", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_parse_argv_samples_without_test_errors", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L462", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_mode_env", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L487", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L524", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_main_test_does_not_overwrite_existing_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L539", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_main_test_with_samples_adds_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L555", + "weight": 1.0, + "source": "tests_unit_tray_test_main_py", + "target": "tray_test_main_test_main_without_test_does_not_set_env", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_test_main_rationale_1", + "target": "tests_unit_tray_test_main_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L16", + "weight": 1.0, + "source": "tray_test_main_stubserverrunner", + "target": "tray_test_main_stubserverrunner_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L22", + "weight": 1.0, + "source": "tray_test_main_stubserverrunner", + "target": "tray_test_main_stubserverrunner_start", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L26", + "weight": 1.0, + "source": "tray_test_main_stubserverrunner", + "target": "tray_test_main_stubserverrunner_stop", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L82", + "weight": 1.0, + "source": "tray_test_main_make_tray", + "target": "tray_test_main_stubserverrunner", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L12", + "weight": 0.8, + "source": "tray_test_main_stubserverrunner", + "target": "tray_main_trayapp", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L31", + "weight": 1.0, + "source": "tray_test_main_stubwindowlauncher", + "target": "tray_test_main_stubwindowlauncher_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L35", + "weight": 1.0, + "source": "tray_test_main_stubwindowlauncher", + "target": "tray_test_main_stubwindowlauncher_open", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L38", + "weight": 1.0, + "source": "tray_test_main_stubwindowlauncher", + "target": "tray_test_main_stubwindowlauncher_close", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L83", + "weight": 1.0, + "source": "tray_test_main_make_tray", + "target": "tray_test_main_stubwindowlauncher", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L12", + "weight": 0.8, + "source": "tray_test_main_stubwindowlauncher", + "target": "tray_main_trayapp", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L43", + "weight": 1.0, + "source": "tray_test_main_stubquitcoordinator", + "target": "tray_test_main_stubquitcoordinator_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L46", + "weight": 1.0, + "source": "tray_test_main_stubquitcoordinator", + "target": "tray_test_main_stubquitcoordinator_quit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L84", + "weight": 1.0, + "source": "tray_test_main_make_tray", + "target": "tray_test_main_stubquitcoordinator", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L12", + "weight": 0.8, + "source": "tray_test_main_stubquitcoordinator", + "target": "tray_main_trayapp", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L52", + "weight": 1.0, + "source": "tray_test_main_stubstatusticker", + "target": "tray_test_main_stubstatusticker_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L57", + "weight": 1.0, + "source": "tray_test_main_stubstatusticker", + "target": "tray_test_main_stubstatusticker_start", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L60", + "weight": 1.0, + "source": "tray_test_main_stubstatusticker", + "target": "tray_test_main_stubstatusticker_stop", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L63", + "weight": 1.0, + "source": "tray_test_main_stubstatusticker", + "target": "tray_test_main_stubstatusticker_tick_once", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L85", + "weight": 1.0, + "source": "tray_test_main_make_tray", + "target": "tray_test_main_stubstatusticker", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L12", + "weight": 0.8, + "source": "tray_test_main_stubstatusticker", + "target": "tray_main_trayapp", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L69", + "weight": 1.0, + "source": "tray_test_main_stubbus", + "target": "tray_test_main_stubbus_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L72", + "weight": 1.0, + "source": "tray_test_main_stubbus", + "target": "tray_test_main_stubbus_cancel_all", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L86", + "weight": 1.0, + "source": "tray_test_main_make_tray", + "target": "tray_test_main_stubbus", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L12", + "weight": 0.8, + "source": "tray_test_main_stubbus", + "target": "tray_main_trayapp", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L87", + "weight": 1.0, + "source": "tray_test_main_make_tray", + "target": "tray_test_main_stubautostart", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L12", + "weight": 0.8, + "source": "tray_test_main_stubautostart", + "target": "tray_main_trayapp", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L92", + "weight": 1.0, + "source": "tray_test_main_test_start_server_calls_runner", + "target": "tray_test_main_make_tray", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L99", + "weight": 1.0, + "source": "tray_test_main_test_open_window_delegates", + "target": "tray_test_main_make_tray", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L105", + "weight": 1.0, + "source": "tray_test_main_test_request_quit_runs_coordinator", + "target": "tray_test_main_make_tray", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L111", + "weight": 1.0, + "source": "tray_test_main_test_request_quit_calls_icon_stop_when_set", + "target": "tray_test_main_make_tray", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L119", + "weight": 1.0, + "source": "tray_test_main_test_request_quit_handles_icon_stop_error", + "target": "tray_test_main_make_tray", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L127", + "weight": 1.0, + "source": "tray_test_main_test_shutdown_tears_components_down", + "target": "tray_test_main_make_tray", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L136", + "weight": 1.0, + "source": "tray_test_main_test_run_wires_icon_and_invokes_run_loop", + "target": "tray_test_main_make_tray", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L207", + "weight": 1.0, + "source": "tray_test_main_test_main_handles_keyboard_interrupt", + "target": "tray_test_main_make_tray", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L219", + "weight": 1.0, + "source": "tray_test_main_test_run_returns_one_on_icon_failure", + "target": "tray_test_main_make_tray", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L244", + "weight": 1.0, + "source": "tray_test_main_test_request_quit_uses_running_loop_when_present", + "target": "tray_test_main_make_tray", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L482", + "weight": 1.0, + "source": "tray_test_main_test_mode_env", + "target": "tray_test_main_make_tray", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L81", + "weight": 1.0, + "source": "tray_test_main_make_tray", + "target": "tray_main_trayapp" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L171", + "weight": 1.0, + "source": "tray_test_main_test_build_default_components", + "target": "tray_main_build_default_components" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L179", + "weight": 1.0, + "source": "tray_test_main_rationale_179", + "target": "tray_test_main_test_main_uses_run_helper", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L235", + "weight": 1.0, + "source": "tray_test_main_rationale_235", + "target": "tray_test_main_test_request_quit_uses_running_loop_when_present", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L270", + "weight": 1.0, + "source": "tray_test_main_rationale_270", + "target": "tray_test_main_test_build_default_app", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L305", + "weight": 1.0, + "source": "tray_test_main_rationale_305", + "target": "tray_test_main_test_build_default_components_falls_back_to_default_app", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L315", + "weight": 1.0, + "source": "tray_test_main_rationale_315", + "target": "tray_test_main_test_parse_argv_defaults_no_smoke", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L318", + "weight": 1.0, + "source": "tray_test_main_test_parse_argv_defaults_no_smoke", + "target": "tray_main_parse_argv" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L324", + "weight": 1.0, + "source": "tray_test_main_rationale_324", + "target": "tray_test_main_test_parse_argv_smoke_flag", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L327", + "weight": 1.0, + "source": "tray_test_main_test_parse_argv_smoke_flag", + "target": "tray_main_parse_argv" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L332", + "weight": 1.0, + "source": "tray_test_main_rationale_332", + "target": "tray_test_main_test_parse_argv_no_autostart_prompt_silently_accepted", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L335", + "weight": 1.0, + "source": "tray_test_main_test_parse_argv_no_autostart_prompt_silently_accepted", + "target": "tray_main_parse_argv" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L342", + "weight": 1.0, + "source": "tray_test_main_rationale_342", + "target": "tray_test_main_test_run_smoke_starts_server_and_stops_on_signal", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L379", + "weight": 1.0, + "source": "tray_test_main_rationale_379", + "target": "tray_test_main_test_main_smoke_dispatches_to_run_smoke", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L398", + "weight": 1.0, + "source": "tray_test_main_rationale_398", + "target": "tray_test_main_test_parse_argv_version_flag", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L401", + "weight": 1.0, + "source": "tray_test_main_test_parse_argv_version_flag", + "target": "tray_main_parse_argv" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L408", + "weight": 1.0, + "source": "tray_test_main_rationale_408", + "target": "tray_test_main_test_main_version_prints_version_and_exits_zero", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L424", + "weight": 1.0, + "source": "tray_test_main_rationale_424", + "target": "tray_test_main_test_parse_argv_defaults_no_test_flags", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L427", + "weight": 1.0, + "source": "tray_test_main_test_parse_argv_defaults_no_test_flags", + "target": "tray_main_parse_argv" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L435", + "weight": 1.0, + "source": "tray_test_main_test_parse_argv_test_flag", + "target": "tray_main_parse_argv" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L443", + "weight": 1.0, + "source": "tray_test_main_test_parse_argv_test_with_samples", + "target": "tray_main_parse_argv" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L451", + "weight": 1.0, + "source": "tray_test_main_rationale_451", + "target": "tray_test_main_test_parse_argv_samples_without_test_errors", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L455", + "weight": 1.0, + "source": "tray_test_main_test_parse_argv_samples_without_test_errors", + "target": "tray_main_parse_argv" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L463", + "weight": 1.0, + "source": "tray_test_main_rationale_463", + "target": "tray_test_main_test_mode_env", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L488", + "weight": 1.0, + "source": "tray_test_main_rationale_488", + "target": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L508", + "weight": 1.0, + "source": "tray_test_main_test_main_test_flag_sets_env_and_bootstraps_config", + "target": "config_loader_load_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L525", + "weight": 1.0, + "source": "tray_test_main_rationale_525", + "target": "tray_test_main_test_main_test_does_not_overwrite_existing_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L546", + "weight": 1.0, + "source": "tray_test_main_test_main_test_with_samples_adds_equipment", + "target": "config_loader_load_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/tray/test_main.py", + "source_location": "L556", + "weight": 1.0, + "source": "tray_test_main_rationale_556", + "target": "tray_test_main_test_main_without_test_does_not_set_env", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L57", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_system_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L73", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L99", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_generator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L109", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_generate_writes_both_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L118", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_readme_starts_with_yaml_front_matter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L135", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_readme_body_includes_label_and_objective", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L148", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_readme_fields_json_round_trips", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L192", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_empty_core_field_rejected", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L201", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_label_over_max_length_rejected", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L208", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_objective_over_max_length_rejected", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L222", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_required_template_field_missing_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L231", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_required_config_field_missing_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L247", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_duplicate_field_id_across_layers_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L263", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_custom_field_label_collides_with_template_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L281", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_core_field_redeclared_in_template_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L290", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_core_field_redeclared_in_config_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L304", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_project_level_system_run_is_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L313", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_run_level_experimental_run_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L322", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_run_level_test_run_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L336", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_string_type_accepts_string_rejects_int", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L354", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_text_type_accepts_multiline_rejects_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L370", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_choice_type_accepts_listed_rejects_other", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L386", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_choice_without_options_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L396", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_date_type_accepts_iso8601_rejects_garbage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L419", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_date_type_rejects_non_string", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L429", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_boolean_type_accepts_bool_rejects_string", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L449", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_unknown_field_type_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L459", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_choice_type_rejects_non_string_value", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L476", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_generate_is_idempotent_byte_identical", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L512", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_generated_at_uses_z_suffix", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L520", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_cache_dir_created_on_demand", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L529", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_value_without_declaration_skips_typecheck", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L546", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_optional_empty_field_is_skipped", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L556", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_required_field_present_with_none_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L569", + "weight": 1.0, + "source": "tests_unit_readme_test_generator_py", + "target": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L1", + "weight": 1.0, + "source": "readme_test_generator_rationale_1", + "target": "tests_unit_readme_test_generator_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L92", + "weight": 1.0, + "source": "readme_test_generator_ctx", + "target": "readme_test_generator_system_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L305", + "weight": 1.0, + "source": "readme_test_generator_test_project_level_system_run_is_none", + "target": "readme_test_generator_system_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L314", + "weight": 1.0, + "source": "readme_test_generator_test_run_level_experimental_run_name", + "target": "readme_test_generator_system_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L323", + "weight": 1.0, + "source": "readme_test_generator_test_run_level_test_run_name", + "target": "readme_test_generator_system_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L62", + "weight": 1.0, + "source": "readme_test_generator_system_fields", + "target": "readme_generator_systemfields" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L110", + "weight": 1.0, + "source": "readme_test_generator_test_generate_writes_both_files", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L121", + "weight": 1.0, + "source": "readme_test_generator_test_readme_starts_with_yaml_front_matter", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L140", + "weight": 1.0, + "source": "readme_test_generator_test_readme_body_includes_label_and_objective", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L151", + "weight": 1.0, + "source": "readme_test_generator_test_readme_fields_json_round_trips", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L197", + "weight": 1.0, + "source": "readme_test_generator_test_empty_core_field_rejected", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L204", + "weight": 1.0, + "source": "readme_test_generator_test_label_over_max_length_rejected", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L213", + "weight": 1.0, + "source": "readme_test_generator_test_objective_over_max_length_rejected", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L227", + "weight": 1.0, + "source": "readme_test_generator_test_required_template_field_missing_raises", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L237", + "weight": 1.0, + "source": "readme_test_generator_test_required_config_field_missing_raises", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L255", + "weight": 1.0, + "source": "readme_test_generator_test_duplicate_field_id_across_layers_raises", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L271", + "weight": 1.0, + "source": "readme_test_generator_test_custom_field_label_collides_with_template_id", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L286", + "weight": 1.0, + "source": "readme_test_generator_test_core_field_redeclared_in_template_raises", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L295", + "weight": 1.0, + "source": "readme_test_generator_test_core_field_redeclared_in_config_raises", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L306", + "weight": 1.0, + "source": "readme_test_generator_test_project_level_system_run_is_none", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L315", + "weight": 1.0, + "source": "readme_test_generator_test_run_level_experimental_run_name", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L324", + "weight": 1.0, + "source": "readme_test_generator_test_run_level_test_run_name", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L343", + "weight": 1.0, + "source": "readme_test_generator_test_string_type_accepts_string_rejects_int", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L360", + "weight": 1.0, + "source": "readme_test_generator_test_text_type_accepts_multiline_rejects_list", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L376", + "weight": 1.0, + "source": "readme_test_generator_test_choice_type_accepts_listed_rejects_other", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L391", + "weight": 1.0, + "source": "readme_test_generator_test_choice_without_options_raises", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L402", + "weight": 1.0, + "source": "readme_test_generator_test_date_type_accepts_iso8601_rejects_garbage", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L424", + "weight": 1.0, + "source": "readme_test_generator_test_date_type_rejects_non_string", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L435", + "weight": 1.0, + "source": "readme_test_generator_test_boolean_type_accepts_bool_rejects_string", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L454", + "weight": 1.0, + "source": "readme_test_generator_test_unknown_field_type_raises", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L466", + "weight": 1.0, + "source": "readme_test_generator_test_choice_type_rejects_non_string_value", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L480", + "weight": 1.0, + "source": "readme_test_generator_test_generate_is_idempotent_byte_identical", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L513", + "weight": 1.0, + "source": "readme_test_generator_test_generated_at_uses_z_suffix", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L523", + "weight": 1.0, + "source": "readme_test_generator_test_cache_dir_created_on_demand", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L538", + "weight": 1.0, + "source": "readme_test_generator_test_value_without_declaration_skips_typecheck", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L551", + "weight": 1.0, + "source": "readme_test_generator_test_optional_empty_field_is_skipped", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L564", + "weight": 1.0, + "source": "readme_test_generator_test_required_field_present_with_none_raises", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L582", + "weight": 1.0, + "source": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", + "target": "readme_test_generator_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L86", + "weight": 1.0, + "source": "readme_test_generator_ctx", + "target": "readme_generator_readmecontext" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L88", + "weight": 1.0, + "source": "readme_test_generator_ctx", + "target": "readme_generator_corefields" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L100", + "weight": 1.0, + "source": "readme_test_generator_generator", + "target": "readme_generator_readmegenerator" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L154", + "weight": 1.0, + "source": "readme_test_generator_test_readme_fields_json_round_trips", + "target": "readme_generator_customfield" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L156", + "weight": 1.0, + "source": "readme_test_generator_test_readme_fields_json_round_trips", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L225", + "weight": 1.0, + "source": "readme_test_generator_test_required_template_field_missing_raises", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L234", + "weight": 1.0, + "source": "readme_test_generator_test_required_config_field_missing_raises", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L250", + "weight": 1.0, + "source": "readme_test_generator_test_duplicate_field_id_across_layers_raises", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L266", + "weight": 1.0, + "source": "readme_test_generator_test_custom_field_label_collides_with_template_id", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L267", + "weight": 1.0, + "source": "readme_test_generator_test_custom_field_label_collides_with_template_id", + "target": "readme_generator_customfield" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L284", + "weight": 1.0, + "source": "readme_test_generator_test_core_field_redeclared_in_template_raises", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L293", + "weight": 1.0, + "source": "readme_test_generator_test_core_field_redeclared_in_config_raises", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L339", + "weight": 1.0, + "source": "readme_test_generator_test_string_type_accepts_string_rejects_int", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L357", + "weight": 1.0, + "source": "readme_test_generator_test_text_type_accepts_multiline_rejects_list", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L373", + "weight": 1.0, + "source": "readme_test_generator_test_choice_type_accepts_listed_rejects_other", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L387", + "weight": 1.0, + "source": "readme_test_generator_test_choice_without_options_raises", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L399", + "weight": 1.0, + "source": "readme_test_generator_test_date_type_accepts_iso8601_rejects_garbage", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L420", + "weight": 1.0, + "source": "readme_test_generator_test_date_type_rejects_non_string", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L432", + "weight": 1.0, + "source": "readme_test_generator_test_boolean_type_accepts_bool_rejects_string", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L450", + "weight": 1.0, + "source": "readme_test_generator_test_unknown_field_type_raises", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L462", + "weight": 1.0, + "source": "readme_test_generator_test_choice_type_rejects_non_string_value", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L479", + "weight": 1.0, + "source": "readme_test_generator_rationale_479", + "target": "readme_test_generator_test_generate_is_idempotent_byte_identical", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L483", + "weight": 1.0, + "source": "readme_test_generator_test_generate_is_idempotent_byte_identical", + "target": "readme_generator_customfield" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L485", + "weight": 1.0, + "source": "readme_test_generator_test_generate_is_idempotent_byte_identical", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L532", + "weight": 1.0, + "source": "readme_test_generator_rationale_532", + "target": "readme_test_generator_test_value_without_declaration_skips_typecheck", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L535", + "weight": 1.0, + "source": "readme_test_generator_test_value_without_declaration_skips_typecheck", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L547", + "weight": 1.0, + "source": "readme_test_generator_rationale_547", + "target": "readme_test_generator_test_optional_empty_field_is_skipped", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L548", + "weight": 1.0, + "source": "readme_test_generator_test_optional_empty_field_is_skipped", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L559", + "weight": 1.0, + "source": "readme_test_generator_rationale_559", + "target": "readme_test_generator_test_required_field_present_with_none_raises", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L560", + "weight": 1.0, + "source": "readme_test_generator_test_required_field_present_with_none_raises", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L572", + "weight": 1.0, + "source": "readme_test_generator_rationale_572", + "target": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/readme/test_generator.py", + "source_location": "L573", + "weight": 1.0, + "source": "readme_test_generator_test_generated_at_uses_z_for_naive_datetime", + "target": "readme_generator_systemfields" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/readme/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "readme_init_rationale_1", + "target": "tests_unit_readme_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "readme_init_rationale_1", + "target": "src_exlab_wizard_readme_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_creation_apply_config.py", + "source_location": "L16", + "weight": 1.0, + "source": "tests_unit_controller_test_creation_apply_config_py", + "target": "controller_test_creation_apply_config_controller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_creation_apply_config.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_unit_controller_test_creation_apply_config_py", + "target": "controller_test_creation_apply_config_test_apply_config_swaps_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_creation_apply_config.py", + "source_location": "L39", + "weight": 1.0, + "source": "tests_unit_controller_test_creation_apply_config_py", + "target": "controller_test_creation_apply_config_test_apply_config_reinjects_plugin_host_only_when_given", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_creation_apply_config.py", + "source_location": "L1", + "weight": 1.0, + "source": "controller_test_creation_apply_config_rationale_1", + "target": "tests_unit_controller_test_creation_apply_config_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_creation_apply_config.py", + "source_location": "L31", + "weight": 1.0, + "source": "controller_test_creation_apply_config_test_apply_config_swaps_config", + "target": "controller_test_creation_apply_config_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_creation_apply_config.py", + "source_location": "L40", + "weight": 1.0, + "source": "controller_test_creation_apply_config_test_apply_config_reinjects_plugin_host_only_when_given", + "target": "controller_test_creation_apply_config_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_creation_apply_config.py", + "source_location": "L19", + "weight": 1.0, + "source": "controller_test_creation_apply_config_controller", + "target": "controller_creation_creationcontroller" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_state_to_phase_pending_returns_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_state_to_phase_validating_returns_validating_inputs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_state_to_phase_rendering_returns_rendering_template", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_state_to_phase_plugin_pass_returns_running_plugins", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_state_to_phase_input_required_returns_input_required", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L45", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_state_to_phase_cache_write_returns_writing_cache", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L49", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_state_to_phase_post_validate_returns_validating_post_creation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_state_to_phase_sync_queued_returns_queueing_nas_sync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L57", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_state_to_phase_done_returns_done", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L61", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_state_to_phase_failed_returns_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L65", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_state_to_phase_aborted_returns_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L69", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_state_to_phase_covers_every_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L82", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_pending_transitions_to_validating", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_validating_transitions_to_rendering", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L90", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_rendering_transitions_to_plugin_pass", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L94", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_plugin_pass_transitions_to_input_required_and_cache_write", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L100", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_input_required_transitions_back_to_plugin_pass", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L104", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_cache_write_transitions_to_post_validate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L108", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_post_validate_transitions_to_sync_queued", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L112", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_sync_queued_transitions_to_done", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L134", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_fail_allowed_from_every_non_terminal_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L151", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_aborted_allowed_from_every_non_terminal_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L160", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_done_is_terminal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L164", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_failed_is_terminal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L168", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_aborted_is_terminal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L177", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_assert_transition_allows_legal_forward_edge", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L183", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_assert_transition_allows_cancel_from_any_non_terminal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L188", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_assert_transition_rejects_skipping_a_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L193", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_assert_transition_rejects_terminal_to_anything", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L198", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_assert_transition_rejects_done_back_to_pipeline", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L203", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_assert_transition_rejects_backwards_through_pipeline", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L213", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_session_state_values_match_lowercase_names", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L218", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_phase_values_use_spec_strings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L229", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_valid_transitions_keys_cover_every_session_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L233", + "weight": 1.0, + "source": "tests_unit_controller_test_state_machine_py", + "target": "controller_test_state_machine_test_assert_transition_rejects_unknown_source_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L1", + "weight": 1.0, + "source": "controller_test_state_machine_rationale_1", + "target": "tests_unit_controller_test_state_machine_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L26", + "weight": 1.0, + "source": "controller_test_state_machine_test_state_to_phase_pending_returns_none", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L30", + "weight": 1.0, + "source": "controller_test_state_machine_test_state_to_phase_validating_returns_validating_inputs", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L34", + "weight": 1.0, + "source": "controller_test_state_machine_test_state_to_phase_rendering_returns_rendering_template", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L38", + "weight": 1.0, + "source": "controller_test_state_machine_test_state_to_phase_plugin_pass_returns_running_plugins", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L42", + "weight": 1.0, + "source": "controller_test_state_machine_test_state_to_phase_input_required_returns_input_required", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L46", + "weight": 1.0, + "source": "controller_test_state_machine_test_state_to_phase_cache_write_returns_writing_cache", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L50", + "weight": 1.0, + "source": "controller_test_state_machine_test_state_to_phase_post_validate_returns_validating_post_creation", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L54", + "weight": 1.0, + "source": "controller_test_state_machine_test_state_to_phase_sync_queued_returns_queueing_nas_sync", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L58", + "weight": 1.0, + "source": "controller_test_state_machine_test_state_to_phase_done_returns_done", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L62", + "weight": 1.0, + "source": "controller_test_state_machine_test_state_to_phase_failed_returns_none", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L66", + "weight": 1.0, + "source": "controller_test_state_machine_test_state_to_phase_aborted_returns_none", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L70", + "weight": 1.0, + "source": "controller_test_state_machine_rationale_70", + "target": "controller_test_state_machine_test_state_to_phase_covers_every_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L73", + "weight": 1.0, + "source": "controller_test_state_machine_test_state_to_phase_covers_every_state", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L179", + "weight": 1.0, + "source": "controller_test_state_machine_test_assert_transition_allows_legal_forward_edge", + "target": "controller_state_machine_assert_transition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L184", + "weight": 1.0, + "source": "controller_test_state_machine_test_assert_transition_allows_cancel_from_any_non_terminal", + "target": "controller_state_machine_assert_transition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L190", + "weight": 1.0, + "source": "controller_test_state_machine_test_assert_transition_rejects_skipping_a_state", + "target": "controller_state_machine_assert_transition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L195", + "weight": 1.0, + "source": "controller_test_state_machine_test_assert_transition_rejects_terminal_to_anything", + "target": "controller_state_machine_assert_transition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L200", + "weight": 1.0, + "source": "controller_test_state_machine_test_assert_transition_rejects_done_back_to_pipeline", + "target": "controller_state_machine_assert_transition" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L205", + "weight": 1.0, + "source": "controller_test_state_machine_test_assert_transition_rejects_backwards_through_pipeline", + "target": "controller_state_machine_assert_transition" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L234", + "weight": 1.0, + "source": "controller_test_state_machine_rationale_234", + "target": "controller_test_state_machine_test_assert_transition_rejects_unknown_source_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_state_machine.py", + "source_location": "L244", + "weight": 1.0, + "source": "controller_test_state_machine_test_assert_transition_rejects_unknown_source_state", + "target": "controller_state_machine_assert_transition" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "controller_init_rationale_1", + "target": "tests_unit_controller_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "controller_init_rationale_1", + "target": "tests_integration_controller_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "controller_init_rationale_1", + "target": "src_exlab_wizard_controller_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L36", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_open_returns_fresh_pending_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L46", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_open_assigns_uuid4_session_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L54", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_open_two_sessions_get_distinct_ids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L61", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_open_sets_created_at_and_last_heartbeat_to_now", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L75", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_get_returns_none_for_unknown_session_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L80", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_get_returns_session_after_open", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_iter_sorted_returns_pairs_oldest_created_first", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L98", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L120", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_project_identifier_prefers_short_id_then_falls_back_to_project_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L136", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_transition_updates_state_and_phase_together", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L144", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_transition_to_input_required_sets_next_action_awaiting_input", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L154", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_transition_back_to_plugin_pass_clears_next_action", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L169", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_transition_rejects_unknown_session_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L175", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_transition_rejects_illegal_state_transition", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L187", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_attach_event_queue_wires_queue_to_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L195", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_attach_event_queue_rejects_unknown_session_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L207", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_heartbeat_updates_last_heartbeat", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L217", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_heartbeat_is_noop_for_unknown_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L228", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L250", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_abandoned_older_than_skips_recent_input_required_sessions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L265", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_abandoned_older_than_returns_empty_when_no_sessions_exist", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L275", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_close_stores_outcome_for_done_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L294", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_close_stores_outcome_in_error_for_failed_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L304", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_close_is_noop_for_unknown_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L315", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L339", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_gc_loop_periodically_runs_and_can_be_cancelled", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L350", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L366", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_session_is_terminal_for_terminal_states", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L382", + "weight": 1.0, + "source": "tests_unit_controller_test_session_store_py", + "target": "controller_test_session_store_test_session_is_terminal_false_for_non_terminal_states", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L1", + "weight": 1.0, + "source": "controller_test_session_store_rationale_1", + "target": "tests_unit_controller_test_session_store_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L37", + "weight": 1.0, + "source": "controller_test_session_store_test_open_returns_fresh_pending_session", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L47", + "weight": 1.0, + "source": "controller_test_session_store_test_open_assigns_uuid4_session_id", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L55", + "weight": 1.0, + "source": "controller_test_session_store_test_open_two_sessions_get_distinct_ids", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L62", + "weight": 1.0, + "source": "controller_test_session_store_test_open_sets_created_at_and_last_heartbeat_to_now", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L76", + "weight": 1.0, + "source": "controller_test_session_store_test_get_returns_none_for_unknown_session_id", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L81", + "weight": 1.0, + "source": "controller_test_session_store_test_get_returns_session_after_open", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L88", + "weight": 1.0, + "source": "controller_test_session_store_test_iter_sorted_returns_pairs_oldest_created_first", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L99", + "weight": 1.0, + "source": "controller_test_session_store_rationale_99", + "target": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L105", + "weight": 1.0, + "source": "controller_test_session_store_test_gc_publishes_terminal_frame_to_live_subscriber", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L124", + "weight": 1.0, + "source": "controller_test_session_store_test_project_identifier_prefers_short_id_then_falls_back_to_project_name", + "target": "controller_session_store_project_identifier" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L137", + "weight": 1.0, + "source": "controller_test_session_store_test_transition_updates_state_and_phase_together", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L145", + "weight": 1.0, + "source": "controller_test_session_store_test_transition_to_input_required_sets_next_action_awaiting_input", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L155", + "weight": 1.0, + "source": "controller_test_session_store_test_transition_back_to_plugin_pass_clears_next_action", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L170", + "weight": 1.0, + "source": "controller_test_session_store_test_transition_rejects_unknown_session_id", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L176", + "weight": 1.0, + "source": "controller_test_session_store_test_transition_rejects_illegal_state_transition", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L188", + "weight": 1.0, + "source": "controller_test_session_store_test_attach_event_queue_wires_queue_to_session", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L196", + "weight": 1.0, + "source": "controller_test_session_store_test_attach_event_queue_rejects_unknown_session_id", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L208", + "weight": 1.0, + "source": "controller_test_session_store_test_heartbeat_updates_last_heartbeat", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L218", + "weight": 1.0, + "source": "controller_test_session_store_test_heartbeat_is_noop_for_unknown_session", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L229", + "weight": 1.0, + "source": "controller_test_session_store_test_abandoned_older_than_returns_only_input_required_sessions", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L251", + "weight": 1.0, + "source": "controller_test_session_store_test_abandoned_older_than_skips_recent_input_required_sessions", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L266", + "weight": 1.0, + "source": "controller_test_session_store_test_abandoned_older_than_returns_empty_when_no_sessions_exist", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L276", + "weight": 1.0, + "source": "controller_test_session_store_test_close_stores_outcome_for_done_session", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L295", + "weight": 1.0, + "source": "controller_test_session_store_test_close_stores_outcome_in_error_for_failed_session", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L305", + "weight": 1.0, + "source": "controller_test_session_store_test_close_is_noop_for_unknown_session", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L316", + "weight": 1.0, + "source": "controller_test_session_store_rationale_316", + "target": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L317", + "weight": 1.0, + "source": "controller_test_session_store_test_gc_loop_closes_abandoned_input_required_session", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L340", + "weight": 1.0, + "source": "controller_test_session_store_rationale_340", + "target": "controller_test_session_store_test_gc_loop_periodically_runs_and_can_be_cancelled", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L341", + "weight": 1.0, + "source": "controller_test_session_store_test_gc_loop_periodically_runs_and_can_be_cancelled", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L351", + "weight": 1.0, + "source": "controller_test_session_store_rationale_351", + "target": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L352", + "weight": 1.0, + "source": "controller_test_session_store_test_gc_loop_skips_non_input_required_sessions", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L367", + "weight": 1.0, + "source": "controller_test_session_store_test_session_is_terminal_for_terminal_states", + "target": "controller_session_store_session" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/controller/test_session_store.py", + "source_location": "L383", + "weight": 1.0, + "source": "controller_test_session_store_test_session_is_terminal_false_for_non_terminal_states", + "target": "controller_session_store_session" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L20", + "weight": 1.0, + "source": "tests_unit_window_test_pywebview_app_py", + "target": "window_test_pywebview_app_hs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L24", + "weight": 1.0, + "source": "tests_unit_window_test_pywebview_app_py", + "target": "window_test_pywebview_app_test_build_window_url_uses_loopback", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L28", + "weight": 1.0, + "source": "tests_unit_window_test_pywebview_app_py", + "target": "window_test_pywebview_app_test_is_debug_enabled_default", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L34", + "weight": 1.0, + "source": "tests_unit_window_test_pywebview_app_py", + "target": "window_test_pywebview_app_test_is_debug_enabled_truthy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L40", + "weight": 1.0, + "source": "tests_unit_window_test_pywebview_app_py", + "target": "window_test_pywebview_app_test_is_debug_enabled_falsy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L45", + "weight": 1.0, + "source": "tests_unit_window_test_pywebview_app_py", + "target": "window_test_pywebview_app_test_run_window_calls_create_and_start", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L64", + "weight": 1.0, + "source": "tests_unit_window_test_pywebview_app_py", + "target": "window_test_pywebview_app_test_run_window_passes_debug_when_env_var_set", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L77", + "weight": 1.0, + "source": "tests_unit_window_test_pywebview_app_py", + "target": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L97", + "weight": 1.0, + "source": "tests_unit_window_test_pywebview_app_py", + "target": "window_test_pywebview_app_test_window_title_constant", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L101", + "weight": 1.0, + "source": "tests_unit_window_test_pywebview_app_py", + "target": "window_test_pywebview_app_test_import_webview_returns_module", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L1", + "weight": 1.0, + "source": "window_test_pywebview_app_rationale_1", + "target": "tests_unit_window_test_pywebview_app_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L25", + "weight": 1.0, + "source": "window_test_pywebview_app_test_build_window_url_uses_loopback", + "target": "window_test_pywebview_app_hs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L55", + "weight": 1.0, + "source": "window_test_pywebview_app_test_run_window_calls_create_and_start", + "target": "window_test_pywebview_app_hs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L73", + "weight": 1.0, + "source": "window_test_pywebview_app_test_run_window_passes_debug_when_env_var_set", + "target": "window_test_pywebview_app_hs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L91", + "weight": 1.0, + "source": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", + "target": "window_test_pywebview_app_hs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L21", + "weight": 1.0, + "source": "window_test_pywebview_app_hs", + "target": "window_main_serverhandshake" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L25", + "weight": 1.0, + "source": "window_test_pywebview_app_test_build_window_url_uses_loopback", + "target": "window_pywebview_app_build_window_url" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L30", + "weight": 1.0, + "source": "window_test_pywebview_app_test_is_debug_enabled_default", + "target": "window_pywebview_app_is_debug_enabled" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L36", + "weight": 1.0, + "source": "window_test_pywebview_app_test_is_debug_enabled_truthy", + "target": "window_pywebview_app_is_debug_enabled" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L42", + "weight": 1.0, + "source": "window_test_pywebview_app_test_is_debug_enabled_falsy", + "target": "window_pywebview_app_is_debug_enabled" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L55", + "weight": 1.0, + "source": "window_test_pywebview_app_test_run_window_calls_create_and_start", + "target": "window_pywebview_app_run_window" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L73", + "weight": 1.0, + "source": "window_test_pywebview_app_test_run_window_passes_debug_when_env_var_set", + "target": "window_pywebview_app_run_window" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L80", + "weight": 1.0, + "source": "window_test_pywebview_app_rationale_80", + "target": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L91", + "weight": 1.0, + "source": "window_test_pywebview_app_test_run_window_with_only_create_window_uses_default_start", + "target": "window_pywebview_app_run_window" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L102", + "weight": 1.0, + "source": "window_test_pywebview_app_rationale_102", + "target": "window_test_pywebview_app_test_import_webview_returns_module", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_pywebview_app.py", + "source_location": "L109", + "weight": 1.0, + "source": "window_test_pywebview_app_test_import_webview_returns_module", + "target": "window_pywebview_app_import_webview" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "window_init_rationale_1", + "target": "tests_unit_window_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "window_init_rationale_1", + "target": "src_exlab_wizard_window_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L24", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_write_server_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L36", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_read_server_handshake_returns_none_when_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L40", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_read_server_handshake_returns_handshake", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_read_server_handshake_returns_none_on_invalid_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_read_server_handshake_returns_none_on_missing_keys", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L58", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_main_returns_stale_when_no_state_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L67", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_main_returns_stale_on_dead_pid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L75", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_main_hands_off_with_live_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L89", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_is_pid_alive_for_self", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_is_pid_alive_rejects_zero", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L98", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_is_pid_alive_for_dead_pid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L103", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_is_pid_alive_falls_through_to_default", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L117", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_default_state_dir_is_used", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L123", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_default_handoff_invokes_run_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L139", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_argv_is_ignored", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L145", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_server_handshake_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L152", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_posix_is_pid_alive_handles_permission", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L163", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_posix_is_pid_alive_handles_dead_pid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L173", + "weight": 1.0, + "source": "tests_unit_window_test_main_py", + "target": "window_test_main_test_is_pid_alive_dispatches_to_windows", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L1", + "weight": 1.0, + "source": "window_test_main_rationale_1", + "target": "tests_unit_window_test_main_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L41", + "weight": 1.0, + "source": "window_test_main_test_read_server_handshake_returns_handshake", + "target": "window_test_main_write_server_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L68", + "weight": 1.0, + "source": "window_test_main_test_main_returns_stale_on_dead_pid", + "target": "window_test_main_write_server_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L76", + "weight": 1.0, + "source": "window_test_main_test_main_hands_off_with_live_state", + "target": "window_test_main_write_server_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L105", + "weight": 1.0, + "source": "window_test_main_test_is_pid_alive_falls_through_to_default", + "target": "window_test_main_write_server_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L126", + "weight": 1.0, + "source": "window_test_main_test_default_handoff_invokes_run_window", + "target": "window_test_main_write_server_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L140", + "weight": 1.0, + "source": "window_test_main_test_argv_is_ignored", + "target": "window_test_main_write_server_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_main.py", + "source_location": "L37", + "weight": 1.0, + "source": "window_test_main_test_read_server_handshake_returns_none_when_missing", + "target": "window_main_read_server_handshake" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_main.py", + "source_location": "L42", + "weight": 1.0, + "source": "window_test_main_test_read_server_handshake_returns_handshake", + "target": "window_main_read_server_handshake" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_main.py", + "source_location": "L50", + "weight": 1.0, + "source": "window_test_main_test_read_server_handshake_returns_none_on_invalid_json", + "target": "window_main_read_server_handshake" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_main.py", + "source_location": "L55", + "weight": 1.0, + "source": "window_test_main_test_read_server_handshake_returns_none_on_missing_keys", + "target": "window_main_read_server_handshake" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_main.py", + "source_location": "L90", + "weight": 1.0, + "source": "window_test_main_test_is_pid_alive_for_self", + "target": "window_main_is_pid_alive" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_main.py", + "source_location": "L94", + "weight": 1.0, + "source": "window_test_main_test_is_pid_alive_rejects_zero", + "target": "window_main_is_pid_alive" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_main.py", + "source_location": "L100", + "weight": 1.0, + "source": "window_test_main_test_is_pid_alive_for_dead_pid", + "target": "window_main_is_pid_alive" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L104", + "weight": 1.0, + "source": "window_test_main_rationale_104", + "target": "window_test_main_test_is_pid_alive_falls_through_to_default", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_main.py", + "source_location": "L146", + "weight": 1.0, + "source": "window_test_main_test_server_handshake_round_trip", + "target": "window_main_serverhandshake" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L153", + "weight": 1.0, + "source": "window_test_main_rationale_153", + "target": "window_test_main_test_posix_is_pid_alive_handles_permission", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_main.py", + "source_location": "L160", + "weight": 1.0, + "source": "window_test_main_test_posix_is_pid_alive_handles_permission", + "target": "window_main_posix_is_pid_alive" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_main.py", + "source_location": "L170", + "weight": 1.0, + "source": "window_test_main_test_posix_is_pid_alive_handles_dead_pid", + "target": "window_main_posix_is_pid_alive" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/window/test_main.py", + "source_location": "L174", + "weight": 1.0, + "source": "window_test_main_rationale_174", + "target": "window_test_main_test_is_pid_alive_dispatches_to_windows", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/window/test_main.py", + "source_location": "L179", + "weight": 1.0, + "source": "window_test_main_test_is_pid_alive_dispatches_to_windows", + "target": "window_main_is_pid_alive" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L28", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L56", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_ready_config_without_lims", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L81", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_compute_setup_state_returns_ready_for_complete_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L88", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_compute_setup_state_no_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_is_creation_blocked_treats_lims_unreachable_as_soft", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L103", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_compute_setup_state_returns_incomplete_no_nas_credential", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L109", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_get_setup_status_lists_missing_nas_credential_per_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L121", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L181", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L199", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_setup_state_gate_no_op_without_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L212", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_get_setup_status_ready", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L226", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_get_setup_status_incomplete_paths", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L239", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_post_test_lims_invokes_probe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L251", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L266", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_post_test_lims_without_probe_reports_not_wired", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L274", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_post_test_equipment_requires_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L288", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_post_test_equipment_with_explicit_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L306", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_post_test_equipment_unknown_id_returns_404", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L319", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_post_autostart_calls_toggle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L339", + "weight": 1.0, + "source": "tests_unit_api_test_setup_py", + "target": "api_test_setup_test_post_autostart_without_toggle_echoes_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_test_setup_rationale_1", + "target": "tests_unit_api_test_setup_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L83", + "weight": 1.0, + "source": "api_test_setup_test_compute_setup_state_returns_ready_for_complete_config", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L105", + "weight": 1.0, + "source": "api_test_setup_test_compute_setup_state_returns_incomplete_no_nas_credential", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L110", + "weight": 1.0, + "source": "api_test_setup_test_get_setup_status_lists_missing_nas_credential_per_equipment", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L128", + "weight": 1.0, + "source": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L182", + "weight": 1.0, + "source": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L214", + "weight": 1.0, + "source": "api_test_setup_test_get_setup_status_ready", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L243", + "weight": 1.0, + "source": "api_test_setup_test_post_test_lims_invokes_probe", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L256", + "weight": 1.0, + "source": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L267", + "weight": 1.0, + "source": "api_test_setup_test_post_test_lims_without_probe_reports_not_wired", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L276", + "weight": 1.0, + "source": "api_test_setup_test_post_test_equipment_requires_equipment_id", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L296", + "weight": 1.0, + "source": "api_test_setup_test_post_test_equipment_with_explicit_equipment_id", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L308", + "weight": 1.0, + "source": "api_test_setup_test_post_test_equipment_unknown_id_returns_404", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L327", + "weight": 1.0, + "source": "api_test_setup_test_post_autostart_calls_toggle", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L340", + "weight": 1.0, + "source": "api_test_setup_test_post_autostart_without_toggle_echoes_state", + "target": "api_test_setup_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L32", + "weight": 1.0, + "source": "api_test_setup_ready_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L38", + "weight": 1.0, + "source": "api_test_setup_ready_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L43", + "weight": 1.0, + "source": "api_test_setup_ready_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L51", + "weight": 1.0, + "source": "api_test_setup_ready_config", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L52", + "weight": 1.0, + "source": "api_test_setup_ready_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L152", + "weight": 1.0, + "source": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", + "target": "api_test_setup_ready_config_without_lims", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L57", + "weight": 1.0, + "source": "api_test_setup_rationale_57", + "target": "api_test_setup_ready_config_without_lims", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L61", + "weight": 1.0, + "source": "api_test_setup_ready_config_without_lims", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L63", + "weight": 1.0, + "source": "api_test_setup_ready_config_without_lims", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L68", + "weight": 1.0, + "source": "api_test_setup_ready_config_without_lims", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L76", + "weight": 1.0, + "source": "api_test_setup_ready_config_without_lims", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L77", + "weight": 1.0, + "source": "api_test_setup_ready_config_without_lims", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L82", + "weight": 1.0, + "source": "api_test_setup_test_compute_setup_state_returns_ready_for_complete_config", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L85", + "weight": 1.0, + "source": "api_test_setup_test_compute_setup_state_returns_ready_for_complete_config", + "target": "api_setup_compute_setup_state" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L89", + "weight": 1.0, + "source": "api_test_setup_test_compute_setup_state_no_config", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L90", + "weight": 1.0, + "source": "api_test_setup_test_compute_setup_state_no_config", + "target": "api_setup_compute_setup_state" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L94", + "weight": 1.0, + "source": "api_test_setup_test_is_creation_blocked_treats_lims_unreachable_as_soft", + "target": "api_setup_is_creation_blocked" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L104", + "weight": 1.0, + "source": "api_test_setup_rationale_104", + "target": "api_test_setup_test_compute_setup_state_returns_incomplete_no_nas_credential", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L105", + "weight": 1.0, + "source": "api_test_setup_test_compute_setup_state_returns_incomplete_no_nas_credential", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L106", + "weight": 1.0, + "source": "api_test_setup_test_compute_setup_state_returns_incomplete_no_nas_credential", + "target": "api_setup_compute_setup_state" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L110", + "weight": 1.0, + "source": "api_test_setup_test_get_setup_status_lists_missing_nas_credential_per_equipment", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L111", + "weight": 1.0, + "source": "api_test_setup_test_get_setup_status_lists_missing_nas_credential_per_equipment", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L122", + "weight": 1.0, + "source": "api_test_setup_rationale_122", + "target": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L135", + "weight": 1.0, + "source": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L142", + "weight": 1.0, + "source": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L158", + "weight": 1.0, + "source": "api_test_setup_test_setup_state_gate_returns_503_in_incomplete_states", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L183", + "weight": 1.0, + "source": "api_test_setup_test_setup_state_gate_lims_unreachable_does_not_block", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L213", + "weight": 1.0, + "source": "api_test_setup_test_get_setup_status_ready", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L216", + "weight": 1.0, + "source": "api_test_setup_test_get_setup_status_ready", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L227", + "weight": 1.0, + "source": "api_test_setup_test_get_setup_status_incomplete_paths", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L228", + "weight": 1.0, + "source": "api_test_setup_test_get_setup_status_incomplete_paths", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L243", + "weight": 1.0, + "source": "api_test_setup_test_post_test_lims_invokes_probe", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L244", + "weight": 1.0, + "source": "api_test_setup_test_post_test_lims_invokes_probe", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L255", + "weight": 1.0, + "source": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L258", + "weight": 1.0, + "source": "api_test_setup_test_post_test_lims_probe_raises_returns_reason", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L267", + "weight": 1.0, + "source": "api_test_setup_test_post_test_lims_without_probe_reports_not_wired", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L268", + "weight": 1.0, + "source": "api_test_setup_test_post_test_lims_without_probe_reports_not_wired", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L275", + "weight": 1.0, + "source": "api_test_setup_test_post_test_equipment_requires_equipment_id", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L280", + "weight": 1.0, + "source": "api_test_setup_test_post_test_equipment_requires_equipment_id", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L295", + "weight": 1.0, + "source": "api_test_setup_test_post_test_equipment_with_explicit_equipment_id", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L298", + "weight": 1.0, + "source": "api_test_setup_test_post_test_equipment_with_explicit_equipment_id", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L307", + "weight": 1.0, + "source": "api_test_setup_test_post_test_equipment_unknown_id_returns_404", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L312", + "weight": 1.0, + "source": "api_test_setup_test_post_test_equipment_unknown_id_returns_404", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L326", + "weight": 1.0, + "source": "api_test_setup_test_post_autostart_calls_toggle", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L329", + "weight": 1.0, + "source": "api_test_setup_test_post_autostart_calls_toggle", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L340", + "weight": 1.0, + "source": "api_test_setup_test_post_autostart_without_toggle_echoes_state", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_setup.py", + "source_location": "L341", + "weight": 1.0, + "source": "api_test_setup_test_post_autostart_without_toggle_echoes_state", + "target": "api_app_create_app" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_bare_request", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L45", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_build_envelope_includes_required_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L64", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_build_envelope_drops_optional_fields_when_absent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L70", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_unknown_code_falls_back_to_internal_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L75", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_extract_trace_id_uses_header_when_present", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_extract_trace_id_generates_when_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_error_response_sets_trace_id_header", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L105", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_required_codes_are_registered", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L129", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_register_exception_handlers_catches_exlab_validation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L147", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_pydanticbody", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L154", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_register_exception_handlers_catches_pydantic_validation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L170", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_register_exception_handlers_catches_keyring_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L184", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_register_exception_handlers_catches_schema_major_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L199", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_register_exception_handlers_catches_setup_incomplete", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L217", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_register_exception_handlers_catches_config_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L231", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_register_exception_handlers_catches_template_load_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L245", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_register_exception_handlers_catches_template_core_field_redeclared", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L259", + "weight": 1.0, + "source": "tests_unit_api_test_errors_py", + "target": "api_test_errors_test_generic_handler_returns_internal_error", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_test_errors_rationale_1", + "target": "tests_unit_api_test_errors_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L88", + "weight": 1.0, + "source": "api_test_errors_test_extract_trace_id_generates_when_missing", + "target": "api_test_errors_bare_request", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L34", + "weight": 1.0, + "source": "api_test_errors_rationale_34", + "target": "api_test_errors_bare_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L46", + "weight": 1.0, + "source": "api_test_errors_test_build_envelope_includes_required_fields", + "target": "api_errors_build_error_envelope" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L65", + "weight": 1.0, + "source": "api_test_errors_test_build_envelope_drops_optional_fields_when_absent", + "target": "api_errors_build_error_envelope" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L71", + "weight": 1.0, + "source": "api_test_errors_test_unknown_code_falls_back_to_internal_error", + "target": "api_errors_build_error_envelope" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L84", + "weight": 1.0, + "source": "api_test_errors_test_extract_trace_id_uses_header_when_present", + "target": "api_errors_extract_or_create_trace_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L89", + "weight": 1.0, + "source": "api_test_errors_test_extract_trace_id_generates_when_missing", + "target": "api_errors_extract_or_create_trace_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L94", + "weight": 1.0, + "source": "api_test_errors_test_error_response_sets_trace_id_header", + "target": "api_errors_error_response" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L106", + "weight": 1.0, + "source": "api_test_errors_rationale_106", + "target": "api_test_errors_test_required_codes_are_registered", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L131", + "weight": 1.0, + "source": "api_test_errors_test_register_exception_handlers_catches_exlab_validation", + "target": "api_errors_register_exception_handlers" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L147", + "weight": 1.0, + "source": "api_test_errors_pydanticbody", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L148", + "weight": 1.0, + "source": "api_test_errors_rationale_148", + "target": "api_test_errors_pydanticbody", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L20", + "weight": 0.8, + "source": "api_test_errors_pydanticbody", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L20", + "weight": 0.8, + "source": "api_test_errors_pydanticbody", + "target": "exlab_wizard_errors_keyringunavailableerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L20", + "weight": 0.8, + "source": "api_test_errors_pydanticbody", + "target": "exlab_wizard_errors_schemamajormismatcherror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L20", + "weight": 0.8, + "source": "api_test_errors_pydanticbody", + "target": "exlab_wizard_errors_setupincompleteerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L20", + "weight": 0.8, + "source": "api_test_errors_pydanticbody", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L20", + "weight": 0.8, + "source": "api_test_errors_pydanticbody", + "target": "exlab_wizard_errors_templateloaderror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L28", + "weight": 0.8, + "source": "api_test_errors_pydanticbody", + "target": "exlab_wizard_errors_validationerror", + "confidence_score": 0.5 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L97", + "weight": 1.0, + "source": "config_models_pathsconfig", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L112", + "weight": 1.0, + "source": "config_models_limsconfig", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L128", + "weight": 1.0, + "source": "config_models_readmedefaultfield", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L169", + "weight": 1.0, + "source": "config_models_readmeconfig", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L182", + "weight": 1.0, + "source": "config_models_bandwidthwindow", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L205", + "weight": 1.0, + "source": "config_models_bandwidthconfig", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L227", + "weight": 1.0, + "source": "config_models_rclonesftptransport", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L247", + "weight": 1.0, + "source": "config_models_rclonesmbtransport", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L288", + "weight": 1.0, + "source": "config_models_orchestratorstagingtransport", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L307", + "weight": 1.0, + "source": "config_models_equipmentconfig", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L375", + "weight": 1.0, + "source": "config_models_nascleanupconfig", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L391", + "weight": 1.0, + "source": "config_models_loggingconfig", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L422", + "weight": 1.0, + "source": "config_models_operatorsconfig", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L454", + "weight": 1.0, + "source": "config_models_validatorconfig", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L479", + "weight": 1.0, + "source": "config_models_pluginsconfig", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L496", + "weight": 1.0, + "source": "config_models_syncconfig", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L513", + "weight": 1.0, + "source": "config_models_orchestratorstagingcleanup", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L529", + "weight": 1.0, + "source": "config_models_orchestratorconfig", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L554", + "weight": 1.0, + "source": "config_models_config", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L35", + "weight": 1.0, + "source": "api_health_healthresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L72", + "weight": 1.0, + "source": "api_setup_setupstatusresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L83", + "weight": 1.0, + "source": "api_setup_limstestrequest", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L99", + "weight": 1.0, + "source": "api_setup_equipmenttestrequest", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L115", + "weight": 1.0, + "source": "api_setup_proberesult", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L133", + "weight": 1.0, + "source": "api_setup_autostartrequest", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L141", + "weight": 1.0, + "source": "api_setup_autostartresult", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L67", + "weight": 1.0, + "source": "routers_browse_runnode", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L77", + "weight": 1.0, + "source": "routers_browse_projectnode", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L91", + "weight": 1.0, + "source": "routers_browse_equipmentnode", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L109", + "weight": 1.0, + "source": "routers_browse_relayequipmentnode", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L125", + "weight": 1.0, + "source": "routers_browse_treeresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L132", + "weight": 1.0, + "source": "routers_browse_folderentry", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L156", + "weight": 1.0, + "source": "routers_browse_folderresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L165", + "weight": 1.0, + "source": "routers_browse_rundetail", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L180", + "weight": 1.0, + "source": "routers_browse_runlogentry", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L199", + "weight": 1.0, + "source": "routers_browse_runlogresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L63", + "weight": 1.0, + "source": "routers_sessions_projectsessionbody", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L83", + "weight": 1.0, + "source": "routers_sessions_runsessionbody", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L105", + "weight": 1.0, + "source": "routers_sessions_sessionhandleresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L119", + "weight": 1.0, + "source": "routers_sessions_resumebody", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L127", + "weight": 1.0, + "source": "routers_sessions_cancelbody", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L46", + "weight": 1.0, + "source": "routers_config_configupdateresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L57", + "weight": 1.0, + "source": "routers_config_equipmentappendresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L36", + "weight": 1.0, + "source": "routers_operations_operationentry", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L51", + "weight": 1.0, + "source": "routers_operations_operationsresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L67", + "weight": 1.0, + "source": "routers_problems_findingresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L83", + "weight": 1.0, + "source": "routers_problems_problemsresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L92", + "weight": 1.0, + "source": "routers_problems_overriderequest", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L103", + "weight": 1.0, + "source": "routers_problems_overrideresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L117", + "weight": 1.0, + "source": "routers_problems_revokerequest", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L127", + "weight": 1.0, + "source": "routers_problems_tombstoneresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L138", + "weight": 1.0, + "source": "routers_problems_refreshresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L59", + "weight": 1.0, + "source": "routers_staging_stagedrunrow", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L75", + "weight": 1.0, + "source": "routers_staging_staginglistresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L83", + "weight": 1.0, + "source": "routers_staging_forcesyncresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L93", + "weight": 1.0, + "source": "routers_staging_clearresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L103", + "weight": 1.0, + "source": "routers_staging_clearverifiedresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L111", + "weight": 1.0, + "source": "routers_staging_keeplocalrequest", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L126", + "weight": 1.0, + "source": "routers_staging_keeplocalresponse", + "target": "basemodel", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L156", + "weight": 1.0, + "source": "api_test_errors_test_register_exception_handlers_catches_pydantic_validation", + "target": "api_errors_register_exception_handlers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L172", + "weight": 1.0, + "source": "api_test_errors_test_register_exception_handlers_catches_keyring_error", + "target": "api_errors_register_exception_handlers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L186", + "weight": 1.0, + "source": "api_test_errors_test_register_exception_handlers_catches_schema_major_mismatch", + "target": "api_errors_register_exception_handlers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L201", + "weight": 1.0, + "source": "api_test_errors_test_register_exception_handlers_catches_setup_incomplete", + "target": "api_errors_register_exception_handlers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L219", + "weight": 1.0, + "source": "api_test_errors_test_register_exception_handlers_catches_config_error", + "target": "api_errors_register_exception_handlers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L233", + "weight": 1.0, + "source": "api_test_errors_test_register_exception_handlers_catches_template_load_error", + "target": "api_errors_register_exception_handlers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L247", + "weight": 1.0, + "source": "api_test_errors_test_register_exception_handlers_catches_template_core_field_redeclared", + "target": "api_errors_register_exception_handlers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_errors.py", + "source_location": "L261", + "weight": 1.0, + "source": "api_test_errors_test_generic_handler_returns_internal_error", + "target": "api_errors_register_exception_handlers" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L19", + "weight": 1.0, + "source": "tests_unit_api_test_config_router_py", + "target": "api_test_config_router_empty_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_unit_api_test_config_router_py", + "target": "api_test_config_router_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L44", + "weight": 1.0, + "source": "tests_unit_api_test_config_router_py", + "target": "api_test_config_router_test_get_config_returns_loaded_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L55", + "weight": 1.0, + "source": "tests_unit_api_test_config_router_py", + "target": "api_test_config_router_test_get_config_returns_default_when_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L65", + "weight": 1.0, + "source": "tests_unit_api_test_config_router_py", + "target": "api_test_config_router_test_put_config_persists_and_reevaluates_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L91", + "weight": 1.0, + "source": "tests_unit_api_test_config_router_py", + "target": "api_test_config_router_test_put_config_invalid_body_returns_422", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L107", + "weight": 1.0, + "source": "tests_unit_api_test_config_router_py", + "target": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L138", + "weight": 1.0, + "source": "tests_unit_api_test_config_router_py", + "target": "api_test_config_router_test_append_equipment_rejects_duplicate_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_test_config_router_rationale_1", + "target": "tests_unit_api_test_config_router_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L74", + "weight": 1.0, + "source": "api_test_config_router_test_put_config_persists_and_reevaluates_state", + "target": "api_test_config_router_empty_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L92", + "weight": 1.0, + "source": "api_test_config_router_test_put_config_invalid_body_returns_422", + "target": "api_test_config_router_empty_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L113", + "weight": 1.0, + "source": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", + "target": "api_test_config_router_empty_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L45", + "weight": 1.0, + "source": "api_test_config_router_test_get_config_returns_loaded_config", + "target": "api_test_config_router_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L77", + "weight": 1.0, + "source": "api_test_config_router_test_put_config_persists_and_reevaluates_state", + "target": "api_test_config_router_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L139", + "weight": 1.0, + "source": "api_test_config_router_test_append_equipment_rejects_duplicate_id", + "target": "api_test_config_router_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L25", + "weight": 1.0, + "source": "api_test_config_router_ready_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L27", + "weight": 1.0, + "source": "api_test_config_router_ready_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L32", + "weight": 1.0, + "source": "api_test_config_router_ready_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L40", + "weight": 1.0, + "source": "api_test_config_router_ready_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L46", + "weight": 1.0, + "source": "api_test_config_router_test_get_config_returns_loaded_config", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L47", + "weight": 1.0, + "source": "api_test_config_router_test_get_config_returns_loaded_config", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L56", + "weight": 1.0, + "source": "api_test_config_router_test_get_config_returns_default_when_none", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L57", + "weight": 1.0, + "source": "api_test_config_router_test_get_config_returns_default_when_none", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L74", + "weight": 1.0, + "source": "api_test_config_router_test_put_config_persists_and_reevaluates_state", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L75", + "weight": 1.0, + "source": "api_test_config_router_test_put_config_persists_and_reevaluates_state", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L92", + "weight": 1.0, + "source": "api_test_config_router_test_put_config_invalid_body_returns_422", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L93", + "weight": 1.0, + "source": "api_test_config_router_test_put_config_invalid_body_returns_422", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L113", + "weight": 1.0, + "source": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L114", + "weight": 1.0, + "source": "api_test_config_router_test_append_equipment_persists_and_re_evaluates_state", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L139", + "weight": 1.0, + "source": "api_test_config_router_test_append_equipment_rejects_duplicate_id", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_config_router.py", + "source_location": "L140", + "weight": 1.0, + "source": "api_test_config_router_test_append_equipment_rejects_duplicate_id", + "target": "api_app_create_app" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_unit_api_test_operations_py", + "target": "api_test_operations_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L45", + "weight": 1.0, + "source": "tests_unit_api_test_operations_py", + "target": "api_test_operations_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L50", + "weight": 1.0, + "source": "tests_unit_api_test_operations_py", + "target": "api_test_operations_make_project_request", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L67", + "weight": 1.0, + "source": "tests_unit_api_test_operations_py", + "target": "api_test_operations_test_get_operations_lists_in_flight_sessions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_unit_api_test_operations_py", + "target": "api_test_operations_test_get_operations_excludes_done_and_aborted", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L108", + "weight": 1.0, + "source": "tests_unit_api_test_operations_py", + "target": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L127", + "weight": 1.0, + "source": "tests_unit_api_test_operations_py", + "target": "api_test_operations_test_get_operations_503_when_controller_missing", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_test_operations_rationale_1", + "target": "tests_unit_api_test_operations_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L74", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_lists_in_flight_sessions", + "target": "api_test_operations_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L100", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_excludes_done_and_aborted", + "target": "api_test_operations_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L117", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", + "target": "api_test_operations_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L128", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_503_when_controller_missing", + "target": "api_test_operations_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L25", + "weight": 1.0, + "source": "api_test_operations_ready_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L27", + "weight": 1.0, + "source": "api_test_operations_ready_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L32", + "weight": 1.0, + "source": "api_test_operations_ready_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L40", + "weight": 1.0, + "source": "api_test_operations_ready_config", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L41", + "weight": 1.0, + "source": "api_test_operations_ready_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L46", + "weight": 1.0, + "source": "api_test_operations_stubcontroller", + "target": "api_test_operations_stubcontroller_init", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L68", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_lists_in_flight_sessions", + "target": "api_test_operations_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L87", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_excludes_done_and_aborted", + "target": "api_test_operations_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L109", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", + "target": "api_test_operations_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L10", + "weight": 0.8, + "source": "api_test_operations_stubcontroller", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L10", + "weight": 0.8, + "source": "api_test_operations_stubcontroller", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L10", + "weight": 0.8, + "source": "api_test_operations_stubcontroller", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L10", + "weight": 0.8, + "source": "api_test_operations_stubcontroller", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L10", + "weight": 0.8, + "source": "api_test_operations_stubcontroller", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L10", + "weight": 0.8, + "source": "api_test_operations_stubcontroller", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_operations_stubcontroller", + "target": "controller_creation_projectcreaterequest", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L19", + "weight": 0.8, + "source": "api_test_operations_stubcontroller", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L20", + "weight": 0.8, + "source": "api_test_operations_stubcontroller", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L47", + "weight": 1.0, + "source": "api_test_operations_stubcontroller_init", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L69", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_lists_in_flight_sessions", + "target": "api_test_operations_make_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L88", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_excludes_done_and_aborted", + "target": "api_test_operations_make_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L110", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", + "target": "api_test_operations_make_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L51", + "weight": 1.0, + "source": "api_test_operations_make_project_request", + "target": "controller_creation_projectcreaterequest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L73", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_lists_in_flight_sessions", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L76", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_lists_in_flight_sessions", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L99", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_excludes_done_and_aborted", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L102", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_excludes_done_and_aborted", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L116", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L119", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_emits_plugin_name_when_input_required", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L128", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_503_when_controller_missing", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_operations.py", + "source_location": "L129", + "weight": 1.0, + "source": "api_test_operations_test_get_operations_503_when_controller_missing", + "target": "api_app_create_app" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L121", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_test_create_session_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L152", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_test_create_session_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L178", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_test_get_session_returns_snapshot", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L205", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_test_get_session_404_for_unknown", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L218", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_test_post_resume_invokes_controller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L239", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_test_post_cancel_invokes_controller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L256", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_test_post_cancel_404_for_unknown", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L267", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_test_post_resume_409_for_terminal_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L284", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_test_websocket_streams_session_events", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L307", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_test_websocket_unknown_session_closes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L321", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_make_request", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L338", + "weight": 1.0, + "source": "tests_unit_api_test_sessions_py", + "target": "api_test_sessions_test_create_session_validation_error_returns_422", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_test_sessions_rationale_1", + "target": "tests_unit_api_test_sessions_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L124", + "weight": 1.0, + "source": "api_test_sessions_test_create_session_project", + "target": "api_test_sessions_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L155", + "weight": 1.0, + "source": "api_test_sessions_test_create_session_run", + "target": "api_test_sessions_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L181", + "weight": 1.0, + "source": "api_test_sessions_test_get_session_returns_snapshot", + "target": "api_test_sessions_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L208", + "weight": 1.0, + "source": "api_test_sessions_test_get_session_404_for_unknown", + "target": "api_test_sessions_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L221", + "weight": 1.0, + "source": "api_test_sessions_test_post_resume_invokes_controller", + "target": "api_test_sessions_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L242", + "weight": 1.0, + "source": "api_test_sessions_test_post_cancel_invokes_controller", + "target": "api_test_sessions_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L259", + "weight": 1.0, + "source": "api_test_sessions_test_post_cancel_404_for_unknown", + "target": "api_test_sessions_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L270", + "weight": 1.0, + "source": "api_test_sessions_test_post_resume_409_for_terminal_session", + "target": "api_test_sessions_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L289", + "weight": 1.0, + "source": "api_test_sessions_test_websocket_streams_session_events", + "target": "api_test_sessions_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L310", + "weight": 1.0, + "source": "api_test_sessions_test_websocket_unknown_session_closes", + "target": "api_test_sessions_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L342", + "weight": 1.0, + "source": "api_test_sessions_test_create_session_validation_error_returns_422", + "target": "api_test_sessions_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L33", + "weight": 1.0, + "source": "api_test_sessions_ready_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L35", + "weight": 1.0, + "source": "api_test_sessions_ready_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L40", + "weight": 1.0, + "source": "api_test_sessions_ready_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L48", + "weight": 1.0, + "source": "api_test_sessions_ready_config", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L49", + "weight": 1.0, + "source": "api_test_sessions_ready_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L56", + "weight": 1.0, + "source": "api_test_sessions_stubcontroller", + "target": "api_test_sessions_stubcontroller_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L62", + "weight": 1.0, + "source": "api_test_sessions_stubcontroller", + "target": "api_test_sessions_stubcontroller_create_project", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L74", + "weight": 1.0, + "source": "api_test_sessions_stubcontroller", + "target": "api_test_sessions_stubcontroller_create_run", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L86", + "weight": 1.0, + "source": "api_test_sessions_stubcontroller", + "target": "api_test_sessions_stubcontroller_status", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L97", + "weight": 1.0, + "source": "api_test_sessions_stubcontroller", + "target": "api_test_sessions_stubcontroller_resume", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L101", + "weight": 1.0, + "source": "api_test_sessions_stubcontroller", + "target": "api_test_sessions_stubcontroller_cancel", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L108", + "weight": 1.0, + "source": "api_test_sessions_stubcontroller", + "target": "api_test_sessions_stubcontroller_subscribe", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L122", + "weight": 1.0, + "source": "api_test_sessions_test_create_session_project", + "target": "api_test_sessions_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L153", + "weight": 1.0, + "source": "api_test_sessions_test_create_session_run", + "target": "api_test_sessions_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L179", + "weight": 1.0, + "source": "api_test_sessions_test_get_session_returns_snapshot", + "target": "api_test_sessions_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L206", + "weight": 1.0, + "source": "api_test_sessions_test_get_session_404_for_unknown", + "target": "api_test_sessions_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L219", + "weight": 1.0, + "source": "api_test_sessions_test_post_resume_invokes_controller", + "target": "api_test_sessions_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L240", + "weight": 1.0, + "source": "api_test_sessions_test_post_cancel_invokes_controller", + "target": "api_test_sessions_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L257", + "weight": 1.0, + "source": "api_test_sessions_test_post_cancel_404_for_unknown", + "target": "api_test_sessions_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L268", + "weight": 1.0, + "source": "api_test_sessions_test_post_resume_409_for_terminal_session", + "target": "api_test_sessions_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L287", + "weight": 1.0, + "source": "api_test_sessions_test_websocket_streams_session_events", + "target": "api_test_sessions_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L308", + "weight": 1.0, + "source": "api_test_sessions_test_websocket_unknown_session_closes", + "target": "api_test_sessions_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L340", + "weight": 1.0, + "source": "api_test_sessions_test_create_session_validation_error_returns_422", + "target": "api_test_sessions_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L54", + "weight": 1.0, + "source": "api_test_sessions_rationale_54", + "target": "api_test_sessions_stubcontroller", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L12", + "weight": 0.8, + "source": "api_test_sessions_stubcontroller", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L12", + "weight": 0.8, + "source": "api_test_sessions_stubcontroller", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L12", + "weight": 0.8, + "source": "api_test_sessions_stubcontroller", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L12", + "weight": 0.8, + "source": "api_test_sessions_stubcontroller", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L12", + "weight": 0.8, + "source": "api_test_sessions_stubcontroller", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L20", + "weight": 0.8, + "source": "api_test_sessions_stubcontroller", + "target": "controller_creation_projectcreaterequest", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L20", + "weight": 0.8, + "source": "api_test_sessions_stubcontroller", + "target": "controller_creation_runcreaterequest", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L20", + "weight": 0.8, + "source": "api_test_sessions_stubcontroller", + "target": "controller_creation_sessionhandle", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L25", + "weight": 0.8, + "source": "api_test_sessions_stubcontroller", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L26", + "weight": 0.8, + "source": "api_test_sessions_stubcontroller", + "target": "controller_state_machine_phase", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L26", + "weight": 0.8, + "source": "api_test_sessions_stubcontroller", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L30", + "weight": 0.8, + "source": "api_test_sessions_stubcontroller", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L57", + "weight": 1.0, + "source": "api_test_sessions_stubcontroller_init", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L67", + "weight": 1.0, + "source": "api_test_sessions_stubcontroller_create_project", + "target": "controller_creation_sessionhandle" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L79", + "weight": 1.0, + "source": "api_test_sessions_stubcontroller_create_run", + "target": "controller_creation_sessionhandle" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L99", + "weight": 1.0, + "source": "api_test_sessions_stubcontroller_resume", + "target": "api_test_sessions_stubcontroller_status", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L90", + "weight": 1.0, + "source": "api_test_sessions_stubcontroller_status", + "target": "controller_creation_sessionhandle" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L123", + "weight": 1.0, + "source": "api_test_sessions_test_create_session_project", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L126", + "weight": 1.0, + "source": "api_test_sessions_test_create_session_project", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L154", + "weight": 1.0, + "source": "api_test_sessions_test_create_session_run", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L157", + "weight": 1.0, + "source": "api_test_sessions_test_create_session_run", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L180", + "weight": 1.0, + "source": "api_test_sessions_test_get_session_returns_snapshot", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L183", + "weight": 1.0, + "source": "api_test_sessions_test_get_session_returns_snapshot", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L207", + "weight": 1.0, + "source": "api_test_sessions_test_get_session_404_for_unknown", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L210", + "weight": 1.0, + "source": "api_test_sessions_test_get_session_404_for_unknown", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L225", + "weight": 1.0, + "source": "api_test_sessions_test_post_resume_invokes_controller", + "target": "api_test_sessions_make_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L220", + "weight": 1.0, + "source": "api_test_sessions_test_post_resume_invokes_controller", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L223", + "weight": 1.0, + "source": "api_test_sessions_test_post_resume_invokes_controller", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L245", + "weight": 1.0, + "source": "api_test_sessions_test_post_cancel_invokes_controller", + "target": "api_test_sessions_make_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L241", + "weight": 1.0, + "source": "api_test_sessions_test_post_cancel_invokes_controller", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L244", + "weight": 1.0, + "source": "api_test_sessions_test_post_cancel_invokes_controller", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L258", + "weight": 1.0, + "source": "api_test_sessions_test_post_cancel_404_for_unknown", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L261", + "weight": 1.0, + "source": "api_test_sessions_test_post_cancel_404_for_unknown", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L273", + "weight": 1.0, + "source": "api_test_sessions_test_post_resume_409_for_terminal_session", + "target": "api_test_sessions_make_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L269", + "weight": 1.0, + "source": "api_test_sessions_test_post_resume_409_for_terminal_session", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L272", + "weight": 1.0, + "source": "api_test_sessions_test_post_resume_409_for_terminal_session", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L292", + "weight": 1.0, + "source": "api_test_sessions_test_websocket_streams_session_events", + "target": "api_test_sessions_make_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L288", + "weight": 1.0, + "source": "api_test_sessions_test_websocket_streams_session_events", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L291", + "weight": 1.0, + "source": "api_test_sessions_test_websocket_streams_session_events", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L309", + "weight": 1.0, + "source": "api_test_sessions_test_websocket_unknown_session_closes", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L312", + "weight": 1.0, + "source": "api_test_sessions_test_websocket_unknown_session_closes", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L322", + "weight": 1.0, + "source": "api_test_sessions_make_request", + "target": "controller_creation_projectcreaterequest" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L339", + "weight": 1.0, + "source": "api_test_sessions_rationale_339", + "target": "api_test_sessions_test_create_session_validation_error_returns_422", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L341", + "weight": 1.0, + "source": "api_test_sessions_test_create_session_validation_error_returns_422", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_sessions.py", + "source_location": "L344", + "weight": 1.0, + "source": "api_test_sessions_test_create_session_validation_error_returns_422", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_init_rationale_1", + "target": "tests_unit_api_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_init_rationale_1", + "target": "tests_integration_api_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_init_rationale_1", + "target": "src_exlab_wizard_api_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L63", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L85", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_tree_lists_equipment_and_projects", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L116", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L134", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_run_returns_detail", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L153", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_run_404_when_creation_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L166", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_tree_skips_unknown_dirs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L184", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_tree_includes_test_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L204", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L225", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_run_returns_none_readme_when_absent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L244", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_folder_returns_immediate_contents", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L265", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_folder_404_on_vanished_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L276", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L288", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L310", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_stubjobrow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L326", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L338", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_run_log_returns_queue_derived_history", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L361", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L394", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L412", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_get_run_log_404_when_run_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L427", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_build_hierarchy_dict_returns_empty_when_config_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L433", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L468", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L487", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_scan_folder_sync_raises_404_for_missing_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L508", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_seed_run_with_creation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L517", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_write_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L539", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_per_file_status_acquiring_when_not_in_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L552", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_per_file_status_syncing_when_unverified", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L566", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L583", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L606", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_per_file_status_keep_local_flag_carried", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L630", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_build_run_node_rollup_from_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L646", + "weight": 1.0, + "source": "tests_unit_api_test_browse_py", + "target": "api_test_browse_test_build_run_node_rollup_cleared", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_test_browse_rationale_1", + "target": "tests_unit_api_test_browse_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L96", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_lists_equipment_and_projects", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L142", + "weight": 1.0, + "source": "api_test_browse_test_get_run_returns_detail", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L156", + "weight": 1.0, + "source": "api_test_browse_test_get_run_404_when_creation_missing", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L175", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_skips_unknown_dirs", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L195", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_includes_test_runs", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L216", + "weight": 1.0, + "source": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L231", + "weight": 1.0, + "source": "api_test_browse_test_get_run_returns_none_readme_when_absent", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L251", + "weight": 1.0, + "source": "api_test_browse_test_get_folder_returns_immediate_contents", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L267", + "weight": 1.0, + "source": "api_test_browse_test_get_folder_404_on_vanished_path", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L279", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L296", + "weight": 1.0, + "source": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L344", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_returns_queue_derived_history", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L378", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L399", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L414", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_404_when_run_missing", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L453", + "weight": 1.0, + "source": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L477", + "weight": 1.0, + "source": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L493", + "weight": 1.0, + "source": "api_test_browse_test_scan_folder_sync_raises_404_for_missing_path", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L546", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_acquiring_when_not_in_sync_state", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L560", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_syncing_when_unverified", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L577", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L595", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L623", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_keep_local_flag_carried", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L638", + "weight": 1.0, + "source": "api_test_browse_test_build_run_node_rollup_from_sync_state", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L655", + "weight": 1.0, + "source": "api_test_browse_test_build_run_node_rollup_cleared", + "target": "api_test_browse_config_with_local_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L39", + "weight": 1.0, + "source": "api_test_browse_config_with_local_root", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L45", + "weight": 1.0, + "source": "api_test_browse_config_with_local_root", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L50", + "weight": 1.0, + "source": "api_test_browse_config_with_local_root", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L58", + "weight": 1.0, + "source": "api_test_browse_config_with_local_root", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L59", + "weight": 1.0, + "source": "api_test_browse_config_with_local_root", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L93", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_lists_equipment_and_projects", + "target": "api_test_browse_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L139", + "weight": 1.0, + "source": "api_test_browse_test_get_run_returns_detail", + "target": "api_test_browse_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L194", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_includes_test_runs", + "target": "api_test_browse_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L230", + "weight": 1.0, + "source": "api_test_browse_test_get_run_returns_none_readme_when_absent", + "target": "api_test_browse_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L513", + "weight": 1.0, + "source": "api_test_browse_seed_run_with_creation", + "target": "api_test_browse_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L66", + "weight": 1.0, + "source": "api_test_browse_write_creation_json", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L72", + "weight": 1.0, + "source": "api_test_browse_write_creation_json", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L75", + "weight": 1.0, + "source": "api_test_browse_write_creation_json", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L79", + "weight": 1.0, + "source": "api_test_browse_write_creation_json", + "target": "api_schemas_pathsblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L96", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_lists_equipment_and_projects", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L97", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_lists_equipment_and_projects", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L117", + "weight": 1.0, + "source": "api_test_browse_rationale_117", + "target": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L121", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L122", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L124", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L125", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_returns_empty_when_no_equipment", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L142", + "weight": 1.0, + "source": "api_test_browse_test_get_run_returns_detail", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L143", + "weight": 1.0, + "source": "api_test_browse_test_get_run_returns_detail", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L156", + "weight": 1.0, + "source": "api_test_browse_test_get_run_404_when_creation_missing", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L157", + "weight": 1.0, + "source": "api_test_browse_test_get_run_404_when_creation_missing", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L175", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_skips_unknown_dirs", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L176", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_skips_unknown_dirs", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L185", + "weight": 1.0, + "source": "api_test_browse_rationale_185", + "target": "api_test_browse_test_get_tree_includes_test_runs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L195", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_includes_test_runs", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L196", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_includes_test_runs", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L205", + "weight": 1.0, + "source": "api_test_browse_rationale_205", + "target": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L216", + "weight": 1.0, + "source": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L217", + "weight": 1.0, + "source": "api_test_browse_test_get_run_returns_422_when_creation_json_malformed", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L226", + "weight": 1.0, + "source": "api_test_browse_rationale_226", + "target": "api_test_browse_test_get_run_returns_none_readme_when_absent", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L231", + "weight": 1.0, + "source": "api_test_browse_test_get_run_returns_none_readme_when_absent", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L232", + "weight": 1.0, + "source": "api_test_browse_test_get_run_returns_none_readme_when_absent", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L251", + "weight": 1.0, + "source": "api_test_browse_test_get_folder_returns_immediate_contents", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L252", + "weight": 1.0, + "source": "api_test_browse_test_get_folder_returns_immediate_contents", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L266", + "weight": 1.0, + "source": "api_test_browse_test_get_folder_404_on_vanished_path", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L269", + "weight": 1.0, + "source": "api_test_browse_test_get_folder_404_on_vanished_path", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L279", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L280", + "weight": 1.0, + "source": "api_test_browse_test_get_tree_includes_sync_mode_on_equipment", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L289", + "weight": 1.0, + "source": "api_test_browse_rationale_289", + "target": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L296", + "weight": 1.0, + "source": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L297", + "weight": 1.0, + "source": "api_test_browse_test_get_folder_rejects_path_outside_configured_roots", + "target": "api_app_create_app" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L313", + "weight": 1.0, + "source": "api_test_browse_stubjobrow", + "target": "api_test_browse_stubjobrow_init", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L342", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_returns_queue_derived_history", + "target": "api_test_browse_stubjobrow", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L372", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", + "target": "api_test_browse_stubjobrow", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L311", + "weight": 1.0, + "source": "api_test_browse_rationale_311", + "target": "api_test_browse_stubjobrow", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L12", + "weight": 0.8, + "source": "api_test_browse_stubjobrow", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L12", + "weight": 0.8, + "source": "api_test_browse_stubjobrow", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L12", + "weight": 0.8, + "source": "api_test_browse_stubjobrow", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L12", + "weight": 0.8, + "source": "api_test_browse_stubjobrow", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_browse_stubjobrow", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_browse_stubjobrow", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_browse_stubjobrow", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_browse_stubjobrow", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_browse_stubjobrow", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_browse_stubjobrow", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L314", + "weight": 0.8, + "source": "api_test_browse_stubjobrow", + "target": "sync_queue_syncjobstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L521", + "weight": 0.8, + "source": "api_test_browse_stubjobrow", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L317", + "weight": 1.0, + "source": "api_test_browse_stubjobrow_init", + "target": "sync_queue_syncjobstate" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L329", + "weight": 1.0, + "source": "api_test_browse_stubnassync", + "target": "api_test_browse_stubnassync_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L332", + "weight": 1.0, + "source": "api_test_browse_stubnassync", + "target": "api_test_browse_stubnassync_get_by_run_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L342", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_returns_queue_derived_history", + "target": "api_test_browse_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L380", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", + "target": "api_test_browse_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L401", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", + "target": "api_test_browse_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L327", + "weight": 1.0, + "source": "api_test_browse_rationale_327", + "target": "api_test_browse_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L12", + "weight": 0.8, + "source": "api_test_browse_stubnassync", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L12", + "weight": 0.8, + "source": "api_test_browse_stubnassync", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L12", + "weight": 0.8, + "source": "api_test_browse_stubnassync", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L12", + "weight": 0.8, + "source": "api_test_browse_stubnassync", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_browse_stubnassync", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_browse_stubnassync", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_browse_stubnassync", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_browse_stubnassync", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_browse_stubnassync", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_browse_stubnassync", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L314", + "weight": 0.8, + "source": "api_test_browse_stubnassync", + "target": "sync_queue_syncjobstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L521", + "weight": 0.8, + "source": "api_test_browse_stubnassync", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L339", + "weight": 1.0, + "source": "api_test_browse_rationale_339", + "target": "api_test_browse_test_get_run_log_returns_queue_derived_history", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L343", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_returns_queue_derived_history", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L348", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_returns_queue_derived_history", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L362", + "weight": 1.0, + "source": "api_test_browse_rationale_362", + "target": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L377", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L382", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_forwards_failure_extras_in_payload", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L395", + "weight": 1.0, + "source": "api_test_browse_rationale_395", + "target": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L398", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L403", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_empty_history_when_no_queue_job", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L413", + "weight": 1.0, + "source": "api_test_browse_rationale_413", + "target": "api_test_browse_test_get_run_log_404_when_run_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L414", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_404_when_run_missing", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L415", + "weight": 1.0, + "source": "api_test_browse_test_get_run_log_404_when_run_missing", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L434", + "weight": 1.0, + "source": "api_test_browse_rationale_434", + "target": "api_test_browse_test_build_hierarchy_dict_includes_owned_and_relay_equipment", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L469", + "weight": 1.0, + "source": "api_test_browse_rationale_469", + "target": "api_test_browse_test_scan_folder_sync_lists_immediate_contents", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L488", + "weight": 1.0, + "source": "api_test_browse_rationale_488", + "target": "api_test_browse_test_scan_folder_sync_raises_404_for_missing_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L544", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_acquiring_when_not_in_sync_state", + "target": "api_test_browse_seed_run_with_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L557", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_syncing_when_unverified", + "target": "api_test_browse_seed_run_with_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L571", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", + "target": "api_test_browse_seed_run_with_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L588", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", + "target": "api_test_browse_seed_run_with_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L611", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_keep_local_flag_carried", + "target": "api_test_browse_seed_run_with_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L633", + "weight": 1.0, + "source": "api_test_browse_test_build_run_node_rollup_from_sync_state", + "target": "api_test_browse_seed_run_with_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L649", + "weight": 1.0, + "source": "api_test_browse_test_build_run_node_rollup_cleared", + "target": "api_test_browse_seed_run_with_creation", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L509", + "weight": 1.0, + "source": "api_test_browse_rationale_509", + "target": "api_test_browse_seed_run_with_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L559", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_syncing_when_unverified", + "target": "api_test_browse_write_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L573", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", + "target": "api_test_browse_write_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L590", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", + "target": "api_test_browse_write_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L613", + "weight": 1.0, + "source": "api_test_browse_test_per_file_status_keep_local_flag_carried", + "target": "api_test_browse_write_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L634", + "weight": 1.0, + "source": "api_test_browse_test_build_run_node_rollup_from_sync_state", + "target": "api_test_browse_write_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L650", + "weight": 1.0, + "source": "api_test_browse_test_build_run_node_rollup_cleared", + "target": "api_test_browse_write_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L518", + "weight": 1.0, + "source": "api_test_browse_rationale_518", + "target": "api_test_browse_write_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L523", + "weight": 1.0, + "source": "api_test_browse_write_sync_state", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L540", + "weight": 1.0, + "source": "api_test_browse_rationale_540", + "target": "api_test_browse_test_per_file_status_acquiring_when_not_in_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L553", + "weight": 1.0, + "source": "api_test_browse_rationale_553", + "target": "api_test_browse_test_per_file_status_syncing_when_unverified", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L567", + "weight": 1.0, + "source": "api_test_browse_rationale_567", + "target": "api_test_browse_test_per_file_status_synced_when_verified_and_on_disk", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L584", + "weight": 1.0, + "source": "api_test_browse_rationale_584", + "target": "api_test_browse_test_per_file_status_on_nas_tombstone_for_cleared_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L607", + "weight": 1.0, + "source": "api_test_browse_rationale_607", + "target": "api_test_browse_test_per_file_status_keep_local_flag_carried", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L631", + "weight": 1.0, + "source": "api_test_browse_rationale_631", + "target": "api_test_browse_test_build_run_node_rollup_from_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L638", + "weight": 1.0, + "source": "api_test_browse_test_build_run_node_rollup_from_sync_state", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L639", + "weight": 1.0, + "source": "api_test_browse_test_build_run_node_rollup_from_sync_state", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L647", + "weight": 1.0, + "source": "api_test_browse_rationale_647", + "target": "api_test_browse_test_build_run_node_rollup_cleared", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L655", + "weight": 1.0, + "source": "api_test_browse_test_build_run_node_rollup_cleared", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_browse.py", + "source_location": "L656", + "weight": 1.0, + "source": "api_test_browse_test_build_run_node_rollup_cleared", + "target": "api_app_create_app" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_minimal_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_creation_json_round_trips_through_msgspec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L94", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_creation_json_round_trip_preserves_lims_project_subfields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L110", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_creation_json_round_trip_preserves_plugins_applied_with_isolation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L131", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_creation_json_round_trip_preserves_orchestrator_block", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L144", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_creation_json_orchestrator_block_omitted_when_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L151", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_orchestrator_block_carries_relay_discovery_field", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L170", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_orchestrator_block_relay_field_defaults_to_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L183", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_creation_json_default_sync_status_is_pending", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L188", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_creation_json_default_validation_overrides_is_empty_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L198", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_creation_json_missing_required_field_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L206", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_creation_json_missing_lims_project_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L232", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_creation_json_unknown_field_is_ignored_on_decode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L268", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_override_entry_to_dict_emits_revoked_field_explicitly", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L283", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_tombstone_entry_to_dict_emits_revoked_field_explicitly", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L296", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_parse_validation_override_entry_returns_override_for_revoked_false", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L311", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_parse_validation_override_entry_returns_tombstone_for_revoked_true", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L326", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L363", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_readme_fields_json_round_trips", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L379", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_readme_fields_json_optional_fields_default_to_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L391", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_readme_fields_json_round_trip_preserves_custom_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L410", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_readme_fields_json_missing_required_field_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L422", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_equipment_json_round_trips", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L437", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_equipment_json_missing_required_field_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L449", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_test_runs_json_round_trips", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L462", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_test_runs_json_missing_required_field_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L478", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_creation_json_payload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L556", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_strenum_field_round_trip_preserves_wire_format", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L601", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_lims_project_block_source_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L633", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_template_block_run_scope_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L659", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_plugin_applied_status_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L675", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_test_runs_json_default_run_kind_serializes_as_test", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L692", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_test_runs_json_explicit_run_kind_round_trips", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L706", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_creation_json_default_sync_status_omitted_on_encode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L716", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_lims_project_block_default_source_omitted_on_encode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L747", + "weight": 1.0, + "source": "tests_unit_api_test_schemas_py", + "target": "api_test_schemas_test_lims_project_status_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_test_schemas_rationale_1", + "target": "tests_unit_api_test_schemas_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L88", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_round_trips_through_msgspec", + "target": "api_test_schemas_minimal_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L95", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_round_trip_preserves_lims_project_subfields", + "target": "api_test_schemas_minimal_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L111", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_round_trip_preserves_plugins_applied_with_isolation", + "target": "api_test_schemas_minimal_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L132", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_round_trip_preserves_orchestrator_block", + "target": "api_test_schemas_minimal_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L146", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_orchestrator_block_omitted_when_none", + "target": "api_test_schemas_minimal_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L156", + "weight": 1.0, + "source": "api_test_schemas_test_orchestrator_block_carries_relay_discovery_field", + "target": "api_test_schemas_minimal_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L172", + "weight": 1.0, + "source": "api_test_schemas_test_orchestrator_block_relay_field_defaults_to_none", + "target": "api_test_schemas_minimal_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L184", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_default_sync_status_is_pending", + "target": "api_test_schemas_minimal_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L189", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_default_validation_overrides_is_empty_list", + "target": "api_test_schemas_minimal_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L327", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", + "target": "api_test_schemas_minimal_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L709", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_default_sync_status_omitted_on_encode", + "target": "api_test_schemas_minimal_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L54", + "weight": 1.0, + "source": "api_test_schemas_rationale_54", + "target": "api_test_schemas_minimal_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L61", + "weight": 1.0, + "source": "api_test_schemas_minimal_creation_json", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L66", + "weight": 1.0, + "source": "api_test_schemas_minimal_creation_json", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L73", + "weight": 1.0, + "source": "api_test_schemas_minimal_creation_json", + "target": "api_schemas_pathsblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L79", + "weight": 1.0, + "source": "api_test_schemas_minimal_creation_json", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L96", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_round_trip_preserves_lims_project_subfields", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L113", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_round_trip_preserves_plugins_applied_with_isolation", + "target": "api_schemas_pluginapplied" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L118", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_round_trip_preserves_plugins_applied_with_isolation", + "target": "api_schemas_pluginisolation" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L133", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_round_trip_preserves_orchestrator_block", + "target": "api_schemas_orchestratorblock" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L145", + "weight": 1.0, + "source": "api_test_schemas_rationale_145", + "target": "api_test_schemas_test_creation_json_orchestrator_block_omitted_when_none", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L152", + "weight": 1.0, + "source": "api_test_schemas_rationale_152", + "target": "api_test_schemas_test_orchestrator_block_carries_relay_discovery_field", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L157", + "weight": 1.0, + "source": "api_test_schemas_test_orchestrator_block_carries_relay_discovery_field", + "target": "api_schemas_orchestratorblock" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L171", + "weight": 1.0, + "source": "api_test_schemas_rationale_171", + "target": "api_test_schemas_test_orchestrator_block_relay_field_defaults_to_none", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L173", + "weight": 1.0, + "source": "api_test_schemas_test_orchestrator_block_relay_field_defaults_to_none", + "target": "api_schemas_orchestratorblock" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L207", + "weight": 1.0, + "source": "api_test_schemas_rationale_207", + "target": "api_test_schemas_test_creation_json_missing_lims_project_raises", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L233", + "weight": 1.0, + "source": "api_test_schemas_rationale_233", + "target": "api_test_schemas_test_creation_json_unknown_field_is_ignored_on_decode", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L269", + "weight": 1.0, + "source": "api_test_schemas_rationale_269", + "target": "api_test_schemas_test_override_entry_to_dict_emits_revoked_field_explicitly", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L271", + "weight": 1.0, + "source": "api_test_schemas_test_override_entry_to_dict_emits_revoked_field_explicitly", + "target": "api_schemas_overrideentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L278", + "weight": 1.0, + "source": "api_test_schemas_test_override_entry_to_dict_emits_revoked_field_explicitly", + "target": "api_schemas_override_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L284", + "weight": 1.0, + "source": "api_test_schemas_test_tombstone_entry_to_dict_emits_revoked_field_explicitly", + "target": "api_schemas_tombstoneentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L291", + "weight": 1.0, + "source": "api_test_schemas_test_tombstone_entry_to_dict_emits_revoked_field_explicitly", + "target": "api_schemas_tombstone_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L297", + "weight": 1.0, + "source": "api_test_schemas_test_parse_validation_override_entry_returns_override_for_revoked_false", + "target": "api_schemas_parse_validation_override_entry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L312", + "weight": 1.0, + "source": "api_test_schemas_test_parse_validation_override_entry_returns_tombstone_for_revoked_true", + "target": "api_schemas_parse_validation_override_entry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L329", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", + "target": "api_schemas_override_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L330", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", + "target": "api_schemas_overrideentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L338", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", + "target": "api_schemas_tombstone_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L339", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", + "target": "api_schemas_tombstoneentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L352", + "weight": 1.0, + "source": "api_test_schemas_test_creation_json_decodes_validation_overrides_as_list_of_dict", + "target": "api_schemas_parse_validation_override_entry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L364", + "weight": 1.0, + "source": "api_test_schemas_test_readme_fields_json_round_trips", + "target": "api_schemas_readmefieldsjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L380", + "weight": 1.0, + "source": "api_test_schemas_test_readme_fields_json_optional_fields_default_to_empty", + "target": "api_schemas_readmefieldsjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L392", + "weight": 1.0, + "source": "api_test_schemas_test_readme_fields_json_round_trip_preserves_custom_fields", + "target": "api_schemas_readmefieldsjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L423", + "weight": 1.0, + "source": "api_test_schemas_test_equipment_json_round_trips", + "target": "api_schemas_equipmentjson" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L479", + "weight": 1.0, + "source": "api_test_schemas_rationale_479", + "target": "api_test_schemas_creation_json_payload", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L563", + "weight": 1.0, + "source": "api_test_schemas_rationale_563", + "target": "api_test_schemas_test_strenum_field_round_trip_preserves_wire_format", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L676", + "weight": 1.0, + "source": "api_test_schemas_rationale_676", + "target": "api_test_schemas_test_test_runs_json_default_run_kind_serializes_as_test", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L707", + "weight": 1.0, + "source": "api_test_schemas_rationale_707", + "target": "api_test_schemas_test_creation_json_default_sync_status_omitted_on_encode", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L717", + "weight": 1.0, + "source": "api_test_schemas_rationale_717", + "target": "api_test_schemas_test_lims_project_block_default_source_omitted_on_encode", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_schemas.py", + "source_location": "L719", + "weight": 1.0, + "source": "api_test_schemas_test_lims_project_block_default_source_omitted_on_encode", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L21", + "weight": 1.0, + "source": "tests_unit_api_test_health_py", + "target": "api_test_health_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L43", + "weight": 1.0, + "source": "tests_unit_api_test_health_py", + "target": "api_test_health_test_health_endpoint_status_ok_with_no_deps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L55", + "weight": 1.0, + "source": "tests_unit_api_test_health_py", + "target": "api_test_health_test_health_endpoint_warn_when_lims_unreachable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L66", + "weight": 1.0, + "source": "tests_unit_api_test_health_py", + "target": "api_test_health_test_health_components_pluck_snapshots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L82", + "weight": 1.0, + "source": "tests_unit_api_test_health_py", + "target": "api_test_health_test_top_level_status_aggregates", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L88", + "weight": 1.0, + "source": "tests_unit_api_test_health_py", + "target": "api_test_health_test_component_rollup_handles_none_deps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_api_test_health_py", + "target": "api_test_health_test_health_with_validator_last_audit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L103", + "weight": 1.0, + "source": "tests_unit_api_test_health_py", + "target": "api_test_health_test_health_nas_sync_snapshot_failure_marked_warn", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_test_health_rationale_1", + "target": "tests_unit_api_test_health_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L44", + "weight": 1.0, + "source": "api_test_health_test_health_endpoint_status_ok_with_no_deps", + "target": "api_test_health_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L57", + "weight": 1.0, + "source": "api_test_health_test_health_endpoint_warn_when_lims_unreachable", + "target": "api_test_health_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L68", + "weight": 1.0, + "source": "api_test_health_test_health_components_pluck_snapshots", + "target": "api_test_health_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L95", + "weight": 1.0, + "source": "api_test_health_test_health_with_validator_last_audit", + "target": "api_test_health_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_health.py", + "source_location": "L108", + "weight": 1.0, + "source": "api_test_health_test_health_nas_sync_snapshot_failure_marked_warn", + "target": "api_test_health_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L23", + "weight": 1.0, + "source": "api_test_health_ready_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L25", + "weight": 1.0, + "source": "api_test_health_ready_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L30", + "weight": 1.0, + "source": "api_test_health_ready_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L38", + "weight": 1.0, + "source": "api_test_health_ready_config", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L39", + "weight": 1.0, + "source": "api_test_health_ready_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L44", + "weight": 1.0, + "source": "api_test_health_test_health_endpoint_status_ok_with_no_deps", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L45", + "weight": 1.0, + "source": "api_test_health_test_health_endpoint_status_ok_with_no_deps", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L56", + "weight": 1.0, + "source": "api_test_health_test_health_endpoint_warn_when_lims_unreachable", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L59", + "weight": 1.0, + "source": "api_test_health_test_health_endpoint_warn_when_lims_unreachable", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L67", + "weight": 1.0, + "source": "api_test_health_test_health_components_pluck_snapshots", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L73", + "weight": 1.0, + "source": "api_test_health_test_health_components_pluck_snapshots", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L83", + "weight": 1.0, + "source": "api_test_health_test_top_level_status_aggregates", + "target": "api_health_top_level_status" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L89", + "weight": 1.0, + "source": "api_test_health_test_component_rollup_handles_none_deps", + "target": "api_health_component_rollup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L94", + "weight": 1.0, + "source": "api_test_health_test_health_with_validator_last_audit", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L97", + "weight": 1.0, + "source": "api_test_health_test_health_with_validator_last_audit", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L107", + "weight": 1.0, + "source": "api_test_health_test_health_nas_sync_snapshot_failure_marked_warn", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_health.py", + "source_location": "L110", + "weight": 1.0, + "source": "api_test_health_test_health_nas_sync_snapshot_failure_marked_warn", + "target": "api_app_create_app" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L35", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_handle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L77", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L90", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L127", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_seed_real_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L140", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_mark_synced", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L155", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_get_staging_returns_empty_when_staging_root_unset", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L165", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L174", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_clear_returns_no_503_when_run_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L188", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_get_staging_returns_run_rows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L208", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L219", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_get_staging_returns_empty_runs_for_missing_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L234", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L249", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_force_sync_returns_503_when_nas_sync_unwired", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L263", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L284", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L296", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L314", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L340", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L351", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_clear_verified_endpoint_returns_503_when_config_unwired", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L366", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_keep_local_toggles_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L389", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_keep_local_toggle_off_round_trips", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L407", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L421", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_keep_local_returns_503_when_config_unwired", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L433", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L447", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L468", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L486", + "weight": 1.0, + "source": "tests_unit_api_test_staging_router_py", + "target": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_test_staging_router_rationale_1", + "target": "tests_unit_api_test_staging_router_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L49", + "weight": 1.0, + "source": "api_test_staging_router_stubnassync_enqueue", + "target": "api_test_staging_router_handle", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_staging_router_handle", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L19", + "weight": 0.8, + "source": "api_test_staging_router_handle", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L19", + "weight": 0.8, + "source": "api_test_staging_router_handle", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L19", + "weight": 0.8, + "source": "api_test_staging_router_handle", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L19", + "weight": 0.8, + "source": "api_test_staging_router_handle", + "target": "config_models_orchestratorstagingcleanup", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L19", + "weight": 0.8, + "source": "api_test_staging_router_handle", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L19", + "weight": 0.8, + "source": "api_test_staging_router_handle", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L99", + "weight": 0.8, + "source": "api_test_staging_router_handle", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L99", + "weight": 0.8, + "source": "api_test_staging_router_handle", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L99", + "weight": 0.8, + "source": "api_test_staging_router_handle", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L99", + "weight": 0.8, + "source": "api_test_staging_router_handle", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L44", + "weight": 1.0, + "source": "api_test_staging_router_stubnassync", + "target": "api_test_staging_router_stubnassync_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L47", + "weight": 1.0, + "source": "api_test_staging_router_stubnassync", + "target": "api_test_staging_router_stubnassync_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L167", + "weight": 1.0, + "source": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", + "target": "api_test_staging_router_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L236", + "weight": 1.0, + "source": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", + "target": "api_test_staging_router_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L42", + "weight": 1.0, + "source": "api_test_staging_router_rationale_42", + "target": "api_test_staging_router_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_staging_router_stubnassync", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L19", + "weight": 0.8, + "source": "api_test_staging_router_stubnassync", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L19", + "weight": 0.8, + "source": "api_test_staging_router_stubnassync", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L19", + "weight": 0.8, + "source": "api_test_staging_router_stubnassync", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L19", + "weight": 0.8, + "source": "api_test_staging_router_stubnassync", + "target": "config_models_orchestratorstagingcleanup", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L19", + "weight": 0.8, + "source": "api_test_staging_router_stubnassync", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L19", + "weight": 0.8, + "source": "api_test_staging_router_stubnassync", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L99", + "weight": 0.8, + "source": "api_test_staging_router_stubnassync", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L99", + "weight": 0.8, + "source": "api_test_staging_router_stubnassync", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L99", + "weight": 0.8, + "source": "api_test_staging_router_stubnassync", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L99", + "weight": 0.8, + "source": "api_test_staging_router_stubnassync", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L156", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_returns_empty_when_staging_root_unset", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L166", + "weight": 1.0, + "source": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L175", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_returns_no_503_when_run_missing", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L190", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_returns_run_rows", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L211", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L220", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_returns_empty_runs_for_missing_root", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L237", + "weight": 1.0, + "source": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L250", + "weight": 1.0, + "source": "api_test_staging_router_test_force_sync_returns_503_when_nas_sync_unwired", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L266", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L286", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L298", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L323", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L342", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L370", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_toggles_sync_state", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L394", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_toggle_off_round_trips", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L410", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L436", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L455", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L472", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L491", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", + "target": "api_test_staging_router_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L54", + "weight": 1.0, + "source": "api_test_staging_router_make_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L56", + "weight": 1.0, + "source": "api_test_staging_router_make_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L61", + "weight": 1.0, + "source": "api_test_staging_router_make_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L69", + "weight": 1.0, + "source": "api_test_staging_router_make_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L72", + "weight": 1.0, + "source": "api_test_staging_router_make_config", + "target": "config_models_orchestratorstagingcleanup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L135", + "weight": 1.0, + "source": "api_test_staging_router_seed_real_run", + "target": "api_test_staging_router_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L189", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_returns_run_rows", + "target": "api_test_staging_router_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L209", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", + "target": "api_test_staging_router_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L235", + "weight": 1.0, + "source": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", + "target": "api_test_staging_router_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L264", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", + "target": "api_test_staging_router_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L285", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", + "target": "api_test_staging_router_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L316", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", + "target": "api_test_staging_router_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L471", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", + "target": "api_test_staging_router_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L136", + "weight": 1.0, + "source": "api_test_staging_router_seed_real_run", + "target": "api_test_staging_router_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L91", + "weight": 1.0, + "source": "api_test_staging_router_rationale_91", + "target": "api_test_staging_router_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L109", + "weight": 1.0, + "source": "api_test_staging_router_write_creation_json", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L115", + "weight": 1.0, + "source": "api_test_staging_router_write_creation_json", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L118", + "weight": 1.0, + "source": "api_test_staging_router_write_creation_json", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L122", + "weight": 1.0, + "source": "api_test_staging_router_write_creation_json", + "target": "api_schemas_pathsblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L368", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_toggles_sync_state", + "target": "api_test_staging_router_seed_real_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L391", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_toggle_off_round_trips", + "target": "api_test_staging_router_seed_real_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L409", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", + "target": "api_test_staging_router_seed_real_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L435", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", + "target": "api_test_staging_router_seed_real_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L490", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", + "target": "api_test_staging_router_seed_real_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L134", + "weight": 1.0, + "source": "api_test_staging_router_rationale_134", + "target": "api_test_staging_router_seed_real_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L210", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", + "target": "api_test_staging_router_mark_synced", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L265", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", + "target": "api_test_staging_router_mark_synced", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L319", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", + "target": "api_test_staging_router_mark_synced", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L141", + "weight": 1.0, + "source": "api_test_staging_router_rationale_141", + "target": "api_test_staging_router_mark_synced", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L142", + "weight": 1.0, + "source": "api_test_staging_router_mark_synced", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L157", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_returns_empty_when_staging_root_unset", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L158", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_returns_empty_when_staging_root_unset", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L167", + "weight": 1.0, + "source": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L168", + "weight": 1.0, + "source": "api_test_staging_router_test_force_sync_returns_no_503_when_run_missing", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L176", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_returns_no_503_when_run_missing", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L177", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_returns_no_503_when_run_missing", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L191", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_returns_run_rows", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L191", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_returns_run_rows", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L192", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_returns_run_rows", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L212", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L212", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L213", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_derives_current_state_from_sync_state_rollup", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L221", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_returns_empty_runs_for_missing_root", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L222", + "weight": 1.0, + "source": "api_test_staging_router_test_get_staging_returns_empty_runs_for_missing_root", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L238", + "weight": 1.0, + "source": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L239", + "weight": 1.0, + "source": "api_test_staging_router_test_force_sync_invokes_nas_sync_enqueue", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L251", + "weight": 1.0, + "source": "api_test_staging_router_test_force_sync_returns_503_when_nas_sync_unwired", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L252", + "weight": 1.0, + "source": "api_test_staging_router_test_force_sync_returns_503_when_nas_sync_unwired", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L267", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L267", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L268", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_deletes_synced_run", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L287", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L287", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L288", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_rejects_non_synced_run", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L297", + "weight": 1.0, + "source": "api_test_staging_router_rationale_297", + "target": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L299", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L300", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_endpoint_idempotent_for_missing_run", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L315", + "weight": 1.0, + "source": "api_test_staging_router_rationale_315", + "target": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L324", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L324", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L325", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_verified_endpoint_clears_only_synced_runs", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L341", + "weight": 1.0, + "source": "api_test_staging_router_rationale_341", + "target": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L343", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L344", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_verified_endpoint_returns_empty_when_no_verified_runs", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L352", + "weight": 1.0, + "source": "api_test_staging_router_rationale_352", + "target": "api_test_staging_router_test_clear_verified_endpoint_returns_503_when_config_unwired", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L354", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_verified_endpoint_returns_503_when_config_unwired", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L355", + "weight": 1.0, + "source": "api_test_staging_router_test_clear_verified_endpoint_returns_503_when_config_unwired", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L367", + "weight": 1.0, + "source": "api_test_staging_router_rationale_367", + "target": "api_test_staging_router_test_keep_local_toggles_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L369", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_toggles_sync_state", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L371", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_toggles_sync_state", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L372", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_toggles_sync_state", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L390", + "weight": 1.0, + "source": "api_test_staging_router_rationale_390", + "target": "api_test_staging_router_test_keep_local_toggle_off_round_trips", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L392", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_toggle_off_round_trips", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L395", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_toggle_off_round_trips", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L396", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_toggle_off_round_trips", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L408", + "weight": 1.0, + "source": "api_test_staging_router_rationale_408", + "target": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L411", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L412", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_503_when_writer_unwired", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L422", + "weight": 1.0, + "source": "api_test_staging_router_rationale_422", + "target": "api_test_staging_router_test_keep_local_returns_503_when_config_unwired", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L423", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_503_when_config_unwired", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L424", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_503_when_config_unwired", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L434", + "weight": 1.0, + "source": "api_test_staging_router_rationale_434", + "target": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L437", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L437", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L438", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_rejects_extra_body_fields", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L448", + "weight": 1.0, + "source": "api_test_staging_router_rationale_448", + "target": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L456", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L456", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L457", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_404_for_path_outside_allowed_roots", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L469", + "weight": 1.0, + "source": "api_test_staging_router_rationale_469", + "target": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L473", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L474", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L475", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_returns_404_when_run_has_no_creation_json", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L487", + "weight": 1.0, + "source": "api_test_staging_router_rationale_487", + "target": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L492", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L493", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_staging_router.py", + "source_location": "L494", + "weight": 1.0, + "source": "api_test_staging_router_test_keep_local_creates_sync_state_when_cache_dir_absent", + "target": "api_app_create_app" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L24", + "weight": 1.0, + "source": "tests_unit_api_test_events_py", + "target": "api_test_events_test_phase_event_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L34", + "weight": 1.0, + "source": "tests_unit_api_test_events_py", + "target": "api_test_events_test_progress_event_includes_kind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_unit_api_test_events_py", + "target": "api_test_events_test_input_required_event_carries_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_unit_api_test_events_py", + "target": "api_test_events_test_warning_event_serializes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L62", + "weight": 1.0, + "source": "tests_unit_api_test_events_py", + "target": "api_test_events_test_done_event_carries_result", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L69", + "weight": 1.0, + "source": "tests_unit_api_test_events_py", + "target": "api_test_events_test_failed_event_carries_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L76", + "weight": 1.0, + "source": "tests_unit_api_test_events_py", + "target": "api_test_events_test_snapshot_event_lists_findings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L85", + "weight": 1.0, + "source": "tests_unit_api_test_events_py", + "target": "api_test_events_test_delta_event_serializes_three_lists", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L92", + "weight": 1.0, + "source": "tests_unit_api_test_events_py", + "target": "api_test_events_test_event_from_dict_round_trips_each_kind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L111", + "weight": 1.0, + "source": "tests_unit_api_test_events_py", + "target": "api_test_events_test_event_from_dict_rejects_unknown_kind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L116", + "weight": 1.0, + "source": "tests_unit_api_test_events_py", + "target": "api_test_events_test_event_from_dict_rejects_missing_kind", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_events.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_test_events_rationale_1", + "target": "tests_unit_api_test_events_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L25", + "weight": 1.0, + "source": "api_test_events_test_phase_event_round_trip", + "target": "api_events_phaseevent" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L26", + "weight": 1.0, + "source": "api_test_events_test_phase_event_round_trip", + "target": "api_events_encode_event" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L35", + "weight": 1.0, + "source": "api_test_events_test_progress_event_includes_kind", + "target": "api_events_progressevent" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L36", + "weight": 1.0, + "source": "api_test_events_test_progress_event_includes_kind", + "target": "api_events_encode_event" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L42", + "weight": 1.0, + "source": "api_test_events_test_input_required_event_carries_fields", + "target": "api_events_inputrequiredevent" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L47", + "weight": 1.0, + "source": "api_test_events_test_input_required_event_carries_fields", + "target": "api_events_encode_event" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L53", + "weight": 1.0, + "source": "api_test_events_test_warning_event_serializes", + "target": "api_events_warningevent" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L54", + "weight": 1.0, + "source": "api_test_events_test_warning_event_serializes", + "target": "api_events_encode_event" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L63", + "weight": 1.0, + "source": "api_test_events_test_done_event_carries_result", + "target": "api_events_doneevent" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L64", + "weight": 1.0, + "source": "api_test_events_test_done_event_carries_result", + "target": "api_events_encode_event" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L70", + "weight": 1.0, + "source": "api_test_events_test_failed_event_carries_error", + "target": "api_events_failedevent" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L71", + "weight": 1.0, + "source": "api_test_events_test_failed_event_carries_error", + "target": "api_events_encode_event" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L77", + "weight": 1.0, + "source": "api_test_events_test_snapshot_event_lists_findings", + "target": "api_events_snapshotevent" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L80", + "weight": 1.0, + "source": "api_test_events_test_snapshot_event_lists_findings", + "target": "api_events_encode_event" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L86", + "weight": 1.0, + "source": "api_test_events_test_delta_event_serializes_three_lists", + "target": "api_events_deltaevent" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L87", + "weight": 1.0, + "source": "api_test_events_test_delta_event_serializes_three_lists", + "target": "api_events_encode_event" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L104", + "weight": 1.0, + "source": "api_test_events_test_event_from_dict_round_trips_each_kind", + "target": "api_events_event_from_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L113", + "weight": 1.0, + "source": "api_test_events_test_event_from_dict_rejects_unknown_kind", + "target": "api_events_event_from_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_events.py", + "source_location": "L118", + "weight": 1.0, + "source": "api_test_events_test_event_from_dict_rejects_missing_kind", + "target": "api_events_event_from_dict" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L38", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L77", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_findings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L99", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L121", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_test_list_problems_returns_findings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L138", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_test_list_problems_filters_by_severity", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L151", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_test_list_problems_filters_by_class", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L164", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_test_list_problems_with_equipment_scope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L176", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_test_list_problems_unknown_scope_returns_422", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L190", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_test_refresh_runs_audit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L205", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_test_append_override_writes_entry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L239", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_test_append_override_404_when_path_absent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L258", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L280", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_test_problems_websocket_closes_when_no_channel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L301", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_test_refresh_publishes_snapshot_to_channel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L323", + "weight": 1.0, + "source": "tests_unit_api_test_problems_py", + "target": "api_test_problems_test_revoke_override_writes_tombstone", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_test_problems_rationale_1", + "target": "tests_unit_api_test_problems_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L41", + "weight": 1.0, + "source": "api_test_problems_stubvalidator", + "target": "api_test_problems_stubvalidator_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L45", + "weight": 1.0, + "source": "api_test_problems_stubvalidator", + "target": "api_test_problems_stubvalidator_query_problems", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L48", + "weight": 1.0, + "source": "api_test_problems_stubvalidator", + "target": "api_test_problems_stubvalidator_audit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L125", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_returns_findings", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L142", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_filters_by_severity", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L155", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_filters_by_class", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L168", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_with_equipment_scope", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L180", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_unknown_scope_returns_422", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L191", + "weight": 1.0, + "source": "api_test_problems_test_refresh_runs_audit", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L213", + "weight": 1.0, + "source": "api_test_problems_test_append_override_writes_entry", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L244", + "weight": 1.0, + "source": "api_test_problems_test_append_override_404_when_path_absent", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L269", + "weight": 1.0, + "source": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L287", + "weight": 1.0, + "source": "api_test_problems_test_problems_websocket_closes_when_no_channel", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L311", + "weight": 1.0, + "source": "api_test_problems_test_refresh_publishes_snapshot_to_channel", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L331", + "weight": 1.0, + "source": "api_test_problems_test_revoke_override_writes_tombstone", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L39", + "weight": 1.0, + "source": "api_test_problems_rationale_39", + "target": "api_test_problems_stubvalidator", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L14", + "weight": 0.8, + "source": "api_test_problems_stubvalidator", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L14", + "weight": 0.8, + "source": "api_test_problems_stubvalidator", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L14", + "weight": 0.8, + "source": "api_test_problems_stubvalidator", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L14", + "weight": 0.8, + "source": "api_test_problems_stubvalidator", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L20", + "weight": 0.8, + "source": "api_test_problems_stubvalidator", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L21", + "weight": 0.8, + "source": "api_test_problems_stubvalidator", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L21", + "weight": 0.8, + "source": "api_test_problems_stubvalidator", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L21", + "weight": 0.8, + "source": "api_test_problems_stubvalidator", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L21", + "weight": 0.8, + "source": "api_test_problems_stubvalidator", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L21", + "weight": 0.8, + "source": "api_test_problems_stubvalidator", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L21", + "weight": 0.8, + "source": "api_test_problems_stubvalidator", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L35", + "weight": 0.8, + "source": "api_test_problems_stubvalidator", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L123", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_returns_findings", + "target": "api_test_problems_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L140", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_filters_by_severity", + "target": "api_test_problems_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L153", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_filters_by_class", + "target": "api_test_problems_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L166", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_with_equipment_scope", + "target": "api_test_problems_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L178", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_unknown_scope_returns_422", + "target": "api_test_problems_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L193", + "weight": 1.0, + "source": "api_test_problems_test_refresh_runs_audit", + "target": "api_test_problems_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L211", + "weight": 1.0, + "source": "api_test_problems_test_append_override_writes_entry", + "target": "api_test_problems_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L242", + "weight": 1.0, + "source": "api_test_problems_test_append_override_404_when_path_absent", + "target": "api_test_problems_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L267", + "weight": 1.0, + "source": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", + "target": "api_test_problems_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L285", + "weight": 1.0, + "source": "api_test_problems_test_problems_websocket_closes_when_no_channel", + "target": "api_test_problems_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L309", + "weight": 1.0, + "source": "api_test_problems_test_refresh_publishes_snapshot_to_channel", + "target": "api_test_problems_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L329", + "weight": 1.0, + "source": "api_test_problems_test_revoke_override_writes_tombstone", + "target": "api_test_problems_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L55", + "weight": 1.0, + "source": "api_test_problems_ready_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L59", + "weight": 1.0, + "source": "api_test_problems_ready_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L64", + "weight": 1.0, + "source": "api_test_problems_ready_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L72", + "weight": 1.0, + "source": "api_test_problems_ready_config", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L73", + "weight": 1.0, + "source": "api_test_problems_ready_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L125", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_returns_findings", + "target": "api_test_problems_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L142", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_filters_by_severity", + "target": "api_test_problems_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L155", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_filters_by_class", + "target": "api_test_problems_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L168", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_with_equipment_scope", + "target": "api_test_problems_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L191", + "weight": 1.0, + "source": "api_test_problems_test_refresh_runs_audit", + "target": "api_test_problems_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L269", + "weight": 1.0, + "source": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", + "target": "api_test_problems_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L311", + "weight": 1.0, + "source": "api_test_problems_test_refresh_publishes_snapshot_to_channel", + "target": "api_test_problems_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L208", + "weight": 1.0, + "source": "api_test_problems_test_append_override_writes_entry", + "target": "api_test_problems_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L326", + "weight": 1.0, + "source": "api_test_problems_test_revoke_override_writes_tombstone", + "target": "api_test_problems_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L102", + "weight": 1.0, + "source": "api_test_problems_write_creation_json", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L108", + "weight": 1.0, + "source": "api_test_problems_write_creation_json", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L111", + "weight": 1.0, + "source": "api_test_problems_write_creation_json", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L115", + "weight": 1.0, + "source": "api_test_problems_write_creation_json", + "target": "api_schemas_pathsblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L122", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_returns_findings", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L127", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_returns_findings", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L139", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_filters_by_severity", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L144", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_filters_by_severity", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L152", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_filters_by_class", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L157", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_filters_by_class", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L165", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_with_equipment_scope", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L170", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_with_equipment_scope", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L177", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_unknown_scope_returns_422", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L182", + "weight": 1.0, + "source": "api_test_problems_test_list_problems_unknown_scope_returns_422", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L192", + "weight": 1.0, + "source": "api_test_problems_test_refresh_runs_audit", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L195", + "weight": 1.0, + "source": "api_test_problems_test_refresh_runs_audit", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L209", + "weight": 1.0, + "source": "api_test_problems_test_append_override_writes_entry", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L210", + "weight": 1.0, + "source": "api_test_problems_test_append_override_writes_entry", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L216", + "weight": 1.0, + "source": "api_test_problems_test_append_override_writes_entry", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L240", + "weight": 1.0, + "source": "api_test_problems_test_append_override_404_when_path_absent", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L241", + "weight": 1.0, + "source": "api_test_problems_test_append_override_404_when_path_absent", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L247", + "weight": 1.0, + "source": "api_test_problems_test_append_override_404_when_path_absent", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L259", + "weight": 1.0, + "source": "api_test_problems_rationale_259", + "target": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L266", + "weight": 1.0, + "source": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L270", + "weight": 1.0, + "source": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", + "target": "api_app_auditchannel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L272", + "weight": 1.0, + "source": "api_test_problems_test_problems_websocket_sends_snapshot_on_connect", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L281", + "weight": 1.0, + "source": "api_test_problems_rationale_281", + "target": "api_test_problems_test_problems_websocket_closes_when_no_channel", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L284", + "weight": 1.0, + "source": "api_test_problems_test_problems_websocket_closes_when_no_channel", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L290", + "weight": 1.0, + "source": "api_test_problems_test_problems_websocket_closes_when_no_channel", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L302", + "weight": 1.0, + "source": "api_test_problems_rationale_302", + "target": "api_test_problems_test_refresh_publishes_snapshot_to_channel", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L307", + "weight": 1.0, + "source": "api_test_problems_test_refresh_publishes_snapshot_to_channel", + "target": "api_app_auditchannel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L308", + "weight": 1.0, + "source": "api_test_problems_test_refresh_publishes_snapshot_to_channel", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L314", + "weight": 1.0, + "source": "api_test_problems_test_refresh_publishes_snapshot_to_channel", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L327", + "weight": 1.0, + "source": "api_test_problems_test_revoke_override_writes_tombstone", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L328", + "weight": 1.0, + "source": "api_test_problems_test_revoke_override_writes_tombstone", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_problems.py", + "source_location": "L334", + "weight": 1.0, + "source": "api_test_problems_test_revoke_override_writes_tombstone", + "target": "api_app_create_app" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L21", + "weight": 1.0, + "source": "tests_unit_api_test_app_py", + "target": "api_test_app_f", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_unit_api_test_app_py", + "target": "api_test_app_test_diff_findings_added_removed_changed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_unit_api_test_app_py", + "target": "api_test_app_test_finding_to_dict_handles_dataclass_and_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L57", + "weight": 1.0, + "source": "tests_unit_api_test_app_py", + "target": "api_test_app_test_audit_channel_publishes_snapshot_to_subscriber", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L78", + "weight": 1.0, + "source": "tests_unit_api_test_app_py", + "target": "api_test_app_test_audit_channel_publishes_delta", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L101", + "weight": 1.0, + "source": "tests_unit_api_test_app_py", + "target": "api_test_app_test_audit_channel_late_subscribe_receives_latest_snapshot", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L119", + "weight": 1.0, + "source": "tests_unit_api_test_app_py", + "target": "api_test_app_test_audit_channel_close_signals_subscribers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L135", + "weight": 1.0, + "source": "tests_unit_api_test_app_py", + "target": "api_test_app_test_create_app_uses_supplied_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L141", + "weight": 1.0, + "source": "tests_unit_api_test_app_py", + "target": "api_test_app_test_create_app_creates_default_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L147", + "weight": 1.0, + "source": "tests_unit_api_test_app_py", + "target": "api_test_app_test_create_app_attaches_audit_channel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L154", + "weight": 1.0, + "source": "tests_unit_api_test_app_py", + "target": "api_test_app_test_lifespan_starts_and_stops_audit_task", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_test_app_rationale_1", + "target": "tests_unit_api_test_app_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L24", + "weight": 1.0, + "source": "api_test_app_f", + "target": "api_test_app_f_init", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L38", + "weight": 1.0, + "source": "api_test_app_test_diff_findings_added_removed_changed", + "target": "api_test_app_f", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L22", + "weight": 1.0, + "source": "api_test_app_rationale_22", + "target": "api_test_app_f", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L11", + "weight": 0.8, + "source": "api_test_app_f", + "target": "api_app_appdependencies", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L11", + "weight": 0.8, + "source": "api_test_app_f", + "target": "api_app_auditchannel", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L18", + "weight": 0.8, + "source": "api_test_app_f", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_app.py", + "source_location": "L42", + "weight": 1.0, + "source": "api_test_app_test_diff_findings_added_removed_changed", + "target": "api_app_diff_findings" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_app.py", + "source_location": "L51", + "weight": 1.0, + "source": "api_test_app_test_finding_to_dict_handles_dataclass_and_dict", + "target": "api_app_finding_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_app.py", + "source_location": "L58", + "weight": 1.0, + "source": "api_test_app_test_audit_channel_publishes_snapshot_to_subscriber", + "target": "api_app_auditchannel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_app.py", + "source_location": "L79", + "weight": 1.0, + "source": "api_test_app_test_audit_channel_publishes_delta", + "target": "api_app_auditchannel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_app.py", + "source_location": "L102", + "weight": 1.0, + "source": "api_test_app_test_audit_channel_late_subscribe_receives_latest_snapshot", + "target": "api_app_auditchannel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_app.py", + "source_location": "L120", + "weight": 1.0, + "source": "api_test_app_test_audit_channel_close_signals_subscribers", + "target": "api_app_auditchannel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_app.py", + "source_location": "L136", + "weight": 1.0, + "source": "api_test_app_test_create_app_uses_supplied_dependencies", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_app.py", + "source_location": "L137", + "weight": 1.0, + "source": "api_test_app_test_create_app_uses_supplied_dependencies", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_app.py", + "source_location": "L142", + "weight": 1.0, + "source": "api_test_app_test_create_app_creates_default_dependencies", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_app.py", + "source_location": "L148", + "weight": 1.0, + "source": "api_test_app_test_create_app_attaches_audit_channel", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_app.py", + "source_location": "L149", + "weight": 1.0, + "source": "api_test_app_test_create_app_attaches_audit_channel", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/api/test_app.py", + "source_location": "L155", + "weight": 1.0, + "source": "api_test_app_rationale_155", + "target": "api_test_app_test_lifespan_starts_and_stops_audit_task", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_app.py", + "source_location": "L164", + "weight": 1.0, + "source": "api_test_app_test_lifespan_starts_and_stops_audit_task", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/api/test_app.py", + "source_location": "L165", + "weight": 1.0, + "source": "api_test_app_test_lifespan_starts_and_stops_audit_task", + "target": "api_app_create_app" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L51", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_make_creation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L101", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L113", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L124", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L135", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_build_transport_driver_sftp", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L154", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_build_transport_driver_smb", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L180", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L237", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L275", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L311", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L349", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L387", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L423", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L465", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_client", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L475", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L504", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L537", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L563", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L580", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L594", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L634", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L677", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L734", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L780", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L831", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L871", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L895", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L929", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L945", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L963", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L981", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L995", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1026", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1083", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_extra_py", + "target": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_1", + "target": "tests_unit_sync_test_nas_client_extra_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L187", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L239", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L277", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L313", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L351", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L389", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L425", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L489", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L522", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L551", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L570", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L588", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L598", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L638", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L687", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L736", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L784", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L835", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L878", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L896", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L965", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L983", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L998", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1033", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1087", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", + "target": "sync_test_nas_client_extra_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L60", + "weight": 1.0, + "source": "sync_test_nas_client_extra_build_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L65", + "weight": 1.0, + "source": "sync_test_nas_client_extra_build_config", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L68", + "weight": 1.0, + "source": "sync_test_nas_client_extra_build_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L70", + "weight": 1.0, + "source": "sync_test_nas_client_extra_build_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L78", + "weight": 1.0, + "source": "sync_test_nas_client_extra_build_config", + "target": "config_models_nascleanupconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L109", + "weight": 1.0, + "source": "sync_test_nas_client_extra_populate_run", + "target": "sync_test_nas_client_extra_make_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L88", + "weight": 1.0, + "source": "sync_test_nas_client_extra_make_creation", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L94", + "weight": 1.0, + "source": "sync_test_nas_client_extra_make_creation", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L95", + "weight": 1.0, + "source": "sync_test_nas_client_extra_make_creation", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L97", + "weight": 1.0, + "source": "sync_test_nas_client_extra_make_creation", + "target": "api_schemas_pathsblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L188", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L240", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L278", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L314", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L352", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L390", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L426", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L599", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L639", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L688", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L737", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L785", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L836", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L897", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1034", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1088", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", + "target": "sync_test_nas_client_extra_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L207", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L253", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L291", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L327", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L365", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L403", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L439", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L612", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L656", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L705", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L754", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L809", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L853", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L910", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1047", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1101", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", + "target": "sync_test_nas_client_extra_factory", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L127", + "weight": 1.0, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "sync_test_nas_client_extra_stubkeyring_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L130", + "weight": 1.0, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "sync_test_nas_client_extra_stubkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L149", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_build_transport_driver_sftp", + "target": "sync_test_nas_client_extra_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L170", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_build_transport_driver_smb", + "target": "sync_test_nas_client_extra_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L960", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", + "target": "sync_test_nas_client_extra_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L125", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_125", + "target": "sync_test_nas_client_extra_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L19", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L19", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L19", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L19", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L26", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "config_models_bandwidthconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "config_models_nascleanupconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "config_models_rclonesmbtransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L41", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "sync_nas_client_nassyncclient", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L45", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "sync_queue_syncjobstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L47", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "validator_engine_validator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1085", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L833", + "weight": 0.8, + "source": "sync_test_nas_client_extra_stubkeyring", + "target": "transports_rclone_checkresult", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L136", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_build_transport_driver_sftp", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L141", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_build_transport_driver_sftp", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L146", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_build_transport_driver_sftp", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L149", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_build_transport_driver_sftp", + "target": "sync_nas_client_build_transport_driver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L155", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_build_transport_driver_smb", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L160", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_build_transport_driver_smb", + "target": "config_models_rclonesmbtransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L167", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_build_transport_driver_smb", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L170", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_build_transport_driver_smb", + "target": "sync_nas_client_build_transport_driver" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L181", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_181", + "target": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L189", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L202", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L213", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_hash_mismatch_first_failure_retries", + "target": "sync_helpers_local_check_factory" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L238", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_238", + "target": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L241", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L248", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_hash_mismatch_second_failure_terminal", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L276", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_276", + "target": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L279", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L286", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L292", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_full_delete_when_retain_cache_false", + "target": "sync_helpers_local_check_factory" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L312", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_312", + "target": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L315", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L322", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L328", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_retain_cache_keeps_metadata", + "target": "sync_helpers_local_check_factory" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L350", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_350", + "target": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L353", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L360", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L366", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_disabled_keeps_files", + "target": "sync_helpers_local_check_factory" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L388", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_388", + "target": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L391", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L398", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L404", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_eligible_when_min_verify_passes_unmet", + "target": "sync_helpers_local_check_factory" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L424", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_424", + "target": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L427", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L434", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L440", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_blocked_by_remote_stat", + "target": "sync_helpers_local_check_factory" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L490", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", + "target": "sync_test_nas_client_extra_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L523", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", + "target": "sync_test_nas_client_extra_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L552", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", + "target": "sync_test_nas_client_extra_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L571", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", + "target": "sync_test_nas_client_extra_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L589", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", + "target": "sync_test_nas_client_extra_client", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L466", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_466", + "target": "sync_test_nas_client_extra_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L467", + "weight": 1.0, + "source": "sync_test_nas_client_extra_client", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L471", + "weight": 1.0, + "source": "sync_test_nas_client_extra_client", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L476", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_476", + "target": "sync_test_nas_client_extra_test_delete_local_skips_keep_local_files_incl_nested", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L505", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_505", + "target": "sync_test_nas_client_extra_test_delete_local_prunes_emptied_dirs_keeps_dir_with_kept_file", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L538", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_538", + "target": "sync_test_nas_client_extra_test_delete_local_does_not_descend_or_remove_directory_symlink", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L564", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_564", + "target": "sync_test_nas_client_extra_test_delete_local_keep_local_survives_retain_cache_false", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L583", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_583", + "target": "sync_test_nas_client_extra_test_delete_local_retain_cache_false_drops_whole_run_without_keep_local", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L595", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_595", + "target": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L600", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L607", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L613", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", + "target": "sync_helpers_local_check_factory" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L629", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_marks_cleared_in_sync_state", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L635", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_635", + "target": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L640", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L641", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L650", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L657", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_keeps_keep_local_file", + "target": "sync_helpers_local_check_factory" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L678", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_678", + "target": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L689", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L690", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L699", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L706", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_cleanup_deferred_when_run_only_partially_synced", + "target": "sync_helpers_local_check_factory" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L735", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_735", + "target": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L738", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L749", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_worker_marks_failed_when_local_run_vanished", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L781", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_781", + "target": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L786", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L804", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_verifier_mismatch_first_failure_then_pass", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L832", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_832", + "target": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L837", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L848", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_verifier_mismatch_second_failure_terminal", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L872", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_872", + "target": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L879", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L880", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_default_push_factory_uses_real_driver", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L898", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L905", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_network_error_records_backoff_retry", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L930", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_930", + "target": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L931", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L937", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L938", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L940", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_compute_nas_path_returns_none_when_empty", + "target": "api_schemas_pathsblock" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L946", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_946", + "target": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L950", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L960", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_build_transport_driver_rejects_unknown_type", + "target": "sync_nas_client_build_transport_driver" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L964", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_964", + "target": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L966", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L967", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_mark_synced_no_op_when_creation_missing", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L982", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_982", + "target": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L984", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L985", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_delete_local_no_op_when_path_missing", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L996", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_996", + "target": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L999", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1000", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1006", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1012", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1013", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1015", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_infer_equipment_id_falls_back_to_first", + "target": "api_schemas_pathsblock" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1027", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_1027", + "target": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1035", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1036", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1041", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1048", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_partial_batch_credits_verified_files_in_sync_state", + "target": "sync_helpers_corrupt_one_check_factory" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1084", + "weight": 1.0, + "source": "sync_test_nas_client_extra_rationale_1084", + "target": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1089", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1090", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1095", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client_extra.py", + "source_location": "L1102", + "weight": 1.0, + "source": "sync_test_nas_client_extra_test_full_batch_credits_every_file_in_sync_state", + "target": "sync_helpers_local_check_factory" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_stub_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L47", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_record_argv", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L54", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_read_recorded_argvs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L64", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_rclone_push_success", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L80", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_rclone_push_network_error_is_retryable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L92", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_rclone_push_auth_error_is_terminal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L104", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_rclone_push_hash_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L116", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_rclone_push_missing_binary_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L123", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_rclone_push_forwards_env", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L160", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_rclone_argv_includes_checksum_flag", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L176", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_rclone_argv_includes_bwlimit_when_set", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L193", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_rclone_argv_omits_bwlimit_when_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L208", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L227", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_rclone_argv_omits_files_from_when_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L247", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_obscure_returns_stdout_stripped", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L257", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_obscure_missing_binary_raises_auth", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L268", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_about_success", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L277", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_about_auth_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L291", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_parse_combined_handles_all_prefixes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L301", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_parse_combined_empty_returns_empty_result", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L305", + "weight": 1.0, + "source": "tests_unit_sync_test_transports_py", + "target": "sync_test_transports_test_parse_combined_tolerates_blank_lines_and_unknown_prefix", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_test_transports_rationale_1", + "target": "tests_unit_sync_test_transports_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L34", + "weight": 1.0, + "source": "sync_test_transports_rationale_34", + "target": "sync_test_transports_stub_dir", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L48", + "weight": 1.0, + "source": "sync_test_transports_rationale_48", + "target": "sync_test_transports_record_argv", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L171", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_argv_includes_checksum_flag", + "target": "sync_test_transports_read_recorded_argvs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L187", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_argv_includes_bwlimit_when_set", + "target": "sync_test_transports_read_recorded_argvs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L204", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_argv_omits_bwlimit_when_none", + "target": "sync_test_transports_read_recorded_argvs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L221", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", + "target": "sync_test_transports_read_recorded_argvs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L238", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_argv_omits_files_from_when_none", + "target": "sync_test_transports_read_recorded_argvs", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L55", + "weight": 1.0, + "source": "sync_test_transports_rationale_55", + "target": "sync_test_transports_read_recorded_argvs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L73", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_push_success", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L86", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_push_network_error_is_retryable", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L98", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_push_auth_error_is_terminal", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L110", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_push_hash_mismatch", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L117", + "weight": 1.0, + "source": "sync_test_transports_rationale_117", + "target": "sync_test_transports_test_rclone_push_missing_binary_raises", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L118", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_push_missing_binary_raises", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L129", + "weight": 1.0, + "source": "sync_test_transports_rationale_129", + "target": "sync_test_transports_test_rclone_push_forwards_env", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L140", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_push_forwards_env", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L169", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_argv_includes_checksum_flag", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L185", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_argv_includes_bwlimit_when_set", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L202", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_argv_omits_bwlimit_when_none", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L219", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_argv_includes_files_from_when_set", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L236", + "weight": 1.0, + "source": "sync_test_transports_test_rclone_argv_omits_files_from_when_none", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L253", + "weight": 1.0, + "source": "sync_test_transports_test_obscure_returns_stdout_stripped", + "target": "transports_rclone_obscure" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L259", + "weight": 1.0, + "source": "sync_test_transports_test_obscure_missing_binary_raises_auth", + "target": "transports_rclone_obscure" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L271", + "weight": 1.0, + "source": "sync_test_transports_test_about_success", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L279", + "weight": 1.0, + "source": "sync_test_transports_test_about_auth_failure", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L293", + "weight": 1.0, + "source": "sync_test_transports_test_parse_combined_handles_all_prefixes", + "target": "transports_rclone_parse_combined" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L302", + "weight": 1.0, + "source": "sync_test_transports_test_parse_combined_empty_returns_empty_result", + "target": "transports_rclone_parse_combined" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L302", + "weight": 1.0, + "source": "sync_test_transports_test_parse_combined_empty_returns_empty_result", + "target": "transports_rclone_checkresult" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_transports.py", + "source_location": "L307", + "weight": 1.0, + "source": "sync_test_transports_test_parse_combined_tolerates_blank_lines_and_unknown_prefix", + "target": "transports_rclone_parse_combined" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L20", + "weight": 1.0, + "source": "tests_unit_sync_test_bandwidth_py", + "target": "sync_test_bandwidth_wed_at", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_unit_sync_test_bandwidth_py", + "target": "sync_test_bandwidth_test_mbps_to_kibps_uses_spec_formula", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L31", + "weight": 1.0, + "source": "tests_unit_sync_test_bandwidth_py", + "target": "sync_test_bandwidth_test_mbps_to_kibps_floor_for_tiny_input", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L36", + "weight": 1.0, + "source": "tests_unit_sync_test_bandwidth_py", + "target": "sync_test_bandwidth_test_mbps_to_kibps_zero", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_unit_sync_test_bandwidth_py", + "target": "sync_test_bandwidth_test_day_name_to_index_covers_all_days", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L47", + "weight": 1.0, + "source": "tests_unit_sync_test_bandwidth_py", + "target": "sync_test_bandwidth_test_is_window_active_inside_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_unit_sync_test_bandwidth_py", + "target": "sync_test_bandwidth_test_is_window_active_outside_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L58", + "weight": 1.0, + "source": "tests_unit_sync_test_bandwidth_py", + "target": "sync_test_bandwidth_test_is_window_active_wrong_weekday", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L64", + "weight": 1.0, + "source": "tests_unit_sync_test_bandwidth_py", + "target": "sync_test_bandwidth_test_effective_unlimited_when_upload_mbps_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L69", + "weight": 1.0, + "source": "tests_unit_sync_test_bandwidth_py", + "target": "sync_test_bandwidth_test_effective_unlimited_when_outside_schedule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L78", + "weight": 1.0, + "source": "tests_unit_sync_test_bandwidth_py", + "target": "sync_test_bandwidth_test_effective_throttled_inside_schedule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_unit_sync_test_bandwidth_py", + "target": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L92", + "weight": 1.0, + "source": "tests_unit_sync_test_bandwidth_py", + "target": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_test_bandwidth_rationale_1", + "target": "tests_unit_sync_test_bandwidth_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L49", + "weight": 1.0, + "source": "sync_test_bandwidth_test_is_window_active_inside_window", + "target": "sync_test_bandwidth_wed_at", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L54", + "weight": 1.0, + "source": "sync_test_bandwidth_test_is_window_active_outside_window", + "target": "sync_test_bandwidth_wed_at", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L61", + "weight": 1.0, + "source": "sync_test_bandwidth_test_is_window_active_wrong_weekday", + "target": "sync_test_bandwidth_wed_at", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L66", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_unlimited_when_upload_mbps_none", + "target": "sync_test_bandwidth_wed_at", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L75", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_unlimited_when_outside_schedule", + "target": "sync_test_bandwidth_wed_at", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L83", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_inside_schedule", + "target": "sync_test_bandwidth_wed_at", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L89", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", + "target": "sync_test_bandwidth_wed_at", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L100", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", + "target": "sync_test_bandwidth_wed_at", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L21", + "weight": 1.0, + "source": "sync_test_bandwidth_rationale_21", + "target": "sync_test_bandwidth_wed_at", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L26", + "weight": 1.0, + "source": "sync_test_bandwidth_rationale_26", + "target": "sync_test_bandwidth_test_mbps_to_kibps_uses_spec_formula", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L27", + "weight": 1.0, + "source": "sync_test_bandwidth_test_mbps_to_kibps_uses_spec_formula", + "target": "sync_bandwidth_mbps_to_kibps" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L32", + "weight": 1.0, + "source": "sync_test_bandwidth_rationale_32", + "target": "sync_test_bandwidth_test_mbps_to_kibps_floor_for_tiny_input", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L33", + "weight": 1.0, + "source": "sync_test_bandwidth_test_mbps_to_kibps_floor_for_tiny_input", + "target": "sync_bandwidth_mbps_to_kibps" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L37", + "weight": 1.0, + "source": "sync_test_bandwidth_test_mbps_to_kibps_zero", + "target": "sync_bandwidth_mbps_to_kibps" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L48", + "weight": 1.0, + "source": "sync_test_bandwidth_test_is_window_active_inside_window", + "target": "config_models_bandwidthwindow" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L49", + "weight": 1.0, + "source": "sync_test_bandwidth_test_is_window_active_inside_window", + "target": "sync_bandwidth_is_window_active" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L53", + "weight": 1.0, + "source": "sync_test_bandwidth_test_is_window_active_outside_window", + "target": "config_models_bandwidthwindow" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L54", + "weight": 1.0, + "source": "sync_test_bandwidth_test_is_window_active_outside_window", + "target": "sync_bandwidth_is_window_active" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L59", + "weight": 1.0, + "source": "sync_test_bandwidth_rationale_59", + "target": "sync_test_bandwidth_test_is_window_active_wrong_weekday", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L60", + "weight": 1.0, + "source": "sync_test_bandwidth_test_is_window_active_wrong_weekday", + "target": "config_models_bandwidthwindow" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L61", + "weight": 1.0, + "source": "sync_test_bandwidth_test_is_window_active_wrong_weekday", + "target": "sync_bandwidth_is_window_active" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L65", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_unlimited_when_upload_mbps_none", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L66", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_unlimited_when_upload_mbps_none", + "target": "sync_bandwidth_effective_bandwidth_limit_kibps" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L70", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_unlimited_when_outside_schedule", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L72", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_unlimited_when_outside_schedule", + "target": "config_models_bandwidthwindow" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L75", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_unlimited_when_outside_schedule", + "target": "sync_bandwidth_effective_bandwidth_limit_kibps" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L79", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_inside_schedule", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L81", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_inside_schedule", + "target": "config_models_bandwidthwindow" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L83", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_inside_schedule", + "target": "sync_bandwidth_effective_bandwidth_limit_kibps" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L83", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_inside_schedule", + "target": "sync_bandwidth_mbps_to_kibps" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L87", + "weight": 1.0, + "source": "sync_test_bandwidth_rationale_87", + "target": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L88", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L89", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", + "target": "sync_bandwidth_effective_bandwidth_limit_kibps" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L89", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_when_no_schedule", + "target": "sync_bandwidth_mbps_to_kibps" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L93", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L96", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", + "target": "config_models_bandwidthwindow" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L100", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", + "target": "sync_bandwidth_effective_bandwidth_limit_kibps" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_bandwidth.py", + "source_location": "L100", + "weight": 1.0, + "source": "sync_test_bandwidth_test_effective_throttled_in_first_matching_window", + "target": "sync_bandwidth_mbps_to_kibps" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L22", + "weight": 1.0, + "source": "tests_unit_sync_test_cleanup_py", + "target": "sync_test_cleanup_job", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L38", + "weight": 1.0, + "source": "tests_unit_sync_test_cleanup_py", + "target": "sync_test_cleanup_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_unit_sync_test_cleanup_py", + "target": "sync_test_cleanup_test_all_interlocks_pass", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L65", + "weight": 1.0, + "source": "tests_unit_sync_test_cleanup_py", + "target": "sync_test_cleanup_test_min_verify_passes_blocks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L77", + "weight": 1.0, + "source": "tests_unit_sync_test_cleanup_py", + "target": "sync_test_cleanup_test_min_age_hours_blocks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L90", + "weight": 1.0, + "source": "tests_unit_sync_test_cleanup_py", + "target": "sync_test_cleanup_test_remote_stat_failure_blocks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L102", + "weight": 1.0, + "source": "tests_unit_sync_test_cleanup_py", + "target": "sync_test_cleanup_test_recent_revocation_blocks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L124", + "weight": 1.0, + "source": "tests_unit_sync_test_cleanup_py", + "target": "sync_test_cleanup_test_old_revocation_does_not_block", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L145", + "weight": 1.0, + "source": "tests_unit_sync_test_cleanup_py", + "target": "sync_test_cleanup_test_missing_verified_at_blocks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L157", + "weight": 1.0, + "source": "tests_unit_sync_test_cleanup_py", + "target": "sync_test_cleanup_test_has_recent_revocation_with_malformed_timestamp_is_recent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L172", + "weight": 1.0, + "source": "tests_unit_sync_test_cleanup_py", + "target": "sync_test_cleanup_test_has_recent_revocation_ignores_non_tombstones", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_test_cleanup_rationale_1", + "target": "tests_unit_sync_test_cleanup_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L56", + "weight": 1.0, + "source": "sync_test_cleanup_test_all_interlocks_pass", + "target": "sync_test_cleanup_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L68", + "weight": 1.0, + "source": "sync_test_cleanup_test_min_verify_passes_blocks", + "target": "sync_test_cleanup_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L81", + "weight": 1.0, + "source": "sync_test_cleanup_test_min_age_hours_blocks", + "target": "sync_test_cleanup_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L93", + "weight": 1.0, + "source": "sync_test_cleanup_test_remote_stat_failure_blocks", + "target": "sync_test_cleanup_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L115", + "weight": 1.0, + "source": "sync_test_cleanup_test_recent_revocation_blocks", + "target": "sync_test_cleanup_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L136", + "weight": 1.0, + "source": "sync_test_cleanup_test_old_revocation_does_not_block", + "target": "sync_test_cleanup_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L148", + "weight": 1.0, + "source": "sync_test_cleanup_test_missing_verified_at_blocks", + "target": "sync_test_cleanup_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L27", + "weight": 1.0, + "source": "sync_test_cleanup_job", + "target": "sync_queue_syncjobrow" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L59", + "weight": 1.0, + "source": "sync_test_cleanup_test_all_interlocks_pass", + "target": "sync_test_cleanup_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L71", + "weight": 1.0, + "source": "sync_test_cleanup_test_min_verify_passes_blocks", + "target": "sync_test_cleanup_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L84", + "weight": 1.0, + "source": "sync_test_cleanup_test_min_age_hours_blocks", + "target": "sync_test_cleanup_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L96", + "weight": 1.0, + "source": "sync_test_cleanup_test_remote_stat_failure_blocks", + "target": "sync_test_cleanup_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L118", + "weight": 1.0, + "source": "sync_test_cleanup_test_recent_revocation_blocks", + "target": "sync_test_cleanup_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L139", + "weight": 1.0, + "source": "sync_test_cleanup_test_old_revocation_does_not_block", + "target": "sync_test_cleanup_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L151", + "weight": 1.0, + "source": "sync_test_cleanup_test_missing_verified_at_blocks", + "target": "sync_test_cleanup_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L45", + "weight": 1.0, + "source": "sync_test_cleanup_config", + "target": "config_models_nascleanupconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L54", + "weight": 1.0, + "source": "sync_test_cleanup_rationale_54", + "target": "sync_test_cleanup_test_all_interlocks_pass", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L55", + "weight": 1.0, + "source": "sync_test_cleanup_test_all_interlocks_pass", + "target": "sync_cleanup_cleanup_interlocks_satisfied" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L66", + "weight": 1.0, + "source": "sync_test_cleanup_rationale_66", + "target": "sync_test_cleanup_test_min_verify_passes_blocks", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L67", + "weight": 1.0, + "source": "sync_test_cleanup_test_min_verify_passes_blocks", + "target": "sync_cleanup_cleanup_interlocks_satisfied" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L78", + "weight": 1.0, + "source": "sync_test_cleanup_rationale_78", + "target": "sync_test_cleanup_test_min_age_hours_blocks", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L80", + "weight": 1.0, + "source": "sync_test_cleanup_test_min_age_hours_blocks", + "target": "sync_cleanup_cleanup_interlocks_satisfied" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L91", + "weight": 1.0, + "source": "sync_test_cleanup_rationale_91", + "target": "sync_test_cleanup_test_remote_stat_failure_blocks", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L92", + "weight": 1.0, + "source": "sync_test_cleanup_test_remote_stat_failure_blocks", + "target": "sync_cleanup_cleanup_interlocks_satisfied" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L103", + "weight": 1.0, + "source": "sync_test_cleanup_rationale_103", + "target": "sync_test_cleanup_test_recent_revocation_blocks", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L114", + "weight": 1.0, + "source": "sync_test_cleanup_test_recent_revocation_blocks", + "target": "sync_cleanup_cleanup_interlocks_satisfied" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L135", + "weight": 1.0, + "source": "sync_test_cleanup_test_old_revocation_does_not_block", + "target": "sync_cleanup_cleanup_interlocks_satisfied" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L146", + "weight": 1.0, + "source": "sync_test_cleanup_rationale_146", + "target": "sync_test_cleanup_test_missing_verified_at_blocks", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L147", + "weight": 1.0, + "source": "sync_test_cleanup_test_missing_verified_at_blocks", + "target": "sync_cleanup_cleanup_interlocks_satisfied" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L158", + "weight": 1.0, + "source": "sync_test_cleanup_rationale_158", + "target": "sync_test_cleanup_test_has_recent_revocation_with_malformed_timestamp_is_recent", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L169", + "weight": 1.0, + "source": "sync_test_cleanup_test_has_recent_revocation_with_malformed_timestamp_is_recent", + "target": "sync_cleanup_has_recent_revocation" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L173", + "weight": 1.0, + "source": "sync_test_cleanup_rationale_173", + "target": "sync_test_cleanup_test_has_recent_revocation_ignores_non_tombstones", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_cleanup.py", + "source_location": "L184", + "weight": 1.0, + "source": "sync_test_cleanup_test_has_recent_revocation_ignores_non_tombstones", + "target": "sync_cleanup_has_recent_revocation" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_init_rationale_1", + "target": "tests_unit_sync_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_init_rationale_1", + "target": "src_exlab_wizard_sync_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L26", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_queue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L35", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_insert_creates_queued_row", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L45", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_insert_unique_constraint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_files_column_round_trips", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L62", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_files_column_defaults_to_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L71", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_requeue_with_files_resets_terminal_job", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L83", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_get_by_id_and_run_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L92", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_get_missing_returns_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L97", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_transition_forward", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L106", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_transition_unknown_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L111", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_transition_increments_verify_passes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L123", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_record_failure_increments_attempts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L132", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_record_failure_terminal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L139", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_record_failure_terminal_after_max_attempts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L148", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_compute_next_attempt_at_uses_schedule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L158", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_compute_next_attempt_at_out_of_range", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L164", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_persistence_across_reinit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L180", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_init_replays_running_to_queued", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L197", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_list_in_state_returns_only_matching", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L207", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_list_all_orders_by_enqueued_at", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L215", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_reset_to_queued_clears_attempts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L224", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_reset_to_queued_unknown_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L229", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_record_failure_unknown_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L234", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_delete_removes_row", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L240", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_is_terminal_classifies_states", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L247", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_init_required_before_use", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L254", + "weight": 1.0, + "source": "tests_unit_sync_test_queue_py", + "target": "sync_test_queue_test_close_is_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_test_queue_rationale_1", + "target": "tests_unit_sync_test_queue_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L27", + "weight": 1.0, + "source": "sync_test_queue_queue", + "target": "sync_queue_syncqueue" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L36", + "weight": 1.0, + "source": "sync_test_queue_rationale_36", + "target": "sync_test_queue_test_insert_creates_queued_row", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L46", + "weight": 1.0, + "source": "sync_test_queue_rationale_46", + "target": "sync_test_queue_test_insert_unique_constraint", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L53", + "weight": 1.0, + "source": "sync_test_queue_rationale_53", + "target": "sync_test_queue_test_files_column_round_trips", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L63", + "weight": 1.0, + "source": "sync_test_queue_rationale_63", + "target": "sync_test_queue_test_files_column_defaults_to_empty", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L72", + "weight": 1.0, + "source": "sync_test_queue_rationale_72", + "target": "sync_test_queue_test_requeue_with_files_resets_terminal_job", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L149", + "weight": 1.0, + "source": "sync_test_queue_rationale_149", + "target": "sync_test_queue_test_compute_next_attempt_at_uses_schedule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L153", + "weight": 1.0, + "source": "sync_test_queue_test_compute_next_attempt_at_uses_schedule", + "target": "sync_queue_compute_next_attempt_at" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L159", + "weight": 1.0, + "source": "sync_test_queue_rationale_159", + "target": "sync_test_queue_test_compute_next_attempt_at_out_of_range", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L160", + "weight": 1.0, + "source": "sync_test_queue_test_compute_next_attempt_at_out_of_range", + "target": "sync_queue_compute_next_attempt_at" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L165", + "weight": 1.0, + "source": "sync_test_queue_rationale_165", + "target": "sync_test_queue_test_persistence_across_reinit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L167", + "weight": 1.0, + "source": "sync_test_queue_test_persistence_across_reinit", + "target": "sync_queue_syncqueue" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L181", + "weight": 1.0, + "source": "sync_test_queue_rationale_181", + "target": "sync_test_queue_test_init_replays_running_to_queued", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L183", + "weight": 1.0, + "source": "sync_test_queue_test_init_replays_running_to_queued", + "target": "sync_queue_syncqueue" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L248", + "weight": 1.0, + "source": "sync_test_queue_rationale_248", + "target": "sync_test_queue_test_init_required_before_use", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L249", + "weight": 1.0, + "source": "sync_test_queue_test_init_required_before_use", + "target": "sync_queue_syncqueue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_queue.py", + "source_location": "L255", + "weight": 1.0, + "source": "sync_test_queue_test_close_is_idempotent", + "target": "sync_queue_syncqueue" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L55", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_make_creation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L106", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L119", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_make_push_factory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L136", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_writer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L145", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L176", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L206", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L254", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_status_returns_none_when_no_job", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L275", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_retry_resets_failed_to_queued", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L310", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_force_verify_returns_self_consistent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L334", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L376", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L402", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L435", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L469", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_close_is_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L487", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L509", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L536", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L564", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L599", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L636", + "weight": 1.0, + "source": "tests_unit_sync_test_nas_client_py", + "target": "sync_test_nas_client_test_apply_config_swaps_equipment_map", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_1", + "target": "tests_unit_sync_test_nas_client_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L149", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L177", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L210", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L255", + "weight": 1.0, + "source": "sync_test_nas_client_test_status_returns_none_when_no_job", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L276", + "weight": 1.0, + "source": "sync_test_nas_client_test_retry_resets_failed_to_queued", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L311", + "weight": 1.0, + "source": "sync_test_nas_client_test_force_verify_returns_self_consistent", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L338", + "weight": 1.0, + "source": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L377", + "weight": 1.0, + "source": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L406", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L439", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L470", + "weight": 1.0, + "source": "sync_test_nas_client_test_close_is_idempotent", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L491", + "weight": 1.0, + "source": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L513", + "weight": 1.0, + "source": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L538", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L568", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L603", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L639", + "weight": 1.0, + "source": "sync_test_nas_client_test_apply_config_swaps_equipment_map", + "target": "sync_test_nas_client_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L57", + "weight": 1.0, + "source": "sync_test_nas_client_build_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L63", + "weight": 1.0, + "source": "sync_test_nas_client_build_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L68", + "weight": 1.0, + "source": "sync_test_nas_client_build_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L73", + "weight": 1.0, + "source": "sync_test_nas_client_build_config", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L77", + "weight": 1.0, + "source": "sync_test_nas_client_build_config", + "target": "config_models_nascleanupconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L114", + "weight": 1.0, + "source": "sync_test_nas_client_populate_run", + "target": "sync_test_nas_client_make_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L155", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", + "target": "sync_test_nas_client_make_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L236", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", + "target": "sync_test_nas_client_make_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L87", + "weight": 1.0, + "source": "sync_test_nas_client_make_creation", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L93", + "weight": 1.0, + "source": "sync_test_nas_client_make_creation", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L94", + "weight": 1.0, + "source": "sync_test_nas_client_make_creation", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L101", + "weight": 1.0, + "source": "sync_test_nas_client_make_creation", + "target": "api_schemas_pathsblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L178", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", + "target": "sync_test_nas_client_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L277", + "weight": 1.0, + "source": "sync_test_nas_client_test_retry_resets_failed_to_queued", + "target": "sync_test_nas_client_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L312", + "weight": 1.0, + "source": "sync_test_nas_client_test_force_verify_returns_self_consistent", + "target": "sync_test_nas_client_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L339", + "weight": 1.0, + "source": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", + "target": "sync_test_nas_client_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L378", + "weight": 1.0, + "source": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", + "target": "sync_test_nas_client_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L407", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", + "target": "sync_test_nas_client_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L440", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", + "target": "sync_test_nas_client_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L492", + "weight": 1.0, + "source": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", + "target": "sync_test_nas_client_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L539", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", + "target": "sync_test_nas_client_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L569", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", + "target": "sync_test_nas_client_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L604", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", + "target": "sync_test_nas_client_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L107", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_107", + "target": "sync_test_nas_client_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L163", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", + "target": "sync_test_nas_client_make_push_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L185", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", + "target": "sync_test_nas_client_make_push_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L244", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", + "target": "sync_test_nas_client_make_push_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L261", + "weight": 1.0, + "source": "sync_test_nas_client_test_status_returns_none_when_no_job", + "target": "sync_test_nas_client_make_push_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L285", + "weight": 1.0, + "source": "sync_test_nas_client_test_retry_resets_failed_to_queued", + "target": "sync_test_nas_client_make_push_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L319", + "weight": 1.0, + "source": "sync_test_nas_client_test_force_verify_returns_self_consistent", + "target": "sync_test_nas_client_make_push_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L346", + "weight": 1.0, + "source": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", + "target": "sync_test_nas_client_make_push_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L385", + "weight": 1.0, + "source": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", + "target": "sync_test_nas_client_make_push_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L414", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", + "target": "sync_test_nas_client_make_push_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L576", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", + "target": "sync_test_nas_client_make_push_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L643", + "weight": 1.0, + "source": "sync_test_nas_client_test_apply_config_swaps_equipment_map", + "target": "sync_test_nas_client_make_push_factory", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L122", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_122", + "target": "sync_test_nas_client_make_push_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L137", + "weight": 1.0, + "source": "sync_test_nas_client_writer", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L148", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_148", + "target": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L158", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_blocks_run_with_hard_finding_no_override", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L180", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_clean_run_creates_queued_row", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L209", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_209", + "target": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L217", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", + "target": "api_schemas_override_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L218", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", + "target": "api_schemas_overrideentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L239", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_with_active_override_unblocks", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L256", + "weight": 1.0, + "source": "sync_test_nas_client_test_status_returns_none_when_no_job", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L279", + "weight": 1.0, + "source": "sync_test_nas_client_test_retry_resets_failed_to_queued", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L314", + "weight": 1.0, + "source": "sync_test_nas_client_test_force_verify_returns_self_consistent", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L337", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_337", + "target": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L341", + "weight": 1.0, + "source": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L350", + "weight": 1.0, + "source": "sync_test_nas_client_test_worker_drives_to_verified_and_marks_synced", + "target": "sync_helpers_local_check_factory" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L380", + "weight": 1.0, + "source": "sync_test_nas_client_test_worker_terminal_failed_on_auth_error", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L405", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_405", + "target": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L409", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_existing_failed_resets_to_queued", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L438", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_438", + "target": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L452", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_idempotent_for_already_queued_row", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L471", + "weight": 1.0, + "source": "sync_test_nas_client_test_close_is_idempotent", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L490", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_490", + "target": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L493", + "weight": 1.0, + "source": "sync_test_nas_client_test_mark_cleaned_writes_cleaned_to_creation_json", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L512", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_512", + "target": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L517", + "weight": 1.0, + "source": "sync_test_nas_client_test_mark_cleaned_is_noop_when_creation_json_missing", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L537", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_537", + "target": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L545", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_with_files_inserts_subset", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L567", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_567", + "target": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L571", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_requeues_terminal_job_with_new_files", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L602", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_602", + "target": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L610", + "weight": 1.0, + "source": "sync_test_nas_client_test_enqueue_noops_active_job_with_new_files", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L637", + "weight": 1.0, + "source": "sync_test_nas_client_rationale_637", + "target": "sync_test_nas_client_test_apply_config_swaps_equipment_map", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L638", + "weight": 1.0, + "source": "sync_test_nas_client_test_apply_config_swaps_equipment_map", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L642", + "weight": 1.0, + "source": "sync_test_nas_client_test_apply_config_swaps_equipment_map", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L648", + "weight": 1.0, + "source": "sync_test_nas_client_test_apply_config_swaps_equipment_map", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L650", + "weight": 1.0, + "source": "sync_test_nas_client_test_apply_config_swaps_equipment_map", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L655", + "weight": 1.0, + "source": "sync_test_nas_client_test_apply_config_swaps_equipment_map", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_nas_client.py", + "source_location": "L660", + "weight": 1.0, + "source": "sync_test_nas_client_test_apply_config_swaps_equipment_map", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L28", + "weight": 1.0, + "source": "tests_unit_sync_test_pre_sync_gate_py", + "target": "sync_test_pre_sync_gate_build_creation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L58", + "weight": 1.0, + "source": "tests_unit_sync_test_pre_sync_gate_py", + "target": "sync_test_pre_sync_gate_validator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L62", + "weight": 1.0, + "source": "tests_unit_sync_test_pre_sync_gate_py", + "target": "sync_test_pre_sync_gate_test_clean_run_is_eligible", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L78", + "weight": 1.0, + "source": "tests_unit_sync_test_pre_sync_gate_py", + "target": "sync_test_pre_sync_gate_test_hard_finding_blocks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L94", + "weight": 1.0, + "source": "tests_unit_sync_test_pre_sync_gate_py", + "target": "sync_test_pre_sync_gate_test_active_override_unblocks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L130", + "weight": 1.0, + "source": "tests_unit_sync_test_pre_sync_gate_py", + "target": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L165", + "weight": 1.0, + "source": "tests_unit_sync_test_pre_sync_gate_py", + "target": "sync_test_pre_sync_gate_test_soft_finding_does_not_block", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_rationale_1", + "target": "tests_unit_sync_test_pre_sync_gate_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L68", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_clean_run_is_eligible", + "target": "sync_test_pre_sync_gate_build_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L84", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_hard_finding_blocks", + "target": "sync_test_pre_sync_gate_build_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L120", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_active_override_unblocks", + "target": "sync_test_pre_sync_gate_build_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L155", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", + "target": "sync_test_pre_sync_gate_build_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L177", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_soft_finding_does_not_block", + "target": "sync_test_pre_sync_gate_build_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L34", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_build_creation", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L40", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_build_creation", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L45", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_build_creation", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L52", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_build_creation", + "target": "api_schemas_pathsblock" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L63", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_rationale_63", + "target": "sync_test_pre_sync_gate_test_clean_run_is_eligible", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L69", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_clean_run_is_eligible", + "target": "sync_pre_sync_gate_is_eligible" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L79", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_rationale_79", + "target": "sync_test_pre_sync_gate_test_hard_finding_blocks", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L85", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_hard_finding_blocks", + "target": "sync_pre_sync_gate_is_eligible" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L95", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_rationale_95", + "target": "sync_test_pre_sync_gate_test_active_override_unblocks", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L101", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_active_override_unblocks", + "target": "api_schemas_override_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L102", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_active_override_unblocks", + "target": "api_schemas_overrideentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L121", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_active_override_unblocks", + "target": "sync_pre_sync_gate_is_eligible" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L131", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_rationale_131", + "target": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L137", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", + "target": "api_schemas_override_entry_to_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L138", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", + "target": "api_schemas_overrideentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L156", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_revoked_override_does_not_unblock", + "target": "sync_pre_sync_gate_is_eligible" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L166", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_rationale_166", + "target": "sync_test_pre_sync_gate_test_soft_finding_does_not_block", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/test_pre_sync_gate.py", + "source_location": "L178", + "weight": 1.0, + "source": "sync_test_pre_sync_gate_test_soft_finding_does_not_block", + "target": "sync_pre_sync_gate_is_eligible" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_unit_sync_helpers_py", + "target": "sync_helpers_read_files_from", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L40", + "weight": 1.0, + "source": "tests_unit_sync_helpers_py", + "target": "sync_helpers_local_check_factory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L59", + "weight": 1.0, + "source": "tests_unit_sync_helpers_py", + "target": "sync_helpers_corrupt_one_check_factory", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_helpers_rationale_1", + "target": "tests_unit_sync_helpers_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L30", + "weight": 1.0, + "source": "sync_helpers_rationale_30", + "target": "sync_helpers_read_files_from", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L41", + "weight": 1.0, + "source": "sync_helpers_rationale_41", + "target": "sync_helpers_local_check_factory", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/_helpers.py", + "source_location": "L62", + "weight": 1.0, + "source": "sync_helpers_rationale_62", + "target": "sync_helpers_corrupt_one_check_factory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L36", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_rclone_env_py", + "target": "transports_test_rclone_env_test_build_rclone_env_sftp_emits_all_keys", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L59", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_rclone_env_py", + "target": "transports_test_rclone_env_test_build_rclone_env_smb_minimal_omits_domain", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L83", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_rclone_env_py", + "target": "transports_test_rclone_env_test_build_rclone_env_smb_with_domain_includes_domain_key", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L100", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_rclone_env_py", + "target": "transports_test_rclone_env_test_pass_env_keys_for_names_only_the_password_key", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L111", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_rclone_env_py", + "target": "transports_test_rclone_env_keyring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L122", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_rclone_env_py", + "target": "transports_test_rclone_env_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L131", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_rclone_env_py", + "target": "transports_test_rclone_env_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L157", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_rclone_env_py", + "target": "transports_test_rclone_env_test_resolve_env_raises_auth_when_keyring_store_is_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L164", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_rclone_env_py", + "target": "transports_test_rclone_env_test_resolve_env_raises_auth_when_password_is_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L171", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_rclone_env_py", + "target": "transports_test_rclone_env_test_resolve_env_raises_auth_when_password_is_empty_string", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L178", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_rclone_env_py", + "target": "transports_test_rclone_env_test_resolve_env_raises_auth_when_keyring_backend_explodes", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L1", + "weight": 1.0, + "source": "transports_test_rclone_env_rationale_1", + "target": "tests_unit_sync_transports_test_rclone_env_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L37", + "weight": 1.0, + "source": "transports_test_rclone_env_test_build_rclone_env_sftp_emits_all_keys", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L43", + "weight": 1.0, + "source": "transports_test_rclone_env_test_build_rclone_env_sftp_emits_all_keys", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L45", + "weight": 1.0, + "source": "transports_test_rclone_env_test_build_rclone_env_sftp_emits_all_keys", + "target": "transports_rclone_build_rclone_env" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L60", + "weight": 1.0, + "source": "transports_test_rclone_env_test_build_rclone_env_smb_minimal_omits_domain", + "target": "config_models_rclonesmbtransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L66", + "weight": 1.0, + "source": "transports_test_rclone_env_test_build_rclone_env_smb_minimal_omits_domain", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L68", + "weight": 1.0, + "source": "transports_test_rclone_env_test_build_rclone_env_smb_minimal_omits_domain", + "target": "transports_rclone_build_rclone_env" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L84", + "weight": 1.0, + "source": "transports_test_rclone_env_test_build_rclone_env_smb_with_domain_includes_domain_key", + "target": "config_models_rclonesmbtransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L90", + "weight": 1.0, + "source": "transports_test_rclone_env_test_build_rclone_env_smb_with_domain_includes_domain_key", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L92", + "weight": 1.0, + "source": "transports_test_rclone_env_test_build_rclone_env_smb_with_domain_includes_domain_key", + "target": "transports_rclone_build_rclone_env" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L101", + "weight": 1.0, + "source": "transports_test_rclone_env_rationale_101", + "target": "transports_test_rclone_env_test_pass_env_keys_for_names_only_the_password_key", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L102", + "weight": 1.0, + "source": "transports_test_rclone_env_test_pass_env_keys_for_names_only_the_password_key", + "target": "transports_rclone_pass_env_keys_for" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L114", + "weight": 1.0, + "source": "transports_test_rclone_env_keyring", + "target": "transports_test_rclone_env_keyring_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L117", + "weight": 1.0, + "source": "transports_test_rclone_env_keyring", + "target": "transports_test_rclone_env_keyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L167", + "weight": 1.0, + "source": "transports_test_rclone_env_test_resolve_env_raises_auth_when_password_is_none", + "target": "transports_test_rclone_env_keyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L174", + "weight": 1.0, + "source": "transports_test_rclone_env_test_resolve_env_raises_auth_when_password_is_empty_string", + "target": "transports_test_rclone_env_keyring", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L112", + "weight": 1.0, + "source": "transports_test_rclone_env_rationale_112", + "target": "transports_test_rclone_env_keyring", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L18", + "weight": 0.8, + "source": "transports_test_rclone_env_keyring", + "target": "config_models_bandwidthconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L18", + "weight": 0.8, + "source": "transports_test_rclone_env_keyring", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L18", + "weight": 0.8, + "source": "transports_test_rclone_env_keyring", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L18", + "weight": 0.8, + "source": "transports_test_rclone_env_keyring", + "target": "config_models_rclonesmbtransport", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L125", + "weight": 1.0, + "source": "transports_test_rclone_env_brokenkeyring", + "target": "transports_test_rclone_env_brokenkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L187", + "weight": 1.0, + "source": "transports_test_rclone_env_test_resolve_env_raises_auth_when_keyring_backend_explodes", + "target": "transports_test_rclone_env_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L123", + "weight": 1.0, + "source": "transports_test_rclone_env_rationale_123", + "target": "transports_test_rclone_env_brokenkeyring", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L18", + "weight": 0.8, + "source": "transports_test_rclone_env_brokenkeyring", + "target": "config_models_bandwidthconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L18", + "weight": 0.8, + "source": "transports_test_rclone_env_brokenkeyring", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L18", + "weight": 0.8, + "source": "transports_test_rclone_env_brokenkeyring", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L18", + "weight": 0.8, + "source": "transports_test_rclone_env_brokenkeyring", + "target": "config_models_rclonesmbtransport", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L158", + "weight": 1.0, + "source": "transports_test_rclone_env_test_resolve_env_raises_auth_when_keyring_store_is_none", + "target": "transports_test_rclone_env_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L165", + "weight": 1.0, + "source": "transports_test_rclone_env_test_resolve_env_raises_auth_when_password_is_none", + "target": "transports_test_rclone_env_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L172", + "weight": 1.0, + "source": "transports_test_rclone_env_test_resolve_env_raises_auth_when_password_is_empty_string", + "target": "transports_test_rclone_env_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L185", + "weight": 1.0, + "source": "transports_test_rclone_env_test_resolve_env_raises_auth_when_keyring_backend_explodes", + "target": "transports_test_rclone_env_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L133", + "weight": 1.0, + "source": "transports_test_rclone_env_equipment", + "target": "config_models_rclonesmbtransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L138", + "weight": 1.0, + "source": "transports_test_rclone_env_equipment", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L141", + "weight": 1.0, + "source": "transports_test_rclone_env_equipment", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L148", + "weight": 1.0, + "source": "transports_test_rclone_env_equipment", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L160", + "weight": 1.0, + "source": "transports_test_rclone_env_test_resolve_env_raises_auth_when_keyring_store_is_none", + "target": "sync_nas_client_resolve_env_for_equipment" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L167", + "weight": 1.0, + "source": "transports_test_rclone_env_test_resolve_env_raises_auth_when_password_is_none", + "target": "sync_nas_client_resolve_env_for_equipment" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L174", + "weight": 1.0, + "source": "transports_test_rclone_env_test_resolve_env_raises_auth_when_password_is_empty_string", + "target": "sync_nas_client_resolve_env_for_equipment" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L179", + "weight": 1.0, + "source": "transports_test_rclone_env_rationale_179", + "target": "transports_test_rclone_env_test_resolve_env_raises_auth_when_keyring_backend_explodes", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_rclone_env.py", + "source_location": "L187", + "weight": 1.0, + "source": "transports_test_rclone_env_test_resolve_env_raises_auth_when_keyring_backend_explodes", + "target": "sync_nas_client_resolve_env_for_equipment" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L19", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_run_py", + "target": "transports_test_run_test_run_subprocess_returns_rc_and_streams", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L28", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_run_py", + "target": "transports_test_run_test_run_subprocess_forwards_env", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L38", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_run_py", + "target": "transports_test_run_test_run_subprocess_preserves_existing_environ", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L56", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_run_py", + "target": "transports_test_run_test_run_subprocess_pipes_stdin_payload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L66", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_run_py", + "target": "transports_test_run_test_run_subprocess_masks_named_env_in_debug_log", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_unit_sync_transports_test_run_py", + "target": "transports_test_run_test_run_subprocess_omits_env_log_when_env_is_none", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L1", + "weight": 1.0, + "source": "transports_test_run_rationale_1", + "target": "tests_unit_sync_transports_test_run_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L20", + "weight": 1.0, + "source": "transports_test_run_test_run_subprocess_returns_rc_and_streams", + "target": "transports_run_run_subprocess" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L29", + "weight": 1.0, + "source": "transports_test_run_rationale_29", + "target": "transports_test_run_test_run_subprocess_forwards_env", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L30", + "weight": 1.0, + "source": "transports_test_run_test_run_subprocess_forwards_env", + "target": "transports_run_run_subprocess" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L39", + "weight": 1.0, + "source": "transports_test_run_rationale_39", + "target": "transports_test_run_test_run_subprocess_preserves_existing_environ", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L44", + "weight": 1.0, + "source": "transports_test_run_test_run_subprocess_preserves_existing_environ", + "target": "transports_run_run_subprocess" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L57", + "weight": 1.0, + "source": "transports_test_run_rationale_57", + "target": "transports_test_run_test_run_subprocess_pipes_stdin_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L58", + "weight": 1.0, + "source": "transports_test_run_test_run_subprocess_pipes_stdin_payload", + "target": "transports_run_run_subprocess" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L67", + "weight": 1.0, + "source": "transports_test_run_rationale_67", + "target": "transports_test_run_test_run_subprocess_masks_named_env_in_debug_log", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L69", + "weight": 1.0, + "source": "transports_test_run_test_run_subprocess_masks_named_env_in_debug_log", + "target": "transports_run_run_subprocess" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L87", + "weight": 1.0, + "source": "transports_test_run_rationale_87", + "target": "transports_test_run_test_run_subprocess_omits_env_log_when_env_is_none", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/sync/transports/test_run.py", + "source_location": "L89", + "weight": 1.0, + "source": "transports_test_run_test_run_subprocess_omits_env_log_when_env_is_none", + "target": "transports_run_run_subprocess" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_reset_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L34", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_make_handler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_make_record", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L60", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_test_writes_to_equipment_scoped_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L76", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_test_writes_to_separate_files_per_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L103", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L129", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L152", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_test_emit_without_equipment_id_writes_no_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L164", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L181", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_test_fsync_invoked_only_on_error_level", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L199", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L217", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_test_close_drains_cached_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L232", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_test_close_is_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L247", + "weight": 1.0, + "source": "tests_unit_logging_test_handlers_py", + "target": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L1", + "weight": 1.0, + "source": "logging_test_handlers_rationale_1", + "target": "tests_unit_logging_test_handlers_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L30", + "weight": 1.0, + "source": "logging_test_handlers_rationale_30", + "target": "logging_test_handlers_reset_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L31", + "weight": 1.0, + "source": "logging_test_handlers_reset_context", + "target": "logging_context_clear_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L61", + "weight": 1.0, + "source": "logging_test_handlers_test_writes_to_equipment_scoped_path", + "target": "logging_test_handlers_make_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L77", + "weight": 1.0, + "source": "logging_test_handlers_test_writes_to_separate_files_per_equipment", + "target": "logging_test_handlers_make_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L104", + "weight": 1.0, + "source": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", + "target": "logging_test_handlers_make_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L130", + "weight": 1.0, + "source": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", + "target": "logging_test_handlers_make_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L153", + "weight": 1.0, + "source": "logging_test_handlers_test_emit_without_equipment_id_writes_no_file", + "target": "logging_test_handlers_make_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L165", + "weight": 1.0, + "source": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", + "target": "logging_test_handlers_make_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L182", + "weight": 1.0, + "source": "logging_test_handlers_test_fsync_invoked_only_on_error_level", + "target": "logging_test_handlers_make_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L200", + "weight": 1.0, + "source": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", + "target": "logging_test_handlers_make_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L218", + "weight": 1.0, + "source": "logging_test_handlers_test_close_drains_cached_files", + "target": "logging_test_handlers_make_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L233", + "weight": 1.0, + "source": "logging_test_handlers_test_close_is_idempotent", + "target": "logging_test_handlers_make_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L252", + "weight": 1.0, + "source": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", + "target": "logging_test_handlers_make_handler", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L35", + "weight": 1.0, + "source": "logging_test_handlers_rationale_35", + "target": "logging_test_handlers_make_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L36", + "weight": 1.0, + "source": "logging_test_handlers_make_handler", + "target": "logging_handlers_equipmentscopedfilehandler" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L37", + "weight": 1.0, + "source": "logging_test_handlers_make_handler", + "target": "logging_format_structuredtagformatter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L100", + "weight": 1.0, + "source": "components_filter_chips_filter_chips", + "target": "logging_test_handlers_make_handler" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L67", + "weight": 1.0, + "source": "logging_test_handlers_test_writes_to_equipment_scoped_path", + "target": "logging_test_handlers_make_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L86", + "weight": 1.0, + "source": "logging_test_handlers_test_writes_to_separate_files_per_equipment", + "target": "logging_test_handlers_make_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L107", + "weight": 1.0, + "source": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", + "target": "logging_test_handlers_make_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L141", + "weight": 1.0, + "source": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", + "target": "logging_test_handlers_make_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L156", + "weight": 1.0, + "source": "logging_test_handlers_test_emit_without_equipment_id_writes_no_file", + "target": "logging_test_handlers_make_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L170", + "weight": 1.0, + "source": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", + "target": "logging_test_handlers_make_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L186", + "weight": 1.0, + "source": "logging_test_handlers_test_fsync_invoked_only_on_error_level", + "target": "logging_test_handlers_make_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L204", + "weight": 1.0, + "source": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", + "target": "logging_test_handlers_make_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L221", + "weight": 1.0, + "source": "logging_test_handlers_test_close_drains_cached_files", + "target": "logging_test_handlers_make_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L235", + "weight": 1.0, + "source": "logging_test_handlers_test_close_is_idempotent", + "target": "logging_test_handlers_make_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L258", + "weight": 1.0, + "source": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", + "target": "logging_test_handlers_make_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L66", + "weight": 1.0, + "source": "logging_test_handlers_test_writes_to_equipment_scoped_path", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L85", + "weight": 1.0, + "source": "logging_test_handlers_test_writes_to_separate_files_per_equipment", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L106", + "weight": 1.0, + "source": "logging_test_handlers_test_subsequent_emits_reuse_the_same_file_descriptor", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L139", + "weight": 1.0, + "source": "logging_test_handlers_test_one_open_per_equipment_even_with_many_emits", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L169", + "weight": 1.0, + "source": "logging_test_handlers_test_emit_with_explicit_none_equipment_skipped", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L185", + "weight": 1.0, + "source": "logging_test_handlers_test_fsync_invoked_only_on_error_level", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L203", + "weight": 1.0, + "source": "logging_test_handlers_test_fsync_on_error_passes_correct_fd", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L220", + "weight": 1.0, + "source": "logging_test_handlers_test_close_drains_cached_files", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L234", + "weight": 1.0, + "source": "logging_test_handlers_test_close_is_idempotent", + "target": "logging_context_set_run_context" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L248", + "weight": 1.0, + "source": "logging_test_handlers_rationale_248", + "target": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_handlers.py", + "source_location": "L256", + "weight": 1.0, + "source": "logging_test_handlers_test_emit_routes_unexpected_exception_through_handle_error", + "target": "logging_context_set_run_context" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L31", + "weight": 1.0, + "source": "tests_unit_logging_test_context_py", + "target": "logging_test_context_reset_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_unit_logging_test_context_py", + "target": "logging_test_context_test_set_run_context_pushes_supplied_vars", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L56", + "weight": 1.0, + "source": "tests_unit_logging_test_context_py", + "target": "logging_test_context_test_unsupplied_vars_are_unchanged", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L70", + "weight": 1.0, + "source": "tests_unit_logging_test_context_py", + "target": "logging_test_context_test_context_exit_restores_prior_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L81", + "weight": 1.0, + "source": "tests_unit_logging_test_context_py", + "target": "logging_test_context_test_context_exit_clears_when_no_prior_value", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L88", + "weight": 1.0, + "source": "tests_unit_logging_test_context_py", + "target": "logging_test_context_test_set_run_context_with_no_args_is_noop", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L101", + "weight": 1.0, + "source": "tests_unit_logging_test_context_py", + "target": "logging_test_context_test_concurrent_asyncio_tasks_have_independent_contexts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L134", + "weight": 1.0, + "source": "tests_unit_logging_test_context_py", + "target": "logging_test_context_test_get_run_context_returns_snapshot_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L149", + "weight": 1.0, + "source": "tests_unit_logging_test_context_py", + "target": "logging_test_context_test_get_run_context_returns_all_keys_even_when_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L163", + "weight": 1.0, + "source": "tests_unit_logging_test_context_py", + "target": "logging_test_context_test_clear_run_context_resets_every_var", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L1", + "weight": 1.0, + "source": "logging_test_context_rationale_1", + "target": "tests_unit_logging_test_context_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L32", + "weight": 1.0, + "source": "logging_test_context_rationale_32", + "target": "logging_test_context_reset_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L33", + "weight": 1.0, + "source": "logging_test_context_reset_context", + "target": "logging_context_clear_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L42", + "weight": 1.0, + "source": "logging_test_context_test_set_run_context_pushes_supplied_vars", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L59", + "weight": 1.0, + "source": "logging_test_context_test_unsupplied_vars_are_unchanged", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L71", + "weight": 1.0, + "source": "logging_test_context_test_context_exit_restores_prior_values", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L83", + "weight": 1.0, + "source": "logging_test_context_test_context_exit_clears_when_no_prior_value", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L90", + "weight": 1.0, + "source": "logging_test_context_test_set_run_context_with_no_args_is_noop", + "target": "logging_context_set_run_context" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L102", + "weight": 1.0, + "source": "logging_test_context_rationale_102", + "target": "logging_test_context_test_concurrent_asyncio_tasks_have_independent_contexts", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L135", + "weight": 1.0, + "source": "logging_test_context_test_get_run_context_returns_snapshot_dict", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L136", + "weight": 1.0, + "source": "logging_test_context_test_get_run_context_returns_snapshot_dict", + "target": "logging_context_get_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L150", + "weight": 1.0, + "source": "logging_test_context_test_get_run_context_returns_all_keys_even_when_empty", + "target": "logging_context_get_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_context.py", + "source_location": "L172", + "weight": 1.0, + "source": "logging_test_context_test_clear_run_context_resets_every_var", + "target": "logging_context_clear_run_context" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L30", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_isolate_central_log", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L50", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_get_logger_importable_from_package", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L56", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_get_logger_importable_from_manager_module", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L62", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_package_and_manager_export_the_same_callable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L69", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_get_logger_returns_stdlib_logger_instance", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L76", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_get_logger_sets_name_on_returned_logger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L83", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_get_logger_is_idempotent_for_same_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_get_logger_returns_distinct_loggers_for_different_names", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L103", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_logging_package_all_contains_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L112", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_configure_logging_with_default_threshold_and_handlers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L121", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_configure_logging_applies_config_level", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L128", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_configure_logging_idempotent_does_not_accumulate_handlers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L143", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L154", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_shutdown_logging_is_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L161", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_configure_logging_installs_central_rotating_file_handler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L176", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_configure_logging_stderr_handler_is_warn_capped", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L192", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_resolve_threshold_unknown_level_falls_back_to_info", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L207", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L228", + "weight": 1.0, + "source": "tests_unit_logging_test_manager_py", + "target": "logging_test_manager_test_build_real_handlers_includes_equipment_handler_when_local_root_set", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L1", + "weight": 1.0, + "source": "logging_test_manager_rationale_1", + "target": "tests_unit_logging_test_manager_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L31", + "weight": 1.0, + "source": "logging_test_manager_rationale_31", + "target": "logging_test_manager_isolate_central_log", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L47", + "weight": 1.0, + "source": "logging_test_manager_isolate_central_log", + "target": "logging_manager_shutdown_logging" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L72", + "weight": 1.0, + "source": "logging_test_manager_test_get_logger_returns_stdlib_logger_instance", + "target": "logging_manager_get_logger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L79", + "weight": 1.0, + "source": "logging_test_manager_test_get_logger_sets_name_on_returned_logger", + "target": "logging_manager_get_logger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L88", + "weight": 1.0, + "source": "logging_test_manager_test_get_logger_is_idempotent_for_same_name", + "target": "logging_manager_get_logger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L96", + "weight": 1.0, + "source": "logging_test_manager_test_get_logger_returns_distinct_loggers_for_different_names", + "target": "logging_manager_get_logger" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L113", + "weight": 1.0, + "source": "logging_test_manager_rationale_113", + "target": "logging_test_manager_test_configure_logging_with_default_threshold_and_handlers", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L114", + "weight": 1.0, + "source": "logging_test_manager_test_configure_logging_with_default_threshold_and_handlers", + "target": "logging_manager_configure_logging" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L122", + "weight": 1.0, + "source": "logging_test_manager_rationale_122", + "target": "logging_test_manager_test_configure_logging_applies_config_level", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L123", + "weight": 1.0, + "source": "logging_test_manager_test_configure_logging_applies_config_level", + "target": "logging_manager_configure_logging" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L123", + "weight": 1.0, + "source": "logging_test_manager_test_configure_logging_applies_config_level", + "target": "config_models_loggingconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L129", + "weight": 1.0, + "source": "logging_test_manager_rationale_129", + "target": "logging_test_manager_test_configure_logging_idempotent_does_not_accumulate_handlers", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L135", + "weight": 1.0, + "source": "logging_test_manager_test_configure_logging_idempotent_does_not_accumulate_handlers", + "target": "logging_manager_configure_logging" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L144", + "weight": 1.0, + "source": "logging_test_manager_rationale_144", + "target": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L146", + "weight": 1.0, + "source": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", + "target": "logging_manager_configure_logging" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L146", + "weight": 1.0, + "source": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", + "target": "config_models_loggingconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L151", + "weight": 1.0, + "source": "logging_test_manager_test_configure_logging_routes_records_through_queue_listener", + "target": "logging_manager_shutdown_logging" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L155", + "weight": 1.0, + "source": "logging_test_manager_rationale_155", + "target": "logging_test_manager_test_shutdown_logging_is_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L156", + "weight": 1.0, + "source": "logging_test_manager_test_shutdown_logging_is_idempotent", + "target": "logging_manager_configure_logging" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L157", + "weight": 1.0, + "source": "logging_test_manager_test_shutdown_logging_is_idempotent", + "target": "logging_manager_shutdown_logging" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L162", + "weight": 1.0, + "source": "logging_test_manager_rationale_162", + "target": "logging_test_manager_test_configure_logging_installs_central_rotating_file_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L164", + "weight": 1.0, + "source": "logging_test_manager_test_configure_logging_installs_central_rotating_file_handler", + "target": "logging_manager_configure_logging" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L164", + "weight": 1.0, + "source": "logging_test_manager_test_configure_logging_installs_central_rotating_file_handler", + "target": "config_models_loggingconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L177", + "weight": 1.0, + "source": "logging_test_manager_rationale_177", + "target": "logging_test_manager_test_configure_logging_stderr_handler_is_warn_capped", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L179", + "weight": 1.0, + "source": "logging_test_manager_test_configure_logging_stderr_handler_is_warn_capped", + "target": "logging_manager_configure_logging" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L179", + "weight": 1.0, + "source": "logging_test_manager_test_configure_logging_stderr_handler_is_warn_capped", + "target": "config_models_loggingconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L193", + "weight": 1.0, + "source": "logging_test_manager_rationale_193", + "target": "logging_test_manager_test_resolve_threshold_unknown_level_falls_back_to_info", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L201", + "weight": 1.0, + "source": "logging_test_manager_test_resolve_threshold_unknown_level_falls_back_to_info", + "target": "config_models_loggingconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L203", + "weight": 1.0, + "source": "logging_test_manager_test_resolve_threshold_unknown_level_falls_back_to_info", + "target": "logging_manager_resolve_threshold" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L208", + "weight": 1.0, + "source": "logging_test_manager_rationale_208", + "target": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L217", + "weight": 1.0, + "source": "logging_test_manager_test_configure_logging_strips_pre_existing_queue_handler", + "target": "logging_manager_configure_logging" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L231", + "weight": 1.0, + "source": "logging_test_manager_rationale_231", + "target": "logging_test_manager_test_build_real_handlers_includes_equipment_handler_when_local_root_set", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L237", + "weight": 1.0, + "source": "logging_test_manager_test_build_real_handlers_includes_equipment_handler_when_local_root_set", + "target": "logging_manager_build_real_handlers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_manager.py", + "source_location": "L241", + "weight": 1.0, + "source": "logging_test_manager_test_build_real_handlers_includes_equipment_handler_when_local_root_set", + "target": "logging_format_structuredtagformatter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L21", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_reset_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L31", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_record", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L56", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_renders_all_tags_when_full_context_set", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L74", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_omits_tags_when_their_context_var_is_unset", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L84", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_emits_no_tags_when_context_is_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L90", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_level_field_is_left_padded_to_five_chars", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L111", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_timestamp_is_utc_iso_8601_with_z_suffix", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L122", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_message_with_format_args_is_rendered", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L143", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_redact_url_userinfo_password", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L147", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_redact_url_userinfo_password_with_punctuation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L154", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_redact_bearer_token", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L158", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_redact_bearer_token_lowercase", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L162", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_redact_authorization_header", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L166", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_redact_authorization_bearer_combined", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L172", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_redact_leaves_non_secret_strings_alone", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L178", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_redact_handles_url_without_password", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L183", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_redact_handles_multiple_secrets_in_one_string", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L191", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_redact_coerces_non_string_input", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L200", + "weight": 1.0, + "source": "tests_unit_logging_test_format_py", + "target": "logging_test_format_test_format_appends_exception_text_when_exc_info_set", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L1", + "weight": 1.0, + "source": "logging_test_format_rationale_1", + "target": "tests_unit_logging_test_format_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L22", + "weight": 1.0, + "source": "logging_test_format_rationale_22", + "target": "logging_test_format_reset_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L23", + "weight": 1.0, + "source": "logging_test_format_reset_context", + "target": "logging_context_clear_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L65", + "weight": 1.0, + "source": "logging_test_format_test_renders_all_tags_when_full_context_set", + "target": "logging_test_format_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L77", + "weight": 1.0, + "source": "logging_test_format_test_omits_tags_when_their_context_var_is_unset", + "target": "logging_test_format_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L86", + "weight": 1.0, + "source": "logging_test_format_test_emits_no_tags_when_context_is_empty", + "target": "logging_test_format_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L98", + "weight": 1.0, + "source": "logging_test_format_test_level_field_is_left_padded_to_five_chars", + "target": "logging_test_format_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L113", + "weight": 1.0, + "source": "logging_test_format_test_timestamp_is_utc_iso_8601_with_z_suffix", + "target": "logging_test_format_record", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L32", + "weight": 1.0, + "source": "logging_test_format_rationale_32", + "target": "logging_test_format_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L57", + "weight": 1.0, + "source": "logging_test_format_test_renders_all_tags_when_full_context_set", + "target": "logging_format_structuredtagformatter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L58", + "weight": 1.0, + "source": "logging_test_format_test_renders_all_tags_when_full_context_set", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L75", + "weight": 1.0, + "source": "logging_test_format_test_omits_tags_when_their_context_var_is_unset", + "target": "logging_format_structuredtagformatter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L76", + "weight": 1.0, + "source": "logging_test_format_test_omits_tags_when_their_context_var_is_unset", + "target": "logging_context_set_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L85", + "weight": 1.0, + "source": "logging_test_format_test_emits_no_tags_when_context_is_empty", + "target": "logging_format_structuredtagformatter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L91", + "weight": 1.0, + "source": "logging_test_format_rationale_91", + "target": "logging_test_format_test_level_field_is_left_padded_to_five_chars", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L97", + "weight": 1.0, + "source": "logging_test_format_test_level_field_is_left_padded_to_five_chars", + "target": "logging_format_structuredtagformatter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L112", + "weight": 1.0, + "source": "logging_test_format_test_timestamp_is_utc_iso_8601_with_z_suffix", + "target": "logging_format_structuredtagformatter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L123", + "weight": 1.0, + "source": "logging_test_format_test_message_with_format_args_is_rendered", + "target": "logging_format_structuredtagformatter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L144", + "weight": 1.0, + "source": "logging_test_format_test_redact_url_userinfo_password", + "target": "logging_format_redact_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L151", + "weight": 1.0, + "source": "logging_test_format_test_redact_url_userinfo_password_with_punctuation", + "target": "logging_format_redact_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L155", + "weight": 1.0, + "source": "logging_test_format_test_redact_bearer_token", + "target": "logging_format_redact_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L159", + "weight": 1.0, + "source": "logging_test_format_test_redact_bearer_token_lowercase", + "target": "logging_format_redact_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L163", + "weight": 1.0, + "source": "logging_test_format_test_redact_authorization_header", + "target": "logging_format_redact_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L169", + "weight": 1.0, + "source": "logging_test_format_test_redact_authorization_bearer_combined", + "target": "logging_format_redact_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L173", + "weight": 1.0, + "source": "logging_test_format_test_redact_leaves_non_secret_strings_alone", + "target": "logging_format_redact_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L180", + "weight": 1.0, + "source": "logging_test_format_test_redact_handles_url_without_password", + "target": "logging_format_redact_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L185", + "weight": 1.0, + "source": "logging_test_format_test_redact_handles_multiple_secrets_in_one_string", + "target": "logging_format_redact_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L196", + "weight": 1.0, + "source": "logging_test_format_test_redact_coerces_non_string_input", + "target": "logging_format_redact_secret" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L201", + "weight": 1.0, + "source": "logging_test_format_rationale_201", + "target": "logging_test_format_test_format_appends_exception_text_when_exc_info_set", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/logging/test_format.py", + "source_location": "L203", + "weight": 1.0, + "source": "logging_test_format_test_format_appends_exception_text_when_exc_info_set", + "target": "logging_format_structuredtagformatter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_scan_py", + "target": "orchestrator_test_scan_test_iter_subdirs_returns_empty_for_missing_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L27", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_scan_py", + "target": "orchestrator_test_scan_test_iter_subdirs_skips_cache_dir_and_dotfiles", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L38", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_scan_py", + "target": "orchestrator_test_scan_test_iter_subdirs_does_not_follow_symlinks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L54", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_scan_py", + "target": "orchestrator_test_scan_test_walk_run_leaves_returns_empty_when_root_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L58", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_scan_py", + "target": "orchestrator_test_scan_test_walk_run_leaves_finds_experimental_and_test_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L69", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_scan_py", + "target": "orchestrator_test_scan_test_walk_run_leaves_handles_empty_tree", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L79", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_scan_py", + "target": "orchestrator_test_scan_test_count_files_and_bytes_excludes_cache_dir_by_default", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L88", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_scan_py", + "target": "orchestrator_test_scan_test_count_files_and_bytes_includes_cache_dir_when_requested", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L97", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_scan_py", + "target": "orchestrator_test_scan_test_count_files_and_bytes_returns_zero_for_missing_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L103", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_scan_py", + "target": "orchestrator_test_scan_test_count_files_and_bytes_descends_into_subdirectories", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L1", + "weight": 1.0, + "source": "orchestrator_test_scan_rationale_1", + "target": "tests_unit_orchestrator_test_scan_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L24", + "weight": 1.0, + "source": "orchestrator_test_scan_test_iter_subdirs_returns_empty_for_missing_path", + "target": "orchestrator_scan_iter_subdirs" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L34", + "weight": 1.0, + "source": "orchestrator_test_scan_test_iter_subdirs_skips_cache_dir_and_dotfiles", + "target": "orchestrator_scan_iter_subdirs" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L43", + "weight": 1.0, + "source": "orchestrator_test_scan_test_iter_subdirs_does_not_follow_symlinks", + "target": "orchestrator_scan_iter_subdirs" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L55", + "weight": 1.0, + "source": "orchestrator_test_scan_test_walk_run_leaves_returns_empty_when_root_missing", + "target": "orchestrator_scan_walk_run_leaves" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L65", + "weight": 1.0, + "source": "orchestrator_test_scan_test_walk_run_leaves_finds_experimental_and_test_runs", + "target": "orchestrator_scan_walk_run_leaves" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L70", + "weight": 1.0, + "source": "orchestrator_test_scan_rationale_70", + "target": "orchestrator_test_scan_test_walk_run_leaves_handles_empty_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L71", + "weight": 1.0, + "source": "orchestrator_test_scan_test_walk_run_leaves_handles_empty_tree", + "target": "orchestrator_scan_walk_run_leaves" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L83", + "weight": 1.0, + "source": "orchestrator_test_scan_test_count_files_and_bytes_excludes_cache_dir_by_default", + "target": "orchestrator_scan_count_files_and_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L92", + "weight": 1.0, + "source": "orchestrator_test_scan_test_count_files_and_bytes_includes_cache_dir_when_requested", + "target": "orchestrator_scan_count_files_and_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L98", + "weight": 1.0, + "source": "orchestrator_test_scan_test_count_files_and_bytes_returns_zero_for_missing_path", + "target": "orchestrator_scan_count_files_and_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_scan.py", + "source_location": "L107", + "weight": 1.0, + "source": "orchestrator_test_scan_test_count_files_and_bytes_descends_into_subdirectories", + "target": "orchestrator_scan_count_files_and_bytes" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L39", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L61", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_unset", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L66", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L76", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_test_list_staged_runs_returns_summary_rows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L92", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_test_list_staged_runs_includes_test_runs_under_testruns", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L99", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L108", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L121", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L135", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L152", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_test_list_staged_runs_includes_runs_without_creation_metadata", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L162", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L177", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_test_list_staged_runs_excludes_cache_dir_from_byte_total", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L189", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_test_list_staged_runs_uses_explicit_staging_root_param", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L197", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_staging_query_py", + "target": "orchestrator_test_staging_query_test_list_staged_runs_sets_last_activity_from_directory_mtime", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L1", + "weight": 1.0, + "source": "orchestrator_test_staging_query_rationale_1", + "target": "tests_unit_orchestrator_test_staging_query_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L67", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_missing", + "target": "orchestrator_test_staging_query_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L78", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_returns_summary_rows", + "target": "orchestrator_test_staging_query_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L94", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_includes_test_runs_under_testruns", + "target": "orchestrator_test_staging_query_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L104", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", + "target": "orchestrator_test_staging_query_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L117", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", + "target": "orchestrator_test_staging_query_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L131", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", + "target": "orchestrator_test_staging_query_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L145", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", + "target": "orchestrator_test_staging_query_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L157", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_includes_runs_without_creation_metadata", + "target": "orchestrator_test_staging_query_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L173", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", + "target": "orchestrator_test_staging_query_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L185", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_excludes_cache_dir_from_byte_total", + "target": "orchestrator_test_staging_query_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L192", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_uses_explicit_staging_root_param", + "target": "orchestrator_test_staging_query_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L199", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_sets_last_activity_from_directory_mtime", + "target": "orchestrator_test_staging_query_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L31", + "weight": 1.0, + "source": "orchestrator_test_staging_query_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L34", + "weight": 1.0, + "source": "orchestrator_test_staging_query_config", + "target": "config_models_orchestratorstagingcleanup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L77", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_returns_summary_rows", + "target": "orchestrator_test_staging_query_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L93", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_includes_test_runs_under_testruns", + "target": "orchestrator_test_staging_query_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L101", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", + "target": "orchestrator_test_staging_query_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L110", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", + "target": "orchestrator_test_staging_query_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L123", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", + "target": "orchestrator_test_staging_query_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L137", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", + "target": "orchestrator_test_staging_query_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L166", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", + "target": "orchestrator_test_staging_query_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L181", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_excludes_cache_dir_from_byte_total", + "target": "orchestrator_test_staging_query_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L191", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_uses_explicit_staging_root_param", + "target": "orchestrator_test_staging_query_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L198", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_sets_last_activity_from_directory_mtime", + "target": "orchestrator_test_staging_query_seed_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L62", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_unset", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L63", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_unset", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L68", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_returns_empty_when_staging_root_missing", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L78", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_returns_summary_rows", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L94", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_includes_test_runs_under_testruns", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L100", + "weight": 1.0, + "source": "orchestrator_test_staging_query_rationale_100", + "target": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L102", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L104", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_reports_syncing_when_a_file_is_unverified", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L109", + "weight": 1.0, + "source": "orchestrator_test_staging_query_rationale_109", + "target": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L111", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L117", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_reports_synced_when_all_files_verified", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L122", + "weight": 1.0, + "source": "orchestrator_test_staging_query_rationale_122", + "target": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L124", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L131", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_reports_cleared_after_mark_cleared", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L136", + "weight": 1.0, + "source": "orchestrator_test_staging_query_rationale_136", + "target": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L138", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L145", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_remodified_file_flips_rollup_back_to_syncing", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L153", + "weight": 1.0, + "source": "orchestrator_test_staging_query_rationale_153", + "target": "orchestrator_test_staging_query_test_list_staged_runs_includes_runs_without_creation_metadata", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L157", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_includes_runs_without_creation_metadata", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L173", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_sorts_most_recent_first", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L178", + "weight": 1.0, + "source": "orchestrator_test_staging_query_rationale_178", + "target": "orchestrator_test_staging_query_test_list_staged_runs_excludes_cache_dir_from_byte_total", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L185", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_excludes_cache_dir_from_byte_total", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L193", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_uses_explicit_staging_root_param", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_staging_query.py", + "source_location": "L199", + "weight": 1.0, + "source": "orchestrator_test_staging_query_test_list_staged_runs_sets_last_activity_from_directory_mtime", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L51", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_enqueued_paths", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L60", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_transport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L70", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_make_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L101", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_make_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L110", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_poller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L118", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_signature", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L128", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L150", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L176", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L192", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L212", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L234", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L285", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L309", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L332", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L363", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L378", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_test_apply_config_swaps_config_reference", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L386", + "weight": 1.0, + "source": "tests_unit_orchestrator_test_quiescence_poller_py", + "target": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L1", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_1", + "target": "tests_unit_orchestrator_test_quiescence_poller_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L44", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_stubnassync", + "target": "orchestrator_test_quiescence_poller_stubnassync_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L47", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_stubnassync", + "target": "orchestrator_test_quiescence_poller_stubnassync_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L131", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L153", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L179", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L195", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L223", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L267", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L288", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L312", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L335", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L366", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L379", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_apply_config_swaps_config_reference", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L393", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L42", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_42", + "target": "orchestrator_test_quiescence_poller_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L22", + "weight": 0.8, + "source": "orchestrator_test_quiescence_poller_stubnassync", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L23", + "weight": 0.8, + "source": "orchestrator_test_quiescence_poller_stubnassync", + "target": "config_models_bandwidthconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L23", + "weight": 0.8, + "source": "orchestrator_test_quiescence_poller_stubnassync", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L23", + "weight": 0.8, + "source": "orchestrator_test_quiescence_poller_stubnassync", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L23", + "weight": 0.8, + "source": "orchestrator_test_quiescence_poller_stubnassync", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L23", + "weight": 0.8, + "source": "orchestrator_test_quiescence_poller_stubnassync", + "target": "config_models_orchestratorstagingtransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L23", + "weight": 0.8, + "source": "orchestrator_test_quiescence_poller_stubnassync", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L23", + "weight": 0.8, + "source": "orchestrator_test_quiescence_poller_stubnassync", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L23", + "weight": 0.8, + "source": "orchestrator_test_quiescence_poller_stubnassync", + "target": "config_models_syncconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L34", + "weight": 0.8, + "source": "orchestrator_test_quiescence_poller_stubnassync", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L86", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_make_config", + "target": "orchestrator_test_quiescence_poller_transport", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L249", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", + "target": "orchestrator_test_quiescence_poller_transport", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L61", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_transport", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L66", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_transport", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L130", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", + "target": "orchestrator_test_quiescence_poller_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L152", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", + "target": "orchestrator_test_quiescence_poller_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L178", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", + "target": "orchestrator_test_quiescence_poller_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L194", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", + "target": "orchestrator_test_quiescence_poller_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L218", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", + "target": "orchestrator_test_quiescence_poller_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L287", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", + "target": "orchestrator_test_quiescence_poller_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L311", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", + "target": "orchestrator_test_quiescence_poller_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L334", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", + "target": "orchestrator_test_quiescence_poller_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L365", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", + "target": "orchestrator_test_quiescence_poller_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L380", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_apply_config_swaps_config_reference", + "target": "orchestrator_test_quiescence_poller_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L394", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", + "target": "orchestrator_test_quiescence_poller_make_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L76", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_76", + "target": "orchestrator_test_quiescence_poller_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L80", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_make_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L91", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_make_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L93", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_make_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L97", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_make_config", + "target": "config_models_syncconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L133", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", + "target": "orchestrator_test_quiescence_poller_make_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L155", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", + "target": "orchestrator_test_quiescence_poller_make_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L181", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", + "target": "orchestrator_test_quiescence_poller_make_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L197", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", + "target": "orchestrator_test_quiescence_poller_make_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L225", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", + "target": "orchestrator_test_quiescence_poller_make_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L269", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", + "target": "orchestrator_test_quiescence_poller_make_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L291", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", + "target": "orchestrator_test_quiescence_poller_make_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L315", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", + "target": "orchestrator_test_quiescence_poller_make_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L338", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", + "target": "orchestrator_test_quiescence_poller_make_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L395", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", + "target": "orchestrator_test_quiescence_poller_make_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L102", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_102", + "target": "orchestrator_test_quiescence_poller_make_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L132", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", + "target": "orchestrator_test_quiescence_poller_poller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L154", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", + "target": "orchestrator_test_quiescence_poller_poller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L180", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", + "target": "orchestrator_test_quiescence_poller_poller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L196", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", + "target": "orchestrator_test_quiescence_poller_poller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L224", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", + "target": "orchestrator_test_quiescence_poller_poller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L268", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", + "target": "orchestrator_test_quiescence_poller_poller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L366", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", + "target": "orchestrator_test_quiescence_poller_poller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L380", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_apply_config_swaps_config_reference", + "target": "orchestrator_test_quiescence_poller_poller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L394", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", + "target": "orchestrator_test_quiescence_poller_poller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L111", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_poller", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L114", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_poller", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L298", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", + "target": "orchestrator_test_quiescence_poller_signature", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L346", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", + "target": "orchestrator_test_quiescence_poller_signature", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L129", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_129", + "target": "orchestrator_test_quiescence_poller_test_file_becomes_quiet_only_after_settle_window", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L151", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_151", + "target": "orchestrator_test_quiescence_poller_test_modified_file_resets_the_settle_window", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L177", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_177", + "target": "orchestrator_test_quiescence_poller_test_ignore_glob_files_do_not_make_a_run_eligible", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L193", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_193", + "target": "orchestrator_test_quiescence_poller_test_quiet_real_file_enqueues_despite_ignored_sibling", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L213", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_213", + "target": "orchestrator_test_quiescence_poller_test_discovers_both_staging_and_nas_mode_runs", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L235", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_235", + "target": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L241", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L243", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L257", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", + "target": "config_models_orchestratorstagingtransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L264", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L265", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_co_rooted_stage_mode_equipment_run_is_not_enqueued", + "target": "config_models_syncconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L286", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_286", + "target": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L289", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L290", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_matching_synced_signature_is_not_re_enqueued", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L310", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_310", + "target": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L313", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L314", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_file_modified_after_recorded_sync_becomes_eligible", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L333", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_333", + "target": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L336", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L337", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_test_only_changed_file_in_a_run_is_enqueued", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L364", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_364", + "target": "orchestrator_test_quiescence_poller_test_start_then_stop_is_idempotent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/unit/orchestrator/test_quiescence_poller.py", + "source_location": "L387", + "weight": 1.0, + "source": "orchestrator_test_quiescence_poller_rationale_387", + "target": "orchestrator_test_quiescence_poller_test_apply_config_quiescence_change_is_live", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_integration_test_orchestrator_lifecycle_py", + "target": "integration_test_orchestrator_lifecycle_handle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_integration_test_orchestrator_lifecycle_py", + "target": "integration_test_orchestrator_lifecycle_stubjobrow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_integration_test_orchestrator_lifecycle_py", + "target": "integration_test_orchestrator_lifecycle_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L73", + "weight": 1.0, + "source": "tests_integration_test_orchestrator_lifecycle_py", + "target": "integration_test_orchestrator_lifecycle_enqueued_paths", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L77", + "weight": 1.0, + "source": "tests_integration_test_orchestrator_lifecycle_py", + "target": "integration_test_orchestrator_lifecycle_make_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L104", + "weight": 1.0, + "source": "tests_integration_test_orchestrator_lifecycle_py", + "target": "integration_test_orchestrator_lifecycle_stage_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L116", + "weight": 1.0, + "source": "tests_integration_test_orchestrator_lifecycle_py", + "target": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L134", + "weight": 1.0, + "source": "tests_integration_test_orchestrator_lifecycle_py", + "target": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L161", + "weight": 1.0, + "source": "tests_integration_test_orchestrator_lifecycle_py", + "target": "integration_test_orchestrator_lifecycle_mark_run_synced", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L170", + "weight": 1.0, + "source": "tests_integration_test_orchestrator_lifecycle_py", + "target": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L187", + "weight": 1.0, + "source": "tests_integration_test_orchestrator_lifecycle_py", + "target": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L210", + "weight": 1.0, + "source": "tests_integration_test_orchestrator_lifecycle_py", + "target": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L1", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_rationale_1", + "target": "tests_integration_test_orchestrator_lifecycle_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L62", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_stubnassync_enqueue", + "target": "integration_test_orchestrator_lifecycle_handle", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L25", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_handle", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_handle", + "target": "config_models_bandwidthconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_handle", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_handle", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_handle", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_handle", + "target": "config_models_orchestratorstagingcleanup", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_handle", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_handle", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_handle", + "target": "config_models_syncconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L37", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_handle", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L69", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_stubnassync_list_all", + "target": "integration_test_orchestrator_lifecycle_stubjobrow", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L25", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubjobrow", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubjobrow", + "target": "config_models_bandwidthconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubjobrow", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubjobrow", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubjobrow", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubjobrow", + "target": "config_models_orchestratorstagingcleanup", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubjobrow", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubjobrow", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubjobrow", + "target": "config_models_syncconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L37", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubjobrow", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L56", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "integration_test_orchestrator_lifecycle_stubnassync_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L60", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "integration_test_orchestrator_lifecycle_stubnassync_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L64", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "integration_test_orchestrator_lifecycle_stubnassync_status", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L67", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "integration_test_orchestrator_lifecycle_stubnassync_list_all", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L120", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", + "target": "integration_test_orchestrator_lifecycle_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L148", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", + "target": "integration_test_orchestrator_lifecycle_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L176", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", + "target": "integration_test_orchestrator_lifecycle_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L196", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", + "target": "integration_test_orchestrator_lifecycle_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L215", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", + "target": "integration_test_orchestrator_lifecycle_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L54", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_rationale_54", + "target": "integration_test_orchestrator_lifecycle_stubnassync", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L25", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "config_models_bandwidthconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "config_models_orchestratorstagingcleanup", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "config_models_syncconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L37", + "weight": 0.8, + "source": "integration_test_orchestrator_lifecycle_stubnassync", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L118", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", + "target": "integration_test_orchestrator_lifecycle_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L137", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", + "target": "integration_test_orchestrator_lifecycle_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L172", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", + "target": "integration_test_orchestrator_lifecycle_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L192", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", + "target": "integration_test_orchestrator_lifecycle_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L212", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", + "target": "integration_test_orchestrator_lifecycle_make_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L79", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_make_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L81", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_make_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L86", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_make_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L91", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_make_config", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L95", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_make_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L98", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_make_config", + "target": "config_models_orchestratorstagingcleanup" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L100", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_make_config", + "target": "config_models_syncconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L119", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", + "target": "integration_test_orchestrator_lifecycle_stage_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L138", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", + "target": "integration_test_orchestrator_lifecycle_stage_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L173", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", + "target": "integration_test_orchestrator_lifecycle_stage_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L193", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", + "target": "integration_test_orchestrator_lifecycle_stage_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L213", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", + "target": "integration_test_orchestrator_lifecycle_stage_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L117", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_rationale_117", + "target": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L121", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L122", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_poller_enqueues_run_after_settle_window", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L135", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_rationale_135", + "target": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L139", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L149", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_poller_skips_file_already_synced_at_current_signature", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L175", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", + "target": "integration_test_orchestrator_lifecycle_mark_run_synced", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L195", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", + "target": "integration_test_orchestrator_lifecycle_mark_run_synced", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L162", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_rationale_162", + "target": "integration_test_orchestrator_lifecycle_mark_run_synced", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L171", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_rationale_171", + "target": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L174", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L176", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L177", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_staging_endpoint_surfaces_run_with_rollup_state", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L188", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_rationale_188", + "target": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L194", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L196", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L197", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_deletes_synced_run", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L211", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_rationale_211", + "target": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L214", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L215", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_orchestrator_lifecycle.py", + "source_location": "L217", + "weight": 1.0, + "source": "integration_test_orchestrator_lifecycle_test_clear_endpoint_rejects_unsynced_run", + "target": "api_app_create_app" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_tray_window_smoke.py", + "source_location": "L24", + "weight": 1.0, + "source": "tests_integration_test_tray_window_smoke_py", + "target": "integration_test_tray_window_smoke_wait_for", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_tray_window_smoke.py", + "source_location": "L40", + "weight": 1.0, + "source": "tests_integration_test_tray_window_smoke_py", + "target": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_tray_window_smoke.py", + "source_location": "L1", + "weight": 1.0, + "source": "integration_test_tray_window_smoke_rationale_1", + "target": "tests_integration_test_tray_window_smoke_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_tray_window_smoke.py", + "source_location": "L51", + "weight": 1.0, + "source": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", + "target": "integration_test_tray_window_smoke_wait_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_tray_window_smoke.py", + "source_location": "L44", + "weight": 1.0, + "source": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", + "target": "tray_main_build_default_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_tray_window_smoke.py", + "source_location": "L48", + "weight": 1.0, + "source": "integration_test_tray_window_smoke_test_root_serves_html_after_mount", + "target": "tray_server_runner_serverrunner" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L27", + "weight": 1.0, + "source": "tests_integration_test_lims_integration_py", + "target": "integration_test_lims_integration_make_client", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L45", + "weight": 1.0, + "source": "tests_integration_test_lims_integration_py", + "target": "integration_test_lims_integration_test_client_populates_cache", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L63", + "weight": 1.0, + "source": "tests_integration_test_lims_integration_py", + "target": "integration_test_lims_integration_test_cache_satisfies_lookup_without_network", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L83", + "weight": 1.0, + "source": "tests_integration_test_lims_integration_py", + "target": "integration_test_lims_integration_test_expired_cache_is_refreshed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L116", + "weight": 1.0, + "source": "tests_integration_test_lims_integration_py", + "target": "integration_test_lims_integration_test_relogin_then_cache_upsert", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L134", + "weight": 1.0, + "source": "tests_integration_test_lims_integration_py", + "target": "integration_test_lims_integration_test_status_filter_consistent_between_client_and_cache", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L1", + "weight": 1.0, + "source": "integration_test_lims_integration_rationale_1", + "target": "tests_integration_test_lims_integration_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L48", + "weight": 1.0, + "source": "integration_test_lims_integration_test_client_populates_cache", + "target": "integration_test_lims_integration_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L66", + "weight": 1.0, + "source": "integration_test_lims_integration_test_cache_satisfies_lookup_without_network", + "target": "integration_test_lims_integration_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L86", + "weight": 1.0, + "source": "integration_test_lims_integration_test_expired_cache_is_refreshed", + "target": "integration_test_lims_integration_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L119", + "weight": 1.0, + "source": "integration_test_lims_integration_test_relogin_then_cache_upsert", + "target": "integration_test_lims_integration_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L154", + "weight": 1.0, + "source": "integration_test_lims_integration_test_status_filter_consistent_between_client_and_cache", + "target": "integration_test_lims_integration_make_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L30", + "weight": 1.0, + "source": "integration_test_lims_integration_make_client", + "target": "lims_client_limsclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L46", + "weight": 1.0, + "source": "integration_test_lims_integration_rationale_46", + "target": "integration_test_lims_integration_test_client_populates_cache", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L47", + "weight": 1.0, + "source": "integration_test_lims_integration_test_client_populates_cache", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L49", + "weight": 1.0, + "source": "integration_test_lims_integration_test_client_populates_cache", + "target": "lims_cache_limscache" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L64", + "weight": 1.0, + "source": "integration_test_lims_integration_rationale_64", + "target": "integration_test_lims_integration_test_cache_satisfies_lookup_without_network", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L65", + "weight": 1.0, + "source": "integration_test_lims_integration_test_cache_satisfies_lookup_without_network", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L67", + "weight": 1.0, + "source": "integration_test_lims_integration_test_cache_satisfies_lookup_without_network", + "target": "lims_cache_limscache" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L84", + "weight": 1.0, + "source": "integration_test_lims_integration_rationale_84", + "target": "integration_test_lims_integration_test_expired_cache_is_refreshed", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L85", + "weight": 1.0, + "source": "integration_test_lims_integration_test_expired_cache_is_refreshed", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L87", + "weight": 1.0, + "source": "integration_test_lims_integration_test_expired_cache_is_refreshed", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L92", + "weight": 1.0, + "source": "integration_test_lims_integration_test_expired_cache_is_refreshed", + "target": "lims_schemas_limsproject" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L117", + "weight": 1.0, + "source": "integration_test_lims_integration_rationale_117", + "target": "integration_test_lims_integration_test_relogin_then_cache_upsert", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L118", + "weight": 1.0, + "source": "integration_test_lims_integration_test_relogin_then_cache_upsert", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L120", + "weight": 1.0, + "source": "integration_test_lims_integration_test_relogin_then_cache_upsert", + "target": "lims_cache_limscache" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L153", + "weight": 1.0, + "source": "integration_test_lims_integration_test_status_filter_consistent_between_client_and_cache", + "target": "fixtures_mock_lims_make_mock_lims_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_lims_integration.py", + "source_location": "L155", + "weight": 1.0, + "source": "integration_test_lims_integration_test_status_filter_consistent_between_client_and_cache", + "target": "lims_cache_limscache" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L31", + "weight": 1.0, + "source": "tests_integration_test_tray_lifecycle_py", + "target": "integration_test_tray_lifecycle_wait_for_health", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L48", + "weight": 1.0, + "source": "tests_integration_test_tray_lifecycle_py", + "target": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L85", + "weight": 1.0, + "source": "tests_integration_test_tray_lifecycle_py", + "target": "integration_test_tray_lifecycle_test_tray_lifecycle_window_handshake_reads_server_json", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L1", + "weight": 1.0, + "source": "integration_test_tray_lifecycle_rationale_1", + "target": "tests_integration_test_tray_lifecycle_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L53", + "weight": 1.0, + "source": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", + "target": "integration_test_tray_lifecycle_wait_for_health", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L32", + "weight": 1.0, + "source": "integration_test_tray_lifecycle_rationale_32", + "target": "integration_test_tray_lifecycle_wait_for_health", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L49", + "weight": 1.0, + "source": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L50", + "weight": 1.0, + "source": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", + "target": "tray_server_runner_serverrunner" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L56", + "weight": 1.0, + "source": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", + "target": "window_main_read_server_handshake" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L66", + "weight": 1.0, + "source": "integration_test_tray_lifecycle_test_tray_lifecycle_round_trip", + "target": "tray_quit_coordinator_quitcoordinator" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L86", + "weight": 1.0, + "source": "integration_test_tray_lifecycle_test_tray_lifecycle_window_handshake_reads_server_json", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L87", + "weight": 1.0, + "source": "integration_test_tray_lifecycle_test_tray_lifecycle_window_handshake_reads_server_json", + "target": "tray_server_runner_serverrunner" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_tray_lifecycle.py", + "source_location": "L92", + "weight": 1.0, + "source": "integration_test_tray_lifecycle_test_tray_lifecycle_window_handshake_reads_server_json", + "target": "window_main_read_server_handshake" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L71", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_stub_binaries_on_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L84", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_build_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L111", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_make_creation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L130", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L141", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_wait_for_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L161", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L235", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L274", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_test_auth_error_terminates_failed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L305", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L349", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L422", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L489", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L547", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L621", + "weight": 1.0, + "source": "tests_integration_test_nas_sync_py", + "target": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L1", + "weight": 1.0, + "source": "integration_test_nas_sync_rationale_1", + "target": "tests_integration_test_nas_sync_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L62", + "weight": 1.0, + "source": "integration_test_nas_sync_stubkeyring", + "target": "integration_test_nas_sync_stubkeyring_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L65", + "weight": 1.0, + "source": "integration_test_nas_sync_stubkeyring", + "target": "integration_test_nas_sync_stubkeyring_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L202", + "weight": 1.0, + "source": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", + "target": "integration_test_nas_sync_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L261", + "weight": 1.0, + "source": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", + "target": "integration_test_nas_sync_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L293", + "weight": 1.0, + "source": "integration_test_nas_sync_test_auth_error_terminates_failed", + "target": "integration_test_nas_sync_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L322", + "weight": 1.0, + "source": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", + "target": "integration_test_nas_sync_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L393", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", + "target": "integration_test_nas_sync_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L459", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", + "target": "integration_test_nas_sync_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L527", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", + "target": "integration_test_nas_sync_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L579", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", + "target": "integration_test_nas_sync_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L667", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", + "target": "integration_test_nas_sync_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L54", + "weight": 1.0, + "source": "integration_test_nas_sync_rationale_54", + "target": "integration_test_nas_sync_stubkeyring", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L26", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L33", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L34", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "config_models_bandwidthconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L34", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L34", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L34", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "config_models_nascleanupconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L34", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L34", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L48", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "sync_nas_client_nassyncclient", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L49", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "sync_queue_syncjobrow", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L49", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "sync_queue_syncjobstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L50", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "validator_engine_validator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L636", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L505", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "transports_rclone_checkresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L638", + "weight": 0.8, + "source": "integration_test_nas_sync_stubkeyring", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L72", + "weight": 1.0, + "source": "integration_test_nas_sync_rationale_72", + "target": "integration_test_nas_sync_stub_binaries_on_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L193", + "weight": 1.0, + "source": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", + "target": "integration_test_nas_sync_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L245", + "weight": 1.0, + "source": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", + "target": "integration_test_nas_sync_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L284", + "weight": 1.0, + "source": "integration_test_nas_sync_test_auth_error_terminates_failed", + "target": "integration_test_nas_sync_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L313", + "weight": 1.0, + "source": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", + "target": "integration_test_nas_sync_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L370", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", + "target": "integration_test_nas_sync_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L442", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", + "target": "integration_test_nas_sync_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L501", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", + "target": "integration_test_nas_sync_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L569", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", + "target": "integration_test_nas_sync_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L648", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", + "target": "integration_test_nas_sync_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L86", + "weight": 1.0, + "source": "integration_test_nas_sync_build_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L88", + "weight": 1.0, + "source": "integration_test_nas_sync_build_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L93", + "weight": 1.0, + "source": "integration_test_nas_sync_build_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L98", + "weight": 1.0, + "source": "integration_test_nas_sync_build_config", + "target": "config_models_bandwidthconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L102", + "weight": 1.0, + "source": "integration_test_nas_sync_build_config", + "target": "config_models_nascleanupconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L137", + "weight": 1.0, + "source": "integration_test_nas_sync_populate_run", + "target": "integration_test_nas_sync_make_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L253", + "weight": 1.0, + "source": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", + "target": "integration_test_nas_sync_make_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L655", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", + "target": "integration_test_nas_sync_make_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L112", + "weight": 1.0, + "source": "integration_test_nas_sync_make_creation", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L118", + "weight": 1.0, + "source": "integration_test_nas_sync_make_creation", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L119", + "weight": 1.0, + "source": "integration_test_nas_sync_make_creation", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L126", + "weight": 1.0, + "source": "integration_test_nas_sync_make_creation", + "target": "api_schemas_pathsblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L194", + "weight": 1.0, + "source": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", + "target": "integration_test_nas_sync_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L285", + "weight": 1.0, + "source": "integration_test_nas_sync_test_auth_error_terminates_failed", + "target": "integration_test_nas_sync_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L314", + "weight": 1.0, + "source": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", + "target": "integration_test_nas_sync_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L371", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", + "target": "integration_test_nas_sync_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L443", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", + "target": "integration_test_nas_sync_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L502", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", + "target": "integration_test_nas_sync_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L570", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", + "target": "integration_test_nas_sync_populate_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L212", + "weight": 1.0, + "source": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", + "target": "integration_test_nas_sync_wait_for_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L299", + "weight": 1.0, + "source": "integration_test_nas_sync_test_auth_error_terminates_failed", + "target": "integration_test_nas_sync_wait_for_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L402", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", + "target": "integration_test_nas_sync_wait_for_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L534", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", + "target": "integration_test_nas_sync_wait_for_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L600", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", + "target": "integration_test_nas_sync_wait_for_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L688", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", + "target": "integration_test_nas_sync_wait_for_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L149", + "weight": 1.0, + "source": "integration_test_nas_sync_rationale_149", + "target": "integration_test_nas_sync_wait_for_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L166", + "weight": 1.0, + "source": "integration_test_nas_sync_rationale_166", + "target": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L195", + "weight": 1.0, + "source": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L197", + "weight": 1.0, + "source": "integration_test_nas_sync_test_full_happy_path_via_stub_rclone", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L240", + "weight": 1.0, + "source": "integration_test_nas_sync_rationale_240", + "target": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L255", + "weight": 1.0, + "source": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L256", + "weight": 1.0, + "source": "integration_test_nas_sync_test_pre_sync_gate_blocks_run_with_placeholder_in_path", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L279", + "weight": 1.0, + "source": "integration_test_nas_sync_rationale_279", + "target": "integration_test_nas_sync_test_auth_error_terminates_failed", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L286", + "weight": 1.0, + "source": "integration_test_nas_sync_test_auth_error_terminates_failed", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L288", + "weight": 1.0, + "source": "integration_test_nas_sync_test_auth_error_terminates_failed", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L310", + "weight": 1.0, + "source": "integration_test_nas_sync_rationale_310", + "target": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L316", + "weight": 1.0, + "source": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L317", + "weight": 1.0, + "source": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L329", + "weight": 1.0, + "source": "integration_test_nas_sync_test_force_verify_returns_ok_after_compute", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L354", + "weight": 1.0, + "source": "integration_test_nas_sync_rationale_354", + "target": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L372", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L388", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hash_mismatch_triggers_retry", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L427", + "weight": 1.0, + "source": "integration_test_nas_sync_rationale_427", + "target": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L444", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L454", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hashsum_probe_failure_does_not_skip_verify", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L494", + "weight": 1.0, + "source": "integration_test_nas_sync_rationale_494", + "target": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L503", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L522", + "weight": 1.0, + "source": "integration_test_nas_sync_test_remote_hash_mismatch_terminal", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L552", + "weight": 1.0, + "source": "integration_test_nas_sync_rationale_552", + "target": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L571", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L572", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L574", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L584", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_per_file_enqueue_drives_to_synced_state", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L626", + "weight": 1.0, + "source": "integration_test_nas_sync_rationale_626", + "target": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L657", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L658", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L662", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_nas_sync.py", + "source_location": "L672", + "weight": 1.0, + "source": "integration_test_nas_sync_test_poller_to_cleanup_honors_keep_local_and_stamps_cleared", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L31", + "weight": 1.0, + "source": "tests_integration_test_lims_contract_py", + "target": "integration_test_lims_contract_load", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L35", + "weight": 1.0, + "source": "tests_integration_test_lims_contract_py", + "target": "integration_test_lims_contract_test_me_snapshot_decodes_into_lims_user", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L43", + "weight": 1.0, + "source": "tests_integration_test_lims_contract_py", + "target": "integration_test_lims_contract_test_login_response_snapshot_decodes_into_lims_user", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L51", + "weight": 1.0, + "source": "tests_integration_test_lims_contract_py", + "target": "integration_test_lims_contract_test_projects_list_snapshot_flows_through_list_projects_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L78", + "weight": 1.0, + "source": "tests_integration_test_lims_contract_py", + "target": "integration_test_lims_contract_test_empty_projects_envelope_decodes_to_empty_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_integration_test_lims_contract_py", + "target": "integration_test_lims_contract_test_project_one_snapshot_decodes_into_lims_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L100", + "weight": 1.0, + "source": "tests_integration_test_lims_contract_py", + "target": "integration_test_lims_contract_test_snapshot_files_present_and_non_empty", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L1", + "weight": 1.0, + "source": "integration_test_lims_contract_rationale_1", + "target": "tests_integration_test_lims_contract_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L37", + "weight": 1.0, + "source": "integration_test_lims_contract_test_me_snapshot_decodes_into_lims_user", + "target": "integration_test_lims_contract_load", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L45", + "weight": 1.0, + "source": "integration_test_lims_contract_test_login_response_snapshot_decodes_into_lims_user", + "target": "integration_test_lims_contract_load", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L61", + "weight": 1.0, + "source": "integration_test_lims_contract_test_projects_list_snapshot_flows_through_list_projects_path", + "target": "integration_test_lims_contract_load", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L88", + "weight": 1.0, + "source": "integration_test_lims_contract_test_project_one_snapshot_decodes_into_lims_project", + "target": "integration_test_lims_contract_load", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L36", + "weight": 1.0, + "source": "integration_test_lims_contract_rationale_36", + "target": "integration_test_lims_contract_test_me_snapshot_decodes_into_lims_user", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L44", + "weight": 1.0, + "source": "integration_test_lims_contract_rationale_44", + "target": "integration_test_lims_contract_test_login_response_snapshot_decodes_into_lims_user", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L52", + "weight": 1.0, + "source": "integration_test_lims_contract_rationale_52", + "target": "integration_test_lims_contract_test_projects_list_snapshot_flows_through_list_projects_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L79", + "weight": 1.0, + "source": "integration_test_lims_contract_rationale_79", + "target": "integration_test_lims_contract_test_empty_projects_envelope_decodes_to_empty_list", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L87", + "weight": 1.0, + "source": "integration_test_lims_contract_rationale_87", + "target": "integration_test_lims_contract_test_project_one_snapshot_decodes_into_lims_project", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_lims_contract.py", + "source_location": "L101", + "weight": 1.0, + "source": "integration_test_lims_contract_rationale_101", + "target": "integration_test_lims_contract_test_snapshot_files_present_and_non_empty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L39", + "weight": 1.0, + "source": "tests_integration_test_schema_major_mismatch_py", + "target": "integration_test_schema_major_mismatch_cachecase", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L156", + "weight": 1.0, + "source": "tests_integration_test_schema_major_mismatch_py", + "target": "integration_test_schema_major_mismatch_resolve_reader", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L195", + "weight": 1.0, + "source": "tests_integration_test_schema_major_mismatch_py", + "target": "integration_test_schema_major_mismatch_test_cross_major_read_raises_schema_major_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L218", + "weight": 1.0, + "source": "tests_integration_test_schema_major_mismatch_py", + "target": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L1", + "weight": 1.0, + "source": "integration_test_schema_major_mismatch_rationale_1", + "target": "tests_integration_test_schema_major_mismatch_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L40", + "weight": 1.0, + "source": "integration_test_schema_major_mismatch_rationale_40", + "target": "integration_test_schema_major_mismatch_cachecase", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L35", + "weight": 0.8, + "source": "integration_test_schema_major_mismatch_cachecase", + "target": "exlab_wizard_errors_schemamajormismatcherror", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L200", + "weight": 1.0, + "source": "integration_test_schema_major_mismatch_test_cross_major_read_raises_schema_major_mismatch", + "target": "integration_test_schema_major_mismatch_resolve_reader", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L223", + "weight": 1.0, + "source": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", + "target": "integration_test_schema_major_mismatch_resolve_reader", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L157", + "weight": 1.0, + "source": "integration_test_schema_major_mismatch_rationale_157", + "target": "integration_test_schema_major_mismatch_resolve_reader", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L199", + "weight": 1.0, + "source": "integration_test_schema_major_mismatch_rationale_199", + "target": "integration_test_schema_major_mismatch_test_cross_major_read_raises_schema_major_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L205", + "weight": 1.0, + "source": "integration_test_schema_major_mismatch_test_cross_major_read_raises_schema_major_mismatch", + "target": "cache_sync_state_writer_syncstatewriter_read" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L222", + "weight": 1.0, + "source": "integration_test_schema_major_mismatch_rationale_222", + "target": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_schema_major_mismatch.py", + "source_location": "L230", + "weight": 1.0, + "source": "integration_test_schema_major_mismatch_test_cross_major_read_records_higher_majors_too", + "target": "cache_sync_state_writer_syncstatewriter_read" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_integration_test_creation_json_concurrent_writes_py", + "target": "integration_test_creation_json_concurrent_writes_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L57", + "weight": 1.0, + "source": "tests_integration_test_creation_json_concurrent_writes_py", + "target": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L94", + "weight": 1.0, + "source": "tests_integration_test_creation_json_concurrent_writes_py", + "target": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L131", + "weight": 1.0, + "source": "tests_integration_test_creation_json_concurrent_writes_py", + "target": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L1", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_rationale_1", + "target": "tests_integration_test_creation_json_concurrent_writes_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L62", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", + "target": "integration_test_creation_json_concurrent_writes_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L101", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", + "target": "integration_test_creation_json_concurrent_writes_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L138", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", + "target": "integration_test_creation_json_concurrent_writes_build_minimal_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L34", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_build_minimal_payload", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L40", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_build_minimal_payload", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L45", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_build_minimal_payload", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L52", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_build_minimal_payload", + "target": "api_schemas_pathsblock" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L58", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_rationale_58", + "target": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L61", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_test_ten_concurrent_mutations_all_land", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L97", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_rationale_97", + "target": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L100", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_schema_at_current_version", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L132", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_rationale_132", + "target": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_creation_json_concurrent_writes.py", + "source_location": "L137", + "weight": 1.0, + "source": "integration_test_creation_json_concurrent_writes_test_concurrent_mutations_keep_file_valid_json", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L49", + "weight": 1.0, + "source": "tests_integration_test_validator_determinism_py", + "target": "integration_test_validator_determinism_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L83", + "weight": 1.0, + "source": "tests_integration_test_validator_determinism_py", + "target": "integration_test_validator_determinism_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L89", + "weight": 1.0, + "source": "tests_integration_test_validator_determinism_py", + "target": "integration_test_validator_determinism_build_fixture_tree", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L164", + "weight": 1.0, + "source": "tests_integration_test_validator_determinism_py", + "target": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L221", + "weight": 1.0, + "source": "tests_integration_test_validator_determinism_py", + "target": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L1", + "weight": 1.0, + "source": "integration_test_validator_determinism_rationale_1", + "target": "tests_integration_test_validator_determinism_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L112", + "weight": 1.0, + "source": "integration_test_validator_determinism_build_fixture_tree", + "target": "integration_test_validator_determinism_build_creation_json_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L112", + "weight": 1.0, + "source": "integration_test_validator_determinism_build_fixture_tree", + "target": "integration_test_validator_determinism_write_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L175", + "weight": 1.0, + "source": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", + "target": "integration_test_validator_determinism_build_fixture_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L229", + "weight": 1.0, + "source": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", + "target": "integration_test_validator_determinism_build_fixture_tree", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L90", + "weight": 1.0, + "source": "integration_test_validator_determinism_rationale_90", + "target": "integration_test_validator_determinism_build_fixture_tree", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L165", + "weight": 1.0, + "source": "integration_test_validator_determinism_rationale_165", + "target": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L177", + "weight": 1.0, + "source": "integration_test_validator_determinism_test_audit_two_calls_return_byte_identical_finding_lists", + "target": "config_models_validatorconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L222", + "weight": 1.0, + "source": "integration_test_validator_determinism_rationale_222", + "target": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/test_validator_determinism.py", + "source_location": "L230", + "weight": 1.0, + "source": "integration_test_validator_determinism_test_audit_byte_identical_with_query_problems_alias", + "target": "config_models_validatorconfig" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L61", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_tray_main_imports", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L71", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_window_main_imports", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L77", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_cli_main_imports", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L91", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_version_exposed_and_well_formed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L105", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_version_matches_pyproject", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L123", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_pyproject_scripts_match_expected", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L138", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_spec_file_is_valid_python", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L150", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_spec_references_entry_executable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L164", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_spec_references_entry_script", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L174", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_spec_uses_merge_directive", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L189", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_spec_lists_required_hidden_imports", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L198", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_spec_declares_macos_bundle_identifier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L209", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_workflow_is_valid_yaml", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L218", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_workflow_matrix_lists_all_v1_targets", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L227", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_workflow_runs_pyinstaller_and_smoke", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L246", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_internal_templates_dir_exists", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L252", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_internal_plugins_dir_exists", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L263", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_local_build_scripts_exist", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L283", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_workflow_does_not_run_on_branch_push", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L299", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_workflow_pull_request_targets_main_only", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L310", + "weight": 1.0, + "source": "tests_integration_test_pyinstaller_smoke_py", + "target": "integration_test_pyinstaller_smoke_test_workflow_concurrency_cancels_in_progress", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L1", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_1", + "target": "tests_integration_test_pyinstaller_smoke_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L62", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_62", + "target": "integration_test_pyinstaller_smoke_test_tray_main_imports", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L72", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_72", + "target": "integration_test_pyinstaller_smoke_test_window_main_imports", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L78", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_78", + "target": "integration_test_pyinstaller_smoke_test_cli_main_imports", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L92", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_92", + "target": "integration_test_pyinstaller_smoke_test_version_exposed_and_well_formed", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L106", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_106", + "target": "integration_test_pyinstaller_smoke_test_version_matches_pyproject", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L124", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_124", + "target": "integration_test_pyinstaller_smoke_test_pyproject_scripts_match_expected", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L139", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_139", + "target": "integration_test_pyinstaller_smoke_test_spec_file_is_valid_python", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L151", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_151", + "target": "integration_test_pyinstaller_smoke_test_spec_references_entry_executable", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L165", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_165", + "target": "integration_test_pyinstaller_smoke_test_spec_references_entry_script", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L175", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_175", + "target": "integration_test_pyinstaller_smoke_test_spec_uses_merge_directive", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L190", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_190", + "target": "integration_test_pyinstaller_smoke_test_spec_lists_required_hidden_imports", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L199", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_199", + "target": "integration_test_pyinstaller_smoke_test_spec_declares_macos_bundle_identifier", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L210", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_210", + "target": "integration_test_pyinstaller_smoke_test_workflow_is_valid_yaml", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L219", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_219", + "target": "integration_test_pyinstaller_smoke_test_workflow_matrix_lists_all_v1_targets", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L228", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_228", + "target": "integration_test_pyinstaller_smoke_test_workflow_runs_pyinstaller_and_smoke", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L247", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_247", + "target": "integration_test_pyinstaller_smoke_test_internal_templates_dir_exists", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L253", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_253", + "target": "integration_test_pyinstaller_smoke_test_internal_plugins_dir_exists", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L264", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_264", + "target": "integration_test_pyinstaller_smoke_test_local_build_scripts_exist", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L284", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_284", + "target": "integration_test_pyinstaller_smoke_test_workflow_does_not_run_on_branch_push", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L300", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_300", + "target": "integration_test_pyinstaller_smoke_test_workflow_pull_request_targets_main_only", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/test_pyinstaller_smoke.py", + "source_location": "L311", + "weight": 1.0, + "source": "integration_test_pyinstaller_smoke_rationale_311", + "target": "integration_test_pyinstaller_smoke_test_workflow_concurrency_cancels_in_progress", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L50", + "weight": 1.0, + "source": "tests_integration_plugins_test_host_isolation_py", + "target": "plugins_test_host_isolation_stubregistry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L60", + "weight": 1.0, + "source": "tests_integration_plugins_test_host_isolation_py", + "target": "plugins_test_host_isolation_record_from_fixture", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L89", + "weight": 1.0, + "source": "tests_integration_plugins_test_host_isolation_py", + "target": "plugins_test_host_isolation_make_dst_with_txt", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L98", + "weight": 1.0, + "source": "tests_integration_plugins_test_host_isolation_py", + "target": "plugins_test_host_isolation_ctx", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L114", + "weight": 1.0, + "source": "tests_integration_plugins_test_host_isolation_py", + "target": "plugins_test_host_isolation_refuse_input", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L124", + "weight": 1.0, + "source": "tests_integration_plugins_test_host_isolation_py", + "target": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L149", + "weight": 1.0, + "source": "tests_integration_plugins_test_host_isolation_py", + "target": "plugins_test_host_isolation_test_timeout_enforcement", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L182", + "weight": 1.0, + "source": "tests_integration_plugins_test_host_isolation_py", + "target": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L220", + "weight": 1.0, + "source": "tests_integration_plugins_test_host_isolation_py", + "target": "plugins_test_host_isolation_test_input_required_suspend_resume", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L257", + "weight": 1.0, + "source": "tests_integration_plugins_test_host_isolation_py", + "target": "plugins_test_host_isolation_test_input_required_cancelled", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L284", + "weight": 1.0, + "source": "tests_integration_plugins_test_host_isolation_py", + "target": "plugins_test_host_isolation_test_subprocess_crash_contained", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L323", + "weight": 1.0, + "source": "tests_integration_plugins_test_host_isolation_py", + "target": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L359", + "weight": 1.0, + "source": "tests_integration_plugins_test_host_isolation_py", + "target": "plugins_test_host_isolation_test_sanitized_environment_passes_through_path_home_lang", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L1", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_1", + "target": "tests_integration_plugins_test_host_isolation_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L53", + "weight": 1.0, + "source": "plugins_test_host_isolation_stubregistry", + "target": "plugins_test_host_isolation_stubregistry_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L56", + "weight": 1.0, + "source": "plugins_test_host_isolation_stubregistry", + "target": "plugins_test_host_isolation_stubregistry_get_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L127", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", + "target": "plugins_test_host_isolation_stubregistry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L152", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_timeout_enforcement", + "target": "plugins_test_host_isolation_stubregistry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L186", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", + "target": "plugins_test_host_isolation_stubregistry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L223", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_input_required_suspend_resume", + "target": "plugins_test_host_isolation_stubregistry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L260", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_input_required_cancelled", + "target": "plugins_test_host_isolation_stubregistry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L288", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_subprocess_crash_contained", + "target": "plugins_test_host_isolation_stubregistry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L326", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", + "target": "plugins_test_host_isolation_stubregistry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L51", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_51", + "target": "plugins_test_host_isolation_stubregistry", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L32", + "weight": 0.8, + "source": "plugins_test_host_isolation_stubregistry", + "target": "constants_enums_pluginstatus", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L33", + "weight": 0.8, + "source": "plugins_test_host_isolation_stubregistry", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L34", + "weight": 0.8, + "source": "plugins_test_host_isolation_stubregistry", + "target": "plugins_host_inputrequiredpayload", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L34", + "weight": 0.8, + "source": "plugins_test_host_isolation_stubregistry", + "target": "plugins_host_pluginhost", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L34", + "weight": 0.8, + "source": "plugins_test_host_isolation_stubregistry", + "target": "plugins_host_pluginrecord", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L34", + "weight": 0.8, + "source": "plugins_test_host_isolation_stubregistry", + "target": "plugins_host_pluginregistryprotocol", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L40", + "weight": 0.8, + "source": "plugins_test_host_isolation_stubregistry", + "target": "plugins_logger_hostpluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L468", + "weight": 1.0, + "source": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", + "target": "plugins_test_host_isolation_stubregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L886", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", + "target": "plugins_test_host_isolation_stubregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L126", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", + "target": "plugins_test_host_isolation_record_from_fixture", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L151", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_timeout_enforcement", + "target": "plugins_test_host_isolation_record_from_fixture", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L184", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", + "target": "plugins_test_host_isolation_record_from_fixture", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L222", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_input_required_suspend_resume", + "target": "plugins_test_host_isolation_record_from_fixture", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L259", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_input_required_cancelled", + "target": "plugins_test_host_isolation_record_from_fixture", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L286", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_subprocess_crash_contained", + "target": "plugins_test_host_isolation_record_from_fixture", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L325", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", + "target": "plugins_test_host_isolation_record_from_fixture", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L67", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_67", + "target": "plugins_test_host_isolation_record_from_fixture", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L130", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", + "target": "plugins_test_host_isolation_make_dst_with_txt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L155", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_timeout_enforcement", + "target": "plugins_test_host_isolation_make_dst_with_txt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L194", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", + "target": "plugins_test_host_isolation_make_dst_with_txt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L226", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_input_required_suspend_resume", + "target": "plugins_test_host_isolation_make_dst_with_txt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L263", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_input_required_cancelled", + "target": "plugins_test_host_isolation_make_dst_with_txt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L296", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_subprocess_crash_contained", + "target": "plugins_test_host_isolation_make_dst_with_txt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L329", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", + "target": "plugins_test_host_isolation_make_dst_with_txt", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L90", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_90", + "target": "plugins_test_host_isolation_make_dst_with_txt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L131", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", + "target": "plugins_test_host_isolation_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L156", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_timeout_enforcement", + "target": "plugins_test_host_isolation_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L195", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", + "target": "plugins_test_host_isolation_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L227", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_input_required_suspend_resume", + "target": "plugins_test_host_isolation_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L264", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_input_required_cancelled", + "target": "plugins_test_host_isolation_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L297", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_subprocess_crash_contained", + "target": "plugins_test_host_isolation_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L330", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", + "target": "plugins_test_host_isolation_ctx", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L99", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_99", + "target": "plugins_test_host_isolation_ctx", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L100", + "weight": 1.0, + "source": "plugins_test_host_isolation_ctx", + "target": "plugins_base_plugincontext" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L110", + "weight": 1.0, + "source": "plugins_test_host_isolation_ctx", + "target": "plugins_logger_hostpluginlogger" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L115", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_115", + "target": "plugins_test_host_isolation_refuse_input", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L125", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_125", + "target": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L128", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_hello_plugin_runs_successfully", + "target": "plugins_host_pluginhost" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L150", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_150", + "target": "plugins_test_host_isolation_test_timeout_enforcement", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L153", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_timeout_enforcement", + "target": "plugins_host_pluginhost" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L183", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_183", + "target": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L192", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_plugin_error_does_not_abort_session", + "target": "plugins_host_pluginhost" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L221", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_221", + "target": "plugins_test_host_isolation_test_input_required_suspend_resume", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L224", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_input_required_suspend_resume", + "target": "plugins_host_pluginhost" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L258", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_258", + "target": "plugins_test_host_isolation_test_input_required_cancelled", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L261", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_input_required_cancelled", + "target": "plugins_host_pluginhost" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L285", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_285", + "target": "plugins_test_host_isolation_test_subprocess_crash_contained", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L294", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_subprocess_crash_contained", + "target": "plugins_host_pluginhost" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L324", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_324", + "target": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L327", + "weight": 1.0, + "source": "plugins_test_host_isolation_test_policy_violation_reverts_forbidden_write", + "target": "plugins_host_pluginhost" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/plugins/test_host_isolation.py", + "source_location": "L360", + "weight": 1.0, + "source": "plugins_test_host_isolation_rationale_360", + "target": "plugins_test_host_isolation_test_sanitized_environment_passes_through_path_home_lang", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L67", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L94", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L126", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_run_request", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L155", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L177", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L194", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_full_project_creation_happy_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L227", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L246", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L278", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L309", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_validation_rejects_empty_label", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L324", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_validation_rejects_label_over_length", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L338", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_validation_rejects_objective_over_length", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L354", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_validation_rejects_operator_not_in_allowlist", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L368", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L384", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L400", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_validation_rejects_empty_objective", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L413", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_validation_rejects_empty_operator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L431", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L502", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L540", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L562", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L603", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L631", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_status_unknown_session_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L639", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L649", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_cancel_unknown_session_is_noop", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L662", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L694", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L749", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_noop_nas_sync_returns_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L760", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_resume_unknown_session_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L768", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L804", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_required_template_field_present_passes_validation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L839", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_subscribe_unknown_session_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L848", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L906", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L929", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L948", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L974", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1002", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1016", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_format_error_with_non_validation_exception_returns_internal_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1025", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_append_log_writes_log_line", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1041", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1065", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1085", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1106", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1130", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1175", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_required_field_ids_filters_non_dict_entries", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1191", + "weight": 1.0, + "source": "tests_integration_controller_test_creation_flow_py", + "target": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_1", + "target": "tests_integration_controller_test_creation_flow_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L198", + "weight": 1.0, + "source": "controller_test_creation_flow_test_full_project_creation_happy_path", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L230", + "weight": 1.0, + "source": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L254", + "weight": 1.0, + "source": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L283", + "weight": 1.0, + "source": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L312", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_empty_label", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L327", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_label_over_length", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L341", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_objective_over_length", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L357", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_operator_not_in_allowlist", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L371", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L389", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L403", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_empty_objective", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L416", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_empty_operator", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L452", + "weight": 1.0, + "source": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L506", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L544", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L584", + "weight": 1.0, + "source": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L606", + "weight": 1.0, + "source": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L634", + "weight": 1.0, + "source": "controller_test_creation_flow_test_status_unknown_session_raises", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L642", + "weight": 1.0, + "source": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L652", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_unknown_session_is_noop", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L712", + "weight": 1.0, + "source": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L763", + "weight": 1.0, + "source": "controller_test_creation_flow_test_resume_unknown_session_raises", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L793", + "weight": 1.0, + "source": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L829", + "weight": 1.0, + "source": "controller_test_creation_flow_test_required_template_field_present_passes_validation", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L842", + "weight": 1.0, + "source": "controller_test_creation_flow_test_subscribe_unknown_session_raises", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L870", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L912", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L935", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L955", + "weight": 1.0, + "source": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L979", + "weight": 1.0, + "source": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1006", + "weight": 1.0, + "source": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1029", + "weight": 1.0, + "source": "controller_test_creation_flow_test_append_log_writes_log_line", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1047", + "weight": 1.0, + "source": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1070", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1089", + "weight": 1.0, + "source": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1111", + "weight": 1.0, + "source": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1152", + "weight": 1.0, + "source": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1197", + "weight": 1.0, + "source": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L68", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_68", + "target": "controller_test_creation_flow_build_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L70", + "weight": 1.0, + "source": "controller_test_creation_flow_build_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L76", + "weight": 1.0, + "source": "controller_test_creation_flow_build_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L81", + "weight": 1.0, + "source": "controller_test_creation_flow_build_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L89", + "weight": 1.0, + "source": "controller_test_creation_flow_build_config", + "target": "config_models_operatorsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L90", + "weight": 1.0, + "source": "controller_test_creation_flow_build_config", + "target": "config_models_readmeconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L201", + "weight": 1.0, + "source": "controller_test_creation_flow_test_full_project_creation_happy_path", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L315", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_empty_label", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L330", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_label_over_length", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L345", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_objective_over_length", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L360", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_operator_not_in_allowlist", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L374", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L406", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_empty_objective", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L419", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_empty_operator", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L512", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L547", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L609", + "weight": 1.0, + "source": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L643", + "weight": 1.0, + "source": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L720", + "weight": 1.0, + "source": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L918", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L939", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L967", + "weight": 1.0, + "source": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L991", + "weight": 1.0, + "source": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1009", + "weight": 1.0, + "source": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1032", + "weight": 1.0, + "source": "controller_test_creation_flow_test_append_log_writes_log_line", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1051", + "weight": 1.0, + "source": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1074", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1093", + "weight": 1.0, + "source": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1114", + "weight": 1.0, + "source": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", + "target": "controller_test_creation_flow_project_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L109", + "weight": 1.0, + "source": "controller_test_creation_flow_project_request", + "target": "controller_creation_projectcreaterequest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L234", + "weight": 1.0, + "source": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", + "target": "controller_test_creation_flow_run_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L259", + "weight": 1.0, + "source": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", + "target": "controller_test_creation_flow_run_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L288", + "weight": 1.0, + "source": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", + "target": "controller_test_creation_flow_run_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L392", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", + "target": "controller_test_creation_flow_run_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L472", + "weight": 1.0, + "source": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", + "target": "controller_test_creation_flow_run_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L587", + "weight": 1.0, + "source": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", + "target": "controller_test_creation_flow_run_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L796", + "weight": 1.0, + "source": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", + "target": "controller_test_creation_flow_run_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L832", + "weight": 1.0, + "source": "controller_test_creation_flow_test_required_template_field_present_passes_validation", + "target": "controller_test_creation_flow_run_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L889", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", + "target": "controller_test_creation_flow_run_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1054", + "weight": 1.0, + "source": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", + "target": "controller_test_creation_flow_run_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1162", + "weight": 1.0, + "source": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", + "target": "controller_test_creation_flow_run_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1202", + "weight": 1.0, + "source": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", + "target": "controller_test_creation_flow_run_request", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L141", + "weight": 1.0, + "source": "controller_test_creation_flow_run_request", + "target": "controller_creation_runcreaterequest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L199", + "weight": 1.0, + "source": "controller_test_creation_flow_test_full_project_creation_happy_path", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L231", + "weight": 1.0, + "source": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L255", + "weight": 1.0, + "source": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L284", + "weight": 1.0, + "source": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L313", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_empty_label", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L328", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_label_over_length", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L342", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_objective_over_length", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L358", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_operator_not_in_allowlist", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L372", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_unknown_equipment", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L390", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L404", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_empty_objective", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L417", + "weight": 1.0, + "source": "controller_test_creation_flow_test_validation_rejects_empty_operator", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L470", + "weight": 1.0, + "source": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L507", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L545", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L585", + "weight": 1.0, + "source": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L607", + "weight": 1.0, + "source": "controller_test_creation_flow_test_subscribe_yields_phase_events_and_done_envelope", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L634", + "weight": 1.0, + "source": "controller_test_creation_flow_test_status_unknown_session_raises", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L642", + "weight": 1.0, + "source": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L652", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_unknown_session_is_noop", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L717", + "weight": 1.0, + "source": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L763", + "weight": 1.0, + "source": "controller_test_creation_flow_test_resume_unknown_session_raises", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L794", + "weight": 1.0, + "source": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L830", + "weight": 1.0, + "source": "controller_test_creation_flow_test_required_template_field_present_passes_validation", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L842", + "weight": 1.0, + "source": "controller_test_creation_flow_test_subscribe_unknown_session_raises", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L887", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L913", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L936", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L965", + "weight": 1.0, + "source": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L980", + "weight": 1.0, + "source": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1007", + "weight": 1.0, + "source": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1030", + "weight": 1.0, + "source": "controller_test_creation_flow_test_append_log_writes_log_line", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1048", + "weight": 1.0, + "source": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1071", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1090", + "weight": 1.0, + "source": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1112", + "weight": 1.0, + "source": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1155", + "weight": 1.0, + "source": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1198", + "weight": 1.0, + "source": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", + "target": "controller_test_creation_flow_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L162", + "weight": 1.0, + "source": "controller_test_creation_flow_build_controller", + "target": "controller_creation_creationcontroller" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L165", + "weight": 1.0, + "source": "controller_test_creation_flow_build_controller", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L167", + "weight": 1.0, + "source": "controller_test_creation_flow_build_controller", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L168", + "weight": 1.0, + "source": "controller_test_creation_flow_build_controller", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L171", + "weight": 1.0, + "source": "controller_test_creation_flow_build_controller", + "target": "controller_creation_noopreadmegenerator" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L172", + "weight": 1.0, + "source": "controller_test_creation_flow_build_controller", + "target": "controller_creation_noopnassync" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L173", + "weight": 1.0, + "source": "controller_test_creation_flow_build_controller", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L204", + "weight": 1.0, + "source": "controller_test_creation_flow_test_full_project_creation_happy_path", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L235", + "weight": 1.0, + "source": "controller_test_creation_flow_test_full_experimental_run_creation_happy_path", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L260", + "weight": 1.0, + "source": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L294", + "weight": 1.0, + "source": "controller_test_creation_flow_test_test_run_creation_uses_test_runs_subdir_and_marks_run_kind", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L493", + "weight": 1.0, + "source": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L513", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L548", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L588", + "weight": 1.0, + "source": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L644", + "weight": 1.0, + "source": "controller_test_creation_flow_test_resume_rejects_session_not_in_input_required", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L724", + "weight": 1.0, + "source": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L835", + "weight": 1.0, + "source": "controller_test_creation_flow_test_required_template_field_present_passes_validation", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L919", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1010", + "weight": 1.0, + "source": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1033", + "weight": 1.0, + "source": "controller_test_creation_flow_test_append_log_writes_log_line", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1052", + "weight": 1.0, + "source": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1203", + "weight": 1.0, + "source": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L178", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_178", + "target": "controller_test_creation_flow_drain_to_done", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L195", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_195", + "target": "controller_test_creation_flow_test_full_project_creation_happy_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L249", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_249", + "target": "controller_test_creation_flow_test_same_minute_run_creation_collision_is_hard_failure", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L385", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_385", + "target": "controller_test_creation_flow_test_validation_rejects_unsafe_project_name_for_runs", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L432", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_432", + "target": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L469", + "weight": 1.0, + "source": "controller_test_creation_flow_test_plugin_input_required_suspend_resume", + "target": "plugins_host_pluginhost" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L503", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_503", + "target": "controller_test_creation_flow_test_cancel_with_discard_files_removes_partial_dir", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L541", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_541", + "target": "controller_test_creation_flow_test_cancel_without_discard_leaves_partial_dir", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L565", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_565", + "target": "controller_test_creation_flow_test_post_validate_blocks_sync_when_placeholder_left_in_file", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L668", + "weight": 1.0, + "source": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", + "target": "controller_creation_noopreadmegenerator" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L669", + "weight": 1.0, + "source": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", + "target": "readme_generator_readmecontext" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L671", + "weight": 1.0, + "source": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", + "target": "readme_generator_corefields" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L675", + "weight": 1.0, + "source": "controller_test_creation_flow_test_noop_readme_generator_writes_minimal_readme", + "target": "readme_generator_systemfields" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L695", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_695", + "target": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L715", + "weight": 1.0, + "source": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", + "target": "config_models_readmedefaultfield" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L717", + "weight": 1.0, + "source": "controller_test_creation_flow_test_real_readme_generator_writes_frontmatter_and_cache", + "target": "readme_generator_readmegenerator" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L750", + "weight": 1.0, + "source": "controller_test_creation_flow_test_noop_nas_sync_returns_none", + "target": "controller_creation_noopnassync" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L771", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_771", + "target": "controller_test_creation_flow_test_required_template_field_missing_in_readme_extra_fails", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L807", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_807", + "target": "controller_test_creation_flow_test_required_template_field_present_passes_validation", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L851", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_851", + "target": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L886", + "weight": 1.0, + "source": "controller_test_creation_flow_test_cancel_input_required_aborts_session_via_plugin_callback", + "target": "plugins_host_pluginhost" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L909", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_909", + "target": "controller_test_creation_flow_test_cancel_invokes_cleanup_when_compose_path_fails", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L932", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_932", + "target": "controller_test_creation_flow_test_cleanup_removes_existing_directory_when_discard_files_true", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L949", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_949", + "target": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L957", + "weight": 1.0, + "source": "controller_test_creation_flow_test_config_required_readme_field_missing_fails", + "target": "config_models_readmedefaultfield" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L975", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_975", + "target": "controller_test_creation_flow_test_render_failure_transitions_session_to_failed", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1003", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_1003", + "target": "controller_test_creation_flow_test_run_creation_writes_equipment_json_at_root", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1019", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_1019", + "target": "controller_test_creation_flow_test_format_error_with_non_validation_exception_returns_internal_error", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1026", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_1026", + "target": "controller_test_creation_flow_test_append_log_writes_log_line", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1042", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_1042", + "target": "controller_test_creation_flow_test_run_inherits_lims_project_block_from_parent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1066", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_1066", + "target": "controller_test_creation_flow_test_cancel_before_task_starts_invokes_cleanup", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1086", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_1086", + "target": "controller_test_creation_flow_test_resume_session_with_no_resume_queue_raises", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1107", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_1107", + "target": "controller_test_creation_flow_test_subscribe_creates_queue_when_missing", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1131", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_1131", + "target": "controller_test_creation_flow_test_plugin_pass_aborted_transitions_to_failed", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1176", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_1176", + "target": "controller_test_creation_flow_test_required_field_ids_filters_non_dict_entries", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1188", + "weight": 1.0, + "source": "controller_test_creation_flow_test_required_field_ids_filters_non_dict_entries", + "target": "controller_creation_required_field_ids" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/controller/test_creation_flow.py", + "source_location": "L1192", + "weight": 1.0, + "source": "controller_test_creation_flow_rationale_1192", + "target": "controller_test_creation_flow_test_run_without_parent_creation_json_fills_stub_block", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L51", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_ready_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L80", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_app_with_real_controller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L110", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_client", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L116", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_test_full_project_creation_flow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L160", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_test_health_returns_ready_when_setup_complete", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L170", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_test_health_warns_when_lims_unreachable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L180", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_test_setup_status_each_incomplete_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L214", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L238", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L290", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_test_problems_refresh_returns_audit_count", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L313", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_test_get_problems_returns_findings_and_filters", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L333", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_test_put_config_validates_and_updates_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L353", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_test_get_tree_in_ready_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L366", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_test_websocket_streams_session_events_sync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L438", + "weight": 1.0, + "source": "tests_integration_api_test_full_flow_py", + "target": "api_test_full_flow_build_minimal_controller", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_test_full_flow_rationale_1", + "target": "tests_integration_api_test_full_flow_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L53", + "weight": 1.0, + "source": "api_test_full_flow_ready_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L59", + "weight": 1.0, + "source": "api_test_full_flow_ready_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L64", + "weight": 1.0, + "source": "api_test_full_flow_ready_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L72", + "weight": 1.0, + "source": "api_test_full_flow_ready_config", + "target": "config_models_operatorsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L73", + "weight": 1.0, + "source": "api_test_full_flow_ready_config", + "target": "config_models_readmeconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L74", + "weight": 1.0, + "source": "api_test_full_flow_ready_config", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L75", + "weight": 1.0, + "source": "api_test_full_flow_ready_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L81", + "weight": 1.0, + "source": "api_test_full_flow_rationale_81", + "target": "api_test_full_flow_app_with_real_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L84", + "weight": 1.0, + "source": "api_test_full_flow_app_with_real_controller", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L85", + "weight": 1.0, + "source": "api_test_full_flow_app_with_real_controller", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L87", + "weight": 1.0, + "source": "api_test_full_flow_app_with_real_controller", + "target": "controller_creation_creationcontroller" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L90", + "weight": 1.0, + "source": "api_test_full_flow_app_with_real_controller", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L94", + "weight": 1.0, + "source": "api_test_full_flow_app_with_real_controller", + "target": "controller_creation_noopreadmegenerator" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L95", + "weight": 1.0, + "source": "api_test_full_flow_app_with_real_controller", + "target": "controller_creation_noopnassync" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L96", + "weight": 1.0, + "source": "api_test_full_flow_app_with_real_controller", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L98", + "weight": 1.0, + "source": "api_test_full_flow_app_with_real_controller", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L104", + "weight": 1.0, + "source": "api_test_full_flow_app_with_real_controller", + "target": "api_app_auditchannel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L106", + "weight": 1.0, + "source": "api_test_full_flow_app_with_real_controller", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L135", + "weight": 1.0, + "source": "api_test_full_flow_test_full_project_creation_flow", + "target": "api_test_full_flow_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L162", + "weight": 1.0, + "source": "api_test_full_flow_test_health_returns_ready_when_setup_complete", + "target": "api_test_full_flow_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L173", + "weight": 1.0, + "source": "api_test_full_flow_test_health_warns_when_lims_unreachable", + "target": "api_test_full_flow_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L204", + "weight": 1.0, + "source": "api_test_full_flow_test_setup_status_each_incomplete_state", + "target": "api_test_full_flow_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L229", + "weight": 1.0, + "source": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", + "target": "api_test_full_flow_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L279", + "weight": 1.0, + "source": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", + "target": "api_test_full_flow_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L304", + "weight": 1.0, + "source": "api_test_full_flow_test_problems_refresh_returns_audit_count", + "target": "api_test_full_flow_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L327", + "weight": 1.0, + "source": "api_test_full_flow_test_get_problems_returns_findings_and_filters", + "target": "api_test_full_flow_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L344", + "weight": 1.0, + "source": "api_test_full_flow_test_put_config_validates_and_updates_state", + "target": "api_test_full_flow_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L356", + "weight": 1.0, + "source": "api_test_full_flow_test_get_tree_in_ready_state", + "target": "api_test_full_flow_client", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L117", + "weight": 1.0, + "source": "api_test_full_flow_rationale_117", + "target": "api_test_full_flow_test_full_project_creation_flow", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L171", + "weight": 1.0, + "source": "api_test_full_flow_test_health_warns_when_lims_unreachable", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L172", + "weight": 1.0, + "source": "api_test_full_flow_test_health_warns_when_lims_unreachable", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L181", + "weight": 1.0, + "source": "api_test_full_flow_rationale_181", + "target": "api_test_full_flow_test_setup_status_each_incomplete_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L187", + "weight": 1.0, + "source": "api_test_full_flow_test_setup_status_each_incomplete_state", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L195", + "weight": 1.0, + "source": "api_test_full_flow_test_setup_status_each_incomplete_state", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L202", + "weight": 1.0, + "source": "api_test_full_flow_test_setup_status_each_incomplete_state", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L203", + "weight": 1.0, + "source": "api_test_full_flow_test_setup_status_each_incomplete_state", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L215", + "weight": 1.0, + "source": "api_test_full_flow_rationale_215", + "target": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L216", + "weight": 1.0, + "source": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L217", + "weight": 1.0, + "source": "api_test_full_flow_test_create_session_blocked_when_setup_incomplete", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L239", + "weight": 1.0, + "source": "api_test_full_flow_rationale_239", + "target": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L240", + "weight": 1.0, + "source": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L241", + "weight": 1.0, + "source": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L243", + "weight": 1.0, + "source": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", + "target": "controller_creation_creationcontroller" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L246", + "weight": 1.0, + "source": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L250", + "weight": 1.0, + "source": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", + "target": "controller_creation_noopreadmegenerator" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L251", + "weight": 1.0, + "source": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", + "target": "controller_creation_noopnassync" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L252", + "weight": 1.0, + "source": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L254", + "weight": 1.0, + "source": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L262", + "weight": 1.0, + "source": "api_test_full_flow_test_lims_unreachable_does_not_block_creation", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L294", + "weight": 1.0, + "source": "api_test_full_flow_test_problems_refresh_returns_audit_count", + "target": "api_test_full_flow_build_minimal_controller", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L291", + "weight": 1.0, + "source": "api_test_full_flow_rationale_291", + "target": "api_test_full_flow_test_problems_refresh_returns_audit_count", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L292", + "weight": 1.0, + "source": "api_test_full_flow_test_problems_refresh_returns_audit_count", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L295", + "weight": 1.0, + "source": "api_test_full_flow_test_problems_refresh_returns_audit_count", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L301", + "weight": 1.0, + "source": "api_test_full_flow_test_problems_refresh_returns_audit_count", + "target": "api_app_auditchannel" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L303", + "weight": 1.0, + "source": "api_test_full_flow_test_problems_refresh_returns_audit_count", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L318", + "weight": 1.0, + "source": "api_test_full_flow_test_get_problems_returns_findings_and_filters", + "target": "api_test_full_flow_build_minimal_controller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L316", + "weight": 1.0, + "source": "api_test_full_flow_test_get_problems_returns_findings_and_filters", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L319", + "weight": 1.0, + "source": "api_test_full_flow_test_get_problems_returns_findings_and_filters", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L326", + "weight": 1.0, + "source": "api_test_full_flow_test_get_problems_returns_findings_and_filters", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L334", + "weight": 1.0, + "source": "api_test_full_flow_test_put_config_validates_and_updates_state", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L335", + "weight": 1.0, + "source": "api_test_full_flow_test_put_config_validates_and_updates_state", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L337", + "weight": 1.0, + "source": "api_test_full_flow_test_put_config_validates_and_updates_state", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L342", + "weight": 1.0, + "source": "api_test_full_flow_test_put_config_validates_and_updates_state", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L354", + "weight": 1.0, + "source": "api_test_full_flow_test_get_tree_in_ready_state", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L355", + "weight": 1.0, + "source": "api_test_full_flow_test_get_tree_in_ready_state", + "target": "api_app_create_app" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L367", + "weight": 1.0, + "source": "api_test_full_flow_rationale_367", + "target": "api_test_full_flow_test_websocket_streams_session_events_sync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L376", + "weight": 1.0, + "source": "api_test_full_flow_test_websocket_streams_session_events_sync", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L377", + "weight": 1.0, + "source": "api_test_full_flow_test_websocket_streams_session_events_sync", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L379", + "weight": 1.0, + "source": "api_test_full_flow_test_websocket_streams_session_events_sync", + "target": "controller_creation_creationcontroller" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L382", + "weight": 1.0, + "source": "api_test_full_flow_test_websocket_streams_session_events_sync", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L386", + "weight": 1.0, + "source": "api_test_full_flow_test_websocket_streams_session_events_sync", + "target": "controller_creation_noopreadmegenerator" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L387", + "weight": 1.0, + "source": "api_test_full_flow_test_websocket_streams_session_events_sync", + "target": "controller_creation_noopnassync" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L388", + "weight": 1.0, + "source": "api_test_full_flow_test_websocket_streams_session_events_sync", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L390", + "weight": 1.0, + "source": "api_test_full_flow_test_websocket_streams_session_events_sync", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L397", + "weight": 1.0, + "source": "api_test_full_flow_test_websocket_streams_session_events_sync", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L439", + "weight": 1.0, + "source": "api_test_full_flow_build_minimal_controller", + "target": "controller_creation_creationcontroller" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L442", + "weight": 1.0, + "source": "api_test_full_flow_build_minimal_controller", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L445", + "weight": 1.0, + "source": "api_test_full_flow_build_minimal_controller", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L446", + "weight": 1.0, + "source": "api_test_full_flow_build_minimal_controller", + "target": "controller_creation_noopreadmegenerator" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L447", + "weight": 1.0, + "source": "api_test_full_flow_build_minimal_controller", + "target": "controller_creation_noopnassync" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/integration/api/test_full_flow.py", + "source_location": "L448", + "weight": 1.0, + "source": "api_test_full_flow_build_minimal_controller", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L38", + "weight": 1.0, + "source": "tests_fixtures_mock_lims_py", + "target": "fixtures_mock_lims_mocklimsstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L69", + "weight": 1.0, + "source": "tests_fixtures_mock_lims_py", + "target": "fixtures_mock_lims_default_user", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L77", + "weight": 1.0, + "source": "tests_fixtures_mock_lims_py", + "target": "fixtures_mock_lims_default_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L90", + "weight": 1.0, + "source": "tests_fixtures_mock_lims_py", + "target": "fixtures_mock_lims_make_mock_lims_app", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L1", + "weight": 1.0, + "source": "fixtures_mock_lims_rationale_1", + "target": "tests_fixtures_mock_lims_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L53", + "weight": 1.0, + "source": "fixtures_mock_lims_mocklimsstate", + "target": "fixtures_mock_lims_mocklimsstate_issue_session", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L59", + "weight": 1.0, + "source": "fixtures_mock_lims_mocklimsstate", + "target": "fixtures_mock_lims_mocklimsstate_is_valid_session", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L62", + "weight": 1.0, + "source": "fixtures_mock_lims_mocklimsstate", + "target": "fixtures_mock_lims_mocklimsstate_invalidate_sessions", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L105", + "weight": 1.0, + "source": "fixtures_mock_lims_make_mock_lims_app", + "target": "fixtures_mock_lims_mocklimsstate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L39", + "weight": 1.0, + "source": "fixtures_mock_lims_rationale_39", + "target": "fixtures_mock_lims_mocklimsstate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L54", + "weight": 1.0, + "source": "fixtures_mock_lims_rationale_54", + "target": "fixtures_mock_lims_mocklimsstate_issue_session", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L63", + "weight": 1.0, + "source": "fixtures_mock_lims_rationale_63", + "target": "fixtures_mock_lims_mocklimsstate_invalidate_sessions", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L109", + "weight": 1.0, + "source": "fixtures_mock_lims_make_mock_lims_app", + "target": "fixtures_mock_lims_default_user", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L108", + "weight": 1.0, + "source": "fixtures_mock_lims_make_mock_lims_app", + "target": "fixtures_mock_lims_default_project", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/mock_lims.py", + "source_location": "L97", + "weight": 1.0, + "source": "fixtures_mock_lims_rationale_97", + "target": "fixtures_mock_lims_make_mock_lims_app", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L54", + "weight": 1.0, + "source": "tests_fixtures_stub_rclone_py", + "target": "fixtures_stub_rclone_parse_copy_args", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L66", + "weight": 1.0, + "source": "tests_fixtures_stub_rclone_py", + "target": "fixtures_stub_rclone_is_flag_value", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L84", + "weight": 1.0, + "source": "tests_fixtures_stub_rclone_py", + "target": "fixtures_stub_rclone_emit_combined", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L113", + "weight": 1.0, + "source": "tests_fixtures_stub_rclone_py", + "target": "fixtures_stub_rclone_flag_value", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L124", + "weight": 1.0, + "source": "tests_fixtures_stub_rclone_py", + "target": "fixtures_stub_rclone_dump_env", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L135", + "weight": 1.0, + "source": "tests_fixtures_stub_rclone_py", + "target": "fixtures_stub_rclone_require_env", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L166", + "weight": 1.0, + "source": "tests_fixtures_stub_rclone_py", + "target": "fixtures_stub_rclone_main", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L59", + "weight": 1.0, + "source": "fixtures_stub_rclone_parse_copy_args", + "target": "fixtures_stub_rclone_is_flag_value", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L255", + "weight": 1.0, + "source": "fixtures_stub_rclone_main", + "target": "fixtures_stub_rclone_parse_copy_args", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L55", + "weight": 1.0, + "source": "fixtures_stub_rclone_rationale_55", + "target": "fixtures_stub_rclone_parse_copy_args", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L67", + "weight": 1.0, + "source": "fixtures_stub_rclone_rationale_67", + "target": "fixtures_stub_rclone_is_flag_value", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L91", + "weight": 1.0, + "source": "fixtures_stub_rclone_emit_combined", + "target": "fixtures_stub_rclone_flag_value", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L234", + "weight": 1.0, + "source": "fixtures_stub_rclone_main", + "target": "fixtures_stub_rclone_emit_combined", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L85", + "weight": 1.0, + "source": "fixtures_stub_rclone_rationale_85", + "target": "fixtures_stub_rclone_emit_combined", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L114", + "weight": 1.0, + "source": "fixtures_stub_rclone_rationale_114", + "target": "fixtures_stub_rclone_flag_value", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L171", + "weight": 1.0, + "source": "fixtures_stub_rclone_main", + "target": "fixtures_stub_rclone_dump_env", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L125", + "weight": 1.0, + "source": "fixtures_stub_rclone_rationale_125", + "target": "fixtures_stub_rclone_dump_env", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L201", + "weight": 1.0, + "source": "fixtures_stub_rclone_main", + "target": "fixtures_stub_rclone_require_env", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/stub_rclone.py", + "source_location": "L136", + "weight": 1.0, + "source": "fixtures_stub_rclone_rationale_136", + "target": "fixtures_stub_rclone_require_env", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/hello_plugin/__init__.py", + "source_location": "L7", + "weight": 1.0, + "source": "tests_fixtures_plugins_hello_plugin_init_py", + "target": "tests_fixtures_plugins_hello_plugin_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/hello_plugin/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "hello_plugin_init_rationale_1", + "target": "tests_fixtures_plugins_hello_plugin_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/hello_plugin/plugin.py", + "source_location": "L20", + "weight": 1.0, + "source": "tests_fixtures_plugins_hello_plugin_plugin_py", + "target": "hello_plugin_plugin_helloplugin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/hello_plugin/plugin.py", + "source_location": "L1", + "weight": 1.0, + "source": "hello_plugin_plugin_rationale_1", + "target": "tests_fixtures_plugins_hello_plugin_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/hello_plugin/plugin.py", + "source_location": "L28", + "weight": 1.0, + "source": "hello_plugin_plugin_helloplugin", + "target": "hello_plugin_plugin_helloplugin_can_handle", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/hello_plugin/plugin.py", + "source_location": "L32", + "weight": 1.0, + "source": "hello_plugin_plugin_helloplugin", + "target": "hello_plugin_plugin_helloplugin_transform", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/hello_plugin/plugin.py", + "source_location": "L21", + "weight": 1.0, + "source": "hello_plugin_plugin_rationale_21", + "target": "hello_plugin_plugin_helloplugin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "failures_init_rationale_1", + "target": "tests_fixtures_plugins_failures_init_py", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/__init__.py", + "source_location": "L3", + "weight": 1.0, + "source": "tests_fixtures_plugins_failures_error_plugin_init_py", + "target": "tests_fixtures_plugins_failures_error_plugin_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "error_plugin_init_rationale_1", + "target": "tests_fixtures_plugins_failures_error_plugin_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L17", + "weight": 1.0, + "source": "tests_fixtures_plugins_failures_error_plugin_plugin_py", + "target": "error_plugin_plugin_errorplugin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L1", + "weight": 1.0, + "source": "error_plugin_plugin_rationale_1", + "target": "tests_fixtures_plugins_failures_error_plugin_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L25", + "weight": 1.0, + "source": "error_plugin_plugin_errorplugin", + "target": "error_plugin_plugin_errorplugin_can_handle", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L28", + "weight": 1.0, + "source": "error_plugin_plugin_errorplugin", + "target": "error_plugin_plugin_errorplugin_transform", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L18", + "weight": 1.0, + "source": "error_plugin_plugin_rationale_18", + "target": "error_plugin_plugin_errorplugin", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L13", + "weight": 0.8, + "source": "error_plugin_plugin_errorplugin", + "target": "exlab_wizard_errors_pluginerror", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/fixtures/plugins/_failures/error_plugin/plugin.py", + "source_location": "L29", + "weight": 1.0, + "source": "error_plugin_plugin_errorplugin_transform", + "target": "exlab_wizard_errors_pluginerror" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/__init__.py", + "source_location": "L3", + "weight": 1.0, + "source": "tests_fixtures_plugins_failures_policy_violation_plugin_init_py", + "target": "tests_fixtures_plugins_failures_policy_violation_plugin_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "policy_violation_plugin_init_rationale_1", + "target": "tests_fixtures_plugins_failures_policy_violation_plugin_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_fixtures_plugins_failures_policy_violation_plugin_plugin_py", + "target": "policy_violation_plugin_plugin_policyviolationplugin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", + "source_location": "L1", + "weight": 1.0, + "source": "policy_violation_plugin_plugin_rationale_1", + "target": "tests_fixtures_plugins_failures_policy_violation_plugin_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", + "source_location": "L26", + "weight": 1.0, + "source": "policy_violation_plugin_plugin_policyviolationplugin", + "target": "policy_violation_plugin_plugin_policyviolationplugin_can_handle", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", + "source_location": "L29", + "weight": 1.0, + "source": "policy_violation_plugin_plugin_policyviolationplugin", + "target": "policy_violation_plugin_plugin_policyviolationplugin_transform", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py", + "source_location": "L19", + "weight": 1.0, + "source": "policy_violation_plugin_plugin_rationale_19", + "target": "policy_violation_plugin_plugin_policyviolationplugin", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/__init__.py", + "source_location": "L3", + "weight": 1.0, + "source": "tests_fixtures_plugins_failures_input_required_plugin_init_py", + "target": "tests_fixtures_plugins_failures_input_required_plugin_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "input_required_plugin_init_rationale_1", + "target": "tests_fixtures_plugins_failures_input_required_plugin_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", + "source_location": "L20", + "weight": 1.0, + "source": "tests_fixtures_plugins_failures_input_required_plugin_plugin_py", + "target": "input_required_plugin_plugin_inputrequiredplugin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", + "source_location": "L1", + "weight": 1.0, + "source": "input_required_plugin_plugin_rationale_1", + "target": "tests_fixtures_plugins_failures_input_required_plugin_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", + "source_location": "L28", + "weight": 1.0, + "source": "input_required_plugin_plugin_inputrequiredplugin", + "target": "input_required_plugin_plugin_inputrequiredplugin_can_handle", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", + "source_location": "L31", + "weight": 1.0, + "source": "input_required_plugin_plugin_inputrequiredplugin", + "target": "input_required_plugin_plugin_inputrequiredplugin_transform", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", + "source_location": "L21", + "weight": 1.0, + "source": "input_required_plugin_plugin_rationale_21", + "target": "input_required_plugin_plugin_inputrequiredplugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/fixtures/plugins/_failures/input_required_plugin/plugin.py", + "source_location": "L38", + "weight": 1.0, + "source": "input_required_plugin_plugin_inputrequiredplugin_transform", + "target": "exlab_wizard_errors_plugininputrequired" + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/__init__.py", + "source_location": "L3", + "weight": 1.0, + "source": "tests_fixtures_plugins_failures_crash_plugin_init_py", + "target": "tests_fixtures_plugins_failures_crash_plugin_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "crash_plugin_init_rationale_1", + "target": "tests_fixtures_plugins_failures_crash_plugin_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/plugin.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_fixtures_plugins_failures_crash_plugin_plugin_py", + "target": "crash_plugin_plugin_crashplugin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/plugin.py", + "source_location": "L1", + "weight": 1.0, + "source": "crash_plugin_plugin_rationale_1", + "target": "tests_fixtures_plugins_failures_crash_plugin_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/plugin.py", + "source_location": "L26", + "weight": 1.0, + "source": "crash_plugin_plugin_crashplugin", + "target": "crash_plugin_plugin_crashplugin_can_handle", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/plugin.py", + "source_location": "L29", + "weight": 1.0, + "source": "crash_plugin_plugin_crashplugin", + "target": "crash_plugin_plugin_crashplugin_transform", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/crash_plugin/plugin.py", + "source_location": "L19", + "weight": 1.0, + "source": "crash_plugin_plugin_rationale_19", + "target": "crash_plugin_plugin_crashplugin", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/__init__.py", + "source_location": "L3", + "weight": 1.0, + "source": "tests_fixtures_plugins_failures_timeout_plugin_init_py", + "target": "tests_fixtures_plugins_failures_timeout_plugin_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "timeout_plugin_init_rationale_1", + "target": "tests_fixtures_plugins_failures_timeout_plugin_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", + "source_location": "L19", + "weight": 1.0, + "source": "tests_fixtures_plugins_failures_timeout_plugin_plugin_py", + "target": "timeout_plugin_plugin_timeoutplugin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", + "source_location": "L1", + "weight": 1.0, + "source": "timeout_plugin_plugin_rationale_1", + "target": "tests_fixtures_plugins_failures_timeout_plugin_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", + "source_location": "L27", + "weight": 1.0, + "source": "timeout_plugin_plugin_timeoutplugin", + "target": "timeout_plugin_plugin_timeoutplugin_can_handle", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", + "source_location": "L30", + "weight": 1.0, + "source": "timeout_plugin_plugin_timeoutplugin", + "target": "timeout_plugin_plugin_timeoutplugin_transform", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/plugins/_failures/timeout_plugin/plugin.py", + "source_location": "L20", + "weight": 1.0, + "source": "timeout_plugin_plugin_rationale_20", + "target": "timeout_plugin_plugin_timeoutplugin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/configs/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "configs_init_rationale_1", + "target": "tests_fixtures_configs_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/templates/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "templates_init_rationale_1", + "target": "tests_fixtures_templates_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_18_relay_receive.py", + "source_location": "L11", + "weight": 1.0, + "source": "tests_e2e_test_flow_18_relay_receive_py", + "target": "e2e_test_flow_18_relay_receive_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_18_relay_receive.py", + "source_location": "L24", + "weight": 1.0, + "source": "tests_e2e_test_flow_18_relay_receive_py", + "target": "e2e_test_flow_18_relay_receive_test_flow_18_received_equipment_node_appears", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_18_relay_receive.py", + "source_location": "L31", + "weight": 1.0, + "source": "tests_e2e_test_flow_18_relay_receive_py", + "target": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_18_relay_receive.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_18_relay_receive_rationale_1", + "target": "tests_e2e_test_flow_18_relay_receive_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_18_relay_receive.py", + "source_location": "L25", + "weight": 1.0, + "source": "e2e_test_flow_18_relay_receive_test_flow_18_received_equipment_node_appears", + "target": "e2e_test_flow_18_relay_receive_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_18_relay_receive.py", + "source_location": "L32", + "weight": 1.0, + "source": "e2e_test_flow_18_relay_receive_test_flow_18_received_metadata_shows_relay_badge", + "target": "e2e_test_flow_18_relay_receive_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/conftest.py", + "source_location": "L46", + "weight": 1.0, + "source": "tests_e2e_conftest_py", + "target": "e2e_conftest_free_port", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/conftest.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_e2e_conftest_py", + "target": "e2e_conftest_resolve_chromium_executable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/conftest.py", + "source_location": "L90", + "weight": 1.0, + "source": "tests_e2e_conftest_py", + "target": "e2e_conftest_server_url", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/conftest.py", + "source_location": "L155", + "weight": 1.0, + "source": "tests_e2e_conftest_py", + "target": "e2e_conftest_browser", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/conftest.py", + "source_location": "L181", + "weight": 1.0, + "source": "tests_e2e_conftest_py", + "target": "e2e_conftest_page", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/conftest.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_conftest_rationale_1", + "target": "tests_e2e_conftest_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/conftest.py", + "source_location": "L100", + "weight": 1.0, + "source": "e2e_conftest_server_url", + "target": "e2e_conftest_free_port", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/conftest.py", + "source_location": "L47", + "weight": 1.0, + "source": "e2e_conftest_rationale_47", + "target": "e2e_conftest_free_port", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/conftest.py", + "source_location": "L159", + "weight": 1.0, + "source": "e2e_conftest_browser", + "target": "e2e_conftest_resolve_chromium_executable", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/conftest.py", + "source_location": "L54", + "weight": 1.0, + "source": "e2e_conftest_rationale_54", + "target": "e2e_conftest_resolve_chromium_executable", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "scripts/generate_screenshots.py", + "source_location": "L353", + "weight": 1.0, + "source": "scripts_generate_screenshots_main", + "target": "e2e_conftest_resolve_chromium_executable" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/conftest.py", + "source_location": "L91", + "weight": 1.0, + "source": "e2e_conftest_rationale_91", + "target": "e2e_conftest_server_url", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/conftest.py", + "source_location": "L156", + "weight": 1.0, + "source": "e2e_conftest_rationale_156", + "target": "e2e_conftest_browser", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/conftest.py", + "source_location": "L182", + "weight": 1.0, + "source": "e2e_conftest_rationale_182", + "target": "e2e_conftest_page", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_fresh_install_setup.py", + "source_location": "L49", + "weight": 1.0, + "source": "tests_e2e_test_flow_00_fresh_install_setup_py", + "target": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_fresh_install_setup.py", + "source_location": "L107", + "weight": 1.0, + "source": "tests_e2e_test_flow_00_fresh_install_setup_py", + "target": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_fresh_install_setup.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_00_fresh_install_setup_rationale_1", + "target": "tests_e2e_test_flow_00_fresh_install_setup_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_fresh_install_setup.py", + "source_location": "L50", + "weight": 1.0, + "source": "e2e_test_flow_00_fresh_install_setup_rationale_50", + "target": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_00_fresh_install_setup.py", + "source_location": "L58", + "weight": 1.0, + "source": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", + "target": "e2e_prod_server_free_port" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_00_fresh_install_setup.py", + "source_location": "L59", + "weight": 1.0, + "source": "e2e_test_flow_00_fresh_install_setup_fresh_prod_server", + "target": "e2e_prod_server_prod_app_env" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_00_fresh_install_setup.py", + "source_location": "L113", + "weight": 1.0, + "source": "e2e_test_flow_00_fresh_install_setup_test_fresh_install_setup_writes_config_and_applies_live", + "target": "e2e_prod_server_resolve_config_path" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_22_onboarding_redesign.py", + "source_location": "L19", + "weight": 1.0, + "source": "tests_e2e_test_flow_22_onboarding_redesign_py", + "target": "e2e_test_flow_22_onboarding_redesign_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_22_onboarding_redesign.py", + "source_location": "L32", + "weight": 1.0, + "source": "tests_e2e_test_flow_22_onboarding_redesign_py", + "target": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_22_onboarding_redesign.py", + "source_location": "L47", + "weight": 1.0, + "source": "tests_e2e_test_flow_22_onboarding_redesign_py", + "target": "e2e_test_flow_22_onboarding_redesign_test_flow_22_main_window_has_add_equipment_in_toolbar", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_22_onboarding_redesign.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_22_onboarding_redesign_rationale_1", + "target": "tests_e2e_test_flow_22_onboarding_redesign_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_22_onboarding_redesign.py", + "source_location": "L35", + "weight": 1.0, + "source": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", + "target": "e2e_test_flow_22_onboarding_redesign_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_22_onboarding_redesign.py", + "source_location": "L48", + "weight": 1.0, + "source": "e2e_test_flow_22_onboarding_redesign_test_flow_22_main_window_has_add_equipment_in_toolbar", + "target": "e2e_test_flow_22_onboarding_redesign_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_22_onboarding_redesign.py", + "source_location": "L33", + "weight": 1.0, + "source": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", + "target": "page_objects_welcome_page_welcomepage" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_22_onboarding_redesign.py", + "source_location": "L34", + "weight": 1.0, + "source": "e2e_test_flow_22_onboarding_redesign_test_flow_22_welcome_to_add_equipment", + "target": "page_objects_wizard_equipment_page_wizardequipmentpage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L21", + "weight": 1.0, + "source": "tests_e2e_test_flow_24_context_menus_py", + "target": "e2e_test_flow_24_context_menus_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L34", + "weight": 1.0, + "source": "tests_e2e_test_flow_24_context_menus_py", + "target": "e2e_test_flow_24_context_menus_open_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L39", + "weight": 1.0, + "source": "tests_e2e_test_flow_24_context_menus_py", + "target": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_e2e_test_flow_24_context_menus_py", + "target": "e2e_test_flow_24_context_menus_test_flow_24_edit_equipment_deep_links_into_settings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L63", + "weight": 1.0, + "source": "tests_e2e_test_flow_24_context_menus_py", + "target": "e2e_test_flow_24_context_menus_test_flow_24_remove_equipment_deep_links_into_settings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L72", + "weight": 1.0, + "source": "tests_e2e_test_flow_24_context_menus_py", + "target": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L85", + "weight": 1.0, + "source": "tests_e2e_test_flow_24_context_menus_py", + "target": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L97", + "weight": 1.0, + "source": "tests_e2e_test_flow_24_context_menus_py", + "target": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L112", + "weight": 1.0, + "source": "tests_e2e_test_flow_24_context_menus_py", + "target": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L132", + "weight": 1.0, + "source": "tests_e2e_test_flow_24_context_menus_py", + "target": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_rationale_1", + "target": "tests_e2e_test_flow_24_context_menus_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L40", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", + "target": "e2e_test_flow_24_context_menus_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L53", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_edit_equipment_deep_links_into_settings", + "target": "e2e_test_flow_24_context_menus_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L64", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_remove_equipment_deep_links_into_settings", + "target": "e2e_test_flow_24_context_menus_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L74", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", + "target": "e2e_test_flow_24_context_menus_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L86", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", + "target": "e2e_test_flow_24_context_menus_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L99", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", + "target": "e2e_test_flow_24_context_menus_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L119", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", + "target": "e2e_test_flow_24_context_menus_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L141", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", + "target": "e2e_test_flow_24_context_menus_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L43", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_owned_equipment_context_menu_items_render", + "target": "e2e_test_flow_24_context_menus_open_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L56", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_edit_equipment_deep_links_into_settings", + "target": "e2e_test_flow_24_context_menus_open_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L66", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_remove_equipment_deep_links_into_settings", + "target": "e2e_test_flow_24_context_menus_open_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L77", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", + "target": "e2e_test_flow_24_context_menus_open_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L89", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_run_context_menu_items_render", + "target": "e2e_test_flow_24_context_menus_open_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L106", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", + "target": "e2e_test_flow_24_context_menus_open_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L124", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", + "target": "e2e_test_flow_24_context_menus_open_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L150", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", + "target": "e2e_test_flow_24_context_menus_open_context", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L35", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_rationale_35", + "target": "e2e_test_flow_24_context_menus_open_context", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L73", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_rationale_73", + "target": "e2e_test_flow_24_context_menus_test_flow_24_received_equipment_has_no_context_menu", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L98", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_rationale_98", + "target": "e2e_test_flow_24_context_menus_test_flow_24_file_list_row_context_menu", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L113", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_rationale_113", + "target": "e2e_test_flow_24_context_menus_test_flow_24_tombstone_row_has_no_open_in_os", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_24_context_menus.py", + "source_location": "L133", + "weight": 1.0, + "source": "e2e_test_flow_24_context_menus_rationale_133", + "target": "e2e_test_flow_24_context_menus_test_flow_24_keep_local_badge_and_toggle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L30", + "weight": 1.0, + "source": "tests_e2e_test_flow_08_settings_py", + "target": "e2e_test_flow_08_settings_test_flow_08_settings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L58", + "weight": 1.0, + "source": "tests_e2e_test_flow_08_settings_py", + "target": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L91", + "weight": 1.0, + "source": "tests_e2e_test_flow_08_settings_py", + "target": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_08_settings_rationale_1", + "target": "tests_e2e_test_flow_08_settings_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L31", + "weight": 1.0, + "source": "e2e_test_flow_08_settings_test_flow_08_settings", + "target": "page_objects_settings_page_settingspage" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L59", + "weight": 1.0, + "source": "e2e_test_flow_08_settings_rationale_59", + "target": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L64", + "weight": 1.0, + "source": "e2e_test_flow_08_settings_test_flow_08_lims_password_credential", + "target": "page_objects_settings_page_settingspage" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L92", + "weight": 1.0, + "source": "e2e_test_flow_08_settings_rationale_92", + "target": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_08_settings.py", + "source_location": "L93", + "weight": 1.0, + "source": "e2e_test_flow_08_settings_test_flow_08_lims_password_cancel_discards_edit", + "target": "page_objects_settings_page_settingspage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_11_crash_recovery.py", + "source_location": "L16", + "weight": 1.0, + "source": "tests_e2e_test_flow_11_crash_recovery_py", + "target": "e2e_test_flow_11_crash_recovery_test_flow_11_crash_recovery", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_11_crash_recovery.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_11_crash_recovery_rationale_1", + "target": "tests_e2e_test_flow_11_crash_recovery_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_11_crash_recovery.py", + "source_location": "L17", + "weight": 1.0, + "source": "e2e_test_flow_11_crash_recovery_test_flow_11_crash_recovery", + "target": "page_objects_problems_page_problemspage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_03_experimental_run.py", + "source_location": "L15", + "weight": 1.0, + "source": "tests_e2e_test_flow_03_experimental_run_py", + "target": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_03_experimental_run.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_03_experimental_run_rationale_1", + "target": "tests_e2e_test_flow_03_experimental_run_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_03_experimental_run.py", + "source_location": "L16", + "weight": 1.0, + "source": "e2e_test_flow_03_experimental_run_test_flow_03_experimental_run", + "target": "page_objects_wizard_run_page_wizardrunpage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_e2e_prod_server_py", + "target": "e2e_prod_server_free_port", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L36", + "weight": 1.0, + "source": "tests_e2e_prod_server_py", + "target": "e2e_prod_server_prod_app_env", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L60", + "weight": 1.0, + "source": "tests_e2e_prod_server_py", + "target": "e2e_prod_server_resolve_config_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L75", + "weight": 1.0, + "source": "tests_e2e_prod_server_py", + "target": "e2e_prod_server_prodserver", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L94", + "weight": 1.0, + "source": "tests_e2e_prod_server_py", + "target": "e2e_prod_server_config_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_prod_server_rationale_1", + "target": "tests_e2e_prod_server_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L86", + "weight": 1.0, + "source": "e2e_prod_server_prodserver_init", + "target": "e2e_prod_server_free_port", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L30", + "weight": 1.0, + "source": "e2e_prod_server_rationale_30", + "target": "e2e_prod_server_free_port", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L130", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", + "target": "e2e_prod_server_free_port" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L71", + "weight": 1.0, + "source": "e2e_prod_server_resolve_config_path", + "target": "e2e_prod_server_prod_app_env", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L89", + "weight": 1.0, + "source": "e2e_prod_server_prodserver_init", + "target": "e2e_prod_server_prod_app_env", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L37", + "weight": 1.0, + "source": "e2e_prod_server_rationale_37", + "target": "e2e_prod_server_prod_app_env", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L121", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", + "target": "e2e_prod_server_prod_app_env" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L96", + "weight": 1.0, + "source": "e2e_prod_server_config_path", + "target": "e2e_prod_server_resolve_config_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L61", + "weight": 1.0, + "source": "e2e_prod_server_rationale_61", + "target": "e2e_prod_server_resolve_config_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L72", + "weight": 1.0, + "source": "e2e_prod_server_resolve_config_path", + "target": "exlab_wizard_paths_os_config_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L89", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_seed_config", + "target": "e2e_prod_server_resolve_config_path" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L84", + "weight": 1.0, + "source": "e2e_prod_server_prodserver", + "target": "e2e_prod_server_prodserver_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L98", + "weight": 1.0, + "source": "e2e_prod_server_prodserver", + "target": "e2e_prod_server_prodserver_start", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L132", + "weight": 1.0, + "source": "e2e_prod_server_prodserver", + "target": "e2e_prod_server_prodserver_stop", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L144", + "weight": 1.0, + "source": "e2e_prod_server_prodserver", + "target": "e2e_prod_server_prodserver_restart", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L76", + "weight": 1.0, + "source": "e2e_prod_server_rationale_76", + "target": "e2e_prod_server_prodserver", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L155", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_prod_server", + "target": "e2e_prod_server_prodserver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_26_equipment_wizard_persist.py", + "source_location": "L44", + "weight": 1.0, + "source": "e2e_test_flow_26_equipment_wizard_persist_prod_server", + "target": "e2e_prod_server_prodserver" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L129", + "weight": 1.0, + "source": "e2e_prod_server_prodserver_start", + "target": "e2e_prod_server_prodserver_stop", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L147", + "weight": 1.0, + "source": "e2e_prod_server_prodserver_restart", + "target": "e2e_prod_server_prodserver_start", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L99", + "weight": 1.0, + "source": "e2e_prod_server_rationale_99", + "target": "e2e_prod_server_prodserver_start", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L146", + "weight": 1.0, + "source": "e2e_prod_server_prodserver_restart", + "target": "e2e_prod_server_prodserver_stop", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L133", + "weight": 1.0, + "source": "e2e_prod_server_rationale_133", + "target": "e2e_prod_server_prodserver_stop", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_server.py", + "source_location": "L145", + "weight": 1.0, + "source": "e2e_prod_server_rationale_145", + "target": "e2e_prod_server_prodserver_restart", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_17_picker_step.py", + "source_location": "L12", + "weight": 1.0, + "source": "tests_e2e_test_flow_17_picker_step_py", + "target": "e2e_test_flow_17_picker_step_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_17_picker_step.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_e2e_test_flow_17_picker_step_py", + "target": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_17_picker_step.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_e2e_test_flow_17_picker_step_py", + "target": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_disabled_on_received_node", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_17_picker_step.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_17_picker_step_rationale_1", + "target": "tests_e2e_test_flow_17_picker_step_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_17_picker_step.py", + "source_location": "L26", + "weight": 1.0, + "source": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_enabled_on_owned_node", + "target": "e2e_test_flow_17_picker_step_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_17_picker_step.py", + "source_location": "L47", + "weight": 1.0, + "source": "e2e_test_flow_17_picker_step_test_flow_17_creation_buttons_disabled_on_received_node", + "target": "e2e_test_flow_17_picker_step_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L10", + "weight": 1.0, + "source": "tests_e2e_test_flow_20_file_explorer_py", + "target": "e2e_test_flow_20_file_explorer_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_e2e_test_flow_20_file_explorer_py", + "target": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L42", + "weight": 1.0, + "source": "tests_e2e_test_flow_20_file_explorer_py", + "target": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_e2e_test_flow_20_file_explorer_py", + "target": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_20_file_explorer_rationale_1", + "target": "tests_e2e_test_flow_20_file_explorer_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L24", + "weight": 1.0, + "source": "e2e_test_flow_20_file_explorer_test_flow_20_file_explorer_renders_three_regions", + "target": "e2e_test_flow_20_file_explorer_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L43", + "weight": 1.0, + "source": "e2e_test_flow_20_file_explorer_test_flow_20_select_run_node_renders_metadata_pane", + "target": "e2e_test_flow_20_file_explorer_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_20_file_explorer.py", + "source_location": "L54", + "weight": 1.0, + "source": "e2e_test_flow_20_file_explorer_test_flow_20_breadcrumb_is_present_when_node_selected", + "target": "e2e_test_flow_20_file_explorer_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_05_browse_view_sync_icons.py", + "source_location": "L20", + "weight": 1.0, + "source": "tests_e2e_test_flow_05_browse_view_sync_icons_py", + "target": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_05_browse_view_sync_icons.py", + "source_location": "L47", + "weight": 1.0, + "source": "tests_e2e_test_flow_05_browse_view_sync_icons_py", + "target": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_static_assets_serve_200", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_05_browse_view_sync_icons.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_05_browse_view_sync_icons_rationale_1", + "target": "tests_e2e_test_flow_05_browse_view_sync_icons_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_05_browse_view_sync_icons.py", + "source_location": "L21", + "weight": 1.0, + "source": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_render_in_tree", + "target": "page_objects_main_page_mainpage" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_05_browse_view_sync_icons.py", + "source_location": "L48", + "weight": 1.0, + "source": "e2e_test_flow_05_browse_view_sync_icons_rationale_48", + "target": "e2e_test_flow_05_browse_view_sync_icons_test_flow_05_sync_icons_static_assets_serve_200", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_05_browse_view.py", + "source_location": "L15", + "weight": 1.0, + "source": "tests_e2e_test_flow_05_browse_view_py", + "target": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_05_browse_view.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_05_browse_view_rationale_1", + "target": "tests_e2e_test_flow_05_browse_view_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_05_browse_view.py", + "source_location": "L16", + "weight": 1.0, + "source": "e2e_test_flow_05_browse_view_test_flow_05_browse_view", + "target": "page_objects_main_page_mainpage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L20", + "weight": 1.0, + "source": "tests_e2e_test_flow_16_add_equipment_py", + "target": "e2e_test_flow_16_add_equipment_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_e2e_test_flow_16_add_equipment_py", + "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L44", + "weight": 1.0, + "source": "tests_e2e_test_flow_16_add_equipment_py", + "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_paths_step", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_e2e_test_flow_16_add_equipment_py", + "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_sync_mode_step", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L59", + "weight": 1.0, + "source": "tests_e2e_test_flow_16_add_equipment_py", + "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L69", + "weight": 1.0, + "source": "tests_e2e_test_flow_16_add_equipment_py", + "target": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_rationale_1", + "target": "tests_e2e_test_flow_16_add_equipment_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L36", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", + "target": "e2e_test_flow_16_add_equipment_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L47", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_paths_step", + "target": "e2e_test_flow_16_add_equipment_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L55", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_sync_mode_step", + "target": "e2e_test_flow_16_add_equipment_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L62", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", + "target": "e2e_test_flow_16_add_equipment_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L80", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", + "target": "e2e_test_flow_16_add_equipment_goto", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L34", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_rationale_34", + "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L35", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_identity_step", + "target": "page_objects_wizard_equipment_page_wizardequipmentpage" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L45", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_rationale_45", + "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_paths_step", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L46", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_paths_step", + "target": "page_objects_wizard_equipment_page_wizardequipmentpage" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L53", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_rationale_53", + "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_sync_mode_step", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L54", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_sync_mode_step", + "target": "page_objects_wizard_equipment_page_wizardequipmentpage" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L60", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_rationale_60", + "target": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L61", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_test_flow_16_add_equipment_review_and_confirm", + "target": "page_objects_wizard_equipment_page_wizardequipmentpage" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L70", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_rationale_70", + "target": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_16_add_equipment.py", + "source_location": "L79", + "weight": 1.0, + "source": "e2e_test_flow_16_add_equipment_test_flow_16_next_enables_on_valid_input_and_state_survives_back", + "target": "page_objects_wizard_equipment_page_wizardequipmentpage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_23_footer_staging.py", + "source_location": "L10", + "weight": 1.0, + "source": "tests_e2e_test_flow_23_footer_staging_py", + "target": "e2e_test_flow_23_footer_staging_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_23_footer_staging.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_e2e_test_flow_23_footer_staging_py", + "target": "e2e_test_flow_23_footer_staging_test_flow_23_footer_staging_segment_renders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_23_footer_staging.py", + "source_location": "L28", + "weight": 1.0, + "source": "tests_e2e_test_flow_23_footer_staging_py", + "target": "e2e_test_flow_23_footer_staging_test_flow_23_bulk_clear_verified_action_present", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_23_footer_staging.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_23_footer_staging_rationale_1", + "target": "tests_e2e_test_flow_23_footer_staging_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_23_footer_staging.py", + "source_location": "L24", + "weight": 1.0, + "source": "e2e_test_flow_23_footer_staging_test_flow_23_footer_staging_segment_renders", + "target": "e2e_test_flow_23_footer_staging_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_23_footer_staging.py", + "source_location": "L29", + "weight": 1.0, + "source": "e2e_test_flow_23_footer_staging_test_flow_23_bulk_clear_verified_action_present", + "target": "e2e_test_flow_23_footer_staging_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_smoke.py", + "source_location": "L15", + "weight": 1.0, + "source": "tests_e2e_test_smoke_py", + "target": "e2e_test_smoke_test_root_url_responds_with_html", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_smoke.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_smoke_rationale_1", + "target": "tests_e2e_test_smoke_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_smoke.py", + "source_location": "L16", + "weight": 1.0, + "source": "e2e_test_smoke_rationale_16", + "target": "e2e_test_smoke_test_root_url_responds_with_html", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L45", + "weight": 1.0, + "source": "tests_e2e_test_ux_documentation_py", + "target": "e2e_test_ux_documentation_render_doc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L66", + "weight": 1.0, + "source": "tests_e2e_test_ux_documentation_py", + "target": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_e2e_test_ux_documentation_py", + "target": "e2e_test_ux_documentation_test_ux_catalog_is_non_trivial", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L97", + "weight": 1.0, + "source": "tests_e2e_test_ux_documentation_py", + "target": "e2e_test_ux_documentation_references", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L116", + "weight": 1.0, + "source": "tests_e2e_test_ux_documentation_py", + "target": "e2e_test_ux_documentation_test_ux_interaction_testids_exist_in_source", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L127", + "weight": 1.0, + "source": "tests_e2e_test_ux_documentation_py", + "target": "e2e_test_ux_documentation_test_ux_interactions_are_e2e_covered", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_ux_documentation_rationale_1", + "target": "tests_e2e_test_ux_documentation_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L74", + "weight": 1.0, + "source": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", + "target": "e2e_test_ux_documentation_render_doc", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L46", + "weight": 1.0, + "source": "e2e_test_ux_documentation_rationale_46", + "target": "e2e_test_ux_documentation_render_doc", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L67", + "weight": 1.0, + "source": "e2e_test_ux_documentation_rationale_67", + "target": "e2e_test_ux_documentation_test_ux_interactions_doc_is_current", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L87", + "weight": 1.0, + "source": "e2e_test_ux_documentation_rationale_87", + "target": "e2e_test_ux_documentation_test_ux_catalog_is_non_trivial", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L122", + "weight": 1.0, + "source": "e2e_test_ux_documentation_test_ux_interaction_testids_exist_in_source", + "target": "e2e_test_ux_documentation_references", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L140", + "weight": 1.0, + "source": "e2e_test_ux_documentation_test_ux_interactions_are_e2e_covered", + "target": "e2e_test_ux_documentation_references", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L98", + "weight": 1.0, + "source": "e2e_test_ux_documentation_rationale_98", + "target": "e2e_test_ux_documentation_references", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L117", + "weight": 1.0, + "source": "e2e_test_ux_documentation_rationale_117", + "target": "e2e_test_ux_documentation_test_ux_interaction_testids_exist_in_source", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_ux_documentation.py", + "source_location": "L128", + "weight": 1.0, + "source": "e2e_test_ux_documentation_rationale_128", + "target": "e2e_test_ux_documentation_test_ux_interactions_are_e2e_covered", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_app.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_e2e_prod_app_py", + "target": "e2e_prod_app_create_prod_app_factory", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_app.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_prod_app_rationale_1", + "target": "tests_e2e_prod_app_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_prod_app.py", + "source_location": "L24", + "weight": 1.0, + "source": "e2e_prod_app_rationale_24", + "target": "e2e_prod_app_create_prod_app_factory", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/_prod_app.py", + "source_location": "L28", + "weight": 1.0, + "source": "e2e_prod_app_create_prod_app_factory", + "target": "tray_main_build_default_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/_prod_app.py", + "source_location": "L28", + "weight": 1.0, + "source": "e2e_prod_app_create_prod_app_factory", + "target": "exlab_wizard_paths_ensure_state_dir" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L21", + "weight": 1.0, + "source": "tests_e2e_test_flow_25_production_main_wiring_py", + "target": "e2e_test_flow_25_production_main_wiring_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L40", + "weight": 1.0, + "source": "tests_e2e_test_flow_25_production_main_wiring_py", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L75", + "weight": 1.0, + "source": "tests_e2e_test_flow_25_production_main_wiring_py", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_add_equipment_button_navigates_to_wizard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L82", + "weight": 1.0, + "source": "tests_e2e_test_flow_25_production_main_wiring_py", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_select_node_threads_selected_into_url", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L95", + "weight": 1.0, + "source": "tests_e2e_test_flow_25_production_main_wiring_py", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_selected_query_renders_centre_and_right_panes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L105", + "weight": 1.0, + "source": "tests_e2e_test_flow_25_production_main_wiring_py", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L121", + "weight": 1.0, + "source": "tests_e2e_test_flow_25_production_main_wiring_py", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L132", + "weight": 1.0, + "source": "tests_e2e_test_flow_25_production_main_wiring_py", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L147", + "weight": 1.0, + "source": "tests_e2e_test_flow_25_production_main_wiring_py", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_received_equipment_disables_creation_buttons", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L172", + "weight": 1.0, + "source": "tests_e2e_test_flow_25_production_main_wiring_py", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_footer_clear_verified_routes_to_callback", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_rationale_1", + "target": "tests_e2e_test_flow_25_production_main_wiring_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L50", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", + "target": "e2e_test_flow_25_production_main_wiring_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L77", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_test_flow_25_add_equipment_button_navigates_to_wizard", + "target": "e2e_test_flow_25_production_main_wiring_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L89", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_test_flow_25_select_node_threads_selected_into_url", + "target": "e2e_test_flow_25_production_main_wiring_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L97", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_test_flow_25_selected_query_renders_centre_and_right_panes", + "target": "e2e_test_flow_25_production_main_wiring_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L112", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", + "target": "e2e_test_flow_25_production_main_wiring_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L123", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", + "target": "e2e_test_flow_25_production_main_wiring_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L137", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", + "target": "e2e_test_flow_25_production_main_wiring_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L154", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_test_flow_25_received_equipment_disables_creation_buttons", + "target": "e2e_test_flow_25_production_main_wiring_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L180", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_test_flow_25_footer_clear_verified_routes_to_callback", + "target": "e2e_test_flow_25_production_main_wiring_goto", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L22", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_rationale_22", + "target": "e2e_test_flow_25_production_main_wiring_goto", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L41", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_rationale_41", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_main_route_renders_redesigned_layout", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L76", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_rationale_76", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_add_equipment_button_navigates_to_wizard", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L83", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_rationale_83", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_select_node_threads_selected_into_url", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L96", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_rationale_96", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_selected_query_renders_centre_and_right_panes", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L106", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_rationale_106", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_breadcrumb_navigation_re_navigates_main", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L122", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_rationale_122", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_toggle_right_pane_toggles_query_param", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L133", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_rationale_133", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_tree_context_action_deep_links_into_settings", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L148", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_rationale_148", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_received_equipment_disables_creation_buttons", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_25_production_main_wiring.py", + "source_location": "L173", + "weight": 1.0, + "source": "e2e_test_flow_25_production_main_wiring_rationale_173", + "target": "e2e_test_flow_25_production_main_wiring_test_flow_25_footer_clear_verified_routes_to_callback", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L50", + "weight": 1.0, + "source": "tests_e2e_test_flow_00_full_lifecycle_py", + "target": "e2e_test_flow_00_full_lifecycle_fill", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L57", + "weight": 1.0, + "source": "tests_e2e_test_flow_00_full_lifecycle_py", + "target": "e2e_test_flow_00_full_lifecycle_select", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_e2e_test_flow_00_full_lifecycle_py", + "target": "e2e_test_flow_00_full_lifecycle_pick_radio", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L93", + "weight": 1.0, + "source": "tests_e2e_test_flow_00_full_lifecycle_py", + "target": "e2e_test_flow_00_full_lifecycle_step_button", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L111", + "weight": 1.0, + "source": "tests_e2e_test_flow_00_full_lifecycle_py", + "target": "e2e_test_flow_00_full_lifecycle_project_next", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L116", + "weight": 1.0, + "source": "tests_e2e_test_flow_00_full_lifecycle_py", + "target": "e2e_test_flow_00_full_lifecycle_run_next", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L121", + "weight": 1.0, + "source": "tests_e2e_test_flow_00_full_lifecycle_py", + "target": "e2e_test_flow_00_full_lifecycle_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L146", + "weight": 1.0, + "source": "tests_e2e_test_flow_00_full_lifecycle_py", + "target": "e2e_test_flow_00_full_lifecycle_prod_server", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L175", + "weight": 1.0, + "source": "tests_e2e_test_flow_00_full_lifecycle_py", + "target": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_rationale_1", + "target": "tests_e2e_test_flow_00_full_lifecycle_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L224", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", + "target": "e2e_test_flow_00_full_lifecycle_fill", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L51", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_rationale_51", + "target": "e2e_test_flow_00_full_lifecycle_fill", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L299", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", + "target": "e2e_test_flow_00_full_lifecycle_select", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L65", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_rationale_65", + "target": "e2e_test_flow_00_full_lifecycle_select", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L254", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", + "target": "e2e_test_flow_00_full_lifecycle_pick_radio", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L87", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_rationale_87", + "target": "e2e_test_flow_00_full_lifecycle_pick_radio", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L113", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_project_next", + "target": "e2e_test_flow_00_full_lifecycle_step_button", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L118", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_run_next", + "target": "e2e_test_flow_00_full_lifecycle_step_button", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L364", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", + "target": "e2e_test_flow_00_full_lifecycle_step_button", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L100", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_rationale_100", + "target": "e2e_test_flow_00_full_lifecycle_step_button", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L346", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", + "target": "e2e_test_flow_00_full_lifecycle_project_next", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L112", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_rationale_112", + "target": "e2e_test_flow_00_full_lifecycle_project_next", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L379", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", + "target": "e2e_test_flow_00_full_lifecycle_run_next", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L117", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_rationale_117", + "target": "e2e_test_flow_00_full_lifecycle_run_next", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L214", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", + "target": "e2e_test_flow_00_full_lifecycle_goto", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L122", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_rationale_122", + "target": "e2e_test_flow_00_full_lifecycle_goto", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L147", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_rationale_147", + "target": "e2e_test_flow_00_full_lifecycle_prod_server", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L190", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", + "target": "lims_catalogue_write_catalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L192", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", + "target": "lims_catalogue_offlinecatalogue" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_00_full_lifecycle.py", + "source_location": "L198", + "weight": 1.0, + "source": "e2e_test_flow_00_full_lifecycle_test_full_create_lifecycle", + "target": "lims_schemas_limsproject" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_13_keyboard.py", + "source_location": "L14", + "weight": 1.0, + "source": "tests_e2e_test_flow_13_keyboard_py", + "target": "e2e_test_flow_13_keyboard_test_flow_13_keyboard", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_13_keyboard.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_13_keyboard_rationale_1", + "target": "tests_e2e_test_flow_13_keyboard_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/ux_catalog.py", + "source_location": "L29", + "weight": 1.0, + "source": "tests_e2e_ux_catalog_py", + "target": "e2e_ux_catalog_uxinteraction", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/ux_catalog.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_ux_catalog_rationale_1", + "target": "tests_e2e_ux_catalog_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/ux_catalog.py", + "source_location": "L30", + "weight": 1.0, + "source": "e2e_ux_catalog_rationale_30", + "target": "e2e_ux_catalog_uxinteraction", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_07_plugin_input_required.py", + "source_location": "L14", + "weight": 1.0, + "source": "tests_e2e_test_flow_07_plugin_input_required_py", + "target": "e2e_test_flow_07_plugin_input_required_test_flow_07_plugin_input_required", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_07_plugin_input_required.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_07_plugin_input_required_rationale_1", + "target": "tests_e2e_test_flow_07_plugin_input_required_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_26_equipment_wizard_persist.py", + "source_location": "L40", + "weight": 1.0, + "source": "tests_e2e_test_flow_26_equipment_wizard_persist_py", + "target": "e2e_test_flow_26_equipment_wizard_persist_prod_server", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_26_equipment_wizard_persist.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_e2e_test_flow_26_equipment_wizard_persist_py", + "target": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_26_equipment_wizard_persist.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_26_equipment_wizard_persist_rationale_1", + "target": "tests_e2e_test_flow_26_equipment_wizard_persist_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_26_equipment_wizard_persist.py", + "source_location": "L41", + "weight": 1.0, + "source": "e2e_test_flow_26_equipment_wizard_persist_rationale_41", + "target": "e2e_test_flow_26_equipment_wizard_persist_prod_server", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_26_equipment_wizard_persist.py", + "source_location": "L54", + "weight": 1.0, + "source": "e2e_test_flow_26_equipment_wizard_persist_rationale_54", + "target": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_26_equipment_wizard_persist.py", + "source_location": "L60", + "weight": 1.0, + "source": "e2e_test_flow_26_equipment_wizard_persist_test_equipment_wizard_confirm_persists_to_config", + "target": "page_objects_wizard_equipment_page_wizardequipmentpage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_09_orchestrator.py", + "source_location": "L20", + "weight": 1.0, + "source": "tests_e2e_test_flow_09_orchestrator_py", + "target": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_09_orchestrator.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_09_orchestrator_rationale_1", + "target": "tests_e2e_test_flow_09_orchestrator_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_09_orchestrator.py", + "source_location": "L21", + "weight": 1.0, + "source": "e2e_test_flow_09_orchestrator_test_flow_09_orchestrator", + "target": "page_objects_staging_page_stagingpage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L46", + "weight": 1.0, + "source": "tests_e2e_test_flow_27_nas_credential_settings_py", + "target": "e2e_test_flow_27_nas_credential_settings_seed_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L95", + "weight": 1.0, + "source": "tests_e2e_test_flow_27_nas_credential_settings_py", + "target": "e2e_test_flow_27_nas_credential_settings_install_stub_rclone", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L105", + "weight": 1.0, + "source": "tests_e2e_test_flow_27_nas_credential_settings_py", + "target": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L175", + "weight": 1.0, + "source": "tests_e2e_test_flow_27_nas_credential_settings_py", + "target": "e2e_test_flow_27_nas_credential_settings_setup_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L179", + "weight": 1.0, + "source": "tests_e2e_test_flow_27_nas_credential_settings_py", + "target": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_rationale_1", + "target": "tests_e2e_test_flow_27_nas_credential_settings_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L128", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", + "target": "e2e_test_flow_27_nas_credential_settings_seed_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L47", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_rationale_47", + "target": "e2e_test_flow_27_nas_credential_settings_seed_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L66", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_seed_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L71", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_seed_config", + "target": "config_models_limsconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L73", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_seed_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L78", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_seed_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L86", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_seed_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L91", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_seed_config", + "target": "config_loader_save_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L119", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", + "target": "e2e_test_flow_27_nas_credential_settings_install_stub_rclone", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L106", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_rationale_106", + "target": "e2e_test_flow_27_nas_credential_settings_nas_prod_server", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_27_nas_credential_settings.py", + "source_location": "L184", + "weight": 1.0, + "source": "e2e_test_flow_27_nas_credential_settings_test_nas_credential_gate_set_test_and_clear", + "target": "e2e_test_flow_27_nas_credential_settings_setup_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_15_websocket_reconnect.py", + "source_location": "L16", + "weight": 1.0, + "source": "tests_e2e_test_flow_15_websocket_reconnect_py", + "target": "e2e_test_flow_15_websocket_reconnect_test_flow_15_websocket_reconnect", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_15_websocket_reconnect.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_15_websocket_reconnect_rationale_1", + "target": "tests_e2e_test_flow_15_websocket_reconnect_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_21_stage_ceiling.py", + "source_location": "L12", + "weight": 1.0, + "source": "tests_e2e_test_flow_21_stage_ceiling_py", + "target": "e2e_test_flow_21_stage_ceiling_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_21_stage_ceiling.py", + "source_location": "L25", + "weight": 1.0, + "source": "tests_e2e_test_flow_21_stage_ceiling_py", + "target": "e2e_test_flow_21_stage_ceiling_test_flow_21_stage_equipment_metadata_renders_ceiling_note", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_21_stage_ceiling.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_21_stage_ceiling_rationale_1", + "target": "tests_e2e_test_flow_21_stage_ceiling_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L67", + "weight": 1.0, + "source": "tests_e2e_test_app_py", + "target": "e2e_test_app_teststate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L102", + "weight": 1.0, + "source": "tests_e2e_test_app_py", + "target": "e2e_test_app_read_query", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L109", + "weight": 1.0, + "source": "tests_e2e_test_app_py", + "target": "e2e_test_app_classify_test_node", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L129", + "weight": 1.0, + "source": "tests_e2e_test_app_py", + "target": "e2e_test_app_seeded_metadata_payload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L189", + "weight": 1.0, + "source": "tests_e2e_test_app_py", + "target": "e2e_test_app_feed_rows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L209", + "weight": 1.0, + "source": "tests_e2e_test_app_py", + "target": "e2e_test_app_seeded_file_entries", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L236", + "weight": 1.0, + "source": "tests_e2e_test_app_py", + "target": "e2e_test_app_build_test_app", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L898", + "weight": 1.0, + "source": "tests_e2e_test_app_py", + "target": "e2e_test_app_create_app_factory", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_app_rationale_1", + "target": "tests_e2e_test_app_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L243", + "weight": 1.0, + "source": "e2e_test_app_build_test_app", + "target": "e2e_test_app_teststate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L68", + "weight": 1.0, + "source": "e2e_test_app_rationale_68", + "target": "e2e_test_app_teststate", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L36", + "weight": 0.8, + "source": "e2e_test_app_teststate", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L39", + "weight": 0.8, + "source": "e2e_test_app_teststate", + "target": "ui_notifications_bannerid", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L39", + "weight": 0.8, + "source": "e2e_test_app_teststate", + "target": "ui_notifications_containerid", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L39", + "weight": 0.8, + "source": "e2e_test_app_teststate", + "target": "ui_notifications_severity", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L218", + "weight": 0.8, + "source": "e2e_test_app_teststate", + "target": "components_file_list_filelistentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L558", + "weight": 0.8, + "source": "e2e_test_app_teststate", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L742", + "weight": 0.8, + "source": "e2e_test_app_teststate", + "target": "orchestrator_staging_query_stagedrunsummary", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L743", + "weight": 0.8, + "source": "e2e_test_app_teststate", + "target": "sync_queue_syncjobstate", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L103", + "weight": 1.0, + "source": "e2e_test_app_rationale_103", + "target": "e2e_test_app_read_query", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L110", + "weight": 1.0, + "source": "e2e_test_app_rationale_110", + "target": "e2e_test_app_classify_test_node", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L130", + "weight": 1.0, + "source": "e2e_test_app_rationale_130", + "target": "e2e_test_app_seeded_metadata_payload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L220", + "weight": 1.0, + "source": "e2e_test_app_seeded_file_entries", + "target": "e2e_test_app_feed_rows", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L192", + "weight": 1.0, + "source": "e2e_test_app_rationale_192", + "target": "e2e_test_app_feed_rows", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L210", + "weight": 1.0, + "source": "e2e_test_app_rationale_210", + "target": "e2e_test_app_seeded_file_entries", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/_test_app.py", + "source_location": "L222", + "weight": 1.0, + "source": "e2e_test_app_seeded_file_entries", + "target": "components_file_list_filelistentry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L900", + "weight": 1.0, + "source": "e2e_test_app_create_app_factory", + "target": "e2e_test_app_build_test_app", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L237", + "weight": 1.0, + "source": "e2e_test_app_rationale_237", + "target": "e2e_test_app_build_test_app", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/_test_app.py", + "source_location": "L242", + "weight": 1.0, + "source": "e2e_test_app_build_test_app", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/_test_app.py", + "source_location": "L249", + "weight": 1.0, + "source": "e2e_test_app_build_test_app", + "target": "ui_theme_register_static_assets" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/_test_app.py", + "source_location": "L899", + "weight": 1.0, + "source": "e2e_test_app_rationale_899", + "target": "e2e_test_app_create_app_factory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_01_onboarding.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_e2e_test_flow_01_onboarding_py", + "target": "e2e_test_flow_01_onboarding_goto", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_01_onboarding.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_e2e_test_flow_01_onboarding_py", + "target": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_01_onboarding.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_01_onboarding_rationale_1", + "target": "tests_e2e_test_flow_01_onboarding_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_01_onboarding.py", + "source_location": "L42", + "weight": 1.0, + "source": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", + "target": "e2e_test_flow_01_onboarding_goto", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_01_onboarding.py", + "source_location": "L19", + "weight": 1.0, + "source": "e2e_test_flow_01_onboarding_rationale_19", + "target": "e2e_test_flow_01_onboarding_goto", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_01_onboarding.py", + "source_location": "L38", + "weight": 1.0, + "source": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", + "target": "page_objects_welcome_page_welcomepage" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_01_onboarding.py", + "source_location": "L39", + "weight": 1.0, + "source": "e2e_test_flow_01_onboarding_test_flow_01_onboarding", + "target": "page_objects_main_page_mainpage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_12_quit_coordinator.py", + "source_location": "L27", + "weight": 1.0, + "source": "tests_e2e_test_flow_12_quit_coordinator_py", + "target": "e2e_test_flow_12_quit_coordinator_test_flow_12_quit_coordinator", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_12_quit_coordinator.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_12_quit_coordinator_rationale_1", + "target": "tests_e2e_test_flow_12_quit_coordinator_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L40", + "weight": 1.0, + "source": "tests_e2e_test_flow_19_travelling_badge_py", + "target": "e2e_test_flow_19_travelling_badge_free_port", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L46", + "weight": 1.0, + "source": "tests_e2e_test_flow_19_travelling_badge_py", + "target": "e2e_test_flow_19_travelling_badge_make_seeded_server", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_e2e_test_flow_19_travelling_badge_py", + "target": "e2e_test_flow_19_travelling_badge_test_flow_19_travelling_badge_aggregates_red", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_19_travelling_badge_rationale_1", + "target": "tests_e2e_test_flow_19_travelling_badge_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L48", + "weight": 1.0, + "source": "e2e_test_flow_19_travelling_badge_make_seeded_server", + "target": "e2e_test_flow_19_travelling_badge_free_port", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L47", + "weight": 1.0, + "source": "e2e_test_flow_19_travelling_badge_rationale_47", + "target": "e2e_test_flow_19_travelling_badge_make_seeded_server", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_19_travelling_badge.py", + "source_location": "L88", + "weight": 1.0, + "source": "e2e_test_flow_19_travelling_badge_rationale_88", + "target": "e2e_test_flow_19_travelling_badge_test_flow_19_travelling_badge_aggregates_red", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_04_test_run.py", + "source_location": "L17", + "weight": 1.0, + "source": "tests_e2e_test_flow_04_test_run_py", + "target": "e2e_test_flow_04_test_run_test_flow_04_test_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_04_test_run.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_04_test_run_rationale_1", + "target": "tests_e2e_test_flow_04_test_run_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_04_test_run.py", + "source_location": "L18", + "weight": 1.0, + "source": "e2e_test_flow_04_test_run_test_flow_04_test_run", + "target": "page_objects_wizard_run_page_wizardrunpage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_06_problems.py", + "source_location": "L19", + "weight": 1.0, + "source": "tests_e2e_test_flow_06_problems_py", + "target": "e2e_test_flow_06_problems_test_flow_06_problems", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_06_problems.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_06_problems_rationale_1", + "target": "tests_e2e_test_flow_06_problems_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_06_problems.py", + "source_location": "L20", + "weight": 1.0, + "source": "e2e_test_flow_06_problems_test_flow_06_problems", + "target": "page_objects_problems_page_problemspage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_14_notifications.py", + "source_location": "L26", + "weight": 1.0, + "source": "tests_e2e_test_flow_14_notifications_py", + "target": "e2e_test_flow_14_notifications_test_flow_14_notifications", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_14_notifications.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_14_notifications_rationale_1", + "target": "tests_e2e_test_flow_14_notifications_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_10_schema_mismatch.py", + "source_location": "L17", + "weight": 1.0, + "source": "tests_e2e_test_flow_10_schema_mismatch_py", + "target": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_10_schema_mismatch.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_10_schema_mismatch_rationale_1", + "target": "tests_e2e_test_flow_10_schema_mismatch_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_10_schema_mismatch.py", + "source_location": "L18", + "weight": 1.0, + "source": "e2e_test_flow_10_schema_mismatch_test_flow_10_schema_mismatch", + "target": "page_objects_problems_page_problemspage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_02_project_wizard.py", + "source_location": "L14", + "weight": 1.0, + "source": "tests_e2e_test_flow_02_project_wizard_py", + "target": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/test_flow_02_project_wizard.py", + "source_location": "L1", + "weight": 1.0, + "source": "e2e_test_flow_02_project_wizard_rationale_1", + "target": "tests_e2e_test_flow_02_project_wizard_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "tests/e2e/test_flow_02_project_wizard.py", + "source_location": "L15", + "weight": 1.0, + "source": "e2e_test_flow_02_project_wizard_test_flow_02_project_wizard", + "target": "page_objects_wizard_project_page_wizardprojectpage" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L11", + "weight": 1.0, + "source": "tests_e2e_page_objects_problems_page_py", + "target": "page_objects_problems_page_problemspage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_e2e_page_objects_problems_page_py", + "target": "page_objects_problems_page_table", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_e2e_page_objects_problems_page_py", + "target": "page_objects_problems_page_empty_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L1", + "weight": 1.0, + "source": "page_objects_problems_page_rationale_1", + "target": "tests_e2e_page_objects_problems_page_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L14", + "weight": 1.0, + "source": "page_objects_problems_page_problemspage", + "target": "page_objects_problems_page_problemspage_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L27", + "weight": 1.0, + "source": "page_objects_problems_page_problemspage", + "target": "page_objects_problems_page_problemspage_row", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L31", + "weight": 1.0, + "source": "page_objects_problems_page_problemspage", + "target": "page_objects_problems_page_problemspage_row_state", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L35", + "weight": 1.0, + "source": "page_objects_problems_page_problemspage", + "target": "page_objects_problems_page_problemspage_row_override", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L39", + "weight": 1.0, + "source": "page_objects_problems_page_problemspage", + "target": "page_objects_problems_page_problemspage_row_revoke", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L12", + "weight": 1.0, + "source": "page_objects_problems_page_rationale_12", + "target": "page_objects_problems_page_problemspage", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L28", + "weight": 1.0, + "source": "page_objects_problems_page_rationale_28", + "target": "page_objects_problems_page_problemspage_row", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L32", + "weight": 1.0, + "source": "page_objects_problems_page_rationale_32", + "target": "page_objects_problems_page_problemspage_row_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L36", + "weight": 1.0, + "source": "page_objects_problems_page_rationale_36", + "target": "page_objects_problems_page_problemspage_row_override", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/problems_page.py", + "source_location": "L40", + "weight": 1.0, + "source": "page_objects_problems_page_rationale_40", + "target": "page_objects_problems_page_problemspage_row_revoke", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L11", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_settingspage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_dialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_incomplete_banner", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L36", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_paths_templates", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_paths_plugin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L46", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_paths_local_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L51", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_lims_password_primary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L56", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_lims_password_secondary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L61", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_lims_password_input", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L66", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_lims_password_save", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L71", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_lims_password_cancel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L76", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_lims_password_clear_confirm", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L81", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_lims_password_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L86", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L91", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_equipment_add", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L96", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_save", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L101", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_discard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L106", + "weight": 1.0, + "source": "tests_e2e_page_objects_settings_page_py", + "target": "page_objects_settings_page_saved_marker", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L1", + "weight": 1.0, + "source": "page_objects_settings_page_rationale_1", + "target": "tests_e2e_page_objects_settings_page_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L14", + "weight": 1.0, + "source": "page_objects_settings_page_settingspage", + "target": "page_objects_settings_page_settingspage_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L27", + "weight": 1.0, + "source": "page_objects_settings_page_settingspage", + "target": "page_objects_settings_page_settingspage_nav", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L31", + "weight": 1.0, + "source": "page_objects_settings_page_settingspage", + "target": "page_objects_settings_page_settingspage_section", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L12", + "weight": 1.0, + "source": "page_objects_settings_page_rationale_12", + "target": "page_objects_settings_page_settingspage", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L28", + "weight": 1.0, + "source": "page_objects_settings_page_rationale_28", + "target": "page_objects_settings_page_settingspage_nav", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/settings_page.py", + "source_location": "L32", + "weight": 1.0, + "source": "page_objects_settings_page_rationale_32", + "target": "page_objects_settings_page_settingspage_section", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "page_objects_init_rationale_1", + "target": "tests_e2e_page_objects_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L8", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_wizardequipmentpage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L14", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_step_identity", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L22", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_label", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L26", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_step_paths", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L31", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_local_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L35", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_nas_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L40", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_sync_mode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L44", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_transport_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L49", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_sftp_host", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L53", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_sftp_user", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L57", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_sftp_remote_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L62", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_smb_host", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L66", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_smb_share", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L70", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_smb_user", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L75", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_confirm", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L79", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_cancel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L83", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_next_button", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_back", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L91", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_equipment_page_py", + "target": "page_objects_wizard_equipment_page_success", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L1", + "weight": 1.0, + "source": "page_objects_wizard_equipment_page_rationale_1", + "target": "tests_e2e_page_objects_wizard_equipment_page_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_equipment_page.py", + "source_location": "L9", + "weight": 1.0, + "source": "page_objects_wizard_equipment_page_wizardequipmentpage", + "target": "page_objects_wizard_equipment_page_wizardequipmentpage_init", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L11", + "weight": 1.0, + "source": "tests_e2e_page_objects_staging_page_py", + "target": "page_objects_staging_page_stagingpage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_e2e_page_objects_staging_page_py", + "target": "page_objects_staging_page_dock", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L39", + "weight": 1.0, + "source": "tests_e2e_page_objects_staging_page_py", + "target": "page_objects_staging_page_clear_verified", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L1", + "weight": 1.0, + "source": "page_objects_staging_page_rationale_1", + "target": "tests_e2e_page_objects_staging_page_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L14", + "weight": 1.0, + "source": "page_objects_staging_page_stagingpage", + "target": "page_objects_staging_page_stagingpage_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L22", + "weight": 1.0, + "source": "page_objects_staging_page_stagingpage", + "target": "page_objects_staging_page_stagingpage_row", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L26", + "weight": 1.0, + "source": "page_objects_staging_page_stagingpage", + "target": "page_objects_staging_page_stagingpage_force_sync", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L30", + "weight": 1.0, + "source": "page_objects_staging_page_stagingpage", + "target": "page_objects_staging_page_stagingpage_clear", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L34", + "weight": 1.0, + "source": "page_objects_staging_page_stagingpage", + "target": "page_objects_staging_page_stagingpage_view_log", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L12", + "weight": 1.0, + "source": "page_objects_staging_page_rationale_12", + "target": "page_objects_staging_page_stagingpage", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L27", + "weight": 1.0, + "source": "page_objects_staging_page_rationale_27", + "target": "page_objects_staging_page_stagingpage_force_sync", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L31", + "weight": 1.0, + "source": "page_objects_staging_page_rationale_31", + "target": "page_objects_staging_page_stagingpage_clear", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/staging_page.py", + "source_location": "L35", + "weight": 1.0, + "source": "page_objects_staging_page_rationale_35", + "target": "page_objects_staging_page_stagingpage_view_log", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L11", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_run_page_py", + "target": "page_objects_wizard_run_page_wizardrunpage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_run_page_py", + "target": "page_objects_wizard_run_page_stepper", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_run_page_py", + "target": "page_objects_wizard_run_page_title", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L28", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_run_page_py", + "target": "page_objects_wizard_run_page_mode_badge_experimental", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_run_page_py", + "target": "page_objects_wizard_run_page_mode_badge_test", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L42", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_run_page_py", + "target": "page_objects_wizard_run_page_back", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L50", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_run_page_py", + "target": "page_objects_wizard_run_page_cancel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L55", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_run_page_py", + "target": "page_objects_wizard_run_page_next", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L60", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_run_page_py", + "target": "page_objects_wizard_run_page_submit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L65", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_run_page_py", + "target": "page_objects_wizard_run_page_success_card", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L1", + "weight": 1.0, + "source": "page_objects_wizard_run_page_rationale_1", + "target": "tests_e2e_page_objects_wizard_run_page_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L14", + "weight": 1.0, + "source": "page_objects_wizard_run_page_wizardrunpage", + "target": "page_objects_wizard_run_page_wizardrunpage_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L37", + "weight": 1.0, + "source": "page_objects_wizard_run_page_wizardrunpage", + "target": "page_objects_wizard_run_page_wizardrunpage_step", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L12", + "weight": 1.0, + "source": "page_objects_wizard_run_page_rationale_12", + "target": "page_objects_wizard_run_page_wizardrunpage", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_run_page.py", + "source_location": "L38", + "weight": 1.0, + "source": "page_objects_wizard_run_page_rationale_38", + "target": "page_objects_wizard_run_page_wizardrunpage_step", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L11", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_project_page_py", + "target": "page_objects_wizard_project_page_wizardprojectpage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_project_page_py", + "target": "page_objects_wizard_project_page_card", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_project_page_py", + "target": "page_objects_wizard_project_page_stepper", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L32", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_project_page_py", + "target": "page_objects_wizard_project_page_lims_gate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L41", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_project_page_py", + "target": "page_objects_wizard_project_page_lims_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L46", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_project_page_py", + "target": "page_objects_wizard_project_page_back", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L54", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_project_page_py", + "target": "page_objects_wizard_project_page_cancel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L59", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_project_page_py", + "target": "page_objects_wizard_project_page_next", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L64", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_project_page_py", + "target": "page_objects_wizard_project_page_submit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L69", + "weight": 1.0, + "source": "tests_e2e_page_objects_wizard_project_page_py", + "target": "page_objects_wizard_project_page_success_card", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L1", + "weight": 1.0, + "source": "page_objects_wizard_project_page_rationale_1", + "target": "tests_e2e_page_objects_wizard_project_page_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L14", + "weight": 1.0, + "source": "page_objects_wizard_project_page_wizardprojectpage", + "target": "page_objects_wizard_project_page_wizardprojectpage_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L27", + "weight": 1.0, + "source": "page_objects_wizard_project_page_wizardprojectpage", + "target": "page_objects_wizard_project_page_wizardprojectpage_step", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L12", + "weight": 1.0, + "source": "page_objects_wizard_project_page_rationale_12", + "target": "page_objects_wizard_project_page_wizardprojectpage", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/wizard_project_page.py", + "source_location": "L28", + "weight": 1.0, + "source": "page_objects_wizard_project_page_rationale_28", + "target": "page_objects_wizard_project_page_wizardprojectpage_step", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L15", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_mainpage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L22", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_tree", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L27", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_setup_incomplete_banner", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L32", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_toolbar_new_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L37", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_toolbar_new_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L42", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_toolbar_new_test_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L47", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_toolbar_settings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L52", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_toolbar_refresh", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L57", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_toolbar_add_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L62", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_search_box", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L67", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_tab_metadata", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L72", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_tab_problems", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L77", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_toggle_right_pane", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L82", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_footer_clear_verified", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L87", + "weight": 1.0, + "source": "tests_e2e_page_objects_main_page_py", + "target": "page_objects_main_page_footer_staging_segment", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L1", + "weight": 1.0, + "source": "page_objects_main_page_rationale_1", + "target": "tests_e2e_page_objects_main_page_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L18", + "weight": 1.0, + "source": "page_objects_main_page_mainpage", + "target": "page_objects_main_page_mainpage_init", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/main_page.py", + "source_location": "L16", + "weight": 1.0, + "source": "page_objects_main_page_rationale_16", + "target": "page_objects_main_page_mainpage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L11", + "weight": 1.0, + "source": "tests_e2e_page_objects_welcome_page_py", + "target": "page_objects_welcome_page_welcomepage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L18", + "weight": 1.0, + "source": "tests_e2e_page_objects_welcome_page_py", + "target": "page_objects_welcome_page_card", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L23", + "weight": 1.0, + "source": "tests_e2e_page_objects_welcome_page_py", + "target": "page_objects_welcome_page_headline", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L28", + "weight": 1.0, + "source": "tests_e2e_page_objects_welcome_page_py", + "target": "page_objects_welcome_page_autostart_toggle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L33", + "weight": 1.0, + "source": "tests_e2e_page_objects_welcome_page_py", + "target": "page_objects_welcome_page_get_started", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L38", + "weight": 1.0, + "source": "tests_e2e_page_objects_welcome_page_py", + "target": "page_objects_welcome_page_skip_for_now", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L43", + "weight": 1.0, + "source": "tests_e2e_page_objects_welcome_page_py", + "target": "page_objects_welcome_page_status_marker", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L1", + "weight": 1.0, + "source": "page_objects_welcome_page_rationale_1", + "target": "tests_e2e_page_objects_welcome_page_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L14", + "weight": 1.0, + "source": "page_objects_welcome_page_welcomepage", + "target": "page_objects_welcome_page_welcomepage_init", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/page_objects/welcome_page.py", + "source_location": "L12", + "weight": 1.0, + "source": "page_objects_welcome_page_rationale_12", + "target": "page_objects_welcome_page_welcomepage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/conf.py", + "source_location": "L200", + "weight": 1.0, + "source": "docs_source_conf_py", + "target": "source_conf_noisefilter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/conf.py", + "source_location": "L271", + "weight": 1.0, + "source": "docs_source_conf_py", + "target": "source_conf_setup", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "docs/source/conf.py", + "source_location": "L1", + "weight": 1.0, + "source": "source_conf_rationale_1", + "target": "docs_source_conf_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "docs/source/conf.py", + "source_location": "L208", + "weight": 1.0, + "source": "source_conf_noisefilter", + "target": "source_conf_noisefilter_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "docs/source/conf.py", + "source_location": "L212", + "weight": 1.0, + "source": "source_conf_noisefilter", + "target": "source_conf_noisefilter_filter", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "docs/source/conf.py", + "source_location": "L289", + "weight": 1.0, + "source": "source_conf_setup", + "target": "source_conf_noisefilter", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "docs/source/conf.py", + "source_location": "L201", + "weight": 1.0, + "source": "source_conf_rationale_201", + "target": "source_conf_noisefilter", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "docs/source/conf.py", + "source_location": "L272", + "weight": 1.0, + "source": "source_conf_rationale_272", + "target": "source_conf_setup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L69", + "weight": 1.0, + "source": "scripts_generate_screenshots_py", + "target": "scripts_generate_screenshots_free_port", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L76", + "weight": 1.0, + "source": "scripts_generate_screenshots_py", + "target": "scripts_generate_screenshots_start_server", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L138", + "weight": 1.0, + "source": "scripts_generate_screenshots_py", + "target": "scripts_generate_screenshots_stop_server", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L148", + "weight": 1.0, + "source": "scripts_generate_screenshots_py", + "target": "scripts_generate_screenshots_capture", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L178", + "weight": 1.0, + "source": "scripts_generate_screenshots_py", + "target": "scripts_generate_screenshots_capture_capability", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L209", + "weight": 1.0, + "source": "scripts_generate_screenshots_py", + "target": "scripts_generate_screenshots_capability_plan", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L337", + "weight": 1.0, + "source": "scripts_generate_screenshots_py", + "target": "scripts_generate_screenshots_main", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L1", + "weight": 1.0, + "source": "scripts_generate_screenshots_rationale_1", + "target": "scripts_generate_screenshots_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L83", + "weight": 1.0, + "source": "scripts_generate_screenshots_start_server", + "target": "scripts_generate_screenshots_free_port", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L70", + "weight": 1.0, + "source": "scripts_generate_screenshots_rationale_70", + "target": "scripts_generate_screenshots_free_port", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L365", + "weight": 1.0, + "source": "scripts_generate_screenshots_main", + "target": "scripts_generate_screenshots_start_server", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L77", + "weight": 1.0, + "source": "scripts_generate_screenshots_rationale_77", + "target": "scripts_generate_screenshots_start_server", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L388", + "weight": 1.0, + "source": "scripts_generate_screenshots_main", + "target": "scripts_generate_screenshots_stop_server", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L139", + "weight": 1.0, + "source": "scripts_generate_screenshots_rationale_139", + "target": "scripts_generate_screenshots_stop_server", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L196", + "weight": 1.0, + "source": "scripts_generate_screenshots_capture_capability", + "target": "scripts_generate_screenshots_capture", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L158", + "weight": 1.0, + "source": "scripts_generate_screenshots_rationale_158", + "target": "scripts_generate_screenshots_capture", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L380", + "weight": 1.0, + "source": "scripts_generate_screenshots_main", + "target": "scripts_generate_screenshots_capture_capability", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L185", + "weight": 1.0, + "source": "scripts_generate_screenshots_rationale_185", + "target": "scripts_generate_screenshots_capture_capability", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L378", + "weight": 1.0, + "source": "scripts_generate_screenshots_main", + "target": "scripts_generate_screenshots_capability_plan", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L210", + "weight": 1.0, + "source": "scripts_generate_screenshots_rationale_210", + "target": "scripts_generate_screenshots_capability_plan", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "scripts/generate_screenshots.py", + "source_location": "L338", + "weight": 1.0, + "source": "scripts_generate_screenshots_rationale_338", + "target": "scripts_generate_screenshots_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L95", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_app_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L107", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_platform", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L118", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_home", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L127", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_env_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L133", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_os_config_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L145", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_os_state_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L157", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_os_cache_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L169", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_os_central_log_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L188", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_suggested_staging_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L220", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_ensure_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L226", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_ensure_state_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L231", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_ensure_central_log_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L241", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_canonicalize_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L272", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_validate_project_short_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L290", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_project_name_violations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L348", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_validate_project_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L360", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_compose_run_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L396", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_compose_project_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L420", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_lims_slot_satisfied", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L437", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_paths_complete", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L447", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_password_required_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L466", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_nas_slot_satisfied", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L483", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_evaluate_setup_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L533", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_orchestrator_identity_complete", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L544", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_setup_state_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L578", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_missing_nas_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L601", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_missing_orchestrator_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L611", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_missing_paths_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L624", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_missing_lims_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L643", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_setup_state_next_action", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L673", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L678", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_creation_json_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L683", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_equipment_json_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L688", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_readme_fields_json_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L698", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_is_run_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L708", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_is_test_run_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L713", + "weight": 1.0, + "source": "src_exlab_wizard_paths_py", + "target": "exlab_wizard_paths_run_dir_stem", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L1", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_1", + "target": "src_exlab_wizard_paths_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L135", + "weight": 1.0, + "source": "exlab_wizard_paths_os_config_path", + "target": "exlab_wizard_paths_app_name", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L147", + "weight": 1.0, + "source": "exlab_wizard_paths_os_state_path", + "target": "exlab_wizard_paths_app_name", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L159", + "weight": 1.0, + "source": "exlab_wizard_paths_os_cache_path", + "target": "exlab_wizard_paths_app_name", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L171", + "weight": 1.0, + "source": "exlab_wizard_paths_os_central_log_path", + "target": "exlab_wizard_paths_app_name", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L205", + "weight": 1.0, + "source": "exlab_wizard_paths_suggested_staging_root", + "target": "exlab_wizard_paths_app_name", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L96", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_96", + "target": "exlab_wizard_paths_app_name", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L136", + "weight": 1.0, + "source": "exlab_wizard_paths_os_config_path", + "target": "exlab_wizard_paths_platform", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L148", + "weight": 1.0, + "source": "exlab_wizard_paths_os_state_path", + "target": "exlab_wizard_paths_platform", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L160", + "weight": 1.0, + "source": "exlab_wizard_paths_os_cache_path", + "target": "exlab_wizard_paths_platform", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L172", + "weight": 1.0, + "source": "exlab_wizard_paths_os_central_log_path", + "target": "exlab_wizard_paths_platform", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L206", + "weight": 1.0, + "source": "exlab_wizard_paths_suggested_staging_root", + "target": "exlab_wizard_paths_platform", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L108", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_108", + "target": "exlab_wizard_paths_platform", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L138", + "weight": 1.0, + "source": "exlab_wizard_paths_os_config_path", + "target": "exlab_wizard_paths_home", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L150", + "weight": 1.0, + "source": "exlab_wizard_paths_os_state_path", + "target": "exlab_wizard_paths_home", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L162", + "weight": 1.0, + "source": "exlab_wizard_paths_os_cache_path", + "target": "exlab_wizard_paths_home", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L174", + "weight": 1.0, + "source": "exlab_wizard_paths_os_central_log_path", + "target": "exlab_wizard_paths_home", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L208", + "weight": 1.0, + "source": "exlab_wizard_paths_suggested_staging_root", + "target": "exlab_wizard_paths_home", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L119", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_119", + "target": "exlab_wizard_paths_home", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L140", + "weight": 1.0, + "source": "exlab_wizard_paths_os_config_path", + "target": "exlab_wizard_paths_env_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L152", + "weight": 1.0, + "source": "exlab_wizard_paths_os_state_path", + "target": "exlab_wizard_paths_env_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L164", + "weight": 1.0, + "source": "exlab_wizard_paths_os_cache_path", + "target": "exlab_wizard_paths_env_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L177", + "weight": 1.0, + "source": "exlab_wizard_paths_os_central_log_path", + "target": "exlab_wizard_paths_env_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L210", + "weight": 1.0, + "source": "exlab_wizard_paths_suggested_staging_root", + "target": "exlab_wizard_paths_env_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L128", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_128", + "target": "exlab_wizard_paths_env_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L134", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_134", + "target": "exlab_wizard_paths_os_config_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L420", + "weight": 1.0, + "source": "tray_main_main", + "target": "exlab_wizard_paths_os_config_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L425", + "weight": 1.0, + "source": "tray_dependencies_load_config_safely", + "target": "exlab_wizard_paths_os_config_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L433", + "weight": 1.0, + "source": "tray_dependencies_make_save_config", + "target": "exlab_wizard_paths_os_config_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L228", + "weight": 1.0, + "source": "exlab_wizard_paths_ensure_state_dir", + "target": "exlab_wizard_paths_os_state_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L146", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_146", + "target": "exlab_wizard_paths_os_state_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L158", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_158", + "target": "exlab_wizard_paths_os_cache_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L233", + "weight": 1.0, + "source": "exlab_wizard_paths_ensure_central_log_dir", + "target": "exlab_wizard_paths_os_central_log_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L170", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_170", + "target": "exlab_wizard_paths_os_central_log_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L244", + "weight": 1.0, + "source": "logging_manager_build_real_handlers", + "target": "exlab_wizard_paths_os_central_log_path" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L189", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_189", + "target": "exlab_wizard_paths_suggested_staging_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L632", + "weight": 1.0, + "source": "pages_settings_render_section_body", + "target": "exlab_wizard_paths_suggested_staging_root" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L228", + "weight": 1.0, + "source": "exlab_wizard_paths_ensure_state_dir", + "target": "exlab_wizard_paths_ensure_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L233", + "weight": 1.0, + "source": "exlab_wizard_paths_ensure_central_log_dir", + "target": "exlab_wizard_paths_ensure_dir", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L221", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_221", + "target": "exlab_wizard_paths_ensure_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L645", + "weight": 1.0, + "source": "ui_mount_ensure_staging_root", + "target": "exlab_wizard_paths_ensure_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L352", + "weight": 1.0, + "source": "tray_main_bootstrap_test_config", + "target": "exlab_wizard_paths_ensure_dir" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L227", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_227", + "target": "exlab_wizard_paths_ensure_state_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L417", + "weight": 1.0, + "source": "tray_main_main", + "target": "exlab_wizard_paths_ensure_state_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L153", + "weight": 1.0, + "source": "window_main_main", + "target": "exlab_wizard_paths_ensure_state_dir" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L232", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_232", + "target": "exlab_wizard_paths_ensure_central_log_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L245", + "weight": 1.0, + "source": "logging_manager_build_real_handlers", + "target": "exlab_wizard_paths_ensure_central_log_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L387", + "weight": 1.0, + "source": "exlab_wizard_paths_compose_run_path", + "target": "exlab_wizard_paths_canonicalize_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L410", + "weight": 1.0, + "source": "exlab_wizard_paths_compose_project_path", + "target": "exlab_wizard_paths_canonicalize_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L242", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_242", + "target": "exlab_wizard_paths_canonicalize_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L254", + "weight": 1.0, + "source": "exlab_wizard_paths_canonicalize_equipment_id", + "target": "exlab_wizard_errors_configerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L340", + "weight": 1.0, + "source": "config_models_validate_equipment_id", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L486", + "weight": 1.0, + "source": "controller_creation_creationcontroller_validate_inputs", + "target": "exlab_wizard_paths_canonicalize_equipment_id" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L273", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_273", + "target": "exlab_wizard_paths_validate_project_short_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L283", + "weight": 1.0, + "source": "exlab_wizard_paths_validate_project_short_id", + "target": "exlab_wizard_errors_configerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L354", + "weight": 1.0, + "source": "exlab_wizard_paths_validate_project_name", + "target": "exlab_wizard_paths_project_name_violations", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L291", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_291", + "target": "exlab_wizard_paths_project_name_violations", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L320", + "weight": 1.0, + "source": "validator_rules_check_unsafe_project_name", + "target": "exlab_wizard_paths_project_name_violations" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L388", + "weight": 1.0, + "source": "exlab_wizard_paths_compose_run_path", + "target": "exlab_wizard_paths_validate_project_name", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L411", + "weight": 1.0, + "source": "exlab_wizard_paths_compose_project_path", + "target": "exlab_wizard_paths_validate_project_name", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L349", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_349", + "target": "exlab_wizard_paths_validate_project_name", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L356", + "weight": 1.0, + "source": "exlab_wizard_paths_validate_project_name", + "target": "exlab_wizard_errors_configerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L503", + "weight": 1.0, + "source": "controller_creation_creationcontroller_validate_inputs", + "target": "exlab_wizard_paths_validate_project_name" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L368", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_368", + "target": "exlab_wizard_paths_compose_run_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L802", + "weight": 1.0, + "source": "controller_creation_creationcontroller_compose_destination_path", + "target": "exlab_wizard_paths_compose_run_path" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L402", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_402", + "target": "exlab_wizard_paths_compose_project_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L796", + "weight": 1.0, + "source": "controller_creation_creationcontroller_compose_destination_path", + "target": "exlab_wizard_paths_compose_project_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L526", + "weight": 1.0, + "source": "exlab_wizard_paths_evaluate_setup_state", + "target": "exlab_wizard_paths_lims_slot_satisfied", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L425", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_425", + "target": "exlab_wizard_paths_lims_slot_satisfied", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L515", + "weight": 1.0, + "source": "exlab_wizard_paths_evaluate_setup_state", + "target": "exlab_wizard_paths_paths_complete", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L438", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_438", + "target": "exlab_wizard_paths_paths_complete", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L480", + "weight": 1.0, + "source": "exlab_wizard_paths_nas_slot_satisfied", + "target": "exlab_wizard_paths_password_required_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L596", + "weight": 1.0, + "source": "exlab_wizard_paths_missing_nas_fields", + "target": "exlab_wizard_paths_password_required_equipment", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L448", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_448", + "target": "exlab_wizard_paths_password_required_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L462", + "weight": 1.0, + "source": "exlab_wizard_paths_password_required_equipment", + "target": "config_models_transport_requires_keyring_password" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L524", + "weight": 1.0, + "source": "exlab_wizard_paths_evaluate_setup_state", + "target": "exlab_wizard_paths_nas_slot_satisfied", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L471", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_471", + "target": "exlab_wizard_paths_nas_slot_satisfied", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L517", + "weight": 1.0, + "source": "exlab_wizard_paths_evaluate_setup_state", + "target": "exlab_wizard_paths_orchestrator_identity_complete", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L490", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_490", + "target": "exlab_wizard_paths_evaluate_setup_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L164", + "weight": 1.0, + "source": "api_setup_compute_setup_state", + "target": "exlab_wizard_paths_evaluate_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L534", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_534", + "target": "exlab_wizard_paths_orchestrator_identity_complete", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L568", + "weight": 1.0, + "source": "exlab_wizard_paths_setup_state_missing", + "target": "exlab_wizard_paths_missing_paths_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L570", + "weight": 1.0, + "source": "exlab_wizard_paths_setup_state_missing", + "target": "exlab_wizard_paths_missing_orchestrator_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L572", + "weight": 1.0, + "source": "exlab_wizard_paths_setup_state_missing", + "target": "exlab_wizard_paths_missing_nas_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L574", + "weight": 1.0, + "source": "exlab_wizard_paths_setup_state_missing", + "target": "exlab_wizard_paths_missing_lims_fields", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L550", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_550", + "target": "exlab_wizard_paths_setup_state_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L200", + "weight": 1.0, + "source": "api_setup_setup_state_gate", + "target": "exlab_wizard_paths_setup_state_missing" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L583", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_583", + "target": "exlab_wizard_paths_missing_nas_fields", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L602", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_602", + "target": "exlab_wizard_paths_missing_orchestrator_fields", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L644", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_644", + "target": "exlab_wizard_paths_setup_state_next_action", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L822", + "weight": 1.0, + "source": "ui_mount_setup_next_action", + "target": "exlab_wizard_paths_setup_state_next_action" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L680", + "weight": 1.0, + "source": "exlab_wizard_paths_creation_json_path", + "target": "exlab_wizard_paths_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L685", + "weight": 1.0, + "source": "exlab_wizard_paths_equipment_json_path", + "target": "exlab_wizard_paths_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L690", + "weight": 1.0, + "source": "exlab_wizard_paths_readme_fields_json_path", + "target": "exlab_wizard_paths_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L674", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_674", + "target": "exlab_wizard_paths_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L54", + "weight": 1.0, + "source": "cache_sync_state_writer_sync_state_path", + "target": "exlab_wizard_paths_cache_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L998", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_maybe_cleanup", + "target": "exlab_wizard_paths_cache_dir" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L679", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_679", + "target": "exlab_wizard_paths_creation_json_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1012", + "weight": 1.0, + "source": "ui_mount_metadata_for_run", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1025", + "weight": 1.0, + "source": "validator_engine_validator_read_creation_for", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L693", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L774", + "weight": 1.0, + "source": "controller_creation_creationcontroller_resolve_run_lims_block", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L981", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L472", + "weight": 1.0, + "source": "routers_browse_relay_label_from_first_run", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L505", + "weight": 1.0, + "source": "routers_browse_find_run_root", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L629", + "weight": 1.0, + "source": "routers_browse_build_project_node", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L661", + "weight": 1.0, + "source": "routers_browse_build_run_node", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L369", + "weight": 1.0, + "source": "routers_problems_require_creation_json", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L349", + "weight": 1.0, + "source": "routers_staging_is_real_run", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L385", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_enqueue", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L968", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_maybe_cleanup", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1061", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_mark_synced", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1079", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_mark_cleaned", + "target": "exlab_wizard_paths_creation_json_path" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L684", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_684", + "target": "exlab_wizard_paths_equipment_json_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1097", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_equipment_json", + "target": "exlab_wizard_paths_equipment_json_path" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L689", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_689", + "target": "exlab_wizard_paths_readme_fields_json_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L832", + "weight": 1.0, + "source": "validator_engine_validator_apply_missing_required_field_rule", + "target": "exlab_wizard_paths_readme_fields_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L202", + "weight": 1.0, + "source": "readme_generator_readmegenerator_generate_sync", + "target": "exlab_wizard_paths_readme_fields_json_path" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L223", + "weight": 1.0, + "source": "controller_creation_noopreadmegenerator_generate", + "target": "exlab_wizard_paths_readme_fields_json_path" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L699", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_699", + "target": "exlab_wizard_paths_is_run_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L364", + "weight": 1.0, + "source": "validator_rules_check_mode_prefix_mismatch", + "target": "exlab_wizard_paths_is_run_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L639", + "weight": 1.0, + "source": "validator_engine_validator_classify_level", + "target": "exlab_wizard_paths_is_run_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L689", + "weight": 1.0, + "source": "validator_engine_validator_compute_run_path", + "target": "exlab_wizard_paths_is_run_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L625", + "weight": 1.0, + "source": "routers_browse_build_project_node", + "target": "exlab_wizard_paths_is_run_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L79", + "weight": 1.0, + "source": "orchestrator_scan_walk_equipment_run_leaves", + "target": "exlab_wizard_paths_is_run_dir" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L709", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_709", + "target": "exlab_wizard_paths_is_test_run_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L363", + "weight": 1.0, + "source": "validator_rules_check_mode_prefix_mismatch", + "target": "exlab_wizard_paths_is_test_run_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L646", + "weight": 1.0, + "source": "validator_engine_validator_classify_level", + "target": "exlab_wizard_paths_is_test_run_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L75", + "weight": 1.0, + "source": "orchestrator_scan_walk_equipment_run_leaves", + "target": "exlab_wizard_paths_is_test_run_dir" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L180", + "weight": 1.0, + "source": "orchestrator_staging_query_path_identity", + "target": "exlab_wizard_paths_is_test_run_dir" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/paths.py", + "source_location": "L714", + "weight": 1.0, + "source": "exlab_wizard_paths_rationale_714", + "target": "exlab_wizard_paths_run_dir_stem", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L108", + "weight": 1.0, + "source": "pages_wizard_run_preview_path_segments", + "target": "exlab_wizard_paths_run_dir_stem" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "exlab_wizard_init_rationale_1", + "target": "src_exlab_wizard_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L19", + "weight": 1.0, + "source": "src_exlab_wizard_errors_py", + "target": "exlab_wizard_errors_exlaberror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L23", + "weight": 1.0, + "source": "src_exlab_wizard_errors_py", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L27", + "weight": 1.0, + "source": "src_exlab_wizard_errors_py", + "target": "exlab_wizard_errors_validationerror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L31", + "weight": 1.0, + "source": "src_exlab_wizard_errors_py", + "target": "exlab_wizard_errors_templateloaderror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L35", + "weight": 1.0, + "source": "src_exlab_wizard_errors_py", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L39", + "weight": 1.0, + "source": "src_exlab_wizard_errors_py", + "target": "exlab_wizard_errors_pluginerror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L43", + "weight": 1.0, + "source": "src_exlab_wizard_errors_py", + "target": "exlab_wizard_errors_plugininputrequired", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L51", + "weight": 1.0, + "source": "src_exlab_wizard_errors_py", + "target": "exlab_wizard_errors_reason", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L55", + "weight": 1.0, + "source": "src_exlab_wizard_errors_py", + "target": "exlab_wizard_errors_schemamajormismatcherror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L64", + "weight": 1.0, + "source": "src_exlab_wizard_errors_py", + "target": "exlab_wizard_errors_keyringunavailableerror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L68", + "weight": 1.0, + "source": "src_exlab_wizard_errors_py", + "target": "exlab_wizard_errors_setupincompleteerror", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L1", + "weight": 1.0, + "source": "exlab_wizard_errors_rationale_1", + "target": "src_exlab_wizard_errors_py", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L19", + "weight": 1.0, + "source": "exlab_wizard_errors_exlaberror", + "target": "exception", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L23", + "weight": 1.0, + "source": "exlab_wizard_errors_configerror", + "target": "exlab_wizard_errors_exlaberror", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L27", + "weight": 1.0, + "source": "exlab_wizard_errors_validationerror", + "target": "exlab_wizard_errors_exlaberror", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L31", + "weight": 1.0, + "source": "exlab_wizard_errors_templateloaderror", + "target": "exlab_wizard_errors_exlaberror", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L39", + "weight": 1.0, + "source": "exlab_wizard_errors_pluginerror", + "target": "exlab_wizard_errors_exlaberror", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L43", + "weight": 1.0, + "source": "exlab_wizard_errors_plugininputrequired", + "target": "exlab_wizard_errors_exlaberror", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L55", + "weight": 1.0, + "source": "exlab_wizard_errors_schemamajormismatcherror", + "target": "exlab_wizard_errors_exlaberror", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L64", + "weight": 1.0, + "source": "exlab_wizard_errors_keyringunavailableerror", + "target": "exlab_wizard_errors_exlaberror", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L68", + "weight": 1.0, + "source": "exlab_wizard_errors_setupincompleteerror", + "target": "exlab_wizard_errors_exlaberror", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L20", + "weight": 1.0, + "source": "exlab_wizard_errors_rationale_20", + "target": "exlab_wizard_errors_exlaberror", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L60", + "weight": 1.0, + "source": "transports_init_transporterror", + "target": "exception", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L24", + "weight": 1.0, + "source": "exlab_wizard_errors_rationale_24", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L27", + "weight": 0.8, + "source": "lims_client_limsclient", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L40", + "weight": 0.8, + "source": "lims_catalogue_offlinecatalogue", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_pathsconfig", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_limsconfig", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_readmedefaultfield", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_readmeconfig", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_bandwidthwindow", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_bandwidthconfig", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_rclonesftptransport", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_rclonesmbtransport", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_orchestratorstagingtransport", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_equipmentconfig", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_nascleanupconfig", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_loggingconfig", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_operatorsconfig", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_validatorconfig", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_pluginsconfig", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_syncconfig", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_orchestratorstagingcleanup", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_orchestratorconfig", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L42", + "weight": 0.8, + "source": "config_models_config", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L638", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L638", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L638", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L638", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L638", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L638", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L638", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L638", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L29", + "weight": 0.8, + "source": "routers_config_configupdateresponse", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L29", + "weight": 0.8, + "source": "routers_config_equipmentappendresponse", + "target": "exlab_wizard_errors_configerror", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L93", + "weight": 1.0, + "source": "lims_client_limsclient_login", + "target": "exlab_wizard_errors_configerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L96", + "weight": 1.0, + "source": "lims_catalogue_read_catalogue", + "target": "exlab_wizard_errors_configerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L610", + "weight": 1.0, + "source": "config_models_config_with_equipment_appended", + "target": "exlab_wizard_errors_configerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L74", + "weight": 1.0, + "source": "config_loader_apply_test_mode_prefix", + "target": "exlab_wizard_errors_configerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L102", + "weight": 1.0, + "source": "config_loader_load_config", + "target": "exlab_wizard_errors_configerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L113", + "weight": 1.0, + "source": "config_loader_load_config_from_text", + "target": "exlab_wizard_errors_configerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L646", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "exlab_wizard_errors_configerror" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L28", + "weight": 1.0, + "source": "exlab_wizard_errors_rationale_28", + "target": "exlab_wizard_errors_validationerror", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L85", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "exlab_wizard_errors_validationerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L85", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "exlab_wizard_errors_validationerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L85", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "exlab_wizard_errors_validationerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L85", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "exlab_wizard_errors_validationerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L85", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "exlab_wizard_errors_validationerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L85", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "exlab_wizard_errors_validationerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L85", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "exlab_wizard_errors_validationerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L85", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "exlab_wizard_errors_validationerror", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L476", + "weight": 1.0, + "source": "controller_creation_creationcontroller_validate_inputs", + "target": "exlab_wizard_errors_validationerror" + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L35", + "weight": 1.0, + "source": "exlab_wizard_errors_templatecorefieldredeclarederror", + "target": "exlab_wizard_errors_templateloaderror", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L32", + "weight": 1.0, + "source": "exlab_wizard_errors_rationale_32", + "target": "exlab_wizard_errors_templateloaderror", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L41", + "weight": 0.8, + "source": "template_copier_driver_resolvedtemplate", + "target": "exlab_wizard_errors_templateloaderror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L41", + "weight": 0.8, + "source": "template_copier_driver_renderresult", + "target": "exlab_wizard_errors_templateloaderror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L41", + "weight": 0.8, + "source": "template_copier_driver_templateengine", + "target": "exlab_wizard_errors_templateloaderror", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L137", + "weight": 1.0, + "source": "template_copier_driver_templateengine_resolve", + "target": "exlab_wizard_errors_templateloaderror" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L36", + "weight": 1.0, + "source": "exlab_wizard_errors_rationale_36", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L41", + "weight": 0.8, + "source": "template_copier_driver_resolvedtemplate", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L41", + "weight": 0.8, + "source": "template_copier_driver_renderresult", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L41", + "weight": 0.8, + "source": "template_copier_driver_templateengine", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L61", + "weight": 0.8, + "source": "readme_generator_corefields", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L61", + "weight": 0.8, + "source": "readme_generator_templatefielddecl", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L61", + "weight": 0.8, + "source": "readme_generator_customfield", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L61", + "weight": 0.8, + "source": "readme_generator_systemfields", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L61", + "weight": 0.8, + "source": "readme_generator_readmecontext", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L61", + "weight": 0.8, + "source": "readme_generator_readmegenerator", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L250", + "weight": 1.0, + "source": "template_copier_driver_extract_readme_fields", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L277", + "weight": 1.0, + "source": "readme_generator_reject_core_redeclaration", + "target": "exlab_wizard_errors_templatecorefieldredeclarederror" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L40", + "weight": 1.0, + "source": "exlab_wizard_errors_rationale_40", + "target": "exlab_wizard_errors_pluginerror", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L38", + "weight": 0.8, + "source": "plugins_base_filechange", + "target": "exlab_wizard_errors_pluginerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L38", + "weight": 0.8, + "source": "plugins_base_plugincontext", + "target": "exlab_wizard_errors_pluginerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L38", + "weight": 0.8, + "source": "plugins_base_plugin", + "target": "exlab_wizard_errors_pluginerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L36", + "weight": 0.8, + "source": "plugins_worker_workeroutcome", + "target": "exlab_wizard_errors_pluginerror", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L36", + "weight": 0.8, + "source": "plugins_worker_swallowcallbackerrors", + "target": "exlab_wizard_errors_pluginerror", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L46", + "weight": 1.0, + "source": "exlab_wizard_errors_plugininputrequired", + "target": "exlab_wizard_errors_plugininputrequired_init", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L44", + "weight": 1.0, + "source": "exlab_wizard_errors_rationale_44", + "target": "exlab_wizard_errors_plugininputrequired", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L38", + "weight": 0.8, + "source": "plugins_base_filechange", + "target": "exlab_wizard_errors_plugininputrequired", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L38", + "weight": 0.8, + "source": "plugins_base_plugincontext", + "target": "exlab_wizard_errors_plugininputrequired", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L38", + "weight": 0.8, + "source": "plugins_base_plugin", + "target": "exlab_wizard_errors_plugininputrequired", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L36", + "weight": 0.8, + "source": "plugins_worker_workeroutcome", + "target": "exlab_wizard_errors_plugininputrequired", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L36", + "weight": 0.8, + "source": "plugins_worker_swallowcallbackerrors", + "target": "exlab_wizard_errors_plugininputrequired", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L47", + "weight": 1.0, + "source": "exlab_wizard_errors_plugininputrequired_init", + "target": "exlab_wizard_errors_schemamajormismatcherror_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L58", + "weight": 1.0, + "source": "exlab_wizard_errors_schemamajormismatcherror", + "target": "exlab_wizard_errors_schemamajormismatcherror_init", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L56", + "weight": 1.0, + "source": "exlab_wizard_errors_rationale_56", + "target": "exlab_wizard_errors_schemamajormismatcherror", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L50", + "weight": 0.8, + "source": "cache_equipment_equipmentcachewriter", + "target": "exlab_wizard_errors_schemamajormismatcherror", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L44", + "weight": 1.0, + "source": "io_json_files_require_schema_major", + "target": "exlab_wizard_errors_schemamajormismatcherror" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L65", + "weight": 1.0, + "source": "exlab_wizard_errors_rationale_65", + "target": "exlab_wizard_errors_keyringunavailableerror", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L44", + "weight": 0.8, + "source": "lims_keyring_store_keyringstore", + "target": "exlab_wizard_errors_keyringunavailableerror", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L190", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_passphrase", + "target": "exlab_wizard_errors_keyringunavailableerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L214", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_load_fallback", + "target": "exlab_wizard_errors_keyringunavailableerror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L263", + "weight": 1.0, + "source": "lims_keyring_store_decode_envelope", + "target": "exlab_wizard_errors_keyringunavailableerror" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/errors.py", + "source_location": "L69", + "weight": 1.0, + "source": "exlab_wizard_errors_rationale_69", + "target": "exlab_wizard_errors_setupincompleteerror", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/__main__.py", + "source_location": "L6", + "weight": 1.0, + "source": "src_exlab_wizard_main_py", + "target": "exlab_wizard_main_main", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/__main__.py", + "source_location": "L1", + "weight": 1.0, + "source": "exlab_wizard_main_rationale_1", + "target": "src_exlab_wizard_main_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L25", + "weight": 1.0, + "source": "src_exlab_wizard_ui_theme_py", + "target": "ui_theme_build_root_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L100", + "weight": 1.0, + "source": "src_exlab_wizard_ui_theme_py", + "target": "ui_theme_register_theme", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L122", + "weight": 1.0, + "source": "src_exlab_wizard_ui_theme_py", + "target": "ui_theme_resolve_assets_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L137", + "weight": 1.0, + "source": "src_exlab_wizard_ui_theme_py", + "target": "ui_theme_register_static_assets", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_theme_rationale_1", + "target": "src_exlab_wizard_ui_theme_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L113", + "weight": 1.0, + "source": "ui_theme_register_theme", + "target": "ui_theme_build_root_css", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L26", + "weight": 1.0, + "source": "ui_theme_rationale_26", + "target": "ui_theme_build_root_css", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L101", + "weight": 1.0, + "source": "ui_theme_rationale_101", + "target": "ui_theme_register_theme", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L144", + "weight": 1.0, + "source": "ui_theme_register_static_assets", + "target": "ui_theme_resolve_assets_dir", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L123", + "weight": 1.0, + "source": "ui_theme_rationale_123", + "target": "ui_theme_resolve_assets_dir", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/theme.py", + "source_location": "L138", + "weight": 1.0, + "source": "ui_theme_rationale_138", + "target": "ui_theme_register_static_assets", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L79", + "weight": 1.0, + "source": "ui_mount_mount_ui", + "target": "ui_theme_register_static_assets" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/equipment_form.py", + "source_location": "L29", + "weight": 1.0, + "source": "src_exlab_wizard_ui_equipment_form_py", + "target": "ui_equipment_form_build_equipment_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/equipment_form.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_equipment_form_rationale_1", + "target": "src_exlab_wizard_ui_equipment_form_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/equipment_form.py", + "source_location": "L54", + "weight": 1.0, + "source": "ui_equipment_form_rationale_54", + "target": "ui_equipment_form_build_equipment_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/equipment_form.py", + "source_location": "L63", + "weight": 1.0, + "source": "ui_equipment_form_build_equipment_config", + "target": "constants_enums_syncmode" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/equipment_form.py", + "source_location": "L70", + "weight": 1.0, + "source": "ui_equipment_form_build_equipment_config", + "target": "config_models_rclonesmbtransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/equipment_form.py", + "source_location": "L79", + "weight": 1.0, + "source": "ui_equipment_form_build_equipment_config", + "target": "config_models_rclonesftptransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/equipment_form.py", + "source_location": "L87", + "weight": 1.0, + "source": "ui_equipment_form_build_equipment_config", + "target": "config_models_orchestratorstagingtransport" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/equipment_form.py", + "source_location": "L88", + "weight": 1.0, + "source": "ui_equipment_form_build_equipment_config", + "target": "constants_enums_orchestratortransporttype" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/equipment_form.py", + "source_location": "L93", + "weight": 1.0, + "source": "ui_equipment_form_build_equipment_config", + "target": "config_models_equipmentconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L127", + "weight": 1.0, + "source": "pages_wizard_equipment_assemble_equipment_config", + "target": "ui_equipment_form_build_equipment_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/design.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_design_rationale_1", + "target": "src_exlab_wizard_ui_design_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L35", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_severity", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L44", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_bannerid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L58", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_containerid", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L67", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_actionspec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L106", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_emit_toast", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L165", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_notify_success", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L179", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_notify_info", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L190", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_notify_warning", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L204", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_notify_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L223", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_notify_field_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L233", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_notify_form_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L243", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_clear_field_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L249", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_clear_form_errors", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L255", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_get_field_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L261", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_get_form_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L272", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_show_banner", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L312", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_clear_banner", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L318", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_list_active_banners", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L334", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_banner_overflow_count", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L341", + "weight": 1.0, + "source": "src_exlab_wizard_ui_notifications_py", + "target": "ui_notifications_reset_for_tests", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_notifications_rationale_1", + "target": "src_exlab_wizard_ui_notifications_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L36", + "weight": 1.0, + "source": "ui_notifications_rationale_36", + "target": "ui_notifications_severity", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L45", + "weight": 1.0, + "source": "ui_notifications_rationale_45", + "target": "ui_notifications_bannerid", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L59", + "weight": 1.0, + "source": "ui_notifications_rationale_59", + "target": "ui_notifications_containerid", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L68", + "weight": 1.0, + "source": "ui_notifications_rationale_68", + "target": "ui_notifications_actionspec", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L171", + "weight": 1.0, + "source": "ui_notifications_notify_success", + "target": "ui_notifications_emit_toast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L182", + "weight": 1.0, + "source": "ui_notifications_notify_info", + "target": "ui_notifications_emit_toast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L196", + "weight": 1.0, + "source": "ui_notifications_notify_warning", + "target": "ui_notifications_emit_toast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L210", + "weight": 1.0, + "source": "ui_notifications_notify_error", + "target": "ui_notifications_emit_toast", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L113", + "weight": 1.0, + "source": "ui_notifications_rationale_113", + "target": "ui_notifications_emit_toast", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L166", + "weight": 1.0, + "source": "ui_notifications_rationale_166", + "target": "ui_notifications_notify_success", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L180", + "weight": 1.0, + "source": "ui_notifications_rationale_180", + "target": "ui_notifications_notify_info", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L191", + "weight": 1.0, + "source": "ui_notifications_rationale_191", + "target": "ui_notifications_notify_warning", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L205", + "weight": 1.0, + "source": "ui_notifications_rationale_205", + "target": "ui_notifications_notify_error", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L224", + "weight": 1.0, + "source": "ui_notifications_rationale_224", + "target": "ui_notifications_notify_field_error", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L234", + "weight": 1.0, + "source": "ui_notifications_rationale_234", + "target": "ui_notifications_notify_form_error", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L244", + "weight": 1.0, + "source": "ui_notifications_rationale_244", + "target": "ui_notifications_clear_field_error", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L250", + "weight": 1.0, + "source": "ui_notifications_rationale_250", + "target": "ui_notifications_clear_form_errors", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L256", + "weight": 1.0, + "source": "ui_notifications_rationale_256", + "target": "ui_notifications_get_field_error", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L262", + "weight": 1.0, + "source": "ui_notifications_rationale_262", + "target": "ui_notifications_get_form_error", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L281", + "weight": 1.0, + "source": "ui_notifications_rationale_281", + "target": "ui_notifications_show_banner", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L313", + "weight": 1.0, + "source": "ui_notifications_rationale_313", + "target": "ui_notifications_clear_banner", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L337", + "weight": 1.0, + "source": "ui_notifications_banner_overflow_count", + "target": "ui_notifications_list_active_banners", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L321", + "weight": 1.0, + "source": "ui_notifications_rationale_321", + "target": "ui_notifications_list_active_banners", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L335", + "weight": 1.0, + "source": "ui_notifications_rationale_335", + "target": "ui_notifications_banner_overflow_count", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/notifications.py", + "source_location": "L342", + "weight": 1.0, + "source": "ui_notifications_rationale_342", + "target": "ui_notifications_reset_for_tests", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L58", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_spawn_background", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L66", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_mount_ui", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L89", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_register_pages", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L430", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_lims_credential_handlers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L486", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_nas_credential_handlers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L543", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_nas_test_connection", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L593", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_persist_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L625", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_ensure_staging_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L651", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_apply_live_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L668", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_nas_credential_missing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L689", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_is_setup_ready", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L721", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_apply_autostart", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L740", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_build_main_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L772", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_panel_sessions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L789", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_operation_counts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L806", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_setup_next_action", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L829", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_build_main_query", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L850", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_classify_node", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L890", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_build_metadata_payload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L921", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_metadata_for_owned_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L936", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_metadata_for_relay_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L950", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_metadata_for_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L984", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_count_dir_children", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L999", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_metadata_for_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1033", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_drive_folder_feed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1094", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_fetch_folder_async", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1118", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_run_staging_action", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1176", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_bulk_clear_verified", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1214", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_file_context_action", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1254", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_toggle_keep_local", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1303", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_open_in_os", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1331", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_build_operation_rows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1343", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_open_operations_modal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1367", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_open_operation_details", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1401", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_resume_operation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1425", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_open_input_required_dialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1471", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_cancel_operation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1480", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_cancel_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1521", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_open_log_dialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1569", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_missing_setup_sections", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1602", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_templates_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1610", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_template_names", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1627", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_template_questions_map", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1660", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_lims_catalogue_projects", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1694", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_lims_projects", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1724", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_equipment_ids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1732", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_await_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1749", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_consume_session_progress", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1794", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_close_dialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1802", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_submit_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1835", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_submit_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1868", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_run_creation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1905", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_render_run_wizard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1919", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_safe_audit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1931", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_build_staging_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1950", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1963", + "weight": 1.0, + "source": "src_exlab_wizard_ui_mount_py", + "target": "ui_mount_render_unavailable", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_mount_rationale_1", + "target": "src_exlab_wizard_ui_mount_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1072", + "weight": 1.0, + "source": "ui_mount_drive_folder_feed", + "target": "ui_mount_spawn_background", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1152", + "weight": 1.0, + "source": "ui_mount_run_staging_action", + "target": "ui_mount_spawn_background", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1211", + "weight": 1.0, + "source": "ui_mount_bulk_clear_verified", + "target": "ui_mount_spawn_background", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1300", + "weight": 1.0, + "source": "ui_mount_toggle_keep_local", + "target": "ui_mount_spawn_background", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1566", + "weight": 1.0, + "source": "ui_mount_open_log_dialog", + "target": "ui_mount_spawn_background", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L59", + "weight": 1.0, + "source": "ui_mount_rationale_59", + "target": "ui_mount_spawn_background", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L80", + "weight": 1.0, + "source": "ui_mount_mount_ui", + "target": "ui_mount_register_pages", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L67", + "weight": 1.0, + "source": "ui_mount_rationale_67", + "target": "ui_mount_mount_ui", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L149", + "weight": 1.0, + "source": "tray_main_build_default_app", + "target": "ui_mount_mount_ui" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L90", + "weight": 1.0, + "source": "ui_mount_rationale_90", + "target": "ui_mount_register_pages", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L433", + "weight": 1.0, + "source": "ui_mount_rationale_433", + "target": "ui_mount_lims_credential_handlers", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L489", + "weight": 1.0, + "source": "ui_mount_rationale_489", + "target": "ui_mount_nas_credential_handlers", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L501", + "weight": 1.0, + "source": "ui_mount_nas_credential_handlers", + "target": "constants_keyring_keyring_nas_username" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L544", + "weight": 1.0, + "source": "ui_mount_rationale_544", + "target": "ui_mount_nas_test_connection", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L561", + "weight": 1.0, + "source": "ui_mount_nas_test_connection", + "target": "components_test_connection_panel_testconnectionresult" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L607", + "weight": 1.0, + "source": "ui_mount_persist_config", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L619", + "weight": 1.0, + "source": "ui_mount_persist_config", + "target": "ui_mount_ensure_staging_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L621", + "weight": 1.0, + "source": "ui_mount_persist_config", + "target": "ui_mount_apply_live_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L594", + "weight": 1.0, + "source": "ui_mount_rationale_594", + "target": "ui_mount_persist_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L648", + "weight": 1.0, + "source": "ui_mount_ensure_staging_root", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L626", + "weight": 1.0, + "source": "ui_mount_rationale_626", + "target": "ui_mount_ensure_staging_root", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L652", + "weight": 1.0, + "source": "ui_mount_rationale_652", + "target": "ui_mount_apply_live_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L662", + "weight": 1.0, + "source": "ui_mount_apply_live_config", + "target": "tray_dependencies_apply_live_config" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1593", + "weight": 1.0, + "source": "ui_mount_missing_setup_sections", + "target": "ui_mount_nas_credential_missing", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L669", + "weight": 1.0, + "source": "ui_mount_rationale_669", + "target": "ui_mount_nas_credential_missing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L683", + "weight": 1.0, + "source": "ui_mount_nas_credential_missing", + "target": "config_models_transport_requires_keyring_password" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L684", + "weight": 1.0, + "source": "ui_mount_nas_credential_missing", + "target": "api_dependencies_nas_password_present" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L756", + "weight": 1.0, + "source": "ui_mount_build_main_state", + "target": "ui_mount_is_setup_ready", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L690", + "weight": 1.0, + "source": "ui_mount_rationale_690", + "target": "ui_mount_is_setup_ready", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L715", + "weight": 1.0, + "source": "ui_mount_is_setup_ready", + "target": "api_setup_compute_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L722", + "weight": 1.0, + "source": "ui_mount_rationale_722", + "target": "ui_mount_apply_autostart", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L734", + "weight": 1.0, + "source": "ui_mount_apply_autostart", + "target": "components_filter_chips_toggle" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L754", + "weight": 1.0, + "source": "ui_mount_build_main_state", + "target": "ui_mount_operation_counts", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L757", + "weight": 1.0, + "source": "ui_mount_build_main_state", + "target": "ui_mount_setup_next_action", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L800", + "weight": 1.0, + "source": "ui_mount_operation_counts", + "target": "ui_mount_panel_sessions", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1340", + "weight": 1.0, + "source": "ui_mount_build_operation_rows", + "target": "ui_mount_panel_sessions", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L773", + "weight": 1.0, + "source": "ui_mount_rationale_773", + "target": "ui_mount_panel_sessions", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L786", + "weight": 1.0, + "source": "ui_mount_panel_sessions", + "target": "controller_session_store_on_operations_panel" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L790", + "weight": 1.0, + "source": "ui_mount_rationale_790", + "target": "ui_mount_operation_counts", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L807", + "weight": 1.0, + "source": "ui_mount_rationale_807", + "target": "ui_mount_setup_next_action", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L822", + "weight": 1.0, + "source": "ui_mount_setup_next_action", + "target": "api_setup_compute_setup_state" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L830", + "weight": 1.0, + "source": "ui_mount_rationale_830", + "target": "ui_mount_build_main_query", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L851", + "weight": 1.0, + "source": "ui_mount_rationale_851", + "target": "ui_mount_classify_node", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L908", + "weight": 1.0, + "source": "ui_mount_build_metadata_payload", + "target": "ui_mount_metadata_for_owned_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L910", + "weight": 1.0, + "source": "ui_mount_build_metadata_payload", + "target": "ui_mount_metadata_for_relay_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L912", + "weight": 1.0, + "source": "ui_mount_build_metadata_payload", + "target": "ui_mount_metadata_for_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L914", + "weight": 1.0, + "source": "ui_mount_build_metadata_payload", + "target": "ui_mount_metadata_for_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L895", + "weight": 1.0, + "source": "ui_mount_rationale_895", + "target": "ui_mount_build_metadata_payload", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L922", + "weight": 1.0, + "source": "ui_mount_rationale_922", + "target": "ui_mount_metadata_for_owned_equipment", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L937", + "weight": 1.0, + "source": "ui_mount_rationale_937", + "target": "ui_mount_metadata_for_relay_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L966", + "weight": 1.0, + "source": "ui_mount_metadata_for_project", + "target": "ui_mount_count_dir_children", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L951", + "weight": 1.0, + "source": "ui_mount_rationale_951", + "target": "ui_mount_metadata_for_project", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L985", + "weight": 1.0, + "source": "ui_mount_rationale_985", + "target": "ui_mount_count_dir_children", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1000", + "weight": 1.0, + "source": "ui_mount_rationale_1000", + "target": "ui_mount_metadata_for_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1016", + "weight": 1.0, + "source": "ui_mount_metadata_for_run", + "target": "io_json_files_read_msgspec_json" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1064", + "weight": 1.0, + "source": "ui_mount_drive_folder_feed", + "target": "ui_mount_fetch_folder_async", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1034", + "weight": 1.0, + "source": "ui_mount_rationale_1034", + "target": "ui_mount_drive_folder_feed", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1080", + "weight": 1.0, + "source": "ui_mount_drive_folder_feed", + "target": "components_file_list_filelistentry" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1095", + "weight": 1.0, + "source": "ui_mount_rationale_1095", + "target": "ui_mount_fetch_folder_async", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1134", + "weight": 1.0, + "source": "ui_mount_run_staging_action", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1171", + "weight": 1.0, + "source": "ui_mount_run_staging_action", + "target": "ui_mount_open_log_dialog", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1119", + "weight": 1.0, + "source": "ui_mount_rationale_1119", + "target": "ui_mount_run_staging_action", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1187", + "weight": 1.0, + "source": "ui_mount_bulk_clear_verified", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1177", + "weight": 1.0, + "source": "ui_mount_rationale_1177", + "target": "ui_mount_bulk_clear_verified", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1231", + "weight": 1.0, + "source": "ui_mount_file_context_action", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1234", + "weight": 1.0, + "source": "ui_mount_file_context_action", + "target": "ui_mount_open_in_os", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1249", + "weight": 1.0, + "source": "ui_mount_file_context_action", + "target": "ui_mount_toggle_keep_local", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1222", + "weight": 1.0, + "source": "ui_mount_rationale_1222", + "target": "ui_mount_file_context_action", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1275", + "weight": 1.0, + "source": "ui_mount_toggle_keep_local", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1261", + "weight": 1.0, + "source": "ui_mount_rationale_1261", + "target": "ui_mount_toggle_keep_local", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1278", + "weight": 1.0, + "source": "ui_mount_toggle_keep_local", + "target": "routers_browse_find_run_root" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1282", + "weight": 1.0, + "source": "ui_mount_toggle_keep_local", + "target": "routers_browse_run_relative_posix" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1304", + "weight": 1.0, + "source": "ui_mount_rationale_1304", + "target": "ui_mount_open_in_os", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1355", + "weight": 1.0, + "source": "ui_mount_open_operations_modal", + "target": "ui_mount_build_operation_rows", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1332", + "weight": 1.0, + "source": "ui_mount_rationale_1332", + "target": "ui_mount_build_operation_rows", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1353", + "weight": 1.0, + "source": "ui_mount_open_operations_modal", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1358", + "weight": 1.0, + "source": "ui_mount_open_operations_modal", + "target": "ui_mount_resume_operation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1359", + "weight": 1.0, + "source": "ui_mount_open_operations_modal", + "target": "ui_mount_cancel_operation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1360", + "weight": 1.0, + "source": "ui_mount_open_operations_modal", + "target": "ui_mount_open_operation_details", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1344", + "weight": 1.0, + "source": "ui_mount_rationale_1344", + "target": "ui_mount_open_operations_modal", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1356", + "weight": 1.0, + "source": "ui_mount_open_operations_modal", + "target": "components_operations_modal_operations_modal" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1378", + "weight": 1.0, + "source": "ui_mount_open_operation_details", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1368", + "weight": 1.0, + "source": "ui_mount_rationale_1368", + "target": "ui_mount_open_operation_details", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1413", + "weight": 1.0, + "source": "ui_mount_resume_operation", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1415", + "weight": 1.0, + "source": "ui_mount_resume_operation", + "target": "ui_mount_open_input_required_dialog", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1402", + "weight": 1.0, + "source": "ui_mount_rationale_1402", + "target": "ui_mount_resume_operation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1779", + "weight": 1.0, + "source": "ui_mount_consume_session_progress", + "target": "ui_mount_open_input_required_dialog", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1434", + "weight": 1.0, + "source": "ui_mount_rationale_1434", + "target": "ui_mount_open_input_required_dialog", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1458", + "weight": 1.0, + "source": "ui_mount_open_input_required_dialog", + "target": "components_input_required_dialog_input_required_dialog" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1475", + "weight": 1.0, + "source": "ui_mount_cancel_operation", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1477", + "weight": 1.0, + "source": "ui_mount_cancel_operation", + "target": "ui_mount_cancel_session", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1472", + "weight": 1.0, + "source": "ui_mount_rationale_1472", + "target": "ui_mount_cancel_operation", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1481", + "weight": 1.0, + "source": "ui_mount_rationale_1481", + "target": "ui_mount_cancel_session", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1522", + "weight": 1.0, + "source": "ui_mount_rationale_1522", + "target": "ui_mount_open_log_dialog", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1570", + "weight": 1.0, + "source": "ui_mount_rationale_1570", + "target": "ui_mount_missing_setup_sections", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1597", + "weight": 1.0, + "source": "ui_mount_missing_setup_sections", + "target": "api_dependencies_lims_password_present" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1612", + "weight": 1.0, + "source": "ui_mount_template_names", + "target": "ui_mount_templates_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1636", + "weight": 1.0, + "source": "ui_mount_template_questions_map", + "target": "ui_mount_templates_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1808", + "weight": 1.0, + "source": "ui_mount_submit_project", + "target": "ui_mount_templates_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1841", + "weight": 1.0, + "source": "ui_mount_submit_run", + "target": "ui_mount_templates_dir", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1603", + "weight": 1.0, + "source": "ui_mount_rationale_1603", + "target": "ui_mount_templates_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1911", + "weight": 1.0, + "source": "ui_mount_render_run_wizard", + "target": "ui_mount_template_names", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1611", + "weight": 1.0, + "source": "ui_mount_rationale_1611", + "target": "ui_mount_template_names", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1913", + "weight": 1.0, + "source": "ui_mount_render_run_wizard", + "target": "ui_mount_template_questions_map", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1628", + "weight": 1.0, + "source": "ui_mount_rationale_1628", + "target": "ui_mount_template_questions_map", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1644", + "weight": 1.0, + "source": "ui_mount_template_questions_map", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1645", + "weight": 1.0, + "source": "ui_mount_template_questions_map", + "target": "constants_enums_templatetype" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1721", + "weight": 1.0, + "source": "ui_mount_lims_projects", + "target": "ui_mount_lims_catalogue_projects", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1661", + "weight": 1.0, + "source": "ui_mount_rationale_1661", + "target": "ui_mount_lims_catalogue_projects", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1676", + "weight": 1.0, + "source": "ui_mount_lims_catalogue_projects", + "target": "lims_catalogue_read_catalogue" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1695", + "weight": 1.0, + "source": "ui_mount_rationale_1695", + "target": "ui_mount_lims_projects", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1912", + "weight": 1.0, + "source": "ui_mount_render_run_wizard", + "target": "ui_mount_equipment_ids", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1725", + "weight": 1.0, + "source": "ui_mount_rationale_1725", + "target": "ui_mount_equipment_ids", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1889", + "weight": 1.0, + "source": "ui_mount_run_creation", + "target": "ui_mount_await_session", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1733", + "weight": 1.0, + "source": "ui_mount_rationale_1733", + "target": "ui_mount_await_session", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1788", + "weight": 1.0, + "source": "ui_mount_consume_session_progress", + "target": "ui_mount_close_dialog", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1888", + "weight": 1.0, + "source": "ui_mount_run_creation", + "target": "ui_mount_consume_session_progress", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1752", + "weight": 1.0, + "source": "ui_mount_rationale_1752", + "target": "ui_mount_consume_session_progress", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1795", + "weight": 1.0, + "source": "ui_mount_rationale_1795", + "target": "ui_mount_close_dialog", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1806", + "weight": 1.0, + "source": "ui_mount_submit_project", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1830", + "weight": 1.0, + "source": "ui_mount_submit_project", + "target": "ui_mount_run_creation", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1803", + "weight": 1.0, + "source": "ui_mount_rationale_1803", + "target": "ui_mount_submit_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1816", + "weight": 1.0, + "source": "ui_mount_submit_project", + "target": "controller_creation_projectcreaterequest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1839", + "weight": 1.0, + "source": "ui_mount_submit_run", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1863", + "weight": 1.0, + "source": "ui_mount_submit_run", + "target": "ui_mount_run_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1914", + "weight": 1.0, + "source": "ui_mount_render_run_wizard", + "target": "ui_mount_submit_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1836", + "weight": 1.0, + "source": "ui_mount_rationale_1836", + "target": "ui_mount_submit_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1852", + "weight": 1.0, + "source": "ui_mount_submit_run", + "target": "controller_creation_runcreaterequest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1892", + "weight": 1.0, + "source": "ui_mount_run_creation", + "target": "ui_mount_show_toast", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1877", + "weight": 1.0, + "source": "ui_mount_rationale_1877", + "target": "ui_mount_run_creation", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1920", + "weight": 1.0, + "source": "ui_mount_rationale_1920", + "target": "ui_mount_safe_audit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/mount.py", + "source_location": "L1940", + "weight": 1.0, + "source": "ui_mount_build_staging_state", + "target": "orchestrator_staging_query_list_staged_runs" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L24", + "weight": 1.0, + "source": "src_exlab_wizard_ui_keyboard_py", + "target": "ui_keyboard_shortcut", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L39", + "weight": 1.0, + "source": "src_exlab_wizard_ui_keyboard_py", + "target": "ui_keyboard_keycombo", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L61", + "weight": 1.0, + "source": "src_exlab_wizard_ui_keyboard_py", + "target": "ui_keyboard_shortcutbinding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L130", + "weight": 1.0, + "source": "src_exlab_wizard_ui_keyboard_py", + "target": "ui_keyboard_shortcutregistry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L175", + "weight": 1.0, + "source": "src_exlab_wizard_ui_keyboard_py", + "target": "ui_keyboard_list_bindings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L181", + "weight": 1.0, + "source": "src_exlab_wizard_ui_keyboard_py", + "target": "ui_keyboard_get_binding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L194", + "weight": 1.0, + "source": "src_exlab_wizard_ui_keyboard_py", + "target": "ui_keyboard_is_macos", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L200", + "weight": 1.0, + "source": "src_exlab_wizard_ui_keyboard_py", + "target": "ui_keyboard_combo_for_current_os", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L207", + "weight": 1.0, + "source": "src_exlab_wizard_ui_keyboard_py", + "target": "ui_keyboard_resolve", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L224", + "weight": 1.0, + "source": "src_exlab_wizard_ui_keyboard_py", + "target": "ui_keyboard_bind_global_shortcuts", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L1", + "weight": 1.0, + "source": "ui_keyboard_rationale_1", + "target": "src_exlab_wizard_ui_keyboard_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L25", + "weight": 1.0, + "source": "ui_keyboard_rationale_25", + "target": "ui_keyboard_shortcut", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L48", + "weight": 1.0, + "source": "ui_keyboard_keycombo", + "target": "ui_keyboard_keycombo_matches", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L40", + "weight": 1.0, + "source": "ui_keyboard_rationale_40", + "target": "ui_keyboard_keycombo", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L219", + "weight": 1.0, + "source": "ui_keyboard_resolve", + "target": "ui_keyboard_keycombo_matches", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L49", + "weight": 1.0, + "source": "ui_keyboard_rationale_49", + "target": "ui_keyboard_keycombo_matches", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L62", + "weight": 1.0, + "source": "ui_keyboard_rationale_62", + "target": "ui_keyboard_shortcutbinding", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L140", + "weight": 1.0, + "source": "ui_keyboard_shortcutregistry", + "target": "ui_keyboard_shortcutregistry_register", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L154", + "weight": 1.0, + "source": "ui_keyboard_shortcutregistry", + "target": "ui_keyboard_shortcutregistry_dispatch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L131", + "weight": 1.0, + "source": "ui_keyboard_rationale_131", + "target": "ui_keyboard_shortcutregistry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L141", + "weight": 1.0, + "source": "ui_keyboard_rationale_141", + "target": "ui_keyboard_shortcutregistry_register", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L155", + "weight": 1.0, + "source": "ui_keyboard_rationale_155", + "target": "ui_keyboard_shortcutregistry_dispatch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L176", + "weight": 1.0, + "source": "ui_keyboard_rationale_176", + "target": "ui_keyboard_list_bindings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L203", + "weight": 1.0, + "source": "ui_keyboard_combo_for_current_os", + "target": "ui_keyboard_get_binding", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L182", + "weight": 1.0, + "source": "ui_keyboard_rationale_182", + "target": "ui_keyboard_get_binding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L204", + "weight": 1.0, + "source": "ui_keyboard_combo_for_current_os", + "target": "ui_keyboard_is_macos", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L218", + "weight": 1.0, + "source": "ui_keyboard_resolve", + "target": "ui_keyboard_is_macos", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L195", + "weight": 1.0, + "source": "ui_keyboard_rationale_195", + "target": "ui_keyboard_is_macos", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L201", + "weight": 1.0, + "source": "ui_keyboard_rationale_201", + "target": "ui_keyboard_combo_for_current_os", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L215", + "weight": 1.0, + "source": "ui_keyboard_rationale_215", + "target": "ui_keyboard_resolve", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/keyboard.py", + "source_location": "L225", + "weight": 1.0, + "source": "ui_keyboard_rationale_225", + "target": "ui_keyboard_bind_global_shortcuts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L38", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_file_list_py", + "target": "components_file_list_filelistentry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L58", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_file_list_py", + "target": "components_file_list_fileliststate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L68", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_file_list_py", + "target": "components_file_list_filelistdiff", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L76", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_file_list_py", + "target": "components_file_list_diff_file_lists", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L112", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_file_list_py", + "target": "components_file_list_render_file_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L155", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_file_list_py", + "target": "components_file_list_render_header", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L180", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_file_list_py", + "target": "components_file_list_render_row", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_file_list_rationale_1", + "target": "src_exlab_wizard_ui_components_file_list_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L39", + "weight": 1.0, + "source": "components_file_list_rationale_39", + "target": "components_file_list_filelistentry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L59", + "weight": 1.0, + "source": "components_file_list_rationale_59", + "target": "components_file_list_fileliststate", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L432", + "weight": 0.8, + "source": "pages_main_mainpagestate", + "target": "components_file_list_fileliststate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L446", + "weight": 1.0, + "source": "pages_main_render_centre_file_list", + "target": "components_file_list_fileliststate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L105", + "weight": 1.0, + "source": "components_file_list_diff_file_lists", + "target": "components_file_list_filelistdiff", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L69", + "weight": 1.0, + "source": "components_file_list_rationale_69", + "target": "components_file_list_filelistdiff", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L80", + "weight": 1.0, + "source": "components_file_list_rationale_80", + "target": "components_file_list_diff_file_lists", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L143", + "weight": 1.0, + "source": "components_file_list_render_file_list", + "target": "components_file_list_render_header", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L146", + "weight": 1.0, + "source": "components_file_list_render_file_list", + "target": "components_file_list_render_row", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L118", + "weight": 1.0, + "source": "components_file_list_rationale_118", + "target": "components_file_list_render_file_list", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L450", + "weight": 1.0, + "source": "pages_main_render_centre_file_list", + "target": "components_file_list_render_file_list" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L156", + "weight": 1.0, + "source": "components_file_list_rationale_156", + "target": "components_file_list_render_header", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/components/file_list.py", + "source_location": "L192", + "weight": 1.0, + "source": "components_file_list_render_row", + "target": "pages_staging_format_bytes" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L29", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_test_connection_panel_py", + "target": "components_test_connection_panel_testconnectionresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L38", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_test_connection_panel_py", + "target": "components_test_connection_panel_panel_props", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L69", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_test_connection_panel_py", + "target": "components_test_connection_panel_test_connection_panel", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_test_connection_panel_rationale_1", + "target": "src_exlab_wizard_ui_components_test_connection_panel_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L30", + "weight": 1.0, + "source": "components_test_connection_panel_rationale_30", + "target": "components_test_connection_panel_testconnectionresult", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L80", + "weight": 1.0, + "source": "components_test_connection_panel_test_connection_panel", + "target": "components_test_connection_panel_panel_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L39", + "weight": 1.0, + "source": "components_test_connection_panel_rationale_39", + "target": "components_test_connection_panel_panel_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_connection_panel.py", + "source_location": "L74", + "weight": 1.0, + "source": "components_test_connection_panel_rationale_74", + "target": "components_test_connection_panel_test_connection_panel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/override_badge.py", + "source_location": "L20", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_override_badge_py", + "target": "components_override_badge_override_badge_props", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/override_badge.py", + "source_location": "L38", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_override_badge_py", + "target": "components_override_badge_override_badge", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/override_badge.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_override_badge_rationale_1", + "target": "src_exlab_wizard_ui_components_override_badge_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/override_badge.py", + "source_location": "L45", + "weight": 1.0, + "source": "components_override_badge_override_badge", + "target": "components_override_badge_override_badge_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/override_badge.py", + "source_location": "L21", + "weight": 1.0, + "source": "components_override_badge_rationale_21", + "target": "components_override_badge_override_badge_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/override_badge.py", + "source_location": "L39", + "weight": 1.0, + "source": "components_override_badge_rationale_39", + "target": "components_override_badge_override_badge", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L71", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_treefilters", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L81", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_equipmentnode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L90", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_projectnode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L97", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_runnode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L105", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_treenode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L117", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_matches_search", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L125", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_filter_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L139", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_filter_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L148", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_build_nodes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L235", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_sync_icon_url", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L251", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_to_nicegui_nodes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L297", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_ctx_emit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L312", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_tree_header_slot", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L363", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_py", + "target": "components_tree_build_tree", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_tree_rationale_1", + "target": "src_exlab_wizard_ui_components_tree_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L391", + "weight": 1.0, + "source": "components_tree_build_tree", + "target": "components_tree_treefilters", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L72", + "weight": 1.0, + "source": "components_tree_rationale_72", + "target": "components_tree_treefilters", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_treefilters", + "target": "constants_enums_runkind", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_treefilters", + "target": "constants_enums_runsyncstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_treefilters", + "target": "constants_enums_treeprojectstatus", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L25", + "weight": 0.8, + "source": "pages_main_mainpagestate", + "target": "components_tree_treefilters", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L88", + "weight": 1.0, + "source": "pages_main_chip_state_to_tree_filters", + "target": "components_tree_treefilters" + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_equipmentnode", + "target": "constants_enums_runkind", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_equipmentnode", + "target": "constants_enums_runsyncstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_equipmentnode", + "target": "constants_enums_treeprojectstatus", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_projectnode", + "target": "constants_enums_runkind", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_projectnode", + "target": "constants_enums_runsyncstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_projectnode", + "target": "constants_enums_treeprojectstatus", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_runnode", + "target": "constants_enums_runkind", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_runnode", + "target": "constants_enums_runsyncstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_runnode", + "target": "constants_enums_treeprojectstatus", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L190", + "weight": 1.0, + "source": "components_tree_build_nodes", + "target": "components_tree_treenode", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L106", + "weight": 1.0, + "source": "components_tree_rationale_106", + "target": "components_tree_treenode", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_treenode", + "target": "constants_enums_runkind", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_treenode", + "target": "constants_enums_runsyncstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L38", + "weight": 0.8, + "source": "components_tree_treenode", + "target": "constants_enums_treeprojectstatus", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L169", + "weight": 1.0, + "source": "components_tree_build_nodes", + "target": "components_tree_matches_search", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L118", + "weight": 1.0, + "source": "components_tree_rationale_118", + "target": "components_tree_matches_search", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L159", + "weight": 1.0, + "source": "components_tree_build_nodes", + "target": "components_tree_filter_project", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L126", + "weight": 1.0, + "source": "components_tree_rationale_126", + "target": "components_tree_filter_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L165", + "weight": 1.0, + "source": "components_tree_build_nodes", + "target": "components_tree_filter_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L140", + "weight": 1.0, + "source": "components_tree_rationale_140", + "target": "components_tree_filter_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L392", + "weight": 1.0, + "source": "components_tree_build_tree", + "target": "components_tree_build_nodes", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L153", + "weight": 1.0, + "source": "components_tree_rationale_153", + "target": "components_tree_build_nodes", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L274", + "weight": 1.0, + "source": "components_tree_to_nicegui_nodes", + "target": "components_tree_sync_icon_url", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L236", + "weight": 1.0, + "source": "components_tree_rationale_236", + "target": "components_tree_sync_icon_url", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L393", + "weight": 1.0, + "source": "components_tree_build_tree", + "target": "components_tree_to_nicegui_nodes", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L252", + "weight": 1.0, + "source": "components_tree_rationale_252", + "target": "components_tree_to_nicegui_nodes", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L329", + "weight": 1.0, + "source": "components_tree_tree_header_slot", + "target": "components_tree_ctx_emit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L298", + "weight": 1.0, + "source": "components_tree_rationale_298", + "target": "components_tree_ctx_emit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L433", + "weight": 1.0, + "source": "components_tree_build_tree", + "target": "components_tree_tree_header_slot", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree.py", + "source_location": "L372", + "weight": 1.0, + "source": "components_tree_rationale_372", + "target": "components_tree_build_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L267", + "weight": 1.0, + "source": "pages_main_render_file_explorer_page", + "target": "components_tree_build_tree" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/breadcrumb.py", + "source_location": "L15", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_breadcrumb_py", + "target": "components_breadcrumb_breadcrumbsegment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/breadcrumb.py", + "source_location": "L23", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_breadcrumb_py", + "target": "components_breadcrumb_segments_from_node_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/breadcrumb.py", + "source_location": "L40", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_breadcrumb_py", + "target": "components_breadcrumb_render_breadcrumb", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/breadcrumb.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_breadcrumb_rationale_1", + "target": "src_exlab_wizard_ui_components_breadcrumb_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/breadcrumb.py", + "source_location": "L35", + "weight": 1.0, + "source": "components_breadcrumb_segments_from_node_id", + "target": "components_breadcrumb_breadcrumbsegment", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/breadcrumb.py", + "source_location": "L16", + "weight": 1.0, + "source": "components_breadcrumb_rationale_16", + "target": "components_breadcrumb_breadcrumbsegment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/breadcrumb.py", + "source_location": "L51", + "weight": 1.0, + "source": "components_breadcrumb_render_breadcrumb", + "target": "components_breadcrumb_segments_from_node_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/breadcrumb.py", + "source_location": "L24", + "weight": 1.0, + "source": "components_breadcrumb_rationale_24", + "target": "components_breadcrumb_segments_from_node_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/breadcrumb.py", + "source_location": "L45", + "weight": 1.0, + "source": "components_breadcrumb_rationale_45", + "target": "components_breadcrumb_render_breadcrumb", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L233", + "weight": 1.0, + "source": "pages_main_render_file_explorer_page", + "target": "components_breadcrumb_render_breadcrumb" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_run_badge.py", + "source_location": "L19", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_test_run_badge_py", + "target": "components_test_run_badge_test_run_badge_props", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_run_badge.py", + "source_location": "L30", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_test_run_badge_py", + "target": "components_test_run_badge_test_run_badge", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_run_badge.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_test_run_badge_rationale_1", + "target": "src_exlab_wizard_ui_components_test_run_badge_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_run_badge.py", + "source_location": "L33", + "weight": 1.0, + "source": "components_test_run_badge_test_run_badge", + "target": "components_test_run_badge_test_run_badge_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_run_badge.py", + "source_location": "L20", + "weight": 1.0, + "source": "components_test_run_badge_rationale_20", + "target": "components_test_run_badge_test_run_badge_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/test_run_badge.py", + "source_location": "L31", + "weight": 1.0, + "source": "components_test_run_badge_rationale_31", + "target": "components_test_run_badge_test_run_badge", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L29", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_metadata_pane_py", + "target": "components_metadata_pane_metadatapanestate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L38", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_metadata_pane_py", + "target": "components_metadata_pane_render_metadata_pane", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L82", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_metadata_pane_py", + "target": "components_metadata_pane_kv", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L92", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_metadata_pane_py", + "target": "components_metadata_pane_render_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L118", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_metadata_pane_py", + "target": "components_metadata_pane_render_received_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L138", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_metadata_pane_py", + "target": "components_metadata_pane_render_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L148", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_metadata_pane_py", + "target": "components_metadata_pane_render_runs_folder", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L163", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_metadata_pane_py", + "target": "components_metadata_pane_render_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L200", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_metadata_pane_py", + "target": "components_metadata_pane_render_received_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_metadata_pane_rationale_1", + "target": "src_exlab_wizard_ui_components_metadata_pane_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L30", + "weight": 1.0, + "source": "components_metadata_pane_rationale_30", + "target": "components_metadata_pane_metadatapanestate", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L460", + "weight": 0.8, + "source": "pages_main_mainpagestate", + "target": "components_metadata_pane_metadatapanestate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L477", + "weight": 1.0, + "source": "pages_main_render_right_pane", + "target": "components_metadata_pane_metadatapanestate" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L66", + "weight": 1.0, + "source": "components_metadata_pane_render_metadata_pane", + "target": "components_metadata_pane_render_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L68", + "weight": 1.0, + "source": "components_metadata_pane_render_metadata_pane", + "target": "components_metadata_pane_render_received_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L70", + "weight": 1.0, + "source": "components_metadata_pane_render_metadata_pane", + "target": "components_metadata_pane_render_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L72", + "weight": 1.0, + "source": "components_metadata_pane_render_metadata_pane", + "target": "components_metadata_pane_render_runs_folder", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L74", + "weight": 1.0, + "source": "components_metadata_pane_render_metadata_pane", + "target": "components_metadata_pane_render_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L76", + "weight": 1.0, + "source": "components_metadata_pane_render_metadata_pane", + "target": "components_metadata_pane_render_received_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L43", + "weight": 1.0, + "source": "components_metadata_pane_rationale_43", + "target": "components_metadata_pane_render_metadata_pane", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L482", + "weight": 1.0, + "source": "pages_main_render_right_pane", + "target": "components_metadata_pane_render_metadata_pane" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L103", + "weight": 1.0, + "source": "components_metadata_pane_render_equipment", + "target": "components_metadata_pane_kv", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L133", + "weight": 1.0, + "source": "components_metadata_pane_render_received_equipment", + "target": "components_metadata_pane_kv", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L141", + "weight": 1.0, + "source": "components_metadata_pane_render_project", + "target": "components_metadata_pane_kv", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L159", + "weight": 1.0, + "source": "components_metadata_pane_render_runs_folder", + "target": "components_metadata_pane_kv", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L176", + "weight": 1.0, + "source": "components_metadata_pane_render_run", + "target": "components_metadata_pane_kv", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/metadata_pane.py", + "source_location": "L203", + "weight": 1.0, + "source": "components_metadata_pane_render_received_run", + "target": "components_metadata_pane_kv", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/travelling_badge.py", + "source_location": "L26", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_travelling_badge_py", + "target": "components_travelling_badge_badgeprops", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/travelling_badge.py", + "source_location": "L34", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_travelling_badge_py", + "target": "components_travelling_badge_findinglocation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/travelling_badge.py", + "source_location": "L46", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_travelling_badge_py", + "target": "components_travelling_badge_travelling_badges", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/travelling_badge.py", + "source_location": "L81", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_travelling_badge_py", + "target": "components_travelling_badge_shallowest_collapsed_ancestor", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/travelling_badge.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_travelling_badge_rationale_1", + "target": "src_exlab_wizard_ui_components_travelling_badge_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/travelling_badge.py", + "source_location": "L75", + "weight": 1.0, + "source": "components_travelling_badge_travelling_badges", + "target": "components_travelling_badge_badgeprops", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/travelling_badge.py", + "source_location": "L27", + "weight": 1.0, + "source": "components_travelling_badge_rationale_27", + "target": "components_travelling_badge_badgeprops", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/travelling_badge.py", + "source_location": "L20", + "weight": 0.8, + "source": "components_travelling_badge_badgeprops", + "target": "constants_enums_tier", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/travelling_badge.py", + "source_location": "L35", + "weight": 1.0, + "source": "components_travelling_badge_rationale_35", + "target": "components_travelling_badge_findinglocation", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/components/travelling_badge.py", + "source_location": "L20", + "weight": 0.8, + "source": "components_travelling_badge_findinglocation", + "target": "constants_enums_tier", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/travelling_badge.py", + "source_location": "L62", + "weight": 1.0, + "source": "components_travelling_badge_travelling_badges", + "target": "components_travelling_badge_shallowest_collapsed_ancestor", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/travelling_badge.py", + "source_location": "L50", + "weight": 1.0, + "source": "components_travelling_badge_rationale_50", + "target": "components_travelling_badge_travelling_badges", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/travelling_badge.py", + "source_location": "L85", + "weight": 1.0, + "source": "components_travelling_badge_rationale_85", + "target": "components_travelling_badge_shallowest_collapsed_ancestor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L31", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", + "target": "components_bandwidth_schedule_editor_schedulewindow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L41", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", + "target": "components_bandwidth_schedule_editor_bandwidthschedule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L49", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", + "target": "components_bandwidth_schedule_editor_validate_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L63", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", + "target": "components_bandwidth_schedule_editor_find_overlaps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L81", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", + "target": "components_bandwidth_schedule_editor_schedule_props", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L101", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", + "target": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_bandwidth_schedule_editor_rationale_1", + "target": "src_exlab_wizard_ui_components_bandwidth_schedule_editor_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L32", + "weight": 1.0, + "source": "components_bandwidth_schedule_editor_rationale_32", + "target": "components_bandwidth_schedule_editor_schedulewindow", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L42", + "weight": 1.0, + "source": "components_bandwidth_schedule_editor_rationale_42", + "target": "components_bandwidth_schedule_editor_bandwidthschedule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L93", + "weight": 1.0, + "source": "components_bandwidth_schedule_editor_schedule_props", + "target": "components_bandwidth_schedule_editor_validate_window", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L139", + "weight": 1.0, + "source": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", + "target": "components_bandwidth_schedule_editor_validate_window", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L50", + "weight": 1.0, + "source": "components_bandwidth_schedule_editor_rationale_50", + "target": "components_bandwidth_schedule_editor_validate_window", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L97", + "weight": 1.0, + "source": "components_bandwidth_schedule_editor_schedule_props", + "target": "components_bandwidth_schedule_editor_find_overlaps", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L64", + "weight": 1.0, + "source": "components_bandwidth_schedule_editor_rationale_64", + "target": "components_bandwidth_schedule_editor_find_overlaps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L104", + "weight": 1.0, + "source": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", + "target": "components_bandwidth_schedule_editor_schedule_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L82", + "weight": 1.0, + "source": "components_bandwidth_schedule_editor_rationale_82", + "target": "components_bandwidth_schedule_editor_schedule_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/bandwidth_schedule_editor.py", + "source_location": "L102", + "weight": 1.0, + "source": "components_bandwidth_schedule_editor_rationale_102", + "target": "components_bandwidth_schedule_editor_bandwidth_schedule_editor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/input_required_dialog.py", + "source_location": "L23", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_input_required_dialog_py", + "target": "components_input_required_dialog_field_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/input_required_dialog.py", + "source_location": "L29", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_input_required_dialog_py", + "target": "components_input_required_dialog_collect_default_values", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/input_required_dialog.py", + "source_location": "L50", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_input_required_dialog_py", + "target": "components_input_required_dialog_input_required_dialog", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/input_required_dialog.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_input_required_dialog_rationale_1", + "target": "src_exlab_wizard_ui_components_input_required_dialog_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/input_required_dialog.py", + "source_location": "L38", + "weight": 1.0, + "source": "components_input_required_dialog_collect_default_values", + "target": "components_input_required_dialog_field_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/input_required_dialog.py", + "source_location": "L102", + "weight": 1.0, + "source": "components_input_required_dialog_input_required_dialog", + "target": "components_input_required_dialog_field_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/input_required_dialog.py", + "source_location": "L24", + "weight": 1.0, + "source": "components_input_required_dialog_rationale_24", + "target": "components_input_required_dialog_field_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/input_required_dialog.py", + "source_location": "L66", + "weight": 1.0, + "source": "components_input_required_dialog_input_required_dialog", + "target": "components_input_required_dialog_collect_default_values", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/input_required_dialog.py", + "source_location": "L30", + "weight": 1.0, + "source": "components_input_required_dialog_rationale_30", + "target": "components_input_required_dialog_collect_default_values", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/input_required_dialog.py", + "source_location": "L58", + "weight": 1.0, + "source": "components_input_required_dialog_rationale_58", + "target": "components_input_required_dialog_input_required_dialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/status_bar_segment.py", + "source_location": "L32", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_status_bar_segment_py", + "target": "components_status_bar_segment_segmentspec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/status_bar_segment.py", + "source_location": "L41", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_status_bar_segment_py", + "target": "components_status_bar_segment_segment_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/status_bar_segment.py", + "source_location": "L64", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_status_bar_segment_py", + "target": "components_status_bar_segment_status_bar_segment", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/status_bar_segment.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_status_bar_segment_rationale_1", + "target": "src_exlab_wizard_ui_components_status_bar_segment_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/status_bar_segment.py", + "source_location": "L61", + "weight": 1.0, + "source": "components_status_bar_segment_segment_spec", + "target": "components_status_bar_segment_segmentspec", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/status_bar_segment.py", + "source_location": "L33", + "weight": 1.0, + "source": "components_status_bar_segment_rationale_33", + "target": "components_status_bar_segment_segmentspec", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/status_bar_segment.py", + "source_location": "L72", + "weight": 1.0, + "source": "components_status_bar_segment_status_bar_segment", + "target": "components_status_bar_segment_segment_spec", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/status_bar_segment.py", + "source_location": "L46", + "weight": 1.0, + "source": "components_status_bar_segment_rationale_46", + "target": "components_status_bar_segment_segment_spec", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/status_bar_segment.py", + "source_location": "L70", + "weight": 1.0, + "source": "components_status_bar_segment_rationale_70", + "target": "components_status_bar_segment_status_bar_segment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/sync_status_icon.py", + "source_location": "L107", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_sync_status_icon_py", + "target": "components_sync_status_icon_sync_status_props", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/sync_status_icon.py", + "source_location": "L134", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_sync_status_icon_py", + "target": "components_sync_status_icon_sync_status_icon", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/sync_status_icon.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_sync_status_icon_rationale_1", + "target": "src_exlab_wizard_ui_components_sync_status_icon_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/sync_status_icon.py", + "source_location": "L142", + "weight": 1.0, + "source": "components_sync_status_icon_sync_status_icon", + "target": "components_sync_status_icon_sync_status_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/sync_status_icon.py", + "source_location": "L113", + "weight": 1.0, + "source": "components_sync_status_icon_rationale_113", + "target": "components_sync_status_icon_sync_status_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/sync_status_icon.py", + "source_location": "L140", + "weight": 1.0, + "source": "components_sync_status_icon_rationale_140", + "target": "components_sync_status_icon_sync_status_icon", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree_context_menu.py", + "source_location": "L50", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_context_menu_py", + "target": "components_tree_context_menu_render_equipment_context_menu", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree_context_menu.py", + "source_location": "L79", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_tree_context_menu_py", + "target": "components_tree_context_menu_render_run_context_menu", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree_context_menu.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_tree_context_menu_rationale_1", + "target": "src_exlab_wizard_ui_components_tree_context_menu_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree_context_menu.py", + "source_location": "L55", + "weight": 1.0, + "source": "components_tree_context_menu_rationale_55", + "target": "components_tree_context_menu_render_equipment_context_menu", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/tree_context_menu.py", + "source_location": "L84", + "weight": 1.0, + "source": "components_tree_context_menu_rationale_84", + "target": "components_tree_context_menu_render_run_context_menu", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_init_rationale_1", + "target": "src_exlab_wizard_ui_components_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L34", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_operations_modal_py", + "target": "components_operations_modal_operationrow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L46", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_operations_modal_py", + "target": "components_operations_modal_from_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L80", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_operations_modal_py", + "target": "components_operations_modal_operation_columns", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L93", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_operations_modal_py", + "target": "components_operations_modal_sort_rows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L107", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_operations_modal_py", + "target": "components_operations_modal_state_glyph", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L113", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_operations_modal_py", + "target": "components_operations_modal_operations_modal", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_operations_modal_rationale_1", + "target": "src_exlab_wizard_ui_components_operations_modal_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L35", + "weight": 1.0, + "source": "components_operations_modal_rationale_35", + "target": "components_operations_modal_operationrow", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L72", + "weight": 1.0, + "source": "components_operations_modal_from_session", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L74", + "weight": 1.0, + "source": "components_operations_modal_from_session", + "target": "controller_session_store_project_identifier" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L124", + "weight": 1.0, + "source": "components_operations_modal_operations_modal", + "target": "components_operations_modal_operation_columns", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L81", + "weight": 1.0, + "source": "components_operations_modal_rationale_81", + "target": "components_operations_modal_operation_columns", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L122", + "weight": 1.0, + "source": "components_operations_modal_operations_modal", + "target": "components_operations_modal_sort_rows", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L94", + "weight": 1.0, + "source": "components_operations_modal_rationale_94", + "target": "components_operations_modal_sort_rows", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L158", + "weight": 1.0, + "source": "components_operations_modal_operations_modal", + "target": "components_operations_modal_state_glyph", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L108", + "weight": 1.0, + "source": "components_operations_modal_rationale_108", + "target": "components_operations_modal_state_glyph", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/operations_modal.py", + "source_location": "L120", + "weight": 1.0, + "source": "components_operations_modal_rationale_120", + "target": "components_operations_modal_operations_modal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L28", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_credential_field_py", + "target": "components_credential_field_credentialstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L41", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_credential_field_py", + "target": "components_credential_field_begin_edit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L54", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_credential_field_py", + "target": "components_credential_field_cancel_edit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L60", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_credential_field_py", + "target": "components_credential_field_commit_edit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L74", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_credential_field_py", + "target": "components_credential_field_clear_credential", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L81", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_credential_field_py", + "target": "components_credential_field_credential_props", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L113", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_credential_field_py", + "target": "components_credential_field_credential_field", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_credential_field_rationale_1", + "target": "src_exlab_wizard_ui_components_credential_field_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L50", + "weight": 1.0, + "source": "components_credential_field_begin_edit", + "target": "components_credential_field_credentialstate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L57", + "weight": 1.0, + "source": "components_credential_field_cancel_edit", + "target": "components_credential_field_credentialstate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L70", + "weight": 1.0, + "source": "components_credential_field_commit_edit", + "target": "components_credential_field_credentialstate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L78", + "weight": 1.0, + "source": "components_credential_field_clear_credential", + "target": "components_credential_field_credentialstate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L139", + "weight": 1.0, + "source": "components_credential_field_credential_field", + "target": "components_credential_field_credentialstate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L29", + "weight": 1.0, + "source": "components_credential_field_rationale_29", + "target": "components_credential_field_credentialstate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L42", + "weight": 1.0, + "source": "components_credential_field_rationale_42", + "target": "components_credential_field_begin_edit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L55", + "weight": 1.0, + "source": "components_credential_field_rationale_55", + "target": "components_credential_field_cancel_edit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L61", + "weight": 1.0, + "source": "components_credential_field_rationale_61", + "target": "components_credential_field_commit_edit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L75", + "weight": 1.0, + "source": "components_credential_field_rationale_75", + "target": "components_credential_field_clear_credential", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L140", + "weight": 1.0, + "source": "components_credential_field_credential_field", + "target": "components_credential_field_credential_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L82", + "weight": 1.0, + "source": "components_credential_field_rationale_82", + "target": "components_credential_field_credential_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/credential_field.py", + "source_location": "L121", + "weight": 1.0, + "source": "components_credential_field_rationale_121", + "target": "components_credential_field_credential_field", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/session_progress.py", + "source_location": "L46", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_session_progress_py", + "target": "components_session_progress_phaserow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/session_progress.py", + "source_location": "L56", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_session_progress_py", + "target": "components_session_progress_compute_phase_rows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/session_progress.py", + "source_location": "L93", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_session_progress_py", + "target": "components_session_progress_session_progress", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/session_progress.py", + "source_location": "L171", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_session_progress_py", + "target": "components_session_progress_sessionprogressstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/session_progress.py", + "source_location": "L186", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_session_progress_py", + "target": "components_session_progress_apply_frame", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/session_progress.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_session_progress_rationale_1", + "target": "src_exlab_wizard_ui_components_session_progress_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/session_progress.py", + "source_location": "L82", + "weight": 1.0, + "source": "components_session_progress_compute_phase_rows", + "target": "components_session_progress_phaserow", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/session_progress.py", + "source_location": "L47", + "weight": 1.0, + "source": "components_session_progress_rationale_47", + "target": "components_session_progress_phaserow", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/session_progress.py", + "source_location": "L108", + "weight": 1.0, + "source": "components_session_progress_session_progress", + "target": "components_session_progress_compute_phase_rows", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/session_progress.py", + "source_location": "L61", + "weight": 1.0, + "source": "components_session_progress_rationale_61", + "target": "components_session_progress_compute_phase_rows", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/session_progress.py", + "source_location": "L101", + "weight": 1.0, + "source": "components_session_progress_rationale_101", + "target": "components_session_progress_session_progress", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/session_progress.py", + "source_location": "L172", + "weight": 1.0, + "source": "components_session_progress_rationale_172", + "target": "components_session_progress_sessionprogressstate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/session_progress.py", + "source_location": "L187", + "weight": 1.0, + "source": "components_session_progress_rationale_187", + "target": "components_session_progress_apply_frame", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L23", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_validation_summary_py", + "target": "components_validation_summary_findingexcerpt", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L31", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_validation_summary_py", + "target": "components_validation_summary_validationsummary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L43", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_validation_summary_py", + "target": "components_validation_summary_header_line", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L61", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_validation_summary_py", + "target": "components_validation_summary_excerpt_line", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L67", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_validation_summary_py", + "target": "components_validation_summary_overflow_line", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L82", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_validation_summary_py", + "target": "components_validation_summary_override_line", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L93", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_validation_summary_py", + "target": "components_validation_summary_validation_summary", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_validation_summary_rationale_1", + "target": "src_exlab_wizard_ui_components_validation_summary_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L24", + "weight": 1.0, + "source": "components_validation_summary_rationale_24", + "target": "components_validation_summary_findingexcerpt", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L32", + "weight": 1.0, + "source": "components_validation_summary_rationale_32", + "target": "components_validation_summary_validationsummary", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L96", + "weight": 1.0, + "source": "components_validation_summary_validation_summary", + "target": "components_validation_summary_header_line", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L44", + "weight": 1.0, + "source": "components_validation_summary_rationale_44", + "target": "components_validation_summary_header_line", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L97", + "weight": 1.0, + "source": "components_validation_summary_validation_summary", + "target": "components_validation_summary_excerpt_line", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L62", + "weight": 1.0, + "source": "components_validation_summary_rationale_62", + "target": "components_validation_summary_excerpt_line", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L98", + "weight": 1.0, + "source": "components_validation_summary_validation_summary", + "target": "components_validation_summary_overflow_line", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L68", + "weight": 1.0, + "source": "components_validation_summary_rationale_68", + "target": "components_validation_summary_overflow_line", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L99", + "weight": 1.0, + "source": "components_validation_summary_validation_summary", + "target": "components_validation_summary_override_line", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L83", + "weight": 1.0, + "source": "components_validation_summary_rationale_83", + "target": "components_validation_summary_override_line", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/validation_summary.py", + "source_location": "L94", + "weight": 1.0, + "source": "components_validation_summary_rationale_94", + "target": "components_validation_summary_validation_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/mode_badge.py", + "source_location": "L17", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_mode_badge_py", + "target": "components_mode_badge_mode_badge_props", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/mode_badge.py", + "source_location": "L52", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_mode_badge_py", + "target": "components_mode_badge_mode_badge", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/mode_badge.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_mode_badge_rationale_1", + "target": "src_exlab_wizard_ui_components_mode_badge_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/mode_badge.py", + "source_location": "L60", + "weight": 1.0, + "source": "components_mode_badge_mode_badge", + "target": "components_mode_badge_mode_badge_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/mode_badge.py", + "source_location": "L18", + "weight": 1.0, + "source": "components_mode_badge_rationale_18", + "target": "components_mode_badge_mode_badge_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/mode_badge.py", + "source_location": "L53", + "weight": 1.0, + "source": "components_mode_badge_rationale_53", + "target": "components_mode_badge_mode_badge", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L23", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_filter_chips_py", + "target": "components_filter_chips_chipdefinition", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L32", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_filter_chips_py", + "target": "components_filter_chips_chipstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L38", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_filter_chips_py", + "target": "components_filter_chips_initial_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L44", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_filter_chips_py", + "target": "components_filter_chips_toggle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L51", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_filter_chips_py", + "target": "components_filter_chips_is_active", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L57", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_filter_chips_py", + "target": "components_filter_chips_list_active", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L63", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_filter_chips_py", + "target": "components_filter_chips_filter_chips", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_filter_chips_rationale_1", + "target": "src_exlab_wizard_ui_components_filter_chips_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L24", + "weight": 1.0, + "source": "components_filter_chips_rationale_24", + "target": "components_filter_chips_chipdefinition", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L41", + "weight": 1.0, + "source": "components_filter_chips_initial_state", + "target": "components_filter_chips_chipstate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L48", + "weight": 1.0, + "source": "components_filter_chips_toggle", + "target": "components_filter_chips_chipstate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L33", + "weight": 1.0, + "source": "components_filter_chips_rationale_33", + "target": "components_filter_chips_chipstate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L74", + "weight": 1.0, + "source": "components_filter_chips_filter_chips", + "target": "components_filter_chips_initial_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L39", + "weight": 1.0, + "source": "components_filter_chips_rationale_39", + "target": "components_filter_chips_initial_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L45", + "weight": 1.0, + "source": "components_filter_chips_rationale_45", + "target": "components_filter_chips_toggle", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L102", + "weight": 1.0, + "source": "components_filter_chips_filter_chips", + "target": "components_filter_chips_is_active", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L52", + "weight": 1.0, + "source": "components_filter_chips_rationale_52", + "target": "components_filter_chips_is_active", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L58", + "weight": 1.0, + "source": "components_filter_chips_rationale_58", + "target": "components_filter_chips_list_active", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/filter_chips.py", + "source_location": "L69", + "weight": 1.0, + "source": "components_filter_chips_rationale_69", + "target": "components_filter_chips_filter_chips", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/banner_stack.py", + "source_location": "L25", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_banner_stack_py", + "target": "components_banner_stack_banner_stack_props", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/banner_stack.py", + "source_location": "L38", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_banner_stack_py", + "target": "components_banner_stack_color_for_severity", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/banner_stack.py", + "source_location": "L50", + "weight": 1.0, + "source": "src_exlab_wizard_ui_components_banner_stack_py", + "target": "components_banner_stack_banner_stack", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/banner_stack.py", + "source_location": "L1", + "weight": 1.0, + "source": "components_banner_stack_rationale_1", + "target": "src_exlab_wizard_ui_components_banner_stack_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/banner_stack.py", + "source_location": "L53", + "weight": 1.0, + "source": "components_banner_stack_banner_stack", + "target": "components_banner_stack_banner_stack_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/banner_stack.py", + "source_location": "L26", + "weight": 1.0, + "source": "components_banner_stack_rationale_26", + "target": "components_banner_stack_banner_stack_props", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/banner_stack.py", + "source_location": "L69", + "weight": 1.0, + "source": "components_banner_stack_banner_stack", + "target": "components_banner_stack_color_for_severity", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/banner_stack.py", + "source_location": "L39", + "weight": 1.0, + "source": "components_banner_stack_rationale_39", + "target": "components_banner_stack_color_for_severity", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/components/banner_stack.py", + "source_location": "L51", + "weight": 1.0, + "source": "components_banner_stack_rationale_51", + "target": "components_banner_stack_banner_stack", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L55", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_run_py", + "target": "pages_wizard_run_runwizardstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L75", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_run_py", + "target": "pages_wizard_run_title_text", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L83", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_run_py", + "target": "pages_wizard_run_primary_button_label", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L89", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_run_py", + "target": "pages_wizard_run_primary_button_color", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L95", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_run_py", + "target": "pages_wizard_run_preview_path_segments", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L122", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_run_py", + "target": "pages_wizard_run_can_advance", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L142", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_run_py", + "target": "pages_wizard_run_render_run_wizard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L294", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_run_py", + "target": "pages_wizard_run_render_run_step_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L347", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_run_py", + "target": "pages_wizard_run_step_helper_text", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L1", + "weight": 1.0, + "source": "pages_wizard_run_rationale_1", + "target": "src_exlab_wizard_ui_pages_wizard_run_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L56", + "weight": 1.0, + "source": "pages_wizard_run_rationale_56", + "target": "pages_wizard_run_runwizardstate", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L30", + "weight": 0.8, + "source": "pages_wizard_run_runwizardstate", + "target": "pages_templates_templatequestion", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L165", + "weight": 1.0, + "source": "pages_wizard_run_render_run_wizard", + "target": "pages_wizard_run_title_text", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L76", + "weight": 1.0, + "source": "pages_wizard_run_rationale_76", + "target": "pages_wizard_run_title_text", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L169", + "weight": 1.0, + "source": "pages_wizard_run_render_run_wizard", + "target": "pages_wizard_run_primary_button_label", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L366", + "weight": 1.0, + "source": "pages_wizard_run_step_helper_text", + "target": "pages_wizard_run_primary_button_label", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L84", + "weight": 1.0, + "source": "pages_wizard_run_rationale_84", + "target": "pages_wizard_run_primary_button_label", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L170", + "weight": 1.0, + "source": "pages_wizard_run_render_run_wizard", + "target": "pages_wizard_run_primary_button_color", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L90", + "weight": 1.0, + "source": "pages_wizard_run_rationale_90", + "target": "pages_wizard_run_primary_button_color", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L96", + "weight": 1.0, + "source": "pages_wizard_run_rationale_96", + "target": "pages_wizard_run_preview_path_segments", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L123", + "weight": 1.0, + "source": "pages_wizard_run_rationale_123", + "target": "pages_wizard_run_can_advance", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L224", + "weight": 1.0, + "source": "pages_wizard_run_render_run_wizard", + "target": "pages_wizard_run_step_helper_text", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L228", + "weight": 1.0, + "source": "pages_wizard_run_render_run_wizard", + "target": "pages_wizard_run_render_run_step_fields", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L151", + "weight": 1.0, + "source": "pages_wizard_run_rationale_151", + "target": "pages_wizard_run_render_run_wizard", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L302", + "weight": 1.0, + "source": "pages_wizard_run_rationale_302", + "target": "pages_wizard_run_render_run_step_fields", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_run.py", + "source_location": "L348", + "weight": 1.0, + "source": "pages_wizard_run_rationale_348", + "target": "pages_wizard_run_step_helper_text", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "pages_init_rationale_1", + "target": "src_exlab_wizard_ui_pages_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L49", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_templates_py", + "target": "pages_templates_templatesummary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L66", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_templates_py", + "target": "pages_templates_templatequestion", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L95", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_templates_py", + "target": "pages_templates_template_questions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L145", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_templates_py", + "target": "pages_templates_list_templates", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L191", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_templates_py", + "target": "pages_templates_create_template", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L244", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_templates_py", + "target": "pages_templates_render_question_field", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L296", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_templates_py", + "target": "pages_templates_render_template_manager", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L1", + "weight": 1.0, + "source": "pages_templates_rationale_1", + "target": "src_exlab_wizard_ui_pages_templates_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L176", + "weight": 1.0, + "source": "pages_templates_list_templates", + "target": "pages_templates_templatesummary", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L50", + "weight": 1.0, + "source": "pages_templates_rationale_50", + "target": "pages_templates_templatesummary", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L122", + "weight": 1.0, + "source": "pages_templates_template_questions", + "target": "pages_templates_templatequestion", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L67", + "weight": 1.0, + "source": "pages_templates_rationale_67", + "target": "pages_templates_templatequestion", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L30", + "weight": 0.8, + "source": "pages_wizard_project_projectwizardstate", + "target": "pages_templates_templatequestion", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L96", + "weight": 1.0, + "source": "pages_templates_rationale_96", + "target": "pages_templates_template_questions", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L150", + "weight": 1.0, + "source": "pages_templates_rationale_150", + "target": "pages_templates_list_templates", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L199", + "weight": 1.0, + "source": "pages_templates_rationale_199", + "target": "pages_templates_create_template", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L250", + "weight": 1.0, + "source": "pages_templates_rationale_250", + "target": "pages_templates_render_question_field", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/templates.py", + "source_location": "L302", + "weight": 1.0, + "source": "pages_templates_rationale_302", + "target": "pages_templates_render_template_manager", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L39", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_problems_py", + "target": "pages_problems_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L54", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_problems_py", + "target": "pages_problems_problemspagestate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L70", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_problems_py", + "target": "pages_problems_severity_chip_definitions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L79", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_problems_py", + "target": "pages_problems_class_chip_definitions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L88", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_problems_py", + "target": "pages_problems_state_chip_definitions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L105", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_problems_py", + "target": "pages_problems_filter_findings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L127", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_problems_py", + "target": "pages_problems_empty_state_text", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L144", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_problems_py", + "target": "pages_problems_validate_override_reason", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L159", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_problems_py", + "target": "pages_problems_near_limit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L166", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_problems_py", + "target": "pages_problems_render_problems_page", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L1", + "weight": 1.0, + "source": "pages_problems_rationale_1", + "target": "src_exlab_wizard_ui_pages_problems_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L40", + "weight": 1.0, + "source": "pages_problems_rationale_40", + "target": "pages_problems_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L183", + "weight": 1.0, + "source": "pages_problems_render_problems_page", + "target": "pages_problems_problemspagestate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L55", + "weight": 1.0, + "source": "pages_problems_rationale_55", + "target": "pages_problems_problemspagestate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L190", + "weight": 1.0, + "source": "pages_problems_render_problems_page", + "target": "pages_problems_severity_chip_definitions", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L71", + "weight": 1.0, + "source": "pages_problems_rationale_71", + "target": "pages_problems_severity_chip_definitions", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L191", + "weight": 1.0, + "source": "pages_problems_render_problems_page", + "target": "pages_problems_class_chip_definitions", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L80", + "weight": 1.0, + "source": "pages_problems_rationale_80", + "target": "pages_problems_class_chip_definitions", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L192", + "weight": 1.0, + "source": "pages_problems_render_problems_page", + "target": "pages_problems_state_chip_definitions", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L89", + "weight": 1.0, + "source": "pages_problems_rationale_89", + "target": "pages_problems_state_chip_definitions", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L184", + "weight": 1.0, + "source": "pages_problems_render_problems_page", + "target": "pages_problems_filter_findings", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L109", + "weight": 1.0, + "source": "pages_problems_rationale_109", + "target": "pages_problems_filter_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L188", + "weight": 1.0, + "source": "pages_problems_render_problems_page", + "target": "pages_problems_empty_state_text", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L132", + "weight": 1.0, + "source": "pages_problems_rationale_132", + "target": "pages_problems_empty_state_text", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L145", + "weight": 1.0, + "source": "pages_problems_rationale_145", + "target": "pages_problems_validate_override_reason", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L160", + "weight": 1.0, + "source": "pages_problems_rationale_160", + "target": "pages_problems_near_limit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/problems.py", + "source_location": "L175", + "weight": 1.0, + "source": "pages_problems_rationale_175", + "target": "pages_problems_render_problems_page", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L49", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_equipment_py", + "target": "pages_wizard_equipment_equipmentwizardstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L84", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_equipment_py", + "target": "pages_wizard_equipment_can_advance", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L119", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_equipment_py", + "target": "pages_wizard_equipment_assemble_equipment_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L149", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_equipment_py", + "target": "pages_wizard_equipment_render_wizard_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L253", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_equipment_py", + "target": "pages_wizard_equipment_maybe_confirm", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L268", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_equipment_py", + "target": "pages_wizard_equipment_render_identity_step", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L286", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_equipment_py", + "target": "pages_wizard_equipment_render_paths_step", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L304", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_equipment_py", + "target": "pages_wizard_equipment_render_sync_mode_step", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L368", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_equipment_py", + "target": "pages_wizard_equipment_render_review_step", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L1", + "weight": 1.0, + "source": "pages_wizard_equipment_rationale_1", + "target": "src_exlab_wizard_ui_pages_wizard_equipment_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L169", + "weight": 1.0, + "source": "pages_wizard_equipment_render_wizard_equipment", + "target": "pages_wizard_equipment_equipmentwizardstate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L50", + "weight": 1.0, + "source": "pages_wizard_equipment_rationale_50", + "target": "pages_wizard_equipment_equipmentwizardstate", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L25", + "weight": 0.8, + "source": "pages_wizard_equipment_equipmentwizardstate", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L85", + "weight": 1.0, + "source": "pages_wizard_equipment_rationale_85", + "target": "pages_wizard_equipment_can_advance", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L260", + "weight": 1.0, + "source": "pages_wizard_equipment_maybe_confirm", + "target": "pages_wizard_equipment_assemble_equipment_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L122", + "weight": 1.0, + "source": "pages_wizard_equipment_rationale_122", + "target": "pages_wizard_equipment_assemble_equipment_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_equipment.py", + "source_location": "L155", + "weight": 1.0, + "source": "pages_wizard_equipment_rationale_155", + "target": "pages_wizard_equipment_render_wizard_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L60", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_password_requiring_nas_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L78", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_settings_sections_for", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L98", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_settingsstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L107", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_first_incomplete_section", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L128", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_save_button_label", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L138", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_section_has_warning", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L144", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_section_is_dirty", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L150", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_build_settings_draft", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L161", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_finalize_settings_draft", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L179", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_lims_credential_initial_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L192", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_render_settings_page", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L391", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_render_chip_editor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L476", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_render_section_body", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L712", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_render_equipment_section", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L839", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_settings_py", + "target": "pages_settings_render_nas_credentials_section", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L1", + "weight": 1.0, + "source": "pages_settings_rationale_1", + "target": "src_exlab_wizard_ui_pages_settings_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L87", + "weight": 1.0, + "source": "pages_settings_settings_sections_for", + "target": "pages_settings_password_requiring_nas_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L863", + "weight": 1.0, + "source": "pages_settings_render_nas_credentials_section", + "target": "pages_settings_password_requiring_nas_equipment", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L61", + "weight": 1.0, + "source": "pages_settings_rationale_61", + "target": "pages_settings_password_requiring_nas_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L74", + "weight": 1.0, + "source": "pages_settings_password_requiring_nas_equipment", + "target": "config_models_transport_requires_keyring_password" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L261", + "weight": 1.0, + "source": "pages_settings_render_settings_page", + "target": "pages_settings_settings_sections_for", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L79", + "weight": 1.0, + "source": "pages_settings_rationale_79", + "target": "pages_settings_settings_sections_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L240", + "weight": 1.0, + "source": "pages_settings_render_settings_page", + "target": "pages_settings_settingsstate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L99", + "weight": 1.0, + "source": "pages_settings_rationale_99", + "target": "pages_settings_settingsstate", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L15", + "weight": 0.8, + "source": "pages_settings_settingsstate", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L245", + "weight": 1.0, + "source": "pages_settings_render_settings_page", + "target": "pages_settings_first_incomplete_section", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L108", + "weight": 1.0, + "source": "pages_settings_rationale_108", + "target": "pages_settings_first_incomplete_section", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L265", + "weight": 1.0, + "source": "pages_settings_render_settings_page", + "target": "pages_settings_save_button_label", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L129", + "weight": 1.0, + "source": "pages_settings_rationale_129", + "target": "pages_settings_save_button_label", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L267", + "weight": 1.0, + "source": "pages_settings_render_settings_page", + "target": "pages_settings_section_has_warning", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L139", + "weight": 1.0, + "source": "pages_settings_rationale_139", + "target": "pages_settings_section_has_warning", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L334", + "weight": 1.0, + "source": "pages_settings_render_settings_page", + "target": "pages_settings_section_is_dirty", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L145", + "weight": 1.0, + "source": "pages_settings_rationale_145", + "target": "pages_settings_section_is_dirty", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L257", + "weight": 1.0, + "source": "pages_settings_render_settings_page", + "target": "pages_settings_build_settings_draft", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L151", + "weight": 1.0, + "source": "pages_settings_rationale_151", + "target": "pages_settings_build_settings_draft", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L162", + "weight": 1.0, + "source": "pages_settings_rationale_162", + "target": "pages_settings_finalize_settings_draft", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L543", + "weight": 1.0, + "source": "pages_settings_render_section_body", + "target": "pages_settings_lims_credential_initial_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L890", + "weight": 1.0, + "source": "pages_settings_render_nas_credentials_section", + "target": "pages_settings_lims_credential_initial_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L180", + "weight": 1.0, + "source": "pages_settings_rationale_180", + "target": "pages_settings_lims_credential_initial_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L343", + "weight": 1.0, + "source": "pages_settings_render_settings_page", + "target": "pages_settings_render_section_body", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L211", + "weight": 1.0, + "source": "pages_settings_rationale_211", + "target": "pages_settings_render_settings_page", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L584", + "weight": 1.0, + "source": "pages_settings_render_section_body", + "target": "pages_settings_render_chip_editor", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L401", + "weight": 1.0, + "source": "pages_settings_rationale_401", + "target": "pages_settings_render_chip_editor", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L554", + "weight": 1.0, + "source": "pages_settings_render_section_body", + "target": "pages_settings_render_equipment_section", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L556", + "weight": 1.0, + "source": "pages_settings_render_section_body", + "target": "pages_settings_render_nas_credentials_section", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L492", + "weight": 1.0, + "source": "pages_settings_rationale_492", + "target": "pages_settings_render_section_body", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L713", + "weight": 1.0, + "source": "pages_settings_rationale_713", + "target": "pages_settings_render_equipment_section", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/settings.py", + "source_location": "L847", + "weight": 1.0, + "source": "pages_settings_rationale_847", + "target": "pages_settings_render_nas_credentials_section", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/welcome.py", + "source_location": "L40", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_welcome_py", + "target": "pages_welcome_welcomecardspec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/welcome.py", + "source_location": "L53", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_welcome_py", + "target": "pages_welcome_welcome_card_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/welcome.py", + "source_location": "L68", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_welcome_py", + "target": "pages_welcome_render_welcome_page", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/welcome.py", + "source_location": "L1", + "weight": 1.0, + "source": "pages_welcome_rationale_1", + "target": "src_exlab_wizard_ui_pages_welcome_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/welcome.py", + "source_location": "L56", + "weight": 1.0, + "source": "pages_welcome_welcome_card_spec", + "target": "pages_welcome_welcomecardspec", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/welcome.py", + "source_location": "L41", + "weight": 1.0, + "source": "pages_welcome_rationale_41", + "target": "pages_welcome_welcomecardspec", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/welcome.py", + "source_location": "L80", + "weight": 1.0, + "source": "pages_welcome_render_welcome_page", + "target": "pages_welcome_welcome_card_spec", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/welcome.py", + "source_location": "L54", + "weight": 1.0, + "source": "pages_welcome_rationale_54", + "target": "pages_welcome_welcome_card_spec", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/welcome.py", + "source_location": "L73", + "weight": 1.0, + "source": "pages_welcome_rationale_73", + "target": "pages_welcome_render_welcome_page", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L32", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_main_py", + "target": "pages_main_mainpagestate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L75", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_main_py", + "target": "pages_main_default_chips", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L85", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_main_py", + "target": "pages_main_chip_state_to_tree_filters", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L96", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_main_py", + "target": "pages_main_problems_badge_text", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L108", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_main_py", + "target": "pages_main_setup_incomplete_banner_props", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L135", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_main_py", + "target": "pages_main_render_file_explorer_page", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L421", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_main_py", + "target": "pages_main_render_centre_file_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L453", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_main_py", + "target": "pages_main_render_right_pane", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L1", + "weight": 1.0, + "source": "pages_main_rationale_1", + "target": "src_exlab_wizard_ui_pages_main_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L174", + "weight": 1.0, + "source": "pages_main_render_file_explorer_page", + "target": "pages_main_mainpagestate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L33", + "weight": 1.0, + "source": "pages_main_rationale_33", + "target": "pages_main_mainpagestate", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L26", + "weight": 0.8, + "source": "pages_main_mainpagestate", + "target": "pages_staging_stagingdockstate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L266", + "weight": 1.0, + "source": "pages_main_render_file_explorer_page", + "target": "pages_main_default_chips", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L76", + "weight": 1.0, + "source": "pages_main_rationale_76", + "target": "pages_main_default_chips", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L269", + "weight": 1.0, + "source": "pages_main_render_file_explorer_page", + "target": "pages_main_chip_state_to_tree_filters", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L86", + "weight": 1.0, + "source": "pages_main_rationale_86", + "target": "pages_main_chip_state_to_tree_filters", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L473", + "weight": 1.0, + "source": "pages_main_render_right_pane", + "target": "pages_main_problems_badge_text", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L97", + "weight": 1.0, + "source": "pages_main_rationale_97", + "target": "pages_main_problems_badge_text", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L243", + "weight": 1.0, + "source": "pages_main_render_file_explorer_page", + "target": "pages_main_setup_incomplete_banner_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L109", + "weight": 1.0, + "source": "pages_main_rationale_109", + "target": "pages_main_setup_incomplete_banner_props", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L299", + "weight": 1.0, + "source": "pages_main_render_file_explorer_page", + "target": "pages_main_render_centre_file_list", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L369", + "weight": 1.0, + "source": "pages_main_render_file_explorer_page", + "target": "pages_main_render_right_pane", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L157", + "weight": 1.0, + "source": "pages_main_rationale_157", + "target": "pages_main_render_file_explorer_page", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L427", + "weight": 1.0, + "source": "pages_main_rationale_427", + "target": "pages_main_render_centre_file_list", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/main.py", + "source_location": "L459", + "weight": 1.0, + "source": "pages_main_rationale_459", + "target": "pages_main_render_right_pane", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L86", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_staging_py", + "target": "pages_staging_stagingdockstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L106", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_staging_py", + "target": "pages_staging_format_bytes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L126", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_staging_py", + "target": "pages_staging_format_elapsed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L142", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_staging_py", + "target": "pages_staging_state_pill_props", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L158", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_staging_py", + "target": "pages_staging_row_props", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L177", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_staging_py", + "target": "pages_staging_run_label", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L189", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_staging_py", + "target": "pages_staging_render_staging_dock", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L309", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_staging_py", + "target": "pages_staging_invoke", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L1", + "weight": 1.0, + "source": "pages_staging_rationale_1", + "target": "src_exlab_wizard_ui_pages_staging_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L87", + "weight": 1.0, + "source": "pages_staging_rationale_87", + "target": "pages_staging_stagingdockstate", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L34", + "weight": 0.8, + "source": "pages_staging_stagingdockstate", + "target": "orchestrator_staging_query_stagedrunsummary", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L171", + "weight": 1.0, + "source": "pages_staging_row_props", + "target": "pages_staging_format_bytes", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L107", + "weight": 1.0, + "source": "pages_staging_rationale_107", + "target": "pages_staging_format_bytes", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L172", + "weight": 1.0, + "source": "pages_staging_row_props", + "target": "pages_staging_format_elapsed", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L127", + "weight": 1.0, + "source": "pages_staging_rationale_127", + "target": "pages_staging_format_elapsed", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L166", + "weight": 1.0, + "source": "pages_staging_row_props", + "target": "pages_staging_state_pill_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L143", + "weight": 1.0, + "source": "pages_staging_rationale_143", + "target": "pages_staging_state_pill_props", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L168", + "weight": 1.0, + "source": "pages_staging_row_props", + "target": "pages_staging_run_label", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L203", + "weight": 1.0, + "source": "pages_staging_render_staging_dock", + "target": "pages_staging_row_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L159", + "weight": 1.0, + "source": "pages_staging_rationale_159", + "target": "pages_staging_row_props", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L178", + "weight": 1.0, + "source": "pages_staging_rationale_178", + "target": "pages_staging_run_label", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L228", + "weight": 1.0, + "source": "pages_staging_render_staging_dock", + "target": "pages_staging_invoke", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L190", + "weight": 1.0, + "source": "pages_staging_rationale_190", + "target": "pages_staging_render_staging_dock", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/staging.py", + "source_location": "L310", + "weight": 1.0, + "source": "pages_staging_rationale_310", + "target": "pages_staging_invoke", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L61", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_project_py", + "target": "pages_wizard_project_projectwizardstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L84", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_project_py", + "target": "pages_wizard_project_can_advance", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L111", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_project_py", + "target": "pages_wizard_project_preview_step_clear", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L121", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_project_py", + "target": "pages_wizard_project_disk_space_pre_flight_message", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L131", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_project_py", + "target": "pages_wizard_project_render_project_wizard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L285", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_project_py", + "target": "pages_wizard_project_render_project_step_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L396", + "weight": 1.0, + "source": "src_exlab_wizard_ui_pages_wizard_project_py", + "target": "pages_wizard_project_step_helper_text", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L1", + "weight": 1.0, + "source": "pages_wizard_project_rationale_1", + "target": "src_exlab_wizard_ui_pages_wizard_project_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L156", + "weight": 1.0, + "source": "pages_wizard_project_render_project_wizard", + "target": "pages_wizard_project_projectwizardstate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L62", + "weight": 1.0, + "source": "pages_wizard_project_rationale_62", + "target": "pages_wizard_project_projectwizardstate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L107", + "weight": 1.0, + "source": "pages_wizard_project_can_advance", + "target": "pages_wizard_project_preview_step_clear", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L164", + "weight": 1.0, + "source": "pages_wizard_project_render_project_wizard", + "target": "pages_wizard_project_can_advance", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L85", + "weight": 1.0, + "source": "pages_wizard_project_rationale_85", + "target": "pages_wizard_project_can_advance", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L112", + "weight": 1.0, + "source": "pages_wizard_project_rationale_112", + "target": "pages_wizard_project_preview_step_clear", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L122", + "weight": 1.0, + "source": "pages_wizard_project_rationale_122", + "target": "pages_wizard_project_disk_space_pre_flight_message", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L218", + "weight": 1.0, + "source": "pages_wizard_project_render_project_wizard", + "target": "pages_wizard_project_step_helper_text", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L222", + "weight": 1.0, + "source": "pages_wizard_project_render_project_wizard", + "target": "pages_wizard_project_render_project_step_fields", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L141", + "weight": 1.0, + "source": "pages_wizard_project_rationale_141", + "target": "pages_wizard_project_render_project_wizard", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L294", + "weight": 1.0, + "source": "pages_wizard_project_rationale_294", + "target": "pages_wizard_project_render_project_step_fields", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/pages/wizard_project.py", + "source_location": "L397", + "weight": 1.0, + "source": "pages_wizard_project_rationale_397", + "target": "pages_wizard_project_step_helper_text", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/refresh_coordinator.py", + "source_location": "L21", + "weight": 1.0, + "source": "src_exlab_wizard_ui_client_refresh_coordinator_py", + "target": "client_refresh_coordinator_refreshcoordinator", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/refresh_coordinator.py", + "source_location": "L1", + "weight": 1.0, + "source": "client_refresh_coordinator_rationale_1", + "target": "src_exlab_wizard_ui_client_refresh_coordinator_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/refresh_coordinator.py", + "source_location": "L27", + "weight": 1.0, + "source": "client_refresh_coordinator_refreshcoordinator", + "target": "client_refresh_coordinator_refreshcoordinator_record_tree_refresh", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/refresh_coordinator.py", + "source_location": "L30", + "weight": 1.0, + "source": "client_refresh_coordinator_refreshcoordinator", + "target": "client_refresh_coordinator_refreshcoordinator_record_folder_refresh", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/refresh_coordinator.py", + "source_location": "L33", + "weight": 1.0, + "source": "client_refresh_coordinator_refreshcoordinator", + "target": "client_refresh_coordinator_refreshcoordinator_should_skip_folder", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/refresh_coordinator.py", + "source_location": "L37", + "weight": 1.0, + "source": "client_refresh_coordinator_refreshcoordinator", + "target": "client_refresh_coordinator_refreshcoordinator_should_skip_tree", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/refresh_coordinator.py", + "source_location": "L22", + "weight": 1.0, + "source": "client_refresh_coordinator_rationale_22", + "target": "client_refresh_coordinator_refreshcoordinator", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/refresh_coordinator.py", + "source_location": "L34", + "weight": 1.0, + "source": "client_refresh_coordinator_rationale_34", + "target": "client_refresh_coordinator_refreshcoordinator_should_skip_folder", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/refresh_coordinator.py", + "source_location": "L38", + "weight": 1.0, + "source": "client_refresh_coordinator_rationale_38", + "target": "client_refresh_coordinator_refreshcoordinator_should_skip_tree", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "client_init_rationale_1", + "target": "src_exlab_wizard_ui_client_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L25", + "weight": 1.0, + "source": "src_exlab_wizard_ui_client_folder_feed_py", + "target": "client_folder_feed_folderfeedstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L33", + "weight": 1.0, + "source": "src_exlab_wizard_ui_client_folder_feed_py", + "target": "client_folder_feed_folderfeed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L50", + "weight": 1.0, + "source": "src_exlab_wizard_ui_client_folder_feed_py", + "target": "client_folder_feed_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L1", + "weight": 1.0, + "source": "client_folder_feed_rationale_1", + "target": "src_exlab_wizard_ui_client_folder_feed_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L46", + "weight": 1.0, + "source": "client_folder_feed_folderfeed_init", + "target": "client_folder_feed_folderfeedstate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L26", + "weight": 1.0, + "source": "client_folder_feed_rationale_26", + "target": "client_folder_feed_folderfeedstate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L36", + "weight": 1.0, + "source": "client_folder_feed_folderfeed", + "target": "client_folder_feed_folderfeed_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L53", + "weight": 1.0, + "source": "client_folder_feed_folderfeed", + "target": "client_folder_feed_folderfeed_start", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L64", + "weight": 1.0, + "source": "client_folder_feed_folderfeed", + "target": "client_folder_feed_folderfeed_stop", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L74", + "weight": 1.0, + "source": "client_folder_feed_folderfeed", + "target": "client_folder_feed_folderfeed_pause", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L78", + "weight": 1.0, + "source": "client_folder_feed_folderfeed", + "target": "client_folder_feed_folderfeed_resume", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L82", + "weight": 1.0, + "source": "client_folder_feed_folderfeed", + "target": "client_folder_feed_folderfeed_loop", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L34", + "weight": 1.0, + "source": "client_folder_feed_rationale_34", + "target": "client_folder_feed_folderfeed", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L59", + "weight": 1.0, + "source": "client_folder_feed_folderfeed_start", + "target": "client_folder_feed_folderfeed_stop", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L62", + "weight": 1.0, + "source": "client_folder_feed_folderfeed_start", + "target": "client_folder_feed_folderfeed_loop", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L54", + "weight": 1.0, + "source": "client_folder_feed_rationale_54", + "target": "client_folder_feed_folderfeed_start", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L75", + "weight": 1.0, + "source": "client_folder_feed_rationale_75", + "target": "client_folder_feed_folderfeed_pause", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/ui/client/folder_feed.py", + "source_location": "L79", + "weight": 1.0, + "source": "client_folder_feed_rationale_79", + "target": "client_folder_feed_folderfeed_resume", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L62", + "weight": 1.0, + "source": "src_exlab_wizard_lims_keyring_store_py", + "target": "lims_keyring_store_keyringstore", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L258", + "weight": 1.0, + "source": "src_exlab_wizard_lims_keyring_store_py", + "target": "lims_keyring_store_decode_envelope", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L1", + "weight": 1.0, + "source": "lims_keyring_store_rationale_1", + "target": "src_exlab_wizard_lims_keyring_store_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L77", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore", + "target": "lims_keyring_store_keyringstore_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L91", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore", + "target": "lims_keyring_store_keyringstore_is_keyring_available", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L109", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore", + "target": "lims_keyring_store_keyringstore_get_password", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L130", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore", + "target": "lims_keyring_store_keyringstore_set_password", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L144", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore", + "target": "lims_keyring_store_keyringstore_delete_password", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L165", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore", + "target": "lims_keyring_store_keyringstore_fallback_get", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L171", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore", + "target": "lims_keyring_store_keyringstore_fallback_set", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L176", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore", + "target": "lims_keyring_store_keyringstore_fallback_delete", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L184", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore", + "target": "lims_keyring_store_keyringstore_passphrase", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L197", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore", + "target": "lims_keyring_store_keyringstore_derive_key", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L209", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore", + "target": "lims_keyring_store_keyringstore_load_fallback", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L230", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore", + "target": "lims_keyring_store_keyringstore_save_fallback", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L244", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore", + "target": "lims_keyring_store_keyringstore_existing_salt", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L63", + "weight": 1.0, + "source": "lims_keyring_store_rationale_63", + "target": "lims_keyring_store_keyringstore", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L573", + "weight": 1.0, + "source": "tray_dependencies_build_keyring_store", + "target": "lims_keyring_store_keyringstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L101", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_is_keyring_available", + "target": "lims_keyring_store_keyringstore_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L102", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_is_keyring_available", + "target": "lims_keyring_store_keyringstore_delete_password", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L92", + "weight": 1.0, + "source": "lims_keyring_store_rationale_92", + "target": "lims_keyring_store_keyringstore_is_keyring_available", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L120", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_get_password", + "target": "lims_keyring_store_keyringstore_fallback_get", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L110", + "weight": 1.0, + "source": "lims_keyring_store_rationale_110", + "target": "lims_keyring_store_keyringstore_get_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L142", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_set_password", + "target": "lims_keyring_store_keyringstore_fallback_set", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L131", + "weight": 1.0, + "source": "lims_keyring_store_rationale_131", + "target": "lims_keyring_store_keyringstore_set_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L159", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_delete_password", + "target": "lims_keyring_store_keyringstore_fallback_delete", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L145", + "weight": 1.0, + "source": "lims_keyring_store_rationale_145", + "target": "lims_keyring_store_keyringstore_delete_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L168", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_fallback_get", + "target": "lims_keyring_store_keyringstore_load_fallback", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L172", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_fallback_set", + "target": "lims_keyring_store_keyringstore_load_fallback", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L174", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_fallback_set", + "target": "lims_keyring_store_keyringstore_save_fallback", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L179", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_fallback_delete", + "target": "lims_keyring_store_keyringstore_load_fallback", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L182", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_fallback_delete", + "target": "lims_keyring_store_keyringstore_save_fallback", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L218", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_load_fallback", + "target": "lims_keyring_store_keyringstore_passphrase", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L233", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_save_fallback", + "target": "lims_keyring_store_keyringstore_passphrase", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L218", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_load_fallback", + "target": "lims_keyring_store_keyringstore_derive_key", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L233", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_save_fallback", + "target": "lims_keyring_store_keyringstore_derive_key", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L215", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_load_fallback", + "target": "lims_keyring_store_decode_envelope", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L232", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_save_fallback", + "target": "lims_keyring_store_keyringstore_existing_salt", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L242", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_save_fallback", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/keyring_store.py", + "source_location": "L252", + "weight": 1.0, + "source": "lims_keyring_store_keyringstore_existing_salt", + "target": "lims_keyring_store_decode_envelope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L42", + "weight": 1.0, + "source": "src_exlab_wizard_lims_client_py", + "target": "lims_client_limsclient", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L71", + "weight": 1.0, + "source": "src_exlab_wizard_lims_client_py", + "target": "lims_client_endpoint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L76", + "weight": 1.0, + "source": "src_exlab_wizard_lims_client_py", + "target": "lims_client_email", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L190", + "weight": 1.0, + "source": "src_exlab_wizard_lims_client_py", + "target": "lims_client_project_from_row", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L1", + "weight": 1.0, + "source": "lims_client_rationale_1", + "target": "src_exlab_wizard_lims_client_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L55", + "weight": 1.0, + "source": "lims_client_limsclient", + "target": "lims_client_limsclient_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L80", + "weight": 1.0, + "source": "lims_client_limsclient", + "target": "lims_client_limsclient_login", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L105", + "weight": 1.0, + "source": "lims_client_limsclient", + "target": "lims_client_limsclient_list_projects", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L125", + "weight": 1.0, + "source": "lims_client_limsclient", + "target": "lims_client_limsclient_get_project", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L139", + "weight": 1.0, + "source": "lims_client_limsclient", + "target": "lims_client_limsclient_get_me", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L144", + "weight": 1.0, + "source": "lims_client_limsclient", + "target": "lims_client_limsclient_health_check", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L167", + "weight": 1.0, + "source": "lims_client_limsclient", + "target": "lims_client_limsclient_close", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L175", + "weight": 1.0, + "source": "lims_client_limsclient", + "target": "lims_client_limsclient_get_json", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L180", + "weight": 1.0, + "source": "lims_client_limsclient", + "target": "lims_client_limsclient_request_with_relogin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L43", + "weight": 1.0, + "source": "lims_client_rationale_43", + "target": "lims_client_limsclient", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L28", + "weight": 0.8, + "source": "lims_client_limsclient", + "target": "lims_schemas_healthstatus", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L28", + "weight": 0.8, + "source": "lims_client_limsclient", + "target": "lims_schemas_limsproject", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L28", + "weight": 0.8, + "source": "lims_client_limsclient", + "target": "lims_schemas_limsuser", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L617", + "weight": 1.0, + "source": "tray_dependencies_build_lims_client", + "target": "lims_client_limsclient" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L186", + "weight": 1.0, + "source": "lims_client_limsclient_request_with_relogin", + "target": "lims_client_limsclient_login", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L81", + "weight": 1.0, + "source": "lims_client_rationale_81", + "target": "lims_client_limsclient_login", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L117", + "weight": 1.0, + "source": "lims_client_limsclient_list_projects", + "target": "lims_client_limsclient_get_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L119", + "weight": 1.0, + "source": "lims_client_limsclient_list_projects", + "target": "lims_client_project_from_row", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L106", + "weight": 1.0, + "source": "lims_client_rationale_106", + "target": "lims_client_limsclient_list_projects", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L133", + "weight": 1.0, + "source": "lims_client_limsclient_get_project", + "target": "lims_client_limsclient_request_with_relogin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L137", + "weight": 1.0, + "source": "lims_client_limsclient_get_project", + "target": "lims_client_project_from_row", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L126", + "weight": 1.0, + "source": "lims_client_rationale_126", + "target": "lims_client_limsclient_get_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L141", + "weight": 1.0, + "source": "lims_client_limsclient_get_me", + "target": "lims_client_limsclient_get_json", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L140", + "weight": 1.0, + "source": "lims_client_rationale_140", + "target": "lims_client_limsclient_get_me", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L154", + "weight": 1.0, + "source": "lims_client_limsclient_health_check", + "target": "lims_client_limsclient_request_with_relogin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L145", + "weight": 1.0, + "source": "lims_client_rationale_145", + "target": "lims_client_limsclient_health_check", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L157", + "weight": 1.0, + "source": "lims_client_limsclient_health_check", + "target": "lims_schemas_healthstatus" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L168", + "weight": 1.0, + "source": "lims_client_rationale_168", + "target": "lims_client_limsclient_close", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L176", + "weight": 1.0, + "source": "lims_client_limsclient_get_json", + "target": "lims_client_limsclient_request_with_relogin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L181", + "weight": 1.0, + "source": "lims_client_rationale_181", + "target": "lims_client_limsclient_request_with_relogin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L196", + "weight": 1.0, + "source": "lims_client_project_from_row", + "target": "lims_schemas_limsproject" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/client.py", + "source_location": "L205", + "weight": 1.0, + "source": "lims_client_project_from_row", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L102", + "weight": 1.0, + "source": "src_exlab_wizard_lims_cache_py", + "target": "lims_cache_limscache", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L209", + "weight": 1.0, + "source": "src_exlab_wizard_lims_cache_py", + "target": "lims_cache_row_to_project", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L1", + "weight": 1.0, + "source": "lims_cache_rationale_1", + "target": "src_exlab_wizard_lims_cache_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L115", + "weight": 1.0, + "source": "lims_cache_limscache", + "target": "lims_cache_limscache_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L123", + "weight": 1.0, + "source": "lims_cache_limscache", + "target": "lims_cache_limscache_close", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L129", + "weight": 1.0, + "source": "lims_cache_limscache", + "target": "lims_cache_limscache_upsert_many", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L156", + "weight": 1.0, + "source": "lims_cache_limscache", + "target": "lims_cache_limscache_list_projects", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L171", + "weight": 1.0, + "source": "lims_cache_limscache", + "target": "lims_cache_limscache_get_project", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L180", + "weight": 1.0, + "source": "lims_cache_limscache", + "target": "lims_cache_limscache_is_fresh", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L202", + "weight": 1.0, + "source": "lims_cache_limscache", + "target": "lims_cache_limscache_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L103", + "weight": 1.0, + "source": "lims_cache_rationale_103", + "target": "lims_cache_limscache", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L35", + "weight": 0.8, + "source": "lims_cache_limscache", + "target": "lims_schemas_limsproject", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L116", + "weight": 1.0, + "source": "lims_cache_rationale_116", + "target": "lims_cache_limscache_init", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L124", + "weight": 1.0, + "source": "lims_cache_rationale_124", + "target": "lims_cache_limscache_close", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L137", + "weight": 1.0, + "source": "lims_cache_limscache_upsert_many", + "target": "lims_cache_limscache_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L130", + "weight": 1.0, + "source": "lims_cache_rationale_130", + "target": "lims_cache_limscache_upsert_many", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L162", + "weight": 1.0, + "source": "lims_cache_limscache_list_projects", + "target": "lims_cache_limscache_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L165", + "weight": 1.0, + "source": "lims_cache_limscache_list_projects", + "target": "lims_cache_row_to_project", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L159", + "weight": 1.0, + "source": "lims_cache_rationale_159", + "target": "lims_cache_limscache_list_projects", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L173", + "weight": 1.0, + "source": "lims_cache_limscache_get_project", + "target": "lims_cache_limscache_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L178", + "weight": 1.0, + "source": "lims_cache_limscache_get_project", + "target": "lims_cache_row_to_project", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L172", + "weight": 1.0, + "source": "lims_cache_rationale_172", + "target": "lims_cache_limscache_get_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L185", + "weight": 1.0, + "source": "lims_cache_limscache_is_fresh", + "target": "lims_cache_limscache_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L181", + "weight": 1.0, + "source": "lims_cache_rationale_181", + "target": "lims_cache_limscache_is_fresh", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L191", + "weight": 1.0, + "source": "lims_cache_limscache_is_fresh", + "target": "utils_time_parse_utc_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L195", + "weight": 1.0, + "source": "lims_cache_limscache_is_fresh", + "target": "utils_time_utc_now" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/cache.py", + "source_location": "L222", + "weight": 1.0, + "source": "lims_cache_row_to_project", + "target": "lims_schemas_limsproject" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L36", + "weight": 1.0, + "source": "src_exlab_wizard_lims_schemas_py", + "target": "lims_schemas_limsproject", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L60", + "weight": 1.0, + "source": "src_exlab_wizard_lims_schemas_py", + "target": "lims_schemas_limsuser", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L79", + "weight": 1.0, + "source": "src_exlab_wizard_lims_schemas_py", + "target": "lims_schemas_healthstatus", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L1", + "weight": 1.0, + "source": "lims_schemas_rationale_1", + "target": "src_exlab_wizard_lims_schemas_py", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L36", + "weight": 1.0, + "source": "lims_schemas_limsproject", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L41", + "weight": 1.0, + "source": "lims_schemas_rationale_41", + "target": "lims_schemas_limsproject", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L42", + "weight": 0.8, + "source": "lims_catalogue_offlinecatalogue", + "target": "lims_schemas_limsproject", + "confidence_score": 0.5 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L60", + "weight": 1.0, + "source": "lims_schemas_limsuser", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_schema.py", + "source_location": "L19", + "weight": 1.0, + "source": "cache_sync_state_schema_filesyncrecord", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_schema.py", + "source_location": "L55", + "weight": 1.0, + "source": "cache_sync_state_schema_syncstatejson", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L46", + "weight": 1.0, + "source": "api_events_phaseevent", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L63", + "weight": 1.0, + "source": "api_events_progressevent", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L76", + "weight": 1.0, + "source": "api_events_inputrequiredevent", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L96", + "weight": 1.0, + "source": "api_events_warningevent", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L113", + "weight": 1.0, + "source": "api_events_doneevent", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L129", + "weight": 1.0, + "source": "api_events_failedevent", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L146", + "weight": 1.0, + "source": "api_events_snapshotevent", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L163", + "weight": 1.0, + "source": "api_events_deltaevent", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L82", + "weight": 1.0, + "source": "api_schemas_limsprojectblock", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L102", + "weight": 1.0, + "source": "api_schemas_templateblock", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L118", + "weight": 1.0, + "source": "api_schemas_pluginisolation", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L130", + "weight": 1.0, + "source": "api_schemas_pluginapplied", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L148", + "weight": 1.0, + "source": "api_schemas_pathsblock", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L159", + "weight": 1.0, + "source": "api_schemas_orchestratorblock", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L190", + "weight": 1.0, + "source": "api_schemas_overrideentry", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L212", + "weight": 1.0, + "source": "api_schemas_tombstoneentry", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L271", + "weight": 1.0, + "source": "api_schemas_creationjson", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L309", + "weight": 1.0, + "source": "api_schemas_readmefieldsjson", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L330", + "weight": 1.0, + "source": "api_schemas_equipmentjson", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L351", + "weight": 1.0, + "source": "api_schemas_testrunsjson", + "target": "struct", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L66", + "weight": 1.0, + "source": "lims_schemas_rationale_66", + "target": "lims_schemas_limsuser", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/schemas.py", + "source_location": "L80", + "weight": 1.0, + "source": "lims_schemas_rationale_80", + "target": "lims_schemas_healthstatus", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L51", + "weight": 1.0, + "source": "src_exlab_wizard_lims_catalogue_py", + "target": "lims_catalogue_offlinecatalogue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L72", + "weight": 1.0, + "source": "src_exlab_wizard_lims_catalogue_py", + "target": "lims_catalogue_read_catalogue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L135", + "weight": 1.0, + "source": "src_exlab_wizard_lims_catalogue_py", + "target": "lims_catalogue_write_catalogue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L155", + "weight": 1.0, + "source": "src_exlab_wizard_lims_catalogue_py", + "target": "lims_catalogue_project_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L1", + "weight": 1.0, + "source": "lims_catalogue_rationale_1", + "target": "src_exlab_wizard_lims_catalogue_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L126", + "weight": 1.0, + "source": "lims_catalogue_read_catalogue", + "target": "lims_catalogue_offlinecatalogue", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L52", + "weight": 1.0, + "source": "lims_catalogue_rationale_52", + "target": "lims_catalogue_offlinecatalogue", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L73", + "weight": 1.0, + "source": "lims_catalogue_rationale_73", + "target": "lims_catalogue_read_catalogue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L93", + "weight": 1.0, + "source": "lims_catalogue_read_catalogue", + "target": "io_json_files_read_msgspec_json_raw" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L149", + "weight": 1.0, + "source": "lims_catalogue_write_catalogue", + "target": "lims_catalogue_project_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L136", + "weight": 1.0, + "source": "lims_catalogue_rationale_136", + "target": "lims_catalogue_write_catalogue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L152", + "weight": 1.0, + "source": "lims_catalogue_write_catalogue", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/lims/catalogue.py", + "source_location": "L156", + "weight": 1.0, + "source": "lims_catalogue_rationale_156", + "target": "lims_catalogue_project_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L41", + "weight": 1.0, + "source": "src_exlab_wizard_validator_findings_py", + "target": "validator_findings_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L101", + "weight": 1.0, + "source": "src_exlab_wizard_validator_findings_py", + "target": "validator_findings_from_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L1", + "weight": 1.0, + "source": "validator_findings_rationale_1", + "target": "src_exlab_wizard_validator_findings_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L90", + "weight": 1.0, + "source": "validator_findings_finding", + "target": "validator_findings_finding_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L42", + "weight": 1.0, + "source": "validator_findings_rationale_42", + "target": "validator_findings_finding", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L90", + "weight": 0.8, + "source": "validator_engine_creationvalidationinput", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L90", + "weight": 0.8, + "source": "validator_engine_auditscopeequipment", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L90", + "weight": 0.8, + "source": "validator_engine_auditscopeproject", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L90", + "weight": 0.8, + "source": "validator_engine_auditscopeall", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L90", + "weight": 0.8, + "source": "validator_engine_validator", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L117", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L117", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L117", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L117", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L117", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L117", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L117", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L117", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L64", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L64", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "validator_findings_finding", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/findings.py", + "source_location": "L91", + "weight": 1.0, + "source": "validator_findings_rationale_91", + "target": "validator_findings_finding_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L83", + "weight": 1.0, + "source": "src_exlab_wizard_validator_rules_py", + "target": "validator_rules_check_unresolved_placeholder", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L122", + "weight": 1.0, + "source": "src_exlab_wizard_validator_rules_py", + "target": "validator_rules_scan_for_placeholders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L185", + "weight": 1.0, + "source": "src_exlab_wizard_validator_rules_py", + "target": "validator_rules_check_illegal_filesystem_character", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L210", + "weight": 1.0, + "source": "src_exlab_wizard_validator_rules_py", + "target": "validator_rules_scan_for_illegal_chars", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L269", + "weight": 1.0, + "source": "src_exlab_wizard_validator_rules_py", + "target": "validator_rules_check_reserved_filesystem_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L305", + "weight": 1.0, + "source": "src_exlab_wizard_validator_rules_py", + "target": "validator_rules_check_unsafe_project_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L339", + "weight": 1.0, + "source": "src_exlab_wizard_validator_rules_py", + "target": "validator_rules_check_mode_prefix_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L429", + "weight": 1.0, + "source": "src_exlab_wizard_validator_rules_py", + "target": "validator_rules_check_orphan", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L465", + "weight": 1.0, + "source": "src_exlab_wizard_validator_rules_py", + "target": "validator_rules_check_missing_required_field", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L503", + "weight": 1.0, + "source": "src_exlab_wizard_validator_rules_py", + "target": "validator_rules_lookup_field_value", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L520", + "weight": 1.0, + "source": "src_exlab_wizard_validator_rules_py", + "target": "validator_rules_check_malformed_yaml_front_matter", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L1", + "weight": 1.0, + "source": "validator_rules_rationale_1", + "target": "src_exlab_wizard_validator_rules_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L103", + "weight": 1.0, + "source": "validator_rules_check_unresolved_placeholder", + "target": "validator_rules_scan_for_placeholders", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L89", + "weight": 1.0, + "source": "validator_rules_rationale_89", + "target": "validator_rules_check_unresolved_placeholder", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L127", + "weight": 1.0, + "source": "validator_rules_rationale_127", + "target": "validator_rules_scan_for_placeholders", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L202", + "weight": 1.0, + "source": "validator_rules_check_illegal_filesystem_character", + "target": "validator_rules_scan_for_illegal_chars", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L190", + "weight": 1.0, + "source": "validator_rules_rationale_190", + "target": "validator_rules_check_illegal_filesystem_character", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L211", + "weight": 1.0, + "source": "validator_rules_rationale_211", + "target": "validator_rules_scan_for_illegal_chars", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L270", + "weight": 1.0, + "source": "validator_rules_rationale_270", + "target": "validator_rules_check_reserved_filesystem_name", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L306", + "weight": 1.0, + "source": "validator_rules_rationale_306", + "target": "validator_rules_check_unsafe_project_name", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L345", + "weight": 1.0, + "source": "validator_rules_rationale_345", + "target": "validator_rules_check_mode_prefix_mismatch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L430", + "weight": 1.0, + "source": "validator_rules_rationale_430", + "target": "validator_rules_check_orphan", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L487", + "weight": 1.0, + "source": "validator_rules_check_missing_required_field", + "target": "validator_rules_lookup_field_value", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L470", + "weight": 1.0, + "source": "validator_rules_rationale_470", + "target": "validator_rules_check_missing_required_field", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L504", + "weight": 1.0, + "source": "validator_rules_rationale_504", + "target": "validator_rules_lookup_field_value", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/rules.py", + "source_location": "L521", + "weight": 1.0, + "source": "validator_rules_rationale_521", + "target": "validator_rules_check_malformed_yaml_front_matter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L114", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_creationvalidationinput", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L162", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_split_path_segments", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L193", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_auditscopeequipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L206", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_auditscopeproject", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L217", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_auditscopeall", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L236", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_validator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L267", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L398", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_materialise", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L428", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_from_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1041", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_extract_overrides_and_sync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1061", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_materialise_audit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1112", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_tier_rank", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1126", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_finding_sort_key", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1143", + "weight": 1.0, + "source": "src_exlab_wizard_validator_engine_py", + "target": "validator_engine_level_for_orphan", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1", + "weight": 1.0, + "source": "validator_engine_rationale_1", + "target": "src_exlab_wizard_validator_engine_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L115", + "weight": 1.0, + "source": "validator_engine_rationale_115", + "target": "validator_engine_creationvalidationinput", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L63", + "weight": 0.8, + "source": "validator_engine_creationvalidationinput", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L63", + "weight": 0.8, + "source": "validator_engine_creationvalidationinput", + "target": "api_schemas_readmefieldsjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L68", + "weight": 0.8, + "source": "validator_engine_creationvalidationinput", + "target": "config_models_validatorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "validator_engine_creationvalidationinput", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "validator_engine_creationvalidationinput", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "validator_engine_creationvalidationinput", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "validator_engine_creationvalidationinput", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "validator_engine_creationvalidationinput", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "validator_engine_creationvalidationinput", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "validator_engine_creationvalidationinput", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "validator_engine_creationvalidationinput", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1149", + "weight": 1.0, + "source": "controller_creation_creationcontroller_post_validate", + "target": "validator_engine_creationvalidationinput" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L68", + "weight": 1.0, + "source": "sync_pre_sync_gate_is_eligible", + "target": "validator_engine_creationvalidationinput" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L333", + "weight": 1.0, + "source": "validator_engine_validator_validate_creation", + "target": "validator_engine_split_path_segments", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L163", + "weight": 1.0, + "source": "validator_engine_rationale_163", + "target": "validator_engine_split_path_segments", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L193", + "weight": 1.0, + "source": "validator_engine_auditscopeequipment", + "target": "typeddict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L194", + "weight": 1.0, + "source": "validator_engine_rationale_194", + "target": "validator_engine_auditscopeequipment", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L63", + "weight": 0.8, + "source": "validator_engine_auditscopeequipment", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L63", + "weight": 0.8, + "source": "validator_engine_auditscopeequipment", + "target": "api_schemas_readmefieldsjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L68", + "weight": 0.8, + "source": "validator_engine_auditscopeequipment", + "target": "config_models_validatorconfig", + "confidence_score": 0.5 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L206", + "weight": 1.0, + "source": "validator_engine_auditscopeproject", + "target": "typeddict", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L217", + "weight": 1.0, + "source": "validator_engine_auditscopeall", + "target": "typeddict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L207", + "weight": 1.0, + "source": "validator_engine_rationale_207", + "target": "validator_engine_auditscopeproject", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L63", + "weight": 0.8, + "source": "validator_engine_auditscopeproject", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L63", + "weight": 0.8, + "source": "validator_engine_auditscopeproject", + "target": "api_schemas_readmefieldsjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L68", + "weight": 0.8, + "source": "validator_engine_auditscopeproject", + "target": "config_models_validatorconfig", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L218", + "weight": 1.0, + "source": "validator_engine_rationale_218", + "target": "validator_engine_auditscopeall", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L63", + "weight": 0.8, + "source": "validator_engine_auditscopeall", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L63", + "weight": 0.8, + "source": "validator_engine_auditscopeall", + "target": "api_schemas_readmefieldsjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L68", + "weight": 0.8, + "source": "validator_engine_auditscopeall", + "target": "config_models_validatorconfig", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L251", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L275", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_reconfigure", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L303", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_validate_creation", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L451", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_audit", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L482", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_query_problems", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L494", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_resolve_scope_roots", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L513", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_walk_root", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L532", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_walk_dir", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L602", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_classify_level", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L655", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_compute_run_path", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L697", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_apply_directory_rules", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L787", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_extend_findings", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L814", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_apply_missing_required_field_rule", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L862", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_apply_directory_name_rules", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L905", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_apply_file_rules", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L978", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_content_scan_eligible", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L996", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_read_text_for_scan", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1014", + "weight": 1.0, + "source": "validator_engine_validator", + "target": "validator_engine_validator_read_creation_for", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L237", + "weight": 1.0, + "source": "validator_engine_rationale_237", + "target": "validator_engine_validator", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L63", + "weight": 0.8, + "source": "validator_engine_validator", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L63", + "weight": 0.8, + "source": "validator_engine_validator", + "target": "api_schemas_readmefieldsjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L68", + "weight": 0.8, + "source": "validator_engine_validator", + "target": "config_models_validatorconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "validator_engine_validator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "validator_engine_validator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "validator_engine_validator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "validator_engine_validator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "validator_engine_validator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "validator_engine_validator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "validator_engine_validator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L116", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "validator_engine_validator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L63", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "validator_engine_validator", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L63", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "validator_engine_validator", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L258", + "weight": 1.0, + "source": "validator_engine_validator_init", + "target": "config_models_validatorconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L282", + "weight": 1.0, + "source": "validator_engine_rationale_282", + "target": "validator_engine_validator_reconfigure", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L291", + "weight": 1.0, + "source": "validator_engine_validator_reconfigure", + "target": "config_models_validatorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L384", + "weight": 1.0, + "source": "validator_engine_validator_validate_creation", + "target": "validator_engine_materialise", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L304", + "weight": 1.0, + "source": "validator_engine_rationale_304", + "target": "validator_engine_validator_validate_creation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L476", + "weight": 1.0, + "source": "validator_engine_validator_audit", + "target": "validator_engine_validator_resolve_scope_roots", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L479", + "weight": 1.0, + "source": "validator_engine_validator_audit", + "target": "validator_engine_validator_walk_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L490", + "weight": 1.0, + "source": "validator_engine_validator_query_problems", + "target": "validator_engine_validator_audit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L452", + "weight": 1.0, + "source": "validator_engine_rationale_452", + "target": "validator_engine_validator_audit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L483", + "weight": 1.0, + "source": "validator_engine_rationale_483", + "target": "validator_engine_validator_query_problems", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L495", + "weight": 1.0, + "source": "validator_engine_rationale_495", + "target": "validator_engine_validator_resolve_scope_roots", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L525", + "weight": 1.0, + "source": "validator_engine_validator_walk_root", + "target": "validator_engine_validator_walk_dir", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L514", + "weight": 1.0, + "source": "validator_engine_rationale_514", + "target": "validator_engine_validator_walk_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L554", + "weight": 1.0, + "source": "validator_engine_validator_walk_dir", + "target": "validator_engine_validator_classify_level", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L555", + "weight": 1.0, + "source": "validator_engine_validator_walk_dir", + "target": "validator_engine_validator_read_creation_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L556", + "weight": 1.0, + "source": "validator_engine_validator_walk_dir", + "target": "validator_engine_validator_compute_run_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L559", + "weight": 1.0, + "source": "validator_engine_validator_walk_dir", + "target": "validator_engine_validator_apply_directory_rules", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L581", + "weight": 1.0, + "source": "validator_engine_validator_walk_dir", + "target": "validator_engine_validator_apply_file_rules", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L589", + "weight": 1.0, + "source": "validator_engine_validator_walk_dir", + "target": "validator_engine_validator_apply_directory_name_rules", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L539", + "weight": 1.0, + "source": "validator_engine_rationale_539", + "target": "validator_engine_validator_walk_dir", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L607", + "weight": 1.0, + "source": "validator_engine_rationale_607", + "target": "validator_engine_validator_classify_level", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L661", + "weight": 1.0, + "source": "validator_engine_rationale_661", + "target": "validator_engine_validator_compute_run_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L722", + "weight": 1.0, + "source": "validator_engine_validator_apply_directory_rules", + "target": "validator_engine_extract_overrides_and_sync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L725", + "weight": 1.0, + "source": "validator_engine_validator_apply_directory_rules", + "target": "validator_engine_level_for_orphan", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L727", + "weight": 1.0, + "source": "validator_engine_validator_apply_directory_rules", + "target": "validator_engine_validator_extend_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L755", + "weight": 1.0, + "source": "validator_engine_validator_apply_directory_rules", + "target": "validator_engine_validator_apply_missing_required_field_rule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L779", + "weight": 1.0, + "source": "validator_engine_validator_apply_directory_rules", + "target": "validator_engine_validator_apply_directory_name_rules", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L707", + "weight": 1.0, + "source": "validator_engine_rationale_707", + "target": "validator_engine_validator_apply_directory_rules", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L805", + "weight": 1.0, + "source": "validator_engine_validator_extend_findings", + "target": "validator_engine_materialise_audit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L850", + "weight": 1.0, + "source": "validator_engine_validator_apply_missing_required_field_rule", + "target": "validator_engine_validator_extend_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L881", + "weight": 1.0, + "source": "validator_engine_validator_apply_directory_name_rules", + "target": "validator_engine_validator_extend_findings", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L925", + "weight": 1.0, + "source": "validator_engine_validator_apply_file_rules", + "target": "validator_engine_validator_extend_findings", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L797", + "weight": 1.0, + "source": "validator_engine_rationale_797", + "target": "validator_engine_validator_extend_findings", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L824", + "weight": 1.0, + "source": "validator_engine_rationale_824", + "target": "validator_engine_validator_apply_missing_required_field_rule", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L836", + "weight": 1.0, + "source": "validator_engine_validator_apply_missing_required_field_rule", + "target": "io_json_files_read_msgspec_json" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L878", + "weight": 1.0, + "source": "validator_engine_validator_apply_directory_name_rules", + "target": "validator_engine_extract_overrides_and_sync", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L871", + "weight": 1.0, + "source": "validator_engine_rationale_871", + "target": "validator_engine_validator_apply_directory_name_rules", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L921", + "weight": 1.0, + "source": "validator_engine_validator_apply_file_rules", + "target": "validator_engine_extract_overrides_and_sync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L958", + "weight": 1.0, + "source": "validator_engine_validator_apply_file_rules", + "target": "validator_engine_validator_content_scan_eligible", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L960", + "weight": 1.0, + "source": "validator_engine_validator_apply_file_rules", + "target": "validator_engine_validator_read_text_for_scan", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L914", + "weight": 1.0, + "source": "validator_engine_rationale_914", + "target": "validator_engine_validator_apply_file_rules", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L979", + "weight": 1.0, + "source": "validator_engine_rationale_979", + "target": "validator_engine_validator_content_scan_eligible", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L997", + "weight": 1.0, + "source": "validator_engine_rationale_997", + "target": "validator_engine_validator_read_text_for_scan", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1017", + "weight": 1.0, + "source": "validator_engine_rationale_1017", + "target": "validator_engine_validator_read_creation_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1029", + "weight": 1.0, + "source": "validator_engine_validator_read_creation_for", + "target": "io_json_files_read_msgspec_json_raw" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1054", + "weight": 1.0, + "source": "validator_engine_extract_overrides_and_sync", + "target": "cache_creation_writer_select_active_overrides" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1135", + "weight": 1.0, + "source": "validator_engine_finding_sort_key", + "target": "validator_engine_tier_rank", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1113", + "weight": 1.0, + "source": "validator_engine_rationale_1113", + "target": "validator_engine_tier_rank", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1127", + "weight": 1.0, + "source": "validator_engine_rationale_1127", + "target": "validator_engine_finding_sort_key", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/validator/engine.py", + "source_location": "L1144", + "weight": 1.0, + "source": "validator_engine_rationale_1144", + "target": "validator_engine_level_for_orphan", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L63", + "weight": 1.0, + "source": "src_exlab_wizard_cache_equipment_py", + "target": "cache_equipment_equipmentcachewriter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L127", + "weight": 1.0, + "source": "src_exlab_wizard_cache_equipment_py", + "target": "cache_equipment_write_equipment_sync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L151", + "weight": 1.0, + "source": "src_exlab_wizard_cache_equipment_py", + "target": "cache_equipment_read_equipment_sync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L163", + "weight": 1.0, + "source": "src_exlab_wizard_cache_equipment_py", + "target": "cache_equipment_read_test_runs_marker_sync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L167", + "weight": 1.0, + "source": "src_exlab_wizard_cache_equipment_py", + "target": "cache_equipment_write_test_runs_marker_sync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L183", + "weight": 1.0, + "source": "src_exlab_wizard_cache_equipment_py", + "target": "cache_equipment_read_existing_first_seen_at", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L1", + "weight": 1.0, + "source": "cache_equipment_rationale_1", + "target": "src_exlab_wizard_cache_equipment_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L73", + "weight": 1.0, + "source": "cache_equipment_equipmentcachewriter", + "target": "cache_equipment_equipmentcachewriter_write_equipment", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L91", + "weight": 1.0, + "source": "cache_equipment_equipmentcachewriter", + "target": "cache_equipment_equipmentcachewriter_read_equipment", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L106", + "weight": 1.0, + "source": "cache_equipment_equipmentcachewriter", + "target": "cache_equipment_equipmentcachewriter_write_test_runs_marker", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L154", + "weight": 1.0, + "source": "cache_equipment_equipmentcachewriter", + "target": "cache_equipment_equipmentcachewriter_read_test_runs_marker", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L64", + "weight": 1.0, + "source": "cache_equipment_rationale_64", + "target": "cache_equipment_equipmentcachewriter", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L48", + "weight": 0.8, + "source": "cache_equipment_equipmentcachewriter", + "target": "api_schemas_equipmentjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L48", + "weight": 0.8, + "source": "cache_equipment_equipmentcachewriter", + "target": "api_schemas_testrunsjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L57", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "cache_equipment_equipmentcachewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L57", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "cache_equipment_equipmentcachewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L57", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "cache_equipment_equipmentcachewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L57", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "cache_equipment_equipmentcachewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L57", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "cache_equipment_equipmentcachewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L57", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "cache_equipment_equipmentcachewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L57", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "cache_equipment_equipmentcachewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L57", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "cache_equipment_equipmentcachewriter", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L494", + "weight": 1.0, + "source": "tray_dependencies_build_equipment_writer", + "target": "cache_equipment_equipmentcachewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L74", + "weight": 1.0, + "source": "cache_equipment_rationale_74", + "target": "cache_equipment_equipmentcachewriter_write_equipment", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L92", + "weight": 1.0, + "source": "cache_equipment_rationale_92", + "target": "cache_equipment_equipmentcachewriter_read_equipment", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L107", + "weight": 1.0, + "source": "cache_equipment_rationale_107", + "target": "cache_equipment_equipmentcachewriter_write_test_runs_marker", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L131", + "weight": 1.0, + "source": "cache_equipment_write_equipment_sync", + "target": "cache_equipment_read_existing_first_seen_at", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L129", + "weight": 1.0, + "source": "cache_equipment_write_equipment_sync", + "target": "cache_init_lock_path_for" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L130", + "weight": 1.0, + "source": "cache_equipment_write_equipment_sync", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L148", + "weight": 1.0, + "source": "cache_equipment_write_equipment_sync", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L152", + "weight": 1.0, + "source": "cache_equipment_read_equipment_sync", + "target": "io_json_files_read_msgspec_json" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L155", + "weight": 1.0, + "source": "cache_equipment_rationale_155", + "target": "cache_equipment_equipmentcachewriter_read_test_runs_marker", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L164", + "weight": 1.0, + "source": "cache_equipment_read_test_runs_marker_sync", + "target": "io_json_files_read_msgspec_json" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L169", + "weight": 1.0, + "source": "cache_equipment_write_test_runs_marker_sync", + "target": "cache_init_lock_path_for" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L175", + "weight": 1.0, + "source": "cache_equipment_write_test_runs_marker_sync", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L184", + "weight": 1.0, + "source": "cache_equipment_rationale_184", + "target": "cache_equipment_read_existing_first_seen_at", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/equipment.py", + "source_location": "L196", + "weight": 1.0, + "source": "cache_equipment_read_existing_first_seen_at", + "target": "io_json_files_read_msgspec_json" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_schema.py", + "source_location": "L19", + "weight": 1.0, + "source": "src_exlab_wizard_cache_sync_state_schema_py", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_schema.py", + "source_location": "L55", + "weight": 1.0, + "source": "src_exlab_wizard_cache_sync_state_schema_py", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_schema.py", + "source_location": "L1", + "weight": 1.0, + "source": "cache_sync_state_schema_rationale_1", + "target": "src_exlab_wizard_cache_sync_state_schema_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_schema.py", + "source_location": "L24", + "weight": 1.0, + "source": "cache_sync_state_schema_rationale_24", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L33", + "weight": 0.8, + "source": "cache_sync_state_writer_syncstatewriter", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_limsprojectblock", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_templateblock", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_pluginisolation", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_pluginapplied", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_pathsblock", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_orchestratorblock", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_overrideentry", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_tombstoneentry", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_creationjson", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_readmefieldsjson", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_equipmentjson", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_testrunsjson", + "target": "cache_sync_state_schema_filesyncrecord", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L229", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", + "target": "cache_sync_state_schema_filesyncrecord" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L266", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", + "target": "cache_sync_state_schema_filesyncrecord" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_schema.py", + "source_location": "L60", + "weight": 1.0, + "source": "cache_sync_state_schema_rationale_60", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L33", + "weight": 0.8, + "source": "cache_sync_state_writer_syncstatewriter", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_limsprojectblock", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_templateblock", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_pluginisolation", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_pluginapplied", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_pathsblock", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_orchestratorblock", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_overrideentry", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_tombstoneentry", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_creationjson", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_readmefieldsjson", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_equipmentjson", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L45", + "weight": 0.8, + "source": "api_schemas_testrunsjson", + "target": "cache_sync_state_schema_syncstatejson", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L71", + "weight": 1.0, + "source": "cache_sync_state_writer_empty_state", + "target": "cache_sync_state_schema_syncstatejson" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L52", + "weight": 1.0, + "source": "src_exlab_wizard_cache_sync_state_writer_py", + "target": "cache_sync_state_writer_sync_state_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L57", + "weight": 1.0, + "source": "src_exlab_wizard_cache_sync_state_writer_py", + "target": "cache_sync_state_writer_ensure_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L69", + "weight": 1.0, + "source": "src_exlab_wizard_cache_sync_state_writer_py", + "target": "cache_sync_state_writer_empty_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L74", + "weight": 1.0, + "source": "src_exlab_wizard_cache_sync_state_writer_py", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L180", + "weight": 1.0, + "source": "src_exlab_wizard_cache_sync_state_writer_py", + "target": "cache_sync_state_writer_rollup_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L208", + "weight": 1.0, + "source": "src_exlab_wizard_cache_sync_state_writer_py", + "target": "cache_sync_state_writer_decode_locked", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L289", + "weight": 1.0, + "source": "src_exlab_wizard_cache_sync_state_writer_py", + "target": "cache_sync_state_writer_with_file", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L1", + "weight": 1.0, + "source": "cache_sync_state_writer_rationale_1", + "target": "src_exlab_wizard_cache_sync_state_writer_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L203", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_read_blocking", + "target": "cache_sync_state_writer_sync_state_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L225", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", + "target": "cache_sync_state_writer_sync_state_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L262", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", + "target": "cache_sync_state_writer_sync_state_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L279", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", + "target": "cache_sync_state_writer_sync_state_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L53", + "weight": 1.0, + "source": "cache_sync_state_writer_rationale_53", + "target": "cache_sync_state_writer_sync_state_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L226", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", + "target": "cache_sync_state_writer_ensure_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L263", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", + "target": "cache_sync_state_writer_ensure_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L280", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", + "target": "cache_sync_state_writer_ensure_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L58", + "weight": 1.0, + "source": "cache_sync_state_writer_rationale_58", + "target": "cache_sync_state_writer_ensure_cache_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L214", + "weight": 1.0, + "source": "cache_sync_state_writer_decode_locked", + "target": "cache_sync_state_writer_empty_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L70", + "weight": 1.0, + "source": "cache_sync_state_writer_rationale_70", + "target": "cache_sync_state_writer_empty_state", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L82", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter", + "target": "cache_sync_state_writer_syncstatewriter_read", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L92", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter", + "target": "cache_sync_state_writer_syncstatewriter_read_sync", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L108", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter", + "target": "cache_sync_state_writer_syncstatewriter_upsert_file", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L147", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter", + "target": "cache_sync_state_writer_syncstatewriter_set_keep_local", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L161", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter", + "target": "cache_sync_state_writer_syncstatewriter_mark_cleared", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L169", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter", + "target": "cache_sync_state_writer_syncstatewriter_mark_cleared_sync", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L202", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter", + "target": "cache_sync_state_writer_syncstatewriter_read_blocking", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L217", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter", + "target": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L256", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter", + "target": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L278", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter", + "target": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L75", + "weight": 1.0, + "source": "cache_sync_state_writer_rationale_75", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L681", + "weight": 0.8, + "source": "routers_browse_runnode", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L681", + "weight": 0.8, + "source": "routers_browse_projectnode", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L681", + "weight": 0.8, + "source": "routers_browse_equipmentnode", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L681", + "weight": 0.8, + "source": "routers_browse_relayequipmentnode", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L681", + "weight": 0.8, + "source": "routers_browse_treeresponse", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L681", + "weight": 0.8, + "source": "routers_browse_folderentry", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L681", + "weight": 0.8, + "source": "routers_browse_folderresponse", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L681", + "weight": 0.8, + "source": "routers_browse_rundetail", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L681", + "weight": 0.8, + "source": "routers_browse_runlogentry", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L681", + "weight": 0.8, + "source": "routers_browse_runlogresponse", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L283", + "weight": 0.8, + "source": "routers_staging_stagedrunrow", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L283", + "weight": 0.8, + "source": "routers_staging_staginglistresponse", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L283", + "weight": 0.8, + "source": "routers_staging_forcesyncresponse", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L283", + "weight": 0.8, + "source": "routers_staging_clearresponse", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L283", + "weight": 0.8, + "source": "routers_staging_clearverifiedresponse", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L283", + "weight": 0.8, + "source": "routers_staging_keeplocalrequest", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L283", + "weight": 0.8, + "source": "routers_staging_keeplocalresponse", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L26", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L26", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L61", + "weight": 0.8, + "source": "orchestrator_quiescence_poller_nassynclike", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L61", + "weight": 0.8, + "source": "orchestrator_quiescence_poller_filesnapshot", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L61", + "weight": 0.8, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L30", + "weight": 0.8, + "source": "orchestrator_staging_query_stagedrunsummary", + "target": "cache_sync_state_writer_syncstatewriter", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L812", + "weight": 1.0, + "source": "tray_dependencies_build_sync_state_writer", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L525", + "weight": 1.0, + "source": "routers_browse_read_sync_state", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L684", + "weight": 1.0, + "source": "routers_browse_run_rollup_status", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L295", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_init", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/staging_clear.py", + "source_location": "L52", + "weight": 1.0, + "source": "orchestrator_staging_clear_clear_run_dir", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L107", + "weight": 1.0, + "source": "orchestrator_staging_query_list_staged_runs", + "target": "cache_sync_state_writer_syncstatewriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L83", + "weight": 1.0, + "source": "cache_sync_state_writer_rationale_83", + "target": "cache_sync_state_writer_syncstatewriter_read", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L106", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_read_sync", + "target": "cache_sync_state_writer_syncstatewriter_read_blocking", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L93", + "weight": 1.0, + "source": "cache_sync_state_writer_rationale_93", + "target": "cache_sync_state_writer_syncstatewriter_read_sync", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L117", + "weight": 1.0, + "source": "cache_sync_state_writer_rationale_117", + "target": "cache_sync_state_writer_syncstatewriter_upsert_file", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L153", + "weight": 1.0, + "source": "cache_sync_state_writer_rationale_153", + "target": "cache_sync_state_writer_syncstatewriter_set_keep_local", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L162", + "weight": 1.0, + "source": "cache_sync_state_writer_rationale_162", + "target": "cache_sync_state_writer_syncstatewriter_mark_cleared", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L177", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_mark_cleared_sync", + "target": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L170", + "weight": 1.0, + "source": "cache_sync_state_writer_rationale_170", + "target": "cache_sync_state_writer_syncstatewriter_mark_cleared_sync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L205", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_read_blocking", + "target": "cache_sync_state_writer_decode_locked", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L204", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_read_blocking", + "target": "cache_init_lock_path_for" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L228", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", + "target": "cache_sync_state_writer_decode_locked", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L265", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", + "target": "cache_sync_state_writer_decode_locked", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L282", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", + "target": "cache_sync_state_writer_decode_locked", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L215", + "weight": 1.0, + "source": "cache_sync_state_writer_decode_locked", + "target": "io_json_files_read_msgspec_json" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L246", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", + "target": "cache_sync_state_writer_with_file", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L227", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", + "target": "cache_init_lock_path_for" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L247", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_upsert_file_blocking", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L268", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", + "target": "cache_sync_state_writer_with_file", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L264", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", + "target": "cache_init_lock_path_for" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L269", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_set_keep_local_blocking", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L281", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", + "target": "cache_init_lock_path_for" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L283", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/sync_state_writer.py", + "source_location": "L284", + "weight": 1.0, + "source": "cache_sync_state_writer_syncstatewriter_mark_cleared_blocking", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/__init__.py", + "source_location": "L14", + "weight": 1.0, + "source": "src_exlab_wizard_cache_init_py", + "target": "cache_init_lock_path_for", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/__init__.py", + "source_location": "L15", + "weight": 1.0, + "source": "cache_init_rationale_15", + "target": "cache_init_lock_path_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L244", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_write_creation_sync", + "target": "cache_init_lock_path_for" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L253", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_update_creation_sync", + "target": "cache_init_lock_path_for" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L268", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_read_creation_sync", + "target": "cache_init_lock_path_for" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L72", + "weight": 1.0, + "source": "src_exlab_wizard_cache_log_writer_py", + "target": "cache_log_writer_format_log_line", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L115", + "weight": 1.0, + "source": "src_exlab_wizard_cache_log_writer_py", + "target": "cache_log_writer_render_tags", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L143", + "weight": 1.0, + "source": "src_exlab_wizard_cache_log_writer_py", + "target": "cache_log_writer_truncate_if_needed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L182", + "weight": 1.0, + "source": "src_exlab_wizard_cache_log_writer_py", + "target": "cache_log_writer_append_log_line", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L1", + "weight": 1.0, + "source": "cache_log_writer_rationale_1", + "target": "src_exlab_wizard_cache_log_writer_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L103", + "weight": 1.0, + "source": "cache_log_writer_format_log_line", + "target": "cache_log_writer_render_tags", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L112", + "weight": 1.0, + "source": "cache_log_writer_format_log_line", + "target": "cache_log_writer_truncate_if_needed", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L83", + "weight": 1.0, + "source": "cache_log_writer_rationale_83", + "target": "cache_log_writer_format_log_line", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L101", + "weight": 1.0, + "source": "cache_log_writer_format_log_line", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1242", + "weight": 1.0, + "source": "controller_creation_creationcontroller_append_log", + "target": "cache_log_writer_format_log_line" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L123", + "weight": 1.0, + "source": "cache_log_writer_rationale_123", + "target": "cache_log_writer_render_tags", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L144", + "weight": 1.0, + "source": "cache_log_writer_rationale_144", + "target": "cache_log_writer_truncate_if_needed", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/log_writer.py", + "source_location": "L183", + "weight": 1.0, + "source": "cache_log_writer_rationale_183", + "target": "cache_log_writer_append_log_line", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1248", + "weight": 1.0, + "source": "controller_creation_creationcontroller_append_log", + "target": "cache_log_writer_append_log_line" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L69", + "weight": 1.0, + "source": "src_exlab_wizard_cache_creation_writer_py", + "target": "cache_creation_writer_select_active_overrides", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L123", + "weight": 1.0, + "source": "src_exlab_wizard_cache_creation_writer_py", + "target": "cache_creation_writer_is_future", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L143", + "weight": 1.0, + "source": "src_exlab_wizard_cache_creation_writer_py", + "target": "cache_creation_writer_apply_migration_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L188", + "weight": 1.0, + "source": "src_exlab_wizard_cache_creation_writer_py", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L316", + "weight": 1.0, + "source": "src_exlab_wizard_cache_creation_writer_py", + "target": "cache_creation_writer_payload_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L327", + "weight": 1.0, + "source": "src_exlab_wizard_cache_creation_writer_py", + "target": "cache_creation_writer_merge_unknown_fields", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L1", + "weight": 1.0, + "source": "cache_creation_writer_rationale_1", + "target": "src_exlab_wizard_cache_creation_writer_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L117", + "weight": 1.0, + "source": "cache_creation_writer_select_active_overrides", + "target": "cache_creation_writer_is_future", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L74", + "weight": 1.0, + "source": "cache_creation_writer_rationale_74", + "target": "cache_creation_writer_select_active_overrides", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L79", + "weight": 1.0, + "source": "sync_pre_sync_gate_is_eligible", + "target": "cache_creation_writer_select_active_overrides" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L124", + "weight": 1.0, + "source": "cache_creation_writer_rationale_124", + "target": "cache_creation_writer_is_future", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L131", + "weight": 1.0, + "source": "cache_creation_writer_is_future", + "target": "utils_time_parse_utc_iso_or_none" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L256", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_update_creation_sync", + "target": "cache_creation_writer_apply_migration_defaults", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L271", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_read_creation_sync", + "target": "cache_creation_writer_apply_migration_defaults", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L144", + "weight": 1.0, + "source": "cache_creation_writer_rationale_144", + "target": "cache_creation_writer_apply_migration_defaults", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L191", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter", + "target": "cache_creation_writer_creationwriter_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L204", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter", + "target": "cache_creation_writer_creationwriter_write_creation", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L214", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter", + "target": "cache_creation_writer_creationwriter_update_creation_atomic", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L232", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter", + "target": "cache_creation_writer_creationwriter_read_creation_snapshot", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L243", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter", + "target": "cache_creation_writer_creationwriter_write_creation_sync", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L248", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter", + "target": "cache_creation_writer_creationwriter_update_creation_sync", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L267", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter", + "target": "cache_creation_writer_creationwriter_read_creation_sync", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L276", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter", + "target": "cache_creation_writer_creationwriter_decode_raw", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L300", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter", + "target": "cache_creation_writer_creationwriter_encode_and_replace", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L189", + "weight": 1.0, + "source": "cache_creation_writer_rationale_189", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L46", + "weight": 0.8, + "source": "cache_creation_writer_creationwriter", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L56", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L56", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L56", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L56", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L56", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L56", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L56", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L56", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L25", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L25", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "cache_creation_writer_creationwriter", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L488", + "weight": 1.0, + "source": "tray_dependencies_build_creation_writer", + "target": "cache_creation_writer_creationwriter" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L192", + "weight": 1.0, + "source": "cache_creation_writer_rationale_192", + "target": "cache_creation_writer_creationwriter_init", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L205", + "weight": 1.0, + "source": "cache_creation_writer_rationale_205", + "target": "cache_creation_writer_creationwriter_write_creation", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L219", + "weight": 1.0, + "source": "cache_creation_writer_rationale_219", + "target": "cache_creation_writer_creationwriter_update_creation_atomic", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L233", + "weight": 1.0, + "source": "cache_creation_writer_rationale_233", + "target": "cache_creation_writer_creationwriter_read_creation_snapshot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L246", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_write_creation_sync", + "target": "cache_creation_writer_creationwriter_encode_and_replace", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L246", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_write_creation_sync", + "target": "cache_creation_writer_payload_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L255", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_update_creation_sync", + "target": "cache_creation_writer_creationwriter_decode_raw", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L260", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_update_creation_sync", + "target": "cache_creation_writer_payload_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L263", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_update_creation_sync", + "target": "cache_creation_writer_merge_unknown_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L264", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_update_creation_sync", + "target": "cache_creation_writer_creationwriter_encode_and_replace", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L270", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_read_creation_sync", + "target": "cache_creation_writer_creationwriter_decode_raw", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L277", + "weight": 1.0, + "source": "cache_creation_writer_rationale_277", + "target": "cache_creation_writer_creationwriter_decode_raw", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L288", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_decode_raw", + "target": "io_json_files_read_msgspec_json_raw" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L294", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_decode_raw", + "target": "io_json_files_require_schema_major" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L301", + "weight": 1.0, + "source": "cache_creation_writer_rationale_301", + "target": "cache_creation_writer_creationwriter_encode_and_replace", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L308", + "weight": 1.0, + "source": "cache_creation_writer_creationwriter_encode_and_replace", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L317", + "weight": 1.0, + "source": "cache_creation_writer_rationale_317", + "target": "cache_creation_writer_payload_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/cache/creation_writer.py", + "source_location": "L328", + "weight": 1.0, + "source": "cache_creation_writer_rationale_328", + "target": "cache_creation_writer_merge_unknown_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L73", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_parse_hhmm", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L97", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_pathsconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L112", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_limsconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L128", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_readmedefaultfield", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L143", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_id_matches_question_id_grammar", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L298", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_serialize_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L158", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_choice_requires_non_empty_options", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L169", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_readmeconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L182", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_bandwidthwindow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L192", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_serialize_days", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L196", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_from_must_precede_to", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L205", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_bandwidthconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L215", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_upload_mbps_positive_or_none", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L227", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_rclonesftptransport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L247", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_rclonesmbtransport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L276", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_transport_requires_keyring_password", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L288", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_orchestratorstagingtransport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L307", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_equipmentconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L329", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_serialize_sync_mode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L334", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_validate_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L345", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_sync_mode_dictates_transport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L375", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_nascleanupconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L391", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_loggingconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L402", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_normalize_and_validate_level", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L422", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_operatorsconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L435", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_default_content_scan_extensions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L454", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_validatorconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L466", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_extensions_must_start_with_dot", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L479", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_pluginsconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L492", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_default_ignore_globs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L496", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_syncconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L513", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_orchestratorstagingcleanup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L524", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_serialize_mode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L529", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_orchestratorconfig", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L554", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L572", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_cross_field_invariants", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L592", + "weight": 1.0, + "source": "src_exlab_wizard_config_models_py", + "target": "config_models_config_with_equipment_appended", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L1", + "weight": 1.0, + "source": "config_models_rationale_1", + "target": "src_exlab_wizard_config_models_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L197", + "weight": 1.0, + "source": "config_models_from_must_precede_to", + "target": "config_models_parse_hhmm", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L74", + "weight": 1.0, + "source": "config_models_rationale_74", + "target": "config_models_parse_hhmm", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L98", + "weight": 1.0, + "source": "config_models_rationale_98", + "target": "config_models_pathsconfig", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L293", + "weight": 0.8, + "source": "tray_main_trayapp", + "target": "config_models_pathsconfig", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L302", + "weight": 1.0, + "source": "tray_main_bootstrap_test_config", + "target": "config_models_pathsconfig" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L113", + "weight": 1.0, + "source": "config_models_rationale_113", + "target": "config_models_limsconfig", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L36", + "weight": 0.8, + "source": "api_setup_setupstatusresponse", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L36", + "weight": 0.8, + "source": "api_setup_limstestrequest", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L36", + "weight": 0.8, + "source": "api_setup_equipmenttestrequest", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L36", + "weight": 0.8, + "source": "api_setup_proberesult", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L36", + "weight": 0.8, + "source": "api_setup_autostartrequest", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L36", + "weight": 0.8, + "source": "api_setup_autostartresult", + "target": "config_models_limsconfig", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L129", + "weight": 1.0, + "source": "config_models_rationale_129", + "target": "config_models_readmedefaultfield", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L170", + "weight": 1.0, + "source": "config_models_rationale_170", + "target": "config_models_readmeconfig", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L183", + "weight": 1.0, + "source": "config_models_rationale_183", + "target": "config_models_bandwidthwindow", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L206", + "weight": 1.0, + "source": "config_models_rationale_206", + "target": "config_models_bandwidthconfig", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L228", + "weight": 1.0, + "source": "config_models_rationale_228", + "target": "config_models_rclonesftptransport", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L150", + "weight": 0.8, + "source": "transports_rclone_checkresult", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L150", + "weight": 0.8, + "source": "transports_rclone_aboutresult", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L150", + "weight": 0.8, + "source": "transports_rclone_rclonedriver", + "target": "config_models_rclonesftptransport", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L248", + "weight": 1.0, + "source": "config_models_rationale_248", + "target": "config_models_rclonesmbtransport", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "config_models_rclonesmbtransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "config_models_rclonesmbtransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L150", + "weight": 0.8, + "source": "transports_rclone_checkresult", + "target": "config_models_rclonesmbtransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L150", + "weight": 0.8, + "source": "transports_rclone_aboutresult", + "target": "config_models_rclonesmbtransport", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L150", + "weight": 0.8, + "source": "transports_rclone_rclonedriver", + "target": "config_models_rclonesmbtransport", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L277", + "weight": 1.0, + "source": "config_models_rationale_277", + "target": "config_models_transport_requires_keyring_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L660", + "weight": 1.0, + "source": "tray_dependencies_check_nas_passwords_present", + "target": "config_models_transport_requires_keyring_password" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L289", + "weight": 1.0, + "source": "config_models_rationale_289", + "target": "config_models_orchestratorstagingtransport", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L308", + "weight": 1.0, + "source": "config_models_rationale_308", + "target": "config_models_equipmentconfig", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L293", + "weight": 0.8, + "source": "tray_main_trayapp", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L36", + "weight": 0.8, + "source": "api_setup_setupstatusresponse", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L36", + "weight": 0.8, + "source": "api_setup_limstestrequest", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L36", + "weight": 0.8, + "source": "api_setup_equipmenttestrequest", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L36", + "weight": 0.8, + "source": "api_setup_proberesult", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L36", + "weight": 0.8, + "source": "api_setup_autostartrequest", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L36", + "weight": 0.8, + "source": "api_setup_autostartresult", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L27", + "weight": 0.8, + "source": "routers_config_configupdateresponse", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L27", + "weight": 0.8, + "source": "routers_config_equipmentappendresponse", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "config_models_equipmentconfig", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L376", + "weight": 1.0, + "source": "config_models_rationale_376", + "target": "config_models_nascleanupconfig", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L392", + "weight": 1.0, + "source": "config_models_rationale_392", + "target": "config_models_loggingconfig", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L423", + "weight": 1.0, + "source": "config_models_rationale_423", + "target": "config_models_operatorsconfig", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L455", + "weight": 1.0, + "source": "config_models_rationale_455", + "target": "config_models_validatorconfig", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L480", + "weight": 1.0, + "source": "config_models_rationale_480", + "target": "config_models_pluginsconfig", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L497", + "weight": 1.0, + "source": "config_models_rationale_497", + "target": "config_models_syncconfig", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L514", + "weight": 1.0, + "source": "config_models_rationale_514", + "target": "config_models_orchestratorstagingcleanup", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L530", + "weight": 1.0, + "source": "config_models_rationale_530", + "target": "config_models_orchestratorconfig", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L293", + "weight": 0.8, + "source": "tray_main_trayapp", + "target": "config_models_orchestratorconfig", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L307", + "weight": 1.0, + "source": "tray_main_bootstrap_test_config", + "target": "config_models_orchestratorconfig" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L606", + "weight": 1.0, + "source": "config_models_config_with_equipment_appended", + "target": "config_models_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L555", + "weight": 1.0, + "source": "config_models_rationale_555", + "target": "config_models_config", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L293", + "weight": 0.8, + "source": "tray_main_trayapp", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L59", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L59", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L59", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L59", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L59", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L59", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L59", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L59", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L46", + "weight": 0.8, + "source": "api_app_auditchannel", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L46", + "weight": 0.8, + "source": "api_app_appdependencies", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L27", + "weight": 0.8, + "source": "routers_config_configupdateresponse", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L27", + "weight": 0.8, + "source": "routers_config_equipmentappendresponse", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L30", + "weight": 0.8, + "source": "routers_staging_stagedrunrow", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L30", + "weight": 0.8, + "source": "routers_staging_staginglistresponse", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L30", + "weight": 0.8, + "source": "routers_staging_forcesyncresponse", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L30", + "weight": 0.8, + "source": "routers_staging_clearresponse", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L30", + "weight": 0.8, + "source": "routers_staging_clearverifiedresponse", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L30", + "weight": 0.8, + "source": "routers_staging_keeplocalrequest", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L30", + "weight": 0.8, + "source": "routers_staging_keeplocalresponse", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L27", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L55", + "weight": 0.8, + "source": "orchestrator_quiescence_poller_nassynclike", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L55", + "weight": 0.8, + "source": "orchestrator_quiescence_poller_filesnapshot", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L55", + "weight": 0.8, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L31", + "weight": 0.8, + "source": "orchestrator_staging_query_stagedrunsummary", + "target": "config_models_config", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/models.py", + "source_location": "L593", + "weight": 1.0, + "source": "config_models_rationale_593", + "target": "config_models_config_with_equipment_appended", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L33", + "weight": 1.0, + "source": "src_exlab_wizard_config_loader_py", + "target": "config_loader_test_mode_enabled", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L43", + "weight": 1.0, + "source": "src_exlab_wizard_config_loader_py", + "target": "config_loader_apply_test_mode_prefix", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L79", + "weight": 1.0, + "source": "src_exlab_wizard_config_loader_py", + "target": "config_loader_yaml", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L92", + "weight": 1.0, + "source": "src_exlab_wizard_config_loader_py", + "target": "config_loader_load_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L108", + "weight": 1.0, + "source": "src_exlab_wizard_config_loader_py", + "target": "config_loader_load_config_from_text", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L128", + "weight": 1.0, + "source": "src_exlab_wizard_config_loader_py", + "target": "config_loader_save_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L157", + "weight": 1.0, + "source": "src_exlab_wizard_config_loader_py", + "target": "config_loader_deep_merge", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L171", + "weight": 1.0, + "source": "src_exlab_wizard_config_loader_py", + "target": "config_loader_dump_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L1", + "weight": 1.0, + "source": "config_loader_rationale_1", + "target": "src_exlab_wizard_config_loader_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L123", + "weight": 1.0, + "source": "config_loader_load_config_from_text", + "target": "config_loader_test_mode_enabled", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L34", + "weight": 1.0, + "source": "config_loader_rationale_34", + "target": "config_loader_test_mode_enabled", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L124", + "weight": 1.0, + "source": "config_loader_load_config_from_text", + "target": "config_loader_apply_test_mode_prefix", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L44", + "weight": 1.0, + "source": "config_loader_rationale_44", + "target": "config_loader_apply_test_mode_prefix", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L111", + "weight": 1.0, + "source": "config_loader_load_config_from_text", + "target": "config_loader_yaml", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L138", + "weight": 1.0, + "source": "config_loader_save_config", + "target": "config_loader_yaml", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L173", + "weight": 1.0, + "source": "config_loader_dump_config", + "target": "config_loader_yaml", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L80", + "weight": 1.0, + "source": "config_loader_rationale_80", + "target": "config_loader_yaml", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L105", + "weight": 1.0, + "source": "config_loader_load_config", + "target": "config_loader_load_config_from_text", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L93", + "weight": 1.0, + "source": "config_loader_rationale_93", + "target": "config_loader_load_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L429", + "weight": 1.0, + "source": "tray_dependencies_load_config_safely", + "target": "config_loader_load_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L109", + "weight": 1.0, + "source": "config_loader_rationale_109", + "target": "config_loader_load_config_from_text", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L144", + "weight": 1.0, + "source": "config_loader_save_config", + "target": "config_loader_deep_merge", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L129", + "weight": 1.0, + "source": "config_loader_rationale_129", + "target": "config_loader_save_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L153", + "weight": 1.0, + "source": "config_loader_save_config", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L337", + "weight": 1.0, + "source": "tray_main_bootstrap_test_config", + "target": "config_loader_save_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L158", + "weight": 1.0, + "source": "config_loader_rationale_158", + "target": "config_loader_deep_merge", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/config/loader.py", + "source_location": "L172", + "weight": 1.0, + "source": "config_loader_rationale_172", + "target": "config_loader_dump_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L62", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_registry_py", + "target": "plugins_registry_pluginmanifest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L83", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_registry_py", + "target": "plugins_registry_pluginrecord", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L103", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_registry_py", + "target": "plugins_registry_pluginplan", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L115", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_registry_py", + "target": "plugins_registry_registryreport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L128", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_registry_py", + "target": "plugins_registry_pluginregistry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L386", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_registry_py", + "target": "plugins_registry_as_str_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L393", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_registry_py", + "target": "plugins_registry_suffix_or_full", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L1", + "weight": 1.0, + "source": "plugins_registry_rationale_1", + "target": "src_exlab_wizard_plugins_registry_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L326", + "weight": 1.0, + "source": "plugins_registry_pluginregistry_load_plugin", + "target": "plugins_registry_pluginmanifest", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L63", + "weight": 1.0, + "source": "plugins_registry_rationale_63", + "target": "plugins_registry_pluginmanifest", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L342", + "weight": 1.0, + "source": "plugins_registry_pluginregistry_load_plugin", + "target": "plugins_registry_pluginrecord", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L84", + "weight": 1.0, + "source": "plugins_registry_rationale_84", + "target": "plugins_registry_pluginrecord", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L377", + "weight": 1.0, + "source": "plugins_registry_pluginregistry_candidates_for", + "target": "plugins_registry_pluginplan", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L104", + "weight": 1.0, + "source": "plugins_registry_rationale_104", + "target": "plugins_registry_pluginplan", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L169", + "weight": 1.0, + "source": "plugins_registry_pluginregistry_reload", + "target": "plugins_registry_registryreport", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L116", + "weight": 1.0, + "source": "plugins_registry_rationale_116", + "target": "plugins_registry_registryreport", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L140", + "weight": 1.0, + "source": "plugins_registry_pluginregistry", + "target": "plugins_registry_pluginregistry_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L157", + "weight": 1.0, + "source": "plugins_registry_pluginregistry", + "target": "plugins_registry_pluginregistry_reload", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L181", + "weight": 1.0, + "source": "plugins_registry_pluginregistry", + "target": "plugins_registry_pluginregistry_absorb", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L210", + "weight": 1.0, + "source": "plugins_registry_pluginregistry", + "target": "plugins_registry_pluginregistry_iter_root", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L230", + "weight": 1.0, + "source": "plugins_registry_pluginregistry", + "target": "plugins_registry_pluginregistry_load_plugin", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L354", + "weight": 1.0, + "source": "plugins_registry_pluginregistry", + "target": "plugins_registry_pluginregistry_get", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L358", + "weight": 1.0, + "source": "plugins_registry_pluginregistry", + "target": "plugins_registry_pluginregistry_list_all", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L362", + "weight": 1.0, + "source": "plugins_registry_pluginregistry", + "target": "plugins_registry_pluginregistry_candidates_for", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L129", + "weight": 1.0, + "source": "plugins_registry_rationale_129", + "target": "plugins_registry_pluginregistry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L510", + "weight": 1.0, + "source": "tray_dependencies_build_plugin_host", + "target": "plugins_registry_pluginregistry" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L173", + "weight": 1.0, + "source": "plugins_registry_pluginregistry_reload", + "target": "plugins_registry_pluginregistry_iter_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L174", + "weight": 1.0, + "source": "plugins_registry_pluginregistry_reload", + "target": "plugins_registry_pluginregistry_absorb", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L158", + "weight": 1.0, + "source": "plugins_registry_rationale_158", + "target": "plugins_registry_pluginregistry_reload", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L193", + "weight": 1.0, + "source": "plugins_registry_pluginregistry_absorb", + "target": "plugins_registry_pluginregistry_get", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L187", + "weight": 1.0, + "source": "plugins_registry_rationale_187", + "target": "plugins_registry_pluginregistry_absorb", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L226", + "weight": 1.0, + "source": "plugins_registry_pluginregistry_iter_root", + "target": "plugins_registry_pluginregistry_load_plugin", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L215", + "weight": 1.0, + "source": "plugins_registry_rationale_215", + "target": "plugins_registry_pluginregistry_iter_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L280", + "weight": 1.0, + "source": "plugins_registry_pluginregistry_load_plugin", + "target": "plugins_registry_pluginregistry_get", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L333", + "weight": 1.0, + "source": "plugins_registry_pluginregistry_load_plugin", + "target": "plugins_registry_as_str_list", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L235", + "weight": 1.0, + "source": "plugins_registry_rationale_235", + "target": "plugins_registry_pluginregistry_load_plugin", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L246", + "weight": 1.0, + "source": "plugins_registry_pluginregistry_load_plugin", + "target": "io_yaml_files_load_yaml_manifest" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L355", + "weight": 1.0, + "source": "plugins_registry_rationale_355", + "target": "plugins_registry_pluginregistry_get", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L373", + "weight": 1.0, + "source": "plugins_registry_pluginregistry_candidates_for", + "target": "plugins_registry_pluginregistry_list_all", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L359", + "weight": 1.0, + "source": "plugins_registry_rationale_359", + "target": "plugins_registry_pluginregistry_list_all", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L375", + "weight": 1.0, + "source": "plugins_registry_pluginregistry_candidates_for", + "target": "plugins_registry_suffix_or_full", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L363", + "weight": 1.0, + "source": "plugins_registry_rationale_363", + "target": "plugins_registry_pluginregistry_candidates_for", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L387", + "weight": 1.0, + "source": "plugins_registry_rationale_387", + "target": "plugins_registry_as_str_list", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/registry.py", + "source_location": "L394", + "weight": 1.0, + "source": "plugins_registry_rationale_394", + "target": "plugins_registry_suffix_or_full", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L86", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_pluginrecord", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L116", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_pluginregistryprotocol", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L135", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_inputrequiredpayload", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L150", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_pluginpassresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L168", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_apply_rlimits", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L214", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_sanitized_env", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L240", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_snapshot_tree", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L280", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_is_forbidden_write", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L285", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_diff_and_collect_violations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L338", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_read_silently", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L346", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_revert_to_snapshot", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L397", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_drain_stderr", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L447", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_emit_forwarded_log", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L472", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_resolve_run_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L487", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_pluginhost", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L797", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_spawnoutcome", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L807", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L817", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_read_stdout_envelope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L838", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_build_applied_entry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L876", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_exit_code_to_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L900", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_listbackedregistry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L918", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_build_test_registry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L925", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_host_py", + "target": "plugins_host_applied_entry_as_json", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L1", + "weight": 1.0, + "source": "plugins_host_rationale_1", + "target": "src_exlab_wizard_plugins_host_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L87", + "weight": 1.0, + "source": "plugins_host_rationale_87", + "target": "plugins_host_pluginrecord", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L57", + "weight": 0.8, + "source": "plugins_host_pluginrecord", + "target": "constants_enums_pluginstatus", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L59", + "weight": 0.8, + "source": "plugins_host_pluginrecord", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L116", + "weight": 1.0, + "source": "plugins_host_pluginregistryprotocol", + "target": "protocol", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L126", + "weight": 1.0, + "source": "plugins_host_pluginregistryprotocol", + "target": "plugins_host_pluginregistryprotocol_get_record", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L117", + "weight": 1.0, + "source": "plugins_host_rationale_117", + "target": "plugins_host_pluginregistryprotocol", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L57", + "weight": 0.8, + "source": "plugins_host_pluginregistryprotocol", + "target": "constants_enums_pluginstatus", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L59", + "weight": 0.8, + "source": "plugins_host_pluginregistryprotocol", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L199", + "weight": 1.0, + "source": "controller_creation_readmegeneratorprotocol", + "target": "protocol", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L226", + "weight": 1.0, + "source": "controller_creation_nassyncprotocol", + "target": "protocol", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L73", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_nassynclike", + "target": "protocol", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L584", + "weight": 1.0, + "source": "plugins_host_pluginhost_run_one", + "target": "plugins_host_inputrequiredpayload", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L136", + "weight": 1.0, + "source": "plugins_host_rationale_136", + "target": "plugins_host_inputrequiredpayload", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L57", + "weight": 0.8, + "source": "plugins_host_inputrequiredpayload", + "target": "constants_enums_pluginstatus", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L59", + "weight": 0.8, + "source": "plugins_host_inputrequiredpayload", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "plugins_host_inputrequiredpayload", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "plugins_host_inputrequiredpayload", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "plugins_host_inputrequiredpayload", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "plugins_host_inputrequiredpayload", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "plugins_host_inputrequiredpayload", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "plugins_host_inputrequiredpayload", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "plugins_host_inputrequiredpayload", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "plugins_host_inputrequiredpayload", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L518", + "weight": 1.0, + "source": "plugins_host_pluginhost_run_pass", + "target": "plugins_host_pluginpassresult", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L151", + "weight": 1.0, + "source": "plugins_host_rationale_151", + "target": "plugins_host_pluginpassresult", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L57", + "weight": 0.8, + "source": "plugins_host_pluginpassresult", + "target": "constants_enums_pluginstatus", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L59", + "weight": 0.8, + "source": "plugins_host_pluginpassresult", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "plugins_host_pluginpassresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "plugins_host_pluginpassresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "plugins_host_pluginpassresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "plugins_host_pluginpassresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "plugins_host_pluginpassresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "plugins_host_pluginpassresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "plugins_host_pluginpassresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "plugins_host_pluginpassresult", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L846", + "weight": 1.0, + "source": "controller_creation_creationcontroller_plugin_pass", + "target": "plugins_host_pluginpassresult" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L169", + "weight": 1.0, + "source": "plugins_host_rationale_169", + "target": "plugins_host_apply_rlimits", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L671", + "weight": 1.0, + "source": "plugins_host_pluginhost_spawn_worker", + "target": "plugins_host_sanitized_env", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L215", + "weight": 1.0, + "source": "plugins_host_rationale_215", + "target": "plugins_host_sanitized_env", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L568", + "weight": 1.0, + "source": "plugins_host_pluginhost_run_one", + "target": "plugins_host_snapshot_tree", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L241", + "weight": 1.0, + "source": "plugins_host_rationale_241", + "target": "plugins_host_snapshot_tree", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L324", + "weight": 1.0, + "source": "plugins_host_diff_and_collect_violations", + "target": "plugins_host_is_forbidden_write", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L281", + "weight": 1.0, + "source": "plugins_host_rationale_281", + "target": "plugins_host_is_forbidden_write", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L319", + "weight": 1.0, + "source": "plugins_host_diff_and_collect_violations", + "target": "plugins_host_read_silently", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L606", + "weight": 1.0, + "source": "plugins_host_pluginhost_run_one", + "target": "plugins_host_diff_and_collect_violations", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L289", + "weight": 1.0, + "source": "plugins_host_rationale_289", + "target": "plugins_host_diff_and_collect_violations", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L339", + "weight": 1.0, + "source": "plugins_host_rationale_339", + "target": "plugins_host_read_silently", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L609", + "weight": 1.0, + "source": "plugins_host_pluginhost_run_one", + "target": "plugins_host_revert_to_snapshot", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L350", + "weight": 1.0, + "source": "plugins_host_rationale_350", + "target": "plugins_host_revert_to_snapshot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L440", + "weight": 1.0, + "source": "plugins_host_drain_stderr", + "target": "plugins_host_emit_forwarded_log", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L721", + "weight": 1.0, + "source": "plugins_host_pluginhost_spawn_worker", + "target": "plugins_host_drain_stderr", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L403", + "weight": 1.0, + "source": "plugins_host_rationale_403", + "target": "plugins_host_drain_stderr", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L453", + "weight": 1.0, + "source": "plugins_host_rationale_453", + "target": "plugins_host_emit_forwarded_log", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L787", + "weight": 1.0, + "source": "plugins_host_pluginhost_stderr_path_for", + "target": "plugins_host_resolve_run_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L473", + "weight": 1.0, + "source": "plugins_host_rationale_473", + "target": "plugins_host_resolve_run_id", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L493", + "weight": 1.0, + "source": "plugins_host_pluginhost", + "target": "plugins_host_pluginhost_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L502", + "weight": 1.0, + "source": "plugins_host_pluginhost", + "target": "plugins_host_pluginhost_run_pass", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L548", + "weight": 1.0, + "source": "plugins_host_pluginhost", + "target": "plugins_host_pluginhost_run_one", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L629", + "weight": 1.0, + "source": "plugins_host_pluginhost", + "target": "plugins_host_pluginhost_spawn_worker", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L766", + "weight": 1.0, + "source": "plugins_host_pluginhost", + "target": "plugins_host_pluginhost_terminate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L783", + "weight": 1.0, + "source": "plugins_host_pluginhost", + "target": "plugins_host_pluginhost_stderr_path_for", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L488", + "weight": 1.0, + "source": "plugins_host_rationale_488", + "target": "plugins_host_pluginhost", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L57", + "weight": 0.8, + "source": "plugins_host_pluginhost", + "target": "constants_enums_pluginstatus", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L59", + "weight": 0.8, + "source": "plugins_host_pluginhost", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "plugins_host_pluginhost", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "plugins_host_pluginhost", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "plugins_host_pluginhost", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "plugins_host_pluginhost", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "plugins_host_pluginhost", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "plugins_host_pluginhost", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "plugins_host_pluginhost", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L100", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "plugins_host_pluginhost", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L522", + "weight": 1.0, + "source": "tray_dependencies_build_plugin_host", + "target": "plugins_host_pluginhost" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L521", + "weight": 1.0, + "source": "plugins_host_pluginhost_run_pass", + "target": "plugins_host_listbackedregistry_get_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L529", + "weight": 1.0, + "source": "plugins_host_pluginhost_run_pass", + "target": "plugins_host_pluginhost_run_one", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L509", + "weight": 1.0, + "source": "plugins_host_rationale_509", + "target": "plugins_host_pluginhost_run_pass", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L575", + "weight": 1.0, + "source": "plugins_host_pluginhost_run_one", + "target": "plugins_host_pluginhost_spawn_worker", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L593", + "weight": 1.0, + "source": "plugins_host_pluginhost_run_one", + "target": "plugins_host_build_applied_entry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L555", + "weight": 1.0, + "source": "plugins_host_rationale_555", + "target": "plugins_host_pluginhost_run_one", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L662", + "weight": 1.0, + "source": "plugins_host_pluginhost_spawn_worker", + "target": "plugins_host_failure", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L685", + "weight": 1.0, + "source": "plugins_host_pluginhost_spawn_worker", + "target": "plugins_host_pluginhost_stderr_path_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L723", + "weight": 1.0, + "source": "plugins_host_pluginhost_spawn_worker", + "target": "plugins_host_read_stdout_envelope", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L730", + "weight": 1.0, + "source": "plugins_host_pluginhost_spawn_worker", + "target": "plugins_host_pluginhost_terminate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L740", + "weight": 1.0, + "source": "plugins_host_pluginhost_spawn_worker", + "target": "plugins_host_spawnoutcome", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L637", + "weight": 1.0, + "source": "plugins_host_rationale_637", + "target": "plugins_host_pluginhost_spawn_worker", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L767", + "weight": 1.0, + "source": "plugins_host_rationale_767", + "target": "plugins_host_pluginhost_terminate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L784", + "weight": 1.0, + "source": "plugins_host_rationale_784", + "target": "plugins_host_pluginhost_stderr_path_for", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L798", + "weight": 1.0, + "source": "plugins_host_rationale_798", + "target": "plugins_host_spawnoutcome", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L57", + "weight": 0.8, + "source": "plugins_host_spawnoutcome", + "target": "constants_enums_pluginstatus", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L59", + "weight": 0.8, + "source": "plugins_host_spawnoutcome", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L818", + "weight": 1.0, + "source": "plugins_host_rationale_818", + "target": "plugins_host_read_stdout_envelope", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L852", + "weight": 1.0, + "source": "plugins_host_build_applied_entry", + "target": "plugins_host_exit_code_to_status", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L847", + "weight": 1.0, + "source": "plugins_host_rationale_847", + "target": "plugins_host_build_applied_entry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L877", + "weight": 1.0, + "source": "plugins_host_rationale_877", + "target": "plugins_host_exit_code_to_status", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L911", + "weight": 1.0, + "source": "plugins_host_listbackedregistry", + "target": "plugins_host_listbackedregistry_get_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L920", + "weight": 1.0, + "source": "plugins_host_build_test_registry", + "target": "plugins_host_listbackedregistry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L901", + "weight": 1.0, + "source": "plugins_host_rationale_901", + "target": "plugins_host_listbackedregistry", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L57", + "weight": 0.8, + "source": "plugins_host_listbackedregistry", + "target": "constants_enums_pluginstatus", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L59", + "weight": 0.8, + "source": "plugins_host_listbackedregistry", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L919", + "weight": 1.0, + "source": "plugins_host_rationale_919", + "target": "plugins_host_build_test_registry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/host.py", + "source_location": "L926", + "weight": 1.0, + "source": "plugins_host_rationale_926", + "target": "plugins_host_applied_entry_as_json", + "confidence_score": 1.0 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L30", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_logger_py", + "target": "abc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L46", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_logger_py", + "target": "plugins_logger_pluginlogframe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L59", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_logger_py", + "target": "plugins_logger_pluginlogger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L69", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_logger_py", + "target": "plugins_logger_debug", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L73", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_logger_py", + "target": "plugins_logger_info", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L77", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_logger_py", + "target": "plugins_logger_warning", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L81", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_logger_py", + "target": "plugins_logger_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L85", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_logger_py", + "target": "plugins_logger_hostpluginlogger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L121", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_logger_py", + "target": "plugins_logger_workerpluginlogger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L1", + "weight": 1.0, + "source": "plugins_logger_rationale_1", + "target": "src_exlab_wizard_plugins_logger_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L153", + "weight": 1.0, + "source": "plugins_logger_workerpluginlogger_emit", + "target": "plugins_logger_pluginlogframe", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L47", + "weight": 1.0, + "source": "plugins_logger_rationale_47", + "target": "plugins_logger_pluginlogframe", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L59", + "weight": 1.0, + "source": "plugins_logger_pluginlogger", + "target": "abc", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L85", + "weight": 1.0, + "source": "plugins_logger_hostpluginlogger", + "target": "plugins_logger_pluginlogger", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L121", + "weight": 1.0, + "source": "plugins_logger_workerpluginlogger", + "target": "plugins_logger_pluginlogger", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L60", + "weight": 1.0, + "source": "plugins_logger_rationale_60", + "target": "plugins_logger_pluginlogger", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L41", + "weight": 0.8, + "source": "plugins_base_filechange", + "target": "plugins_logger_pluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L41", + "weight": 0.8, + "source": "plugins_base_plugincontext", + "target": "plugins_logger_pluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L41", + "weight": 0.8, + "source": "plugins_base_plugin", + "target": "plugins_logger_pluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "imports_from", + "context": "import", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L29", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_base_py", + "target": "abc", + "confidence_score": 1.0 + }, + { + "relation": "inherits", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L96", + "weight": 1.0, + "source": "plugins_base_plugin", + "target": "abc", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L95", + "weight": 1.0, + "source": "plugins_logger_hostpluginlogger", + "target": "plugins_logger_hostpluginlogger_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L98", + "weight": 1.0, + "source": "plugins_logger_hostpluginlogger", + "target": "plugins_logger_hostpluginlogger_debug", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L101", + "weight": 1.0, + "source": "plugins_logger_hostpluginlogger", + "target": "plugins_logger_hostpluginlogger_info", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L104", + "weight": 1.0, + "source": "plugins_logger_hostpluginlogger", + "target": "plugins_logger_hostpluginlogger_warning", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L107", + "weight": 1.0, + "source": "plugins_logger_hostpluginlogger", + "target": "plugins_logger_hostpluginlogger_error", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L110", + "weight": 1.0, + "source": "plugins_logger_hostpluginlogger", + "target": "plugins_logger_hostpluginlogger_emit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L86", + "weight": 1.0, + "source": "plugins_logger_rationale_86", + "target": "plugins_logger_hostpluginlogger", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L101", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "plugins_logger_hostpluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L101", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "plugins_logger_hostpluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L101", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "plugins_logger_hostpluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L101", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "plugins_logger_hostpluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L101", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "plugins_logger_hostpluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L101", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "plugins_logger_hostpluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L101", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "plugins_logger_hostpluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L101", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "plugins_logger_hostpluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L864", + "weight": 1.0, + "source": "controller_creation_creationcontroller_plugin_pass", + "target": "plugins_logger_hostpluginlogger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L96", + "weight": 1.0, + "source": "plugins_logger_hostpluginlogger_init", + "target": "logging_manager_get_logger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L99", + "weight": 1.0, + "source": "plugins_logger_hostpluginlogger_debug", + "target": "plugins_logger_workerpluginlogger_emit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L102", + "weight": 1.0, + "source": "plugins_logger_hostpluginlogger_info", + "target": "plugins_logger_workerpluginlogger_emit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L105", + "weight": 1.0, + "source": "plugins_logger_hostpluginlogger_warning", + "target": "plugins_logger_workerpluginlogger_emit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L108", + "weight": 1.0, + "source": "plugins_logger_hostpluginlogger_error", + "target": "plugins_logger_workerpluginlogger_emit", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L137", + "weight": 1.0, + "source": "plugins_logger_workerpluginlogger", + "target": "plugins_logger_workerpluginlogger_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L140", + "weight": 1.0, + "source": "plugins_logger_workerpluginlogger", + "target": "plugins_logger_workerpluginlogger_debug", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L143", + "weight": 1.0, + "source": "plugins_logger_workerpluginlogger", + "target": "plugins_logger_workerpluginlogger_info", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L146", + "weight": 1.0, + "source": "plugins_logger_workerpluginlogger", + "target": "plugins_logger_workerpluginlogger_warning", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L149", + "weight": 1.0, + "source": "plugins_logger_workerpluginlogger", + "target": "plugins_logger_workerpluginlogger_error", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L152", + "weight": 1.0, + "source": "plugins_logger_workerpluginlogger", + "target": "plugins_logger_workerpluginlogger_emit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L122", + "weight": 1.0, + "source": "plugins_logger_rationale_122", + "target": "plugins_logger_workerpluginlogger", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L38", + "weight": 0.8, + "source": "plugins_worker_workeroutcome", + "target": "plugins_logger_workerpluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L38", + "weight": 0.8, + "source": "plugins_worker_swallowcallbackerrors", + "target": "plugins_logger_workerpluginlogger", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L352", + "weight": 1.0, + "source": "plugins_worker_main", + "target": "plugins_logger_workerpluginlogger" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L141", + "weight": 1.0, + "source": "plugins_logger_workerpluginlogger_debug", + "target": "plugins_logger_workerpluginlogger_emit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L144", + "weight": 1.0, + "source": "plugins_logger_workerpluginlogger_info", + "target": "plugins_logger_workerpluginlogger_emit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L147", + "weight": 1.0, + "source": "plugins_logger_workerpluginlogger_warning", + "target": "plugins_logger_workerpluginlogger_emit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/logger.py", + "source_location": "L150", + "weight": 1.0, + "source": "plugins_logger_workerpluginlogger_error", + "target": "plugins_logger_workerpluginlogger_emit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L53", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_base_py", + "target": "plugins_base_filechange", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L73", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_base_py", + "target": "plugins_base_plugincontext", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L96", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_base_py", + "target": "plugins_base_plugin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L135", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_base_py", + "target": "plugins_base_can_handle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L143", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_base_py", + "target": "plugins_base_transform", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L1", + "weight": 1.0, + "source": "plugins_base_rationale_1", + "target": "src_exlab_wizard_plugins_base_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L194", + "weight": 1.0, + "source": "plugins_base_plugin_describe_changes", + "target": "plugins_base_filechange", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L54", + "weight": 1.0, + "source": "plugins_base_rationale_54", + "target": "plugins_base_filechange", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L37", + "weight": 0.8, + "source": "plugins_worker_workeroutcome", + "target": "plugins_base_filechange", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L37", + "weight": 0.8, + "source": "plugins_worker_swallowcallbackerrors", + "target": "plugins_base_filechange", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L74", + "weight": 1.0, + "source": "plugins_base_rationale_74", + "target": "plugins_base_plugincontext", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L37", + "weight": 0.8, + "source": "plugins_worker_workeroutcome", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L37", + "weight": 0.8, + "source": "plugins_worker_swallowcallbackerrors", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L99", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L99", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L99", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L99", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L99", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L99", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L99", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L99", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "plugins_base_plugincontext", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L120", + "weight": 1.0, + "source": "plugins_worker_build_context", + "target": "plugins_base_plugincontext" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L854", + "weight": 1.0, + "source": "controller_creation_creationcontroller_plugin_pass", + "target": "plugins_base_plugincontext" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L153", + "weight": 1.0, + "source": "plugins_base_plugin", + "target": "plugins_base_plugin_validate_variables", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L170", + "weight": 1.0, + "source": "plugins_base_plugin", + "target": "plugins_base_plugin_pre_transform_all", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L179", + "weight": 1.0, + "source": "plugins_base_plugin", + "target": "plugins_base_plugin_post_transform_all", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L186", + "weight": 1.0, + "source": "plugins_base_plugin", + "target": "plugins_base_plugin_describe_changes", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L201", + "weight": 1.0, + "source": "plugins_base_plugin", + "target": "plugins_base_plugin_on_plugin_failure", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L97", + "weight": 1.0, + "source": "plugins_base_rationale_97", + "target": "plugins_base_plugin", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L37", + "weight": 0.8, + "source": "plugins_worker_workeroutcome", + "target": "plugins_base_plugin", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L37", + "weight": 0.8, + "source": "plugins_worker_swallowcallbackerrors", + "target": "plugins_base_plugin", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L154", + "weight": 1.0, + "source": "plugins_base_rationale_154", + "target": "plugins_base_plugin_validate_variables", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L171", + "weight": 1.0, + "source": "plugins_base_rationale_171", + "target": "plugins_base_plugin_pre_transform_all", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L180", + "weight": 1.0, + "source": "plugins_base_rationale_180", + "target": "plugins_base_plugin_post_transform_all", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L187", + "weight": 1.0, + "source": "plugins_base_rationale_187", + "target": "plugins_base_plugin_describe_changes", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/base.py", + "source_location": "L202", + "weight": 1.0, + "source": "plugins_base_rationale_202", + "target": "plugins_base_plugin_on_plugin_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L57", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_worker_py", + "target": "plugins_worker_workeroutcome", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L73", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_worker_py", + "target": "plugins_worker_read_stdin_envelope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L88", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_worker_py", + "target": "plugins_worker_decode_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L105", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_worker_py", + "target": "plugins_worker_build_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L144", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_worker_py", + "target": "plugins_worker_load_plugin_class", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L170", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_worker_py", + "target": "plugins_worker_run_lifecycle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L296", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_worker_py", + "target": "plugins_worker_serialize_change", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L311", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_worker_py", + "target": "plugins_worker_swallowcallbackerrors", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L350", + "weight": 1.0, + "source": "src_exlab_wizard_plugins_worker_py", + "target": "plugins_worker_main", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L1", + "weight": 1.0, + "source": "plugins_worker_rationale_1", + "target": "src_exlab_wizard_plugins_worker_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L196", + "weight": 1.0, + "source": "plugins_worker_run_lifecycle", + "target": "plugins_worker_workeroutcome", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L58", + "weight": 1.0, + "source": "plugins_worker_rationale_58", + "target": "plugins_worker_workeroutcome", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L355", + "weight": 1.0, + "source": "plugins_worker_main", + "target": "plugins_worker_read_stdin_envelope", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L74", + "weight": 1.0, + "source": "plugins_worker_rationale_74", + "target": "plugins_worker_read_stdin_envelope", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L133", + "weight": 1.0, + "source": "plugins_worker_build_context", + "target": "plugins_worker_decode_files", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L89", + "weight": 1.0, + "source": "plugins_worker_rationale_89", + "target": "plugins_worker_decode_files", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L386", + "weight": 1.0, + "source": "plugins_worker_main", + "target": "plugins_worker_build_context", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L110", + "weight": 1.0, + "source": "plugins_worker_rationale_110", + "target": "plugins_worker_build_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L402", + "weight": 1.0, + "source": "plugins_worker_main", + "target": "plugins_worker_load_plugin_class", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L145", + "weight": 1.0, + "source": "plugins_worker_rationale_145", + "target": "plugins_worker_load_plugin_class", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L213", + "weight": 1.0, + "source": "plugins_worker_run_lifecycle", + "target": "plugins_worker_swallowcallbackerrors", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L249", + "weight": 1.0, + "source": "plugins_worker_run_lifecycle", + "target": "plugins_worker_serialize_change", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L424", + "weight": 1.0, + "source": "plugins_worker_main", + "target": "plugins_worker_run_lifecycle", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L177", + "weight": 1.0, + "source": "plugins_worker_rationale_177", + "target": "plugins_worker_run_lifecycle", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L297", + "weight": 1.0, + "source": "plugins_worker_rationale_297", + "target": "plugins_worker_serialize_change", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L319", + "weight": 1.0, + "source": "plugins_worker_swallowcallbackerrors", + "target": "plugins_worker_swallowcallbackerrors_enter", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L322", + "weight": 1.0, + "source": "plugins_worker_swallowcallbackerrors", + "target": "plugins_worker_swallowcallbackerrors_exit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L312", + "weight": 1.0, + "source": "plugins_worker_rationale_312", + "target": "plugins_worker_swallowcallbackerrors", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/plugins/_worker.py", + "source_location": "L351", + "weight": 1.0, + "source": "plugins_worker_rationale_351", + "target": "plugins_worker_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L14", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_runkind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L24", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_syncstatus", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L41", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_tier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L48", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_problemclass", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L65", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_findingkind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L76", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_templatetype", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L84", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_runscope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L95", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_limsprojectstatus", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L109", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_limsprojectsource", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L117", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_runsyncstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L137", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_setupstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L159", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_transporttype", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L173", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_syncmode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L187", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_stagingcleanupmode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L194", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_pluginstatus", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L204", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_creationlevel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L214", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_orchestratortransporttype", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L225", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_fieldtype", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L235", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_bandwidthday", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L247", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_sessionkind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L259", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_nextaction", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L266", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_auditscopekind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L279", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_directorylevel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L296", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_platform", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L304", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_setupnextaction", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L318", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_synchandlestate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L330", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_pluginsourceroot", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L337", + "weight": 1.0, + "source": "src_exlab_wizard_constants_enums_py", + "target": "constants_enums_treeprojectstatus", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_enums_rationale_1", + "target": "src_exlab_wizard_constants_enums_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L15", + "weight": 1.0, + "source": "constants_enums_rationale_15", + "target": "constants_enums_runkind", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1052", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "constants_enums_runkind" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L305", + "weight": 1.0, + "source": "routers_sessions_build_run_request", + "target": "constants_enums_runkind" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L25", + "weight": 1.0, + "source": "constants_enums_rationale_25", + "target": "constants_enums_syncstatus", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L42", + "weight": 1.0, + "source": "constants_enums_rationale_42", + "target": "constants_enums_tier", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L49", + "weight": 1.0, + "source": "constants_enums_rationale_49", + "target": "constants_enums_problemclass", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L66", + "weight": 1.0, + "source": "constants_enums_rationale_66", + "target": "constants_enums_findingkind", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L77", + "weight": 1.0, + "source": "constants_enums_rationale_77", + "target": "constants_enums_templatetype", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L159", + "weight": 1.0, + "source": "template_copier_driver_templateengine_resolve", + "target": "constants_enums_templatetype" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L85", + "weight": 1.0, + "source": "constants_enums_rationale_85", + "target": "constants_enums_runscope", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L190", + "weight": 1.0, + "source": "template_copier_driver_templateengine_resolve", + "target": "constants_enums_runscope" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L96", + "weight": 1.0, + "source": "constants_enums_rationale_96", + "target": "constants_enums_limsprojectstatus", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L110", + "weight": 1.0, + "source": "constants_enums_rationale_110", + "target": "constants_enums_limsprojectsource", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1003", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "constants_enums_limsprojectsource" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L118", + "weight": 1.0, + "source": "constants_enums_rationale_118", + "target": "constants_enums_runsyncstate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L138", + "weight": 1.0, + "source": "constants_enums_rationale_138", + "target": "constants_enums_setupstate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L160", + "weight": 1.0, + "source": "constants_enums_rationale_160", + "target": "constants_enums_transporttype", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L174", + "weight": 1.0, + "source": "constants_enums_rationale_174", + "target": "constants_enums_syncmode", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L188", + "weight": 1.0, + "source": "constants_enums_rationale_188", + "target": "constants_enums_stagingcleanupmode", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L195", + "weight": 1.0, + "source": "constants_enums_rationale_195", + "target": "constants_enums_pluginstatus", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L205", + "weight": 1.0, + "source": "constants_enums_rationale_205", + "target": "constants_enums_creationlevel", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L215", + "weight": 1.0, + "source": "constants_enums_rationale_215", + "target": "constants_enums_orchestratortransporttype", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L226", + "weight": 1.0, + "source": "constants_enums_rationale_226", + "target": "constants_enums_fieldtype", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1291", + "weight": 1.0, + "source": "controller_creation_readme_decls_from_template", + "target": "constants_enums_fieldtype" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L236", + "weight": 1.0, + "source": "constants_enums_rationale_236", + "target": "constants_enums_bandwidthday", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L248", + "weight": 1.0, + "source": "constants_enums_rationale_248", + "target": "constants_enums_sessionkind", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L260", + "weight": 1.0, + "source": "constants_enums_rationale_260", + "target": "constants_enums_nextaction", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L267", + "weight": 1.0, + "source": "constants_enums_rationale_267", + "target": "constants_enums_auditscopekind", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L294", + "weight": 1.0, + "source": "routers_problems_build_scope", + "target": "constants_enums_auditscopekind" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L280", + "weight": 1.0, + "source": "constants_enums_rationale_280", + "target": "constants_enums_directorylevel", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L297", + "weight": 1.0, + "source": "constants_enums_rationale_297", + "target": "constants_enums_platform", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L305", + "weight": 1.0, + "source": "constants_enums_rationale_305", + "target": "constants_enums_setupnextaction", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L319", + "weight": 1.0, + "source": "constants_enums_rationale_319", + "target": "constants_enums_synchandlestate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L331", + "weight": 1.0, + "source": "constants_enums_rationale_331", + "target": "constants_enums_pluginsourceroot", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/enums.py", + "source_location": "L338", + "weight": 1.0, + "source": "constants_enums_rationale_338", + "target": "constants_enums_treeprojectstatus", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/patterns.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_patterns_rationale_1", + "target": "src_exlab_wizard_constants_patterns_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/limits.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_limits_rationale_1", + "target": "src_exlab_wizard_constants_limits_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/filenames.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_filenames_rationale_1", + "target": "src_exlab_wizard_constants_filenames_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/keyring.py", + "source_location": "L26", + "weight": 1.0, + "source": "src_exlab_wizard_constants_keyring_py", + "target": "constants_keyring_keyring_nas_username", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/keyring.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_keyring_rationale_1", + "target": "src_exlab_wizard_constants_keyring_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/keyring.py", + "source_location": "L27", + "weight": 1.0, + "source": "constants_keyring_rationale_27", + "target": "constants_keyring_keyring_nas_username", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L639", + "weight": 1.0, + "source": "tray_dependencies_nas_keyring_password", + "target": "constants_keyring_keyring_nas_username" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L168", + "weight": 1.0, + "source": "sync_nas_client_resolve_env_for_equipment", + "target": "constants_keyring_keyring_nas_username" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/app.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_app_rationale_1", + "target": "src_exlab_wizard_constants_app_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/constants/schema_versions.py", + "source_location": "L1", + "weight": 1.0, + "source": "constants_schema_versions_rationale_1", + "target": "src_exlab_wizard_constants_schema_versions_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L28", + "weight": 1.0, + "source": "src_exlab_wizard_io_json_files_py", + "target": "io_json_files_require_schema_major", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L53", + "weight": 1.0, + "source": "src_exlab_wizard_io_json_files_py", + "target": "io_json_files_read_msgspec_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L73", + "weight": 1.0, + "source": "src_exlab_wizard_io_json_files_py", + "target": "io_json_files_read_msgspec_json_raw", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L94", + "weight": 1.0, + "source": "src_exlab_wizard_io_json_files_py", + "target": "io_json_files_peek_and_check_major", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L1", + "weight": 1.0, + "source": "io_json_files_rationale_1", + "target": "src_exlab_wizard_io_json_files_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L90", + "weight": 1.0, + "source": "io_json_files_read_msgspec_json_raw", + "target": "io_json_files_require_schema_major", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L102", + "weight": 1.0, + "source": "io_json_files_peek_and_check_major", + "target": "io_json_files_require_schema_major", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L29", + "weight": 1.0, + "source": "io_json_files_rationale_29", + "target": "io_json_files_require_schema_major", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L69", + "weight": 1.0, + "source": "io_json_files_read_msgspec_json", + "target": "io_json_files_peek_and_check_major", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L59", + "weight": 1.0, + "source": "io_json_files_rationale_59", + "target": "io_json_files_read_msgspec_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L475", + "weight": 1.0, + "source": "routers_browse_relay_label_from_first_run", + "target": "io_json_files_read_msgspec_json" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/json_files.py", + "source_location": "L78", + "weight": 1.0, + "source": "io_json_files_rationale_78", + "target": "io_json_files_read_msgspec_json_raw", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "io_init_rationale_1", + "target": "src_exlab_wizard_io_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/atomic_write.py", + "source_location": "L21", + "weight": 1.0, + "source": "src_exlab_wizard_io_atomic_write_py", + "target": "io_atomic_write_atomic_write_bytes", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/atomic_write.py", + "source_location": "L1", + "weight": 1.0, + "source": "io_atomic_write_rationale_1", + "target": "src_exlab_wizard_io_atomic_write_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/atomic_write.py", + "source_location": "L22", + "weight": 1.0, + "source": "io_atomic_write_rationale_22", + "target": "io_atomic_write_atomic_write_bytes", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L181", + "weight": 1.0, + "source": "tray_server_runner_serverrunner_write_state_file", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L144", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_write_plist", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L166", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_write_systemd_unit", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L171", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_write_desktop_file", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/storage_secret.py", + "source_location": "L52", + "weight": 1.0, + "source": "tray_storage_secret_load_or_create_storage_secret", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L211", + "weight": 1.0, + "source": "readme_generator_readmegenerator_generate_sync", + "target": "io_atomic_write_atomic_write_bytes" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/yaml_files.py", + "source_location": "L20", + "weight": 1.0, + "source": "src_exlab_wizard_io_yaml_files_py", + "target": "io_yaml_files_load_yaml_manifest", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/yaml_files.py", + "source_location": "L1", + "weight": 1.0, + "source": "io_yaml_files_rationale_1", + "target": "src_exlab_wizard_io_yaml_files_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/io/yaml_files.py", + "source_location": "L21", + "weight": 1.0, + "source": "io_yaml_files_rationale_21", + "target": "io_yaml_files_load_yaml_manifest", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L142", + "weight": 1.0, + "source": "template_copier_driver_templateengine_resolve", + "target": "io_yaml_files_load_yaml_manifest" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L60", + "weight": 1.0, + "source": "src_exlab_wizard_template_copier_driver_py", + "target": "template_copier_driver_resolvedtemplate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L95", + "weight": 1.0, + "source": "src_exlab_wizard_template_copier_driver_py", + "target": "template_copier_driver_renderresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L109", + "weight": 1.0, + "source": "src_exlab_wizard_template_copier_driver_py", + "target": "template_copier_driver_templateengine", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L228", + "weight": 1.0, + "source": "src_exlab_wizard_template_copier_driver_py", + "target": "template_copier_driver_extract_readme_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L307", + "weight": 1.0, + "source": "src_exlab_wizard_template_copier_driver_py", + "target": "template_copier_driver_snapshot_files", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L1", + "weight": 1.0, + "source": "template_copier_driver_rationale_1", + "target": "src_exlab_wizard_template_copier_driver_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L215", + "weight": 1.0, + "source": "template_copier_driver_templateengine_resolve", + "target": "template_copier_driver_resolvedtemplate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L61", + "weight": 1.0, + "source": "template_copier_driver_rationale_61", + "target": "template_copier_driver_resolvedtemplate", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "template_copier_driver_resolvedtemplate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "template_copier_driver_resolvedtemplate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "template_copier_driver_resolvedtemplate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "template_copier_driver_resolvedtemplate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "template_copier_driver_resolvedtemplate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "template_copier_driver_resolvedtemplate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "template_copier_driver_resolvedtemplate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "template_copier_driver_resolvedtemplate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L304", + "weight": 1.0, + "source": "template_copier_driver_templateengine_render", + "target": "template_copier_driver_renderresult", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L96", + "weight": 1.0, + "source": "template_copier_driver_rationale_96", + "target": "template_copier_driver_renderresult", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "template_copier_driver_renderresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "template_copier_driver_renderresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "template_copier_driver_renderresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "template_copier_driver_renderresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "template_copier_driver_renderresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "template_copier_driver_renderresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "template_copier_driver_renderresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "template_copier_driver_renderresult", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L112", + "weight": 1.0, + "source": "template_copier_driver_templateengine", + "target": "template_copier_driver_templateengine_resolve", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L257", + "weight": 1.0, + "source": "template_copier_driver_templateengine", + "target": "template_copier_driver_templateengine_render", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L110", + "weight": 1.0, + "source": "template_copier_driver_rationale_110", + "target": "template_copier_driver_templateengine", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "template_copier_driver_templateengine", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "template_copier_driver_templateengine", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "template_copier_driver_templateengine", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "template_copier_driver_templateengine", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "template_copier_driver_templateengine", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "template_copier_driver_templateengine", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "template_copier_driver_templateengine", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L109", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "template_copier_driver_templateengine", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L500", + "weight": 1.0, + "source": "tray_dependencies_build_template_engine", + "target": "template_copier_driver_templateengine" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L198", + "weight": 1.0, + "source": "template_copier_driver_templateengine_resolve", + "target": "template_copier_driver_extract_readme_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L318", + "weight": 1.0, + "source": "template_copier_driver_snapshot_files", + "target": "template_copier_driver_templateengine_resolve", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L113", + "weight": 1.0, + "source": "template_copier_driver_rationale_113", + "target": "template_copier_driver_templateengine_resolve", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L283", + "weight": 1.0, + "source": "template_copier_driver_templateengine_render", + "target": "template_copier_driver_snapshot_files", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L263", + "weight": 1.0, + "source": "template_copier_driver_rationale_263", + "target": "template_copier_driver_templateengine_render", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/template/copier_driver.py", + "source_location": "L308", + "weight": 1.0, + "source": "template_copier_driver_rationale_308", + "target": "template_copier_driver_snapshot_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L28", + "weight": 1.0, + "source": "src_exlab_wizard_utils_time_py", + "target": "utils_time_utc_now", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L39", + "weight": 1.0, + "source": "src_exlab_wizard_utils_time_py", + "target": "utils_time_utc_now_or", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L49", + "weight": 1.0, + "source": "src_exlab_wizard_utils_time_py", + "target": "utils_time_utc_now_iso", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L58", + "weight": 1.0, + "source": "src_exlab_wizard_utils_time_py", + "target": "utils_time_dt_to_iso", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L69", + "weight": 1.0, + "source": "src_exlab_wizard_utils_time_py", + "target": "utils_time_parse_utc_iso", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L84", + "weight": 1.0, + "source": "src_exlab_wizard_utils_time_py", + "target": "utils_time_parse_utc_iso_or_none", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L1", + "weight": 1.0, + "source": "utils_time_rationale_1", + "target": "src_exlab_wizard_utils_time_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L29", + "weight": 1.0, + "source": "utils_time_rationale_29", + "target": "utils_time_utc_now", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L941", + "weight": 1.0, + "source": "controller_creation_creationcontroller_build_readme_context", + "target": "utils_time_utc_now" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1243", + "weight": 1.0, + "source": "controller_creation_creationcontroller_append_log", + "target": "utils_time_utc_now" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L107", + "weight": 1.0, + "source": "controller_session_store_sessionstore_open", + "target": "utils_time_utc_now" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L180", + "weight": 1.0, + "source": "controller_session_store_sessionstore_heartbeat", + "target": "utils_time_utc_now" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L211", + "weight": 1.0, + "source": "controller_session_store_sessionstore_abandoned_older_than", + "target": "utils_time_utc_now" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L976", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_maybe_cleanup", + "target": "utils_time_utc_now" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L40", + "weight": 1.0, + "source": "utils_time_rationale_40", + "target": "utils_time_utc_now_or", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L186", + "weight": 1.0, + "source": "sync_queue_compute_next_attempt_at", + "target": "utils_time_utc_now_or" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L444", + "weight": 1.0, + "source": "sync_queue_syncqueue_record_failure", + "target": "utils_time_utc_now_or" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L106", + "weight": 1.0, + "source": "orchestrator_staging_query_list_staged_runs", + "target": "utils_time_utc_now_or" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L50", + "weight": 1.0, + "source": "utils_time_rationale_50", + "target": "utils_time_utc_now_iso", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L178", + "weight": 1.0, + "source": "tray_server_runner_serverrunner_write_state_file", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1049", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1102", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_equipment_json", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1179", + "weight": 1.0, + "source": "controller_creation_creationcontroller_transition", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L356", + "weight": 1.0, + "source": "api_app_audit_loop", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L330", + "weight": 1.0, + "source": "routers_problems_last_audit_at", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L279", + "weight": 1.0, + "source": "sync_queue_syncqueue_insert", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L525", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_next_due_job", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L647", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L872", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_reconcile_synced_files", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L194", + "weight": 1.0, + "source": "orchestrator_staging_query_dir_mtime_iso", + "target": "utils_time_utc_now_iso" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L59", + "weight": 1.0, + "source": "utils_time_rationale_59", + "target": "utils_time_dt_to_iso", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L204", + "weight": 1.0, + "source": "readme_generator_readmegenerator_generate_sync", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L428", + "weight": 1.0, + "source": "readme_generator_system_fields_dict", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L794", + "weight": 1.0, + "source": "routers_browse_scan_folder_sync", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L101", + "weight": 1.0, + "source": "routers_operations_session_to_entry", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L187", + "weight": 1.0, + "source": "sync_queue_compute_next_attempt_at", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L445", + "weight": 1.0, + "source": "sync_queue_syncqueue_record_failure", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L112", + "weight": 1.0, + "source": "logging_format_format_utc_timestamp", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L195", + "weight": 1.0, + "source": "orchestrator_staging_query_dir_mtime_iso", + "target": "utils_time_dt_to_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L94", + "weight": 1.0, + "source": "utils_time_parse_utc_iso_or_none", + "target": "utils_time_parse_utc_iso", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L70", + "weight": 1.0, + "source": "utils_time_rationale_70", + "target": "utils_time_parse_utc_iso", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L366", + "weight": 1.0, + "source": "readme_generator_check_value_type", + "target": "utils_time_parse_utc_iso" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L300", + "weight": 1.0, + "source": "routers_sessions_build_run_request", + "target": "utils_time_parse_utc_iso" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/time.py", + "source_location": "L85", + "weight": 1.0, + "source": "utils_time_rationale_85", + "target": "utils_time_parse_utc_iso_or_none", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L56", + "weight": 1.0, + "source": "sync_cleanup_has_recent_revocation", + "target": "utils_time_parse_utc_iso_or_none" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L94", + "weight": 1.0, + "source": "sync_cleanup_cleanup_interlocks_satisfied", + "target": "utils_time_parse_utc_iso_or_none" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L200", + "weight": 1.0, + "source": "orchestrator_staging_query_parse_iso", + "target": "utils_time_parse_utc_iso_or_none" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L206", + "weight": 1.0, + "source": "orchestrator_staging_query_iso_to_epoch", + "target": "utils_time_parse_utc_iso_or_none" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "utils_init_rationale_1", + "target": "src_exlab_wizard_utils_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/state.py", + "source_location": "L14", + "weight": 1.0, + "source": "src_exlab_wizard_utils_state_py", + "target": "utils_state_assert_forward_transition", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/state.py", + "source_location": "L1", + "weight": 1.0, + "source": "utils_state_rationale_1", + "target": "src_exlab_wizard_utils_state_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/utils/state.py", + "source_location": "L19", + "weight": 1.0, + "source": "utils_state_rationale_19", + "target": "utils_state_assert_forward_transition", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L168", + "weight": 1.0, + "source": "controller_state_machine_assert_transition", + "target": "utils_state_assert_forward_transition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L39", + "weight": 1.0, + "source": "src_exlab_wizard_tray_icon_py", + "target": "tray_icon_default_icon_image", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L58", + "weight": 1.0, + "source": "src_exlab_wizard_tray_icon_py", + "target": "tray_icon_build_icon", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L94", + "weight": 1.0, + "source": "src_exlab_wizard_tray_icon_py", + "target": "tray_icon_import_pystray", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L101", + "weight": 1.0, + "source": "src_exlab_wizard_tray_icon_py", + "target": "tray_icon_safe_call", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_icon_rationale_1", + "target": "src_exlab_wizard_tray_icon_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L76", + "weight": 1.0, + "source": "tray_icon_build_icon", + "target": "tray_icon_default_icon_image", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L40", + "weight": 1.0, + "source": "tray_icon_rationale_40", + "target": "tray_icon_default_icon_image", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L75", + "weight": 1.0, + "source": "tray_icon_build_icon", + "target": "tray_icon_import_pystray", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L80", + "weight": 1.0, + "source": "tray_icon_build_icon", + "target": "tray_icon_safe_call", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L68", + "weight": 1.0, + "source": "tray_icon_rationale_68", + "target": "tray_icon_build_icon", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L107", + "weight": 1.0, + "source": "tray_main_trayapp_run", + "target": "tray_icon_build_icon" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L95", + "weight": 1.0, + "source": "tray_icon_rationale_95", + "target": "tray_icon_import_pystray", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/icon.py", + "source_location": "L102", + "weight": 1.0, + "source": "tray_icon_rationale_102", + "target": "tray_icon_safe_call", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L41", + "weight": 1.0, + "source": "src_exlab_wizard_tray_server_runner_py", + "target": "tray_server_runner_pick_free_port", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L55", + "weight": 1.0, + "source": "src_exlab_wizard_tray_server_runner_py", + "target": "tray_server_runner_serverrunner", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L124", + "weight": 1.0, + "source": "src_exlab_wizard_tray_server_runner_py", + "target": "tray_server_runner_port", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L135", + "weight": 1.0, + "source": "src_exlab_wizard_tray_server_runner_py", + "target": "tray_server_runner_is_running", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L142", + "weight": 1.0, + "source": "src_exlab_wizard_tray_server_runner_py", + "target": "tray_server_runner_state_file", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_server_runner_rationale_1", + "target": "src_exlab_wizard_tray_server_runner_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L86", + "weight": 1.0, + "source": "tray_server_runner_serverrunner_start", + "target": "tray_server_runner_pick_free_port", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L42", + "weight": 1.0, + "source": "tray_server_runner_rationale_42", + "target": "tray_server_runner_pick_free_port", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L61", + "weight": 1.0, + "source": "tray_server_runner_serverrunner", + "target": "tray_server_runner_serverrunner_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L75", + "weight": 1.0, + "source": "tray_server_runner_serverrunner", + "target": "tray_server_runner_serverrunner_start", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L103", + "weight": 1.0, + "source": "tray_server_runner_serverrunner", + "target": "tray_server_runner_serverrunner_stop", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L150", + "weight": 1.0, + "source": "tray_server_runner_serverrunner", + "target": "tray_server_runner_serverrunner_build_uvicorn", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L170", + "weight": 1.0, + "source": "tray_server_runner_serverrunner", + "target": "tray_server_runner_serverrunner_write_state_file", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L183", + "weight": 1.0, + "source": "tray_server_runner_serverrunner", + "target": "tray_server_runner_serverrunner_delete_state_file", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L56", + "weight": 1.0, + "source": "tray_server_runner_rationale_56", + "target": "tray_server_runner_serverrunner", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L34", + "weight": 0.8, + "source": "tray_quit_coordinator_quitcoordinator", + "target": "tray_server_runner_serverrunner", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L39", + "weight": 0.8, + "source": "tray_main_trayapp", + "target": "tray_server_runner_serverrunner", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L166", + "weight": 1.0, + "source": "tray_main_build_default_components", + "target": "tray_server_runner_serverrunner" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L366", + "weight": 1.0, + "source": "tray_main_run_smoke", + "target": "tray_server_runner_serverrunner" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L87", + "weight": 1.0, + "source": "tray_server_runner_serverrunner_start", + "target": "tray_server_runner_serverrunner_build_uvicorn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L99", + "weight": 1.0, + "source": "tray_server_runner_serverrunner_start", + "target": "tray_server_runner_serverrunner_write_state_file", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L76", + "weight": 1.0, + "source": "tray_server_runner_rationale_76", + "target": "tray_server_runner_serverrunner_start", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L117", + "weight": 1.0, + "source": "tray_server_runner_serverrunner_stop", + "target": "tray_server_runner_serverrunner_delete_state_file", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L104", + "weight": 1.0, + "source": "tray_server_runner_rationale_104", + "target": "tray_server_runner_serverrunner_stop", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L151", + "weight": 1.0, + "source": "tray_server_runner_rationale_151", + "target": "tray_server_runner_serverrunner_build_uvicorn", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L171", + "weight": 1.0, + "source": "tray_server_runner_rationale_171", + "target": "tray_server_runner_serverrunner_write_state_file", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/server_runner.py", + "source_location": "L184", + "weight": 1.0, + "source": "tray_server_runner_rationale_184", + "target": "tray_server_runner_serverrunner_delete_state_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L54", + "weight": 1.0, + "source": "src_exlab_wizard_tray_autostart_py", + "target": "tray_autostart_autostartmanager", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L125", + "weight": 1.0, + "source": "src_exlab_wizard_tray_autostart_py", + "target": "tray_autostart_executable_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L130", + "weight": 1.0, + "source": "src_exlab_wizard_tray_autostart_py", + "target": "tray_autostart_platform", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L210", + "weight": 1.0, + "source": "src_exlab_wizard_tray_autostart_py", + "target": "tray_autostart_render_plist", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L236", + "weight": 1.0, + "source": "src_exlab_wizard_tray_autostart_py", + "target": "tray_autostart_render_systemd_unit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L251", + "weight": 1.0, + "source": "src_exlab_wizard_tray_autostart_py", + "target": "tray_autostart_render_desktop_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L268", + "weight": 1.0, + "source": "src_exlab_wizard_tray_autostart_py", + "target": "tray_autostart_detect_platform", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L276", + "weight": 1.0, + "source": "src_exlab_wizard_tray_autostart_py", + "target": "tray_autostart_silently_unlink", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L281", + "weight": 1.0, + "source": "src_exlab_wizard_tray_autostart_py", + "target": "tray_autostart_import_winreg", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_autostart_rationale_1", + "target": "src_exlab_wizard_tray_autostart_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L70", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L93", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_is_registered", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L103", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_register", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L113", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_unregister", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L138", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_plist_path", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L141", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_write_plist", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L151", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_systemd_path", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L154", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_desktop_path", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L157", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_register_linux", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L163", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_write_systemd_unit", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L168", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_write_desktop_file", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L177", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_set_win_reg_value", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L183", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_delete_win_reg_value", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L193", + "weight": 1.0, + "source": "tray_autostart_autostartmanager", + "target": "tray_autostart_autostartmanager_win_reg_value", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L55", + "weight": 1.0, + "source": "tray_autostart_rationale_55", + "target": "tray_autostart_autostartmanager", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L35", + "weight": 0.8, + "source": "tray_main_trayapp", + "target": "tray_autostart_autostartmanager", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L170", + "weight": 1.0, + "source": "tray_main_build_default_components", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L134", + "weight": 1.0, + "source": "tray_dependencies_build_production_dependencies", + "target": "tray_autostart_autostartmanager" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L87", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_init", + "target": "tray_autostart_platform", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L87", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_init", + "target": "tray_autostart_detect_platform", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L97", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_is_registered", + "target": "tray_autostart_autostartmanager_plist_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L99", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_is_registered", + "target": "tray_autostart_autostartmanager_win_reg_value", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L101", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_is_registered", + "target": "tray_autostart_autostartmanager_systemd_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L101", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_is_registered", + "target": "tray_autostart_autostartmanager_desktop_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L94", + "weight": 1.0, + "source": "tray_autostart_rationale_94", + "target": "tray_autostart_autostartmanager_is_registered", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L107", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_register", + "target": "tray_autostart_autostartmanager_write_plist", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L109", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_register", + "target": "tray_autostart_autostartmanager_set_win_reg_value", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L111", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_register", + "target": "tray_autostart_autostartmanager_register_linux", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L104", + "weight": 1.0, + "source": "tray_autostart_rationale_104", + "target": "tray_autostart_autostartmanager_register", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L117", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_unregister", + "target": "tray_autostart_silently_unlink", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L117", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_unregister", + "target": "tray_autostart_autostartmanager_plist_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L119", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_unregister", + "target": "tray_autostart_autostartmanager_delete_win_reg_value", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L121", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_unregister", + "target": "tray_autostart_autostartmanager_systemd_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L122", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_unregister", + "target": "tray_autostart_autostartmanager_desktop_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L114", + "weight": 1.0, + "source": "tray_autostart_rationale_114", + "target": "tray_autostart_autostartmanager_unregister", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L142", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_write_plist", + "target": "tray_autostart_autostartmanager_plist_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L144", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_write_plist", + "target": "tray_autostart_render_plist", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L164", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_write_systemd_unit", + "target": "tray_autostart_autostartmanager_systemd_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L169", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_write_desktop_file", + "target": "tray_autostart_autostartmanager_desktop_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L159", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_register_linux", + "target": "tray_autostart_autostartmanager_write_systemd_unit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L160", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_register_linux", + "target": "tray_autostart_autostartmanager_write_desktop_file", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L166", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_write_systemd_unit", + "target": "tray_autostart_render_systemd_unit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L171", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_write_desktop_file", + "target": "tray_autostart_render_desktop_file", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L178", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_set_win_reg_value", + "target": "tray_autostart_import_winreg", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L184", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_delete_win_reg_value", + "target": "tray_autostart_import_winreg", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L194", + "weight": 1.0, + "source": "tray_autostart_autostartmanager_win_reg_value", + "target": "tray_autostart_import_winreg", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L211", + "weight": 1.0, + "source": "tray_autostart_rationale_211", + "target": "tray_autostart_render_plist", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L237", + "weight": 1.0, + "source": "tray_autostart_rationale_237", + "target": "tray_autostart_render_systemd_unit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L252", + "weight": 1.0, + "source": "tray_autostart_rationale_252", + "target": "tray_autostart_render_desktop_file", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/autostart.py", + "source_location": "L282", + "weight": 1.0, + "source": "tray_autostart_rationale_282", + "target": "tray_autostart_import_winreg", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L49", + "weight": 1.0, + "source": "src_exlab_wizard_tray_quit_coordinator_py", + "target": "tray_quit_coordinator_quitcoordinator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L163", + "weight": 1.0, + "source": "src_exlab_wizard_tray_quit_coordinator_py", + "target": "tray_quit_coordinator_safe_count", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_quit_coordinator_rationale_1", + "target": "src_exlab_wizard_tray_quit_coordinator_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L57", + "weight": 1.0, + "source": "tray_quit_coordinator_quitcoordinator", + "target": "tray_quit_coordinator_quitcoordinator_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L82", + "weight": 1.0, + "source": "tray_quit_coordinator_quitcoordinator", + "target": "tray_quit_coordinator_quitcoordinator_quit", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L112", + "weight": 1.0, + "source": "tray_quit_coordinator_quitcoordinator", + "target": "tray_quit_coordinator_quitcoordinator_is_idle", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L125", + "weight": 1.0, + "source": "tray_quit_coordinator_quitcoordinator", + "target": "tray_quit_coordinator_quitcoordinator_wait_for_idle", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L147", + "weight": 1.0, + "source": "tray_quit_coordinator_quitcoordinator", + "target": "tray_quit_coordinator_quitcoordinator_prompt_force_quit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L50", + "weight": 1.0, + "source": "tray_quit_coordinator_rationale_50", + "target": "tray_quit_coordinator_quitcoordinator", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L35", + "weight": 0.8, + "source": "tray_quit_coordinator_quitcoordinator", + "target": "tray_window_launcher_windowlauncher", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L38", + "weight": 0.8, + "source": "tray_main_trayapp", + "target": "tray_quit_coordinator_quitcoordinator", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L171", + "weight": 1.0, + "source": "tray_main_build_default_components", + "target": "tray_quit_coordinator_quitcoordinator" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L92", + "weight": 1.0, + "source": "tray_quit_coordinator_quitcoordinator_quit", + "target": "tray_quit_coordinator_quitcoordinator_wait_for_idle", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L95", + "weight": 1.0, + "source": "tray_quit_coordinator_quitcoordinator_quit", + "target": "tray_quit_coordinator_quitcoordinator_prompt_force_quit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L83", + "weight": 1.0, + "source": "tray_quit_coordinator_rationale_83", + "target": "tray_quit_coordinator_quitcoordinator_quit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L121", + "weight": 1.0, + "source": "tray_quit_coordinator_quitcoordinator_is_idle", + "target": "tray_quit_coordinator_safe_count", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L135", + "weight": 1.0, + "source": "tray_quit_coordinator_quitcoordinator_wait_for_idle", + "target": "tray_quit_coordinator_quitcoordinator_is_idle", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L113", + "weight": 1.0, + "source": "tray_quit_coordinator_rationale_113", + "target": "tray_quit_coordinator_quitcoordinator_is_idle", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L126", + "weight": 1.0, + "source": "tray_quit_coordinator_rationale_126", + "target": "tray_quit_coordinator_quitcoordinator_wait_for_idle", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L148", + "weight": 1.0, + "source": "tray_quit_coordinator_rationale_148", + "target": "tray_quit_coordinator_quitcoordinator_prompt_force_quit", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/quit_coordinator.py", + "source_location": "L164", + "weight": 1.0, + "source": "tray_quit_coordinator_rationale_164", + "target": "tray_quit_coordinator_safe_count", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L35", + "weight": 1.0, + "source": "src_exlab_wizard_tray_window_launcher_py", + "target": "tray_window_launcher_resolve_window_executable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L55", + "weight": 1.0, + "source": "src_exlab_wizard_tray_window_launcher_py", + "target": "tray_window_launcher_windowlauncher", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L103", + "weight": 1.0, + "source": "src_exlab_wizard_tray_window_launcher_py", + "target": "tray_window_launcher_is_alive", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L110", + "weight": 1.0, + "source": "src_exlab_wizard_tray_window_launcher_py", + "target": "tray_window_launcher_pid", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_window_launcher_rationale_1", + "target": "src_exlab_wizard_tray_window_launcher_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L124", + "weight": 1.0, + "source": "tray_window_launcher_windowlauncher_argv", + "target": "tray_window_launcher_resolve_window_executable", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L36", + "weight": 1.0, + "source": "tray_window_launcher_rationale_36", + "target": "tray_window_launcher_resolve_window_executable", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L63", + "weight": 1.0, + "source": "tray_window_launcher_windowlauncher", + "target": "tray_window_launcher_windowlauncher_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L77", + "weight": 1.0, + "source": "tray_window_launcher_windowlauncher", + "target": "tray_window_launcher_windowlauncher_open", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L89", + "weight": 1.0, + "source": "tray_window_launcher_windowlauncher", + "target": "tray_window_launcher_windowlauncher_close", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L120", + "weight": 1.0, + "source": "tray_window_launcher_windowlauncher", + "target": "tray_window_launcher_windowlauncher_argv", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L126", + "weight": 1.0, + "source": "tray_window_launcher_windowlauncher", + "target": "tray_window_launcher_windowlauncher_focus_existing", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L56", + "weight": 1.0, + "source": "tray_window_launcher_rationale_56", + "target": "tray_window_launcher_windowlauncher", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L41", + "weight": 0.8, + "source": "tray_main_trayapp", + "target": "tray_window_launcher_windowlauncher", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L167", + "weight": 1.0, + "source": "tray_main_build_default_components", + "target": "tray_window_launcher_windowlauncher" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L80", + "weight": 1.0, + "source": "tray_window_launcher_windowlauncher_open", + "target": "tray_window_launcher_windowlauncher_focus_existing", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L82", + "weight": 1.0, + "source": "tray_window_launcher_windowlauncher_open", + "target": "tray_window_launcher_windowlauncher_argv", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L78", + "weight": 1.0, + "source": "tray_window_launcher_rationale_78", + "target": "tray_window_launcher_windowlauncher_open", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L90", + "weight": 1.0, + "source": "tray_window_launcher_rationale_90", + "target": "tray_window_launcher_windowlauncher_close", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L121", + "weight": 1.0, + "source": "tray_window_launcher_rationale_121", + "target": "tray_window_launcher_windowlauncher_argv", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/window_launcher.py", + "source_location": "L127", + "weight": 1.0, + "source": "tray_window_launcher_rationale_127", + "target": "tray_window_launcher_windowlauncher_focus_existing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L50", + "weight": 1.0, + "source": "src_exlab_wizard_tray_notifications_py", + "target": "tray_notifications_notify", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L70", + "weight": 1.0, + "source": "src_exlab_wizard_tray_notifications_py", + "target": "tray_notifications_default_notifier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L80", + "weight": 1.0, + "source": "src_exlab_wizard_tray_notifications_py", + "target": "tray_notifications_noop_notifier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L90", + "weight": 1.0, + "source": "src_exlab_wizard_tray_notifications_py", + "target": "tray_notifications_bucket", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L99", + "weight": 1.0, + "source": "src_exlab_wizard_tray_notifications_py", + "target": "tray_notifications_notificationbus", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L192", + "weight": 1.0, + "source": "src_exlab_wizard_tray_notifications_py", + "target": "tray_notifications_coalesced_message", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_notifications_rationale_1", + "target": "src_exlab_wizard_tray_notifications_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L63", + "weight": 1.0, + "source": "tray_notifications_notify", + "target": "tray_notifications_default_notifier", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L189", + "weight": 1.0, + "source": "tray_notifications_notificationbus_flush", + "target": "tray_notifications_notify", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L56", + "weight": 1.0, + "source": "tray_notifications_rationale_56", + "target": "tray_notifications_notify", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L71", + "weight": 1.0, + "source": "tray_notifications_rationale_71", + "target": "tray_notifications_default_notifier", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L141", + "weight": 1.0, + "source": "tray_notifications_notificationbus_emit", + "target": "tray_notifications_bucket", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L91", + "weight": 1.0, + "source": "tray_notifications_rationale_91", + "target": "tray_notifications_bucket", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L108", + "weight": 1.0, + "source": "tray_notifications_notificationbus", + "target": "tray_notifications_notificationbus_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L125", + "weight": 1.0, + "source": "tray_notifications_notificationbus", + "target": "tray_notifications_notificationbus_emit", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L153", + "weight": 1.0, + "source": "tray_notifications_notificationbus", + "target": "tray_notifications_notificationbus_flush_pending", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L166", + "weight": 1.0, + "source": "tray_notifications_notificationbus", + "target": "tray_notifications_notificationbus_cancel_all", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L178", + "weight": 1.0, + "source": "tray_notifications_notificationbus", + "target": "tray_notifications_notificationbus_flush", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L100", + "weight": 1.0, + "source": "tray_notifications_rationale_100", + "target": "tray_notifications_notificationbus", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L37", + "weight": 0.8, + "source": "tray_main_trayapp", + "target": "tray_notifications_notificationbus", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L168", + "weight": 1.0, + "source": "tray_main_build_default_components", + "target": "tray_notifications_notificationbus" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L126", + "weight": 1.0, + "source": "tray_notifications_rationale_126", + "target": "tray_notifications_notificationbus_emit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L163", + "weight": 1.0, + "source": "tray_notifications_notificationbus_flush_pending", + "target": "tray_notifications_notificationbus_flush", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L154", + "weight": 1.0, + "source": "tray_notifications_rationale_154", + "target": "tray_notifications_notificationbus_flush_pending", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L167", + "weight": 1.0, + "source": "tray_notifications_rationale_167", + "target": "tray_notifications_notificationbus_cancel_all", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L188", + "weight": 1.0, + "source": "tray_notifications_notificationbus_flush", + "target": "tray_notifications_coalesced_message", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/notifications.py", + "source_location": "L193", + "weight": 1.0, + "source": "tray_notifications_rationale_193", + "target": "tray_notifications_coalesced_message", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L49", + "weight": 1.0, + "source": "src_exlab_wizard_tray_main_py", + "target": "tray_main_trayapp", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L129", + "weight": 1.0, + "source": "src_exlab_wizard_tray_main_py", + "target": "tray_main_build_default_app", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L153", + "weight": 1.0, + "source": "src_exlab_wizard_tray_main_py", + "target": "tray_main_build_default_components", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L194", + "weight": 1.0, + "source": "src_exlab_wizard_tray_main_py", + "target": "tray_main_tray_backend_available", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L207", + "weight": 1.0, + "source": "src_exlab_wizard_tray_main_py", + "target": "tray_main_parse_argv", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L272", + "weight": 1.0, + "source": "src_exlab_wizard_tray_main_py", + "target": "tray_main_bootstrap_test_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L357", + "weight": 1.0, + "source": "src_exlab_wizard_tray_main_py", + "target": "tray_main_run_smoke", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L390", + "weight": 1.0, + "source": "src_exlab_wizard_tray_main_py", + "target": "tray_main_main", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_main_rationale_1", + "target": "src_exlab_wizard_tray_main_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L69", + "weight": 1.0, + "source": "tray_main_trayapp", + "target": "tray_main_trayapp_start_server", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L73", + "weight": 1.0, + "source": "tray_main_trayapp", + "target": "tray_main_trayapp_open_window", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L77", + "weight": 1.0, + "source": "tray_main_trayapp", + "target": "tray_main_trayapp_request_quit", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L91", + "weight": 1.0, + "source": "tray_main_trayapp", + "target": "tray_main_trayapp_shutdown", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L98", + "weight": 1.0, + "source": "tray_main_trayapp", + "target": "tray_main_trayapp_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L177", + "weight": 1.0, + "source": "tray_main_build_default_components", + "target": "tray_main_trayapp", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L50", + "weight": 1.0, + "source": "tray_main_rationale_50", + "target": "tray_main_trayapp", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L40", + "weight": 0.8, + "source": "tray_main_trayapp", + "target": "tray_status_statusticker", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L105", + "weight": 1.0, + "source": "tray_main_trayapp_run", + "target": "tray_main_trayapp_start_server", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L70", + "weight": 1.0, + "source": "tray_main_rationale_70", + "target": "tray_main_trayapp_start_server", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L74", + "weight": 1.0, + "source": "tray_main_rationale_74", + "target": "tray_main_trayapp_open_window", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L80", + "weight": 1.0, + "source": "tray_main_trayapp_request_quit", + "target": "tray_main_trayapp_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L78", + "weight": 1.0, + "source": "tray_main_rationale_78", + "target": "tray_main_trayapp_request_quit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L120", + "weight": 1.0, + "source": "tray_main_trayapp_run", + "target": "tray_main_trayapp_shutdown", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L431", + "weight": 1.0, + "source": "tray_main_main", + "target": "tray_main_trayapp_shutdown", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L92", + "weight": 1.0, + "source": "tray_main_rationale_92", + "target": "tray_main_trayapp_shutdown", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L428", + "weight": 1.0, + "source": "tray_main_main", + "target": "tray_main_trayapp_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L99", + "weight": 1.0, + "source": "tray_main_rationale_99", + "target": "tray_main_trayapp_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L164", + "weight": 1.0, + "source": "tray_main_build_default_components", + "target": "tray_main_build_default_app", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L365", + "weight": 1.0, + "source": "tray_main_run_smoke", + "target": "tray_main_build_default_app", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L130", + "weight": 1.0, + "source": "tray_main_rationale_130", + "target": "tray_main_build_default_app", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L144", + "weight": 1.0, + "source": "tray_main_build_default_app", + "target": "tray_dependencies_build_production_dependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L145", + "weight": 1.0, + "source": "tray_main_build_default_app", + "target": "api_app_create_app" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L149", + "weight": 1.0, + "source": "tray_main_build_default_app", + "target": "tray_storage_secret_load_or_create_storage_secret" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L190", + "weight": 1.0, + "source": "tray_main_build_default_components", + "target": "tray_main_tray_backend_available", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L426", + "weight": 1.0, + "source": "tray_main_main", + "target": "tray_main_build_default_components", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L158", + "weight": 1.0, + "source": "tray_main_rationale_158", + "target": "tray_main_build_default_components", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L169", + "weight": 1.0, + "source": "tray_main_build_default_components", + "target": "tray_status_statusticker" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L195", + "weight": 1.0, + "source": "tray_main_rationale_195", + "target": "tray_main_tray_backend_available", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L397", + "weight": 1.0, + "source": "tray_main_main", + "target": "tray_main_parse_argv", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L208", + "weight": 1.0, + "source": "tray_main_rationale_208", + "target": "tray_main_parse_argv", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L419", + "weight": 1.0, + "source": "tray_main_main", + "target": "tray_main_bootstrap_test_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L273", + "weight": 1.0, + "source": "tray_main_rationale_273", + "target": "tray_main_bootstrap_test_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L424", + "weight": 1.0, + "source": "tray_main_main", + "target": "tray_main_run_smoke", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L358", + "weight": 1.0, + "source": "tray_main_rationale_358", + "target": "tray_main_run_smoke", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L391", + "weight": 1.0, + "source": "tray_main_rationale_391", + "target": "tray_main_main", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/main.py", + "source_location": "L413", + "weight": 1.0, + "source": "tray_main_main", + "target": "logging_manager_configure_logging" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L47", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_build_production_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L167", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_apply_live_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L264", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_plugin_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L270", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_lims_identity", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L282", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_refresh_plugin_host_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L297", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_reload_lims_client", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L318", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_reload_nas_sync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L349", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_reload_quiescence_poller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L377", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_schedule_bringup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L402", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_fire_and_forget", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L415", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_try", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L424", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_load_config_safely", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L432", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_make_save_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L442", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_derive_validator_inputs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L468", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_build_validator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L479", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_build_session_store", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L485", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_build_creation_writer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L491", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_build_equipment_writer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L497", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_build_template_engine", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L503", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_build_plugin_host", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L525", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_build_controller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L559", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_build_keyring_store", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L576", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_lims_keyring_password", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L596", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_check_keyring_present", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L606", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_build_lims_client", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L624", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_nas_keyring_password", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L643", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_check_nas_passwords_present", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L667", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_make_equipment_probe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L732", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_make_lims_probe", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L749", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_build_nas_sync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L791", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_make_nas_sync_snapshot", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L803", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_build_sync_state_writer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L815", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_build_quiescence_poller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L848", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_make_autostart_toggle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L860", + "weight": 1.0, + "source": "src_exlab_wizard_tray_dependencies_py", + "target": "tray_dependencies_make_session_store_snapshot", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_dependencies_rationale_1", + "target": "src_exlab_wizard_tray_dependencies_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L60", + "weight": 1.0, + "source": "tray_dependencies_build_production_dependencies", + "target": "tray_dependencies_try", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L64", + "weight": 1.0, + "source": "tray_dependencies_build_production_dependencies", + "target": "tray_dependencies_make_save_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L103", + "weight": 1.0, + "source": "tray_dependencies_build_production_dependencies", + "target": "tray_dependencies_make_lims_probe", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L120", + "weight": 1.0, + "source": "tray_dependencies_build_production_dependencies", + "target": "tray_dependencies_make_nas_sync_snapshot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L130", + "weight": 1.0, + "source": "tray_dependencies_build_production_dependencies", + "target": "tray_dependencies_make_autostart_toggle", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L152", + "weight": 1.0, + "source": "tray_dependencies_build_production_dependencies", + "target": "tray_dependencies_make_equipment_probe", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L154", + "weight": 1.0, + "source": "tray_dependencies_build_production_dependencies", + "target": "tray_dependencies_make_session_store_snapshot", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L48", + "weight": 1.0, + "source": "tray_dependencies_rationale_48", + "target": "tray_dependencies_build_production_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L57", + "weight": 1.0, + "source": "tray_dependencies_build_production_dependencies", + "target": "api_app_appdependencies" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L210", + "weight": 1.0, + "source": "tray_dependencies_apply_live_config", + "target": "tray_dependencies_try", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L213", + "weight": 1.0, + "source": "tray_dependencies_apply_live_config", + "target": "tray_dependencies_derive_validator_inputs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L220", + "weight": 1.0, + "source": "tray_dependencies_apply_live_config", + "target": "tray_dependencies_plugin_dir", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L224", + "weight": 1.0, + "source": "tray_dependencies_apply_live_config", + "target": "tray_dependencies_refresh_plugin_host_status", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L227", + "weight": 1.0, + "source": "tray_dependencies_apply_live_config", + "target": "tray_dependencies_lims_identity", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L228", + "weight": 1.0, + "source": "tray_dependencies_apply_live_config", + "target": "tray_dependencies_reload_lims_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L254", + "weight": 1.0, + "source": "tray_dependencies_apply_live_config", + "target": "tray_dependencies_reload_nas_sync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L255", + "weight": 1.0, + "source": "tray_dependencies_apply_live_config", + "target": "tray_dependencies_reload_quiescence_poller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L257", + "weight": 1.0, + "source": "tray_dependencies_apply_live_config", + "target": "tray_dependencies_schedule_bringup", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L168", + "weight": 1.0, + "source": "tray_dependencies_rationale_168", + "target": "tray_dependencies_apply_live_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L202", + "weight": 1.0, + "source": "tray_dependencies_apply_live_config", + "target": "logging_manager_configure_logging" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L182", + "weight": 1.0, + "source": "routers_config_apply_live_config", + "target": "tray_dependencies_apply_live_config" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L271", + "weight": 1.0, + "source": "tray_dependencies_rationale_271", + "target": "tray_dependencies_lims_identity", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L283", + "weight": 1.0, + "source": "tray_dependencies_rationale_283", + "target": "tray_dependencies_refresh_plugin_host_status", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L309", + "weight": 1.0, + "source": "tray_dependencies_reload_lims_client", + "target": "tray_dependencies_try", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L315", + "weight": 1.0, + "source": "tray_dependencies_reload_lims_client", + "target": "tray_dependencies_fire_and_forget", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L298", + "weight": 1.0, + "source": "tray_dependencies_rationale_298", + "target": "tray_dependencies_reload_lims_client", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L333", + "weight": 1.0, + "source": "tray_dependencies_reload_nas_sync", + "target": "tray_dependencies_try", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L319", + "weight": 1.0, + "source": "tray_dependencies_rationale_319", + "target": "tray_dependencies_reload_nas_sync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L364", + "weight": 1.0, + "source": "tray_dependencies_reload_quiescence_poller", + "target": "tray_dependencies_try", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L350", + "weight": 1.0, + "source": "tray_dependencies_rationale_350", + "target": "tray_dependencies_reload_quiescence_poller", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L399", + "weight": 1.0, + "source": "tray_dependencies_schedule_bringup", + "target": "tray_dependencies_fire_and_forget", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L378", + "weight": 1.0, + "source": "tray_dependencies_rationale_378", + "target": "tray_dependencies_schedule_bringup", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L403", + "weight": 1.0, + "source": "tray_dependencies_rationale_403", + "target": "tray_dependencies_fire_and_forget", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L416", + "weight": 1.0, + "source": "tray_dependencies_rationale_416", + "target": "tray_dependencies_try", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L471", + "weight": 1.0, + "source": "tray_dependencies_build_validator", + "target": "tray_dependencies_derive_validator_inputs", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L443", + "weight": 1.0, + "source": "tray_dependencies_rationale_443", + "target": "tray_dependencies_derive_validator_inputs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L482", + "weight": 1.0, + "source": "tray_dependencies_build_session_store", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L541", + "weight": 1.0, + "source": "tray_dependencies_build_controller", + "target": "controller_creation_creationcontroller" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L549", + "weight": 1.0, + "source": "tray_dependencies_build_controller", + "target": "readme_generator_readmegenerator" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L560", + "weight": 1.0, + "source": "tray_dependencies_rationale_560", + "target": "tray_dependencies_build_keyring_store", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L603", + "weight": 1.0, + "source": "tray_dependencies_check_keyring_present", + "target": "tray_dependencies_lims_keyring_password", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L577", + "weight": 1.0, + "source": "tray_dependencies_rationale_577", + "target": "tray_dependencies_lims_keyring_password", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L662", + "weight": 1.0, + "source": "tray_dependencies_check_nas_passwords_present", + "target": "tray_dependencies_nas_keyring_password", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L625", + "weight": 1.0, + "source": "tray_dependencies_rationale_625", + "target": "tray_dependencies_nas_keyring_password", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L644", + "weight": 1.0, + "source": "tray_dependencies_rationale_644", + "target": "tray_dependencies_check_nas_passwords_present", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L668", + "weight": 1.0, + "source": "tray_dependencies_rationale_668", + "target": "tray_dependencies_make_equipment_probe", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L757", + "weight": 1.0, + "source": "tray_dependencies_rationale_757", + "target": "tray_dependencies_build_nas_sync", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L781", + "weight": 1.0, + "source": "tray_dependencies_build_nas_sync", + "target": "sync_nas_client_nassyncclient" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L804", + "weight": 1.0, + "source": "tray_dependencies_rationale_804", + "target": "tray_dependencies_build_sync_state_writer", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/tray/dependencies.py", + "source_location": "L841", + "weight": 1.0, + "source": "tray_dependencies_build_quiescence_poller", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L45", + "weight": 1.0, + "source": "src_exlab_wizard_tray_status_py", + "target": "tray_status_statussnapshot", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L53", + "weight": 1.0, + "source": "src_exlab_wizard_tray_status_py", + "target": "tray_status_snapshot_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L76", + "weight": 1.0, + "source": "src_exlab_wizard_tray_status_py", + "target": "tray_status_format_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L91", + "weight": 1.0, + "source": "src_exlab_wizard_tray_status_py", + "target": "tray_status_statusticker", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L162", + "weight": 1.0, + "source": "src_exlab_wizard_tray_status_py", + "target": "tray_status_safe_int", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_status_rationale_1", + "target": "src_exlab_wizard_tray_status_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L69", + "weight": 1.0, + "source": "tray_status_snapshot_status", + "target": "tray_status_statussnapshot", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L46", + "weight": 1.0, + "source": "tray_status_rationale_46", + "target": "tray_status_statussnapshot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L66", + "weight": 1.0, + "source": "tray_status_snapshot_status", + "target": "tray_status_safe_int", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L142", + "weight": 1.0, + "source": "tray_status_statusticker_tick_once", + "target": "tray_status_snapshot_status", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L58", + "weight": 1.0, + "source": "tray_status_rationale_58", + "target": "tray_status_snapshot_status", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L143", + "weight": 1.0, + "source": "tray_status_statusticker_tick_once", + "target": "tray_status_format_status", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L77", + "weight": 1.0, + "source": "tray_status_rationale_77", + "target": "tray_status_format_status", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L100", + "weight": 1.0, + "source": "tray_status_statusticker", + "target": "tray_status_statusticker_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L120", + "weight": 1.0, + "source": "tray_status_statusticker", + "target": "tray_status_statusticker_start", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L129", + "weight": 1.0, + "source": "tray_status_statusticker", + "target": "tray_status_statusticker_stop", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L136", + "weight": 1.0, + "source": "tray_status_statusticker", + "target": "tray_status_statusticker_tick_once", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L156", + "weight": 1.0, + "source": "tray_status_statusticker", + "target": "tray_status_statusticker_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L92", + "weight": 1.0, + "source": "tray_status_rationale_92", + "target": "tray_status_statusticker", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L121", + "weight": 1.0, + "source": "tray_status_rationale_121", + "target": "tray_status_statusticker_start", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L130", + "weight": 1.0, + "source": "tray_status_rationale_130", + "target": "tray_status_statusticker_stop", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L158", + "weight": 1.0, + "source": "tray_status_statusticker_run", + "target": "tray_status_statusticker_tick_once", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L137", + "weight": 1.0, + "source": "tray_status_rationale_137", + "target": "tray_status_statusticker_tick_once", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/status.py", + "source_location": "L163", + "weight": 1.0, + "source": "tray_status_rationale_163", + "target": "tray_status_safe_int", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/storage_secret.py", + "source_location": "L31", + "weight": 1.0, + "source": "src_exlab_wizard_tray_storage_secret_py", + "target": "tray_storage_secret_load_or_create_storage_secret", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/storage_secret.py", + "source_location": "L1", + "weight": 1.0, + "source": "tray_storage_secret_rationale_1", + "target": "src_exlab_wizard_tray_storage_secret_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/tray/storage_secret.py", + "source_location": "L32", + "weight": 1.0, + "source": "tray_storage_secret_rationale_32", + "target": "tray_storage_secret_load_or_create_storage_secret", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L96", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_corefields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L110", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_templatefielddecl", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L128", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_customfield", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L140", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_systemfields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L153", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_readmecontext", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L176", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_readmegenerator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L228", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_validate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L247", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_validate_core_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L270", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_reject_core_redeclaration", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L283", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_validate_required_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L298", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_validate_field_id_uniqueness", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L313", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_validate_typed_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L335", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_check_value_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L378", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_validate_custom_field_labels", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L397", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_is_present", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L418", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_core_fields_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L422", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_custom_fields_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L426", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_system_fields_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L438", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_build_front_matter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L458", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_render_readme_bytes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L476", + "weight": 1.0, + "source": "src_exlab_wizard_readme_generator_py", + "target": "readme_generator_build_readme_fields", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L1", + "weight": 1.0, + "source": "readme_generator_rationale_1", + "target": "src_exlab_wizard_readme_generator_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L97", + "weight": 1.0, + "source": "readme_generator_rationale_97", + "target": "readme_generator_corefields", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L51", + "weight": 0.8, + "source": "readme_generator_corefields", + "target": "api_schemas_readmefieldsjson", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L954", + "weight": 1.0, + "source": "controller_creation_creationcontroller_build_readme_context", + "target": "readme_generator_corefields" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L111", + "weight": 1.0, + "source": "readme_generator_rationale_111", + "target": "readme_generator_templatefielddecl", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L51", + "weight": 0.8, + "source": "readme_generator_templatefielddecl", + "target": "api_schemas_readmefieldsjson", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1288", + "weight": 1.0, + "source": "controller_creation_readme_decls_from_template", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1313", + "weight": 1.0, + "source": "controller_creation_readme_decls_from_config", + "target": "readme_generator_templatefielddecl" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L129", + "weight": 1.0, + "source": "readme_generator_rationale_129", + "target": "readme_generator_customfield", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L51", + "weight": 0.8, + "source": "readme_generator_customfield", + "target": "api_schemas_readmefieldsjson", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L932", + "weight": 1.0, + "source": "controller_creation_creationcontroller_build_readme_context", + "target": "readme_generator_customfield" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L141", + "weight": 1.0, + "source": "readme_generator_rationale_141", + "target": "readme_generator_systemfields", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L51", + "weight": 0.8, + "source": "readme_generator_systemfields", + "target": "api_schemas_readmefieldsjson", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L940", + "weight": 1.0, + "source": "controller_creation_creationcontroller_build_readme_context", + "target": "readme_generator_systemfields" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L154", + "weight": 1.0, + "source": "readme_generator_rationale_154", + "target": "readme_generator_readmecontext", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L51", + "weight": 0.8, + "source": "readme_generator_readmecontext", + "target": "api_schemas_readmefieldsjson", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L952", + "weight": 1.0, + "source": "controller_creation_creationcontroller_build_readme_context", + "target": "readme_generator_readmecontext" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L179", + "weight": 1.0, + "source": "readme_generator_readmegenerator", + "target": "readme_generator_readmegenerator_generate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L197", + "weight": 1.0, + "source": "readme_generator_readmegenerator", + "target": "readme_generator_readmegenerator_generate_sync", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L177", + "weight": 1.0, + "source": "readme_generator_rationale_177", + "target": "readme_generator_readmegenerator", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L51", + "weight": 0.8, + "source": "readme_generator_readmegenerator", + "target": "api_schemas_readmefieldsjson", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L180", + "weight": 1.0, + "source": "readme_generator_rationale_180", + "target": "readme_generator_readmegenerator_generate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L198", + "weight": 1.0, + "source": "readme_generator_readmegenerator_generate_sync", + "target": "readme_generator_validate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L206", + "weight": 1.0, + "source": "readme_generator_readmegenerator_generate_sync", + "target": "readme_generator_build_front_matter", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L207", + "weight": 1.0, + "source": "readme_generator_readmegenerator_generate_sync", + "target": "readme_generator_render_readme_bytes", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L208", + "weight": 1.0, + "source": "readme_generator_readmegenerator_generate_sync", + "target": "readme_generator_build_readme_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L236", + "weight": 1.0, + "source": "readme_generator_validate", + "target": "readme_generator_validate_core_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L237", + "weight": 1.0, + "source": "readme_generator_validate", + "target": "readme_generator_reject_core_redeclaration", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L239", + "weight": 1.0, + "source": "readme_generator_validate", + "target": "readme_generator_validate_required_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L241", + "weight": 1.0, + "source": "readme_generator_validate", + "target": "readme_generator_validate_field_id_uniqueness", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L242", + "weight": 1.0, + "source": "readme_generator_validate", + "target": "readme_generator_validate_typed_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L244", + "weight": 1.0, + "source": "readme_generator_validate", + "target": "readme_generator_validate_custom_field_labels", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L229", + "weight": 1.0, + "source": "readme_generator_rationale_229", + "target": "readme_generator_validate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L294", + "weight": 1.0, + "source": "readme_generator_validate_required_fields", + "target": "readme_generator_is_present", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L330", + "weight": 1.0, + "source": "readme_generator_validate_typed_fields", + "target": "readme_generator_is_present", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L332", + "weight": 1.0, + "source": "readme_generator_validate_typed_fields", + "target": "readme_generator_check_value_type", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L319", + "weight": 1.0, + "source": "readme_generator_rationale_319", + "target": "readme_generator_validate_typed_fields", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L379", + "weight": 1.0, + "source": "readme_generator_rationale_379", + "target": "readme_generator_validate_custom_field_labels", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L398", + "weight": 1.0, + "source": "readme_generator_rationale_398", + "target": "readme_generator_is_present", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L450", + "weight": 1.0, + "source": "readme_generator_build_front_matter", + "target": "readme_generator_core_fields_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L485", + "weight": 1.0, + "source": "readme_generator_build_readme_fields", + "target": "readme_generator_core_fields_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L453", + "weight": 1.0, + "source": "readme_generator_build_front_matter", + "target": "readme_generator_custom_fields_list", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L488", + "weight": 1.0, + "source": "readme_generator_build_readme_fields", + "target": "readme_generator_custom_fields_list", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L454", + "weight": 1.0, + "source": "readme_generator_build_front_matter", + "target": "readme_generator_system_fields_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L489", + "weight": 1.0, + "source": "readme_generator_build_readme_fields", + "target": "readme_generator_system_fields_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L439", + "weight": 1.0, + "source": "readme_generator_rationale_439", + "target": "readme_generator_build_front_matter", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L459", + "weight": 1.0, + "source": "readme_generator_rationale_459", + "target": "readme_generator_render_readme_bytes", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L481", + "weight": 1.0, + "source": "readme_generator_rationale_481", + "target": "readme_generator_build_readme_fields", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/readme/generator.py", + "source_location": "L482", + "weight": 1.0, + "source": "readme_generator_build_readme_fields", + "target": "api_schemas_readmefieldsjson" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L141", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_projectcreaterequest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L160", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_runcreaterequest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L185", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_sessionhandle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L199", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_readmegeneratorprotocol", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L210", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_noopreadmegenerator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L226", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_nassyncprotocol", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L232", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_noopnassync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L244", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_creationcontroller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L290", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_session_store", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L733", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_short_id_for", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L749", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_project_name_for", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L782", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_run_kind_value_for", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1226", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_format_error", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1256", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_required_field_ids", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1269", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_readme_decls_from_template", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1301", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_readme_decls_from_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1326", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_os_username", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1339", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_has_hard_finding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1343", + "weight": 1.0, + "source": "src_exlab_wizard_controller_creation_py", + "target": "controller_creation_attach_resolved", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1", + "weight": 1.0, + "source": "controller_creation_rationale_1", + "target": "src_exlab_wizard_controller_creation_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L142", + "weight": 1.0, + "source": "controller_creation_rationale_142", + "target": "controller_creation_projectcreaterequest", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "api_schemas_equipmentjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "api_schemas_orchestratorblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "api_schemas_pluginapplied", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "api_schemas_pluginisolation", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "controller_session_store_session", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "controller_state_machine_phase", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_projectcreaterequest", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L285", + "weight": 1.0, + "source": "routers_sessions_build_project_request", + "target": "controller_creation_projectcreaterequest" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L161", + "weight": 1.0, + "source": "controller_creation_rationale_161", + "target": "controller_creation_runcreaterequest", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "api_schemas_equipmentjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "api_schemas_orchestratorblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "api_schemas_pluginapplied", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "api_schemas_pluginisolation", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "controller_session_store_session", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "controller_state_machine_phase", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_runcreaterequest", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L301", + "weight": 1.0, + "source": "routers_sessions_build_run_request", + "target": "controller_creation_runcreaterequest" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1218", + "weight": 1.0, + "source": "controller_creation_creationcontroller_handle", + "target": "controller_creation_sessionhandle", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L186", + "weight": 1.0, + "source": "controller_creation_rationale_186", + "target": "controller_creation_sessionhandle", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "api_schemas_equipmentjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "api_schemas_orchestratorblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "api_schemas_pluginapplied", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "api_schemas_pluginisolation", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "controller_session_store_session", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "controller_state_machine_phase", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_sessionhandle", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L207", + "weight": 1.0, + "source": "controller_creation_readmegeneratorprotocol", + "target": "controller_creation_readmegeneratorprotocol_generate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L200", + "weight": 1.0, + "source": "controller_creation_rationale_200", + "target": "controller_creation_readmegeneratorprotocol", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "api_schemas_equipmentjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "api_schemas_orchestratorblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "api_schemas_pluginapplied", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "api_schemas_pluginisolation", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "controller_session_store_session", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "controller_state_machine_phase", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_readmegeneratorprotocol", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L219", + "weight": 1.0, + "source": "controller_creation_noopreadmegenerator", + "target": "controller_creation_noopreadmegenerator_generate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L274", + "weight": 1.0, + "source": "controller_creation_creationcontroller_init", + "target": "controller_creation_noopreadmegenerator", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L211", + "weight": 1.0, + "source": "controller_creation_rationale_211", + "target": "controller_creation_noopreadmegenerator", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "api_schemas_equipmentjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "api_schemas_orchestratorblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "api_schemas_pluginapplied", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "api_schemas_pluginisolation", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "controller_session_store_session", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "controller_state_machine_phase", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_noopreadmegenerator", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L976", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "controller_creation_noopreadmegenerator_generate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L229", + "weight": 1.0, + "source": "controller_creation_nassyncprotocol", + "target": "controller_creation_nassyncprotocol_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L227", + "weight": 1.0, + "source": "controller_creation_rationale_227", + "target": "controller_creation_nassyncprotocol", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "api_schemas_equipmentjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "api_schemas_orchestratorblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "api_schemas_pluginapplied", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "api_schemas_pluginisolation", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "controller_session_store_session", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "controller_state_machine_phase", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_nassyncprotocol", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L235", + "weight": 1.0, + "source": "controller_creation_noopnassync", + "target": "controller_creation_noopnassync_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L276", + "weight": 1.0, + "source": "controller_creation_creationcontroller_init", + "target": "controller_creation_noopnassync", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L233", + "weight": 1.0, + "source": "controller_creation_rationale_233", + "target": "controller_creation_noopnassync", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "api_schemas_equipmentjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "api_schemas_orchestratorblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "api_schemas_pluginapplied", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "api_schemas_pluginisolation", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "controller_session_store_session", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "controller_state_machine_phase", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_noopnassync", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L690", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "controller_creation_noopnassync_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L252", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L294", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_apply_config", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L311", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_create_project", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L324", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_create_run", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L329", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_resume", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L353", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_cancel", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L396", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_status", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L403", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_subscribe", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L427", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_launch", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L465", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_validate_inputs", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L607", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_run_pipeline", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L627", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_pipeline_states", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L728", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_resolve_template", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L762", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_resolve_run_lims_block", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L793", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_compose_destination_path", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L810", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_render", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L837", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_plugin_pass", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L898", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_build_readme_context", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L963", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_write_cache", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1078", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_write_equipment_json", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1114", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_post_validate", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1162", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_transition", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1183", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_publish", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1188", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_fail", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1198", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_cleanup", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1217", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_handle", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1231", + "weight": 1.0, + "source": "controller_creation_creationcontroller", + "target": "controller_creation_creationcontroller_append_log", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L245", + "weight": 1.0, + "source": "controller_creation_rationale_245", + "target": "controller_creation_creationcontroller", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "api_schemas_equipmentjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "api_schemas_limsprojectblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "api_schemas_orchestratorblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "api_schemas_pathsblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "api_schemas_pluginapplied", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "api_schemas_pluginisolation", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L46", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "api_schemas_templateblock", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "controller_session_store_session", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L79", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "controller_session_store_sessionstore", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "controller_state_machine_phase", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L80", + "weight": 0.8, + "source": "controller_creation_creationcontroller", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L278", + "weight": 1.0, + "source": "controller_creation_creationcontroller_init", + "target": "controller_session_store_sessionstore" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L295", + "weight": 1.0, + "source": "controller_creation_rationale_295", + "target": "controller_creation_creationcontroller_apply_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L322", + "weight": 1.0, + "source": "controller_creation_creationcontroller_create_project", + "target": "controller_creation_creationcontroller_launch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L312", + "weight": 1.0, + "source": "controller_creation_rationale_312", + "target": "controller_creation_creationcontroller_create_project", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L327", + "weight": 1.0, + "source": "controller_creation_creationcontroller_create_run", + "target": "controller_creation_creationcontroller_launch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L325", + "weight": 1.0, + "source": "controller_creation_rationale_325", + "target": "controller_creation_creationcontroller_create_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L351", + "weight": 1.0, + "source": "controller_creation_creationcontroller_resume", + "target": "controller_creation_creationcontroller_handle", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L330", + "weight": 1.0, + "source": "controller_creation_rationale_330", + "target": "controller_creation_creationcontroller_resume", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L394", + "weight": 1.0, + "source": "controller_creation_creationcontroller_cancel", + "target": "controller_creation_creationcontroller_cleanup", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L354", + "weight": 1.0, + "source": "controller_creation_rationale_354", + "target": "controller_creation_creationcontroller_cancel", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L401", + "weight": 1.0, + "source": "controller_creation_creationcontroller_status", + "target": "controller_creation_creationcontroller_handle", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L397", + "weight": 1.0, + "source": "controller_creation_rationale_397", + "target": "controller_creation_creationcontroller_status", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L404", + "weight": 1.0, + "source": "controller_creation_rationale_404", + "target": "controller_creation_creationcontroller_subscribe", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L444", + "weight": 1.0, + "source": "controller_creation_creationcontroller_launch", + "target": "controller_creation_creationcontroller_transition", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L446", + "weight": 1.0, + "source": "controller_creation_creationcontroller_launch", + "target": "controller_creation_creationcontroller_validate_inputs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L448", + "weight": 1.0, + "source": "controller_creation_creationcontroller_launch", + "target": "controller_creation_creationcontroller_fail", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L448", + "weight": 1.0, + "source": "controller_creation_creationcontroller_launch", + "target": "controller_creation_format_error", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L449", + "weight": 1.0, + "source": "controller_creation_creationcontroller_launch", + "target": "controller_creation_creationcontroller_handle", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L457", + "weight": 1.0, + "source": "controller_creation_creationcontroller_launch", + "target": "controller_creation_creationcontroller_run_pipeline", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L428", + "weight": 1.0, + "source": "controller_creation_rationale_428", + "target": "controller_creation_creationcontroller_launch", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L501", + "weight": 1.0, + "source": "controller_creation_creationcontroller_validate_inputs", + "target": "controller_creation_project_name_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L575", + "weight": 1.0, + "source": "controller_creation_creationcontroller_validate_inputs", + "target": "controller_creation_creationcontroller_resolve_template", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L576", + "weight": 1.0, + "source": "controller_creation_creationcontroller_validate_inputs", + "target": "controller_creation_attach_resolved", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L580", + "weight": 1.0, + "source": "controller_creation_creationcontroller_validate_inputs", + "target": "controller_creation_required_field_ids", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L466", + "weight": 1.0, + "source": "controller_creation_rationale_466", + "target": "controller_creation_creationcontroller_validate_inputs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L610", + "weight": 1.0, + "source": "controller_creation_creationcontroller_run_pipeline", + "target": "controller_creation_creationcontroller_pipeline_states", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L620", + "weight": 1.0, + "source": "controller_creation_creationcontroller_run_pipeline", + "target": "controller_creation_creationcontroller_cleanup", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L621", + "weight": 1.0, + "source": "controller_creation_creationcontroller_run_pipeline", + "target": "controller_creation_creationcontroller_publish", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L624", + "weight": 1.0, + "source": "controller_creation_creationcontroller_run_pipeline", + "target": "controller_creation_format_error", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L625", + "weight": 1.0, + "source": "controller_creation_creationcontroller_run_pipeline", + "target": "controller_creation_creationcontroller_fail", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L608", + "weight": 1.0, + "source": "controller_creation_rationale_608", + "target": "controller_creation_creationcontroller_run_pipeline", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L631", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "controller_creation_creationcontroller_compose_destination_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L653", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "controller_creation_creationcontroller_resolve_run_lims_block", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L656", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "controller_creation_creationcontroller_render", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L659", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "controller_creation_creationcontroller_transition", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L660", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "controller_creation_creationcontroller_plugin_pass", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L664", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "controller_creation_creationcontroller_fail", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L672", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "controller_creation_creationcontroller_write_cache", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L683", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "controller_creation_creationcontroller_post_validate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L684", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "controller_creation_has_hard_finding", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L701", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "controller_creation_creationcontroller_publish", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L722", + "weight": 1.0, + "source": "controller_creation_creationcontroller_pipeline_states", + "target": "controller_creation_creationcontroller_append_log", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L628", + "weight": 1.0, + "source": "controller_creation_rationale_628", + "target": "controller_creation_creationcontroller_pipeline_states", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L832", + "weight": 1.0, + "source": "controller_creation_creationcontroller_render", + "target": "controller_creation_short_id_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L853", + "weight": 1.0, + "source": "controller_creation_creationcontroller_plugin_pass", + "target": "controller_creation_short_id_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L948", + "weight": 1.0, + "source": "controller_creation_creationcontroller_build_readme_context", + "target": "controller_creation_short_id_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L799", + "weight": 1.0, + "source": "controller_creation_creationcontroller_compose_destination_path", + "target": "controller_creation_project_name_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L831", + "weight": 1.0, + "source": "controller_creation_creationcontroller_render", + "target": "controller_creation_project_name_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1002", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "controller_creation_project_name_for", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L763", + "weight": 1.0, + "source": "controller_creation_rationale_763", + "target": "controller_creation_creationcontroller_resolve_run_lims_block", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L950", + "weight": 1.0, + "source": "controller_creation_creationcontroller_build_readme_context", + "target": "controller_creation_run_kind_value_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1007", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "controller_creation_run_kind_value_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1154", + "weight": 1.0, + "source": "controller_creation_creationcontroller_post_validate", + "target": "controller_creation_run_kind_value_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1206", + "weight": 1.0, + "source": "controller_creation_creationcontroller_cleanup", + "target": "controller_creation_creationcontroller_compose_destination_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L816", + "weight": 1.0, + "source": "controller_creation_rationale_816", + "target": "controller_creation_creationcontroller_render", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L914", + "weight": 1.0, + "source": "controller_creation_creationcontroller_build_readme_context", + "target": "controller_creation_readme_decls_from_template", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L915", + "weight": 1.0, + "source": "controller_creation_creationcontroller_build_readme_context", + "target": "controller_creation_readme_decls_from_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L942", + "weight": 1.0, + "source": "controller_creation_creationcontroller_build_readme_context", + "target": "controller_creation_os_username", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L975", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "controller_creation_creationcontroller_build_readme_context", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L905", + "weight": 1.0, + "source": "controller_creation_rationale_905", + "target": "controller_creation_creationcontroller_build_readme_context", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1074", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "controller_creation_creationcontroller_write_equipment_json", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L973", + "weight": 1.0, + "source": "controller_creation_rationale_973", + "target": "controller_creation_creationcontroller_write_cache", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L991", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "api_schemas_limsprojectblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1019", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "api_schemas_pluginapplied" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1024", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "api_schemas_pluginisolation" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1040", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "api_schemas_orchestratorblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1047", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "api_schemas_creationjson" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1054", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "api_schemas_templateblock" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1061", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_cache", + "target": "api_schemas_pathsblock" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1083", + "weight": 1.0, + "source": "controller_creation_rationale_1083", + "target": "controller_creation_creationcontroller_write_equipment_json", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1103", + "weight": 1.0, + "source": "controller_creation_creationcontroller_write_equipment_json", + "target": "api_schemas_equipmentjson" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1120", + "weight": 1.0, + "source": "controller_creation_rationale_1120", + "target": "controller_creation_creationcontroller_post_validate", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1174", + "weight": 1.0, + "source": "controller_creation_creationcontroller_transition", + "target": "controller_creation_creationcontroller_publish", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1164", + "weight": 1.0, + "source": "controller_creation_creationcontroller_transition", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1192", + "weight": 1.0, + "source": "controller_creation_creationcontroller_fail", + "target": "controller_creation_creationcontroller_publish", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1196", + "weight": 1.0, + "source": "controller_creation_creationcontroller_fail", + "target": "controller_creation_creationcontroller_cleanup", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1199", + "weight": 1.0, + "source": "controller_creation_rationale_1199", + "target": "controller_creation_creationcontroller_cleanup", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1232", + "weight": 1.0, + "source": "controller_creation_rationale_1232", + "target": "controller_creation_creationcontroller_append_log", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1257", + "weight": 1.0, + "source": "controller_creation_rationale_1257", + "target": "controller_creation_required_field_ids", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1270", + "weight": 1.0, + "source": "controller_creation_rationale_1270", + "target": "controller_creation_readme_decls_from_template", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1302", + "weight": 1.0, + "source": "controller_creation_rationale_1302", + "target": "controller_creation_readme_decls_from_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1327", + "weight": 1.0, + "source": "controller_creation_rationale_1327", + "target": "controller_creation_os_username", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/creation.py", + "source_location": "L1346", + "weight": 1.0, + "source": "controller_creation_rationale_1346", + "target": "controller_creation_attach_resolved", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L45", + "weight": 1.0, + "source": "src_exlab_wizard_controller_state_machine_py", + "target": "controller_state_machine_sessionstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L66", + "weight": 1.0, + "source": "src_exlab_wizard_controller_state_machine_py", + "target": "controller_state_machine_phase", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L102", + "weight": 1.0, + "source": "src_exlab_wizard_controller_state_machine_py", + "target": "controller_state_machine_state_to_phase", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L139", + "weight": 1.0, + "source": "src_exlab_wizard_controller_state_machine_py", + "target": "controller_state_machine_build_valid_transitions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L159", + "weight": 1.0, + "source": "src_exlab_wizard_controller_state_machine_py", + "target": "controller_state_machine_assert_transition", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L1", + "weight": 1.0, + "source": "controller_state_machine_rationale_1", + "target": "src_exlab_wizard_controller_state_machine_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L46", + "weight": 1.0, + "source": "controller_state_machine_rationale_46", + "target": "controller_state_machine_sessionstate", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L30", + "weight": 0.8, + "source": "controller_session_store_session", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L30", + "weight": 0.8, + "source": "controller_session_store_sessionstore", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L30", + "weight": 0.8, + "source": "routers_operations_operationentry", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L30", + "weight": 0.8, + "source": "routers_operations_operationsresponse", + "target": "controller_state_machine_sessionstate", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L67", + "weight": 1.0, + "source": "controller_state_machine_rationale_67", + "target": "controller_state_machine_phase", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L30", + "weight": 0.8, + "source": "controller_session_store_session", + "target": "controller_state_machine_phase", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L30", + "weight": 0.8, + "source": "controller_session_store_sessionstore", + "target": "controller_state_machine_phase", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L103", + "weight": 1.0, + "source": "controller_state_machine_rationale_103", + "target": "controller_state_machine_state_to_phase", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L152", + "weight": 1.0, + "source": "controller_session_store_sessionstore_transition", + "target": "controller_state_machine_state_to_phase" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L140", + "weight": 1.0, + "source": "controller_state_machine_rationale_140", + "target": "controller_state_machine_build_valid_transitions", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/state_machine.py", + "source_location": "L160", + "weight": 1.0, + "source": "controller_state_machine_rationale_160", + "target": "controller_state_machine_assert_transition", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L150", + "weight": 1.0, + "source": "controller_session_store_sessionstore_transition", + "target": "controller_state_machine_assert_transition" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L46", + "weight": 1.0, + "source": "src_exlab_wizard_controller_session_store_py", + "target": "controller_session_store_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L92", + "weight": 1.0, + "source": "src_exlab_wizard_controller_session_store_py", + "target": "controller_session_store_sessionstore", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L259", + "weight": 1.0, + "source": "src_exlab_wizard_controller_session_store_py", + "target": "controller_session_store_on_operations_panel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L270", + "weight": 1.0, + "source": "src_exlab_wizard_controller_session_store_py", + "target": "controller_session_store_project_identifier", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L1", + "weight": 1.0, + "source": "controller_session_store_rationale_1", + "target": "src_exlab_wizard_controller_session_store_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L87", + "weight": 1.0, + "source": "controller_session_store_session", + "target": "controller_session_store_session_is_terminal", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L108", + "weight": 1.0, + "source": "controller_session_store_sessionstore_open", + "target": "controller_session_store_session", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L47", + "weight": 1.0, + "source": "controller_session_store_rationale_47", + "target": "controller_session_store_session", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L88", + "weight": 1.0, + "source": "controller_session_store_rationale_88", + "target": "controller_session_store_session_is_terminal", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L99", + "weight": 1.0, + "source": "controller_session_store_sessionstore", + "target": "controller_session_store_sessionstore_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L104", + "weight": 1.0, + "source": "controller_session_store_sessionstore", + "target": "controller_session_store_sessionstore_open", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L125", + "weight": 1.0, + "source": "controller_session_store_sessionstore", + "target": "controller_session_store_sessionstore_get", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L129", + "weight": 1.0, + "source": "controller_session_store_sessionstore", + "target": "controller_session_store_sessionstore_iter_sorted", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L138", + "weight": 1.0, + "source": "controller_session_store_sessionstore", + "target": "controller_session_store_sessionstore_transition", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L159", + "weight": 1.0, + "source": "controller_session_store_sessionstore", + "target": "controller_session_store_sessionstore_attach_event_queue", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L171", + "weight": 1.0, + "source": "controller_session_store_sessionstore", + "target": "controller_session_store_sessionstore_heartbeat", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L182", + "weight": 1.0, + "source": "controller_session_store_sessionstore", + "target": "controller_session_store_sessionstore_close", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L202", + "weight": 1.0, + "source": "controller_session_store_sessionstore", + "target": "controller_session_store_sessionstore_abandoned_older_than", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L218", + "weight": 1.0, + "source": "controller_session_store_sessionstore", + "target": "controller_session_store_sessionstore_gc_loop", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L236", + "weight": 1.0, + "source": "controller_session_store_sessionstore", + "target": "controller_session_store_sessionstore_gc_once", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L93", + "weight": 1.0, + "source": "controller_session_store_rationale_93", + "target": "controller_session_store_sessionstore", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L105", + "weight": 1.0, + "source": "controller_session_store_rationale_105", + "target": "controller_session_store_sessionstore_open", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L147", + "weight": 1.0, + "source": "controller_session_store_sessionstore_transition", + "target": "controller_session_store_sessionstore_get", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L166", + "weight": 1.0, + "source": "controller_session_store_sessionstore_attach_event_queue", + "target": "controller_session_store_sessionstore_get", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L177", + "weight": 1.0, + "source": "controller_session_store_sessionstore_heartbeat", + "target": "controller_session_store_sessionstore_get", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L192", + "weight": 1.0, + "source": "controller_session_store_sessionstore_close", + "target": "controller_session_store_sessionstore_get", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L239", + "weight": 1.0, + "source": "controller_session_store_sessionstore_gc_once", + "target": "controller_session_store_sessionstore_get", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L284", + "weight": 1.0, + "source": "controller_session_store_project_identifier", + "target": "controller_session_store_sessionstore_get", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L126", + "weight": 1.0, + "source": "controller_session_store_rationale_126", + "target": "controller_session_store_sessionstore_get", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L130", + "weight": 1.0, + "source": "controller_session_store_rationale_130", + "target": "controller_session_store_sessionstore_iter_sorted", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L243", + "weight": 1.0, + "source": "controller_session_store_sessionstore_gc_once", + "target": "controller_session_store_sessionstore_transition", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L139", + "weight": 1.0, + "source": "controller_session_store_rationale_139", + "target": "controller_session_store_sessionstore_transition", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L160", + "weight": 1.0, + "source": "controller_session_store_rationale_160", + "target": "controller_session_store_sessionstore_attach_event_queue", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L172", + "weight": 1.0, + "source": "controller_session_store_rationale_172", + "target": "controller_session_store_sessionstore_heartbeat", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L245", + "weight": 1.0, + "source": "controller_session_store_sessionstore_gc_once", + "target": "controller_session_store_sessionstore_close", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L183", + "weight": 1.0, + "source": "controller_session_store_rationale_183", + "target": "controller_session_store_sessionstore_close", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L238", + "weight": 1.0, + "source": "controller_session_store_sessionstore_gc_once", + "target": "controller_session_store_sessionstore_abandoned_older_than", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L203", + "weight": 1.0, + "source": "controller_session_store_rationale_203", + "target": "controller_session_store_sessionstore_abandoned_older_than", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L232", + "weight": 1.0, + "source": "controller_session_store_sessionstore_gc_loop", + "target": "controller_session_store_sessionstore_gc_once", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L219", + "weight": 1.0, + "source": "controller_session_store_rationale_219", + "target": "controller_session_store_sessionstore_gc_loop", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L237", + "weight": 1.0, + "source": "controller_session_store_rationale_237", + "target": "controller_session_store_sessionstore_gc_once", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L260", + "weight": 1.0, + "source": "controller_session_store_rationale_260", + "target": "controller_session_store_on_operations_panel", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/controller/session_store.py", + "source_location": "L271", + "weight": 1.0, + "source": "controller_session_store_rationale_271", + "target": "controller_session_store_project_identifier", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L103", + "weight": 1.0, + "source": "routers_operations_session_to_entry", + "target": "controller_session_store_project_identifier" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L42", + "weight": 1.0, + "source": "src_exlab_wizard_window_pywebview_app_py", + "target": "window_pywebview_app_build_window_url", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L51", + "weight": 1.0, + "source": "src_exlab_wizard_window_pywebview_app_py", + "target": "window_pywebview_app_is_debug_enabled", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L59", + "weight": 1.0, + "source": "src_exlab_wizard_window_pywebview_app_py", + "target": "window_pywebview_app_run_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L93", + "weight": 1.0, + "source": "src_exlab_wizard_window_pywebview_app_py", + "target": "window_pywebview_app_import_webview", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L1", + "weight": 1.0, + "source": "window_pywebview_app_rationale_1", + "target": "src_exlab_wizard_window_pywebview_app_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L71", + "weight": 1.0, + "source": "window_pywebview_app_run_window", + "target": "window_pywebview_app_build_window_url", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L43", + "weight": 1.0, + "source": "window_pywebview_app_rationale_43", + "target": "window_pywebview_app_build_window_url", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L72", + "weight": 1.0, + "source": "window_pywebview_app_run_window", + "target": "window_pywebview_app_is_debug_enabled", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L52", + "weight": 1.0, + "source": "window_pywebview_app_rationale_52", + "target": "window_pywebview_app_is_debug_enabled", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L76", + "weight": 1.0, + "source": "window_pywebview_app_run_window", + "target": "window_pywebview_app_import_webview", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L65", + "weight": 1.0, + "source": "window_pywebview_app_rationale_65", + "target": "window_pywebview_app_run_window", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L177", + "weight": 1.0, + "source": "window_main_default_handoff", + "target": "window_pywebview_app_run_window" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/pywebview_app.py", + "source_location": "L94", + "weight": 1.0, + "source": "window_pywebview_app_rationale_94", + "target": "window_pywebview_app_import_webview", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L38", + "weight": 1.0, + "source": "src_exlab_wizard_window_main_py", + "target": "window_main_serverhandshake", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L49", + "weight": 1.0, + "source": "src_exlab_wizard_window_main_py", + "target": "window_main_read_server_handshake", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L74", + "weight": 1.0, + "source": "src_exlab_wizard_window_main_py", + "target": "window_main_is_pid_alive", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L92", + "weight": 1.0, + "source": "src_exlab_wizard_window_main_py", + "target": "window_main_posix_is_pid_alive", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L110", + "weight": 1.0, + "source": "src_exlab_wizard_window_main_py", + "target": "window_main_win_is_pid_alive", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L133", + "weight": 1.0, + "source": "src_exlab_wizard_window_main_py", + "target": "window_main_main", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L173", + "weight": 1.0, + "source": "src_exlab_wizard_window_main_py", + "target": "window_main_default_handoff", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L1", + "weight": 1.0, + "source": "window_main_rationale_1", + "target": "src_exlab_wizard_window_main_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L43", + "weight": 1.0, + "source": "window_main_serverhandshake", + "target": "window_main_serverhandshake_init", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L65", + "weight": 1.0, + "source": "window_main_read_server_handshake", + "target": "window_main_serverhandshake", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L39", + "weight": 1.0, + "source": "window_main_rationale_39", + "target": "window_main_serverhandshake", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L154", + "weight": 1.0, + "source": "window_main_main", + "target": "window_main_read_server_handshake", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L50", + "weight": 1.0, + "source": "window_main_rationale_50", + "target": "window_main_read_server_handshake", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L88", + "weight": 1.0, + "source": "window_main_is_pid_alive", + "target": "window_main_win_is_pid_alive", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L89", + "weight": 1.0, + "source": "window_main_is_pid_alive", + "target": "window_main_posix_is_pid_alive", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L75", + "weight": 1.0, + "source": "window_main_rationale_75", + "target": "window_main_is_pid_alive", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L140", + "weight": 1.0, + "source": "window_main_rationale_140", + "target": "window_main_main", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/window/main.py", + "source_location": "L174", + "weight": 1.0, + "source": "window_main_rationale_174", + "target": "window_main_default_handoff", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L35", + "weight": 1.0, + "source": "src_exlab_wizard_api_health_py", + "target": "api_health_healthresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L47", + "weight": 1.0, + "source": "src_exlab_wizard_api_health_py", + "target": "api_health_build_health_router", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L72", + "weight": 1.0, + "source": "src_exlab_wizard_api_health_py", + "target": "api_health_component_rollup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L83", + "weight": 1.0, + "source": "src_exlab_wizard_api_health_py", + "target": "api_health_validator_health", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L91", + "weight": 1.0, + "source": "src_exlab_wizard_api_health_py", + "target": "api_health_nas_sync_health", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L116", + "weight": 1.0, + "source": "src_exlab_wizard_api_health_py", + "target": "api_health_lims_health", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L131", + "weight": 1.0, + "source": "src_exlab_wizard_api_health_py", + "target": "api_health_plugin_host_health", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L144", + "weight": 1.0, + "source": "src_exlab_wizard_api_health_py", + "target": "api_health_session_store_health", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L161", + "weight": 1.0, + "source": "src_exlab_wizard_api_health_py", + "target": "api_health_top_level_status", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_health_rationale_1", + "target": "src_exlab_wizard_api_health_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L36", + "weight": 1.0, + "source": "api_health_rationale_36", + "target": "api_health_healthresponse", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L48", + "weight": 1.0, + "source": "api_health_rationale_48", + "target": "api_health_build_health_router", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L320", + "weight": 1.0, + "source": "api_app_create_app", + "target": "api_health_build_health_router" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L75", + "weight": 1.0, + "source": "api_health_component_rollup", + "target": "api_health_validator_health", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L76", + "weight": 1.0, + "source": "api_health_component_rollup", + "target": "api_health_nas_sync_health", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L77", + "weight": 1.0, + "source": "api_health_component_rollup", + "target": "api_health_lims_health", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L78", + "weight": 1.0, + "source": "api_health_component_rollup", + "target": "api_health_plugin_host_health", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L79", + "weight": 1.0, + "source": "api_health_component_rollup", + "target": "api_health_session_store_health", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L73", + "weight": 1.0, + "source": "api_health_rationale_73", + "target": "api_health_component_rollup", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/health.py", + "source_location": "L162", + "weight": 1.0, + "source": "api_health_rationale_162", + "target": "api_health_top_level_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L31", + "weight": 1.0, + "source": "src_exlab_wizard_api_dependencies_py", + "target": "api_dependencies_lims_password_present", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L51", + "weight": 1.0, + "source": "src_exlab_wizard_api_dependencies_py", + "target": "api_dependencies_nas_password_present", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L75", + "weight": 1.0, + "source": "src_exlab_wizard_api_dependencies_py", + "target": "api_dependencies_require_deps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L95", + "weight": 1.0, + "source": "src_exlab_wizard_api_dependencies_py", + "target": "api_dependencies_require_controller", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_dependencies_rationale_1", + "target": "src_exlab_wizard_api_dependencies_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L32", + "weight": 1.0, + "source": "api_dependencies_rationale_32", + "target": "api_dependencies_lims_password_present", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L167", + "weight": 1.0, + "source": "api_setup_compute_setup_state", + "target": "api_dependencies_lims_password_present" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L52", + "weight": 1.0, + "source": "api_dependencies_rationale_52", + "target": "api_dependencies_nas_password_present", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L168", + "weight": 1.0, + "source": "api_setup_compute_setup_state", + "target": "api_dependencies_nas_password_present" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L203", + "weight": 1.0, + "source": "api_setup_setup_state_gate", + "target": "api_dependencies_nas_password_present" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L76", + "weight": 1.0, + "source": "api_dependencies_rationale_76", + "target": "api_dependencies_require_deps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L335", + "weight": 1.0, + "source": "routers_problems_require_validator", + "target": "api_dependencies_require_deps" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L349", + "weight": 1.0, + "source": "routers_problems_require_cache_writer", + "target": "api_dependencies_require_deps" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/_dependencies.py", + "source_location": "L96", + "weight": 1.0, + "source": "api_dependencies_rationale_96", + "target": "api_dependencies_require_controller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L46", + "weight": 1.0, + "source": "src_exlab_wizard_api_events_py", + "target": "api_events_phaseevent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L63", + "weight": 1.0, + "source": "src_exlab_wizard_api_events_py", + "target": "api_events_progressevent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L76", + "weight": 1.0, + "source": "src_exlab_wizard_api_events_py", + "target": "api_events_inputrequiredevent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L96", + "weight": 1.0, + "source": "src_exlab_wizard_api_events_py", + "target": "api_events_warningevent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L113", + "weight": 1.0, + "source": "src_exlab_wizard_api_events_py", + "target": "api_events_doneevent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L129", + "weight": 1.0, + "source": "src_exlab_wizard_api_events_py", + "target": "api_events_failedevent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L146", + "weight": 1.0, + "source": "src_exlab_wizard_api_events_py", + "target": "api_events_snapshotevent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L163", + "weight": 1.0, + "source": "src_exlab_wizard_api_events_py", + "target": "api_events_deltaevent", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L189", + "weight": 1.0, + "source": "src_exlab_wizard_api_events_py", + "target": "api_events_encode_event", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L198", + "weight": 1.0, + "source": "src_exlab_wizard_api_events_py", + "target": "api_events_event_from_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_events_rationale_1", + "target": "src_exlab_wizard_api_events_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L52", + "weight": 1.0, + "source": "api_events_rationale_52", + "target": "api_events_phaseevent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L69", + "weight": 1.0, + "source": "api_events_rationale_69", + "target": "api_events_progressevent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L82", + "weight": 1.0, + "source": "api_events_rationale_82", + "target": "api_events_inputrequiredevent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L102", + "weight": 1.0, + "source": "api_events_rationale_102", + "target": "api_events_warningevent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L119", + "weight": 1.0, + "source": "api_events_rationale_119", + "target": "api_events_doneevent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L135", + "weight": 1.0, + "source": "api_events_rationale_135", + "target": "api_events_failedevent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L152", + "weight": 1.0, + "source": "api_events_rationale_152", + "target": "api_events_snapshotevent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L169", + "weight": 1.0, + "source": "api_events_rationale_169", + "target": "api_events_deltaevent", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L190", + "weight": 1.0, + "source": "api_events_rationale_190", + "target": "api_events_encode_event", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L355", + "weight": 1.0, + "source": "routers_sessions_stream_session_events", + "target": "api_events_encode_event" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L392", + "weight": 1.0, + "source": "routers_problems_stream_audit_channel", + "target": "api_events_encode_event" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/events.py", + "source_location": "L199", + "weight": 1.0, + "source": "api_events_rationale_199", + "target": "api_events_event_from_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L349", + "weight": 1.0, + "source": "routers_sessions_stream_session_events", + "target": "api_events_event_from_dict" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L389", + "weight": 1.0, + "source": "routers_problems_stream_audit_channel", + "target": "api_events_event_from_dict" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L72", + "weight": 1.0, + "source": "src_exlab_wizard_api_setup_py", + "target": "api_setup_setupstatusresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L83", + "weight": 1.0, + "source": "src_exlab_wizard_api_setup_py", + "target": "api_setup_limstestrequest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L99", + "weight": 1.0, + "source": "src_exlab_wizard_api_setup_py", + "target": "api_setup_equipmenttestrequest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L115", + "weight": 1.0, + "source": "src_exlab_wizard_api_setup_py", + "target": "api_setup_proberesult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L133", + "weight": 1.0, + "source": "src_exlab_wizard_api_setup_py", + "target": "api_setup_autostartrequest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L141", + "weight": 1.0, + "source": "src_exlab_wizard_api_setup_py", + "target": "api_setup_autostartresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L155", + "weight": 1.0, + "source": "src_exlab_wizard_api_setup_py", + "target": "api_setup_compute_setup_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L172", + "weight": 1.0, + "source": "src_exlab_wizard_api_setup_py", + "target": "api_setup_is_creation_blocked", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L182", + "weight": 1.0, + "source": "src_exlab_wizard_api_setup_py", + "target": "api_setup_setup_state_gate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L221", + "weight": 1.0, + "source": "src_exlab_wizard_api_setup_py", + "target": "api_setup_build_setup_router", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L312", + "weight": 1.0, + "source": "src_exlab_wizard_api_setup_py", + "target": "api_setup_coerce_probe_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L329", + "weight": 1.0, + "source": "src_exlab_wizard_api_setup_py", + "target": "api_setup_resolve_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L348", + "weight": 1.0, + "source": "src_exlab_wizard_api_setup_py", + "target": "api_setup_await_or_call", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_setup_rationale_1", + "target": "src_exlab_wizard_api_setup_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L73", + "weight": 1.0, + "source": "api_setup_rationale_73", + "target": "api_setup_setupstatusresponse", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L84", + "weight": 1.0, + "source": "api_setup_rationale_84", + "target": "api_setup_limstestrequest", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L100", + "weight": 1.0, + "source": "api_setup_rationale_100", + "target": "api_setup_equipmenttestrequest", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L322", + "weight": 1.0, + "source": "api_setup_coerce_probe_dict", + "target": "api_setup_proberesult", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L116", + "weight": 1.0, + "source": "api_setup_rationale_116", + "target": "api_setup_proberesult", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L134", + "weight": 1.0, + "source": "api_setup_rationale_134", + "target": "api_setup_autostartrequest", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L142", + "weight": 1.0, + "source": "api_setup_rationale_142", + "target": "api_setup_autostartresult", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L197", + "weight": 1.0, + "source": "api_setup_setup_state_gate", + "target": "api_setup_compute_setup_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L156", + "weight": 1.0, + "source": "api_setup_rationale_156", + "target": "api_setup_compute_setup_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L198", + "weight": 1.0, + "source": "api_setup_setup_state_gate", + "target": "api_setup_is_creation_blocked", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L173", + "weight": 1.0, + "source": "api_setup_rationale_173", + "target": "api_setup_is_creation_blocked", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L183", + "weight": 1.0, + "source": "api_setup_rationale_183", + "target": "api_setup_setup_state_gate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L222", + "weight": 1.0, + "source": "api_setup_rationale_222", + "target": "api_setup_build_setup_router", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L321", + "weight": 1.0, + "source": "api_app_create_app", + "target": "api_setup_build_setup_router" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L313", + "weight": 1.0, + "source": "api_setup_rationale_313", + "target": "api_setup_coerce_probe_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L330", + "weight": 1.0, + "source": "api_setup_rationale_330", + "target": "api_setup_resolve_equipment", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/setup.py", + "source_location": "L349", + "weight": 1.0, + "source": "api_setup_rationale_349", + "target": "api_setup_await_or_call", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L82", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_limsprojectblock", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L102", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_templateblock", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L118", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_pluginisolation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L130", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_pluginapplied", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L148", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_pathsblock", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L159", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_orchestratorblock", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L190", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_overrideentry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L212", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_tombstoneentry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L232", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_override_entry_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L242", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_tombstone_entry_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L249", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_parse_validation_override_entry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L271", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_creationjson", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L309", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_readmefieldsjson", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L330", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_equipmentjson", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L351", + "weight": 1.0, + "source": "src_exlab_wizard_api_schemas_py", + "target": "api_schemas_testrunsjson", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_schemas_rationale_1", + "target": "src_exlab_wizard_api_schemas_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L87", + "weight": 1.0, + "source": "api_schemas_rationale_87", + "target": "api_schemas_limsprojectblock", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L107", + "weight": 1.0, + "source": "api_schemas_rationale_107", + "target": "api_schemas_templateblock", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L123", + "weight": 1.0, + "source": "api_schemas_rationale_123", + "target": "api_schemas_pluginisolation", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L135", + "weight": 1.0, + "source": "api_schemas_rationale_135", + "target": "api_schemas_pluginapplied", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L153", + "weight": 1.0, + "source": "api_schemas_rationale_153", + "target": "api_schemas_pathsblock", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L164", + "weight": 1.0, + "source": "api_schemas_rationale_164", + "target": "api_schemas_orchestratorblock", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L195", + "weight": 1.0, + "source": "api_schemas_rationale_195", + "target": "api_schemas_overrideentry", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_findingresponse", + "target": "api_schemas_overrideentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_problemsresponse", + "target": "api_schemas_overrideentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_overriderequest", + "target": "api_schemas_overrideentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_overrideresponse", + "target": "api_schemas_overrideentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_revokerequest", + "target": "api_schemas_overrideentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_tombstoneresponse", + "target": "api_schemas_overrideentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_refreshresponse", + "target": "api_schemas_overrideentry", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L217", + "weight": 1.0, + "source": "api_schemas_rationale_217", + "target": "api_schemas_tombstoneentry", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_findingresponse", + "target": "api_schemas_tombstoneentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_problemsresponse", + "target": "api_schemas_tombstoneentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_overriderequest", + "target": "api_schemas_tombstoneentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_overrideresponse", + "target": "api_schemas_tombstoneentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_revokerequest", + "target": "api_schemas_tombstoneentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_tombstoneresponse", + "target": "api_schemas_tombstoneentry", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L37", + "weight": 0.8, + "source": "routers_problems_refreshresponse", + "target": "api_schemas_tombstoneentry", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L233", + "weight": 1.0, + "source": "api_schemas_rationale_233", + "target": "api_schemas_override_entry_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L243", + "weight": 1.0, + "source": "api_schemas_rationale_243", + "target": "api_schemas_tombstone_entry_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L252", + "weight": 1.0, + "source": "api_schemas_rationale_252", + "target": "api_schemas_parse_validation_override_entry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L276", + "weight": 1.0, + "source": "api_schemas_rationale_276", + "target": "api_schemas_creationjson", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L29", + "weight": 0.8, + "source": "routers_browse_runnode", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L29", + "weight": 0.8, + "source": "routers_browse_projectnode", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L29", + "weight": 0.8, + "source": "routers_browse_equipmentnode", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L29", + "weight": 0.8, + "source": "routers_browse_relayequipmentnode", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L29", + "weight": 0.8, + "source": "routers_browse_treeresponse", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L29", + "weight": 0.8, + "source": "routers_browse_folderentry", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L29", + "weight": 0.8, + "source": "routers_browse_folderresponse", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L29", + "weight": 0.8, + "source": "routers_browse_rundetail", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L29", + "weight": 0.8, + "source": "routers_browse_runlogentry", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L29", + "weight": 0.8, + "source": "routers_browse_runlogresponse", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L24", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L24", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "api_schemas_creationjson", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L314", + "weight": 1.0, + "source": "api_schemas_rationale_314", + "target": "api_schemas_readmefieldsjson", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L335", + "weight": 1.0, + "source": "api_schemas_rationale_335", + "target": "api_schemas_equipmentjson", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/schemas.py", + "source_location": "L356", + "weight": 1.0, + "source": "api_schemas_rationale_356", + "target": "api_schemas_testrunsjson", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L77", + "weight": 1.0, + "source": "src_exlab_wizard_api_app_py", + "target": "api_app_auditchannel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L136", + "weight": 1.0, + "source": "src_exlab_wizard_api_app_py", + "target": "api_app_drain", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L152", + "weight": 1.0, + "source": "src_exlab_wizard_api_app_py", + "target": "api_app_finding_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L167", + "weight": 1.0, + "source": "src_exlab_wizard_api_app_py", + "target": "api_app_appdependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L254", + "weight": 1.0, + "source": "src_exlab_wizard_api_app_py", + "target": "api_app_create_app", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L339", + "weight": 1.0, + "source": "src_exlab_wizard_api_app_py", + "target": "api_app_audit_loop", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L381", + "weight": 1.0, + "source": "src_exlab_wizard_api_app_py", + "target": "api_app_diff_findings", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_app_rationale_1", + "target": "src_exlab_wizard_api_app_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L85", + "weight": 1.0, + "source": "api_app_auditchannel", + "target": "api_app_auditchannel_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L89", + "weight": 1.0, + "source": "api_app_auditchannel", + "target": "api_app_auditchannel_subscribe", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L97", + "weight": 1.0, + "source": "api_app_auditchannel", + "target": "api_app_auditchannel_publish_snapshot", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L106", + "weight": 1.0, + "source": "api_app_auditchannel", + "target": "api_app_auditchannel_publish_delta", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L123", + "weight": 1.0, + "source": "api_app_auditchannel", + "target": "api_app_auditchannel_broadcast", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L128", + "weight": 1.0, + "source": "api_app_auditchannel", + "target": "api_app_auditchannel_close", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L273", + "weight": 1.0, + "source": "api_app_create_app", + "target": "api_app_auditchannel", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L78", + "weight": 1.0, + "source": "api_app_rationale_78", + "target": "api_app_auditchannel", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L95", + "weight": 1.0, + "source": "api_app_auditchannel_subscribe", + "target": "api_app_drain", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L90", + "weight": 1.0, + "source": "api_app_rationale_90", + "target": "api_app_auditchannel_subscribe", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L100", + "weight": 1.0, + "source": "api_app_auditchannel_publish_snapshot", + "target": "api_app_finding_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L104", + "weight": 1.0, + "source": "api_app_auditchannel_publish_snapshot", + "target": "api_app_auditchannel_broadcast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L371", + "weight": 1.0, + "source": "api_app_audit_loop", + "target": "api_app_auditchannel_publish_snapshot", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L116", + "weight": 1.0, + "source": "api_app_auditchannel_publish_delta", + "target": "api_app_finding_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L121", + "weight": 1.0, + "source": "api_app_auditchannel_publish_delta", + "target": "api_app_auditchannel_broadcast", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L373", + "weight": 1.0, + "source": "api_app_audit_loop", + "target": "api_app_auditchannel_publish_delta", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L129", + "weight": 1.0, + "source": "api_app_rationale_129", + "target": "api_app_auditchannel_close", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L140", + "weight": 1.0, + "source": "api_app_rationale_140", + "target": "api_app_drain", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L153", + "weight": 1.0, + "source": "api_app_rationale_153", + "target": "api_app_finding_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L271", + "weight": 1.0, + "source": "api_app_create_app", + "target": "api_app_appdependencies", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L168", + "weight": 1.0, + "source": "api_app_rationale_168", + "target": "api_app_appdependencies", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L261", + "weight": 1.0, + "source": "api_app_rationale_261", + "target": "api_app_create_app", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L315", + "weight": 1.0, + "source": "api_app_create_app", + "target": "routers_sessions_build_sessions_router" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L316", + "weight": 1.0, + "source": "api_app_create_app", + "target": "routers_operations_build_operations_router" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L317", + "weight": 1.0, + "source": "api_app_create_app", + "target": "routers_problems_build_problems_router" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L318", + "weight": 1.0, + "source": "api_app_create_app", + "target": "routers_config_build_config_router" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L319", + "weight": 1.0, + "source": "api_app_create_app", + "target": "routers_browse_build_browse_router" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L327", + "weight": 1.0, + "source": "api_app_create_app", + "target": "routers_staging_build_staging_router" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L330", + "weight": 1.0, + "source": "api_app_create_app", + "target": "api_errors_register_exception_handlers" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L368", + "weight": 1.0, + "source": "api_app_audit_loop", + "target": "api_app_diff_findings", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L340", + "weight": 1.0, + "source": "api_app_rationale_340", + "target": "api_app_audit_loop", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/app.py", + "source_location": "L384", + "weight": 1.0, + "source": "api_app_rationale_384", + "target": "api_app_diff_findings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L96", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_extract_or_create_trace_id", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L110", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_build_error_envelope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L140", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_error_response", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L175", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_exlab_validation_handler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L197", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_pydantic_validation_handler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L228", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_pydantic_error_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L237", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_config_error_handler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L246", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_keyring_unavailable_handler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L255", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_schema_major_mismatch_handler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L265", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_setup_incomplete_handler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L289", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_template_load_error_handler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L303", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_http_exception_handler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L336", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_status_to_code", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L349", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_generic_handler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L368", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_register_exception_handlers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L395", + "weight": 1.0, + "source": "src_exlab_wizard_api_errors_py", + "target": "api_errors_register", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L1", + "weight": 1.0, + "source": "api_errors_rationale_1", + "target": "src_exlab_wizard_api_errors_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L156", + "weight": 1.0, + "source": "api_errors_error_response", + "target": "api_errors_extract_or_create_trace_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L357", + "weight": 1.0, + "source": "api_errors_generic_handler", + "target": "api_errors_extract_or_create_trace_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L97", + "weight": 1.0, + "source": "api_errors_rationale_97", + "target": "api_errors_extract_or_create_trace_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L157", + "weight": 1.0, + "source": "api_errors_error_response", + "target": "api_errors_build_error_envelope", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L118", + "weight": 1.0, + "source": "api_errors_rationale_118", + "target": "api_errors_build_error_envelope", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L187", + "weight": 1.0, + "source": "api_errors_exlab_validation_handler", + "target": "api_errors_error_response", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L218", + "weight": 1.0, + "source": "api_errors_pydantic_validation_handler", + "target": "api_errors_error_response", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L238", + "weight": 1.0, + "source": "api_errors_config_error_handler", + "target": "api_errors_error_response", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L247", + "weight": 1.0, + "source": "api_errors_keyring_unavailable_handler", + "target": "api_errors_error_response", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L256", + "weight": 1.0, + "source": "api_errors_schema_major_mismatch_handler", + "target": "api_errors_error_response", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L280", + "weight": 1.0, + "source": "api_errors_setup_incomplete_handler", + "target": "api_errors_error_response", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L295", + "weight": 1.0, + "source": "api_errors_template_load_error_handler", + "target": "api_errors_error_response", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L319", + "weight": 1.0, + "source": "api_errors_http_exception_handler", + "target": "api_errors_error_response", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L359", + "weight": 1.0, + "source": "api_errors_generic_handler", + "target": "api_errors_error_response", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L150", + "weight": 1.0, + "source": "api_errors_rationale_150", + "target": "api_errors_error_response", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L176", + "weight": 1.0, + "source": "api_errors_rationale_176", + "target": "api_errors_exlab_validation_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L224", + "weight": 1.0, + "source": "api_errors_pydantic_validation_handler", + "target": "api_errors_pydantic_error_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L200", + "weight": 1.0, + "source": "api_errors_rationale_200", + "target": "api_errors_pydantic_validation_handler", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L229", + "weight": 1.0, + "source": "api_errors_rationale_229", + "target": "api_errors_pydantic_error_to_dict", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L266", + "weight": 1.0, + "source": "api_errors_rationale_266", + "target": "api_errors_setup_incomplete_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L330", + "weight": 1.0, + "source": "api_errors_http_exception_handler", + "target": "api_errors_status_to_code", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L304", + "weight": 1.0, + "source": "api_errors_rationale_304", + "target": "api_errors_http_exception_handler", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L337", + "weight": 1.0, + "source": "api_errors_rationale_337", + "target": "api_errors_status_to_code", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L350", + "weight": 1.0, + "source": "api_errors_rationale_350", + "target": "api_errors_generic_handler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L383", + "weight": 1.0, + "source": "api_errors_register_exception_handlers", + "target": "api_errors_register", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L369", + "weight": 1.0, + "source": "api_errors_rationale_369", + "target": "api_errors_register_exception_handlers", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/errors.py", + "source_location": "L400", + "weight": 1.0, + "source": "api_errors_rationale_400", + "target": "api_errors_register", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L67", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_runnode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L77", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_projectnode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L91", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_equipmentnode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L109", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_relayequipmentnode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L125", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_treeresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L132", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_folderentry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L156", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_folderresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L165", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_rundetail", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L180", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_runlogentry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L199", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_runlogresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L214", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_build_browse_router", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L341", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_run_log_from_queue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L375", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_path_is_under_allowed_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L405", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_build_equipment_node", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L420", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_build_received_equipment_nodes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L463", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_relay_label_from_first_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L494", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_find_run_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L515", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_read_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L531", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_file_state_from_record", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L550", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_per_file_sync_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L571", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_run_relative_posix", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L579", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_iter_run_or_project_subdirs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L602", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_scan_projects", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L610", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_build_project_node", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L639", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_scan_run_children", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L652", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_build_run_node", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L675", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_run_rollup_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L696", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_read_readme", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L712", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_scan_folder_sync", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L808", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_tombstone_entries", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L853", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_build_hierarchy_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L887", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_browse_py", + "target": "routers_browse_projects_for_ui_tree", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L1", + "weight": 1.0, + "source": "routers_browse_rationale_1", + "target": "src_exlab_wizard_api_routers_browse_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L666", + "weight": 1.0, + "source": "routers_browse_build_run_node", + "target": "routers_browse_runnode", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L900", + "weight": 1.0, + "source": "routers_browse_projects_for_ui_tree", + "target": "routers_browse_runnode", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L630", + "weight": 1.0, + "source": "routers_browse_build_project_node", + "target": "routers_browse_projectnode", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L893", + "weight": 1.0, + "source": "routers_browse_projects_for_ui_tree", + "target": "routers_browse_projectnode", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L410", + "weight": 1.0, + "source": "routers_browse_build_equipment_node", + "target": "routers_browse_equipmentnode", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L873", + "weight": 1.0, + "source": "routers_browse_build_hierarchy_dict", + "target": "routers_browse_equipmentnode", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L92", + "weight": 1.0, + "source": "routers_browse_rationale_92", + "target": "routers_browse_equipmentnode", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L452", + "weight": 1.0, + "source": "routers_browse_build_received_equipment_nodes", + "target": "routers_browse_relayequipmentnode", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L110", + "weight": 1.0, + "source": "routers_browse_rationale_110", + "target": "routers_browse_relayequipmentnode", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L789", + "weight": 1.0, + "source": "routers_browse_scan_folder_sync", + "target": "routers_browse_folderentry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L839", + "weight": 1.0, + "source": "routers_browse_tombstone_entries", + "target": "routers_browse_folderentry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L133", + "weight": 1.0, + "source": "routers_browse_rationale_133", + "target": "routers_browse_folderentry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L805", + "weight": 1.0, + "source": "routers_browse_scan_folder_sync", + "target": "routers_browse_folderresponse", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L157", + "weight": 1.0, + "source": "routers_browse_rationale_157", + "target": "routers_browse_folderresponse", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L366", + "weight": 1.0, + "source": "routers_browse_run_log_from_queue", + "target": "routers_browse_runlogentry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L181", + "weight": 1.0, + "source": "routers_browse_rationale_181", + "target": "routers_browse_runlogentry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L200", + "weight": 1.0, + "source": "routers_browse_rationale_200", + "target": "routers_browse_runlogresponse", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L215", + "weight": 1.0, + "source": "routers_browse_rationale_215", + "target": "routers_browse_build_browse_router", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L342", + "weight": 1.0, + "source": "routers_browse_rationale_342", + "target": "routers_browse_run_log_from_queue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L732", + "weight": 1.0, + "source": "routers_browse_scan_folder_sync", + "target": "routers_browse_path_is_under_allowed_root", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L376", + "weight": 1.0, + "source": "routers_browse_rationale_376", + "target": "routers_browse_path_is_under_allowed_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L347", + "weight": 1.0, + "source": "routers_staging_is_real_run", + "target": "routers_browse_path_is_under_allowed_root" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L407", + "weight": 1.0, + "source": "routers_browse_build_equipment_node", + "target": "routers_browse_scan_projects", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L872", + "weight": 1.0, + "source": "routers_browse_build_hierarchy_dict", + "target": "routers_browse_build_equipment_node", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L448", + "weight": 1.0, + "source": "routers_browse_build_received_equipment_nodes", + "target": "routers_browse_scan_projects", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L454", + "weight": 1.0, + "source": "routers_browse_build_received_equipment_nodes", + "target": "routers_browse_relay_label_from_first_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L878", + "weight": 1.0, + "source": "routers_browse_build_hierarchy_dict", + "target": "routers_browse_build_received_equipment_nodes", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L421", + "weight": 1.0, + "source": "routers_browse_rationale_421", + "target": "routers_browse_build_received_equipment_nodes", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L466", + "weight": 1.0, + "source": "routers_browse_relay_label_from_first_run", + "target": "routers_browse_iter_run_or_project_subdirs", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L464", + "weight": 1.0, + "source": "routers_browse_rationale_464", + "target": "routers_browse_relay_label_from_first_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L560", + "weight": 1.0, + "source": "routers_browse_per_file_sync_status", + "target": "routers_browse_find_run_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L772", + "weight": 1.0, + "source": "routers_browse_scan_folder_sync", + "target": "routers_browse_find_run_root", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L495", + "weight": 1.0, + "source": "routers_browse_rationale_495", + "target": "routers_browse_find_run_root", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L563", + "weight": 1.0, + "source": "routers_browse_per_file_sync_status", + "target": "routers_browse_read_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L773", + "weight": 1.0, + "source": "routers_browse_scan_folder_sync", + "target": "routers_browse_read_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L516", + "weight": 1.0, + "source": "routers_browse_rationale_516", + "target": "routers_browse_read_sync_state", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L568", + "weight": 1.0, + "source": "routers_browse_per_file_sync_status", + "target": "routers_browse_file_state_from_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L795", + "weight": 1.0, + "source": "routers_browse_scan_folder_sync", + "target": "routers_browse_file_state_from_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L834", + "weight": 1.0, + "source": "routers_browse_tombstone_entries", + "target": "routers_browse_file_state_from_record", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L532", + "weight": 1.0, + "source": "routers_browse_rationale_532", + "target": "routers_browse_file_state_from_record", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L566", + "weight": 1.0, + "source": "routers_browse_per_file_sync_status", + "target": "routers_browse_run_relative_posix", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L551", + "weight": 1.0, + "source": "routers_browse_rationale_551", + "target": "routers_browse_per_file_sync_status", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L784", + "weight": 1.0, + "source": "routers_browse_scan_folder_sync", + "target": "routers_browse_run_relative_posix", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L572", + "weight": 1.0, + "source": "routers_browse_rationale_572", + "target": "routers_browse_run_relative_posix", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L606", + "weight": 1.0, + "source": "routers_browse_scan_projects", + "target": "routers_browse_iter_run_or_project_subdirs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L613", + "weight": 1.0, + "source": "routers_browse_build_project_node", + "target": "routers_browse_iter_run_or_project_subdirs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L647", + "weight": 1.0, + "source": "routers_browse_scan_run_children", + "target": "routers_browse_iter_run_or_project_subdirs", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L580", + "weight": 1.0, + "source": "routers_browse_rationale_580", + "target": "routers_browse_iter_run_or_project_subdirs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L605", + "weight": 1.0, + "source": "routers_browse_scan_projects", + "target": "routers_browse_build_project_node", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L603", + "weight": 1.0, + "source": "routers_browse_rationale_603", + "target": "routers_browse_scan_projects", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L616", + "weight": 1.0, + "source": "routers_browse_build_project_node", + "target": "routers_browse_scan_run_children", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L628", + "weight": 1.0, + "source": "routers_browse_build_project_node", + "target": "routers_browse_build_run_node", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L646", + "weight": 1.0, + "source": "routers_browse_scan_run_children", + "target": "routers_browse_build_run_node", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L665", + "weight": 1.0, + "source": "routers_browse_build_run_node", + "target": "routers_browse_run_rollup_status", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L653", + "weight": 1.0, + "source": "routers_browse_rationale_653", + "target": "routers_browse_build_run_node", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L676", + "weight": 1.0, + "source": "routers_browse_rationale_676", + "target": "routers_browse_run_rollup_status", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L697", + "weight": 1.0, + "source": "routers_browse_rationale_697", + "target": "routers_browse_read_readme", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L803", + "weight": 1.0, + "source": "routers_browse_scan_folder_sync", + "target": "routers_browse_tombstone_entries", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L713", + "weight": 1.0, + "source": "routers_browse_rationale_713", + "target": "routers_browse_scan_folder_sync", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L814", + "weight": 1.0, + "source": "routers_browse_rationale_814", + "target": "routers_browse_tombstone_entries", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L877", + "weight": 1.0, + "source": "routers_browse_build_hierarchy_dict", + "target": "routers_browse_projects_for_ui_tree", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/browse.py", + "source_location": "L854", + "weight": 1.0, + "source": "routers_browse_rationale_854", + "target": "routers_browse_build_hierarchy_dict", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L63", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_sessions_py", + "target": "routers_sessions_projectsessionbody", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L83", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_sessions_py", + "target": "routers_sessions_runsessionbody", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L105", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_sessions_py", + "target": "routers_sessions_sessionhandleresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L119", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_sessions_py", + "target": "routers_sessions_resumebody", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L127", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_sessions_py", + "target": "routers_sessions_cancelbody", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L140", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_sessions_py", + "target": "routers_sessions_build_sessions_router", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L284", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_sessions_py", + "target": "routers_sessions_build_project_request", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L297", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_sessions_py", + "target": "routers_sessions_build_run_request", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L316", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_sessions_py", + "target": "routers_sessions_handle_to_response", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L336", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_sessions_py", + "target": "routers_sessions_stream_session_events", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L1", + "weight": 1.0, + "source": "routers_sessions_rationale_1", + "target": "src_exlab_wizard_api_routers_sessions_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L64", + "weight": 1.0, + "source": "routers_sessions_rationale_64", + "target": "routers_sessions_projectsessionbody", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L84", + "weight": 1.0, + "source": "routers_sessions_rationale_84", + "target": "routers_sessions_runsessionbody", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L325", + "weight": 1.0, + "source": "routers_sessions_handle_to_response", + "target": "routers_sessions_sessionhandleresponse", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L106", + "weight": 1.0, + "source": "routers_sessions_rationale_106", + "target": "routers_sessions_sessionhandleresponse", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L120", + "weight": 1.0, + "source": "routers_sessions_rationale_120", + "target": "routers_sessions_resumebody", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L128", + "weight": 1.0, + "source": "routers_sessions_rationale_128", + "target": "routers_sessions_cancelbody", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L141", + "weight": 1.0, + "source": "routers_sessions_rationale_141", + "target": "routers_sessions_build_sessions_router", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L317", + "weight": 1.0, + "source": "routers_sessions_rationale_317", + "target": "routers_sessions_handle_to_response", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/sessions.py", + "source_location": "L341", + "weight": 1.0, + "source": "routers_sessions_rationale_341", + "target": "routers_sessions_stream_session_events", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L46", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_config_py", + "target": "routers_config_configupdateresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L57", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_config_py", + "target": "routers_config_equipmentappendresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L74", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_config_py", + "target": "routers_config_build_config_router", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L163", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_config_py", + "target": "routers_config_await_or_call", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L171", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_config_py", + "target": "routers_config_apply_live_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L1", + "weight": 1.0, + "source": "routers_config_rationale_1", + "target": "src_exlab_wizard_api_routers_config_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L47", + "weight": 1.0, + "source": "routers_config_rationale_47", + "target": "routers_config_configupdateresponse", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L58", + "weight": 1.0, + "source": "routers_config_rationale_58", + "target": "routers_config_equipmentappendresponse", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L75", + "weight": 1.0, + "source": "routers_config_rationale_75", + "target": "routers_config_build_config_router", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L164", + "weight": 1.0, + "source": "routers_config_rationale_164", + "target": "routers_config_await_or_call", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/config.py", + "source_location": "L172", + "weight": 1.0, + "source": "routers_config_rationale_172", + "target": "routers_config_apply_live_config", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "routers_init_rationale_1", + "target": "src_exlab_wizard_api_routers_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L36", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_operations_py", + "target": "routers_operations_operationentry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L51", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_operations_py", + "target": "routers_operations_operationsresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L59", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_operations_py", + "target": "routers_operations_build_operations_router", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L89", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_operations_py", + "target": "routers_operations_session_to_entry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L1", + "weight": 1.0, + "source": "routers_operations_rationale_1", + "target": "src_exlab_wizard_api_routers_operations_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L96", + "weight": 1.0, + "source": "routers_operations_session_to_entry", + "target": "routers_operations_operationentry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L37", + "weight": 1.0, + "source": "routers_operations_rationale_37", + "target": "routers_operations_operationentry", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L52", + "weight": 1.0, + "source": "routers_operations_rationale_52", + "target": "routers_operations_operationsresponse", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/operations.py", + "source_location": "L60", + "weight": 1.0, + "source": "routers_operations_rationale_60", + "target": "routers_operations_build_operations_router", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L67", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_findingresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L83", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_problemsresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L92", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_overriderequest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L103", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_overrideresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L117", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_revokerequest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L127", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_tombstoneresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L138", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_refreshresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L152", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_build_problems_router", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L292", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_build_scope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L321", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_matches_filters", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L327", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_last_audit_at", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L334", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_require_validator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L348", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_require_cache_writer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L362", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_require_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L381", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_problems_py", + "target": "routers_problems_stream_audit_channel", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L1", + "weight": 1.0, + "source": "routers_problems_rationale_1", + "target": "src_exlab_wizard_api_routers_problems_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L68", + "weight": 1.0, + "source": "routers_problems_rationale_68", + "target": "routers_problems_findingresponse", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L84", + "weight": 1.0, + "source": "routers_problems_rationale_84", + "target": "routers_problems_problemsresponse", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L93", + "weight": 1.0, + "source": "routers_problems_rationale_93", + "target": "routers_problems_overriderequest", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L104", + "weight": 1.0, + "source": "routers_problems_rationale_104", + "target": "routers_problems_overrideresponse", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L118", + "weight": 1.0, + "source": "routers_problems_rationale_118", + "target": "routers_problems_revokerequest", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L139", + "weight": 1.0, + "source": "routers_problems_rationale_139", + "target": "routers_problems_refreshresponse", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L153", + "weight": 1.0, + "source": "routers_problems_rationale_153", + "target": "routers_problems_build_problems_router", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L363", + "weight": 1.0, + "source": "routers_problems_rationale_363", + "target": "routers_problems_require_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/problems.py", + "source_location": "L382", + "weight": 1.0, + "source": "routers_problems_rationale_382", + "target": "routers_problems_stream_audit_channel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L59", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_staging_py", + "target": "routers_staging_stagedrunrow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L75", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_staging_py", + "target": "routers_staging_staginglistresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L83", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_staging_py", + "target": "routers_staging_forcesyncresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L93", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_staging_py", + "target": "routers_staging_clearresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L103", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_staging_py", + "target": "routers_staging_clearverifiedresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L111", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_staging_py", + "target": "routers_staging_keeplocalrequest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L126", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_staging_py", + "target": "routers_staging_keeplocalresponse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L141", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_staging_py", + "target": "routers_staging_build_staging_router", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L315", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_staging_py", + "target": "routers_staging_row_from_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L329", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_staging_py", + "target": "routers_staging_is_real_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L352", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_staging_py", + "target": "routers_staging_require_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L370", + "weight": 1.0, + "source": "src_exlab_wizard_api_routers_staging_py", + "target": "routers_staging_require_nas_sync", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L1", + "weight": 1.0, + "source": "routers_staging_rationale_1", + "target": "src_exlab_wizard_api_routers_staging_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L316", + "weight": 1.0, + "source": "routers_staging_row_from_summary", + "target": "routers_staging_stagedrunrow", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L60", + "weight": 1.0, + "source": "routers_staging_rationale_60", + "target": "routers_staging_stagedrunrow", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L34", + "weight": 0.8, + "source": "routers_staging_stagedrunrow", + "target": "orchestrator_staging_query_stagedrunsummary", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L76", + "weight": 1.0, + "source": "routers_staging_rationale_76", + "target": "routers_staging_staginglistresponse", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L34", + "weight": 0.8, + "source": "routers_staging_staginglistresponse", + "target": "orchestrator_staging_query_stagedrunsummary", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L84", + "weight": 1.0, + "source": "routers_staging_rationale_84", + "target": "routers_staging_forcesyncresponse", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L34", + "weight": 0.8, + "source": "routers_staging_forcesyncresponse", + "target": "orchestrator_staging_query_stagedrunsummary", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L94", + "weight": 1.0, + "source": "routers_staging_rationale_94", + "target": "routers_staging_clearresponse", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L34", + "weight": 0.8, + "source": "routers_staging_clearresponse", + "target": "orchestrator_staging_query_stagedrunsummary", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L104", + "weight": 1.0, + "source": "routers_staging_rationale_104", + "target": "routers_staging_clearverifiedresponse", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L34", + "weight": 0.8, + "source": "routers_staging_clearverifiedresponse", + "target": "orchestrator_staging_query_stagedrunsummary", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L112", + "weight": 1.0, + "source": "routers_staging_rationale_112", + "target": "routers_staging_keeplocalrequest", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L34", + "weight": 0.8, + "source": "routers_staging_keeplocalrequest", + "target": "orchestrator_staging_query_stagedrunsummary", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L127", + "weight": 1.0, + "source": "routers_staging_rationale_127", + "target": "routers_staging_keeplocalresponse", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L34", + "weight": 0.8, + "source": "routers_staging_keeplocalresponse", + "target": "orchestrator_staging_query_stagedrunsummary", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L142", + "weight": 1.0, + "source": "routers_staging_rationale_142", + "target": "routers_staging_build_staging_router", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L330", + "weight": 1.0, + "source": "routers_staging_rationale_330", + "target": "routers_staging_is_real_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/api/routers/staging.py", + "source_location": "L353", + "weight": 1.0, + "source": "routers_staging_rationale_353", + "target": "routers_staging_require_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L69", + "weight": 1.0, + "source": "src_exlab_wizard_sync_queue_py", + "target": "sync_queue_syncjobstate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L116", + "weight": 1.0, + "source": "src_exlab_wizard_sync_queue_py", + "target": "sync_queue_syncjobrow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L134", + "weight": 1.0, + "source": "src_exlab_wizard_sync_queue_py", + "target": "sync_queue_decode_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L151", + "weight": 1.0, + "source": "src_exlab_wizard_sync_queue_py", + "target": "sync_queue_encode_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L156", + "weight": 1.0, + "source": "src_exlab_wizard_sync_queue_py", + "target": "sync_queue_row_to_job", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L175", + "weight": 1.0, + "source": "src_exlab_wizard_sync_queue_py", + "target": "sync_queue_compute_next_attempt_at", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L190", + "weight": 1.0, + "source": "src_exlab_wizard_sync_queue_py", + "target": "sync_queue_syncqueue", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L202", + "weight": 1.0, + "source": "src_exlab_wizard_sync_queue_py", + "target": "sync_queue_db_path", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L541", + "weight": 1.0, + "source": "src_exlab_wizard_sync_queue_py", + "target": "sync_queue_is_terminal", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_queue_rationale_1", + "target": "src_exlab_wizard_sync_queue_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L162", + "weight": 1.0, + "source": "sync_queue_row_to_job", + "target": "sync_queue_syncjobstate", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L70", + "weight": 1.0, + "source": "sync_queue_rationale_70", + "target": "sync_queue_syncjobstate", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L44", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "sync_queue_syncjobstate", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L44", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "sync_queue_syncjobstate", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L158", + "weight": 1.0, + "source": "sync_queue_row_to_job", + "target": "sync_queue_syncjobrow", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L274", + "weight": 1.0, + "source": "sync_queue_syncqueue_insert", + "target": "sync_queue_syncjobrow", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L117", + "weight": 1.0, + "source": "sync_queue_rationale_117", + "target": "sync_queue_syncjobrow", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L44", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "sync_queue_syncjobrow", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L44", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "sync_queue_syncjobrow", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L171", + "weight": 1.0, + "source": "sync_queue_row_to_job", + "target": "sync_queue_decode_files", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L135", + "weight": 1.0, + "source": "sync_queue_rationale_135", + "target": "sync_queue_decode_files", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L304", + "weight": 1.0, + "source": "sync_queue_syncqueue_insert", + "target": "sync_queue_encode_files", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L529", + "weight": 1.0, + "source": "sync_queue_syncqueue_requeue_with_files", + "target": "sync_queue_encode_files", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L152", + "weight": 1.0, + "source": "sync_queue_rationale_152", + "target": "sync_queue_encode_files", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L321", + "weight": 1.0, + "source": "sync_queue_syncqueue_get_by_id", + "target": "sync_queue_row_to_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L334", + "weight": 1.0, + "source": "sync_queue_syncqueue_get_by_run_path", + "target": "sync_queue_row_to_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L345", + "weight": 1.0, + "source": "sync_queue_syncqueue_list_in_state", + "target": "sync_queue_row_to_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L353", + "weight": 1.0, + "source": "sync_queue_syncqueue_list_all", + "target": "sync_queue_row_to_job", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L157", + "weight": 1.0, + "source": "sync_queue_rationale_157", + "target": "sync_queue_row_to_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L465", + "weight": 1.0, + "source": "sync_queue_syncqueue_record_failure", + "target": "sync_queue_compute_next_attempt_at", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L176", + "weight": 1.0, + "source": "sync_queue_rationale_176", + "target": "sync_queue_compute_next_attempt_at", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L206", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L229", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_close", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L235", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L241", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_require_job", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L256", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_insert", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L310", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_get_by_id", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L323", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_get_by_run_path", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L336", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_list_in_state", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L347", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_list_all", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L357", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_transition", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L425", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_record_failure", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L475", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_reset_to_queued", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L500", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_requeue_with_files", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L534", + "weight": 1.0, + "source": "sync_queue_syncqueue", + "target": "sync_queue_syncqueue_delete", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L191", + "weight": 1.0, + "source": "sync_queue_rationale_191", + "target": "sync_queue_syncqueue", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L44", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "sync_queue_syncqueue", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L44", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "sync_queue_syncqueue", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L301", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_init", + "target": "sync_queue_syncqueue" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L207", + "weight": 1.0, + "source": "sync_queue_rationale_207", + "target": "sync_queue_syncqueue_init", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L318", + "weight": 1.0, + "source": "sync_queue_syncqueue_get_by_id", + "target": "sync_queue_syncqueue_close", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L331", + "weight": 1.0, + "source": "sync_queue_syncqueue_get_by_run_path", + "target": "sync_queue_syncqueue_close", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L344", + "weight": 1.0, + "source": "sync_queue_syncqueue_list_in_state", + "target": "sync_queue_syncqueue_close", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L352", + "weight": 1.0, + "source": "sync_queue_syncqueue_list_all", + "target": "sync_queue_syncqueue_close", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L230", + "weight": 1.0, + "source": "sync_queue_rationale_230", + "target": "sync_queue_syncqueue_close", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L273", + "weight": 1.0, + "source": "sync_queue_syncqueue_insert", + "target": "sync_queue_syncqueue_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L312", + "weight": 1.0, + "source": "sync_queue_syncqueue_get_by_id", + "target": "sync_queue_syncqueue_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L325", + "weight": 1.0, + "source": "sync_queue_syncqueue_get_by_run_path", + "target": "sync_queue_syncqueue_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L338", + "weight": 1.0, + "source": "sync_queue_syncqueue_list_in_state", + "target": "sync_queue_syncqueue_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L349", + "weight": 1.0, + "source": "sync_queue_syncqueue_list_all", + "target": "sync_queue_syncqueue_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L396", + "weight": 1.0, + "source": "sync_queue_syncqueue_transition", + "target": "sync_queue_syncqueue_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L484", + "weight": 1.0, + "source": "sync_queue_syncqueue_reset_to_queued", + "target": "sync_queue_syncqueue_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L515", + "weight": 1.0, + "source": "sync_queue_syncqueue_requeue_with_files", + "target": "sync_queue_syncqueue_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L536", + "weight": 1.0, + "source": "sync_queue_syncqueue_delete", + "target": "sync_queue_syncqueue_require_conn", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L248", + "weight": 1.0, + "source": "sync_queue_syncqueue_require_job", + "target": "sync_queue_syncqueue_get_by_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L375", + "weight": 1.0, + "source": "sync_queue_syncqueue_transition", + "target": "sync_queue_syncqueue_require_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L442", + "weight": 1.0, + "source": "sync_queue_syncqueue_record_failure", + "target": "sync_queue_syncqueue_require_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L483", + "weight": 1.0, + "source": "sync_queue_syncqueue_reset_to_queued", + "target": "sync_queue_syncqueue_require_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L514", + "weight": 1.0, + "source": "sync_queue_syncqueue_requeue_with_files", + "target": "sync_queue_syncqueue_require_job", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L242", + "weight": 1.0, + "source": "sync_queue_rationale_242", + "target": "sync_queue_syncqueue_require_job", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L265", + "weight": 1.0, + "source": "sync_queue_rationale_265", + "target": "sync_queue_syncqueue_insert", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L498", + "weight": 1.0, + "source": "sync_queue_syncqueue_reset_to_queued", + "target": "sync_queue_syncqueue_get_by_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L532", + "weight": 1.0, + "source": "sync_queue_syncqueue_requeue_with_files", + "target": "sync_queue_syncqueue_get_by_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L311", + "weight": 1.0, + "source": "sync_queue_rationale_311", + "target": "sync_queue_syncqueue_get_by_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L324", + "weight": 1.0, + "source": "sync_queue_rationale_324", + "target": "sync_queue_syncqueue_get_by_run_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L337", + "weight": 1.0, + "source": "sync_queue_rationale_337", + "target": "sync_queue_syncqueue_list_in_state", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L348", + "weight": 1.0, + "source": "sync_queue_rationale_348", + "target": "sync_queue_syncqueue_list_all", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L447", + "weight": 1.0, + "source": "sync_queue_syncqueue_record_failure", + "target": "sync_queue_syncqueue_transition", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L370", + "weight": 1.0, + "source": "sync_queue_rationale_370", + "target": "sync_queue_syncqueue_transition", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L433", + "weight": 1.0, + "source": "sync_queue_rationale_433", + "target": "sync_queue_syncqueue_record_failure", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L476", + "weight": 1.0, + "source": "sync_queue_rationale_476", + "target": "sync_queue_syncqueue_reset_to_queued", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L505", + "weight": 1.0, + "source": "sync_queue_rationale_505", + "target": "sync_queue_syncqueue_requeue_with_files", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/queue.py", + "source_location": "L535", + "weight": 1.0, + "source": "sync_queue_rationale_535", + "target": "sync_queue_syncqueue_delete", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L98", + "weight": 1.0, + "source": "src_exlab_wizard_sync_nas_client_py", + "target": "sync_nas_client_syncjobhandle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L117", + "weight": 1.0, + "source": "src_exlab_wizard_sync_nas_client_py", + "target": "sync_nas_client_remote_name_for", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L128", + "weight": 1.0, + "source": "src_exlab_wizard_sync_nas_client_py", + "target": "sync_nas_client_build_target_for", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L143", + "weight": 1.0, + "source": "src_exlab_wizard_sync_nas_client_py", + "target": "sync_nas_client_resolve_env_for_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L189", + "weight": 1.0, + "source": "src_exlab_wizard_sync_nas_client_py", + "target": "sync_nas_client_build_transport_driver", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L257", + "weight": 1.0, + "source": "src_exlab_wizard_sync_nas_client_py", + "target": "sync_nas_client_nassyncclient", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L887", + "weight": 1.0, + "source": "src_exlab_wizard_sync_nas_client_py", + "target": "sync_nas_client_discover_run_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L912", + "weight": 1.0, + "source": "src_exlab_wizard_sync_nas_client_py", + "target": "sync_nas_client_file_signature", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L921", + "weight": 1.0, + "source": "src_exlab_wizard_sync_nas_client_py", + "target": "sync_nas_client_write_files_from", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1046", + "weight": 1.0, + "source": "src_exlab_wizard_sync_nas_client_py", + "target": "sync_nas_client_compute_nas_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_nas_client_rationale_1", + "target": "src_exlab_wizard_sync_nas_client_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L395", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_enqueue", + "target": "sync_nas_client_syncjobhandle", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L99", + "weight": 1.0, + "source": "sync_nas_client_rationale_99", + "target": "sync_nas_client_syncjobhandle", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L55", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "transports_rclone_rclonedriver", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L61", + "weight": 0.8, + "source": "sync_nas_client_syncjobhandle", + "target": "sync_verifier_verifyresult", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L180", + "weight": 1.0, + "source": "sync_nas_client_resolve_env_for_equipment", + "target": "sync_nas_client_remote_name_for", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L118", + "weight": 1.0, + "source": "sync_nas_client_rationale_118", + "target": "sync_nas_client_remote_name_for", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L133", + "weight": 1.0, + "source": "sync_nas_client_rationale_133", + "target": "sync_nas_client_build_target_for", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L147", + "weight": 1.0, + "source": "sync_nas_client_rationale_147", + "target": "sync_nas_client_resolve_env_for_equipment", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L174", + "weight": 1.0, + "source": "sync_nas_client_resolve_env_for_equipment", + "target": "transports_init_transporterror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L179", + "weight": 1.0, + "source": "sync_nas_client_resolve_env_for_equipment", + "target": "transports_rclone_obscure" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L181", + "weight": 1.0, + "source": "sync_nas_client_resolve_env_for_equipment", + "target": "transports_rclone_build_rclone_env" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L186", + "weight": 1.0, + "source": "sync_nas_client_resolve_env_for_equipment", + "target": "transports_rclone_pass_env_keys_for" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L763", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_build_push", + "target": "sync_nas_client_build_transport_driver", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L776", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_build_check", + "target": "sync_nas_client_build_transport_driver", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L193", + "weight": 1.0, + "source": "sync_nas_client_rationale_193", + "target": "sync_nas_client_build_transport_driver", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L219", + "weight": 1.0, + "source": "sync_nas_client_build_transport_driver", + "target": "transports_rclone_rclonedriver" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L328", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L313", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_apply_config", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L334", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_close", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L347", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L441", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_status", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L452", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_retry", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L457", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_force_verify", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L502", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_worker_loop", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L522", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_next_due_job", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L533", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_drive_job", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L754", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_build_push", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L766", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_build_check", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L779", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_compute_local_shas", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L822", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_handle_push_failure", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L846", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_reconcile_synced_files", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L940", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_maybe_cleanup", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1002", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_delete_local", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1023", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_infer_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1050", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_mark_blocked", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1059", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_mark_synced", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1072", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient", + "target": "sync_nas_client_nassyncclient_mark_cleaned", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L258", + "weight": 1.0, + "source": "sync_nas_client_rationale_258", + "target": "sync_nas_client_nassyncclient", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L55", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "transports_rclone_rclonedriver", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L61", + "weight": 0.8, + "source": "sync_nas_client_nassyncclient", + "target": "sync_verifier_verifyresult", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L331", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_init", + "target": "sync_nas_client_nassyncclient_worker_loop", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L329", + "weight": 1.0, + "source": "sync_nas_client_rationale_329", + "target": "sync_nas_client_nassyncclient_init", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L314", + "weight": 1.0, + "source": "sync_nas_client_rationale_314", + "target": "sync_nas_client_nassyncclient_apply_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L937", + "weight": 1.0, + "source": "sync_nas_client_write_files_from", + "target": "sync_nas_client_nassyncclient_close", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L335", + "weight": 1.0, + "source": "sync_nas_client_rationale_335", + "target": "sync_nas_client_nassyncclient_close", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L394", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_enqueue", + "target": "sync_nas_client_nassyncclient_mark_blocked", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L402", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_enqueue", + "target": "sync_nas_client_nassyncclient_infer_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L435", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_enqueue", + "target": "sync_nas_client_compute_nas_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L352", + "weight": 1.0, + "source": "sync_nas_client_rationale_352", + "target": "sync_nas_client_nassyncclient_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L388", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_enqueue", + "target": "sync_pre_sync_gate_is_eligible" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L442", + "weight": 1.0, + "source": "sync_nas_client_rationale_442", + "target": "sync_nas_client_nassyncclient_status", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L453", + "weight": 1.0, + "source": "sync_nas_client_rationale_453", + "target": "sync_nas_client_nassyncclient_retry", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L488", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_force_verify", + "target": "sync_nas_client_nassyncclient_build_check", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L489", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_force_verify", + "target": "sync_nas_client_write_files_from", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L458", + "weight": 1.0, + "source": "sync_nas_client_rationale_458", + "target": "sync_nas_client_nassyncclient_force_verify", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L480", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_force_verify", + "target": "sync_verifier_verifyresult" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L492", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_force_verify", + "target": "transports_rclone_rclonedriver_check" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L505", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_worker_loop", + "target": "sync_nas_client_nassyncclient_next_due_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L516", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_worker_loop", + "target": "sync_nas_client_nassyncclient_drive_job", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L503", + "weight": 1.0, + "source": "sync_nas_client_rationale_503", + "target": "sync_nas_client_nassyncclient_worker_loop", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L523", + "weight": 1.0, + "source": "sync_nas_client_rationale_523", + "target": "sync_nas_client_nassyncclient_next_due_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L596", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "sync_nas_client_discover_run_files", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L597", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "sync_nas_client_nassyncclient_compute_local_shas", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L603", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "sync_nas_client_nassyncclient_build_push", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L607", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "sync_nas_client_write_files_from", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L619", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "sync_nas_client_nassyncclient_handle_push_failure", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L634", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "sync_nas_client_nassyncclient_build_check", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L649", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "sync_nas_client_nassyncclient_mark_synced", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L650", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "sync_nas_client_nassyncclient_maybe_cleanup", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L683", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "sync_nas_client_nassyncclient_reconcile_synced_files", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L534", + "weight": 1.0, + "source": "sync_nas_client_rationale_534", + "target": "sync_nas_client_nassyncclient_drive_job", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L584", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "sync_bandwidth_effective_bandwidth_limit_kibps" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L609", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "transports_rclone_rclonedriver_push" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L656", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "transports_rclone_rclonedriver_check" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L658", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_drive_job", + "target": "sync_verifier_verifyresult" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L755", + "weight": 1.0, + "source": "sync_nas_client_rationale_755", + "target": "sync_nas_client_nassyncclient_build_push", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L767", + "weight": 1.0, + "source": "sync_nas_client_rationale_767", + "target": "sync_nas_client_nassyncclient_build_check", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L784", + "weight": 1.0, + "source": "sync_nas_client_rationale_784", + "target": "sync_nas_client_nassyncclient_compute_local_shas", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L823", + "weight": 1.0, + "source": "sync_nas_client_rationale_823", + "target": "sync_nas_client_nassyncclient_handle_push_failure", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L874", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_reconcile_synced_files", + "target": "sync_nas_client_file_signature", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L852", + "weight": 1.0, + "source": "sync_nas_client_rationale_852", + "target": "sync_nas_client_nassyncclient_reconcile_synced_files", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L992", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_maybe_cleanup", + "target": "sync_nas_client_nassyncclient_delete_local", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L993", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_maybe_cleanup", + "target": "sync_nas_client_nassyncclient_mark_cleaned", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L941", + "weight": 1.0, + "source": "sync_nas_client_rationale_941", + "target": "sync_nas_client_nassyncclient_maybe_cleanup", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L977", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_maybe_cleanup", + "target": "sync_cleanup_cleanup_interlocks_satisfied" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1007", + "weight": 1.0, + "source": "sync_nas_client_rationale_1007", + "target": "sync_nas_client_nassyncclient_delete_local", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1015", + "weight": 1.0, + "source": "sync_nas_client_nassyncclient_delete_local", + "target": "sync_run_delete_delete_run_files" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1024", + "weight": 1.0, + "source": "sync_nas_client_rationale_1024", + "target": "sync_nas_client_nassyncclient_infer_equipment_id", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1051", + "weight": 1.0, + "source": "sync_nas_client_rationale_1051", + "target": "sync_nas_client_nassyncclient_mark_blocked", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1060", + "weight": 1.0, + "source": "sync_nas_client_rationale_1060", + "target": "sync_nas_client_nassyncclient_mark_synced", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/nas_client.py", + "source_location": "L1073", + "weight": 1.0, + "source": "sync_nas_client_rationale_1073", + "target": "sync_nas_client_nassyncclient_mark_cleaned", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L39", + "weight": 1.0, + "source": "src_exlab_wizard_sync_cleanup_py", + "target": "sync_cleanup_has_recent_revocation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L65", + "weight": 1.0, + "source": "src_exlab_wizard_sync_cleanup_py", + "target": "sync_cleanup_cleanup_interlocks_satisfied", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_cleanup_rationale_1", + "target": "src_exlab_wizard_sync_cleanup_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L114", + "weight": 1.0, + "source": "sync_cleanup_cleanup_interlocks_satisfied", + "target": "sync_cleanup_has_recent_revocation", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L45", + "weight": 1.0, + "source": "sync_cleanup_rationale_45", + "target": "sync_cleanup_has_recent_revocation", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/cleanup.py", + "source_location": "L74", + "weight": 1.0, + "source": "sync_cleanup_rationale_74", + "target": "sync_cleanup_cleanup_interlocks_satisfied", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L41", + "weight": 1.0, + "source": "src_exlab_wizard_sync_bandwidth_py", + "target": "sync_bandwidth_mbps_to_kibps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L55", + "weight": 1.0, + "source": "src_exlab_wizard_sync_bandwidth_py", + "target": "sync_bandwidth_parse_hhmm", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L63", + "weight": 1.0, + "source": "src_exlab_wizard_sync_bandwidth_py", + "target": "sync_bandwidth_is_window_active", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L84", + "weight": 1.0, + "source": "src_exlab_wizard_sync_bandwidth_py", + "target": "sync_bandwidth_effective_bandwidth_limit_kibps", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_bandwidth_rationale_1", + "target": "src_exlab_wizard_sync_bandwidth_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L102", + "weight": 1.0, + "source": "sync_bandwidth_effective_bandwidth_limit_kibps", + "target": "sync_bandwidth_mbps_to_kibps", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L42", + "weight": 1.0, + "source": "sync_bandwidth_rationale_42", + "target": "sync_bandwidth_mbps_to_kibps", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L78", + "weight": 1.0, + "source": "sync_bandwidth_is_window_active", + "target": "sync_bandwidth_parse_hhmm", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L56", + "weight": 1.0, + "source": "sync_bandwidth_rationale_56", + "target": "sync_bandwidth_parse_hhmm", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L104", + "weight": 1.0, + "source": "sync_bandwidth_effective_bandwidth_limit_kibps", + "target": "sync_bandwidth_is_window_active", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L64", + "weight": 1.0, + "source": "sync_bandwidth_rationale_64", + "target": "sync_bandwidth_is_window_active", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/bandwidth.py", + "source_location": "L89", + "weight": 1.0, + "source": "sync_bandwidth_rationale_89", + "target": "sync_bandwidth_effective_bandwidth_limit_kibps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L32", + "weight": 1.0, + "source": "src_exlab_wizard_sync_pre_sync_gate_py", + "target": "sync_pre_sync_gate_file_names_in_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L46", + "weight": 1.0, + "source": "src_exlab_wizard_sync_pre_sync_gate_py", + "target": "sync_pre_sync_gate_is_eligible", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_pre_sync_gate_rationale_1", + "target": "src_exlab_wizard_sync_pre_sync_gate_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L67", + "weight": 1.0, + "source": "sync_pre_sync_gate_is_eligible", + "target": "sync_pre_sync_gate_file_names_in_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L33", + "weight": 1.0, + "source": "sync_pre_sync_gate_rationale_33", + "target": "sync_pre_sync_gate_file_names_in_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/pre_sync_gate.py", + "source_location": "L52", + "weight": 1.0, + "source": "sync_pre_sync_gate_rationale_52", + "target": "sync_pre_sync_gate_is_eligible", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L42", + "weight": 1.0, + "source": "src_exlab_wizard_sync_verifier_py", + "target": "sync_verifier_verifyresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L72", + "weight": 1.0, + "source": "src_exlab_wizard_sync_verifier_py", + "target": "sync_verifier_from_check_result", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L93", + "weight": 1.0, + "source": "src_exlab_wizard_sync_verifier_py", + "target": "sync_verifier_verifier", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_verifier_rationale_1", + "target": "src_exlab_wizard_sync_verifier_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L135", + "weight": 1.0, + "source": "sync_verifier_verifier_verify", + "target": "sync_verifier_verifyresult", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L43", + "weight": 1.0, + "source": "sync_verifier_rationale_43", + "target": "sync_verifier_verifyresult", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L34", + "weight": 0.8, + "source": "sync_verifier_verifyresult", + "target": "transports_rclone_checkresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L104", + "weight": 0.8, + "source": "sync_verifier_verifyresult", + "target": "transports_rclone_rclonedriver", + "confidence_score": 0.5 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L140", + "weight": 1.0, + "source": "sync_verifier_verifier_verify", + "target": "sync_verifier_from_check_result", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L102", + "weight": 1.0, + "source": "sync_verifier_verifier", + "target": "sync_verifier_verifier_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L109", + "weight": 1.0, + "source": "sync_verifier_verifier", + "target": "sync_verifier_verifier_verify", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L94", + "weight": 1.0, + "source": "sync_verifier_rationale_94", + "target": "sync_verifier_verifier", + "confidence_score": 1.0 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L34", + "weight": 0.8, + "source": "sync_verifier_verifier", + "target": "transports_rclone_checkresult", + "confidence_score": 0.5 + }, + { + "relation": "uses", + "confidence": "INFERRED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L104", + "weight": 0.8, + "source": "sync_verifier_verifier", + "target": "transports_rclone_rclonedriver", + "confidence_score": 0.5 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/verifier.py", + "source_location": "L118", + "weight": 1.0, + "source": "sync_verifier_rationale_118", + "target": "sync_verifier_verifier_verify", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/run_delete.py", + "source_location": "L38", + "weight": 1.0, + "source": "src_exlab_wizard_sync_run_delete_py", + "target": "sync_run_delete_delete_run_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/run_delete.py", + "source_location": "L94", + "weight": 1.0, + "source": "src_exlab_wizard_sync_run_delete_py", + "target": "sync_run_delete_prune_empty_dirs", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/run_delete.py", + "source_location": "L1", + "weight": 1.0, + "source": "sync_run_delete_rationale_1", + "target": "src_exlab_wizard_sync_run_delete_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/run_delete.py", + "source_location": "L91", + "weight": 1.0, + "source": "sync_run_delete_delete_run_files", + "target": "sync_run_delete_prune_empty_dirs", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/run_delete.py", + "source_location": "L44", + "weight": 1.0, + "source": "sync_run_delete_rationale_44", + "target": "sync_run_delete_delete_run_files", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/staging_clear.py", + "source_location": "L68", + "weight": 1.0, + "source": "orchestrator_staging_clear_clear_run_dir", + "target": "sync_run_delete_delete_run_files" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/run_delete.py", + "source_location": "L95", + "weight": 1.0, + "source": "sync_run_delete_rationale_95", + "target": "sync_run_delete_prune_empty_dirs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L21", + "weight": 1.0, + "source": "src_exlab_wizard_sync_transports_init_py", + "target": "transports_init_transporterrorkind", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L45", + "weight": 1.0, + "source": "src_exlab_wizard_sync_transports_init_py", + "target": "transports_init_transportresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L60", + "weight": 1.0, + "source": "src_exlab_wizard_sync_transports_init_py", + "target": "transports_init_transporterror", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "transports_init_rationale_1", + "target": "src_exlab_wizard_sync_transports_init_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L22", + "weight": 1.0, + "source": "transports_init_rationale_22", + "target": "transports_init_transporterrorkind", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L46", + "weight": 1.0, + "source": "transports_init_rationale_46", + "target": "transports_init_transportresult", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L265", + "weight": 1.0, + "source": "transports_rclone_rclonedriver_push", + "target": "transports_init_transportresult" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L80", + "weight": 1.0, + "source": "transports_init_transporterror", + "target": "transports_init_transporterror_init", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/__init__.py", + "source_location": "L61", + "weight": 1.0, + "source": "transports_init_rationale_61", + "target": "transports_init_transporterror", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L206", + "weight": 1.0, + "source": "transports_rclone_obscure", + "target": "transports_init_transporterror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L262", + "weight": 1.0, + "source": "transports_rclone_rclonedriver_push", + "target": "transports_init_transporterror" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L330", + "weight": 1.0, + "source": "transports_rclone_rclonedriver_check", + "target": "transports_init_transporterror" + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L69", + "weight": 1.0, + "source": "src_exlab_wizard_sync_transports_rclone_py", + "target": "transports_rclone_classify_failure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L93", + "weight": 1.0, + "source": "src_exlab_wizard_sync_transports_rclone_py", + "target": "transports_rclone_checkresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L116", + "weight": 1.0, + "source": "src_exlab_wizard_sync_transports_rclone_py", + "target": "transports_rclone_aboutresult", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L135", + "weight": 1.0, + "source": "src_exlab_wizard_sync_transports_rclone_py", + "target": "transports_rclone_build_rclone_env", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L173", + "weight": 1.0, + "source": "src_exlab_wizard_sync_transports_rclone_py", + "target": "transports_rclone_pass_env_keys_for", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L188", + "weight": 1.0, + "source": "src_exlab_wizard_sync_transports_rclone_py", + "target": "transports_rclone_obscure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L220", + "weight": 1.0, + "source": "src_exlab_wizard_sync_transports_rclone_py", + "target": "transports_rclone_rclonedriver", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L400", + "weight": 1.0, + "source": "src_exlab_wizard_sync_transports_rclone_py", + "target": "transports_rclone_parse_combined", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L1", + "weight": 1.0, + "source": "transports_rclone_rationale_1", + "target": "src_exlab_wizard_sync_transports_rclone_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L267", + "weight": 1.0, + "source": "transports_rclone_rclonedriver_push", + "target": "transports_rclone_classify_failure", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L344", + "weight": 1.0, + "source": "transports_rclone_rclonedriver_check", + "target": "transports_rclone_classify_failure", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L384", + "weight": 1.0, + "source": "transports_rclone_rclonedriver_about", + "target": "transports_rclone_classify_failure", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L70", + "weight": 1.0, + "source": "transports_rclone_rationale_70", + "target": "transports_rclone_classify_failure", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L432", + "weight": 1.0, + "source": "transports_rclone_parse_combined", + "target": "transports_rclone_checkresult", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L94", + "weight": 1.0, + "source": "transports_rclone_rationale_94", + "target": "transports_rclone_checkresult", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L381", + "weight": 1.0, + "source": "transports_rclone_rclonedriver_about", + "target": "transports_rclone_aboutresult", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L117", + "weight": 1.0, + "source": "transports_rclone_rationale_117", + "target": "transports_rclone_aboutresult", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L141", + "weight": 1.0, + "source": "transports_rclone_rationale_141", + "target": "transports_rclone_build_rclone_env", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L174", + "weight": 1.0, + "source": "transports_rclone_rationale_174", + "target": "transports_rclone_pass_env_keys_for", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L189", + "weight": 1.0, + "source": "transports_rclone_rationale_189", + "target": "transports_rclone_obscure", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L203", + "weight": 1.0, + "source": "transports_rclone_obscure", + "target": "transports_run_run_subprocess" + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L223", + "weight": 1.0, + "source": "transports_rclone_rclonedriver", + "target": "transports_rclone_rclonedriver_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L226", + "weight": 1.0, + "source": "transports_rclone_rclonedriver", + "target": "transports_rclone_rclonedriver_push", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L277", + "weight": 1.0, + "source": "transports_rclone_rclonedriver", + "target": "transports_rclone_rclonedriver_check", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L358", + "weight": 1.0, + "source": "transports_rclone_rclonedriver", + "target": "transports_rclone_rclonedriver_about", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L221", + "weight": 1.0, + "source": "transports_rclone_rationale_221", + "target": "transports_rclone_rclonedriver", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L236", + "weight": 1.0, + "source": "transports_rclone_rationale_236", + "target": "transports_rclone_rclonedriver_push", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L259", + "weight": 1.0, + "source": "transports_rclone_rclonedriver_push", + "target": "transports_run_run_subprocess" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L354", + "weight": 1.0, + "source": "transports_rclone_rclonedriver_check", + "target": "transports_rclone_parse_combined", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L286", + "weight": 1.0, + "source": "transports_rclone_rationale_286", + "target": "transports_rclone_rclonedriver_check", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L327", + "weight": 1.0, + "source": "transports_rclone_rclonedriver_check", + "target": "transports_run_run_subprocess" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L365", + "weight": 1.0, + "source": "transports_rclone_rationale_365", + "target": "transports_rclone_rclonedriver_about", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L379", + "weight": 1.0, + "source": "transports_rclone_rclonedriver_about", + "target": "transports_run_run_subprocess" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/rclone.py", + "source_location": "L401", + "weight": 1.0, + "source": "transports_rclone_rationale_401", + "target": "transports_rclone_parse_combined", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/_run.py", + "source_location": "L29", + "weight": 1.0, + "source": "src_exlab_wizard_sync_transports_run_py", + "target": "transports_run_run_subprocess", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/_run.py", + "source_location": "L1", + "weight": 1.0, + "source": "transports_run_rationale_1", + "target": "src_exlab_wizard_sync_transports_run_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/sync/transports/_run.py", + "source_location": "L36", + "weight": 1.0, + "source": "transports_run_rationale_36", + "target": "transports_run_run_subprocess", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L37", + "weight": 1.0, + "source": "src_exlab_wizard_logging_handlers_py", + "target": "logging_handlers_equipmentscopedfilehandler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L139", + "weight": 1.0, + "source": "src_exlab_wizard_logging_handlers_py", + "target": "logging_handlers_openlogfile", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L158", + "weight": 1.0, + "source": "src_exlab_wizard_logging_handlers_py", + "target": "logging_handlers_open", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L1", + "weight": 1.0, + "source": "logging_handlers_rationale_1", + "target": "src_exlab_wizard_logging_handlers_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L57", + "weight": 1.0, + "source": "logging_handlers_equipmentscopedfilehandler", + "target": "logging_handlers_equipmentscopedfilehandler_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L74", + "weight": 1.0, + "source": "logging_handlers_equipmentscopedfilehandler", + "target": "logging_handlers_equipmentscopedfilehandler_emit", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L90", + "weight": 1.0, + "source": "logging_handlers_equipmentscopedfilehandler", + "target": "logging_handlers_equipmentscopedfilehandler_close", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L105", + "weight": 1.0, + "source": "logging_handlers_equipmentscopedfilehandler", + "target": "logging_handlers_equipmentscopedfilehandler_open_for", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L124", + "weight": 1.0, + "source": "logging_handlers_equipmentscopedfilehandler", + "target": "logging_handlers_equipmentscopedfilehandler_compose_path", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L38", + "weight": 1.0, + "source": "logging_handlers_rationale_38", + "target": "logging_handlers_equipmentscopedfilehandler", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L240", + "weight": 1.0, + "source": "logging_manager_build_real_handlers", + "target": "logging_handlers_equipmentscopedfilehandler" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L63", + "weight": 1.0, + "source": "logging_handlers_equipmentscopedfilehandler_init", + "target": "logging_handlers_openlogfile_init", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L81", + "weight": 1.0, + "source": "logging_handlers_equipmentscopedfilehandler_emit", + "target": "logging_handlers_equipmentscopedfilehandler_open_for", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L83", + "weight": 1.0, + "source": "logging_handlers_equipmentscopedfilehandler_emit", + "target": "logging_handlers_openlogfile_write", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L85", + "weight": 1.0, + "source": "logging_handlers_equipmentscopedfilehandler_emit", + "target": "logging_handlers_openlogfile_fsync", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L75", + "weight": 1.0, + "source": "logging_handlers_rationale_75", + "target": "logging_handlers_equipmentscopedfilehandler_emit", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L77", + "weight": 1.0, + "source": "logging_handlers_equipmentscopedfilehandler_emit", + "target": "logging_context_get_run_context" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L100", + "weight": 1.0, + "source": "logging_handlers_equipmentscopedfilehandler_close", + "target": "logging_handlers_openlogfile_close", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L91", + "weight": 1.0, + "source": "logging_handlers_rationale_91", + "target": "logging_handlers_equipmentscopedfilehandler_close", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L118", + "weight": 1.0, + "source": "logging_handlers_equipmentscopedfilehandler_open_for", + "target": "logging_handlers_equipmentscopedfilehandler_compose_path", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L120", + "weight": 1.0, + "source": "logging_handlers_equipmentscopedfilehandler_open_for", + "target": "logging_handlers_open", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L106", + "weight": 1.0, + "source": "logging_handlers_rationale_106", + "target": "logging_handlers_equipmentscopedfilehandler_open_for", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L125", + "weight": 1.0, + "source": "logging_handlers_rationale_125", + "target": "logging_handlers_equipmentscopedfilehandler_compose_path", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L152", + "weight": 1.0, + "source": "logging_handlers_openlogfile", + "target": "logging_handlers_openlogfile_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L183", + "weight": 1.0, + "source": "logging_handlers_openlogfile", + "target": "logging_handlers_openlogfile_write", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L189", + "weight": 1.0, + "source": "logging_handlers_openlogfile", + "target": "logging_handlers_openlogfile_fsync", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L197", + "weight": 1.0, + "source": "logging_handlers_openlogfile", + "target": "logging_handlers_openlogfile_close", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L140", + "weight": 1.0, + "source": "logging_handlers_rationale_140", + "target": "logging_handlers_openlogfile", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L184", + "weight": 1.0, + "source": "logging_handlers_rationale_184", + "target": "logging_handlers_openlogfile_write", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L190", + "weight": 1.0, + "source": "logging_handlers_rationale_190", + "target": "logging_handlers_openlogfile_fsync", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/handlers.py", + "source_location": "L198", + "weight": 1.0, + "source": "logging_handlers_rationale_198", + "target": "logging_handlers_openlogfile_close", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "logging_init_rationale_1", + "target": "src_exlab_wizard_logging_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L71", + "weight": 1.0, + "source": "src_exlab_wizard_logging_format_py", + "target": "logging_format_structuredtagformatter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L104", + "weight": 1.0, + "source": "src_exlab_wizard_logging_format_py", + "target": "logging_format_format_utc_timestamp", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L115", + "weight": 1.0, + "source": "src_exlab_wizard_logging_format_py", + "target": "logging_format_render_tags", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L135", + "weight": 1.0, + "source": "src_exlab_wizard_logging_format_py", + "target": "logging_format_redact_secret", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L1", + "weight": 1.0, + "source": "logging_format_rationale_1", + "target": "src_exlab_wizard_logging_format_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L90", + "weight": 1.0, + "source": "logging_format_structuredtagformatter", + "target": "logging_format_structuredtagformatter_format", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L72", + "weight": 1.0, + "source": "logging_format_rationale_72", + "target": "logging_format_structuredtagformatter", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L124", + "weight": 1.0, + "source": "logging_manager_configure_logging", + "target": "logging_format_structuredtagformatter" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L91", + "weight": 1.0, + "source": "logging_format_structuredtagformatter_format", + "target": "logging_format_format_utc_timestamp", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L98", + "weight": 1.0, + "source": "logging_format_structuredtagformatter_format", + "target": "logging_format_render_tags", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L105", + "weight": 1.0, + "source": "logging_format_rationale_105", + "target": "logging_format_format_utc_timestamp", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L116", + "weight": 1.0, + "source": "logging_format_rationale_116", + "target": "logging_format_render_tags", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L121", + "weight": 1.0, + "source": "logging_format_render_tags", + "target": "logging_context_get_run_context" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/format.py", + "source_location": "L136", + "weight": 1.0, + "source": "logging_format_rationale_136", + "target": "logging_format_redact_secret", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L68", + "weight": 1.0, + "source": "src_exlab_wizard_logging_context_py", + "target": "logging_context_set_run_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L114", + "weight": 1.0, + "source": "src_exlab_wizard_logging_context_py", + "target": "logging_context_get_run_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L124", + "weight": 1.0, + "source": "src_exlab_wizard_logging_context_py", + "target": "logging_context_clear_run_context", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L1", + "weight": 1.0, + "source": "logging_context_rationale_1", + "target": "src_exlab_wizard_logging_context_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L76", + "weight": 1.0, + "source": "logging_context_rationale_76", + "target": "logging_context_set_run_context", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L115", + "weight": 1.0, + "source": "logging_context_rationale_115", + "target": "logging_context_get_run_context", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/context.py", + "source_location": "L125", + "weight": 1.0, + "source": "logging_context_rationale_125", + "target": "logging_context_clear_run_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L70", + "weight": 1.0, + "source": "src_exlab_wizard_logging_manager_py", + "target": "logging_manager_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L88", + "weight": 1.0, + "source": "src_exlab_wizard_logging_manager_py", + "target": "logging_manager_configure_logging", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L155", + "weight": 1.0, + "source": "src_exlab_wizard_logging_manager_py", + "target": "logging_manager_shutdown_logging", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L170", + "weight": 1.0, + "source": "src_exlab_wizard_logging_manager_py", + "target": "logging_manager_teardown_locked", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L189", + "weight": 1.0, + "source": "src_exlab_wizard_logging_manager_py", + "target": "logging_manager_resolve_threshold", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L204", + "weight": 1.0, + "source": "src_exlab_wizard_logging_manager_py", + "target": "logging_manager_resolve_rotation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L214", + "weight": 1.0, + "source": "src_exlab_wizard_logging_manager_py", + "target": "logging_manager_resolve_local_root", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L225", + "weight": 1.0, + "source": "src_exlab_wizard_logging_manager_py", + "target": "logging_manager_build_real_handlers", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L1", + "weight": 1.0, + "source": "logging_manager_rationale_1", + "target": "src_exlab_wizard_logging_manager_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L71", + "weight": 1.0, + "source": "logging_manager_rationale_71", + "target": "logging_manager_get_logger", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L116", + "weight": 1.0, + "source": "logging_manager_configure_logging", + "target": "logging_manager_teardown_locked", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L118", + "weight": 1.0, + "source": "logging_manager_configure_logging", + "target": "logging_manager_resolve_threshold", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L119", + "weight": 1.0, + "source": "logging_manager_configure_logging", + "target": "logging_manager_resolve_rotation", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L125", + "weight": 1.0, + "source": "logging_manager_configure_logging", + "target": "logging_manager_build_real_handlers", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L126", + "weight": 1.0, + "source": "logging_manager_configure_logging", + "target": "logging_manager_resolve_local_root", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L89", + "weight": 1.0, + "source": "logging_manager_rationale_89", + "target": "logging_manager_configure_logging", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L162", + "weight": 1.0, + "source": "logging_manager_shutdown_logging", + "target": "logging_manager_teardown_locked", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L156", + "weight": 1.0, + "source": "logging_manager_rationale_156", + "target": "logging_manager_shutdown_logging", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L171", + "weight": 1.0, + "source": "logging_manager_rationale_171", + "target": "logging_manager_teardown_locked", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L190", + "weight": 1.0, + "source": "logging_manager_rationale_190", + "target": "logging_manager_resolve_threshold", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L205", + "weight": 1.0, + "source": "logging_manager_rationale_205", + "target": "logging_manager_resolve_rotation", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L215", + "weight": 1.0, + "source": "logging_manager_rationale_215", + "target": "logging_manager_resolve_local_root", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/logging/manager.py", + "source_location": "L232", + "weight": 1.0, + "source": "logging_manager_rationale_232", + "target": "logging_manager_build_real_handlers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L73", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_quiescence_poller_py", + "target": "orchestrator_quiescence_poller_nassynclike", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L90", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_quiescence_poller_py", + "target": "orchestrator_quiescence_poller_filesnapshot", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L103", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_quiescence_poller_py", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L315", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_quiescence_poller_py", + "target": "orchestrator_quiescence_poller_signature", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L362", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_quiescence_poller_py", + "target": "orchestrator_quiescence_poller_matches_any_glob", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L367", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_quiescence_poller_py", + "target": "orchestrator_quiescence_poller_safe_resolve", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L1", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_rationale_1", + "target": "src_exlab_wizard_orchestrator_quiescence_poller_py", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L83", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_nassynclike", + "target": "orchestrator_quiescence_poller_nassynclike_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L84", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_nassynclike", + "target": "orchestrator_quiescence_poller_nassynclike_status", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L85", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_nassynclike", + "target": "orchestrator_quiescence_poller_nassynclike_get_by_run_path", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L86", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_nassynclike", + "target": "orchestrator_quiescence_poller_nassynclike_list_all", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L74", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_rationale_74", + "target": "orchestrator_quiescence_poller_nassynclike", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L236", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller_poll_once", + "target": "orchestrator_quiescence_poller_nassynclike_enqueue", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L219", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller_poll_once", + "target": "orchestrator_quiescence_poller_filesnapshot", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L91", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_rationale_91", + "target": "orchestrator_quiescence_poller_filesnapshot", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L115", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_init", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L131", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_apply_config", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L144", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_start", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L160", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_stop", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L173", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_loop", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L194", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_poll_once", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L243", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_discover_runs", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L283", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_iter_run_files", + "confidence_score": 1.0 + }, + { + "relation": "method", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L323", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_eligible_files", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L104", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_rationale_104", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L132", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_rationale_132", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_apply_config", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L153", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller_start", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_loop", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L145", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_rationale_145", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_start", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L161", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_rationale_161", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_stop", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L181", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller_loop", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_poll_once", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L205", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller_poll_once", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_discover_runs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L213", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller_poll_once", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_iter_run_files", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L214", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller_poll_once", + "target": "orchestrator_quiescence_poller_signature", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L234", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller_poll_once", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_eligible_files", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L195", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_rationale_195", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_poll_once", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L244", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_rationale_244", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_discover_runs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L266", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller_discover_runs", + "target": "orchestrator_scan_walk_run_leaves" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L277", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller_discover_runs", + "target": "orchestrator_scan_walk_equipment_run_leaves" + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L309", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller_iter_run_files", + "target": "orchestrator_quiescence_poller_matches_any_glob", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L284", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_rationale_284", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_iter_run_files", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L351", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_quiescencesyncpoller_eligible_files", + "target": "orchestrator_quiescence_poller_signature", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L328", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_rationale_328", + "target": "orchestrator_quiescence_poller_quiescencesyncpoller_eligible_files", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L363", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_rationale_363", + "target": "orchestrator_quiescence_poller_matches_any_glob", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/quiescence_poller.py", + "source_location": "L368", + "weight": 1.0, + "source": "orchestrator_quiescence_poller_rationale_368", + "target": "orchestrator_quiescence_poller_safe_resolve", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L30", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_scan_py", + "target": "orchestrator_scan_iter_subdirs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L55", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_scan_py", + "target": "orchestrator_scan_walk_equipment_run_leaves", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L89", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_scan_py", + "target": "orchestrator_scan_walk_run_leaves", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L105", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_scan_py", + "target": "orchestrator_scan_count_files_and_bytes", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L1", + "weight": 1.0, + "source": "orchestrator_scan_rationale_1", + "target": "src_exlab_wizard_orchestrator_scan_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L71", + "weight": 1.0, + "source": "orchestrator_scan_walk_equipment_run_leaves", + "target": "orchestrator_scan_iter_subdirs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L100", + "weight": 1.0, + "source": "orchestrator_scan_walk_run_leaves", + "target": "orchestrator_scan_iter_subdirs", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L31", + "weight": 1.0, + "source": "orchestrator_scan_rationale_31", + "target": "orchestrator_scan_iter_subdirs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L101", + "weight": 1.0, + "source": "orchestrator_scan_walk_run_leaves", + "target": "orchestrator_scan_walk_equipment_run_leaves", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L56", + "weight": 1.0, + "source": "orchestrator_scan_rationale_56", + "target": "orchestrator_scan_walk_equipment_run_leaves", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L90", + "weight": 1.0, + "source": "orchestrator_scan_rationale_90", + "target": "orchestrator_scan_walk_run_leaves", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L108", + "weight": 1.0, + "source": "orchestrator_staging_query_list_staged_runs", + "target": "orchestrator_scan_walk_run_leaves" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/_scan.py", + "source_location": "L106", + "weight": 1.0, + "source": "orchestrator_scan_rationale_106", + "target": "orchestrator_scan_count_files_and_bytes", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/staging_clear.py", + "source_location": "L58", + "weight": 1.0, + "source": "orchestrator_staging_clear_clear_run_dir", + "target": "orchestrator_scan_count_files_and_bytes" + }, + { + "relation": "calls", + "context": "call", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L132", + "weight": 1.0, + "source": "orchestrator_staging_query_summarize_run", + "target": "orchestrator_scan_count_files_and_bytes" + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/__init__.py", + "source_location": "L1", + "weight": 1.0, + "source": "orchestrator_init_rationale_1", + "target": "src_exlab_wizard_orchestrator_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_clear.py", + "source_location": "L33", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_staging_clear_py", + "target": "orchestrator_staging_clear_clear_run_dir", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_clear.py", + "source_location": "L1", + "weight": 1.0, + "source": "orchestrator_staging_clear_rationale_1", + "target": "src_exlab_wizard_orchestrator_staging_clear_py", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_clear.py", + "source_location": "L34", + "weight": 1.0, + "source": "orchestrator_staging_clear_rationale_34", + "target": "orchestrator_staging_clear_clear_run_dir", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L44", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_staging_query_py", + "target": "orchestrator_staging_query_stagedrunsummary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L73", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_staging_query_py", + "target": "orchestrator_staging_query_list_staged_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L119", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_staging_query_py", + "target": "orchestrator_staging_query_summarize_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L149", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_staging_query_py", + "target": "orchestrator_staging_query_rollup_value", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L165", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_staging_query_py", + "target": "orchestrator_staging_query_path_identity", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L189", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_staging_query_py", + "target": "orchestrator_staging_query_dir_mtime_iso", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L198", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_staging_query_py", + "target": "orchestrator_staging_query_parse_iso", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L204", + "weight": 1.0, + "source": "src_exlab_wizard_orchestrator_staging_query_py", + "target": "orchestrator_staging_query_iso_to_epoch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L1", + "weight": 1.0, + "source": "orchestrator_staging_query_rationale_1", + "target": "src_exlab_wizard_orchestrator_staging_query_py", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L136", + "weight": 1.0, + "source": "orchestrator_staging_query_summarize_run", + "target": "orchestrator_staging_query_stagedrunsummary", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L45", + "weight": 1.0, + "source": "orchestrator_staging_query_rationale_45", + "target": "orchestrator_staging_query_stagedrunsummary", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L108", + "weight": 1.0, + "source": "orchestrator_staging_query_list_staged_runs", + "target": "orchestrator_staging_query_summarize_run", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L110", + "weight": 1.0, + "source": "orchestrator_staging_query_list_staged_runs", + "target": "orchestrator_staging_query_iso_to_epoch", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L80", + "weight": 1.0, + "source": "orchestrator_staging_query_rationale_80", + "target": "orchestrator_staging_query_list_staged_runs", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L131", + "weight": 1.0, + "source": "orchestrator_staging_query_summarize_run", + "target": "orchestrator_staging_query_path_identity", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L133", + "weight": 1.0, + "source": "orchestrator_staging_query_summarize_run", + "target": "orchestrator_staging_query_dir_mtime_iso", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L134", + "weight": 1.0, + "source": "orchestrator_staging_query_summarize_run", + "target": "orchestrator_staging_query_parse_iso", + "confidence_score": 1.0 + }, + { + "relation": "calls", + "context": "call", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L135", + "weight": 1.0, + "source": "orchestrator_staging_query_summarize_run", + "target": "orchestrator_staging_query_rollup_value", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L125", + "weight": 1.0, + "source": "orchestrator_staging_query_rationale_125", + "target": "orchestrator_staging_query_summarize_run", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L150", + "weight": 1.0, + "source": "orchestrator_staging_query_rationale_150", + "target": "orchestrator_staging_query_rollup_value", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L166", + "weight": 1.0, + "source": "orchestrator_staging_query_rationale_166", + "target": "orchestrator_staging_query_path_identity", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L190", + "weight": 1.0, + "source": "orchestrator_staging_query_rationale_190", + "target": "orchestrator_staging_query_dir_mtime_iso", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L199", + "weight": 1.0, + "source": "orchestrator_staging_query_rationale_199", + "target": "orchestrator_staging_query_parse_iso", + "confidence_score": 1.0 + }, + { + "relation": "rationale_for", + "confidence": "EXTRACTED", + "source_file": "src/exlab_wizard/orchestrator/staging_query.py", + "source_location": "L205", + "weight": 1.0, + "source": "orchestrator_staging_query_rationale_205", + "target": "orchestrator_staging_query_iso_to_epoch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L1", + "weight": 1.0, + "source": "readme_md", + "target": "exlabwizard_readme_exlabwizard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L10", + "weight": 1.0, + "source": "exlabwizard_readme_exlabwizard", + "target": "exlabwizard_readme_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L20", + "weight": 1.0, + "source": "exlabwizard_readme_exlabwizard", + "target": "exlabwizard_readme_installation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L61", + "weight": 1.0, + "source": "exlabwizard_readme_exlabwizard", + "target": "exlabwizard_readme_running_exlab_wizard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L89", + "weight": 1.0, + "source": "exlabwizard_readme_exlabwizard", + "target": "exlabwizard_readme_building_a_distributable_binary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L100", + "weight": 1.0, + "source": "exlabwizard_readme_exlabwizard", + "target": "exlabwizard_readme_tests_lint_type_check", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L114", + "weight": 1.0, + "source": "exlabwizard_readme_exlabwizard", + "target": "exlabwizard_readme_documentation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L22", + "weight": 1.0, + "source": "exlabwizard_readme_installation", + "target": "exlabwizard_readme_prerequisites", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L32", + "weight": 1.0, + "source": "exlabwizard_readme_installation", + "target": "exlabwizard_readme_from_source_development", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L53", + "weight": 1.0, + "source": "exlabwizard_readme_installation", + "target": "exlabwizard_readme_pre_built_binary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L37", + "weight": 1.0, + "source": "exlabwizard_readme_from_source_development", + "target": "exlabwizard_readme_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L73", + "weight": 1.0, + "source": "exlabwizard_readme_running_exlab_wizard", + "target": "exlabwizard_readme_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L91", + "weight": 1.0, + "source": "exlabwizard_readme_building_a_distributable_binary", + "target": "exlabwizard_readme_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "README.md", + "source_location": "L102", + "weight": 1.0, + "source": "exlabwizard_readme_tests_lint_type_check", + "target": "exlabwizard_readme_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_md", + "target": "exlabwizard_design_frontend_design_style_guide", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L12", + "weight": 1.0, + "source": "exlabwizard_design_frontend_design_style_guide", + "target": "exlabwizard_design_absolute_constraints", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L37", + "weight": 1.0, + "source": "exlabwizard_design_frontend_design_style_guide", + "target": "exlabwizard_design_00_logo_and_branding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L44", + "weight": 1.0, + "source": "exlabwizard_design_frontend_design_style_guide", + "target": "exlabwizard_design_01_color_palette", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L131", + "weight": 1.0, + "source": "exlabwizard_design_frontend_design_style_guide", + "target": "exlabwizard_design_02_typography", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L190", + "weight": 1.0, + "source": "exlabwizard_design_frontend_design_style_guide", + "target": "exlabwizard_design_03_spacing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L213", + "weight": 1.0, + "source": "exlabwizard_design_frontend_design_style_guide", + "target": "exlabwizard_design_04_border_radius_shadows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L238", + "weight": 1.0, + "source": "exlabwizard_design_frontend_design_style_guide", + "target": "exlabwizard_design_05_components", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L493", + "weight": 1.0, + "source": "exlabwizard_design_frontend_design_style_guide", + "target": "exlabwizard_design_06_data_visualization", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L553", + "weight": 1.0, + "source": "exlabwizard_design_frontend_design_style_guide", + "target": "exlabwizard_design_07_code_integration", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L696", + "weight": 1.0, + "source": "exlabwizard_design_frontend_design_style_guide", + "target": "exlabwizard_design_08_usage_rules_anti_patterns", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L46", + "weight": 1.0, + "source": "exlabwizard_design_01_color_palette", + "target": "exlabwizard_design_primary_colors_ui_only", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L59", + "weight": 1.0, + "source": "exlabwizard_design_01_color_palette", + "target": "exlabwizard_design_data_colors_okabe_ito_visualization_only", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L90", + "weight": 1.0, + "source": "exlabwizard_design_01_color_palette", + "target": "exlabwizard_design_surface_neutral_tokens", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L100", + "weight": 1.0, + "source": "exlabwizard_design_01_color_palette", + "target": "exlabwizard_design_semantic_color_assignments", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L109", + "weight": 1.0, + "source": "exlabwizard_design_01_color_palette", + "target": "exlabwizard_design_color_selection_decision_logic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L136", + "weight": 1.0, + "source": "exlabwizard_design_02_typography", + "target": "exlabwizard_design_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L144", + "weight": 1.0, + "source": "exlabwizard_design_02_typography", + "target": "exlabwizard_design_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L151", + "weight": 1.0, + "source": "exlabwizard_design_02_typography", + "target": "exlabwizard_design_font_assignment_rules", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L159", + "weight": 1.0, + "source": "exlabwizard_design_02_typography", + "target": "exlabwizard_design_type_scale", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L174", + "weight": 1.0, + "source": "exlabwizard_design_02_typography", + "target": "exlabwizard_design_typography_rules", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L215", + "weight": 1.0, + "source": "exlabwizard_design_04_border_radius_shadows", + "target": "exlabwizard_design_border_radius", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L224", + "weight": 1.0, + "source": "exlabwizard_design_04_border_radius_shadows", + "target": "exlabwizard_design_shadows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L240", + "weight": 1.0, + "source": "exlabwizard_design_05_components", + "target": "exlabwizard_design_stat_cards", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L293", + "weight": 1.0, + "source": "exlabwizard_design_05_components", + "target": "exlabwizard_design_progress_bars", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L345", + "weight": 1.0, + "source": "exlabwizard_design_05_components", + "target": "exlabwizard_design_buttons", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L381", + "weight": 1.0, + "source": "exlabwizard_design_05_components", + "target": "exlabwizard_design_badges", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L412", + "weight": 1.0, + "source": "exlabwizard_design_05_components", + "target": "exlabwizard_design_alerts_callouts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L433", + "weight": 1.0, + "source": "exlabwizard_design_05_components", + "target": "exlabwizard_design_data_tables", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L450", + "weight": 1.0, + "source": "exlabwizard_design_05_components", + "target": "exlabwizard_design_form_inputs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L471", + "weight": 1.0, + "source": "exlabwizard_design_05_components", + "target": "exlabwizard_design_navigation_tabs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L261", + "weight": 1.0, + "source": "exlabwizard_design_stat_cards", + "target": "exlabwizard_design_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L272", + "weight": 1.0, + "source": "exlabwizard_design_stat_cards", + "target": "exlabwizard_design_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L325", + "weight": 1.0, + "source": "exlabwizard_design_progress_bars", + "target": "exlabwizard_design_codeblock_5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L473", + "weight": 1.0, + "source": "exlabwizard_design_navigation_tabs", + "target": "exlabwizard_design_codeblock_6", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L495", + "weight": 1.0, + "source": "exlabwizard_design_06_data_visualization", + "target": "exlabwizard_design_categorical_series_order", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L511", + "weight": 1.0, + "source": "exlabwizard_design_06_data_visualization", + "target": "exlabwizard_design_chart_styling_rules", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L526", + "weight": 1.0, + "source": "exlabwizard_design_06_data_visualization", + "target": "exlabwizard_design_donut_pie_charts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L537", + "weight": 1.0, + "source": "exlabwizard_design_06_data_visualization", + "target": "exlabwizard_design_heatmap_colorscale_single_variable", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L528", + "weight": 1.0, + "source": "exlabwizard_design_donut_pie_charts", + "target": "exlabwizard_design_codeblock_7", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L555", + "weight": 1.0, + "source": "exlabwizard_design_07_code_integration", + "target": "exlabwizard_design_matplotlib_seaborn_rcparams", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L596", + "weight": 1.0, + "source": "exlabwizard_design_07_code_integration", + "target": "exlabwizard_design_napari_label_layer_colors", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L613", + "weight": 1.0, + "source": "exlabwizard_design_07_code_integration", + "target": "exlabwizard_design_css_custom_properties", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L559", + "weight": 1.0, + "source": "exlabwizard_design_matplotlib_seaborn_rcparams", + "target": "exlabwizard_design_codeblock_8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L600", + "weight": 1.0, + "source": "exlabwizard_design_napari_label_layer_colors", + "target": "exlabwizard_design_codeblock_9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L617", + "weight": 1.0, + "source": "exlabwizard_design_css_custom_properties", + "target": "exlabwizard_design_codeblock_10", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L698", + "weight": 1.0, + "source": "exlabwizard_design_08_usage_rules_anti_patterns", + "target": "exlabwizard_design_do", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "DESIGN.md", + "source_location": "L708", + "weight": 1.0, + "source": "exlabwizard_design_08_usage_rules_anti_patterns", + "target": "exlabwizard_design_don_t", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "_internal/README.md", + "source_location": "L1", + "weight": 1.0, + "source": "internal_readme_md", + "target": "internal_readme_internal_bundled_starter_content", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "_internal/README.md", + "source_location": "L13", + "weight": 1.0, + "source": "internal_readme_internal_bundled_starter_content", + "target": "internal_readme_layout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "_internal/README.md", + "source_location": "L24", + "weight": 1.0, + "source": "internal_readme_internal_bundled_starter_content", + "target": "internal_readme_populating_for_v1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "_internal/README.md", + "source_location": "L58", + "weight": 1.0, + "source": "internal_readme_internal_bundled_starter_content", + "target": "internal_readme_v1_status", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "_internal/README.md", + "source_location": "L15", + "weight": 1.0, + "source": "internal_readme_layout", + "target": "internal_readme_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "_internal/README.md", + "source_location": "L30", + "weight": 1.0, + "source": "internal_readme_populating_for_v1", + "target": "internal_readme_bundled_templates_spec_5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "_internal/README.md", + "source_location": "L47", + "weight": 1.0, + "source": "internal_readme_populating_for_v1", + "target": "internal_readme_bundled_plugins_spec_6_5_6_6", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L1", + "weight": 1.0, + "source": "tests_docker_readme_md", + "target": "docker_readme_nas_emulator_docker_compose_stack", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L9", + "weight": 1.0, + "source": "docker_readme_nas_emulator_docker_compose_stack", + "target": "docker_readme_purpose_scope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L26", + "weight": 1.0, + "source": "docker_readme_nas_emulator_docker_compose_stack", + "target": "docker_readme_requirements", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L36", + "weight": 1.0, + "source": "docker_readme_nas_emulator_docker_compose_stack", + "target": "docker_readme_layout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L53", + "weight": 1.0, + "source": "docker_readme_nas_emulator_docker_compose_stack", + "target": "docker_readme_first_time_setup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L81", + "weight": 1.0, + "source": "docker_readme_nas_emulator_docker_compose_stack", + "target": "docker_readme_wiring_into_exlab_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L142", + "weight": 1.0, + "source": "docker_readme_nas_emulator_docker_compose_stack", + "target": "docker_readme_lifecycle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L155", + "weight": 1.0, + "source": "docker_readme_nas_emulator_docker_compose_stack", + "target": "docker_readme_pytest_fixture_optional", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L192", + "weight": 1.0, + "source": "docker_readme_nas_emulator_docker_compose_stack", + "target": "docker_readme_platform_notes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L204", + "weight": 1.0, + "source": "docker_readme_nas_emulator_docker_compose_stack", + "target": "docker_readme_offline_air_gapped_use", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L216", + "weight": 1.0, + "source": "docker_readme_nas_emulator_docker_compose_stack", + "target": "docker_readme_troubleshooting", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L38", + "weight": 1.0, + "source": "docker_readme_layout", + "target": "docker_readme_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L57", + "weight": 1.0, + "source": "docker_readme_first_time_setup", + "target": "docker_readme_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L87", + "weight": 1.0, + "source": "docker_readme_wiring_into_exlab_config", + "target": "docker_readme_rclone_sftp_transport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L103", + "weight": 1.0, + "source": "docker_readme_wiring_into_exlab_config", + "target": "docker_readme_rclone_smb_transport", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L123", + "weight": 1.0, + "source": "docker_readme_wiring_into_exlab_config", + "target": "docker_readme_test_prefix_mode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L131", + "weight": 1.0, + "source": "docker_readme_wiring_into_exlab_config", + "target": "docker_readme_shorter_quiescence_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L89", + "weight": 1.0, + "source": "docker_readme_rclone_sftp_transport", + "target": "docker_readme_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L105", + "weight": 1.0, + "source": "docker_readme_rclone_smb_transport", + "target": "docker_readme_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L136", + "weight": 1.0, + "source": "docker_readme_shorter_quiescence_window", + "target": "docker_readme_codeblock_5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L144", + "weight": 1.0, + "source": "docker_readme_lifecycle", + "target": "docker_readme_codeblock_6", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L165", + "weight": 1.0, + "source": "docker_readme_pytest_fixture_optional", + "target": "docker_readme_codeblock_7", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/docker/README.md", + "source_location": "L206", + "weight": 1.0, + "source": "docker_readme_offline_air_gapped_use", + "target": "docker_readme_codeblock_8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/lims/exlab_v1/README.md", + "source_location": "L1", + "weight": 1.0, + "source": "tests_fixtures_lims_exlab_v1_readme_md", + "target": "exlab_v1_readme_exlab_v1_lims_contract_snapshots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/lims/exlab_v1/README.md", + "source_location": "L9", + "weight": 1.0, + "source": "exlab_v1_readme_exlab_v1_lims_contract_snapshots", + "target": "exlab_v1_readme_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/lims/exlab_v1/README.md", + "source_location": "L18", + "weight": 1.0, + "source": "exlab_v1_readme_exlab_v1_lims_contract_snapshots", + "target": "exlab_v1_readme_provenance", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/lims/exlab_v1/README.md", + "source_location": "L26", + "weight": 1.0, + "source": "exlab_v1_readme_exlab_v1_lims_contract_snapshots", + "target": "exlab_v1_readme_regenerating", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/fixtures/lims/exlab_v1/README.md", + "source_location": "L30", + "weight": 1.0, + "source": "exlab_v1_readme_regenerating", + "target": "exlab_v1_readme_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/README.md", + "source_location": "L1", + "weight": 1.0, + "source": "tests_e2e_readme_md", + "target": "e2e_readme_e2e_test_suite", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/README.md", + "source_location": "L5", + "weight": 1.0, + "source": "e2e_readme_e2e_test_suite", + "target": "e2e_readme_setup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/README.md", + "source_location": "L30", + "weight": 1.0, + "source": "e2e_readme_e2e_test_suite", + "target": "e2e_readme_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/README.md", + "source_location": "L48", + "weight": 1.0, + "source": "e2e_readme_e2e_test_suite", + "target": "e2e_readme_status_of_the_15_flow_merged_plan", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/README.md", + "source_location": "L75", + "weight": 1.0, + "source": "e2e_readme_e2e_test_suite", + "target": "e2e_readme_page_objects", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/README.md", + "source_location": "L94", + "weight": 1.0, + "source": "e2e_readme_e2e_test_suite", + "target": "e2e_readme_test_app_routes_tests_e2e_test_app_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/README.md", + "source_location": "L111", + "weight": 1.0, + "source": "e2e_readme_e2e_test_suite", + "target": "e2e_readme_adding_a_new_flow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/README.md", + "source_location": "L7", + "weight": 1.0, + "source": "e2e_readme_setup", + "target": "e2e_readme_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "tests/e2e/README.md", + "source_location": "L32", + "weight": 1.0, + "source": "e2e_readme_run", + "target": "e2e_readme_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_remaining_work_tasks_md", + "target": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L7", + "weight": 1.0, + "source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", + "target": "docs_remaining_work_tasks_how_to_use_this_tracker", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L18", + "weight": 1.0, + "source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", + "target": "docs_remaining_work_tasks_phase_1_release_blocking_correctness", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L47", + "weight": 1.0, + "source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", + "target": "docs_remaining_work_tasks_phase_2_session_control_epic_build_in_order_they_compound", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L136", + "weight": 1.0, + "source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", + "target": "docs_remaining_work_tasks_phase_3_visibility_usability", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L233", + "weight": 1.0, + "source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", + "target": "docs_remaining_work_tasks_phase_4_cleanups_anytime", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L263", + "weight": 1.0, + "source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", + "target": "docs_remaining_work_tasks_shared_foundations_build_once_reused_across_tasks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L269", + "weight": 1.0, + "source": "docs_remaining_work_tasks_exlab_wizard_remaining_work_tracked_tasks", + "target": "docs_remaining_work_tasks_progress", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L20", + "weight": 1.0, + "source": "docs_remaining_work_tasks_phase_1_release_blocking_correctness", + "target": "docs_remaining_work_tasks_x_t1_inject_the_real_readmegenerator_reconcile_readmecontext_return_type", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L49", + "weight": 1.0, + "source": "docs_remaining_work_tasks_phase_2_session_control_epic_build_in_order_they_compound", + "target": "docs_remaining_work_tasks_x_t2_event_subscription_consumer_in_the_creation_flow_shared_foundation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L72", + "weight": 1.0, + "source": "docs_remaining_work_tasks_phase_2_session_control_epic_build_in_order_they_compound", + "target": "docs_remaining_work_tasks_x_t3_render_the_operations_modal_toolbar_footer_hooks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L95", + "weight": 1.0, + "source": "docs_remaining_work_tasks_phase_2_session_control_epic_build_in_order_they_compound", + "target": "docs_remaining_work_tasks_x_t4_wire_resume_cancel_9_4_confirm_9_6_disable_rule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L112", + "weight": 1.0, + "source": "docs_remaining_work_tasks_phase_2_session_control_epic_build_in_order_they_compound", + "target": "docs_remaining_work_tasks_x_t5_plugin_input_required_escalation_dialog_new_component", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L138", + "weight": 1.0, + "source": "docs_remaining_work_tasks_phase_3_visibility_usability", + "target": "docs_remaining_work_tasks_x_t6_live_problems_audit_stream_real_counts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L161", + "weight": 1.0, + "source": "docs_remaining_work_tasks_phase_3_visibility_usability", + "target": "docs_remaining_work_tasks_x_t7_operators_allowlist_chip_editor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L177", + "weight": 1.0, + "source": "docs_remaining_work_tasks_phase_3_visibility_usability", + "target": "docs_remaining_work_tasks_x_t8_start_at_login_checkbox_wiring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L192", + "weight": 1.0, + "source": "docs_remaining_work_tasks_phase_3_visibility_usability", + "target": "docs_remaining_work_tasks_x_t9_quit_exlab_wizard_now_button_deps_quit_hook", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L206", + "weight": 1.0, + "source": "docs_remaining_work_tasks_phase_3_visibility_usability", + "target": "docs_remaining_work_tasks_x_t10_content_scan_extensions_chip_editor_reset_to_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L219", + "weight": 1.0, + "source": "docs_remaining_work_tasks_phase_3_visibility_usability", + "target": "docs_remaining_work_tasks_x_t11_application_section_status_labels_parity_7_13", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L235", + "weight": 1.0, + "source": "docs_remaining_work_tasks_phase_4_cleanups_anytime", + "target": "docs_remaining_work_tasks_x_t12_resolve_the_offline_catalogue_version_policy_todo", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK_TASKS.md", + "source_location": "L248", + "weight": 1.0, + "source": "docs_remaining_work_tasks_phase_4_cleanups_anytime", + "target": "docs_remaining_work_tasks_x_t13_delete_the_stale_plugin_registry_comment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_remaining_work_md", + "target": "docs_remaining_work_exlab_wizard_remaining_work_specification", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L13", + "weight": 1.0, + "source": "docs_remaining_work_exlab_wizard_remaining_work_specification", + "target": "docs_remaining_work_0_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L40", + "weight": 1.0, + "source": "docs_remaining_work_exlab_wizard_remaining_work_specification", + "target": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L92", + "weight": 1.0, + "source": "docs_remaining_work_exlab_wizard_remaining_work_specification", + "target": "docs_remaining_work_b_backend_features_fully_built_but_not_surfaced_in_the_gui", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L149", + "weight": 1.0, + "source": "docs_remaining_work_exlab_wizard_remaining_work_specification", + "target": "docs_remaining_work_c_no_op_default_collaborators", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L177", + "weight": 1.0, + "source": "docs_remaining_work_exlab_wizard_remaining_work_specification", + "target": "docs_remaining_work_d_todo_stale_markers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L194", + "weight": 1.0, + "source": "docs_remaining_work_exlab_wizard_remaining_work_specification", + "target": "docs_remaining_work_prioritized_backlog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L15", + "weight": 1.0, + "source": "docs_remaining_work_0_context", + "target": "docs_remaining_work_0_1_architecture_read_first", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L25", + "weight": 1.0, + "source": "docs_remaining_work_0_context", + "target": "docs_remaining_work_0_2_what_the_recent_edit_changed_and_didn_t", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L32", + "weight": 1.0, + "source": "docs_remaining_work_0_context", + "target": "docs_remaining_work_0_3_healthy_baseline_not_stubs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L42", + "weight": 1.0, + "source": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", + "target": "docs_remaining_work_a1_quit_exlab_wizard_now_button_has_no_handler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L52", + "weight": 1.0, + "source": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", + "target": "docs_remaining_work_a2_start_at_login_autostart_checkbox_is_not_bound", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L62", + "weight": 1.0, + "source": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", + "target": "docs_remaining_work_a3_application_section_status_indicators_are_hardcoded_missing_7_13_parity", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L69", + "weight": 1.0, + "source": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", + "target": "docs_remaining_work_a4_operators_allowlist_has_backend_enforcement_but_no_editor_ui", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L79", + "weight": 1.0, + "source": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", + "target": "docs_remaining_work_a5_content_scan_extensions_renders_read_only_partial", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L86", + "weight": 1.0, + "source": "docs_remaining_work_a_ui_controls_that_exist_but_are_not_functional", + "target": "docs_remaining_work_resolved_not_a_defect_previously_suspected_in_a", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L100", + "weight": 1.0, + "source": "docs_remaining_work_b_backend_features_fully_built_but_not_surfaced_in_the_gui", + "target": "docs_remaining_work_b1_operations_modal_is_built_exported_and_rendered_nowhere_highest_impact", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L111", + "weight": 1.0, + "source": "docs_remaining_work_b_backend_features_fully_built_but_not_surfaced_in_the_gui", + "target": "docs_remaining_work_b2_no_gui_path_to_resume_or_cancel_a_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L118", + "weight": 1.0, + "source": "docs_remaining_work_b_backend_features_fully_built_but_not_surfaced_in_the_gui", + "target": "docs_remaining_work_b3_plugin_input_required_cannot_be_answered_from_the_gui", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L125", + "weight": 1.0, + "source": "docs_remaining_work_b_backend_features_fully_built_but_not_surfaced_in_the_gui", + "target": "docs_remaining_work_b4_live_per_session_phase_progress_is_static_the_gui_never_subscribes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L132", + "weight": 1.0, + "source": "docs_remaining_work_b_backend_features_fully_built_but_not_surfaced_in_the_gui", + "target": "docs_remaining_work_b5_audit_problems_live_stream_not_consumed_by_the_in_process_ui", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L151", + "weight": 1.0, + "source": "docs_remaining_work_c_no_op_default_collaborators", + "target": "docs_remaining_work_c1_production_runs_on_the_stub_readme_generator_real_defect", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L163", + "weight": 1.0, + "source": "docs_remaining_work_c_no_op_default_collaborators", + "target": "docs_remaining_work_c2_noopnassync_controller_default_informational_not_a_production_defect", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L168", + "weight": 1.0, + "source": "docs_remaining_work_c_no_op_default_collaborators", + "target": "docs_remaining_work_c3_runtime_guard_toasts_where_the_none_noop_path_surfaces_in_the_live_ui", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L179", + "weight": 1.0, + "source": "docs_remaining_work_d_todo_stale_markers", + "target": "docs_remaining_work_d1_offline_catalogue_schema_version_gate_is_stricter_than_the_cache_file_policy_open_spec_question", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L186", + "weight": 1.0, + "source": "docs_remaining_work_d_todo_stale_markers", + "target": "docs_remaining_work_d2_stale_plugins_registry_py_not_yet_committed_comment_documentation_only", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L212", + "weight": 1.0, + "source": "docs_remaining_work_prioritized_backlog", + "target": "docs_remaining_work_shared_foundations_to_build_once", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/REMAINING_WORK.md", + "source_location": "L218", + "weight": 1.0, + "source": "docs_remaining_work_prioritized_backlog", + "target": "docs_remaining_work_suggested_sequencing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/UX_INTERACTIONS.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_ux_interactions_md", + "target": "docs_ux_interactions_ux_interaction_reference", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/UX_INTERACTIONS.md", + "source_location": "L14", + "weight": 1.0, + "source": "docs_ux_interactions_ux_interaction_reference", + "target": "docs_ux_interactions_first_launch_setup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/UX_INTERACTIONS.md", + "source_location": "L23", + "weight": 1.0, + "source": "docs_ux_interactions_ux_interaction_reference", + "target": "docs_ux_interactions_settings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/UX_INTERACTIONS.md", + "source_location": "L37", + "weight": 1.0, + "source": "docs_ux_interactions_ux_interaction_reference", + "target": "docs_ux_interactions_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/UX_INTERACTIONS.md", + "source_location": "L55", + "weight": 1.0, + "source": "docs_ux_interactions_ux_interaction_reference", + "target": "docs_ux_interactions_nas_credentials", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/UX_INTERACTIONS.md", + "source_location": "L63", + "weight": 1.0, + "source": "docs_ux_interactions_ux_interaction_reference", + "target": "docs_ux_interactions_new_template", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/UX_INTERACTIONS.md", + "source_location": "L74", + "weight": 1.0, + "source": "docs_ux_interactions_ux_interaction_reference", + "target": "docs_ux_interactions_new_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/UX_INTERACTIONS.md", + "source_location": "L93", + "weight": 1.0, + "source": "docs_ux_interactions_ux_interaction_reference", + "target": "docs_ux_interactions_new_run_test_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/UX_INTERACTIONS.md", + "source_location": "L109", + "weight": 1.0, + "source": "docs_ux_interactions_ux_interaction_reference", + "target": "docs_ux_interactions_add_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/UX_INTERACTIONS.md", + "source_location": "L121", + "weight": 1.0, + "source": "docs_ux_interactions_ux_interaction_reference", + "target": "docs_ux_interactions_file_explorer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/index.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_index_md", + "target": "source_index_exlab_wizard_documentation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/index.md", + "source_location": "L7", + "weight": 1.0, + "source": "source_index_exlab_wizard_documentation", + "target": "source_index_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/index.md", + "source_location": "L16", + "weight": 1.0, + "source": "source_index_exlab_wizard_documentation", + "target": "source_index_what_is_exlab_wizard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/index.md", + "source_location": "L26", + "weight": 1.0, + "source": "source_index_exlab_wizard_documentation", + "target": "source_index_where_to_start", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/index.md", + "source_location": "L38", + "weight": 1.0, + "source": "source_index_exlab_wizard_documentation", + "target": "source_index_project_metadata", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/02_browse.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_user_guide_02_browse_md", + "target": "user_guide_02_browse_3_4_browse_existing_equipment_projects_and_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/02_browse.md", + "source_location": "L3", + "weight": 1.0, + "source": "user_guide_02_browse_3_4_browse_existing_equipment_projects_and_runs", + "target": "user_guide_02_browse_capability_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/02_browse.md", + "source_location": "L20", + "weight": 1.0, + "source": "user_guide_02_browse_3_4_browse_existing_equipment_projects_and_runs", + "target": "user_guide_02_browse_walkthrough", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/02_browse.md", + "source_location": "L51", + "weight": 1.0, + "source": "user_guide_02_browse_3_4_browse_existing_equipment_projects_and_runs", + "target": "user_guide_02_browse_screenshots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/02_browse.md", + "source_location": "L63", + "weight": 1.0, + "source": "user_guide_02_browse_3_4_browse_existing_equipment_projects_and_runs", + "target": "user_guide_02_browse_related_material", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/02_browse.md", + "source_location": "L53", + "weight": 1.0, + "source": "user_guide_02_browse_screenshots", + "target": "user_guide_02_browse_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/02_browse.md", + "source_location": "L58", + "weight": 1.0, + "source": "user_guide_02_browse_screenshots", + "target": "user_guide_02_browse_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/03_create_project.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_user_guide_03_create_project_md", + "target": "user_guide_03_create_project_3_1_create_a_new_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/03_create_project.md", + "source_location": "L3", + "weight": 1.0, + "source": "user_guide_03_create_project_3_1_create_a_new_project", + "target": "user_guide_03_create_project_capability_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/03_create_project.md", + "source_location": "L17", + "weight": 1.0, + "source": "user_guide_03_create_project_3_1_create_a_new_project", + "target": "user_guide_03_create_project_walkthrough", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/03_create_project.md", + "source_location": "L30", + "weight": 1.0, + "source": "user_guide_03_create_project_3_1_create_a_new_project", + "target": "user_guide_03_create_project_screenshots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/03_create_project.md", + "source_location": "L41", + "weight": 1.0, + "source": "user_guide_03_create_project_3_1_create_a_new_project", + "target": "user_guide_03_create_project_related_material", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/03_create_project.md", + "source_location": "L36", + "weight": 1.0, + "source": "user_guide_03_create_project_screenshots", + "target": "user_guide_03_create_project_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/08_problems.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_user_guide_08_problems_md", + "target": "user_guide_08_problems_3_8_review_and_resolve_naming_and_validation_problems", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/08_problems.md", + "source_location": "L3", + "weight": 1.0, + "source": "user_guide_08_problems_3_8_review_and_resolve_naming_and_validation_problems", + "target": "user_guide_08_problems_capability_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/08_problems.md", + "source_location": "L17", + "weight": 1.0, + "source": "user_guide_08_problems_3_8_review_and_resolve_naming_and_validation_problems", + "target": "user_guide_08_problems_walkthrough", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/08_problems.md", + "source_location": "L33", + "weight": 1.0, + "source": "user_guide_08_problems_3_8_review_and_resolve_naming_and_validation_problems", + "target": "user_guide_08_problems_screenshots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/08_problems.md", + "source_location": "L40", + "weight": 1.0, + "source": "user_guide_08_problems_3_8_review_and_resolve_naming_and_validation_problems", + "target": "user_guide_08_problems_related_material", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/08_problems.md", + "source_location": "L35", + "weight": 1.0, + "source": "user_guide_08_problems_screenshots", + "target": "user_guide_08_problems_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/07_orchestrator.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_user_guide_07_orchestrator_md", + "target": "user_guide_07_orchestrator_3_7_monitor_orchestrator_staging", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/07_orchestrator.md", + "source_location": "L3", + "weight": 1.0, + "source": "user_guide_07_orchestrator_3_7_monitor_orchestrator_staging", + "target": "user_guide_07_orchestrator_capability_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/07_orchestrator.md", + "source_location": "L16", + "weight": 1.0, + "source": "user_guide_07_orchestrator_3_7_monitor_orchestrator_staging", + "target": "user_guide_07_orchestrator_walkthrough", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/07_orchestrator.md", + "source_location": "L29", + "weight": 1.0, + "source": "user_guide_07_orchestrator_3_7_monitor_orchestrator_staging", + "target": "user_guide_07_orchestrator_screenshots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/07_orchestrator.md", + "source_location": "L41", + "weight": 1.0, + "source": "user_guide_07_orchestrator_3_7_monitor_orchestrator_staging", + "target": "user_guide_07_orchestrator_related_material", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/07_orchestrator.md", + "source_location": "L31", + "weight": 1.0, + "source": "user_guide_07_orchestrator_screenshots", + "target": "user_guide_07_orchestrator_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/07_orchestrator.md", + "source_location": "L36", + "weight": 1.0, + "source": "user_guide_07_orchestrator_screenshots", + "target": "user_guide_07_orchestrator_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/01_settings.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_user_guide_01_settings_md", + "target": "user_guide_01_settings_3_6_configure_equipment_paths_and_integrations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/01_settings.md", + "source_location": "L3", + "weight": 1.0, + "source": "user_guide_01_settings_3_6_configure_equipment_paths_and_integrations", + "target": "user_guide_01_settings_capability_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/01_settings.md", + "source_location": "L16", + "weight": 1.0, + "source": "user_guide_01_settings_3_6_configure_equipment_paths_and_integrations", + "target": "user_guide_01_settings_walkthrough", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/01_settings.md", + "source_location": "L30", + "weight": 1.0, + "source": "user_guide_01_settings_3_6_configure_equipment_paths_and_integrations", + "target": "user_guide_01_settings_add_equipment_wizard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/01_settings.md", + "source_location": "L51", + "weight": 1.0, + "source": "user_guide_01_settings_3_6_configure_equipment_paths_and_integrations", + "target": "user_guide_01_settings_screenshots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/01_settings.md", + "source_location": "L63", + "weight": 1.0, + "source": "user_guide_01_settings_3_6_configure_equipment_paths_and_integrations", + "target": "user_guide_01_settings_related_material", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/01_settings.md", + "source_location": "L53", + "weight": 1.0, + "source": "user_guide_01_settings_screenshots", + "target": "user_guide_01_settings_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/01_settings.md", + "source_location": "L58", + "weight": 1.0, + "source": "user_guide_01_settings_screenshots", + "target": "user_guide_01_settings_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/06_readme.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_user_guide_06_readme_md", + "target": "user_guide_06_readme_3_5_author_a_readme_at_creation_time", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/06_readme.md", + "source_location": "L3", + "weight": 1.0, + "source": "user_guide_06_readme_3_5_author_a_readme_at_creation_time", + "target": "user_guide_06_readme_capability_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/06_readme.md", + "source_location": "L18", + "weight": 1.0, + "source": "user_guide_06_readme_3_5_author_a_readme_at_creation_time", + "target": "user_guide_06_readme_walkthrough", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/06_readme.md", + "source_location": "L35", + "weight": 1.0, + "source": "user_guide_06_readme_3_5_author_a_readme_at_creation_time", + "target": "user_guide_06_readme_screenshots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/06_readme.md", + "source_location": "L42", + "weight": 1.0, + "source": "user_guide_06_readme_3_5_author_a_readme_at_creation_time", + "target": "user_guide_06_readme_related_material", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/06_readme.md", + "source_location": "L37", + "weight": 1.0, + "source": "user_guide_06_readme_screenshots", + "target": "user_guide_06_readme_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/index.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_user_guide_index_md", + "target": "user_guide_index_user_guide", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/index.md", + "source_location": "L17", + "weight": 1.0, + "source": "user_guide_index_user_guide", + "target": "user_guide_index_capability_map", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/index.md", + "source_location": "L51", + "weight": 1.0, + "source": "user_guide_index_user_guide", + "target": "user_guide_index_conventions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/index.md", + "source_location": "L36", + "weight": 1.0, + "source": "user_guide_index_capability_map", + "target": "user_guide_index_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/00_getting_started.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_user_guide_00_getting_started_md", + "target": "user_guide_00_getting_started_getting_started", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/00_getting_started.md", + "source_location": "L3", + "weight": 1.0, + "source": "user_guide_00_getting_started_getting_started", + "target": "user_guide_00_getting_started_overview", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/00_getting_started.md", + "source_location": "L11", + "weight": 1.0, + "source": "user_guide_00_getting_started_getting_started", + "target": "user_guide_00_getting_started_walkthrough", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/00_getting_started.md", + "source_location": "L26", + "weight": 1.0, + "source": "user_guide_00_getting_started_getting_started", + "target": "user_guide_00_getting_started_screenshots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/00_getting_started.md", + "source_location": "L33", + "weight": 1.0, + "source": "user_guide_00_getting_started_getting_started", + "target": "user_guide_00_getting_started_related_material", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/00_getting_started.md", + "source_location": "L28", + "weight": 1.0, + "source": "user_guide_00_getting_started_screenshots", + "target": "user_guide_00_getting_started_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/04_create_run.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_user_guide_04_create_run_md", + "target": "user_guide_04_create_run_3_2_create_a_new_experimental_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/04_create_run.md", + "source_location": "L3", + "weight": 1.0, + "source": "user_guide_04_create_run_3_2_create_a_new_experimental_run", + "target": "user_guide_04_create_run_capability_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/04_create_run.md", + "source_location": "L14", + "weight": 1.0, + "source": "user_guide_04_create_run_3_2_create_a_new_experimental_run", + "target": "user_guide_04_create_run_walkthrough", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/04_create_run.md", + "source_location": "L25", + "weight": 1.0, + "source": "user_guide_04_create_run_3_2_create_a_new_experimental_run", + "target": "user_guide_04_create_run_screenshots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/04_create_run.md", + "source_location": "L32", + "weight": 1.0, + "source": "user_guide_04_create_run_3_2_create_a_new_experimental_run", + "target": "user_guide_04_create_run_related_material", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/04_create_run.md", + "source_location": "L27", + "weight": 1.0, + "source": "user_guide_04_create_run_screenshots", + "target": "user_guide_04_create_run_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/05_create_test_run.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_user_guide_05_create_test_run_md", + "target": "user_guide_05_create_test_run_3_3_create_a_new_test_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/05_create_test_run.md", + "source_location": "L3", + "weight": 1.0, + "source": "user_guide_05_create_test_run_3_3_create_a_new_test_run", + "target": "user_guide_05_create_test_run_capability_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/05_create_test_run.md", + "source_location": "L15", + "weight": 1.0, + "source": "user_guide_05_create_test_run_3_3_create_a_new_test_run", + "target": "user_guide_05_create_test_run_walkthrough", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/05_create_test_run.md", + "source_location": "L28", + "weight": 1.0, + "source": "user_guide_05_create_test_run_3_3_create_a_new_test_run", + "target": "user_guide_05_create_test_run_screenshots", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/05_create_test_run.md", + "source_location": "L35", + "weight": 1.0, + "source": "user_guide_05_create_test_run_3_3_create_a_new_test_run", + "target": "user_guide_05_create_test_run_related_material", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/user_guide/05_create_test_run.md", + "source_location": "L30", + "weight": 1.0, + "source": "user_guide_05_create_test_run_screenshots", + "target": "user_guide_05_create_test_run_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_superpowers_specs_2026_05_14_gui_orchestrator_redesign_design_md", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L11", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_1_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L27", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_2_goals_non_goals", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L50", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_3_system_model_changes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L141", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L248", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_5_live_file_feed_approach_1_poll_only", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L276", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_6_add_equipment_wizard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L299", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_7_interaction_decisions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L313", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_8_configuration_schema_changes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L327", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_9_code_impact_map", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L401", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_10_error_handling", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L430", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_11_testing_strategy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L477", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_exlab_wizard_gui_system_redesign_design_spec", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_12_future_v1_x", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L29", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_2_goals_non_goals", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_goals", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L40", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_2_goals_non_goals", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_non_goals_explicitly_out_of_scope_for_this_redesign", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L52", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_3_system_model_changes", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_3_1_always_orchestrator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L67", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_3_system_model_changes", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_3_2_per_equipment_sync_role", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L81", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_3_system_model_changes", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_3_3_owned_vs_received_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L108", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_3_system_model_changes", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_3_4_runs_subdirectory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L113", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_3_4_runs_subdirectory", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L143", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_1_layout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L162", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_2_left_tree", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L174", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_3_centre_live_file_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L189", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_4_right_metadata_problems_pane_collapsible", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L211", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_5_travelling_problem_badge", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L222", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_6_footer_status_bar_relocated_staging_actions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L239", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_main_window_redesign", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_4_7_header_toolbar_breadcrumb", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L147", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_4_1_layout", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md", + "source_location": "L349", + "weight": 1.0, + "source": "specs_2026_05_14_gui_orchestrator_redesign_design_9_code_impact_map", + "target": "specs_2026_05_14_gui_orchestrator_redesign_design_9_1_gui_wiring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_plugin_guide_manifest_schema_md", + "target": "plugin_guide_manifest_schema_manifest_schema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L9", + "weight": 1.0, + "source": "plugin_guide_manifest_schema_manifest_schema", + "target": "plugin_guide_manifest_schema_required_identity_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L18", + "weight": 1.0, + "source": "plugin_guide_manifest_schema_manifest_schema", + "target": "plugin_guide_manifest_schema_required_dispatch_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L30", + "weight": 1.0, + "source": "plugin_guide_manifest_schema_manifest_schema", + "target": "plugin_guide_manifest_schema_optional_declaration_block", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L48", + "weight": 1.0, + "source": "plugin_guide_manifest_schema_manifest_schema", + "target": "plugin_guide_manifest_schema_optional_execution_policy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L61", + "weight": 1.0, + "source": "plugin_guide_manifest_schema_manifest_schema", + "target": "plugin_guide_manifest_schema_discovery_rules", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L11", + "weight": 1.0, + "source": "plugin_guide_manifest_schema_required_identity_fields", + "target": "plugin_guide_manifest_schema_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L20", + "weight": 1.0, + "source": "plugin_guide_manifest_schema_required_dispatch_fields", + "target": "plugin_guide_manifest_schema_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L32", + "weight": 1.0, + "source": "plugin_guide_manifest_schema_optional_declaration_block", + "target": "plugin_guide_manifest_schema_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/manifest_schema.md", + "source_location": "L50", + "weight": 1.0, + "source": "plugin_guide_manifest_schema_optional_execution_policy", + "target": "plugin_guide_manifest_schema_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_plugin_guide_ipc_envelope_md", + "target": "plugin_guide_ipc_envelope_ipc_envelope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L12", + "weight": 1.0, + "source": "plugin_guide_ipc_envelope_ipc_envelope", + "target": "plugin_guide_ipc_envelope_stdin_host_to_worker", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L31", + "weight": 1.0, + "source": "plugin_guide_ipc_envelope_ipc_envelope", + "target": "plugin_guide_ipc_envelope_stdout_worker_to_host", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L54", + "weight": 1.0, + "source": "plugin_guide_ipc_envelope_ipc_envelope", + "target": "plugin_guide_ipc_envelope_stderr_structured_log_channel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L61", + "weight": 1.0, + "source": "plugin_guide_ipc_envelope_ipc_envelope", + "target": "plugin_guide_ipc_envelope_exit_codes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L16", + "weight": 1.0, + "source": "plugin_guide_ipc_envelope_stdin_host_to_worker", + "target": "plugin_guide_ipc_envelope_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/ipc_envelope.md", + "source_location": "L35", + "weight": 1.0, + "source": "plugin_guide_ipc_envelope_stdout_worker_to_host", + "target": "plugin_guide_ipc_envelope_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/index.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_plugin_guide_index_md", + "target": "plugin_guide_index_plugin_author_guide", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/index.md", + "source_location": "L9", + "weight": 1.0, + "source": "plugin_guide_index_plugin_author_guide", + "target": "plugin_guide_index_what_plugins_do", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/index.md", + "source_location": "L21", + "weight": 1.0, + "source": "plugin_guide_index_plugin_author_guide", + "target": "plugin_guide_index_where_plugins_fit_in_the_pipeline", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/index.md", + "source_location": "L52", + "weight": 1.0, + "source": "plugin_guide_index_plugin_author_guide", + "target": "plugin_guide_index_where_to_look_in_the_codebase", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/index.md", + "source_location": "L27", + "weight": 1.0, + "source": "plugin_guide_index_where_plugins_fit_in_the_pipeline", + "target": "plugin_guide_index_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/index.md", + "source_location": "L43", + "weight": 1.0, + "source": "plugin_guide_index_where_plugins_fit_in_the_pipeline", + "target": "plugin_guide_index_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/worked_examples.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_source_plugin_guide_worked_examples_md", + "target": "plugin_guide_worked_examples_worked_examples", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/worked_examples.md", + "source_location": "L8", + "weight": 1.0, + "source": "plugin_guide_worked_examples_worked_examples", + "target": "plugin_guide_worked_examples_hello_plugin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/worked_examples.md", + "source_location": "L19", + "weight": 1.0, + "source": "plugin_guide_worked_examples_worked_examples", + "target": "plugin_guide_worked_examples_xlsx_field_filler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/worked_examples.md", + "source_location": "L39", + "weight": 1.0, + "source": "plugin_guide_worked_examples_worked_examples", + "target": "plugin_guide_worked_examples_docx_variable_replacer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/worked_examples.md", + "source_location": "L49", + "weight": 1.0, + "source": "plugin_guide_worked_examples_worked_examples", + "target": "plugin_guide_worked_examples_where_to_look_in_the_codebase", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/source/plugin_guide/worked_examples.md", + "source_location": "L62", + "weight": 1.0, + "source": "plugin_guide_worked_examples_where_to_look_in_the_codebase", + "target": "plugin_guide_worked_examples_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_superpowers_specs_2026_05_21_operator_free_per_file_nas_sync_design_md", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L7", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L23", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_goals", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L31", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_non_goals", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L38", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_the_model", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L63", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_config_changes_config_models_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L86", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_run_lifecycle_rollup_approach_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L101", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_per_file_sync_state_sync_state_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L124", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_ingest_json_contract_risk_2_resolution", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L137", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_keep_local_per_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L146", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_gui_per_file_display_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L167", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_failure_handling", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L176", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_cleanup_rollup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L183", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_transport_batching_risk_1_resolution", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L203", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_components_touched", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L228", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_testing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L244", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_migration", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L252", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_operator_free_per_file_quiescence_driven_nas_sync_design", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_open_questions_out_of_scope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md", + "source_location": "L107", + "weight": 1.0, + "source": "specs_2026_05_21_operator_free_per_file_nas_sync_design_per_file_sync_state_sync_state_json", + "target": "specs_2026_05_21_operator_free_per_file_nas_sync_design_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_superpowers_specs_2026_05_26_rclone_only_nas_sync_design_md", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L9", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L43", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_goals", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L63", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_non_goals", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L77", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_architecture", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L117", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_components", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L417", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_data_flow_one_sync_cycle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L444", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_error_handling", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L460", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_testing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L489", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_open_follow_up_slot_b_drift_audit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L500", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_rclone_only_nas_sync_with_password_auth_sftp_smb", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_risks_notes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L79", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_architecture", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L119", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_components", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_1_config_models", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L159", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_components", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_2_keyring_dependencies_setup_gate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L197", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_components", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_3_rclone_driver", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L261", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_components", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_4_nas_sync_client", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L299", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_components", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_5_verifier_collapse", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L344", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_components", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_6_wizard_settings_ui", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L390", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_components", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_7_sync_state_schema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L407", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_components", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_8_error_classification", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L128", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_1_config_models", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L203", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_3_rclone_driver", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L246", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_3_rclone_driver", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L312", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_5_verifier_collapse", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md", + "source_location": "L395", + "weight": 1.0, + "source": "specs_2026_05_26_rclone_only_nas_sync_design_7_sync_state_schema", + "target": "specs_2026_05_26_rclone_only_nas_sync_design_codeblock_6", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L1", + "weight": 1.0, + "source": "docs_superpowers_specs_2026_05_28_staging_root_opt_in_design_md", + "target": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L12", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", + "target": "specs_2026_05_28_staging_root_opt_in_design_1_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L39", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", + "target": "specs_2026_05_28_staging_root_opt_in_design_2_goals_non_goals", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L59", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", + "target": "specs_2026_05_28_staging_root_opt_in_design_3_design", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L152", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", + "target": "specs_2026_05_28_staging_root_opt_in_design_4_data_flow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L171", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", + "target": "specs_2026_05_28_staging_root_opt_in_design_5_error_handling_edge_cases", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L183", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", + "target": "specs_2026_05_28_staging_root_opt_in_design_6_testing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L213", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_opt_in_staging_root_design_spec", + "target": "specs_2026_05_28_staging_root_opt_in_design_7_affected_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L41", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_2_goals_non_goals", + "target": "specs_2026_05_28_staging_root_opt_in_design_goals", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L50", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_2_goals_non_goals", + "target": "specs_2026_05_28_staging_root_opt_in_design_non_goals", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L61", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_3_design", + "target": "specs_2026_05_28_staging_root_opt_in_design_3_1_setup_state_gate_paths_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L76", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_3_design", + "target": "specs_2026_05_28_staging_root_opt_in_design_3_2_suggestion_helper_paths_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L95", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_3_design", + "target": "specs_2026_05_28_staging_root_opt_in_design_3_3_settings_ui_ui_pages_settings_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L104", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_3_design", + "target": "specs_2026_05_28_staging_root_opt_in_design_3_4_create_on_save_ui_mount_py_persist_config", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L121", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_3_design", + "target": "specs_2026_05_28_staging_root_opt_in_design_3_5_verified_not_modified", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L143", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_3_design", + "target": "specs_2026_05_28_staging_root_opt_in_design_3_6_test_mode_unchanged", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L156", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_4_data_flow", + "target": "specs_2026_05_28_staging_root_opt_in_design_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L185", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_6_testing", + "target": "specs_2026_05_28_staging_root_opt_in_design_tests_unit_test_paths_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L197", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_6_testing", + "target": "specs_2026_05_28_staging_root_opt_in_design_tests_unit_ui_test_settings_page_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L200", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_6_testing", + "target": "specs_2026_05_28_staging_root_opt_in_design_tests_unit_ui_test_mount_py_new_cases", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md", + "source_location": "L206", + "weight": 1.0, + "source": "specs_2026_05_28_staging_root_opt_in_design_6_testing", + "target": "specs_2026_05_28_staging_root_opt_in_design_regression_sweep", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_md", + "target": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L9", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_table_of_contents", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L27", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_1_purpose_and_scope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L39", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_2_framework_choice", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L307", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_3_main_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L723", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_4_new_project_wizard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L750", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_5_new_run_wizard_experimental_and_test_modes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L780", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_6_readme_authoring_step", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L816", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1064", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_8_orchestrator_mode_surfaces", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1091", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1192", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1301", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1394", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_12_widget_mappings", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1426", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_exlab_wizard_frontend_design_specification", + "target": "design_specs_exlab_wizard_frontend_spec_13_open_questions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L56", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_framework_choice", + "target": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L183", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_framework_choice", + "target": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L60", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", + "target": "design_specs_exlab_wizard_frontend_spec_2_1_1_the_design_py_module", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L123", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", + "target": "design_specs_exlab_wizard_frontend_spec_2_1_2_what_lives_in_design_md_vs_in_this_spec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L130", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", + "target": "design_specs_exlab_wizard_frontend_spec_2_1_3_exlab_wizard_typography_overrides", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L143", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", + "target": "design_specs_exlab_wizard_frontend_spec_2_1_4_warning_tier_color_resolves_oq_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L160", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", + "target": "design_specs_exlab_wizard_frontend_spec_2_1_5_css_styling_reference_rule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L173", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_1_visual_tokens_and_the_design_system", + "target": "design_specs_exlab_wizard_frontend_spec_2_1_6_design_md_absolute_constraints_binding", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L66", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_1_1_the_design_py_module", + "target": "design_specs_exlab_wizard_frontend_spec_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L187", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", + "target": "design_specs_exlab_wizard_frontend_spec_2_2_1_pattern_selection_rule", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L205", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", + "target": "design_specs_exlab_wizard_frontend_spec_2_2_2_toast_specifications", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L228", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", + "target": "design_specs_exlab_wizard_frontend_spec_2_2_3_banner_specifications", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L252", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", + "target": "design_specs_exlab_wizard_frontend_spec_2_2_4_inline_message_specifications", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L268", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_2_notification_taxonomy", + "target": "design_specs_exlab_wizard_frontend_spec_2_2_5_the_notify_helper_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L272", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_2_2_5_the_notify_helper_api", + "target": "design_specs_exlab_wizard_frontend_spec_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L311", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_main_window", + "target": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L418", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_main_window", + "target": "design_specs_exlab_wizard_frontend_spec_3_2_layout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L433", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_main_window", + "target": "design_specs_exlab_wizard_frontend_spec_3_3_refresh_semantics", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L437", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_main_window", + "target": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L521", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_main_window", + "target": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L604", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_main_window", + "target": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L698", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_main_window", + "target": "design_specs_exlab_wizard_frontend_spec_3_7_keyboard_shortcuts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L319", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", + "target": "design_specs_exlab_wizard_frontend_spec_3_1_1_setup_complete_definition", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L329", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", + "target": "design_specs_exlab_wizard_frontend_spec_3_1_2_boot_flow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L356", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", + "target": "design_specs_exlab_wizard_frontend_spec_3_1_3_welcome_card_first_launch_only", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L376", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", + "target": "design_specs_exlab_wizard_frontend_spec_3_1_4_setup_incomplete_state_on_the_main_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L393", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", + "target": "design_specs_exlab_wizard_frontend_spec_3_1_5_first_launch_defaults", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L404", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", + "target": "design_specs_exlab_wizard_frontend_spec_3_1_6_bundled_content_discovery", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L412", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_1_application_lifecycle_and_first_launch_state", + "target": "design_specs_exlab_wizard_frontend_spec_3_1_7_lims_configuration_online_and_offline_workstations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L441", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", + "target": "design_specs_exlab_wizard_frontend_spec_3_4_1_tray_menu", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L453", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", + "target": "design_specs_exlab_wizard_frontend_spec_3_4_2_status_submenu", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L469", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", + "target": "design_specs_exlab_wizard_frontend_spec_3_4_3_window_lifecycle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L486", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", + "target": "design_specs_exlab_wizard_frontend_spec_3_4_4_why_this_lifecycle_matters_for_the_lab_workflow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L494", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", + "target": "design_specs_exlab_wizard_frontend_spec_3_4_5_os_notifications", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L503", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", + "target": "design_specs_exlab_wizard_frontend_spec_3_4_6_quitting_the_app", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L510", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_4_tray_icon_and_window_lifecycle", + "target": "design_specs_exlab_wizard_frontend_spec_3_4_7_linux_fallback_no_system_tray", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L525", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", + "target": "design_specs_exlab_wizard_frontend_spec_3_5_1_lims_name_resolution", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L535", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", + "target": "design_specs_exlab_wizard_frontend_spec_3_5_2_tree_node_display_format", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L546", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", + "target": "design_specs_exlab_wizard_frontend_spec_3_5_3_archived_and_deleted_lims_project_handling", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L558", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", + "target": "design_specs_exlab_wizard_frontend_spec_3_5_4_search_and_filter_chips", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L580", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", + "target": "design_specs_exlab_wizard_frontend_spec_3_5_5_status_bar_bottom_of_the_main_window", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L594", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_5_tree_details_filters_and_status_bar", + "target": "design_specs_exlab_wizard_frontend_spec_3_5_6_empty_states", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L562", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_5_4_search_and_filter_chips", + "target": "design_specs_exlab_wizard_frontend_spec_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L610", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", + "target": "design_specs_exlab_wizard_frontend_spec_3_6_1_title_bar", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L622", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", + "target": "design_specs_exlab_wizard_frontend_spec_3_6_2_project_detail_sections", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L633", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", + "target": "design_specs_exlab_wizard_frontend_spec_3_6_3_run_detail_sections", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L646", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", + "target": "design_specs_exlab_wizard_frontend_spec_3_6_4_validation_and_override_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L668", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", + "target": "design_specs_exlab_wizard_frontend_spec_3_6_5_action_affordances", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L690", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_6_detail_pane_right_panel", + "target": "design_specs_exlab_wizard_frontend_spec_3_6_6_empty_selection", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L654", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_3_6_4_validation_and_override_summary", + "target": "design_specs_exlab_wizard_frontend_spec_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L739", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_4_new_project_wizard", + "target": "design_specs_exlab_wizard_frontend_spec_4_1_lims_picker_behavior", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L754", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_5_new_run_wizard_experimental_and_test_modes", + "target": "design_specs_exlab_wizard_frontend_spec_5_1_mode_binding_at_launch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L761", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_5_new_run_wizard_experimental_and_test_modes", + "target": "design_specs_exlab_wizard_frontend_spec_5_2_steps", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L772", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_5_new_run_wizard_experimental_and_test_modes", + "target": "design_specs_exlab_wizard_frontend_spec_5_3_visual_differentiation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L784", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_6_readme_authoring_step", + "target": "design_specs_exlab_wizard_frontend_spec_6_1_layout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L796", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_6_readme_authoring_step", + "target": "design_specs_exlab_wizard_frontend_spec_6_2_pre_fill_rules", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L806", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_6_readme_authoring_step", + "target": "design_specs_exlab_wizard_frontend_spec_6_3_preview_behavior", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L810", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_6_readme_authoring_step", + "target": "design_specs_exlab_wizard_frontend_spec_6_4_required_field_error_messaging", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L822", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_1_modality", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L828", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_2_layout_sidebar_navigation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L839", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_3_save_and_discard_model", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L851", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_4_reusable_patterns", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L877", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_5_paths_section", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L889", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_6_lims_section", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L907", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_7_equipment_list_section", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L990", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_8_nas_cleanup_section", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1003", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_9_operators_section", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1009", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_10_validator_section", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1018", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_11_logging_section", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1028", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_12_orchestrator_mode_section", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1042", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_13_application_section", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1054", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_settings_dialog", + "target": "design_specs_exlab_wizard_frontend_spec_7_14_setup_incomplete_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L853", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_4_reusable_patterns", + "target": "design_specs_exlab_wizard_frontend_spec_7_4_1_credential_field", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L865", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_4_reusable_patterns", + "target": "design_specs_exlab_wizard_frontend_spec_7_4_2_test_connection_feedback_panel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L911", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_7_equipment_list_section", + "target": "design_specs_exlab_wizard_frontend_spec_7_7_1_list_table", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L929", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_7_equipment_list_section", + "target": "design_specs_exlab_wizard_frontend_spec_7_7_2_add_edit_sub_dialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L962", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_7_7_equipment_list_section", + "target": "design_specs_exlab_wizard_frontend_spec_7_7_3_bandwidth_schedule_editor", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1068", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_8_orchestrator_mode_surfaces", + "target": "design_specs_exlab_wizard_frontend_spec_8_1_equipment_selector", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1072", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_8_orchestrator_mode_surfaces", + "target": "design_specs_exlab_wizard_frontend_spec_8_2_staging_panel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1085", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_8_orchestrator_mode_surfaces", + "target": "design_specs_exlab_wizard_frontend_spec_8_3_clear_verified_runs_action", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1095", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", + "target": "design_specs_exlab_wizard_frontend_spec_9_1_escalation_dialog_layout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1112", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", + "target": "design_specs_exlab_wizard_frontend_spec_9_2_multiple_consecutive_escalations_from_one_session_sequential", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1120", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", + "target": "design_specs_exlab_wizard_frontend_spec_9_3_mid_plugin_pass_progress_per_plugin_sub_progress", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1139", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", + "target": "design_specs_exlab_wizard_frontend_spec_9_4_cancel_during_escalation_confirmation_dialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1154", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", + "target": "design_specs_exlab_wizard_frontend_spec_9_5_disconnect_and_resume_the_in_flight_operations_panel", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1181", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_9_plugin_input_escalation", + "target": "design_specs_exlab_wizard_frontend_spec_9_6_concurrent_suspended_sessions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1124", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_9_3_mid_plugin_pass_progress_per_plugin_sub_progress", + "target": "design_specs_exlab_wizard_frontend_spec_codeblock_5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1194", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", + "target": "design_specs_exlab_wizard_frontend_spec_10_1_progress", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1198", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", + "target": "design_specs_exlab_wizard_frontend_spec_10_2_errors", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1206", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", + "target": "design_specs_exlab_wizard_frontend_spec_10_3_success_summary", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1216", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", + "target": "design_specs_exlab_wizard_frontend_spec_10_4_sync_blocked_banner", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1226", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_10_error_progress_and_summary_presentation", + "target": "design_specs_exlab_wizard_frontend_spec_10_5_recovery_flows", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1230", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_10_5_recovery_flows", + "target": "design_specs_exlab_wizard_frontend_spec_10_5_1_nas_sync_failure_recovery", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1252", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_10_5_recovery_flows", + "target": "design_specs_exlab_wizard_frontend_spec_10_5_2_lims_unreachability_mid_wizard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1270", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_10_5_recovery_flows", + "target": "design_specs_exlab_wizard_frontend_spec_10_5_3_crash_and_orphan_recovery", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1287", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_10_5_recovery_flows", + "target": "design_specs_exlab_wizard_frontend_spec_10_5_4_pre_flight_checks_before_creation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1305", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", + "target": "design_specs_exlab_wizard_frontend_spec_11_1_layout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1330", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", + "target": "design_specs_exlab_wizard_frontend_spec_11_2_severity_tier_visual_treatment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1336", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", + "target": "design_specs_exlab_wizard_frontend_spec_11_3_per_row_actions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1347", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", + "target": "design_specs_exlab_wizard_frontend_spec_11_4_empty_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1355", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", + "target": "design_specs_exlab_wizard_frontend_spec_11_4_1_new_finding_surfacing_during_the_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1365", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", + "target": "design_specs_exlab_wizard_frontend_spec_11_5_override_and_allow_sync_dialog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1381", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_11_problems_tab", + "target": "design_specs_exlab_wizard_frontend_spec_11_6_cross_surface_links", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1398", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_12_widget_mappings", + "target": "design_specs_exlab_wizard_frontend_spec_12_1_template_variable_form_from_copier_yml_questions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1408", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_12_widget_mappings", + "target": "design_specs_exlab_wizard_frontend_spec_12_2_readme_form_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Frontend_Spec.md", + "source_location": "L1418", + "weight": 1.0, + "source": "design_specs_exlab_wizard_frontend_spec_12_widget_mappings", + "target": "design_specs_exlab_wizard_frontend_spec_12_3_required_field_indication", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L2", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_md", + "target": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L10", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_table_of_contents", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L31", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_1_purpose_and_goals", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L39", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_2_user_capabilities_reference", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L63", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_3_directory_structure_convention", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L71", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_4_backend_architecture", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L79", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_5_template_format", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L87", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_6_plugin_system", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L95", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_7_sync_and_database_integration", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L103", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_8_error_handling_principles", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L111", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_9_configuration_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L119", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_10_readme_generation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L127", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_11_exlab_wizard_cache_folders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L135", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_12_orchestrator_mode_multi_equipment_workstations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L143", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_13_equipment_to_orchestrator_data_flow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L151", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_15_distribution_and_installation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L159", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_16_logging_architecture", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/ExLab-Wizard_Design_Spec.md", + "source_location": "L167", + "weight": 1.0, + "source": "design_specs_exlab_wizard_design_spec_exlab_wizard_design_specification", + "target": "design_specs_exlab_wizard_design_spec_14_open_questions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_implementation_plan_md", + "target": "design_specs_implementation_plan_exlab_wizard_implementation_plan", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L3", + "weight": 1.0, + "source": "design_specs_implementation_plan_exlab_wizard_implementation_plan", + "target": "design_specs_implementation_plan_context", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L39", + "weight": 1.0, + "source": "design_specs_implementation_plan_exlab_wizard_implementation_plan", + "target": "design_specs_implementation_plan_goals", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L57", + "weight": 1.0, + "source": "design_specs_implementation_plan_exlab_wizard_implementation_plan", + "target": "design_specs_implementation_plan_first_action_before_phase_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L66", + "weight": 1.0, + "source": "design_specs_implementation_plan_exlab_wizard_implementation_plan", + "target": "design_specs_implementation_plan_subagent_strategy_used_at_every_phase", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L88", + "weight": 1.0, + "source": "design_specs_implementation_plan_exlab_wizard_implementation_plan", + "target": "design_specs_implementation_plan_per_phase_definition_of_done", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L133", + "weight": 1.0, + "source": "design_specs_implementation_plan_exlab_wizard_implementation_plan", + "target": "design_specs_implementation_plan_test_plan_merged_with_spec_4_10_11_8_frontend_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L199", + "weight": 1.0, + "source": "design_specs_implementation_plan_exlab_wizard_implementation_plan", + "target": "design_specs_implementation_plan_phase_sequence", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L839", + "weight": 1.0, + "source": "design_specs_implementation_plan_exlab_wizard_implementation_plan", + "target": "design_specs_implementation_plan_critical_files_reference", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L862", + "weight": 1.0, + "source": "design_specs_implementation_plan_exlab_wizard_implementation_plan", + "target": "design_specs_implementation_plan_verification_final_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L885", + "weight": 1.0, + "source": "design_specs_implementation_plan_exlab_wizard_implementation_plan", + "target": "design_specs_implementation_plan_risks_mitigations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L90", + "weight": 1.0, + "source": "design_specs_implementation_plan_per_phase_definition_of_done", + "target": "design_specs_implementation_plan_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L215", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_1_project_scaffolding_constants_foundations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L254", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_2_configuration_system_paths", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L295", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_3_logging_package_cache_writers_schema_models", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L335", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_4_validator_engine_rules", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L375", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_5_template_engine_copier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L406", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_6_plugin_system_host_worker_isolation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L459", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_7_creation_controller_state_machine", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L496", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_8_readme_generator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L520", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_9_lims_client_cache_keyring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L558", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_10_nas_sync_client", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L601", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_11_fastapi_app_routers_websocket_setup_gate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L648", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_12_nicegui_frontend_design_tokens_pages_components", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L726", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_13_tray_window_processes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L765", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_14_orchestrator_mode_ingest", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L790", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_15_distribution_pyinstaller_bundling", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/IMPLEMENTATION_PLAN.md", + "source_location": "L818", + "weight": 1.0, + "source": "design_specs_implementation_plan_phase_sequence", + "target": "design_specs_implementation_plan_phase_16_e2e_hardening_pass", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_07_sync_and_database_integration_md", + "target": "design_spec_sections_07_sync_and_database_integration_7_sync_and_database_integration", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L7", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_sync_and_database_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L149", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_sync_and_database_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L393", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_sync_and_database_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_3_pre_sync_gate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L409", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_sync_and_database_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_4_credential_storage_os_keyring", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L13", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", + "target": "design_spec_sections_07_sync_and_database_integration_7_1_1_component_model", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L41", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", + "target": "design_spec_sections_07_sync_and_database_integration_7_1_2_job_lifecycle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L63", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", + "target": "design_spec_sections_07_sync_and_database_integration_7_1_3_transport_drivers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L73", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", + "target": "design_spec_sections_07_sync_and_database_integration_7_1_4_hash_verification", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L84", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", + "target": "design_spec_sections_07_sync_and_database_integration_7_1_5_retry_policy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L95", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", + "target": "design_spec_sections_07_sync_and_database_integration_7_1_6_cleanup_safety_interlocks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L108", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", + "target": "design_spec_sections_07_sync_and_database_integration_7_1_7_bandwidth_limiting", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L128", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", + "target": "design_spec_sections_07_sync_and_database_integration_7_1_8_credential_storage", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L132", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", + "target": "design_spec_sections_07_sync_and_database_integration_7_1_9_what_nassync_does_not_do", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L139", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_1_nas_sync_internal_module", + "target": "design_spec_sections_07_sync_and_database_integration_7_1_10_cache_file_syncing_and_metadata_only_retention_on_cleanup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L17", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_1_1_component_model", + "target": "design_spec_sections_07_sync_and_database_integration_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L45", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_1_2_job_lifecycle", + "target": "design_spec_sections_07_sync_and_database_integration_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L112", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_1_7_bandwidth_limiting", + "target": "design_spec_sections_07_sync_and_database_integration_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L155", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_0_empirical_facts_about_the_lims", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L166", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_1_project_mapping_mapping_b_committed", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L176", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_2_run_level_lims_integration_deferred_to_v1_x", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L184", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_3_limsclient_interface_v1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L229", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_4_project_cache_and_offline_behavior", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L241", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_5_authentication_cookie_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L252", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_6_asks_for_the_lims_team_deferred", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L263", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_7_v1_x_run_level_record_specification_target", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L293", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_8_what_exlab_wizard_does_not_write_to_lims_in_v1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L304", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_lims_integration", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L186", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_3_limsclient_interface_v1", + "target": "design_spec_sections_07_sync_and_database_integration_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L199", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_3_limsclient_interface_v1", + "target": "design_spec_sections_07_sync_and_database_integration_codeblock_5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L215", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_3_limsclient_interface_v1", + "target": "design_spec_sections_07_sync_and_database_integration_codeblock_6", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L310", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_1_file_location_and_format", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L338", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_2_producer_behavior", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L350", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_3_consumer_behavior", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L369", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_4_failure_modes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L380", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_5_security_and_trust", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L386", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_9_offline_catalogue_nas_shared_lims_project_list", + "target": "design_spec_sections_07_sync_and_database_integration_7_2_9_6_out_of_scope_for_v1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L316", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_2_9_1_file_location_and_format", + "target": "design_spec_sections_07_sync_and_database_integration_codeblock_7", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L421", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_4_credential_storage_os_keyring", + "target": "design_spec_sections_07_sync_and_database_integration_7_4_1_keyring_entry_naming_convention", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L435", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_4_credential_storage_os_keyring", + "target": "design_spec_sections_07_sync_and_database_integration_7_4_2_settings_ui_for_credentials", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L439", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_4_credential_storage_os_keyring", + "target": "design_spec_sections_07_sync_and_database_integration_7_4_3_credential_lifecycle", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/07_Sync_and_Database_Integration.md", + "source_location": "L447", + "weight": 1.0, + "source": "design_spec_sections_07_sync_and_database_integration_7_4_credential_storage_os_keyring", + "target": "design_spec_sections_07_sync_and_database_integration_7_4_4_fallback_when_no_keyring_backend_is_available", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/03_Directory_Structure_Convention.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_03_directory_structure_convention_md", + "target": "design_spec_sections_03_directory_structure_convention_3_directory_structure_convention", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/03_Directory_Structure_Convention.md", + "source_location": "L7", + "weight": 1.0, + "source": "design_spec_sections_03_directory_structure_convention_3_directory_structure_convention", + "target": "design_spec_sections_03_directory_structure_convention_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/03_Directory_Structure_Convention.md", + "source_location": "L20", + "weight": 1.0, + "source": "design_spec_sections_03_directory_structure_convention_3_directory_structure_convention", + "target": "design_spec_sections_03_directory_structure_convention_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/03_Directory_Structure_Convention.md", + "source_location": "L28", + "weight": 1.0, + "source": "design_spec_sections_03_directory_structure_convention_3_directory_structure_convention", + "target": "design_spec_sections_03_directory_structure_convention_3_1_equipment_id_format", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/03_Directory_Structure_Convention.md", + "source_location": "L41", + "weight": 1.0, + "source": "design_spec_sections_03_directory_structure_convention_3_directory_structure_convention", + "target": "design_spec_sections_03_directory_structure_convention_3_2_project_folder_name", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/12_Orchestrator_Mode.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_12_orchestrator_mode_md", + "target": "design_spec_sections_12_orchestrator_mode_12_orchestrator_mode_multi_equipment_workstations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/12_Orchestrator_Mode.md", + "source_location": "L7", + "weight": 1.0, + "source": "design_spec_sections_12_orchestrator_mode_12_orchestrator_mode_multi_equipment_workstations", + "target": "design_spec_sections_12_orchestrator_mode_12_1_what_changes_in_orchestrator_mode", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/12_Orchestrator_Mode.md", + "source_location": "L20", + "weight": 1.0, + "source": "design_spec_sections_12_orchestrator_mode_12_orchestrator_mode_multi_equipment_workstations", + "target": "design_spec_sections_12_orchestrator_mode_12_2_configuration", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/12_Orchestrator_Mode.md", + "source_location": "L24", + "weight": 1.0, + "source": "design_spec_sections_12_orchestrator_mode_12_orchestrator_mode_multi_equipment_workstations", + "target": "design_spec_sections_12_orchestrator_mode_12_3_concurrent_run_handling", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/12_Orchestrator_Mode.md", + "source_location": "L28", + "weight": 1.0, + "source": "design_spec_sections_12_orchestrator_mode_12_orchestrator_mode_multi_equipment_workstations", + "target": "design_spec_sections_12_orchestrator_mode_12_4_logging_and_db_changes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_06_plugin_system_md", + "target": "design_spec_sections_06_plugin_system_6_plugin_system", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L9", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_plugin_system", + "target": "design_spec_sections_06_plugin_system_6_0_where_plugins_sit_in_the_pipeline", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L52", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_plugin_system", + "target": "design_spec_sections_06_plugin_system_6_1_plugin_contract", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L287", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_plugin_system", + "target": "design_spec_sections_06_plugin_system_6_2_plugin_registry", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L354", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_plugin_system", + "target": "design_spec_sections_06_plugin_system_6_3_subprocess_isolation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L487", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_plugin_system", + "target": "design_spec_sections_06_plugin_system_6_4_plugin_input_escalation_plugininputrequired", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L517", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_plugin_system", + "target": "design_spec_sections_06_plugin_system_6_5_base_plugin_scaffold_hello_plugin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L602", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_plugin_system", + "target": "design_spec_sections_06_plugin_system_6_6_worked_example_xlsx_field_filler", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L825", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_plugin_system", + "target": "design_spec_sections_06_plugin_system_6_7_example_plugins_illustrative_catalog", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L835", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_plugin_system", + "target": "design_spec_sections_06_plugin_system_6_8_plugin_authoring_checklist", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L849", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_plugin_system", + "target": "design_spec_sections_06_plugin_system_6_9_lint_cli_exlab_wizard_plugins_lint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L899", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_plugin_system", + "target": "design_spec_sections_06_plugin_system_6_10_test_debug_cli_exlab_wizard_plugins_exec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L11", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_0_where_plugins_sit_in_the_pipeline", + "target": "design_spec_sections_06_plugin_system_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L56", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_1_plugin_contract", + "target": "design_spec_sections_06_plugin_system_6_1_1_package_layout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L70", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_1_plugin_contract", + "target": "design_spec_sections_06_plugin_system_6_1_2_manifest_yml_schema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L104", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_1_plugin_contract", + "target": "design_spec_sections_06_plugin_system_6_1_3_the_plugin_base_class", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L254", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_1_plugin_contract", + "target": "design_spec_sections_06_plugin_system_6_1_5_what_plugins_must_not_touch", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L266", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_1_plugin_contract", + "target": "design_spec_sections_06_plugin_system_6_1_4_the_plugincontext_object", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L58", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_1_1_package_layout", + "target": "design_spec_sections_06_plugin_system_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L74", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_1_2_manifest_yml_schema", + "target": "design_spec_sections_06_plugin_system_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L106", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_1_3_the_plugin_base_class", + "target": "design_spec_sections_06_plugin_system_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L270", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_1_4_the_plugincontext_object", + "target": "design_spec_sections_06_plugin_system_codeblock_5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L289", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_2_plugin_registry", + "target": "design_spec_sections_06_plugin_system_6_2_1_discovery", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L308", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_2_plugin_registry", + "target": "design_spec_sections_06_plugin_system_6_2_2_resolution_per_creation_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L319", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_2_plugin_registry", + "target": "design_spec_sections_06_plugin_system_6_2_3_order_control_via_exlab_plugins", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L334", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_2_plugin_registry", + "target": "design_spec_sections_06_plugin_system_6_2_4_what_gets_recorded_in_creation_json", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L323", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_2_3_order_control_via_exlab_plugins", + "target": "design_spec_sections_06_plugin_system_codeblock_6", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L338", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_2_4_what_gets_recorded_in_creation_json", + "target": "design_spec_sections_06_plugin_system_codeblock_7", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L358", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_3_subprocess_isolation", + "target": "design_spec_sections_06_plugin_system_6_3_1_process_model", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L370", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_3_subprocess_isolation", + "target": "design_spec_sections_06_plugin_system_6_3_2_ipc_envelope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L401", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_3_subprocess_isolation", + "target": "design_spec_sections_06_plugin_system_6_3_3_resource_limits", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L422", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_3_subprocess_isolation", + "target": "design_spec_sections_06_plugin_system_6_3_4_failure_handling", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L439", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_3_subprocess_isolation", + "target": "design_spec_sections_06_plugin_system_6_3_6_validation_worker_subprocess_mode_validate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L460", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_3_subprocess_isolation", + "target": "design_spec_sections_06_plugin_system_6_3_5_security_model_what_isolation_does_and_does_not_solve", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L376", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_3_2_ipc_envelope", + "target": "design_spec_sections_06_plugin_system_codeblock_8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L387", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_3_2_ipc_envelope", + "target": "design_spec_sections_06_plugin_system_codeblock_9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L494", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_4_plugin_input_escalation_plugininputrequired", + "target": "design_spec_sections_06_plugin_system_6_4_1_suspend_resume_flow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L504", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_4_plugin_input_escalation_plugininputrequired", + "target": "design_spec_sections_06_plugin_system_6_4_2_resume_contract_what_the_plugin_author_must_guarantee", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L521", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_5_base_plugin_scaffold_hello_plugin", + "target": "design_spec_sections_06_plugin_system_6_5_1_directory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L531", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_5_base_plugin_scaffold_hello_plugin", + "target": "design_spec_sections_06_plugin_system_6_5_2_init_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L544", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_5_base_plugin_scaffold_hello_plugin", + "target": "design_spec_sections_06_plugin_system_6_5_3_manifest_yml", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L564", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_5_base_plugin_scaffold_hello_plugin", + "target": "design_spec_sections_06_plugin_system_6_5_4_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L598", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_5_base_plugin_scaffold_hello_plugin", + "target": "design_spec_sections_06_plugin_system_6_5_5_readme_md", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L523", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_5_1_directory", + "target": "design_spec_sections_06_plugin_system_codeblock_10", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L533", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_5_2_init_py", + "target": "design_spec_sections_06_plugin_system_codeblock_11", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L546", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_5_3_manifest_yml", + "target": "design_spec_sections_06_plugin_system_codeblock_12", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L566", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_5_4_plugin_py", + "target": "design_spec_sections_06_plugin_system_codeblock_13", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L606", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_6_worked_example_xlsx_field_filler", + "target": "design_spec_sections_06_plugin_system_6_6_1_what_it_does", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L610", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_6_worked_example_xlsx_field_filler", + "target": "design_spec_sections_06_plugin_system_6_6_2_manifest_yml", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L635", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_6_worked_example_xlsx_field_filler", + "target": "design_spec_sections_06_plugin_system_6_6_3_plugin_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L809", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_6_worked_example_xlsx_field_filler", + "target": "design_spec_sections_06_plugin_system_6_6_4_what_this_exercises", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L612", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_6_2_manifest_yml", + "target": "design_spec_sections_06_plugin_system_codeblock_14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L637", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_6_3_plugin_py", + "target": "design_spec_sections_06_plugin_system_codeblock_15", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L855", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_9_lint_cli_exlab_wizard_plugins_lint", + "target": "design_spec_sections_06_plugin_system_codeblock_16", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/06_Plugin_System.md", + "source_location": "L905", + "weight": 1.0, + "source": "design_spec_sections_06_plugin_system_6_10_test_debug_cli_exlab_wizard_plugins_exec", + "target": "design_spec_sections_06_plugin_system_codeblock_17", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_15_distribution_md", + "target": "design_spec_sections_15_distribution_15_distribution_and_installation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L7", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_distribution_and_installation", + "target": "design_spec_sections_15_distribution_15_1_build_pipeline_pyinstaller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L49", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_distribution_and_installation", + "target": "design_spec_sections_15_distribution_15_2_code_signing_posture", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L76", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_distribution_and_installation", + "target": "design_spec_sections_15_distribution_15_3_launcher_behavior", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L118", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_distribution_and_installation", + "target": "design_spec_sections_15_distribution_15_4_bundled_starter_content", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L127", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_distribution_and_installation", + "target": "design_spec_sections_15_distribution_15_5_bundled_vs_external_binaries", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L141", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_distribution_and_installation", + "target": "design_spec_sections_15_distribution_15_6_versioning_and_release_artifacts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L148", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_distribution_and_installation", + "target": "design_spec_sections_15_distribution_15_7_autostart_registration", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L189", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_distribution_and_installation", + "target": "design_spec_sections_15_distribution_15_8_open_questions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L61", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_2_code_signing_posture", + "target": "design_spec_sections_15_distribution_15_2_1_offline_machine_specifics", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L80", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_3_launcher_behavior", + "target": "design_spec_sections_15_distribution_15_3_1_exlab_wizard_tray_long_lived_autostart_target", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L93", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_3_launcher_behavior", + "target": "design_spec_sections_15_distribution_15_3_2_exlab_wizard_window_on_demand", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L103", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_3_launcher_behavior", + "target": "design_spec_sections_15_distribution_15_3_3_exlab_wizard_cli_alias_desktop_launcher_target", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L114", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_3_launcher_behavior", + "target": "design_spec_sections_15_distribution_15_3_4_linux_fallback_no_system_tray", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L152", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_7_autostart_registration", + "target": "design_spec_sections_15_distribution_15_7_1_per_platform_registration", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L163", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_7_autostart_registration", + "target": "design_spec_sections_15_distribution_15_7_2_upgrade_and_uninstall", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L169", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_7_autostart_registration", + "target": "design_spec_sections_15_distribution_15_7_3_os_notifications", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/15_Distribution.md", + "source_location": "L178", + "weight": 1.0, + "source": "design_spec_sections_15_distribution_15_7_autostart_registration", + "target": "design_spec_sections_15_distribution_15_7_4_window_only_fallback_linux_without_tray_support", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_04_backend_architecture_md", + "target": "design_spec_sections_04_backend_architecture_4_backend_architecture", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L7", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_backend_architecture", + "target": "design_spec_sections_04_backend_architecture_4_1_deployment_model", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L35", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_backend_architecture", + "target": "design_spec_sections_04_backend_architecture_4_2_process_model", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L78", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_backend_architecture", + "target": "design_spec_sections_04_backend_architecture_4_3_package_layout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L220", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_backend_architecture", + "target": "design_spec_sections_04_backend_architecture_4_4_component_contracts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L359", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_backend_architecture", + "target": "design_spec_sections_04_backend_architecture_4_5_async_threading_model", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L377", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_backend_architecture", + "target": "design_spec_sections_04_backend_architecture_4_6_frontend_backend_protocol", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L512", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_backend_architecture", + "target": "design_spec_sections_04_backend_architecture_4_7_creation_session_state_machine", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L593", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_backend_architecture", + "target": "design_spec_sections_04_backend_architecture_4_8_crash_recovery", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L607", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_backend_architecture", + "target": "design_spec_sections_04_backend_architecture_4_9_first_launch_and_setup_incomplete_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L679", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_backend_architecture", + "target": "design_spec_sections_04_backend_architecture_4_10_testing_strategy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L37", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_2_process_model", + "target": "design_spec_sections_04_backend_architecture_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L80", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_3_package_layout", + "target": "design_spec_sections_04_backend_architecture_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L181", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_3_package_layout", + "target": "design_spec_sections_04_backend_architecture_4_3_1_the_constants_package", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L192", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_3_package_layout", + "target": "design_spec_sections_04_backend_architecture_4_3_2_the_tray_and_window_packages", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L224", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", + "target": "design_spec_sections_04_backend_architecture_4_4_1_creationcontroller", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L238", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", + "target": "design_spec_sections_04_backend_architecture_4_4_2_templateengine", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L248", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", + "target": "design_spec_sections_04_backend_architecture_4_4_3_pluginhost", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L265", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", + "target": "design_spec_sections_04_backend_architecture_4_4_4_validator", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L276", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", + "target": "design_spec_sections_04_backend_architecture_4_4_5_cachewriter", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L320", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", + "target": "design_spec_sections_04_backend_architecture_4_4_6_nassyncclient_and_limsclient", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L345", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_component_contracts", + "target": "design_spec_sections_04_backend_architecture_4_4_7_sessionstore", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L226", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_1_creationcontroller", + "target": "design_spec_sections_04_backend_architecture_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L240", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_2_templateengine", + "target": "design_spec_sections_04_backend_architecture_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L250", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_3_pluginhost", + "target": "design_spec_sections_04_backend_architecture_codeblock_5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L267", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_4_validator", + "target": "design_spec_sections_04_backend_architecture_codeblock_6", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L285", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_5_cachewriter", + "target": "design_spec_sections_04_backend_architecture_codeblock_7", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L301", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_5_cachewriter", + "target": "design_spec_sections_04_backend_architecture_codeblock_8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L324", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_6_nassyncclient_and_limsclient", + "target": "design_spec_sections_04_backend_architecture_codeblock_9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L334", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_6_nassyncclient_and_limsclient", + "target": "design_spec_sections_04_backend_architecture_codeblock_10", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L347", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_4_7_sessionstore", + "target": "design_spec_sections_04_backend_architecture_codeblock_11", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L381", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_6_frontend_backend_protocol", + "target": "design_spec_sections_04_backend_architecture_4_6_1_rest_surface_illustrative_subset_full_schema_lives_in_api_schemas_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L406", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_6_frontend_backend_protocol", + "target": "design_spec_sections_04_backend_architecture_4_6_2_websocket_events", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L429", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_6_frontend_backend_protocol", + "target": "design_spec_sections_04_backend_architecture_4_6_3_api_versioning_health_and_error_envelope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L410", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_6_2_websocket_events", + "target": "design_spec_sections_04_backend_architecture_codeblock_12", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L424", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_6_2_websocket_events", + "target": "design_spec_sections_04_backend_architecture_codeblock_13", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L448", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_6_3_api_versioning_health_and_error_envelope", + "target": "design_spec_sections_04_backend_architecture_codeblock_14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L472", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_6_3_api_versioning_health_and_error_envelope", + "target": "design_spec_sections_04_backend_architecture_codeblock_15", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L514", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_7_creation_session_state_machine", + "target": "design_spec_sections_04_backend_architecture_codeblock_16", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L573", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_7_creation_session_state_machine", + "target": "design_spec_sections_04_backend_architecture_4_7_1_sessionstate_phase_mapping", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L611", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_9_first_launch_and_setup_incomplete_state", + "target": "design_spec_sections_04_backend_architecture_4_9_1_setup_states", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L626", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_9_first_launch_and_setup_incomplete_state", + "target": "design_spec_sections_04_backend_architecture_4_9_2_endpoint_gating", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L643", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_9_first_launch_and_setup_incomplete_state", + "target": "design_spec_sections_04_backend_architecture_4_9_3_get_api_v1_setup_status_response_shape", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L659", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_9_first_launch_and_setup_incomplete_state", + "target": "design_spec_sections_04_backend_architecture_4_9_4_lims_unreachability_is_a_soft_block", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L665", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_9_first_launch_and_setup_incomplete_state", + "target": "design_spec_sections_04_backend_architecture_4_9_5_initial_setup_ordering_informational", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L645", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_9_3_get_api_v1_setup_status_response_shape", + "target": "design_spec_sections_04_backend_architecture_codeblock_17", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L683", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_10_testing_strategy", + "target": "design_spec_sections_04_backend_architecture_4_10_1_unit_tests_tests_unit", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L694", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_10_testing_strategy", + "target": "design_spec_sections_04_backend_architecture_4_10_2_integration_tests_tests_integration", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L707", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_10_testing_strategy", + "target": "design_spec_sections_04_backend_architecture_4_10_3_end_to_end_tests_tests_e2e", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L718", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_10_testing_strategy", + "target": "design_spec_sections_04_backend_architecture_4_10_4_test_fixtures_tests_fixtures", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/04_Backend_Architecture.md", + "source_location": "L728", + "weight": 1.0, + "source": "design_spec_sections_04_backend_architecture_4_10_testing_strategy", + "target": "design_spec_sections_04_backend_architecture_4_10_5_what_s_not_tested_at_each_layer", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_11_cache_folders_md", + "target": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L7", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", + "target": "design_spec_sections_11_cache_folders_11_1_folder_placement", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L50", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", + "target": "design_spec_sections_11_cache_folders_11_2_file_inventory_per_level", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L93", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", + "target": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L243", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", + "target": "design_spec_sections_11_cache_folders_11_4_readme_fields_json_schema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L343", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", + "target": "design_spec_sections_11_cache_folders_11_5_wizard_hostname_log_format", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L397", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", + "target": "design_spec_sections_11_cache_folders_11_6_nas_sync_behavior_for_cache_files", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L401", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", + "target": "design_spec_sections_11_cache_folders_11_7_discovery_and_validation_use_cases", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L413", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", + "target": "design_spec_sections_11_cache_folders_11_8_validator_engine_and_problem_query_contract", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L452", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_exlab_wizard_cache_folders", + "target": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L9", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_1_folder_placement", + "target": "design_spec_sections_11_cache_folders_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L97", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", + "target": "design_spec_sections_11_cache_folders_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L167", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", + "target": "design_spec_sections_11_cache_folders_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L181", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", + "target": "design_spec_sections_11_cache_folders_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L206", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", + "target": "design_spec_sections_11_cache_folders_codeblock_5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L220", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", + "target": "design_spec_sections_11_cache_folders_codeblock_6", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L227", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_3_creation_json_schema", + "target": "design_spec_sections_11_cache_folders_schema_version_history", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L249", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_4_readme_fields_json_schema", + "target": "design_spec_sections_11_cache_folders_codeblock_7", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L285", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_4_readme_fields_json_schema", + "target": "design_spec_sections_11_cache_folders_11_4_1_equipment_json_schema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L311", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_4_readme_fields_json_schema", + "target": "design_spec_sections_11_cache_folders_11_4_2_test_runs_json_schema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L327", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_4_readme_fields_json_schema", + "target": "design_spec_sections_11_cache_folders_11_4_3_runs_json_schema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L287", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_4_1_equipment_json_schema", + "target": "design_spec_sections_11_cache_folders_codeblock_8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L313", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_4_2_test_runs_json_schema", + "target": "design_spec_sections_11_cache_folders_codeblock_9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L329", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_4_3_runs_json_schema", + "target": "design_spec_sections_11_cache_folders_codeblock_10", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L351", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_5_wizard_hostname_log_format", + "target": "design_spec_sections_11_cache_folders_codeblock_11", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L366", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_5_wizard_hostname_log_format", + "target": "design_spec_sections_11_cache_folders_11_5_1_log_levels_rotation_and_the_central_app_log", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L430", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_8_validator_engine_and_problem_query_contract", + "target": "design_spec_sections_11_cache_folders_codeblock_12", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L456", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", + "target": "design_spec_sections_11_cache_folders_11_9_1_versioning_rules", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L462", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", + "target": "design_spec_sections_11_cache_folders_11_9_2_reader_policy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L472", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", + "target": "design_spec_sections_11_cache_folders_11_9_3_writer_policy", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L480", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", + "target": "design_spec_sections_11_cache_folders_11_9_4_cross_major_migration_v1_v2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L488", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", + "target": "design_spec_sections_11_cache_folders_11_9_5_directory_layout_migration_v0_5_v0_6", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/11_Cache_Folders.md", + "source_location": "L492", + "weight": 1.0, + "source": "design_spec_sections_11_cache_folders_11_9_schema_versioning_and_migration_policy", + "target": "design_spec_sections_11_cache_folders_11_9_6_what_about_config_yaml", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_05_template_format_md", + "target": "design_spec_sections_05_template_format_5_template_format", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L9", + "weight": 1.0, + "source": "design_spec_sections_05_template_format_5_template_format", + "target": "design_spec_sections_05_template_format_5_0_template_locations_global_and_per_equipment", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L32", + "weight": 1.0, + "source": "design_spec_sections_05_template_format_5_template_format", + "target": "design_spec_sections_05_template_format_5_1_template_structure", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L48", + "weight": 1.0, + "source": "design_spec_sections_05_template_format_5_template_format", + "target": "design_spec_sections_05_template_format_5_2_copier_manifest_copier_yml", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L100", + "weight": 1.0, + "source": "design_spec_sections_05_template_format_5_template_format", + "target": "design_spec_sections_05_template_format_5_3_copier_python_api_integration", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L125", + "weight": 1.0, + "source": "design_spec_sections_05_template_format_5_template_format", + "target": "design_spec_sections_05_template_format_5_4_copier_answers_file_exlab_answers_yml", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L136", + "weight": 1.0, + "source": "design_spec_sections_05_template_format_5_template_format", + "target": "design_spec_sections_05_template_format_5_5_plugin_pass_post_render_controller_driven", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L155", + "weight": 1.0, + "source": "design_spec_sections_05_template_format_5_template_format", + "target": "design_spec_sections_05_template_format_5_6_jinja2_templating_in_file_contents", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L165", + "weight": 1.0, + "source": "design_spec_sections_05_template_format_5_template_format", + "target": "design_spec_sections_05_template_format_5_7_template_versioning", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L175", + "weight": 1.0, + "source": "design_spec_sections_05_template_format_5_template_format", + "target": "design_spec_sections_05_template_format_5_8_lint_cli_exlab_wizard_templates_lint", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L36", + "weight": 1.0, + "source": "design_spec_sections_05_template_format_5_1_template_structure", + "target": "design_spec_sections_05_template_format_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L52", + "weight": 1.0, + "source": "design_spec_sections_05_template_format_5_2_copier_manifest_copier_yml", + "target": "design_spec_sections_05_template_format_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L104", + "weight": 1.0, + "source": "design_spec_sections_05_template_format_5_3_copier_python_api_integration", + "target": "design_spec_sections_05_template_format_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/05_Template_Format.md", + "source_location": "L181", + "weight": 1.0, + "source": "design_spec_sections_05_template_format_5_8_lint_cli_exlab_wizard_templates_lint", + "target": "design_spec_sections_05_template_format_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_13_equipment_to_orchestrator_data_flow_md", + "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L7", + "weight": 1.0, + "source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", + "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_1_topology", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L26", + "weight": 1.0, + "source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", + "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_2_staging_area_layout", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L52", + "weight": 1.0, + "source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", + "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_3_run_lifecycle_states", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L64", + "weight": 1.0, + "source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", + "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_4_ingest_json_schema", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L108", + "weight": 1.0, + "source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", + "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_5_run_completeness_signal", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L119", + "weight": 1.0, + "source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", + "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_6_transport_handling", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L123", + "weight": 1.0, + "source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", + "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_7_staging_cleanup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L140", + "weight": 1.0, + "source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_equipment_to_orchestrator_data_flow", + "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_8_staging_state_query_backend_contract", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L9", + "weight": 1.0, + "source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_1_topology", + "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L28", + "weight": 1.0, + "source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_2_staging_area_layout", + "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L66", + "weight": 1.0, + "source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_4_ingest_json_schema", + "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md", + "source_location": "L127", + "weight": 1.0, + "source": "design_spec_sections_13_equipment_to_orchestrator_data_flow_13_7_staging_cleanup", + "target": "design_spec_sections_13_equipment_to_orchestrator_data_flow_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_08_error_handling_principles_md", + "target": "design_spec_sections_08_error_handling_principles_8_error_handling_principles", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L11", + "weight": 1.0, + "source": "design_spec_sections_08_error_handling_principles_8_error_handling_principles", + "target": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L15", + "weight": 1.0, + "source": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", + "target": "design_spec_sections_08_error_handling_principles_8_1_1_unresolved_placeholder_rule_hard_tier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L39", + "weight": 1.0, + "source": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", + "target": "design_spec_sections_08_error_handling_principles_8_1_2_illegal_filesystem_character_rule_hard_tier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L51", + "weight": 1.0, + "source": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", + "target": "design_spec_sections_08_error_handling_principles_8_1_3_mode_prefix_mismatch_rule_hard_tier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L60", + "weight": 1.0, + "source": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", + "target": "design_spec_sections_08_error_handling_principles_8_1_4_orphan_rule_soft_tier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L66", + "weight": 1.0, + "source": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", + "target": "design_spec_sections_08_error_handling_principles_8_1_5_missing_required_field_rule_soft_tier", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/08_Error_Handling_Principles.md", + "source_location": "L70", + "weight": 1.0, + "source": "design_spec_sections_08_error_handling_principles_8_1_path_validation_rules", + "target": "design_spec_sections_08_error_handling_principles_8_1_6_tier_mapping", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_10_readme_generation_md", + "target": "design_spec_sections_10_readme_generation_10_readme_generation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L9", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_readme_generation", + "target": "design_spec_sections_10_readme_generation_10_1_when_it_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L26", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_readme_generation", + "target": "design_spec_sections_10_readme_generation_10_2_field_sources_merged_layers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L39", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_readme_generation", + "target": "design_spec_sections_10_readme_generation_10_3_field_types", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L72", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_readme_generation", + "target": "design_spec_sections_10_readme_generation_10_4_user_added_custom_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L80", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_readme_generation", + "target": "design_spec_sections_10_readme_generation_10_5_pre_fill_behavior", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L86", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_readme_generation", + "target": "design_spec_sections_10_readme_generation_10_6_auto_filled_system_fields", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L101", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_readme_generation", + "target": "design_spec_sections_10_readme_generation_10_7_output_format", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L215", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_readme_generation", + "target": "design_spec_sections_10_readme_generation_10_8_readme_plugin_hook_removed_in_v0_7", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L15", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_1_when_it_runs", + "target": "design_spec_sections_10_readme_generation_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L53", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_3_field_types", + "target": "design_spec_sections_10_readme_generation_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L115", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_7_output_format", + "target": "design_spec_sections_10_readme_generation_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L169", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_7_output_format", + "target": "design_spec_sections_10_readme_generation_10_7_1_machine_query_examples", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L209", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_7_output_format", + "target": "design_spec_sections_10_readme_generation_10_7_2_prose_body", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/10_README_Generation.md", + "source_location": "L173", + "weight": 1.0, + "source": "design_spec_sections_10_readme_generation_10_7_1_machine_query_examples", + "target": "design_spec_sections_10_readme_generation_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_16_logging_md", + "target": "design_spec_sections_16_logging_16_logging_architecture", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L14", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_logging_architecture", + "target": "design_spec_sections_16_logging_16_1_goals", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L23", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_logging_architecture", + "target": "design_spec_sections_16_logging_16_2_the_logging_package", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L114", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_logging_architecture", + "target": "design_spec_sections_16_logging_16_3_log_file_layout_where_to_look_quick_reference", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L132", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_logging_architecture", + "target": "design_spec_sections_16_logging_16_4_format", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L154", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_logging_architecture", + "target": "design_spec_sections_16_logging_16_5_levels_and_configuration", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L169", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_logging_architecture", + "target": "design_spec_sections_16_logging_16_6_rotation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L185", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_logging_architecture", + "target": "design_spec_sections_16_logging_16_7_debugging_recipes", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L223", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_logging_architecture", + "target": "design_spec_sections_16_logging_16_8_plugin_worker_logging", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L237", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_logging_architecture", + "target": "design_spec_sections_16_logging_16_9_operator_facing_log_access", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L247", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_logging_architecture", + "target": "design_spec_sections_16_logging_16_10_anti_patterns", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L25", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_2_the_logging_package", + "target": "design_spec_sections_16_logging_codeblock_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L34", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_2_the_logging_package", + "target": "design_spec_sections_16_logging_16_2_1_the_get_logger_name_entry_point", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L55", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_2_the_logging_package", + "target": "design_spec_sections_16_logging_16_2_2_configure_logging_config_at_startup", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L72", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_2_the_logging_package", + "target": "design_spec_sections_16_logging_16_2_3_context_vars", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L91", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_2_the_logging_package", + "target": "design_spec_sections_16_logging_16_2_4_equipment_scoped_handlers", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L102", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_2_the_logging_package", + "target": "design_spec_sections_16_logging_16_2_5_non_blocking_emit_via_queuehandler_queuelistener", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L38", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_2_1_the_get_logger_name_entry_point", + "target": "design_spec_sections_16_logging_codeblock_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L59", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_2_2_configure_logging_config_at_startup", + "target": "design_spec_sections_16_logging_codeblock_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L76", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_2_3_context_vars", + "target": "design_spec_sections_16_logging_codeblock_4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L136", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_4_format", + "target": "design_spec_sections_16_logging_codeblock_5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L189", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_7_debugging_recipes", + "target": "design_spec_sections_16_logging_16_7_1_a_run_failed_what_happened", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L195", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_7_debugging_recipes", + "target": "design_spec_sections_16_logging_16_7_2_sync_is_failing_for_many_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L201", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_7_debugging_recipes", + "target": "design_spec_sections_16_logging_16_7_3_a_plugin_is_misbehaving_in_production", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L209", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_7_debugging_recipes", + "target": "design_spec_sections_16_logging_16_7_4_i_don_t_trust_my_config_what_s_actually_loaded", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/16_Logging.md", + "source_location": "L214", + "weight": 1.0, + "source": "design_spec_sections_16_logging_16_7_debugging_recipes", + "target": "design_spec_sections_16_logging_16_7_5_increase_verbosity_for_one_debug_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_02_user_interaction_md", + "target": "design_spec_sections_02_user_interaction_2_user_interaction", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L13", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_2_user_interaction", + "target": "design_spec_sections_02_user_interaction_table_of_contents", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L33", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_2_user_interaction", + "target": "design_spec_sections_02_user_interaction_1_purpose_and_scope", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L46", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_2_user_interaction", + "target": "design_spec_sections_02_user_interaction_2_mandatory_core_fields_creation_gate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L69", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_2_user_interaction", + "target": "design_spec_sections_02_user_interaction_3_user_capabilities", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L144", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_2_user_interaction", + "target": "design_spec_sections_02_user_interaction_4_mode_invariants_and_safety_boundaries", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L157", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_2_user_interaction", + "target": "design_spec_sections_02_user_interaction_5_validation_order_and_error_surfacing", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L172", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_2_user_interaction", + "target": "design_spec_sections_02_user_interaction_6_user_visible_state_across_surfaces", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L186", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_2_user_interaction", + "target": "design_spec_sections_02_user_interaction_7_pre_sync_gate", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L73", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_3_user_capabilities", + "target": "design_spec_sections_02_user_interaction_3_1_create_a_new_project", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L82", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_3_user_capabilities", + "target": "design_spec_sections_02_user_interaction_3_2_create_a_new_experimental_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L89", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_3_user_capabilities", + "target": "design_spec_sections_02_user_interaction_3_3_create_a_new_test_run", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L98", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_3_user_capabilities", + "target": "design_spec_sections_02_user_interaction_3_4_browse_existing_equipment_projects_and_runs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L104", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_3_user_capabilities", + "target": "design_spec_sections_02_user_interaction_3_5_author_a_readme_at_creation_time", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L112", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_3_user_capabilities", + "target": "design_spec_sections_02_user_interaction_3_6_configure_equipment_paths_and_integrations", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L119", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_3_user_capabilities", + "target": "design_spec_sections_02_user_interaction_3_7_monitor_orchestrator_staging_orchestrator_mode_only", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L125", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_3_user_capabilities", + "target": "design_spec_sections_02_user_interaction_3_8_review_and_resolve_naming_and_validation_problems", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L190", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_7_pre_sync_gate", + "target": "design_spec_sections_02_user_interaction_7_1_what_the_gate_blocks", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L196", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_7_pre_sync_gate", + "target": "design_spec_sections_02_user_interaction_7_2_what_the_user_sees", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L202", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_7_pre_sync_gate", + "target": "design_spec_sections_02_user_interaction_7_3_how_the_gate_is_cleared", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L211", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_7_pre_sync_gate", + "target": "design_spec_sections_02_user_interaction_7_4_override_audit_contract", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/02_User_Interaction.md", + "source_location": "L219", + "weight": 1.0, + "source": "design_spec_sections_02_user_interaction_7_pre_sync_gate", + "target": "design_spec_sections_02_user_interaction_7_5_gate_semantics_on_retroactive_problems", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/09_Configuration_File.md", + "source_location": "L1", + "weight": 1.0, + "source": "design_specs_design_spec_sections_09_configuration_file_md", + "target": "design_spec_sections_09_configuration_file_9_configuration_file", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "design_specs/design_spec_sections/09_Configuration_File.md", + "source_location": "L19", + "weight": 1.0, + "source": "design_spec_sections_09_configuration_file_9_configuration_file", + "target": "design_spec_sections_09_configuration_file_codeblock_1", + "confidence_score": 1.0 + } + ], + "hyperedges": [], + "built_at_commit": "b81f575287acaed74216fb3598964eda3a08f666" +} \ No newline at end of file diff --git a/graphify-out/manifest.json b/graphify-out/manifest.json new file mode 100644 index 0000000..697fbfa --- /dev/null +++ b/graphify-out/manifest.json @@ -0,0 +1,2246 @@ +{ + "/Users/alex/Projects/ExLabWizard/tests/__init__.py": { + "mtime": 1778192475.5635865, + "hash": "2e1fea8e18f315f096045d5b1fce5839" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/test_errors.py": { + "mtime": 1778192475.5757556, + "hash": "6bf2476e0e0fc6cd50444e7e1224a246" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/__init__.py": { + "mtime": 1778192475.5706296, + "hash": "9c1e4ef8d86e83de2b60b3c32f985793" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/test_paths.py": { + "mtime": 1780018031.130469, + "hash": "64084d3d5dbff4dcecc59712298f8c5f" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/test_main.py": { + "mtime": 1778192475.575807, + "hash": "c53677594631b67a1724a41fdb4b971d" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_run_page.py": { + "mtime": 1778871321.7912898, + "hash": "d3ac0f6c3b8fbffd4416a1dd8fbf268a" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_components.py": { + "mtime": 1780030225.4225574, + "hash": "efdaeae74617c8da67c3fd470e5f921f" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_pages.py": { + "mtime": 1780030225.4234173, + "hash": "b29a5dc9f35a3c1dc8d8a177d10aa80e" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_mount.py": { + "mtime": 1780030225.4229822, + "hash": "391030e231e67687d72bbc6392daf0d6" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_page.py": { + "mtime": 1780018059.26053, + "hash": "c23bf876d1b6df34ae8ab2c673fdb310" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/__init__.py": { + "mtime": 1778192475.5767596, + "hash": "8ed5d6363fb291bfde80adec3f3eb6a3" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_equipment.py": { + "mtime": 1779853712.7689152, + "hash": "80bceb84248ded5236cb5e1d04e94aae" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_staging_page.py": { + "mtime": 1779440349.5867205, + "hash": "4e36f575cd6c285f748e6b828961e428" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_notifications.py": { + "mtime": 1778192475.577294, + "hash": "50a9a7ab9eed0e6d1f5e8a2b74e53335" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_templates_page.py": { + "mtime": 1778774823.3556333, + "hash": "6c65daa52af8c250b4889178927bbf5d" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_keyboard.py": { + "mtime": 1778192475.5770998, + "hash": "1c27498b62e21bf92df8e1d077de1f45" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_dynamic_form.py": { + "mtime": 1779853631.9608185, + "hash": "ee1eba5801a04a77446c6de851b32aea" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_file_list.py": { + "mtime": 1779442142.4078324, + "hash": "e451ae136cfd518d9cc0d65b2af2e723" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_theme.py": { + "mtime": 1778194634.0130706, + "hash": "7404e8f1168feec4bfacd26da8c0bbd3" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_breadcrumb.py": { + "mtime": 1778871321.7902071, + "hash": "29deda2201ddbd6822a39c87f3dcaeec" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_settings_nas_credentials.py": { + "mtime": 1779985084.0844846, + "hash": "4559b0048b0f96a91e215385c630c835" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_factories_smoke.py": { + "mtime": 1779227746.8524206, + "hash": "3e8f6696ad6a0027bb04ceb30266f420" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_design.py": { + "mtime": 1778192475.5769286, + "hash": "035e02fc76910163b3a606108cbb2f03" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_travelling_badge.py": { + "mtime": 1778871321.791043, + "hash": "9a6fa58a3a5ee361909fd7c4e5cfa801" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_wizard_project_page.py": { + "mtime": 1778774823.3558664, + "hash": "dfbc6c36bc501c3e7a1e6b160429f5f2" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/ui/test_folder_feed.py": { + "mtime": 1778871321.7903576, + "hash": "ac23e27c91f5371ec8573869291df875" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_catalogue.py": { + "mtime": 1780030225.4219968, + "hash": "536457500f9edb90ec9afd45382163d3" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_keyring_store.py": { + "mtime": 1778192475.5735445, + "hash": "b6e82a893edc7e02129d0b24cf7c1d82" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/lims/__init__.py": { + "mtime": 1778192475.5732067, + "hash": "57dca249230817c984bf528eab71418c" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_client.py": { + "mtime": 1778719920.7554057, + "hash": "cc5f2f9cb3d31b173eb3d097bc402556" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/lims/test_cache.py": { + "mtime": 1778192475.5733159, + "hash": "0db6300665f267a82e9396aae4b0a485" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_creation.py": { + "mtime": 1778871321.7917542, + "hash": "add82d5e3c75fb4ddca7d30a97744a28" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_reconfigure.py": { + "mtime": 1780010389.1322768, + "hash": "f858d537133e604cb3edf71d61c7b7d0" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_findings.py": { + "mtime": 1778192475.5778518, + "hash": "bc595223bd039c53a6bd463525b6d125" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/validator/__init__.py": { + "mtime": 1778192475.5775971, + "hash": "750b523986d53be990d581b782d08fb5" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_rules.py": { + "mtime": 1778871321.7918732, + "hash": "fffb33ca71dda39278278cfd065b37fe" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/validator/test_engine_audit.py": { + "mtime": 1778871321.7914495, + "hash": "61cb608715f4d4cdccb21397c1349b92" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_log_writer.py": { + "mtime": 1778192475.5720794, + "hash": "2b0aaddc0ae35fc3817fcfcada3c9f83" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_creation_writer.py": { + "mtime": 1778194634.0123575, + "hash": "919407045a2bd44dbce82aef087c4681" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/cache/__init__.py": { + "mtime": 1778192475.571712, + "hash": "1a71221d0f7f93131bf07b82bee16bdf" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_equipment.py": { + "mtime": 1778719920.7545931, + "hash": "a0145513fca4f1c135b9efba1babea62" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/cache/test_sync_state_writer.py": { + "mtime": 1779484405.1287787, + "hash": "519a403d2abab42c1dc1981b19ca7fb3" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_loader.py": { + "mtime": 1779853987.2461622, + "hash": "5c9791c01c6a915ef2d52e003980e9b7" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/config/__init__.py": { + "mtime": 1778192475.572184, + "hash": "08b871e14b89d3a9a0087f1a7633939f" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/config/test_models.py": { + "mtime": 1779853987.209839, + "hash": "b419a2e3ccfa8cfcf1aa6c6733cf7a9d" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_registry.py": { + "mtime": 1778231226.4459372, + "hash": "00b2ffdbbf64b79610b1f5fef75131e4" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/__init__.py": { + "mtime": 1778192475.5744371, + "hash": "4d86323c00be2e1ca35a9b9ab1680288" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_base.py": { + "mtime": 1778192475.574501, + "hash": "cc6de202e356b999edb7fe5bad6a2063" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/plugins/test_logger.py": { + "mtime": 1778231226.4458437, + "hash": "b238c936c945cdc2d90b2b2b5fdcbcab" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_schema_versions.py": { + "mtime": 1779484275.181043, + "hash": "086194144f5c63b2084965761936e226" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_patterns.py": { + "mtime": 1778871321.7886252, + "hash": "65ed0b7d0b7f40230e453e9ab90f3fc1" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/constants/__init__.py": { + "mtime": 1778192475.5724611, + "hash": "1ad9c0f22b6b87c22a1db6af089e2fe2" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enum_literal_alignment.py": { + "mtime": 1779983852.3888102, + "hash": "3d515c457e637c66b71e40dc88f7534a" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_enums.py": { + "mtime": 1779983847.244174, + "hash": "6a5d60865ad05071dd250e3643f91ad3" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_keyring.py": { + "mtime": 1778192475.5726705, + "hash": "69e40c322de126d3bc4d686cb4ef7df8" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_limits.py": { + "mtime": 1778192475.572772, + "hash": "2507a56ed8297c11734b95b080066253" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/constants/test_filenames.py": { + "mtime": 1779855843.682109, + "hash": "62b2088f57700ba962e760f881359b68" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_yaml_files.py": { + "mtime": 1778719920.7551916, + "hash": "c8507f59f4f4ad3fb393beeca00fe3ed" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_atomic_write.py": { + "mtime": 1778719920.7550943, + "hash": "03df8418dea6fdfb1094260d40293a03" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/io/__init__.py": { + "mtime": 1778719920.7550333, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/io/test_json_files.py": { + "mtime": 1778719920.7551455, + "hash": "9dc81574ea03e9f4ad9ed664b218cdaa" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/template/__init__.py": { + "mtime": 1778192475.5755742, + "hash": "2e5c44a751bce11325ee886f6f07a0e6" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/template/test_copier_driver.py": { + "mtime": 1778719920.7557387, + "hash": "9b583a95a3fbdde8b8887cf6825c29c8" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_time.py": { + "mtime": 1778719920.7563303, + "hash": "32890aa0df13047e57fd33f74c23ff83" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/utils/__init__.py": { + "mtime": 1778719920.7561908, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/utils/test_state.py": { + "mtime": 1778719920.7562723, + "hash": "8d666ec9ff140b80020d90b797f720e6" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_storage_secret.py": { + "mtime": 1778774823.3550882, + "hash": "1cd78fadd17c3efd584fe9592cdc548c" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_dependencies.py": { + "mtime": 1779990942.8581474, + "hash": "8d6c21685560361c5aeef9064fa22be8" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_icon.py": { + "mtime": 1778192475.5761425, + "hash": "fa7c022ed699127b36e34370146defc0" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_live_reload.py": { + "mtime": 1780011124.7817101, + "hash": "d82a93ae1fb9e70d325820cc159f25f9" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/tray/__init__.py": { + "mtime": 1778192475.5759902, + "hash": "e925f10812a2d4d962af2096c592028c" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_status.py": { + "mtime": 1778192475.5765805, + "hash": "bb60b8a7b34b1c43c0b60c3f5a80443b" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_server_runner.py": { + "mtime": 1778192475.576493, + "hash": "cf073dd0b8b351b6dea4dd91e22f01ee" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_notifications.py": { + "mtime": 1778192475.5763035, + "hash": "6998d30a54dd93fe83035704a2e7b5ec" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_quit_coordinator.py": { + "mtime": 1778192475.5763986, + "hash": "04ecbd24ed265f4b20f261a5798d21d5" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_window_launcher.py": { + "mtime": 1778192475.57668, + "hash": "7ac2044b53e1b47bad5b672248e33cb1" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_autostart.py": { + "mtime": 1778192475.5760503, + "hash": "bf11e3ef2f3c01998d5022cb95e8c1cb" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/tray/test_main.py": { + "mtime": 1779757041.95291, + "hash": "1a90f5d96089fec8e381faa6b7632bab" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/readme/test_generator.py": { + "mtime": 1778192475.5748081, + "hash": "71242bb16de7d6e18331a74de6f94522" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/readme/__init__.py": { + "mtime": 1778192475.5747452, + "hash": "7a73647defb3f8daef6bdedf1d21465e" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_creation_apply_config.py": { + "mtime": 1780010403.039255, + "hash": "72e93e8894e4f58f9b577455bc7e8594" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_state_machine.py": { + "mtime": 1778192475.5731256, + "hash": "359b73d71b41b9344a9d43b85e0f92df" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/controller/__init__.py": { + "mtime": 1778192475.5729923, + "hash": "a33a092ec45a0389b4b9d25e6125a6ea" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/controller/test_session_store.py": { + "mtime": 1780030225.4217477, + "hash": "b6761a00135296dbc813fc4804a3837e" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_pywebview_app.py": { + "mtime": 1778192475.5782878, + "hash": "44a51852304729dfe6566c103d4959d9" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/window/__init__.py": { + "mtime": 1778192475.5780127, + "hash": "b0ddc49241de7649636ae2ab864aacce" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/window/test_main.py": { + "mtime": 1778192475.5781047, + "hash": "d67c8f78e08c64a6db3b8dd11ded28a8" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_setup.py": { + "mtime": 1779984295.5361962, + "hash": "72f939119a49857d2a19b02669724272" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_errors.py": { + "mtime": 1778192475.5710654, + "hash": "81052c1115947cd793f32c3d86459dac" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_config_router.py": { + "mtime": 1779983937.9005346, + "hash": "b3c2dcfa2c269885c4c3c9044a704df4" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_operations.py": { + "mtime": 1779983937.9004555, + "hash": "46db56e09f71b480946f37e2ced3647d" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_sessions.py": { + "mtime": 1779983937.9002175, + "hash": "ad3bbd209c833279fe0e0efedfce6813" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/api/__init__.py": { + "mtime": 1778192475.570713, + "hash": "2145e18491ee0565977bfa7b9d07170b" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_browse.py": { + "mtime": 1779983937.9004729, + "hash": "effd6830237d90b7e31170675a21554b" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_schemas.py": { + "mtime": 1779440066.7145877, + "hash": "08f882b2af85f0155235951ab59efd0c" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_health.py": { + "mtime": 1779983937.9002137, + "hash": "4b73742c5e2eb6f4192cd3daec974aaa" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_staging_router.py": { + "mtime": 1779853328.616597, + "hash": "80fba55147b83464715a80fedff91fdc" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_events.py": { + "mtime": 1778231226.4450772, + "hash": "c0b0fd1a1b82f9ace5966f1e761a19ca" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_problems.py": { + "mtime": 1779983937.900394, + "hash": "5807e9a3aa5cb4f8768da1e78376f752" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/api/test_app.py": { + "mtime": 1778231226.4448552, + "hash": "2b76cc2c808dfde66db440c1555ad935" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client_extra.py": { + "mtime": 1779857470.4203432, + "hash": "7d4943ee808fc725eeff2434355c7531" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_transports.py": { + "mtime": 1779855803.6250112, + "hash": "ae1125b670418c3ce6859d70af33c715" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_bandwidth.py": { + "mtime": 1778192475.5749414, + "hash": "468a6d0d85b55af27065b78ba0fcf5d5" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_cleanup.py": { + "mtime": 1778192475.5750291, + "hash": "e6b602f1acf7bfd878afd2dd91662694" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/sync/__init__.py": { + "mtime": 1778192475.5748882, + "hash": "4133020cc8e2abfdccc2e65d7deb3ba2" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_queue.py": { + "mtime": 1779440066.7161484, + "hash": "74b0e368f65c7fec4dacfa26c7fc702a" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_nas_client.py": { + "mtime": 1780010361.4515994, + "hash": "5bc958c8093753f3ea07abe389d86ffb" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/sync/test_pre_sync_gate.py": { + "mtime": 1778871321.789819, + "hash": "a6fcee1bc3829913a84d60b214ceafd4" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/sync/_helpers.py": { + "mtime": 1779855973.7534215, + "hash": "57d44e54a6e62318097fa26bdb474425" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_rclone_env.py": { + "mtime": 1779855168.8805878, + "hash": "a7d6ef88ef1d929dc2b3d5acc452ffcb" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/test_run.py": { + "mtime": 1779855061.9211836, + "hash": "f1ec2630b004024b0374cd83fc6c0a1c" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/sync/transports/__init__.py": { + "mtime": 1779855071.352482, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_handlers.py": { + "mtime": 1778192475.5739412, + "hash": "842f19400a06c530e03e2451ffd45d56" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/logging/__init__.py": { + "mtime": 1778192475.5736039, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_context.py": { + "mtime": 1778192475.573767, + "hash": "7af3c2f0f391ec412b7d462ec220a5d0" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_manager.py": { + "mtime": 1778192475.5740051, + "hash": "6974467cbdfadd5f6182ae5fc3dd9e7f" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/logging/test_format.py": { + "mtime": 1778192475.5738733, + "hash": "fb9a67cd181ac63f9b62f0f2baa1d045" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/__init__.py": { + "mtime": 1778192475.5740545, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_scan.py": { + "mtime": 1779440066.7156014, + "hash": "57367db62d6d36e813d593208aca1331" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_staging_query.py": { + "mtime": 1779440612.1588957, + "hash": "d9649cab738c9eabc9306914f6eb8fd5" + }, + "/Users/alex/Projects/ExLabWizard/tests/unit/orchestrator/test_quiescence_poller.py": { + "mtime": 1780010374.972735, + "hash": "9a2b02e32a90d14792848da142726a3d" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/test_orchestrator_lifecycle.py": { + "mtime": 1779854248.2438107, + "hash": "4452edc4e05bd2e10629cb86100b6e67" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_window_smoke.py": { + "mtime": 1778774823.354797, + "hash": "f286160f3cb095b1cafc6070067afda2" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/test_lims_integration.py": { + "mtime": 1778719920.7539012, + "hash": "3d2d0729a544854dd384895b2b57863a" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/test_tray_lifecycle.py": { + "mtime": 1778192475.570474, + "hash": "0f4f55cb1ce70e3e71c0624153dbfa66" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/test_nas_sync.py": { + "mtime": 1779986755.4297688, + "hash": "8732894a33aea0b265cdba5cba67cba9" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/test_lims_contract.py": { + "mtime": 1778719920.7537932, + "hash": "5c97b9470b941888c7cb1feaaf2ad60e" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/__init__.py": { + "mtime": 1778192475.5692468, + "hash": "5f322e3384aa5c03f10f876b970f8e7f" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/test_schema_major_mismatch.py": { + "mtime": 1779440066.713749, + "hash": "21c848f8cf35aa68e8d7ce00c5dc912a" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/test_creation_json_concurrent_writes.py": { + "mtime": 1778192475.5699215, + "hash": "27f4b0ee6b40aa2485590e4f1872ddf3" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/test_validator_determinism.py": { + "mtime": 1778194634.0119998, + "hash": "fe1df55d91b4a897080f63184b0567a5" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/test_pyinstaller_smoke.py": { + "mtime": 1778887316.7202282, + "hash": "0399c1a67f630fbf509780d61b9b17d9" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/test_host_isolation.py": { + "mtime": 1778192475.5698142, + "hash": "6f0bb5bbe211e118e4c494857b07fff0" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/plugins/__init__.py": { + "mtime": 1778192475.5697272, + "hash": "c283af3694b22f854e6c725bedd5fe9a" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/controller/__init__.py": { + "mtime": 1778192475.5695207, + "hash": "5ef739e9d1f14f3535b763538b417f55" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/controller/test_creation_flow.py": { + "mtime": 1780030225.421576, + "hash": "108ebae75c98303fb410bfa18a1303ff" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/api/test_full_flow.py": { + "mtime": 1779983937.9002197, + "hash": "744fa2aa86cbe7fceceb8e4c59865584" + }, + "/Users/alex/Projects/ExLabWizard/tests/integration/api/__init__.py": { + "mtime": 1778192475.5693328, + "hash": "d05c92d984d361191ffaa0b77232d234" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/__init__.py": { + "mtime": 1778192475.5656211, + "hash": "4244979ba71389330370f6cb4991f9cd" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/mock_lims.py": { + "mtime": 1778719920.7537136, + "hash": "c5bd253e8f3c32ade2e5fd5c36c20551" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/stub_rclone.py": { + "mtime": 1779990866.1642096, + "hash": "72ad5fe9187aa5469d31f3d58ab85432" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/__init__.py": { + "mtime": 1778719920.7530754, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/__init__.py": { + "mtime": 1778719920.7532084, + "hash": "d41d8cd98f00b204e9800998ecf8427e" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/__init__.py": { + "mtime": 1778192475.5663285, + "hash": "0a6a2cc7c42b725606021c4beed2dfda" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/__init__.py": { + "mtime": 1778192475.5676584, + "hash": "e408d782bcaef2052ebe46d3ff39f147" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/plugin.py": { + "mtime": 1778192475.5678747, + "hash": "9c29e08febb3231891c51d5b182b6163" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/__init__.py": { + "mtime": 1778192475.5664346, + "hash": "25e3131ffe73775cfac307917cf9d0d4" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/__init__.py": { + "mtime": 1778192475.566797, + "hash": "7ac92f6dfbd986b224baa10bb9a3ec87" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/plugin.py": { + "mtime": 1778192475.5669167, + "hash": "bcf2f20524ccd9e90c291905c1483738" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/__init__.py": { + "mtime": 1778192475.5672479, + "hash": "709dec8f89563e6c3ed63b1210b6f2c1" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/plugin.py": { + "mtime": 1778192475.567383, + "hash": "4eb7f7fa5906b66c4d6199724f1ba8ce" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/__init__.py": { + "mtime": 1778192475.5670145, + "hash": "91a3ab238ff31668c4f4e8365bc500b8" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/plugin.py": { + "mtime": 1778192475.5671394, + "hash": "a5f00b48d4113d7f3ad1e29885caa49f" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/__init__.py": { + "mtime": 1778192475.5665464, + "hash": "d6670423e24c7474f86b65d15a099a49" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/plugin.py": { + "mtime": 1778192475.566699, + "hash": "3882a98b993a64d9bb6603e4eb179df3" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/__init__.py": { + "mtime": 1778192475.5674644, + "hash": "d880a50a0054bc020476e28f02347d53" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/plugin.py": { + "mtime": 1778192475.5675693, + "hash": "3ee3ae41699b273fb8ed1a16266f2377" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/configs/__init__.py": { + "mtime": 1778192475.5657845, + "hash": "ac94af8fff278bc86cf175b332766aee" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/templates/__init__.py": { + "mtime": 1778192475.5681312, + "hash": "8a7e67e129a688cb87e54beb6bda2b5b" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_18_relay_receive.py": { + "mtime": 1779756776.7318337, + "hash": "a095da9485d1d386ee28f7ece7f41221" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/conftest.py": { + "mtime": 1778192475.564071, + "hash": "c829372e25eef37256a59f2f2c4c655c" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_fresh_install_setup.py": { + "mtime": 1780011020.0550826, + "hash": "7a5d046bf277afa22b206d7175a59ff2" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_22_onboarding_redesign.py": { + "mtime": 1778871321.7852085, + "hash": "1650794b7cac77e1c2b6ad7a0b71fb17" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_24_context_menus.py": { + "mtime": 1779756804.5270338, + "hash": "c2c8e5086bd253a6bfe566a0e5757aea" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_08_settings.py": { + "mtime": 1779227746.8426805, + "hash": "d3f26ada5f06ba221b734ed4cb640c1f" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_11_crash_recovery.py": { + "mtime": 1778192475.565255, + "hash": "870818df990ac61e4e2d0d1b0e11ed65" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_03_experimental_run.py": { + "mtime": 1778192475.5647767, + "hash": "19775cc3226bc74e960e00f5b87b2cc4" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_server.py": { + "mtime": 1779986413.153844, + "hash": "43a505812390991df92b25a4b501aaa9" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_17_picker_step.py": { + "mtime": 1779756766.9308562, + "hash": "e23004f7506d280e0f9800e80e792b5c" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_20_file_explorer.py": { + "mtime": 1779756795.9519956, + "hash": "a8db4783f97e8094b40bf65b5ecf298c" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view_sync_icons.py": { + "mtime": 1779442176.9190416, + "hash": "6c093486780dfe0629d95d164e58d196" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_05_browse_view.py": { + "mtime": 1779756744.839734, + "hash": "2a99ad94592dfcad5296bd4431e10c18" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/__init__.py": { + "mtime": 1778192475.5637705, + "hash": "6480819940f21f3ae2328cf54c585bab" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_16_add_equipment.py": { + "mtime": 1779756757.3570318, + "hash": "edf4da81c38419db4f5a793aca3184f9" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_23_footer_staging.py": { + "mtime": 1778871321.7852678, + "hash": "bd483c4eb5d60cc1a643a0f8865b115f" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_smoke.py": { + "mtime": 1778192475.5655344, + "hash": "f5c156c854c1d404b7b7b925f9d4cff7" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_ux_documentation.py": { + "mtime": 1778887316.719904, + "hash": "d6fcd7fae19416124787bd557f01db23" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/_prod_app.py": { + "mtime": 1780010908.8504312, + "hash": "ae30687a0f5a8822f669210c546984bf" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_25_production_main_wiring.py": { + "mtime": 1779756858.55785, + "hash": "ed37996d2e2438ddc227bf47c4a99d81" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_00_full_lifecycle.py": { + "mtime": 1780011036.514418, + "hash": "8093ead629071514a605d27601e79c82" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_13_keyboard.py": { + "mtime": 1778192475.5653646, + "hash": "68630d2ccbfc8b7037a2b8fde15dee32" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/ux_catalog.py": { + "mtime": 1780010871.0112464, + "hash": "3965f9b94121b76d5e2f0d17aa4d1ffb" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_07_plugin_input_required.py": { + "mtime": 1778231226.4438095, + "hash": "4a98c5cce9d1b968845728d9d3e30549" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_26_equipment_wizard_persist.py": { + "mtime": 1779986270.2233727, + "hash": "9ec67cbf05827db3930f8e372f44c644" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_09_orchestrator.py": { + "mtime": 1779440066.7122064, + "hash": "c1b68a350a84a98ae13751d8bc4743ff" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_27_nas_credential_settings.py": { + "mtime": 1779985537.6276138, + "hash": "78f91c2bcb2d17bee9b472c1a05b623d" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_15_websocket_reconnect.py": { + "mtime": 1778192475.5654774, + "hash": "a1297d4b32da80ea55922d26035f7bc3" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_21_stage_ceiling.py": { + "mtime": 1778871321.7851264, + "hash": "c667d19a391ac83e3e13592f491dd631" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/_test_app.py": { + "mtime": 1779985631.2874255, + "hash": "b383e604ed23ad04973b20dd2d6b1545" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_01_onboarding.py": { + "mtime": 1779756734.0719478, + "hash": "cb7aa98e7ca787d2cb541ee5e24eb667" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_12_quit_coordinator.py": { + "mtime": 1778192475.5653136, + "hash": "b446a82d687ebce887db8a3be258200b" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_19_travelling_badge.py": { + "mtime": 1779756786.8896565, + "hash": "485bc403e0aca95447a408b89e86a9a3" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_04_test_run.py": { + "mtime": 1778192475.5648265, + "hash": "b4fb248f8b12e2eeb77ef27556ab5c42" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_06_problems.py": { + "mtime": 1778192475.5649517, + "hash": "7b4da7d0000d002e54016e6833e12ec9" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_14_notifications.py": { + "mtime": 1778192475.5654209, + "hash": "bd501d8b11d7fa71e552cfc361e91494" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_10_schema_mismatch.py": { + "mtime": 1778192475.5651963, + "hash": "2e7c0b52d322bb50051f6cf0ba917cd7" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/test_flow_02_project_wizard.py": { + "mtime": 1778871321.7846243, + "hash": "af10934e99f602fb806a0dd3e3f94230" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/problems_page.py": { + "mtime": 1778192475.5642738, + "hash": "340f3a0f015ef463b704463c24bf4b7d" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/settings_page.py": { + "mtime": 1778785084.8021023, + "hash": "6abd3fe64132fbc446b41fe5732eca28" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/__init__.py": { + "mtime": 1778192475.5641525, + "hash": "845cef84d0a5f2d23b5df1f11f2411d2" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_equipment_page.py": { + "mtime": 1779986246.0849621, + "hash": "9f6e4b32d841e96c50efe14467157ae0" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/staging_page.py": { + "mtime": 1778192475.5644047, + "hash": "be6bfebbef149d0a74e35629d0b36df6" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_run_page.py": { + "mtime": 1778871321.784328, + "hash": "4eabba0ace84005fde6ccafc22855987" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/wizard_project_page.py": { + "mtime": 1778871321.7841794, + "hash": "0982d42d14eeeacf4f521b641cdc549e" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/main_page.py": { + "mtime": 1779227746.8422146, + "hash": "0033dd569e269a0d8e18c20371b070ab" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/page_objects/welcome_page.py": { + "mtime": 1778192475.5644624, + "hash": "8390ae94de87adf4d08ab21fd427140b" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/conf.py": { + "mtime": 1778887316.7043667, + "hash": "c1ee403bd9b458fb126b88f81bc4e28f" + }, + "/Users/alex/Projects/ExLabWizard/scripts/generate_screenshots.py": { + "mtime": 1779316926.8602834, + "hash": "b1d85eec1a1d9ea12555b5e86d1f6cba" + }, + "/Users/alex/Projects/ExLabWizard/scripts/build_local.ps1": { + "mtime": 1778192475.563422, + "hash": "7b4912e2e5f6d9b05ae779cdaec666c6" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/paths.py": { + "mtime": 1780017807.896224, + "hash": "887fd8f4f550130ef47a09a03614c575" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/__init__.py": { + "mtime": 1778887316.706702, + "hash": "ee14fd0512d6d4c87eb91248d6ba2286" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/errors.py": { + "mtime": 1778887316.7091596, + "hash": "024c232b6f68fd679d44fcfeb3daf430" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/__main__.py": { + "mtime": 1778887316.7067456, + "hash": "31376a07c68496d020a4ec65c890a8a2" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/theme.py": { + "mtime": 1778887316.7186413, + "hash": "fac83fe2d818a1301e571564ee957dee" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/equipment_form.py": { + "mtime": 1779852301.2195299, + "hash": "3084c53c20a03557ada13cc4ba0dbbf9" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/design.py": { + "mtime": 1778887316.716037, + "hash": "c7c462d8c70c21a9929b60d8f7b9d8d7" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/__init__.py": { + "mtime": 1778887316.71415, + "hash": "237328595cab105835097b590a02cc3c" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/notifications.py": { + "mtime": 1778887316.71677, + "hash": "fa8ba085628e54b8d93beb8a08c51c21" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/mount.py": { + "mtime": 1780030225.4195428, + "hash": "fc907321ed84d3f8200e9a2aa34db79e" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/keyboard.py": { + "mtime": 1778887316.7165968, + "hash": "fbf7351a12e538ba507b9939608c2fd0" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/file_list.py": { + "mtime": 1779487121.9538305, + "hash": "abe8c3171839f5e1b45877c92310a7b5" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_connection_panel.py": { + "mtime": 1778887316.715521, + "hash": "fe0a46a0fab687964b684b79432c4fe0" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/override_badge.py": { + "mtime": 1778887316.7151566, + "hash": "152c8bf8986bac00526b6812ecc1d3ae" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree.py": { + "mtime": 1779441802.3543327, + "hash": "6cdffcfec36618a4f122f7235157e954" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/breadcrumb.py": { + "mtime": 1778887316.714585, + "hash": "fac67f69b3257249ef0c26ae95995f5e" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/test_run_badge.py": { + "mtime": 1778887316.7155788, + "hash": "1a8652318c6cdef6a633b66e6a279a15" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/metadata_pane.py": { + "mtime": 1779440066.7104285, + "hash": "b723335208690e56c4424f8234fc2676" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/travelling_badge.py": { + "mtime": 1778887316.7156353, + "hash": "fdd08383af37f45dea63308e814595f4" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/bandwidth_schedule_editor.py": { + "mtime": 1778887316.7144713, + "hash": "a3dca258873ced990e4fbcfa793df49d" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/input_required_dialog.py": { + "mtime": 1780030225.4185495, + "hash": "f7932b4cffad2ce648076047fc9eebbe" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/status_bar_segment.py": { + "mtime": 1778887316.7153776, + "hash": "665b502098247541d78470c96ea25d9c" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/sync_status_icon.py": { + "mtime": 1779441768.7771258, + "hash": "8b2a85d5f4fc8aa79a033b4005b56a72" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/tree_context_menu.py": { + "mtime": 1778887316.7158039, + "hash": "0b53e57b5cf5368220c333c14785ca5a" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/__init__.py": { + "mtime": 1780030225.4184768, + "hash": "7df53923728263eaa7b52d4d5460882c" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/operations_modal.py": { + "mtime": 1780030225.4187684, + "hash": "505cc97f8ff9f889540d9e62e2e5088d" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/credential_field.py": { + "mtime": 1778887316.7147007, + "hash": "bb5ea99d8cd87f9db6c3162fbbedd876" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/session_progress.py": { + "mtime": 1780030225.4189878, + "hash": "b35ec4323a6972fc7d27dffbb7472e83" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/validation_summary.py": { + "mtime": 1778887316.715866, + "hash": "3bfd38a1aab846180aea65cce1d82570" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/mode_badge.py": { + "mtime": 1778887316.7149277, + "hash": "4e9208c54d0628f38b49d1bf5da43154" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/filter_chips.py": { + "mtime": 1778887316.7148159, + "hash": "ccbc9d62e963b070e86da6d5b9225e44" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/components/banner_stack.py": { + "mtime": 1778887316.7145374, + "hash": "be7dc1fc2a61ad9c043807e0f75d4d4f" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_run.py": { + "mtime": 1780030225.421143, + "hash": "94a1ba2fdc718b85f15cba0913461fa0" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/__init__.py": { + "mtime": 1778887316.7168846, + "hash": "17ffd60d3165f04853352b4b07ffd544" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/templates.py": { + "mtime": 1778887316.7173643, + "hash": "17428444f6305f0ded21f43ffad6510c" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/problems.py": { + "mtime": 1780030225.420175, + "hash": "2ad9347f86161cc3ace90b2232559e29" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_equipment.py": { + "mtime": 1779853987.2461195, + "hash": "9e1fab750e7459efd1387d3667762ce7" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/settings.py": { + "mtime": 1780030225.4206786, + "hash": "00688975fa14edd557ca9a3ad64b3fb3" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/welcome.py": { + "mtime": 1778887316.7175474, + "hash": "93443e3baaaad7b4083192196fdc7378" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/main.py": { + "mtime": 1780030225.4199326, + "hash": "a2739a388a5c29468e166a8df8437c3e" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/staging.py": { + "mtime": 1779440066.7111874, + "hash": "c2bfea5f8d1943226c4c67d8ceb5fe28" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/pages/wizard_project.py": { + "mtime": 1780030225.4209733, + "hash": "f73b9beb3f4e2979968d197ffa404f9a" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/refresh_coordinator.py": { + "mtime": 1778887316.7143393, + "hash": "4fbfbd6cbae75275befd767102bd00a1" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/__init__.py": { + "mtime": 1778887316.7142217, + "hash": "f568553436a1d22cdd39d6d594b04f39" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/ui/client/folder_feed.py": { + "mtime": 1778887316.7142797, + "hash": "659733c448a8598986bb606dc945c3b5" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/keyring_store.py": { + "mtime": 1778887316.709644, + "hash": "9d9f1d02cdd0511ffc7884a2ae12ae23" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/client.py": { + "mtime": 1778887316.7095952, + "hash": "fef4af994863ff83d2e2dc16ec2b6bcc" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/cache.py": { + "mtime": 1778887316.709473, + "hash": "5eddee4015b0ee38f1d804635ea9efd4" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/__init__.py": { + "mtime": 1778887316.7094054, + "hash": "f3a23b1274c82341d221ec5016a2bfd7" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/schemas.py": { + "mtime": 1778887316.7097085, + "hash": "c97f40a1978d3bf5d19e2aaf042a1b2f" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/lims/catalogue.py": { + "mtime": 1780030225.415094, + "hash": "d0b38da7e90beb8a01d7eab36de27ab0" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/findings.py": { + "mtime": 1778887316.7190373, + "hash": "4072ae44edda1d51b152de48669d37eb" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/__init__.py": { + "mtime": 1778887316.7188685, + "hash": "5ce924106a0a7d79874631e1d49fa8ce" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/rules.py": { + "mtime": 1778887316.7190897, + "hash": "a0e24719f7552e94f1622cb08c9fd75b" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/validator/engine.py": { + "mtime": 1780009028.044374, + "hash": "2fa0066d4c427ce753a51f256848d5fe" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/equipment.py": { + "mtime": 1778887316.707977, + "hash": "2bb6f468eaf403b89916bed3e88f343a" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_schema.py": { + "mtime": 1779855272.3585145, + "hash": "5798c1a0dd899ecba4a45b0550ee9d4a" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/sync_state_writer.py": { + "mtime": 1779857194.194154, + "hash": "6f7592a49354a0a1a09a34414007b358" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/__init__.py": { + "mtime": 1778887316.707862, + "hash": "09a8e3a53c655e6abfe9d3f568b4c21e" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/log_writer.py": { + "mtime": 1778887316.7080953, + "hash": "3b4220fe20e09ada04ed25e498263eb4" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/cache/creation_writer.py": { + "mtime": 1778887316.7079272, + "hash": "dfec2dabdda0ff69f6328ef460c1d931" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/models.py": { + "mtime": 1780017923.6846125, + "hash": "682ea4dc9d3b5ade0c7a9ce02ca2b90a" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/__init__.py": { + "mtime": 1778887316.7081482, + "hash": "9d4df1a87a4de0801371cb8295bf37a1" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/config/loader.py": { + "mtime": 1779756530.9651835, + "hash": "450450079de510c1a274d3689ae648cb" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/registry.py": { + "mtime": 1778887316.711591, + "hash": "29fced03bce3dd9ac45aa207e6cc7d1b" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/host.py": { + "mtime": 1780030225.4154303, + "hash": "b72dd5f6695b0cb6ed2a680c85d6eb8a" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/__init__.py": { + "mtime": 1778887316.7107298, + "hash": "e28b3d4c285f0f136db07313f3623156" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/logger.py": { + "mtime": 1778887316.711478, + "hash": "c553ba4423d011693315faccf8a75c8c" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/base.py": { + "mtime": 1778887316.711147, + "hash": "2b96fe68afb9aa81b8155df6c8ac7304" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/plugins/_worker.py": { + "mtime": 1778887316.7109003, + "hash": "e3180c2c9c7985c96fd7dac690cda358" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/enums.py": { + "mtime": 1780017933.2804172, + "hash": "88a21ec68413658eea44c40b86b51249" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/patterns.py": { + "mtime": 1778887316.7086759, + "hash": "044a13a6565b394a3fabb77ccabd7c59" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/limits.py": { + "mtime": 1778887316.7085998, + "hash": "fa79e7b95ff3d79def246b2717f155a8" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/filenames.py": { + "mtime": 1779855764.851056, + "hash": "8bc238887a4a9b69300b1acb614f0e6b" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/__init__.py": { + "mtime": 1779855865.368706, + "hash": "a9a0a93368d314cf5e66671ec4399066" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/keyring.py": { + "mtime": 1778887316.70854, + "hash": "7e6778116aa44f22d442bfd84b67040f" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/app.py": { + "mtime": 1779756405.7655954, + "hash": "a6f71851fc16d5d6f1473da0ff153914" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/constants/schema_versions.py": { + "mtime": 1779484219.8213682, + "hash": "e0b4552628e679f871216fcaaa19268e" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/json_files.py": { + "mtime": 1778887316.709309, + "hash": "e34580f6c24688fee57e0d0511d07530" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/__init__.py": { + "mtime": 1778887316.7092104, + "hash": "5f7407af82d74e42673f081119d6a622" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/atomic_write.py": { + "mtime": 1778887316.7092597, + "hash": "4990e5aa1c7a6f56b422f5aa42efa6ea" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/io/yaml_files.py": { + "mtime": 1778887316.7093532, + "hash": "c73c6b0d170532cc7a47c066d1218d64" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/__init__.py": { + "mtime": 1778887316.7127964, + "hash": "ccecc1b6570c997a883d8827b2cbda57" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/template/copier_driver.py": { + "mtime": 1778887316.7128644, + "hash": "52470e4403aea33b60e1d9da42bb353d" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/time.py": { + "mtime": 1778887316.7188072, + "hash": "cf573a2b994d06222921576de750d323" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/__init__.py": { + "mtime": 1778887316.718706, + "hash": "5dc8037530c0fb850582a503357e1d85" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/utils/state.py": { + "mtime": 1778887316.7187524, + "hash": "9401023c81b07a7822934b60172c69aa" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/icon.py": { + "mtime": 1778887316.7131217, + "hash": "15ca80641f218efcb81ea8d65d55e6a4" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/server_runner.py": { + "mtime": 1778887316.7136395, + "hash": "780efe8165a9072ce4e857de7f6329dd" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/__init__.py": { + "mtime": 1778887316.7129273, + "hash": "e068687bd75ea21c56f0a236e69fdecf" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/autostart.py": { + "mtime": 1778887316.7129865, + "hash": "c6778db2148402d0d9182228d1c6db0d" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/quit_coordinator.py": { + "mtime": 1778887316.713561, + "hash": "27eff69fe55a108201d53f7818d21088" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/window_launcher.py": { + "mtime": 1778887316.714091, + "hash": "c12684bad36dafb08fcd72e1a17ff3e3" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/notifications.py": { + "mtime": 1778887316.7134647, + "hash": "1d67ebe63250b16a79225ba593a58776" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/main.py": { + "mtime": 1780030225.4182613, + "hash": "dbc60db2d1b3ec281a545b14a56ef2be" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/dependencies.py": { + "mtime": 1780030225.4179416, + "hash": "3e02cf4389a95f6f39fe1f67f8bf1f65" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/status.py": { + "mtime": 1778887316.7139156, + "hash": "b38d93493743a892e47c5177319f19db" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/tray/storage_secret.py": { + "mtime": 1778887316.7140105, + "hash": "88d3ce0577e1c042bdbbd5609cd8cd5b" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/__init__.py": { + "mtime": 1778887316.7116766, + "hash": "5aa9de637c1ccf6c70ad9fa558f28673" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/readme/generator.py": { + "mtime": 1778887316.7117565, + "hash": "4c7138b81baba5821d4f161c75efe99e" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/creation.py": { + "mtime": 1780030225.4144628, + "hash": "2b4a756d8614d0587ddeb146cfdbd55e" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/__init__.py": { + "mtime": 1780030225.4140658, + "hash": "405e6cc064b0901197e29f80b99a7434" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/state_machine.py": { + "mtime": 1778887316.7091095, + "hash": "0a4a2cc88367c1fd28ecbb2724124fab" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/controller/session_store.py": { + "mtime": 1780030225.414838, + "hash": "40cb1a6d39431075aa83ae997d8ee0b3" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/pywebview_app.py": { + "mtime": 1778887316.7195377, + "hash": "dc8a76edd7fa9db575086409f1c66ffe" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/__init__.py": { + "mtime": 1778887316.7191873, + "hash": "bb79941a5b5e7b49776ea35ea9944b42" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/window/main.py": { + "mtime": 1778887316.719356, + "hash": "9063ad0cc4f8c535ce7ea63789b48f88" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/health.py": { + "mtime": 1779484175.042146, + "hash": "18697ab159bd8fbce89712c1daddd8b5" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/_dependencies.py": { + "mtime": 1779858106.6817465, + "hash": "75d2d6bb3fe9456a3e1b5a451b5a8ff5" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/events.py": { + "mtime": 1778887316.707098, + "hash": "3f2e6689e6361fba70fbef5a92012ba2" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/__init__.py": { + "mtime": 1778887316.706802, + "hash": "48bed013bd51413dc7f9237be3b3e360" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/setup.py": { + "mtime": 1779858322.9540107, + "hash": "0e95f0d2e6db4551a44fa36eba835f71" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/schemas.py": { + "mtime": 1779484850.0430028, + "hash": "e38b57b85c80d01b2d76b71dc7b25020" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/app.py": { + "mtime": 1780030225.4135993, + "hash": "50601a008350a47f732b27b5a380a03f" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/errors.py": { + "mtime": 1779858522.1781368, + "hash": "b0a68a0b15fd2274bb30dc5fbfcf58fc" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/browse.py": { + "mtime": 1779442977.6942852, + "hash": "209dd73510b163cbc533b0f372e24895" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/sessions.py": { + "mtime": 1778887316.7076066, + "hash": "81f672a70b8d6f7dd7045feb0c09f5f4" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/config.py": { + "mtime": 1780009525.3310099, + "hash": "8a073ca8b43e625cc1a435331207e815" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/__init__.py": { + "mtime": 1778887316.7072046, + "hash": "6fd1880a00170fce23b10839fbd1cf42" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/operations.py": { + "mtime": 1780030225.4138632, + "hash": "9ec4637d63ae1e7ec6726870513b252b" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/problems.py": { + "mtime": 1778887316.7075026, + "hash": "b90d8ffd6425ecee253a30306deab6fe" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/api/routers/staging.py": { + "mtime": 1779442904.0151088, + "hash": "0a39d67b0cf64596742ac66f68a4b941" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/queue.py": { + "mtime": 1779440066.7093844, + "hash": "85264151b44bd5a782eea72963d28370" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/nas_client.py": { + "mtime": 1780009063.9116166, + "hash": "428771f29a147a0e47aa86d2d16d680a" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/__init__.py": { + "mtime": 1778887316.7118518, + "hash": "d1eafd277122418f30324450bec92b2e" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/cleanup.py": { + "mtime": 1778887316.7119753, + "hash": "1d7f88b453271c3405d7b1accab3fa57" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/bandwidth.py": { + "mtime": 1778887316.7119112, + "hash": "04f10e23f8153d50309499e3b6912fb8" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/pre_sync_gate.py": { + "mtime": 1778887316.7121267, + "hash": "955594315b5c9e19cd8af9ea405fa782" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/verifier.py": { + "mtime": 1779989368.6924746, + "hash": "18178a378b37f01b849aa76ec061ab10" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/run_delete.py": { + "mtime": 1779441094.115504, + "hash": "236e0a2cc47194ed090decb713c6f2bf" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/__init__.py": { + "mtime": 1778887316.71228, + "hash": "969f593c82e2f8d810fc14d18c7f8ce4" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/rclone.py": { + "mtime": 1779984242.4769497, + "hash": "0f333e9a85f3fd37d81d41c44ef36687" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/sync/transports/_run.py": { + "mtime": 1779852437.0490232, + "hash": "f0ed347746067f717ce0a5d1122ac577" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/handlers.py": { + "mtime": 1778887316.7100515, + "hash": "22feeba9dac685ddb356cb75ee27f1ad" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/__init__.py": { + "mtime": 1778887316.7097588, + "hash": "1fd90e19e509c79bcd147162f3d197a2" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/format.py": { + "mtime": 1778887316.7099767, + "hash": "6fa366e7cfe14410898bfce7a5bcae6a" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/context.py": { + "mtime": 1778887316.7099192, + "hash": "e35d4eb80e702645b06636ab10b3c610" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/logging/manager.py": { + "mtime": 1778887316.7101078, + "hash": "8f4df4fa7eaba0f8f4bf4638195efcd8" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/quiescence_poller.py": { + "mtime": 1780009097.5564256, + "hash": "33cb3372ec583b7e1516a689e25353a6" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/_scan.py": { + "mtime": 1779440066.7088668, + "hash": "edcf28b19e340b56c557675510e005a4" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/__init__.py": { + "mtime": 1779440066.7087142, + "hash": "b8d5aef1bbfbba441a5e2017f9d8387d" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_clear.py": { + "mtime": 1779484898.324295, + "hash": "ba94a24ffd24b749767c45e5bab04ea6" + }, + "/Users/alex/Projects/ExLabWizard/src/exlab_wizard/orchestrator/staging_query.py": { + "mtime": 1779484883.3951538, + "hash": "0005ca3ecf74d0bde4e7cc32c1e36a27" + }, + "/Users/alex/Projects/ExLabWizard/README.md": { + "mtime": 1778887316.700905, + "hash": "16350ced21a7c22707203423dd2bb052" + }, + "/Users/alex/Projects/ExLabWizard/DESIGN.md": { + "mtime": 1778038558.2527084, + "hash": "aaef2dfc0ac6ac42d81dcf2dcfe667a3" + }, + "/Users/alex/Projects/ExLabWizard/_internal/README.md": { + "mtime": 1778192475.5510361, + "hash": "e403bbc18b842a6ec94007208db50db3" + }, + "/Users/alex/Projects/ExLabWizard/tests/docker/README.md": { + "mtime": 1779987970.0527692, + "hash": "1ffa82142a31185b4b48cf91c251c637" + }, + "/Users/alex/Projects/ExLabWizard/tests/docker/docker-compose.yml": { + "mtime": 1779988883.5184524, + "hash": "88d9d0f62421e257bc4ed93b52bf6a4f" + }, + "/Users/alex/Projects/ExLabWizard/tests/docker/nas-data/Run_2026-05-28T10-00/notes.txt": { + "mtime": 1779993069.0, + "hash": "d98e76668be06a2eb4c0b5e155f260b0" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/lims/exlab_v1/README.md": { + "mtime": 1778719920.7531853, + "hash": "b422ad71cb47862231bc91f2123430d4" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/hello_plugin/manifest.yml": { + "mtime": 1778192475.5677142, + "hash": "2f1c9e54fde096d6f1f3079aed955c09" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/error_plugin/manifest.yml": { + "mtime": 1778192475.566858, + "hash": "25d56e1af85208547e4227503d651391" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/policy_violation_plugin/manifest.yml": { + "mtime": 1778192475.5673177, + "hash": "033d7b1c719b62a53e8ecc5bb2ea6de0" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/input_required_plugin/manifest.yml": { + "mtime": 1778192475.5670688, + "hash": "8f99570340b9faa68537b2757802106f" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/crash_plugin/manifest.yml": { + "mtime": 1778192475.5666316, + "hash": "e8083211f56fde438f988459e1176d4e" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/plugins/_failures/timeout_plugin/manifest.yml": { + "mtime": 1778192475.567512, + "hash": "0e45fac0a3f0c1878d8d9aa44f62922a" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/configs/incomplete_no_lims.yaml": { + "mtime": 1779853857.4614372, + "hash": "5858d4d420c8f35495636904561e0088" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/configs/incomplete_no_equipment.yaml": { + "mtime": 1778871321.7860131, + "hash": "776bf7dbec2586b7874dece188b85ef7" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/configs/incomplete_no_paths.yaml": { + "mtime": 1779853857.4568183, + "hash": "b220f91ee25fe8d09c4192a60e9adb0f" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/configs/README.md": { + "mtime": 1778192475.565712, + "hash": "ce11b965fa9d372fcfe59145bf54261b" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/configs/complete.yaml": { + "mtime": 1779853843.058958, + "hash": "62b0d9af991f5a84c47fa58ee21d4215" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/templates/run_basic_both/copier.yml": { + "mtime": 1778192475.5686162, + "hash": "f59a9238b2f9a463dd39aeb7394078a6" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/templates/run_basic_test/copier.yml": { + "mtime": 1778192475.5689287, + "hash": "a09d1a9668aa1260c540b768d6cb73fb" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/templates/redeclares_core/copier.yml": { + "mtime": 1778192475.568532, + "hash": "3ac92263bad5d1ec159b0307521c399e" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/templates/run_basic_experimental/copier.yml": { + "mtime": 1778192475.56877, + "hash": "147910b91fcbe17ca808834a5ef5dc91" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/templates/missing_version/copier.yml": { + "mtime": 1778192475.568235, + "hash": "e3757aa0691d359aa82fa6704e276448" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/templates/with_tasks/copier.yml": { + "mtime": 1778192475.5690942, + "hash": "307da16268db18e5a7e0579c477aab9e" + }, + "/Users/alex/Projects/ExLabWizard/tests/fixtures/templates/project_basic/copier.yml": { + "mtime": 1778192475.568326, + "hash": "8defa0f62bfed8056ad7e6054b3b6fca" + }, + "/Users/alex/Projects/ExLabWizard/tests/e2e/README.md": { + "mtime": 1778192475.5637197, + "hash": "7854ac689141fb183330629890161f5f" + }, + "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK_TASKS.md": { + "mtime": 1780030225.413053, + "hash": "9600e3c6f5cf47b1581d4b852a54c8cd" + }, + "/Users/alex/Projects/ExLabWizard/docs/REMAINING_WORK.md": { + "mtime": 1780019735.8312056, + "hash": "a2e81051f3d87aeecdc3d3ecbd091587" + }, + "/Users/alex/Projects/ExLabWizard/docs/UX_INTERACTIONS.md": { + "mtime": 1779986622.757152, + "hash": "ba553c65e26544e910cdc81a98a6c52c" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/index.md": { + "mtime": 1778887316.704442, + "hash": "172deffac073e63e214e8a3a2fdd409b" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/02_browse.md": { + "mtime": 1779316926.8589227, + "hash": "07fb6a0451d8f0a2d4be4955462df15a" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/03_create_project.md": { + "mtime": 1779316926.859022, + "hash": "07e8b315d837c961439b0a32b3f309d0" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/08_problems.md": { + "mtime": 1778887316.705558, + "hash": "f7d16c0e08f8429529d3b3f108bf450e" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/07_orchestrator.md": { + "mtime": 1778887316.7054944, + "hash": "7cf53076bf9f6eee3365cfcf6287db25" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/01_settings.md": { + "mtime": 1779440066.7064464, + "hash": "09300bc443c9cc5e658b9b113b604673" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/06_readme.md": { + "mtime": 1779316926.8592937, + "hash": "3bd07735e0c61797b344f16f8666f66a" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/index.md": { + "mtime": 1779316926.8596318, + "hash": "0e423755a2b80d8879b44a417ccdf454" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/00_getting_started.md": { + "mtime": 1779316926.8587399, + "hash": "74c3f0bcfd847f70906052016b03f617" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/04_create_run.md": { + "mtime": 1779316926.859108, + "hash": "c0b6fe3eccdc75a1b3c6e8be4b0aecf5" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/user_guide/05_create_test_run.md": { + "mtime": 1779316926.8591979, + "hash": "17e5ca58364d374ab218a194b5d717eb" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/index.rst": { + "mtime": 1778887316.7042208, + "hash": "80bbd5a49516dfc36f19ab11bf828d84" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.plugins.logger.rst": { + "mtime": 1778743232.834483, + "hash": "35c8070e590b29b7affdb246e1150e63" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.controller.state_machine.rst": { + "mtime": 1778743232.7736025, + "hash": "4f1e71d6b1cda6b24bd9796ee6f77139" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.tray.window_launcher.rst": { + "mtime": 1778743232.892297, + "hash": "e2d82105943fce5c0914be4600aeeb19" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.tray.main.rst": { + "mtime": 1778743232.880523, + "hash": "1478450778ffae6b40f39ef14c0f54fb" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.window.pywebview_app.rst": { + "mtime": 1778743232.9327288, + "hash": "a373a655c493835346356c8df6a24af1" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.window.rst": { + "mtime": 1778743232.7146823, + "hash": "f90dc5e744e27dd7ec98aae173a4f6a9" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.errors.rst": { + "mtime": 1778743232.7262666, + "hash": "451ddea9a85a73d396cea47b75b1d530" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.tree.rst": { + "mtime": 1778743232.9867764, + "hash": "0390111b9d50be4c74690c49abf5518f" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.routers.browse.rst": { + "mtime": 1778877294.3585439, + "hash": "4a6744496b63710c713b8830aeb8e66e" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.client.rst": { + "mtime": 1778877294.959309, + "hash": "4cb344a877767d4459efbd220bf0db64" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.controller.creation.rst": { + "mtime": 1778743232.7688215, + "hash": "7b4c72d316dd3fbb2aad54ab53406390" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.tray.quit_coordinator.rst": { + "mtime": 1778743232.8855515, + "hash": "4b425f69c314c249fd367f3842529cd1" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.tray.icon.rst": { + "mtime": 1778743232.877409, + "hash": "e847d2507cfeadd3e4a1633a3192be37" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.health.rst": { + "mtime": 1778743232.730879, + "hash": "d51d414021c27f1f8e17e008674d7049" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.sync.rst": { + "mtime": 1778743232.6875668, + "hash": "3654ceb9652de1815002bcf7850e5c2e" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.pages.rst": { + "mtime": 1778877294.9826303, + "hash": "dbcb9d7b2671bcd3ab889a4f5fc79bde" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.logging.format.rst": { + "mtime": 1778743232.787626, + "hash": "2059b5f1950b15a2f6dfde9492f3009f" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.banner_stack.rst": { + "mtime": 1778743232.9674966, + "hash": "a4459420ddf3fda76019f2de23320af3" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.validation_summary.rst": { + "mtime": 1778743232.9886498, + "hash": "91da7bc120acd0a8188a21ead596baf9" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.tray.autostart.rst": { + "mtime": 1778743232.8707888, + "hash": "793d653606bc7abbf2304e202fa2b882" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.routers.operations.rst": { + "mtime": 1778743232.946071, + "hash": "1bdf88f040ac79aea13ea5799bced43d" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.config.models.rst": { + "mtime": 1778743232.75644, + "hash": "9f0b969229bdff4352fef2c469f418e2" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.orchestrator.staging_watcher.rst": { + "mtime": 1778743232.8214808, + "hash": "c7e6959dd20ff992c469c38e55dd1143" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.cache.ingest_writer.rst": { + "mtime": 1778743232.7457328, + "hash": "de1f2bab89ecc4b0864e3c1b058ee2dd" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.pages.main.rst": { + "mtime": 1778877294.9833417, + "hash": "f878c249c55c802644bafb923144bf0f" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.tray.server_runner.rst": { + "mtime": 1778743232.8876445, + "hash": "42d11c26b395e3f0c838da64f9e7f551" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.rst": { + "mtime": 1778877294.6967142, + "hash": "93c78023181e42539ab63edd29dbaa14" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.setup.rst": { + "mtime": 1778743232.738546, + "hash": "a4dcf3e470139b7dfbff1d9bb82f4601" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.credential_field.rst": { + "mtime": 1778877294.9632702, + "hash": "d46f9df066df1a823352d1e830322dd4" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.rst": { + "mtime": 1778743232.61944, + "hash": "c6559a4f578245f46ddb7879eba6cc56" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.app.rst": { + "mtime": 1778743232.7218957, + "hash": "77f7516d465d3ec33af52cdb1ddff422" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.logging.manager.rst": { + "mtime": 1778743232.792124, + "hash": "485abdf35ac8134036aeccc9d64a9a1d" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.plugins.base.rst": { + "mtime": 1778743232.8232431, + "hash": "8151a96e1ca5bbff9cff03a8c42aefc2" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.validator.findings.rst": { + "mtime": 1778743232.9237397, + "hash": "6df3d359e2c3598e8a863def77398417" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.config.loader.rst": { + "mtime": 1778743232.749462, + "hash": "e22abdcfd8176fda65f0fad997eac7ad" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.sync_status_icon.rst": { + "mtime": 1778743232.980488, + "hash": "eaffe381ed664fce170272f4c29d1517" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.sync.nas_client.rst": { + "mtime": 1778743232.8548243, + "hash": "174339a9efa9602c91ac27ca53d45549" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.pages.problems.rst": { + "mtime": 1778743232.9955218, + "hash": "1ddf9df6e192f180b302b78fbf661577" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.logging.context.rst": { + "mtime": 1778743232.7859945, + "hash": "2757aa7e2c4f94b7712209a86439ddd9" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.tray.notifications.rst": { + "mtime": 1778743232.8835397, + "hash": "34c48c2010bff0eafe341439f6954cf6" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.window.main.rst": { + "mtime": 1778743232.9313219, + "hash": "620df13f8096dec710c91a9930880d2a" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.bandwidth_schedule_editor.rst": { + "mtime": 1778743232.9656916, + "hash": "50087a3da609ab8f2cd66bc73ccda9f0" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.readme.rst": { + "mtime": 1778743232.686439, + "hash": "e815fe9c5c50638f1436604d091d4999" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.travelling_badge.rst": { + "mtime": 1778877294.9748416, + "hash": "219bd7533bb0522239a6652778241f64" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.client.folder_feed.rst": { + "mtime": 1778877295.0029233, + "hash": "3c98ca635ad9cc95335081ec181f3f84" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.routers.problems.rst": { + "mtime": 1778743232.951567, + "hash": "d337ec0da3b8555c25a6ac4afcd1a0f5" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.notifications.rst": { + "mtime": 1778743232.9105525, + "hash": "1863d720d5d7d518de8f415d5f8079aa" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.template.rst": { + "mtime": 1778743232.6879792, + "hash": "4497babcd98dd765e8dc2fc3a87a746a" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.lims.catalogue.rst": { + "mtime": 1778743232.777615, + "hash": "e6fab8124a32204407ba0e2a74e9250c" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.lims.client.rst": { + "mtime": 1778743232.78009, + "hash": "f55fa1537a737b709d6b7828d2fc81ce" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.client.refresh_coordinator.rst": { + "mtime": 1778877295.0052857, + "hash": "44dc99200a56b32e6802b329be763647" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.events.rst": { + "mtime": 1778743232.72819, + "hash": "8335c106c84a57773efc456c8ea18605" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.breadcrumb.rst": { + "mtime": 1778877294.9627192, + "hash": "adf1540392c85079c99e5a6bedcbcec8" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.tray.rst": { + "mtime": 1778743232.6937451, + "hash": "41458525b8e025d919f8c8841986ee7e" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.file_list.rst": { + "mtime": 1778877294.966338, + "hash": "ab1ae7dd91411d1e950d63c539575e63" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.rst": { + "mtime": 1778877294.9601269, + "hash": "6e29920ea544df7822ac5b742852d97e" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.sync.transports.rclone.rst": { + "mtime": 1778743232.9612744, + "hash": "dc9544d4dfe8ced7c0494b165cab5594" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.plugins.rst": { + "mtime": 1778743232.6841261, + "hash": "e0f5003419b96db99299458782709d45" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.controller.session_store.rst": { + "mtime": 1778743232.7714345, + "hash": "315eef07e287a8eacc8a8a392f03fd1a" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.pages.staging.rst": { + "mtime": 1778743233.0065405, + "hash": "9cfac0e82e62c40a6c3aad9ae9fe5835" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.keyboard.rst": { + "mtime": 1778743232.8991337, + "hash": "877b5c7d449b3db8ad196400c6a9b9ce" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.theme.rst": { + "mtime": 1778743232.913327, + "hash": "826c3bd59dd7bbded95de47d54f91478" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.sync.bandwidth.rst": { + "mtime": 1778743232.8460243, + "hash": "17bd92d55edbef4f8ba6514738fabbca" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.session_progress.rst": { + "mtime": 1778743232.977385, + "hash": "46988fd77488776678e03a9848879026" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.routers.config.rst": { + "mtime": 1778877294.3616476, + "hash": "0673ba1199482053d6b75509faba09cd" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.cache.equipment.rst": { + "mtime": 1778743232.743335, + "hash": "8cece4138fe5944d8d7524bb2e50c6e6" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.pages.settings.rst": { + "mtime": 1778877294.9845219, + "hash": "d807a065415e28b0513318440e6f4ded" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.operations_modal.rst": { + "mtime": 1778743232.9738376, + "hash": "7560ee3d6b376c474c154bf67b38646e" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.tray.dependencies.rst": { + "mtime": 1778743232.8757606, + "hash": "a89d054d6954043655e41e63ce632fde" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.test_connection_panel.rst": { + "mtime": 1778743232.9817991, + "hash": "37b0bcfb42b515e1ff0d0e7d4af2c6d5" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.template.copier_driver.rst": { + "mtime": 1778743232.8677325, + "hash": "2180fa1bd1093890b3c44c5c3fa26b20" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.sync.transports.rsync_ssh.rst": { + "mtime": 1778743232.9636145, + "hash": "65d941f6ff2d289312d373678f962fbe" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.routers.rst": { + "mtime": 1778743232.731456, + "hash": "49bb6a2a9f9e6047aec0dfdde41e2982" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.routers.sessions.rst": { + "mtime": 1778743232.9562986, + "hash": "2dce9df3c0deed63fd475820b7d5a6ea" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.errors.rst": { + "mtime": 1778743232.632246, + "hash": "bf9454d20be40c45acc02f8580c2553f" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.cache.creation_writer.rst": { + "mtime": 1778743232.7416325, + "hash": "eb8b76f8aca477ac6bd5185f405b4a8a" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.equipment_form.rst": { + "mtime": 1778877294.9797487, + "hash": "0195b14f51f3cb9c540a2bcb1d76fd5e" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.pages.wizard_equipment.rst": { + "mtime": 1778877294.9932783, + "hash": "e6b6a599b59831c17eb3513bde8d847b" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.tray.storage_secret.rst": { + "mtime": 1778743232.8906562, + "hash": "0f89fd127fa8a8b405abfe459726884b" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.sync.queue.rst": { + "mtime": 1778743232.8606384, + "hash": "98e50bcbc38d7b082e695d1b064148a8" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.pages.welcome.rst": { + "mtime": 1778743233.0134578, + "hash": "8dd8fd1b6114ca5285ba0b24ecda40e4" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.lims.keyring_store.rst": { + "mtime": 1778743232.783375, + "hash": "bc7cfdb40ec580e17dc39dd04cf41460" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.orchestrator.cleanup.rst": { + "mtime": 1778743232.793959, + "hash": "0a0080cb5389300b0a9599fb8e064bd8" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.pages.wizard_project.rst": { + "mtime": 1778743233.0183048, + "hash": "484743d343936ea28e2a40bbd0e9058c" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.orchestrator.rst": { + "mtime": 1778743232.681598, + "hash": "4c66a03943f32563f3249480b9daa69b" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.test_run_badge.rst": { + "mtime": 1778743232.9826221, + "hash": "12de1f85bfc3994e12c36c9e4d41432c" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.sync.pre_sync_gate.rst": { + "mtime": 1778743232.8561275, + "hash": "a4abab9fb3b41c84443793e53334d063" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.status_bar_segment.rst": { + "mtime": 1778743232.978618, + "hash": "4bfc4b686c3ad81f31f8f59606a1a04d" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.cache.log_writer.rst": { + "mtime": 1778743232.7477558, + "hash": "774f34a7bd3936b84555dfe204faa612" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.override_badge.rst": { + "mtime": 1778743232.9750776, + "hash": "8c2a1b893f87cc54a6adb205eb9cf8cd" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.logging.handlers.rst": { + "mtime": 1778743232.7896905, + "hash": "7fb2d83e7130dd3130b64db467f890e5" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.lims.rst": { + "mtime": 1778743232.680085, + "hash": "79ab0df8e7b7e28349d522acd83ad6fc" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.mode_badge.rst": { + "mtime": 1778743232.9717798, + "hash": "3ffc80c7dfc65f021c2d6e4468d5750a" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.plugins.registry.rst": { + "mtime": 1778743232.8389528, + "hash": "8ba5241b301b7a41fb96b37789c75f2d" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.controller.rst": { + "mtime": 1778743232.6310613, + "hash": "3b80d4828204a9f1a7866eb65767b8fc" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.plugins.host.rst": { + "mtime": 1778743232.8325953, + "hash": "7978228169590b5e2e4af4ece5495884" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.tray.status.rst": { + "mtime": 1778743232.889775, + "hash": "221bbc6565f65f18457902003373ca79" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.cache.rst": { + "mtime": 1778743232.6202512, + "hash": "2c3b3b942c3e83cad27d42f0f6522d52" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.pages.templates.rst": { + "mtime": 1778743233.0115335, + "hash": "9cf3d133695f7ced3ec9ea3c25fc37f4" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.lims.cache.rst": { + "mtime": 1778743232.776002, + "hash": "21d709d0eba189e746cd0359e3fc5900" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.metadata_pane.rst": { + "mtime": 1778877294.969995, + "hash": "58c05502057ecf62a939c6797a6cd6fa" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.sync.cleanup.rst": { + "mtime": 1778743232.8473356, + "hash": "85bdfd6b726d8b0ac2edd9b4c610f3bd" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.design.rst": { + "mtime": 1778743232.895463, + "hash": "302e9853b914c02f69f656925da9ee4b" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.schemas.rst": { + "mtime": 1778743232.7346604, + "hash": "721515ee44e0bc45f578d574defa1d87" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.validator.rst": { + "mtime": 1778743232.7131178, + "hash": "b2c003bb2ee7b145fc9ae2dba5fe87e8" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.sync.verifier.rst": { + "mtime": 1778743232.864626, + "hash": "b6a4f935c96c40cad83b0f72510c1de6" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.readme.generator.rst": { + "mtime": 1778743232.8446536, + "hash": "34933e343687e34de13bb62ba9b060b2" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.api.routers.staging.rst": { + "mtime": 1778743232.959288, + "hash": "0ae4cc7f2009aab0b0aa6d67d3461f21" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.validator.engine.rst": { + "mtime": 1778743232.9226258, + "hash": "af7d7fc043bc5529389c0fb87c9b9499" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.tree_context_menu.rst": { + "mtime": 1778877294.976748, + "hash": "af5ac01e64ff441299592b72ac9146b4" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.config.rst": { + "mtime": 1778743232.6300693, + "hash": "f932b6cbb20a73fc88abd7959c7e5a63" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.orchestrator.staging_query.rst": { + "mtime": 1778743232.8159475, + "hash": "8c7ddb31628df04042018fb333c8d3f0" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.validator.rules.rst": { + "mtime": 1778877294.9482949, + "hash": "adb33c0bbca6ee35445f90ed93ff5d24" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.pages.wizard_run.rst": { + "mtime": 1778743233.0226243, + "hash": "7513b888d80f873892e3bad7c9292d70" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.components.filter_chips.rst": { + "mtime": 1778743232.9708178, + "hash": "bc239a191bfd1ae59116ed9a136bf075" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.sync.transports.rst": { + "mtime": 1778743232.861698, + "hash": "c7c1f243e1efa54a828575a71c8ca9e7" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.logging.rst": { + "mtime": 1778743232.6808248, + "hash": "579a3cfdbb0aa652e15ac3eb532c9393" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.ui.mount.rst": { + "mtime": 1778743232.9071581, + "hash": "e05590a28a15c7f2960255a323ce7681" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/api/_generated/exlab_wizard.lims.schemas.rst": { + "mtime": 1778743232.7843103, + "hash": "8c8d4ec8d309c3652199b9c2af905708" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/superpowers/specs/2026-05-14-gui-orchestrator-redesign-design.md": { + "mtime": 1778887316.7049596, + "hash": "e19b6261125f625d3dbd1d6b8ddc6511" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/manifest_schema.md": { + "mtime": 1778887316.7046688, + "hash": "ad16ce0ec77e0be02e29c8c1794fb3ac" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/ipc_envelope.md": { + "mtime": 1778887316.704606, + "hash": "1c5db8cf418000fb0b014621f20ec580" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/index.md": { + "mtime": 1778887316.7045462, + "hash": "83e23f045c4796bfd6e8755a56c37029" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/plugin_guide/worked_examples.md": { + "mtime": 1778887316.704729, + "hash": "a95d15b3fd67f4f74dd818b2771aa057" + }, + "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-21-operator-free-per-file-nas-sync-design.md": { + "mtime": 1779430584.872797, + "hash": "5367be02ac45a50b14099b0c7fc2d0ee" + }, + "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-26-rclone-only-nas-sync-design.md": { + "mtime": 1779845832.8495932, + "hash": "43b73291db0d69e51495778fdd2f6ff5" + }, + "/Users/alex/Projects/ExLabWizard/docs/superpowers/specs/2026-05-28-staging-root-opt-in-design.md": { + "mtime": 1780017359.8830984, + "hash": "d56fc10fda54a79576688cc8bd9937c0" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Frontend_Spec.md": { + "mtime": 1778871321.7729487, + "hash": "ab99d95d718e605df1592c2895316532" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/ExLab-Wizard_Design_Spec.md": { + "mtime": 1778871321.7720885, + "hash": "f5fd99ee8fafb546f2bb908f1fa0d548" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/IMPLEMENTATION_PLAN.md": { + "mtime": 1778871321.7734296, + "hash": "32b2530bc80f6db00868d08018c95733" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/07_Sync_and_Database_Integration.md": { + "mtime": 1778871321.7746224, + "hash": "1f6102cd6bba0d3789a5af275fab1da6" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/03_Directory_Structure_Convention.md": { + "mtime": 1778871321.7740068, + "hash": "d1f01c14513ac98f6d318c9ae3de3a90" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/12_Orchestrator_Mode.md": { + "mtime": 1777411057.8971348, + "hash": "728aa3e28932612d0c2ef2054e62a962" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/06_Plugin_System.md": { + "mtime": 1778061796.5506337, + "hash": "36945947a6ad809d615622ccc7e9f8ae" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/15_Distribution.md": { + "mtime": 1778058485.4633203, + "hash": "eb168a0f19078a0db433186fd943b876" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/04_Backend_Architecture.md": { + "mtime": 1778061776.422859, + "hash": "900eb2e7eddd534f6faae52f6d357e09" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/11_Cache_Folders.md": { + "mtime": 1778871321.7757447, + "hash": "a223611dd428d10b9f77181ddf030e03" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/05_Template_Format.md": { + "mtime": 1778871321.7743647, + "hash": "a6bc5d1bb02fa3b8dc24ff232f774552" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/13_Equipment_to_Orchestrator_Data_Flow.md": { + "mtime": 1778871321.7759976, + "hash": "0e2b65535a927935488c36a2f1c5d12d" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/08_Error_Handling_Principles.md": { + "mtime": 1778871321.7749019, + "hash": "57f00dba3869d2a467a6911b9d8d65cb" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/10_README_Generation.md": { + "mtime": 1778871321.7753968, + "hash": "e9e0927689e1d2645bb6a87386c19d87" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/16_Logging.md": { + "mtime": 1778871321.7761986, + "hash": "5c0367ae24907d6a2461840793ceb09c" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/02_User_Interaction.md": { + "mtime": 1778871321.7737012, + "hash": "000f4d2b3ef0ea572a57e7e8b59d6507" + }, + "/Users/alex/Projects/ExLabWizard/design_specs/design_spec_sections/09_Configuration_File.md": { + "mtime": 1778871321.7751405, + "hash": "21b5351376a6036c30927b6bc6f98d04" + }, + "/Users/alex/Projects/ExLabWizard/nas-verify-connected.png": { + "mtime": 1779991082.354783, + "hash": "d4b60a8c2b74a5d54f88076563e47f26" + }, + "/Users/alex/Projects/ExLabWizard/nas-verify-01-main.png": { + "mtime": 1779990473.439531, + "hash": "a075f0118806caabb5cea4e8cb5be6fe" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/_static/screenshots/08_problems/01_initial.png": { + "mtime": 1779316926.8585918, + "hash": "cca8c2da2f99b78ba6f0545c88362d0e" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/_static/screenshots/05_create_test_run/01_initial.png": { + "mtime": 1779316926.8545485, + "hash": "a82a1bc681a091ee9d21b3a5f4bbba70" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/_static/screenshots/07_orchestrator/01_initial.png": { + "mtime": 1779316926.8553822, + "hash": "ec74c642222e14bb8d245968e6eb4b2d" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/_static/screenshots/07_orchestrator/02_main.png": { + "mtime": 1779316926.856255, + "hash": "5f2c38b7bfaed08d7cb88d7ca2cba0f7" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/_static/screenshots/06_readme/01_initial.png": { + "mtime": 1779316926.8547287, + "hash": "c7385382334f80b9c63631b725329192" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/_static/screenshots/02_browse/01_initial.png": { + "mtime": 1779316926.8536217, + "hash": "4a0f55fa548d22e20eb7c1f7b287ccbf" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/_static/screenshots/02_browse/02_selected.png": { + "mtime": 1779316926.853885, + "hash": "32b4948ac601571d6a2fdd0eece528a4" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/_static/screenshots/03_create_project/01_initial.png": { + "mtime": 1779316926.854103, + "hash": "c7385382334f80b9c63631b725329192" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/_static/screenshots/00_getting_started/01_initial.png": { + "mtime": 1779316926.8529668, + "hash": "d8987c32938c78e3b5181d983cc950fd" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/_static/screenshots/04_create_run/01_initial.png": { + "mtime": 1779316926.8543537, + "hash": "38f3cb9f705030e846b60b12b71fcc5a" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/_static/screenshots/01_settings/01_initial.png": { + "mtime": 1779316926.8532274, + "hash": "03c2022f890809db53cc8159eff3634e" + }, + "/Users/alex/Projects/ExLabWizard/docs/source/_static/screenshots/01_settings/02_add_equipment.png": { + "mtime": 1779316926.853385, + "hash": "fad3b5872155a6cb29b492abf9f4fa34" + }, + "/Users/alex/Projects/ExLabWizard/assets/ExLabWizardLogo.svg": { + "mtime": 1778231168.0, + "hash": "5531a61ca569e19d131bb71aebe4e6a5" + }, + "/Users/alex/Projects/ExLabWizard/assets/sync_cloud.svg": { + "mtime": 1778193909.0, + "hash": "8da0304ffdc21ef8582673f82395506a" + }, + "/Users/alex/Projects/ExLabWizard/assets/sync_local.svg": { + "mtime": 1778193909.0, + "hash": "60fa512b302bf8dfb4fbd85321932df0" + }, + "/Users/alex/Projects/ExLabWizard/assets/equipment_graphics/Cytation10.png": { + "mtime": 1768258072.0, + "hash": "a818177d082a9d213db2aff9b4bfd697" + }, + "/Users/alex/Projects/ExLabWizard/assets/equipment_graphics/Tecan.png": { + "mtime": 1771639030.0, + "hash": "a4f7415e3dcd701914490a33121674c7" + }, + "/Users/alex/Projects/ExLabWizard/assets/equipment_graphics/SnP-ColonyPicker.png": { + "mtime": 1768258056.0, + "hash": "3680e0142a8967be6c271e9196386a90" + }, + "/Users/alex/Projects/ExLabWizard/assets/equipment_graphics/SnP-Imager.png": { + "mtime": 1768258042.0, + "hash": "8f2b35b705389d84aaf14912473a5299" + }, + "/Users/alex/Projects/ExLabWizard/assets/equipment_graphics/OpentronsBench.png": { + "mtime": 1771639130.0, + "hash": "ffd6ddecb1cb34a4ec0718835d2c238d" + }, + "/Users/alex/Projects/ExLabWizard/assets/equipment_graphics/TecanFluent.png": { + "mtime": 1768591628.0, + "hash": "e1bfde2576c43e4c573948f45692b9c4" + }, + "/Users/alex/Projects/ExLabWizard/assets/equipment_graphics/PinnerBench.png": { + "mtime": 1771639112.0, + "hash": "035b94e5aa560adc234054b4f36471c7" + } +} \ No newline at end of file diff --git a/nas-verify-01-main.png b/nas-verify-01-main.png new file mode 100644 index 0000000..d0f537f Binary files /dev/null and b/nas-verify-01-main.png differ diff --git a/nas-verify-connected.png b/nas-verify-connected.png new file mode 100644 index 0000000..2bf8ff6 Binary files /dev/null and b/nas-verify-connected.png differ diff --git a/src/exlab_wizard/api/_dependencies.py b/src/exlab_wizard/api/_dependencies.py index 0c46339..553f6fa 100644 --- a/src/exlab_wizard/api/_dependencies.py +++ b/src/exlab_wizard/api/_dependencies.py @@ -21,11 +21,56 @@ from fastapi import HTTPException, Request, status __all__ = [ + "lims_password_present", + "nas_remote_available", "require_controller", "require_deps", ] +def lims_password_present(deps: Any) -> bool: + """Return whether a LIMS password is stored -- the repo-wide reader. + + Every surface that asks "is the LIMS keyring password set?" -- the + settings credential field, the setup-state evaluator, the + section-completion gate -- routes through here so the default and + the ``deps is None`` handling stay identical instead of each call + site open-coding its own ``getattr(deps, "keyring_password_present", + ...)`` with its own default. + + ``deps`` is typed ``Any`` because callers hold it loosely + (``AppDependencies`` in production, mocks in tests, ``None`` before + wiring). A ``None`` or attribute-less ``deps`` means nothing is + wired yet, so the password cannot be present -- hence ``False``. + """ + if deps is None: + return False + return bool(getattr(deps, "keyring_password_present", False)) + + +def nas_remote_available(deps: Any, remote: str) -> bool: + """Return whether ``remote`` is present in the operator's rclone.conf. + + rclone.conf NAS-sync migration. Mirrors :func:`lims_password_present`: + every surface that asks "is this rclone remote configured?" -- the + setup-state evaluator, the live config-reload re-evaluation -- routes + through here so the default and the ``deps is None`` handling stay + consistent. + + The predicate is hydrated once at tray boot + (``deps.nas_remote_available`` from ``RcloneDriver.listremotes()``); a + missing attribute defaults to "available" so callers and tests that + have not wired the rclone probe (and therefore are not gating on NAS) + are not blocked. + """ + if deps is None: + return True + predicate = getattr(deps, "nas_remote_available", None) + if predicate is None: + return True + return bool(predicate(remote)) + + def require_deps(request: Request) -> Any: """Return ``app.state.dependencies`` or raise a structured 503. diff --git a/src/exlab_wizard/api/app.py b/src/exlab_wizard/api/app.py index 17eff8a..a297048 100644 --- a/src/exlab_wizard/api/app.py +++ b/src/exlab_wizard/api/app.py @@ -28,6 +28,7 @@ from collections.abc import AsyncIterator, Awaitable, Callable from contextlib import asynccontextmanager from dataclasses import dataclass, field +from pathlib import Path from typing import Any, Final from fastapi import APIRouter, FastAPI @@ -43,7 +44,7 @@ from exlab_wizard.api.routers.staging import build_staging_router from exlab_wizard.api.setup import build_setup_router from exlab_wizard.config.models import Config -from exlab_wizard.constants import AUDIT_REFRESH_SECONDS, AuditScopeKind +from exlab_wizard.constants import AUDIT_REFRESH_SECONDS, AuditScopeKind, Tier from exlab_wizard.logging import get_logger from exlab_wizard.utils.time import utc_now_iso @@ -179,15 +180,24 @@ class AppDependencies: # Setup-state inputs ------------------------------------------------ lims_reachable: bool = True keyring_password_present: bool = True + # rclone.conf NAS-sync migration. The setup gate now depends on whether + # the configured ``nas.remote`` is present in rclone.conf rather than on + # a per-equipment keyring password. ``nas_remotes`` is the raw + # ``listremotes`` snapshot (each name incl. trailing ``:``) hydrated once + # at tray boot; ``nas_remote_available`` is the derived predicate read by + # ``api/_dependencies.py::nas_remote_available``. The default predicate + # answers "always available" so headless/test apps that have not wired + # the rclone probe do not gate on NAS. + nas_remotes: tuple[str, ...] = () + nas_remote_available: Callable[[str], bool] = field(default=lambda _n: True) lims_reason: str | None = None - # Restart-required gate --------------------------------------------- - # Set True after the wizard writes config.yaml: the config-dependent - # components (controller / lims_client / nas_sync) are built once at - # tray boot, so the operator must relaunch the tray for a freshly - # written config to take effect. The NiceGUI mount helper reads this - # to route every page to the restart-required screen. - restart_required: bool = False + # State directory the tray was launched with. Stored so the live + # config-reload coordinator (``tray.dependencies.apply_live_config``) + # can build the durable NAS-sync queue under the same root when a + # fresh-install first save brings the config-dependent components to + # life without a tray relaunch. + state_dir: Path | None = None # Components -------------------------------------------------------- controller: Any = None @@ -197,8 +207,13 @@ class AppDependencies: lims_client: Any = None nas_sync: Any = None session_store: Any = None - ingest_writer: Any = None - staging_watcher: Any = None + quiescence_poller: Any = None + # Orchestrator-only ``sync_state.json`` writer + # (:class:`exlab_wizard.cache.sync_state_writer.SyncStateWriter`). The + # quiescence poller reads it; the NAS-sync client writes per-file + # verify reconciliation into it (operator-free per-file NAS sync, + # 2026-05-21). + sync_state_writer: Any = None # OS-keyring store (:class:`exlab_wizard.lims.keyring_store.KeyringStore`). # The settings dialog's credential fields write the LIMS password # straight to this at click time (Frontend Spec Β§7.3, Β§7.4.1). @@ -207,6 +222,10 @@ class AppDependencies: # Audit / pub-sub --------------------------------------------------- audit_channel: AuditChannel | None = None last_audit_at: str | None = None + # Tier counts from the latest background audit pass, read by the GUI + # Problems tab badge + right-pane summary (T6 / Β§B5). + last_audit_hard: int = 0 + last_audit_soft: int = 0 # Health snapshot probes ------------------------------------------- nas_sync_snapshot: Callable[[], dict[str, Any]] | None = None @@ -218,6 +237,14 @@ class AppDependencies: lims_probe: Callable[..., Any] | None = None equipment_probe: Callable[..., Any] | None = None autostart_toggle: Callable[[bool], Any] | None = None + # Real platform autostart-registration state, seeded at tray build so + # Settings -> Application can reflect it (T8). + autostart_is_registered: bool = False + # Graceful-shutdown hook + tray-availability flag, attached by the tray + # builder so the in-window Settings -> Application section can quit (T9) + # and show real tray status (T11). Absent in headless / server-only runs. + request_quit: Callable[[], None] | None = None + tray_available: bool = False # Background tasks -------------------------------------------------- audit_task: asyncio.Task[None] | None = field(default=None, repr=False) @@ -257,9 +284,27 @@ async def lifespan(app: FastAPI) -> AsyncIterator[None]: _audit_loop(deps, audit_interval_seconds), name="exlab-audit-loop", ) + # Operator-free per-file NAS sync (2026-05-21): the NASSyncClient + # owns the durable queue + transport worker; ``init()`` opens the + # queue DB and spawns the worker task -- ``enqueue`` itself fails + # without it. The quiescence poller is the auto-sync trigger and + # must start *after* the client it feeds. Both are ``None`` when + # no staging_root / nas-mode equipment is configured. + if deps.nas_sync is not None: + with contextlib.suppress(Exception): + await deps.nas_sync.init() + if deps.quiescence_poller is not None: + with contextlib.suppress(Exception): + await deps.quiescence_poller.start() try: yield finally: + if deps.quiescence_poller is not None: + with contextlib.suppress(asyncio.CancelledError, Exception): + await deps.quiescence_poller.stop() + if deps.nas_sync is not None: + with contextlib.suppress(asyncio.CancelledError, Exception): + await deps.nas_sync.close() if deps.audit_task is not None and not deps.audit_task.done(): deps.audit_task.cancel() with contextlib.suppress(asyncio.CancelledError, Exception): @@ -314,6 +359,16 @@ async def _audit_loop(deps: AppDependencies, interval_seconds: float) -> None: continue audit_at = utc_now_iso() deps.last_audit_at = audit_at + # Cache tier counts so the in-process GUI (Problems tab badge + + # right-pane summary) reads them straight off deps -- a single + # source, refreshed on the 30 s cadence -- without re-running a + # full O(tree) audit on every page render (T6 / Β§B5). + deps.last_audit_hard = sum( + 1 for f in findings if getattr(f, "tier", "") == Tier.HARD.value + ) + deps.last_audit_soft = sum( + 1 for f in findings if getattr(f, "tier", "") == Tier.SOFT.value + ) added, removed, changed = _diff_findings(last, findings) if deps.audit_channel is not None: if not last: diff --git a/src/exlab_wizard/api/errors.py b/src/exlab_wizard/api/errors.py index cf825bf..39f5ce8 100644 --- a/src/exlab_wizard/api/errors.py +++ b/src/exlab_wizard/api/errors.py @@ -80,6 +80,7 @@ "schema_major_mismatch", "equipment_id_invalid", "equipment_id_conflict", + "equipment_not_found", "field_too_long", "disk_space_insufficient", "plugin_host_unavailable", diff --git a/src/exlab_wizard/api/health.py b/src/exlab_wizard/api/health.py index 6a7097d..0e8864e 100644 --- a/src/exlab_wizard/api/health.py +++ b/src/exlab_wizard/api/health.py @@ -22,8 +22,8 @@ from exlab_wizard.api.setup import compute_setup_state from exlab_wizard.constants import ( CREATION_JSON_VERSION, - INGEST_JSON_VERSION, README_FIELDS_JSON_VERSION, + SYNC_STATE_JSON_VERSION, ) from exlab_wizard.logging import get_logger @@ -60,7 +60,7 @@ async def get_health(request: Request) -> HealthResponse: schema_versions={ "creation_json": CREATION_JSON_VERSION, "readme_fields_json": README_FIELDS_JSON_VERSION, - "ingest_json": INGEST_JSON_VERSION, + "sync_state_json": SYNC_STATE_JSON_VERSION, }, components=components, setup_state=setup_state_value, diff --git a/src/exlab_wizard/api/routers/browse.py b/src/exlab_wizard/api/routers/browse.py index 9ffc82c..ca35f9e 100644 --- a/src/exlab_wizard/api/routers/browse.py +++ b/src/exlab_wizard/api/routers/browse.py @@ -130,7 +130,16 @@ class TreeResponse(BaseModel): class FolderEntry(BaseModel): - """One row in the new ``GET /folder/{path}`` response. Redesign Β§4.3 / Β§5.""" + """One row in the new ``GET /folder/{path}`` response. Redesign Β§4.3 / Β§5. + + Operator-free per-file NAS sync design (2026-05-21): ``sync_status`` + is one of the five GUI display states -- ``acquiring`` / ``syncing`` / + ``synced`` / ``on_nas`` -- sourced from the run's ``sync_state.json``. + A ``tombstone`` entry (``is_dir=False``, ``size_bytes=None``, + ``modified_iso=None``) represents a file present in ``sync_state.json`` + but absent on disk -- a cleared run still lists its files as "On NAS". + ``keep_local`` carries the file's keep-local flag for the badge. + """ model_config = ConfigDict(extra="forbid") @@ -140,6 +149,8 @@ class FolderEntry(BaseModel): size_bytes: int | None = None modified_iso: str | None = None sync_status: str | None = None + keep_local: bool = False + tombstone: bool = False class FolderResponse(BaseModel): @@ -169,12 +180,12 @@ class RunDetail(BaseModel): class RunLogEntry(BaseModel): """One row in the ``GET /run/{path}/log`` response. - The orchestrator does not write per-run log files; the "log" for a - run is the state-transition history of its ``ingest.json``. Each - history entry carries at minimum ``state`` and ``at``; transient - extras (``host``, ``files_received`` on ``complete``, etc.) are - forwarded as a free-form payload so the UI can render whatever the - orchestrator recorded. + The orchestrator does not write per-run log files. After the + operator-free per-file NAS sync redesign (2026-05-21) removed + ``ingest.json``, the per-run "log" is derived from the run's + sync-queue job: each entry carries the queue ``state`` and ``at`` + timestamp, with queue extras (``attempts``, ``last_error`` ...) + forwarded as a free-form ``payload``. """ model_config = ConfigDict(extra="forbid") @@ -243,69 +254,34 @@ async def get_folder(request: Request, folder_path: str) -> FolderResponse: response_model=RunLogResponse, dependencies=[Depends(setup_state_gate)], ) - async def get_run_log(run_path: str) -> RunLogResponse: - """Return the staged run's ``ingest.json`` history as a log. + async def get_run_log(request: Request, run_path: str) -> RunLogResponse: + """Return the staged run's sync-queue job state as a log. - Redesign Β§4.6 View-log surface. The orchestrator does not write - per-run log files; the lifecycle history in - ``/.exlab-wizard/ingest.json`` IS the per-run log. Returns - 404 when ingest.json doesn't exist (the run hasn't been staged - yet or has been cleared) and 422 on a parse failure. The - ``current_state`` field mirrors the most recent history entry - so the UI can show a header before iterating. + Redesign Β§4.6 View-log surface. The operator-free per-file NAS + sync redesign (2026-05-21) removed ``ingest.json``; the per-run + log is now derived from the run's sync-queue job. Returns 404 + when the run directory does not exist (never staged, or cleared + without a surviving record). A run with no queue job yet returns + an empty ``history`` and ``current_state == "none"``. Declared above the ``GET /run/{run_path:path}`` matcher because FastAPI matches routes in declaration order and the ``:path`` converter would otherwise swallow the trailing ``/log``. """ path = Path(run_path) - from exlab_wizard.api.schemas import IngestJson as _IngestJson - from exlab_wizard.constants import INGEST_JSON_NAME as _INGEST_JSON_NAME - - ingest_path = path / CACHE_DIR_NAME / _INGEST_JSON_NAME - if not ingest_path.exists(): - # Reuse ``session_not_found`` (same allowlist as the run- - # detail endpoint at GET /run/{path}) rather than minting a - # new code; semantically the run record is missing in both - # cases (creation.json there, ingest.json here). + if not path.exists(): # noqa: ASYNC240 -- one-shot existence stat raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail={ "code": "session_not_found", - "message": f"ingest.json not found at {ingest_path}", - }, - ) - try: - payload = read_msgspec_json(ingest_path, _IngestJson) - except (msgspec.DecodeError, msgspec.ValidationError) as exc: - raise HTTPException( - status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, - detail={ - "code": "validation_failed", - "message": str(exc), + "message": f"run directory not found at {path}", }, - ) from exc - history: list[RunLogEntry] = [] - for raw in payload.history: - state = str(raw.get("state", "")) if isinstance(raw, dict) else "" - if not state: - continue - extras = ( - {k: v for k, v in raw.items() if k not in {"state", "at", "host"}} - if isinstance(raw, dict) - else {} - ) - history.append( - RunLogEntry( - state=state, - at=raw.get("at") if isinstance(raw, dict) else None, - host=raw.get("host") if isinstance(raw, dict) else None, - payload=extras, - ) ) + deps = require_deps(request) + history, current_state = await _run_log_from_queue(deps, path) return RunLogResponse( path=str(path), - current_state=str(payload.current_state) if payload.current_state else None, + current_state=current_state, history=history, ) @@ -362,6 +338,40 @@ async def get_run(run_path: str) -> RunDetail: # --------------------------------------------------------------------------- +async def _run_log_from_queue(deps: Any, run_path: Path) -> tuple[list[RunLogEntry], str | None]: + """Derive a run's per-run log from its sync-queue job. + + Returns ``(history, current_state)``. The operator-free per-file NAS + sync redesign (2026-05-21) removed the ``ingest.json`` history; the + sync queue is the run-status source this phase. A run with no job + yields an empty history and ``current_state == "none"``. + """ + nas_sync = getattr(deps, "nas_sync", None) + getter = getattr(nas_sync, "get_by_run_path", None) if nas_sync is not None else None + if getter is None: + return [], "none" + try: + row = await getter(run_path) + except Exception as exc: # pragma: no cover -- defensive + _log.warning("sync-queue lookup failed for %s: %s", run_path, exc) + return [], "none" + if row is None: + return [], "none" + state = getattr(getattr(row, "state", None), "value", None) or "none" + extras: dict[str, Any] = {} + for field in ("attempts", "verify_passes", "last_error", "nas_path"): + value = getattr(row, field, None) + if value: + extras[field] = value + entry = RunLogEntry( + state=state, + at=getattr(row, "verified_at", None) or getattr(row, "enqueued_at", None) or None, + host=None, + payload=extras, + ) + return [entry], state + + def _path_is_under_allowed_root(path: Path, config: Any) -> bool: """Return True if ``path`` is under any of the configured roots. @@ -471,33 +481,30 @@ def _relay_label_from_first_run(equipment_dir: Path, fallback: str) -> str: return fallback -def _per_file_sync_status(path: Path) -> str | None: - """Return per-file sync status for a folder-list row. - - Redesign Β§5 last bullet: - - For files under owned ``nas`` equipment: derived from the run's - ``creation.json`` ``sync_status`` (pending β†’ synced β†’ verified). - - For files under owned ``stage`` equipment: tops out at ``relayed``. - - For files under received equipment: derived from ``ingest.json`` - lifecycle state. - - Implemented conservatively: walks up to find the nearest - ``creation.json`` (run cache) and returns its ``sync_status`` if - present. Receives a ``None`` when nothing applies. +# Per-file GUI display states (operator-free per-file NAS sync design, +# 2026-05-21). The five-state table in the spec maps a file's +# sync_state.json record + on-disk presence to one of these. The UI's +# ``sync_status_props`` renders an icon for each. +FILE_STATE_ACQUIRING = "acquiring" +FILE_STATE_SYNCING = "syncing" +FILE_STATE_SYNCED = "synced" +FILE_STATE_ON_NAS = "on_nas" + + +def _find_run_root(folder: Path) -> Path | None: + """Walk up from ``folder`` to the nearest run directory, or ``None``. + + A run directory is identified by the presence of a + ``.exlab-wizard/creation.json`` cache. The bound (10) tolerates + typical instrument output tree depths without becoming pathological + for misrooted paths. """ - if path.is_dir(): - return None - # Walk up to find a Run_*/.exlab-wizard/creation.json. The bound (10) - # tolerates typical instrument output tree depths (Run/data/raw/ - # series/frames/...) without becoming pathological for misrooted paths. - current = path.parent + current = folder for _ in range(10): try: - cache_path = creation_json_path(current) - if cache_path.exists(): - payload = read_msgspec_json(cache_path, CreationJson) - return payload.sync_status - except (msgspec.DecodeError, msgspec.ValidationError, OSError): + if creation_json_path(current).exists(): + return current + except OSError: return None if current.parent == current: break @@ -505,6 +512,70 @@ def _per_file_sync_status(path: Path) -> str | None: return None +def _read_sync_state(run_root: Path) -> Any: + """Read a run's ``sync_state.json`` via :class:`SyncStateWriter`. + + Returns the decoded :class:`SyncStateJson` (an empty state when the + file is absent), or ``None`` on a decode/IO failure so callers can + fall back to a no-status row. + """ + from exlab_wizard.cache.sync_state_writer import SyncStateWriter + + try: + return SyncStateWriter().read_sync(run_root) + except Exception as exc: # pragma: no cover -- defensive + _log.warning("sync_state.json read failed for %s: %s", run_root, exc) + return None + + +def _file_state_from_record(record: Any | None, *, on_disk: bool) -> str | None: + """Map a ``sync_state.json`` record + on-disk presence to a GUI state. + + The five-state table (operator-free per-file NAS sync design, + 2026-05-21): + + * not recorded + on disk -> ``acquiring`` + * recorded, unverified + disk -> ``syncing`` + * recorded, verified + on disk -> ``synced`` + * recorded, verified + absent -> ``on_nas`` (tombstone) + """ + if record is None: + return FILE_STATE_ACQUIRING if on_disk else None + verified = getattr(record, "verified_at", None) is not None + if on_disk: + return FILE_STATE_SYNCED if verified else FILE_STATE_SYNCING + return FILE_STATE_ON_NAS if verified else None + + +def _per_file_sync_status(path: Path) -> str | None: + """Return the per-file GUI sync state for a folder-list row. + + Operator-free per-file NAS sync design (2026-05-21): per-file status + is sourced from the run's ``sync_state.json`` rather than the + ``creation.json`` ``sync_status`` field. Returns ``None`` for + directories or for files outside any run. + """ + if path.is_dir(): + return None + run_root = _find_run_root(path.parent) + if run_root is None: + return None + state = _read_sync_state(run_root) + if state is None: + return None + rel = _run_relative_posix(run_root, path) + record = state.files.get(rel) if rel is not None else None + return _file_state_from_record(record, on_disk=True) + + +def _run_relative_posix(run_root: Path, path: Path) -> str | None: + """Return ``path`` relative to ``run_root`` as a POSIX string, or ``None``.""" + try: + return path.relative_to(run_root).as_posix() + except ValueError: + return None + + def _iter_run_or_project_subdirs(parent: Path) -> list[os.DirEntry[str]]: """Return name-sorted real subdirectories of ``parent``, sans the cache. @@ -579,15 +650,19 @@ def _scan_run_children( def _build_run_node(run_dir: Path, *, kind: str) -> RunNode: + """Build a tree run node, deriving its rollup from ``sync_state.json``. + + Operator-free per-file NAS sync design (2026-05-21): the run-node + rollup (``syncing`` / ``synced`` / ``cleared``) is derived from the + run's ``sync_state.json`` via :meth:`SyncStateWriter.rollup_state`, + not the ``creation.json`` ``sync_status`` field. The rollup is + ``None`` only when the run has no ``creation.json`` at all. + """ cache_path = creation_json_path(run_dir) - sync_status: str | None = None has_cache = cache_path.exists() + sync_status: str | None = None if has_cache: - try: - payload = read_msgspec_json(cache_path, CreationJson) - sync_status = payload.sync_status - except (msgspec.DecodeError, msgspec.ValidationError): - sync_status = None + sync_status = _run_rollup_status(run_dir) return RunNode( name=run_dir.name, path=str(run_dir), @@ -597,6 +672,22 @@ def _build_run_node(run_dir: Path, *, kind: str) -> RunNode: ) +def _run_rollup_status(run_dir: Path) -> str | None: + """Return a run's derived ``RunSyncState`` rollup value, or ``None``. + + Reads ``sync_state.json`` and applies the pure + :meth:`SyncStateWriter.rollup_state` derivation. + """ + from exlab_wizard.cache.sync_state_writer import SyncStateWriter + + try: + state = SyncStateWriter().read_sync(run_dir) + except Exception as exc: # pragma: no cover -- defensive + _log.warning("sync_state.json rollup read failed for %s: %s", run_dir, exc) + return None + return SyncStateWriter.rollup_state(state).value + + # --------------------------------------------------------------------------- # Run-detail helpers # --------------------------------------------------------------------------- @@ -676,12 +767,24 @@ def scan_folder_sync(folder_path: str, config: Any) -> FolderResponse: "message": f"cannot list {path}: {exc}", }, ) from exc + # Source per-file status from the run's sync_state.json once for the + # whole folder (operator-free per-file NAS sync design, 2026-05-21). + run_root = _find_run_root(path) + sync_state = _read_sync_state(run_root) if run_root is not None else None + on_disk_rel: set[str] = set() for entry in sorted(scandir_entries, key=lambda e: e.name): try: is_dir = entry.is_dir(follow_symlinks=False) stat = entry.stat(follow_symlinks=False) except OSError: continue + rel: str | None = None + record: Any | None = None + if sync_state is not None and run_root is not None and not is_dir: + rel = _run_relative_posix(run_root, Path(entry.path)) + if rel is not None: + on_disk_rel.add(rel) + record = sync_state.files.get(rel) entries.append( FolderEntry( name=entry.name, @@ -689,12 +792,64 @@ def scan_folder_sync(folder_path: str, config: Any) -> FolderResponse: is_dir=is_dir, size_bytes=None if is_dir else stat.st_size, modified_iso=dt_to_iso(datetime.fromtimestamp(stat.st_mtime, tz=UTC)), - sync_status=_per_file_sync_status(Path(entry.path)), + sync_status=(None if is_dir else _file_state_from_record(record, on_disk=True)), + keep_local=bool(getattr(record, "keep_local", False)), ) ) + # Tombstones: files recorded in sync_state.json but absent on disk + # (a cleared run still lists its files as "On NAS"). Emitted only for + # records that resolve to this folder (the rel-path's parent matches). + if sync_state is not None and run_root is not None: + entries.extend(_tombstone_entries(run_root, path, sync_state, on_disk_rel)) + entries.sort(key=lambda e: e.name) return FolderResponse(path=str(path), entries=entries) +def _tombstone_entries( + run_root: Path, + folder: Path, + sync_state: Any, + on_disk_rel: set[str], +) -> list[FolderEntry]: + """Build "On NAS" tombstone rows for cleared-run files absent on disk. + + Operator-free per-file NAS sync design (2026-05-21): ``sync_state.json`` + survives cleanup, so a cleared run still expands to show every file as + an "On NAS" tombstone. Only records whose run-relative path resolves to + a file *directly inside* ``folder`` and that is not already on disk are + emitted. + """ + out: list[FolderEntry] = [] + for rel, record in sync_state.files.items(): + if rel in on_disk_rel: + continue + abs_path = run_root / rel + # Only keys resolving to a file directly inside ``folder`` are + # emitted. This intentionally drops any non-normalized + # sync_state.json key (a ``..`` segment or an absolute path): + # such a key's joined path won't have ``folder`` as its parent, + # so it is silently skipped. Safe -- no file is ever opened here. + if abs_path.parent != folder: + continue + state = _file_state_from_record(record, on_disk=False) + if state is None: + # An unverified, absent record is not a meaningful tombstone. + continue + out.append( + FolderEntry( + name=abs_path.name, + path=str(abs_path), + is_dir=False, + size_bytes=None, + modified_iso=None, + sync_status=state, + keep_local=bool(getattr(record, "keep_local", False)), + tombstone=True, + ) + ) + return out + + def build_hierarchy_dict(config: Any) -> dict[Any, dict[Any, list[Any]]]: """Compose the nested hierarchy dict that ``ui.components.tree.build_tree`` expects. diff --git a/src/exlab_wizard/api/routers/config.py b/src/exlab_wizard/api/routers/config.py index 91d570c..5f6400a 100644 --- a/src/exlab_wizard/api/routers/config.py +++ b/src/exlab_wizard/api/routers/config.py @@ -19,9 +19,14 @@ from fastapi import APIRouter, HTTPException, Request, status from pydantic import BaseModel, ConfigDict -from exlab_wizard.api._dependencies import require_deps -from exlab_wizard.config.models import Config, EquipmentConfig +from exlab_wizard.api._dependencies import ( + lims_password_present, + nas_remote_available, + require_deps, +) +from exlab_wizard.config.models import Config, EquipmentConfig, config_with_equipment_appended from exlab_wizard.constants import SetupState +from exlab_wizard.errors import ConfigError from exlab_wizard.logging import get_logger from exlab_wizard.paths import ( evaluate_setup_state, @@ -89,12 +94,17 @@ async def put_config(request: Request, body: Config) -> ConfigUpdateResponse: saver = getattr(deps, "save_config", None) if saver is not None: await _await_or_call(saver, body) - deps.config = body + # Push the new config into the running components (logging, sync, + # equipment, validator, LIMS, plugins) so the change takes effect + # in-process -- no tray relaunch. Sets ``deps.config`` itself. + _apply_live_config(deps, body) # Re-evaluate setup state with the new config. + remote_lookup = lambda remote: nas_remote_available(deps, remote) # noqa: E731 state = evaluate_setup_state( deps.config, lims_reachable=getattr(deps, "lims_reachable", True), - keyring_password_present=getattr(deps, "keyring_password_present", True), + keyring_password_present=lims_password_present(deps), + nas_remote_available=remote_lookup, ) return ConfigUpdateResponse( state=state.value, @@ -114,29 +124,25 @@ async def append_equipment(request: Request, body: EquipmentConfig) -> Equipment Duplicate IDs are rejected with a structured error per Β§10. """ deps = require_deps(request) - config = getattr(deps, "config", None) or Config() - for entry in config.equipment: - if entry.id == body.id: - raise HTTPException( - status_code=status.HTTP_409_CONFLICT, - detail={ - "code": "equipment_id_conflict", - "message": (f"equipment id {body.id!r} already exists in config"), - }, - ) - new_equipment = [*config.equipment, body] - # model_validate re-runs the cross-field invariants (unique-id check - # etc.) on the merged config. - new_config = config.model_copy(update={"equipment": new_equipment}) - Config.model_validate(new_config.model_dump(mode="python")) + try: + new_config = config_with_equipment_appended(getattr(deps, "config", None), body) + except ConfigError as exc: + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, + detail={"code": "equipment_id_conflict", "message": str(exc)}, + ) from exc saver = getattr(deps, "save_config", None) if saver is not None: await _await_or_call(saver, new_config) - deps.config = new_config + # Push into the running components so the new equipment is live + # without a tray relaunch. Sets ``deps.config`` itself. + _apply_live_config(deps, new_config) + remote_lookup = lambda remote: nas_remote_available(deps, remote) # noqa: E731 state = evaluate_setup_state( deps.config, lims_reachable=getattr(deps, "lims_reachable", True), - keyring_password_present=getattr(deps, "keyring_password_present", True), + keyring_password_present=lims_password_present(deps), + nas_remote_available=remote_lookup, ) return EquipmentAppendResponse( appended_id=body.id, @@ -160,3 +166,20 @@ async def _await_or_call(callable_: Any, *args: Any) -> Any: if inspect.isawaitable(result): return await result return result + + +def _apply_live_config(deps: Any, cfg: Any) -> None: + """Push ``cfg`` into the running components, then keep it as the live config. + + Imported lazily to avoid the ``tray.dependencies -> api.app -> + api.routers.config`` import cycle. ``apply_live_config`` is best-effort + per component and assigns ``deps.config`` itself; the fallback covers + the unexpected case where the import or coordinator raises wholesale. + """ + try: + from exlab_wizard.tray.dependencies import apply_live_config + + apply_live_config(deps, cfg) + except Exception: + _log.exception("live config reload failed") + deps.config = cfg diff --git a/src/exlab_wizard/api/routers/operations.py b/src/exlab_wizard/api/routers/operations.py index 8d38445..28a13db 100644 --- a/src/exlab_wizard/api/routers/operations.py +++ b/src/exlab_wizard/api/routers/operations.py @@ -21,7 +21,13 @@ from exlab_wizard.api._dependencies import require_controller from exlab_wizard.api.setup import setup_state_gate -from exlab_wizard.controller import SessionState + +# Import from the submodules (not the ``exlab_wizard.controller`` package) +# to avoid a circular import: ``api.app`` pulls in this router while the +# controller package's ``__init__`` is still initializing, so reading +# attributes off the partially-built package would fail. +from exlab_wizard.controller.session_store import on_operations_panel, project_identifier +from exlab_wizard.controller.state_machine import SessionState from exlab_wizard.utils.time import dt_to_iso __all__ = ["OperationEntry", "OperationsResponse", "build_operations_router"] @@ -63,14 +69,11 @@ async def list_operations(request: Request) -> OperationsResponse: controller = require_controller(request) sessions = controller.session_store operations: list[OperationEntry] = [] - # SessionStore exposes a private ``_sessions`` dict; iterate - # explicitly rather than reaching into the dict so the public - # surface stays narrow. - for sid, session in _iter_sessions(sessions): - if session.state in (SessionState.DONE, SessionState.ABORTED): - # Terminal-success and explicit-cancel rows fall off - # the panel; FAILED rows stay so the operator can see - # the recent failure. + for sid, session in sessions.iter_sorted(): + # Terminal-success and explicit-cancel rows fall off the panel; + # FAILED rows stay so the operator can see the recent failure + # (Frontend Β§9.5 -- the shared membership rule). + if not on_operations_panel(session): continue operations.append(_session_to_entry(sid, session)) return OperationsResponse(operations=operations) @@ -83,23 +86,6 @@ async def list_operations(request: Request) -> OperationsResponse: # --------------------------------------------------------------------------- -def _iter_sessions(store: Any) -> list[tuple[str, Any]]: - """Return ``(session_id, session)`` pairs from the store. - - The :class:`SessionStore` keeps its dict private; we use the - documented contract that ``store._sessions`` is a ``dict``. A - public accessor would be cleaner; until that lands the shim here - is the single touchpoint. - """ - sessions = getattr(store, "_sessions", {}) - if not isinstance(sessions, dict): - return [] - return sorted( - sessions.items(), - key=lambda pair: getattr(pair[1], "created_at", None) or 0, - ) - - def _session_to_entry(session_id: str, session: Any) -> OperationEntry: request = session.request plugin_name: str | None = None @@ -114,28 +100,8 @@ def _session_to_entry(session_id: str, session: Any) -> OperationEntry: else str(session.state), started_at=dt_to_iso(session.created_at) if session.created_at is not None else "", equipment_id=getattr(request, "equipment_id", None), - project_short_id=_project_short_id(request), + project_short_id=project_identifier(request), run_label=getattr(request, "label", None), plugin_name=plugin_name, suspended_reason=suspended_reason, ) - - -def _project_short_id(request: Any) -> str | None: - """Pluck a project identifier off a project / run request. - - A project request carries the LIMS ``short_id`` in its - ``lims_project`` block; a run request carries only the parent - project's folder name (the human-readable LIMS name, Backend Spec - Β§3.2), so that name is used as the operations-panel identifier. - """ - short = getattr(request, "project_short_id", None) - if short: - return short - lims_project = getattr(request, "lims_project", None) - if isinstance(lims_project, dict): - value = lims_project.get("short_id") - if isinstance(value, str) and value: - return value - project_name = getattr(request, "project_name", None) - return project_name if isinstance(project_name, str) and project_name else None diff --git a/src/exlab_wizard/api/routers/staging.py b/src/exlab_wizard/api/routers/staging.py index e38d046..5160549 100644 --- a/src/exlab_wizard/api/routers/staging.py +++ b/src/exlab_wizard/api/routers/staging.py @@ -27,21 +27,22 @@ from pydantic import BaseModel, ConfigDict from exlab_wizard.api._dependencies import require_deps -from exlab_wizard.cache.ingest_writer import IngestWriter from exlab_wizard.config.models import Config -from exlab_wizard.constants import IngestState, SyncHandleState +from exlab_wizard.constants import RunSyncState, SyncHandleState from exlab_wizard.logging import get_logger +from exlab_wizard.orchestrator.staging_clear import clear_run_dir from exlab_wizard.orchestrator.staging_query import ( StagedRunSummary, list_staged_runs, ) -from exlab_wizard.paths import ingest_json_path from exlab_wizard.utils.time import utc_now __all__ = [ "ClearResponse", "ClearVerifiedResponse", "ForceSyncResponse", + "KeepLocalRequest", + "KeepLocalResponse", "StagedRunRow", "StagingListResponse", "build_staging_router", @@ -107,6 +108,31 @@ class ClearVerifiedResponse(BaseModel): cleared_paths: list[str] +class KeepLocalRequest(BaseModel): + """``POST /staging/{run_path}/keep-local`` request body. + + Operator-free per-file NAS sync design (2026-05-21): the operator + toggles a file's ``keep_local`` flag from the file-list context menu. + ``relative_path`` is the run-relative POSIX path of the file within + the run directory; ``keep_local`` is the desired flag value. + """ + + model_config = ConfigDict(extra="forbid") + + relative_path: str + keep_local: bool + + +class KeepLocalResponse(BaseModel): + """``POST /staging/{run_path}/keep-local`` response.""" + + model_config = ConfigDict(extra="forbid") + + run_path: str + relative_path: str + keep_local: bool + + # --------------------------------------------------------------------------- # Router builder # --------------------------------------------------------------------------- @@ -120,7 +146,11 @@ def build_staging_router() -> APIRouter: async def get_staging(request: Request) -> StagingListResponse: deps = require_deps(request) config = _require_config(deps) - rows = list_staged_runs(config=config, now_utc=utc_now()) + rows = list_staged_runs( + config=config, + now_utc=utc_now(), + sync_state_writer=getattr(deps, "sync_state_writer", None), + ) return StagingListResponse(runs=[_row_from_summary(s) for s in rows]) @router.post( @@ -128,29 +158,92 @@ async def get_staging(request: Request) -> StagingListResponse: response_model=ClearVerifiedResponse, ) async def post_clear_verified(request: Request) -> ClearVerifiedResponse: - """Bulk-clear every staged run in ``sync_verified`` state. + """Bulk-clear every staged run whose NAS sync is verified. Redesign Β§4.6: the file-explorer footer's "Clear verified runs" - action. Routes through the same - :func:`exlab_wizard.orchestrator.cleanup.clear_run` primitive - as the per-run endpoint, so failure modes (missing dirs, ingest - write errors) behave identically. Returns the list of cleared - run paths so the UI can report a count. + action. Phase 5 keys "clearable" off the ``sync_state.json`` + ``SYNCED`` rollup -- a run is clearable when every tracked file is + verified on the NAS and the run has not already been cleared. """ deps = require_deps(request) config = _require_config(deps) - ingest_writer = _require_ingest_writer(deps) - # Deferred import: see the per-run /clear endpoint below for the - # cycle-avoidance rationale. - from exlab_wizard.orchestrator.cleanup import clear_all_verified - - cleared = await clear_all_verified( + cleared: list[str] = [] + for summary in list_staged_runs( config=config, - ingest_writer=ingest_writer, - ) + sync_state_writer=getattr(deps, "sync_state_writer", None), + ): + # Only a fully-SYNCED run is clearable; ``cleared`` runs have + # no staging copy left and ``syncing`` runs are unproven. + if summary.current_state != RunSyncState.SYNCED.value: + continue + run_path = Path(summary.path) + try: + files, _bytes = clear_run_dir(run_path) + except Exception as exc: + _log.warning("clear-verified: clear failed for %s: %s", run_path, exc) + continue + if files > 0: + cleared.append(str(run_path)) _log.info("clear-verified bulk action: cleared=%d", len(cleared)) return ClearVerifiedResponse(cleared_paths=cleared) + @router.post( + "/staging/{run_path:path}/keep-local", + response_model=KeepLocalResponse, + ) + async def post_keep_local( + request: Request, + run_path: str, + body: KeepLocalRequest, + ) -> KeepLocalResponse: + """Toggle a file's ``keep_local`` flag in the run's ``sync_state.json``. + + Operator-free per-file NAS sync design (2026-05-21): a + ``keep_local`` file still syncs to the NAS but is excluded from + cleanup deletion. ``sync_state.json`` has a single writer -- the + orchestrator's :class:`SyncStateWriter` -- so the GUI never writes + the file directly; it calls this endpoint instead. Returns 503 + when no ``SyncStateWriter`` is wired on the app instance, and 404 + when ``run_path`` is not a real run inside an allowed root. + """ + deps = require_deps(request) + config = _require_config(deps) + writer = getattr(deps, "sync_state_writer", None) + if writer is None: + raise HTTPException( + status_code=status.HTTP_503_SERVICE_UNAVAILABLE, + detail={ + "code": "sync_state_writer_unavailable", + "message": "sync-state writer is not wired on this app instance", + }, + ) + # Path-containment guard: ``run_path`` comes straight from the URL + # and ``SyncStateWriter`` *creates* ``/.exlab-wizard/ + # sync_state.json``. Reject any path that is not a real run -- it + # must sit under an allowed root and carry a ``creation.json`` + # cache -- so a hostile path (``%2Fetc``) cannot provoke a write. + path = Path(run_path) + if not _is_real_run(path, config): + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail={ + "code": "session_not_found", + "message": f"no run found at {run_path}", + }, + ) + await writer.set_keep_local(path, body.relative_path, body.keep_local) + _log.info( + "keep-local toggled via API: run=%s file=%s value=%s", + run_path, + body.relative_path, + body.keep_local, + ) + return KeepLocalResponse( + run_path=run_path, + relative_path=body.relative_path, + keep_local=body.keep_local, + ) + @router.post( "/staging/{run_path:path}/force-sync", response_model=ForceSyncResponse, @@ -183,40 +276,28 @@ async def post_force_sync(request: Request, run_path: str) -> ForceSyncResponse: async def post_clear(request: Request, run_path: str) -> ClearResponse: deps = require_deps(request) config = _require_config(deps) - ingest_writer = _require_ingest_writer(deps) path = Path(run_path) - # Defensive check: the spec only allows clearing sync-verified - # runs (manual mode). The watcher would never call this on - # earlier states, but the API is operator-facing so we enforce - # the rule here too. - ingest_path = ingest_json_path(path) - if ingest_path.exists(): - try: - payload = await ingest_writer.read_ingest(ingest_path) - except Exception: - payload = None - if payload is not None and payload.current_state != IngestState.SYNC_VERIFIED: + # Defensive check: only a fully-SYNCED run may be cleared. Phase 5 + # derives the run rollup from ``sync_state.json``; a ``syncing`` run + # is unproven and a ``cleared`` run has no staging copy left. + from exlab_wizard.cache.sync_state_writer import SyncStateWriter + + writer = getattr(deps, "sync_state_writer", None) + if writer is not None: + state = SyncStateWriter.rollup_state(writer.read_sync(path)).value + if state != RunSyncState.SYNCED.value: raise HTTPException( status_code=status.HTTP_409_CONFLICT, detail={ "code": "staging_not_sync_verified", "message": ( - f"Cannot clear run in state {payload.current_state!r}; " - "only sync_verified runs may be cleared." + f"Cannot clear run in sync state {state!r}; " + "only synced runs may be cleared." ), }, ) - # Deferred import: ``orchestrator.cleanup`` pulls in - # ``api.schemas`` -> ``api`` package, so a module-level import - # here creates an ``api.routers.staging`` <-> ``orchestrator`` - # cycle whenever ``orchestrator`` is imported before ``api``. - from exlab_wizard.orchestrator.cleanup import clear_run - - files_freed, bytes_freed = await clear_run( - path, - config=config, - ingest_writer=ingest_writer, - ) + _ = config # kept for parity / future hooks + files_freed, bytes_freed = clear_run_dir(path) return ClearResponse( run_path=run_path, files_freed=files_freed, @@ -245,6 +326,29 @@ def _row_from_summary(summary: StagedRunSummary) -> StagedRunRow: ) +def _is_real_run(run_path: Path, config: Config) -> bool: + """Return True when ``run_path`` is a real run inside an allowed root. + + A "real run" is a directory that (a) sits under one of the configured + roots (local_root / staging_root / templates / plugins) -- reusing the + same containment helper the ``GET /folder`` endpoint uses -- and (b) + carries a ``.exlab-wizard/creation.json`` cache. The containment check + guards against a hostile URL path; the ``creation.json`` check ensures + ``SyncStateWriter`` only ever creates ``sync_state.json`` under a + genuine run directory. + """ + from exlab_wizard.api.routers.browse import _path_is_under_allowed_root + from exlab_wizard.paths import creation_json_path + + try: + resolved = run_path.resolve() + except OSError: + return False + if not _path_is_under_allowed_root(resolved, config): + return False + return creation_json_path(run_path).exists() + + def _require_config(deps: Any) -> Config: """Return the live :class:`Config` or raise 503 when no config is wired. @@ -274,12 +378,3 @@ def _require_nas_sync(deps: Any) -> Any: }, ) return nas_sync - - -def _require_ingest_writer(deps: Any) -> IngestWriter: - writer = getattr(deps, "ingest_writer", None) - if writer is None: - # Fall back to a freshly constructed writer; the IngestWriter is - # stateless across calls (one FileLock per ingest path). - return IngestWriter() - return writer diff --git a/src/exlab_wizard/api/schemas.py b/src/exlab_wizard/api/schemas.py index be3879d..df1c0c7 100644 --- a/src/exlab_wizard/api/schemas.py +++ b/src/exlab_wizard/api/schemas.py @@ -42,12 +42,10 @@ from msgspec import json as msgspec_json from msgspec import structs as msgspec_structs +from exlab_wizard.cache.sync_state_schema import FileSyncRecord, SyncStateJson from exlab_wizard.constants import ( - CompletenessSignal, CreationLevel, - IngestState, LIMSProjectSource, - OrchestratorTransportType, PluginStatus, RunKind, RunScope, @@ -57,7 +55,7 @@ __all__ = [ "CreationJson", "EquipmentJson", - "IngestJson", + "FileSyncRecord", "LimsProjectBlock", "OrchestratorBlock", "OverrideEntry", @@ -65,6 +63,7 @@ "PluginApplied", "PluginIsolation", "ReadmeFieldsJson", + "SyncStateJson", "TemplateBlock", "TestRunsJson", "TombstoneEntry", @@ -169,21 +168,18 @@ class OrchestratorBlock( role and the orchestrator block always carries the producing device's identity. - The ``equipment_label`` / ``completeness_signal`` / - ``sentinel_filename`` / ``manifest_filename`` fields travel with the - push so the receiving orchestrator can auto-discover received - equipment (Redesign Spec Β§3.3) without a per-equipment registry of - its own. They are optional for forward-compat with creation.json - files written by earlier writers. + The ``equipment_label`` field travels with the push so the receiving + orchestrator can auto-discover received equipment (Redesign Spec Β§3.3) + without a per-equipment registry of its own. It is optional for + forward-compat with creation.json files written by earlier writers. + The former completeness-signal relay fields were removed by the + operator-free quiescence-sync redesign (2026-05-21). """ enabled: bool host: str label: str equipment_label: str | None = None - completeness_signal: CompletenessSignal | None = None - sentinel_filename: str | None = None - manifest_filename: str | None = None # --------------------------------------------------------------------------- @@ -371,33 +367,14 @@ class TestRunsJson( # --------------------------------------------------------------------------- -# ingest.json (Β§13.4) -- orchestrator-only staging lifecycle record +# sync_state.json -- per-run, per-file quiescence-driven sync state +# (operator-free per-file NAS sync design, 2026-05-21). +# +# The ``SyncStateJson`` / ``FileSyncRecord`` structs are defined in the +# dependency-free ``exlab_wizard.cache.sync_state_schema`` module so the +# ``cache`` / ``sync`` / ``orchestrator`` packages can import them (and the +# ``SyncStateWriter``) at module scope without forming a circular import +# back through the ``api`` package. They are re-exported here so the +# "single source of truth for cache schemas" surface stays intact for API +# callers. # --------------------------------------------------------------------------- - - -class IngestJson( - Struct, - omit_defaults=True, - forbid_unknown_fields=False, -): - """``ingest.json`` orchestrator staging record at schema version 1.1. Spec Β§13.4. - - Written by the orchestrator only (not by equipment workstations). The - ``history`` list is append-only per Β§13: lifecycle transitions are - recorded, never overwritten. ``current_state`` mirrors the most recent - history entry's ``state`` for fast read-without-walk access. - - History entries are loose dicts because the optional fields per state - (``files_received`` / ``bytes_received`` on ``complete``; ``nas_path`` / - ``checksum_file`` on ``sync_verified``) make a strict type a nuisance. - The state-machine validation is performed by the writer. - """ - - schema_version: str - project_name: str - equipment_id: str - run_kind: RunKind - run_path: str - transport: OrchestratorTransportType - current_state: IngestState - history: list[dict[str, Any]] = [] diff --git a/src/exlab_wizard/api/setup.py b/src/exlab_wizard/api/setup.py index d0e962b..dec0484 100644 --- a/src/exlab_wizard/api/setup.py +++ b/src/exlab_wizard/api/setup.py @@ -28,10 +28,13 @@ from fastapi import APIRouter, HTTPException, Request, status from pydantic import BaseModel, ConfigDict, Field -from exlab_wizard.api._dependencies import require_deps +from exlab_wizard.api._dependencies import ( + lims_password_present, + nas_remote_available, + require_deps, +) from exlab_wizard.config.models import ( EquipmentConfig, - EquipmentTransport, LIMSConfig, ) from exlab_wizard.constants import SetupState @@ -93,12 +96,19 @@ class LIMSTestRequest(BaseModel): class EquipmentTestRequest(BaseModel): - """``POST /setup/test-equipment`` request body.""" + """``POST /setup/test-equipment`` request body. + + Rclone-only NAS sync migration (2026-05-26). The pre-save + body-equipment path was removed: the probe needs the keyring + password, which is looked up by equipment id, and a candidate + equipment that hasn't been saved yet cannot have a keyring entry + by definition. Callers must therefore reference an already-saved + equipment by id. + """ model_config = ConfigDict(extra="forbid") - equipment: EquipmentConfig | None = None - equipment_id: str | None = None + equipment_id: str class ProbeResult(BaseModel): @@ -144,14 +154,17 @@ class AutostartResult(BaseModel): def compute_setup_state(deps: Any) -> SetupState: """Evaluate the Β§4.9.1 state for the app's current dependencies. - The dependency object exposes ``config`` and a - ``lims_reachable`` boolean (cached at startup; the - ``POST /setup/test-lims`` endpoint refreshes it). + The dependency object exposes ``config``, a ``lims_reachable`` + boolean (cached at startup; the ``POST /setup/test-lims`` endpoint + refreshes it), and (rclone.conf NAS-sync migration) a + ``nas_remote_available`` predicate that answers whether a named + rclone remote is present in rclone.conf. """ return evaluate_setup_state( deps.config, lims_reachable=getattr(deps, "lims_reachable", True), - keyring_password_present=getattr(deps, "keyring_password_present", True), + keyring_password_present=lims_password_present(deps), + nas_remote_available=lambda remote: nas_remote_available(deps, remote), ) @@ -235,9 +248,7 @@ async def test_lims(request: Request, body: TestLIMSRequest | None = None) -> Te return TestResult(ok=bool(result)) @router.post("/test-equipment", response_model=TestResult) - async def test_equipment( - request: Request, body: TestEquipmentRequest | None = None - ) -> TestResult: + async def test_equipment(request: Request, body: TestEquipmentRequest) -> TestResult: deps = require_deps(request) probe = getattr(deps, "equipment_probe", None) if probe is None: @@ -247,7 +258,13 @@ async def test_equipment( ) equipment = _resolve_equipment(deps, body) if equipment is None: - return TestResult(ok=False, reason="no matching equipment configuration") + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail={ + "code": "equipment_not_found", + "message": f"no equipment with id {body.equipment_id!r}", + }, + ) try: result = await _await_or_call(probe, equipment) except Exception as exc: @@ -298,25 +315,23 @@ def _coerce_probe_dict(payload: dict[str, Any]) -> ProbeResult: ) -def _resolve_equipment(deps: Any, body: TestEquipmentRequest | None) -> EquipmentConfig | None: - """Pick the equipment to probe. +def _resolve_equipment(deps: Any, body: TestEquipmentRequest) -> EquipmentConfig | None: + """Resolve the equipment to probe by id through ``deps.config``. - ``body.equipment`` wins when supplied (Settings UI's pre-save - "Test connection" affordance). Otherwise ``body.equipment_id`` - resolves through the loaded config. Otherwise the first configured - equipment is used so the endpoint is callable with an empty body. + Rclone-only NAS sync migration (2026-05-26). The endpoint requires + ``equipment_id`` -- the probe needs the keyring password, which is + keyed by equipment id, so a body-equipment candidate that has not + been saved yet cannot satisfy the probe. Returns ``None`` when the + config is unloaded, the equipment list is empty, or the id does + not match a registered entry. """ - if body is not None and body.equipment is not None: - return body.equipment config = getattr(deps, "config", None) if config is None or not getattr(config, "equipment", None): return None - if body is not None and body.equipment_id: - for entry in config.equipment: - if entry.id == body.equipment_id: - return entry - return None - return config.equipment[0] + for entry in config.equipment: + if entry.id == body.equipment_id: + return entry + return None async def _await_or_call(callable_: Callable[..., Any], *args: Any) -> Any: @@ -330,8 +345,3 @@ async def _await_or_call(callable_: Callable[..., Any], *args: Any) -> Any: if inspect.isawaitable(result): return await result return result - - -# Internal types kept here so the router declaration above type-checks -# without requiring the caller to import EquipmentTransport directly. -__all_internal__ = (EquipmentTransport,) diff --git a/src/exlab_wizard/cache/ingest_writer.py b/src/exlab_wizard/cache/ingest_writer.py deleted file mode 100644 index 904232b..0000000 --- a/src/exlab_wizard/cache/ingest_writer.py +++ /dev/null @@ -1,206 +0,0 @@ -"""Orchestrator-only writer for ``ingest.json``. Backend Spec Β§13.4, Β§4.4.5. - -The orchestrator writes one ``ingest.json`` per staged run, capturing the -five-state lifecycle (Β§13.3): ``staging`` -> ``complete`` -> ``sync_queued`` --> ``sync_verified`` -> ``cleared``. State transitions are append-only -- a -new entry is added to the ``history`` array on every transition, and the -top-level ``current_state`` mirrors the latest entry. - -Disk-side guarantees per Β§4.4.5: - -* ``msgspec.json`` for typed encode/decode (schema validation in one pass). -* ``filelock.FileLock`` advisory exclusive lock around the read-mutate-write - cycle so concurrent appends never lose entries. -* Atomic write via tempfile + ``fsync`` + ``os.replace``. - -Reads enforce the Β§11.9.2 reader policy: a file at a different schema major -than the writer raises ``SchemaMajorMismatchError`` (no silent partial-parse -across major boundaries). -""" - -from __future__ import annotations - -import asyncio -import socket -from pathlib import Path -from typing import Any - -import msgspec -from filelock import FileLock - -from exlab_wizard.api.schemas import IngestJson -from exlab_wizard.cache import lock_path_for -from exlab_wizard.constants import INGEST_JSON_VERSION, IngestState -from exlab_wizard.io import atomic_write_bytes, read_msgspec_json -from exlab_wizard.logging import get_logger -from exlab_wizard.utils.state import assert_forward_transition -from exlab_wizard.utils.time import utc_now_iso - -__all__ = ["IngestWriter"] - -_logger = get_logger(__name__) - -# Forward state-machine map per Β§13.3. Each key is the source state; the -# value is the set of states reachable in one step. Any transition not -# present here is rejected by ``append_state_transition``. -_FORWARD_TRANSITIONS: dict[IngestState, frozenset[IngestState]] = { - IngestState.STAGING: frozenset({IngestState.COMPLETE}), - IngestState.COMPLETE: frozenset({IngestState.SYNC_QUEUED}), - IngestState.SYNC_QUEUED: frozenset({IngestState.SYNC_VERIFIED}), - IngestState.SYNC_VERIFIED: frozenset({IngestState.CLEARED}), - IngestState.CLEARED: frozenset(), -} - -# Reader's expected major version (every writer always emits this major). -_EXPECTED_MAJOR: int = int(INGEST_JSON_VERSION.split(".", 1)[0]) - - -class IngestWriter: - """Writer for ``ingest.json``. Orchestrator-mode only. - - Backend Spec Β§13.4. State history is append-only (Β§13.3) to preserve full - audit history -- the writer never edits or deletes prior entries. - - All public methods are ``async`` to match the Β§4.4.5 ``CacheWriter`` - contract; the blocking lock + I/O work is dispatched through - ``asyncio.to_thread`` so the FastAPI event loop is never blocked. - """ - - async def write_ingest(self, path: Path, payload: IngestJson) -> None: - """Write ``payload`` to ``path`` atomically under an exclusive lock. - - Reserved for the initial-creation path (no file exists yet); the - per-file lock is taken defensively so a concurrent initial-write - attempt serializes rather than races. - """ - await asyncio.to_thread(self._write_ingest_blocking, path, payload) - - async def read_ingest(self, path: Path) -> IngestJson: - """Read and decode ``path`` into an ``IngestJson``. - - Raises ``SchemaMajorMismatchError`` (Β§11.9.2) when the on-disk file - carries a different schema major than ``INGEST_JSON_VERSION``. - """ - return await asyncio.to_thread(self._read_ingest_blocking, path) - - async def append_state_transition( - self, - path: Path, - new_state: IngestState, - *, - host: str, - files_received: int | None = None, - bytes_received: int | None = None, - nas_path: str | None = None, - checksum_file: str | None = None, - ) -> IngestJson: - """Append a state-transition entry and update ``current_state``. - - File-locked for the entire read-mutate-write cycle so concurrent - callers never lose entries. The new history entry has the shape:: - - {"state": "", "at": "", "host": ""} - - Per Β§13.4 the entry carries optional extras when transitioning to - specific states: - - * ``complete`` -- ``files_received`` and ``bytes_received``. - * ``sync_verified`` -- ``nas_path`` and ``checksum_file``. - - Other state transitions ignore those extras (they are silently dropped - because the spec does not define their meaning at those states). - - Raises ``ValueError`` if ``new_state`` is not a permitted forward - transition from the file's current state. Going backward (e.g. - ``cleared`` -> ``staging``) is rejected. The full state machine is - documented in ``_FORWARD_TRANSITIONS`` above and Β§13.3. - """ - return await asyncio.to_thread( - self._append_state_transition_blocking, - path, - new_state, - host, - files_received, - bytes_received, - nas_path, - checksum_file, - ) - - # ---- Blocking helpers (run via asyncio.to_thread) --------------------- - - def _write_ingest_blocking(self, path: Path, payload: IngestJson) -> None: - with FileLock(lock_path_for(path)): - atomic_write_bytes(path, msgspec.json.encode(payload)) - _logger.info( - "ingest.json written: %s (current_state=%s)", - path, - payload.current_state, - ) - - def _read_ingest_blocking(self, path: Path) -> IngestJson: - with FileLock(lock_path_for(path)): - return self._decode_ingest_locked(path) - - @staticmethod - def _decode_ingest_locked(path: Path) -> IngestJson: - """Decode ``ingest.json`` with the Β§11.9.2 schema-major gate. - - Caller MUST already hold the per-file ``FileLock``. - """ - return read_msgspec_json(path, IngestJson, expected_major=_EXPECTED_MAJOR) - - def _append_state_transition_blocking( - self, - path: Path, - new_state: IngestState, - host: str, - files_received: int | None, - bytes_received: int | None, - nas_path: str | None, - checksum_file: str | None, - ) -> IngestJson: - with FileLock(lock_path_for(path)): - payload = self._decode_ingest_locked(path) - - current = IngestState(payload.current_state) - assert_forward_transition(current, new_state, _FORWARD_TRANSITIONS) - - entry: dict[str, Any] = { - "state": new_state.value, - "at": utc_now_iso(), - "host": host, - } - if new_state is IngestState.COMPLETE: - if files_received is not None: - entry["files_received"] = files_received - if bytes_received is not None: - entry["bytes_received"] = bytes_received - elif new_state is IngestState.SYNC_VERIFIED: - if nas_path is not None: - entry["nas_path"] = nas_path - if checksum_file is not None: - entry["checksum_file"] = checksum_file - - new_history = [*payload.history, entry] - new_payload = msgspec.structs.replace( - payload, - current_state=new_state.value, - history=new_history, - ) - atomic_write_bytes(path, msgspec.json.encode(new_payload)) - - _logger.info( - "ingest.json transition: %s -> %s (host=%s, path=%s)", - current.value, - new_state.value, - host, - path, - ) - return new_payload - - -# Convenience for callers that need a default host string. Not part of the -# public class -- exposed for tests and the orchestrator session bootstrap. -def default_host() -> str: - """Return ``socket.gethostname()`` (orchestrator default for ``host``).""" - return socket.gethostname() diff --git a/src/exlab_wizard/cache/sync_state_schema.py b/src/exlab_wizard/cache/sync_state_schema.py new file mode 100644 index 0000000..0cd025b --- /dev/null +++ b/src/exlab_wizard/cache/sync_state_schema.py @@ -0,0 +1,71 @@ +"""``msgspec.Struct`` types for the per-run ``sync_state.json`` cache. + +Operator-free per-file NAS sync design (2026-05-21). These structs live in +the dependency-free ``cache`` package -- not ``api.schemas`` -- so the +``cache``, ``sync``, and ``orchestrator`` modules can import them (and +:class:`~exlab_wizard.cache.sync_state_writer.SyncStateWriter`) at module +scope without re-entering the ``api`` package and forming a circular +import. ``api.schemas`` re-exports both names so the wider "single source +of truth for cache schemas" surface is preserved for API callers. +""" + +from __future__ import annotations + +from msgspec import Struct + +__all__ = ["FileSyncRecord", "SyncStateJson"] + + +class FileSyncRecord( + Struct, + omit_defaults=True, + forbid_unknown_fields=False, +): + """Per-file sync record stored under ``sync_state.json``'s ``files`` map. + + One record per run-relative POSIX path. These records are *freely + mutated in place* by ``SyncStateWriter`` as a file is synced, + re-modified, and re-synced. + + * ``synced_signature`` -- the ``(st_size, st_mtime_ns)`` captured at the + last successful sync. ``None`` means the file has never synced. A file + whose current signature differs is "modified since sync" and becomes + eligible again once it re-settles. + * ``verified_at`` -- the ISO-8601 timestamp at which the file's SHA-256 + was confirmed against the NAS copy. ``None`` until verified; a file + counts toward the ``SYNCED`` rollup only once this is set. + * ``keep_local`` -- when ``True`` the file still syncs to the NAS but is + excluded from cleanup deletion. + * ``verified_sha256`` -- the SHA-256 hex digest of the local bytes + captured at sync time. Slot A of the 2026-05-26 rclone-only + migration: ``rclone check --download --combined`` confirms the NAS + copy matches the local source, and we record the local SHA here so + the offline-audit affordance lost by dropping ``checksums.sha256`` + is preserved without any wire cost. ``None`` for records that + pre-date the migration or for files synced via the legacy verify + path; reads must tolerate its absence. + """ + + synced_signature: tuple[int, int] | None = None + verified_at: str | None = None + keep_local: bool = False + verified_sha256: str | None = None + + +class SyncStateJson( + Struct, + omit_defaults=True, + forbid_unknown_fields=False, +): + """``sync_state.json`` per-run sync-state record at schema version 1.0. + + Written by the orchestrator only. A *freely-mutable current-state map* + (not append-only): ``files`` maps a run-relative POSIX path to its + :class:`FileSyncRecord`. ``cleared_at`` is set once the run's staging + copy has been cleaned up. The run-level ``SYNCING``/``SYNCED``/``CLEARED`` + rollup is derived on read from this payload, never persisted as such. + """ + + schema_version: str + cleared_at: str | None = None + files: dict[str, FileSyncRecord] = {} diff --git a/src/exlab_wizard/cache/sync_state_writer.py b/src/exlab_wizard/cache/sync_state_writer.py new file mode 100644 index 0000000..bdd55c2 --- /dev/null +++ b/src/exlab_wizard/cache/sync_state_writer.py @@ -0,0 +1,300 @@ +"""Orchestrator-only writer for ``sync_state.json``. + +Operator-free per-file NAS sync design (2026-05-21). The orchestrator +writes one ``sync_state.json`` per run pending NAS sync, under +``/.exlab-wizard/sync_state.json``. It is a **freely-mutable +current-state map**: per-file records are overwritten in place as a file +is synced, re-modified, and re-synced, and ``cleared_at`` is stamped once +when the run's staging copy is cleaned up. + +Disk-side guarantees follow the Β§4.4.5 ``CacheWriter`` contract: + +* ``msgspec.json`` for typed encode/decode (schema validation in one pass). +* ``filelock.FileLock`` advisory exclusive lock around every + read-mutate-write cycle so concurrent updates never lose a record. +* Atomic write via tempfile + ``fsync`` + ``os.replace`` + (:func:`~exlab_wizard.io.atomic_write_bytes`). + +The run-level ``SYNCING`` / ``SYNCED`` / ``CLEARED`` rollup is **derived on +read** by :meth:`SyncStateWriter.rollup_state` -- it is never persisted, +because it can oscillate (a ``SYNCED`` run whose file is modified again +returns to ``SYNCING``). +""" + +from __future__ import annotations + +import asyncio +from pathlib import Path + +import msgspec +from filelock import FileLock + +from exlab_wizard.cache import lock_path_for +from exlab_wizard.cache.sync_state_schema import FileSyncRecord, SyncStateJson +from exlab_wizard.constants import ( + SYNC_STATE_FILENAME, + SYNC_STATE_JSON_VERSION, + RunSyncState, +) +from exlab_wizard.io import atomic_write_bytes, read_msgspec_json +from exlab_wizard.logging import get_logger +from exlab_wizard.paths import cache_dir +from exlab_wizard.utils.time import utc_now_iso + +__all__ = ["SyncStateWriter"] + +_logger = get_logger(__name__) + +# Reader's expected major version (every writer always emits this major). +_EXPECTED_MAJOR: int = int(SYNC_STATE_JSON_VERSION.split(".", 1)[0]) + + +def _sync_state_path(run_path: Path) -> Path: + """Return the ``sync_state.json`` path under a run directory.""" + return cache_dir(run_path) / SYNC_STATE_FILENAME + + +def _ensure_cache_dir(path: Path) -> None: + """Create ``path``'s parent (the run's ``.exlab-wizard/`` cache) dir. + + Neither :func:`atomic_write_bytes` nor :class:`filelock.FileLock` + creates the parent directory, so a mutator targeting a run that has + no ``.exlab-wizard/`` dir yet would raise (and surface as an HTTP + 500). Every blocking mutator calls this first so a missing cache dir + can never fault the write. Idempotent. + """ + path.parent.mkdir(parents=True, exist_ok=True) + + +def _empty_state() -> SyncStateJson: + """Return a fresh, file-less :class:`SyncStateJson` at the current version.""" + return SyncStateJson(schema_version=SYNC_STATE_JSON_VERSION) + + +class SyncStateWriter: + """Writer for ``sync_state.json``. Orchestrator-mode only. + + All public methods are ``async`` to match the Β§4.4.5 ``CacheWriter`` + contract; the blocking lock + I/O work is dispatched through + ``asyncio.to_thread`` so the FastAPI event loop is never blocked. + """ + + async def read(self, run_path: Path) -> SyncStateJson: + """Read and decode the run's ``sync_state.json``. + + Returns a fresh empty :class:`SyncStateJson` when the file does not + exist yet -- a run with no sync activity simply has no record. Raises + ``SchemaMajorMismatchError`` (Β§11.9.2) when the on-disk file carries + a different schema major than ``SYNC_STATE_JSON_VERSION``. + """ + return await asyncio.to_thread(self._read_blocking, run_path) + + def read_sync(self, run_path: Path) -> SyncStateJson: + """Blocking variant of :meth:`read` for synchronous callers. + + :meth:`read` dispatches the blocking lock + decode through + ``asyncio.to_thread``. This variant runs the lock + decode inline; + synchronous read-side code -- notably + :func:`exlab_wizard.orchestrator.staging_query.list_staged_runs` and + :func:`exlab_wizard.orchestrator.staging_clear.clear_run_dir` -- calls + it directly. Some of those call sites run inside a ``@ui.page`` + handler (i.e. on the event loop); the lock + a single small JSON + decode is brief enough not to matter there, and the read-side query + is itself synchronous, so there is no ``to_thread`` hop to make. + Returns a fresh empty :class:`SyncStateJson` when the file is absent. + """ + return self._read_blocking(run_path) + + async def upsert_file( + self, + run_path: Path, + rel_path: str, + *, + synced_signature: tuple[int, int] | None = None, + verified_at: str | None = None, + verified_sha256: str | None = None, + ) -> SyncStateJson: + """Create or update one file record under an exclusive lock. + + The record for ``rel_path`` (a run-relative POSIX path) is + created if absent, otherwise updated in place. ``keep_local`` is + preserved by this method (toggle it via :meth:`set_keep_local`). + + The three remaining kwargs have **asymmetric None handling** by + design: + + * ``synced_signature`` and ``verified_at`` are always + overwritten -- even with ``None``. The poller's + re-modified-file flow relies on this: it calls + ``upsert_file(... synced_signature=None, verified_at=None)`` + to drop the verify marks on a file whose local bytes have + changed, which flips the run-level rollup from ``SYNCED`` + back to ``SYNCING``. + * ``verified_sha256`` is preserved when ``None`` is passed -- + the audit-trail digest survives re-verify passes that carry + no fresh local SHA (notably the operator-triggered + ``force_verify`` path). + """ + return await asyncio.to_thread( + self._upsert_file_blocking, + run_path, + rel_path, + synced_signature, + verified_at, + verified_sha256, + ) + + async def set_keep_local( + self, + run_path: Path, + rel_path: str, + value: bool, + ) -> SyncStateJson: + """Toggle a file's ``keep_local`` flag, creating the record if absent.""" + return await asyncio.to_thread( + self._set_keep_local_blocking, + run_path, + rel_path, + value, + ) + + async def mark_cleared(self, run_path: Path) -> SyncStateJson: + """Stamp ``cleared_at`` with the current UTC time. + + Called once the run's staging copy has been cleaned up; this flips + the derived rollup to ``CLEARED``. + """ + return await asyncio.to_thread(self._mark_cleared_blocking, run_path) + + def mark_cleared_sync(self, run_path: Path) -> SyncStateJson: + """Blocking variant of :meth:`mark_cleared` for synchronous callers. + + Used by the synchronous :func:`clear_run_dir` operator-clear path so + an operator "Clear" stamps ``cleared_at`` exactly like the automatic + cleanup reaper does. No-op-safe when ``sync_state.json`` is absent -- + a record is created carrying only ``cleared_at``. + """ + return self._mark_cleared_blocking(run_path) + + @staticmethod + def rollup_state(state: SyncStateJson) -> RunSyncState: + """Derive the run-level :class:`RunSyncState` rollup from ``state``. + + Pure function -- no I/O, no mutation. The rollup is computed on read + rather than persisted because the ``SYNCING``/``SYNCED`` distinction + oscillates as files are re-modified. + + * ``CLEARED`` -- ``cleared_at`` is set (takes precedence even if some + files are unverified, e.g. ``keep_local`` files left on disk). + * ``SYNCED`` -- ``files`` is non-empty and every record has a non-null + ``verified_at``. + * ``SYNCING`` -- otherwise (no files tracked yet, or at least one file + still unverified). + """ + if state.cleared_at is not None: + return RunSyncState.CLEARED + if state.files and all(rec.verified_at is not None for rec in state.files.values()): + return RunSyncState.SYNCED + return RunSyncState.SYNCING + + # ---- Blocking helpers (run via asyncio.to_thread) --------------------- + + def _read_blocking(self, run_path: Path) -> SyncStateJson: + path = _sync_state_path(run_path) + with FileLock(lock_path_for(path)): + return self._decode_locked(path) + + @staticmethod + def _decode_locked(path: Path) -> SyncStateJson: + """Decode ``sync_state.json``, returning an empty state if absent. + + Caller MUST already hold the per-file ``FileLock``. + """ + if not path.exists(): + return _empty_state() + return read_msgspec_json(path, SyncStateJson, expected_major=_EXPECTED_MAJOR) + + def _upsert_file_blocking( + self, + run_path: Path, + rel_path: str, + synced_signature: tuple[int, int] | None, + verified_at: str | None, + verified_sha256: str | None, + ) -> SyncStateJson: + path = _sync_state_path(run_path) + _ensure_cache_dir(path) + with FileLock(lock_path_for(path)): + payload = self._decode_locked(path) + existing = payload.files.get(rel_path, FileSyncRecord()) + # ``synced_signature`` and ``verified_at`` overwrite even with + # ``None`` -- the poller drops the verify marks on a + # re-modified file by calling upsert_file with None values, + # which is how the run-level rollup flips back to ``syncing``. + # ``verified_sha256`` is treated differently: a ``None`` keeps + # the existing digest so the audit trail survives a re-verify + # pass that doesn't itself re-compute the SHA (e.g. an + # operator-triggered ``force_verify``). + record = msgspec.structs.replace( + existing, + synced_signature=synced_signature, + verified_at=verified_at, + verified_sha256=( + verified_sha256 if verified_sha256 is not None else existing.verified_sha256 + ), + ) + new_payload = self._with_file(payload, rel_path, record) + atomic_write_bytes(path, msgspec.json.encode(new_payload)) + _logger.info( + "sync_state.json upsert: %s (file=%s, verified=%s)", + path, + rel_path, + verified_at is not None, + ) + return new_payload + + def _set_keep_local_blocking( + self, + run_path: Path, + rel_path: str, + value: bool, + ) -> SyncStateJson: + path = _sync_state_path(run_path) + _ensure_cache_dir(path) + with FileLock(lock_path_for(path)): + payload = self._decode_locked(path) + existing = payload.files.get(rel_path, FileSyncRecord()) + record = msgspec.structs.replace(existing, keep_local=value) + new_payload = self._with_file(payload, rel_path, record) + atomic_write_bytes(path, msgspec.json.encode(new_payload)) + _logger.info( + "sync_state.json keep_local: %s (file=%s, value=%s)", + path, + rel_path, + value, + ) + return new_payload + + def _mark_cleared_blocking(self, run_path: Path) -> SyncStateJson: + path = _sync_state_path(run_path) + _ensure_cache_dir(path) + with FileLock(lock_path_for(path)): + payload = self._decode_locked(path) + new_payload = msgspec.structs.replace(payload, cleared_at=utc_now_iso()) + atomic_write_bytes(path, msgspec.json.encode(new_payload)) + _logger.info("sync_state.json marked cleared: %s", path) + return new_payload + + @staticmethod + def _with_file( + payload: SyncStateJson, + rel_path: str, + record: FileSyncRecord, + ) -> SyncStateJson: + """Return a copy of ``payload`` with ``files[rel_path]`` set to ``record``. + + Builds a fresh ``files`` mapping so the input payload is never + mutated in place. + """ + new_files = {**payload.files, rel_path: record} + return msgspec.structs.replace(payload, files=new_files) diff --git a/src/exlab_wizard/config/loader.py b/src/exlab_wizard/config/loader.py index 85a8425..cd9516f 100644 --- a/src/exlab_wizard/config/loader.py +++ b/src/exlab_wizard/config/loader.py @@ -9,6 +9,7 @@ from __future__ import annotations import io +import os from pathlib import Path from typing import Any @@ -16,12 +17,64 @@ from ruamel.yaml import YAML from exlab_wizard.config.models import Config +from exlab_wizard.constants import TEST_MODE_ENV, TEST_MODE_PREFIX from exlab_wizard.errors import ConfigError from exlab_wizard.io import atomic_write_bytes from exlab_wizard.logging import get_logger _log = get_logger(__name__) +# Values that flip ``EXLAB_WIZARD_TEST_MODE`` on. Matched case-insensitively +# against the env var's stripped value; anything else (including unset, "", +# "0", "false", "no") leaves the loaded config untouched. +_TEST_MODE_TRUTHY: frozenset[str] = frozenset({"1", "true", "yes", "on"}) + + +def _test_mode_enabled() -> bool: + """Return True when the env var :data:`TEST_MODE_ENV` is truthy. + + Centralized here so callers don't have to know the truthy/falsy + spellings; see :data:`_TEST_MODE_TRUTHY` for the accepted strings. + """ + raw = os.environ.get(TEST_MODE_ENV, "") + return raw.strip().lower() in _TEST_MODE_TRUTHY + + +def apply_test_mode_prefix(config: Config) -> Config: + """Return ``config`` with each equipment id prefixed by :data:`TEST_MODE_PREFIX`. + + Idempotent: an id that already begins with the prefix is left + unchanged so repeated applications (or already-prefixed inputs) + never grow a ``TEST_TEST_…`` chain. The rewritten config is re-run + through :meth:`Config.model_validate` so unique-id and pattern + invariants are re-checked against the new ids -- if a rewrite ever + produces a duplicate or an over-length id, the loader raises the + same :class:`ConfigError` shape a hand-edited config would. + """ + if not config.equipment: + return config + + needs_rewrite = any(not entry.id.startswith(TEST_MODE_PREFIX) for entry in config.equipment) + if not needs_rewrite: + return config + + # Round-trip through ``model_dump`` so the rewritten dict is valid + # input for ``Config.model_validate`` (which re-runs every field-, + # model-, and cross-field validator, including the equipment-id + # regex, the max-length check, and the unique-id invariant). + dumped: dict[str, Any] = config.model_dump(mode="python") + for entry in dumped.get("equipment", []): + current_id = entry.get("id", "") + if isinstance(current_id, str) and not current_id.startswith(TEST_MODE_PREFIX): + entry["id"] = f"{TEST_MODE_PREFIX}{current_id}" + + try: + return Config.model_validate(dumped) + except ValidationError as exc: + raise ConfigError( + f"applying {TEST_MODE_PREFIX!r} prefix to equipment ids failed validation:\n{exc}" + ) from exc + def _yaml() -> YAML: """Build a configured ruamel.yaml instance. @@ -61,9 +114,15 @@ def load_config_from_text(text: str) -> Config: if not isinstance(data, dict): raise ConfigError("config.yaml top level must be a mapping") try: - return Config.model_validate(data) + config = Config.model_validate(data) except ValidationError as exc: raise ConfigError(f"config.yaml failed validation:\n{exc}") from exc + # Apply the ``EXLAB_WIZARD_TEST_MODE`` opt-in *after* validation so the + # base config is verified once on its own, and the prefix step's + # error path (duplicate ids, over-length) is reported separately. + if _test_mode_enabled(): + config = apply_test_mode_prefix(config) + return config def save_config(path: Path, config: Config, *, original_text: str | None = None) -> None: diff --git a/src/exlab_wizard/config/models.py b/src/exlab_wizard/config/models.py index 30dbf2d..e738aa0 100644 --- a/src/exlab_wizard/config/models.py +++ b/src/exlab_wizard/config/models.py @@ -5,8 +5,7 @@ ``Config.model_validate``, and converts any Pydantic ``ValidationError`` into a ``ConfigError`` at the boundary; nothing here raises ``ConfigError`` directly except for cases that need a custom message before the model layer sees the -input (for instance the ``password``-key rejection in -:class:`RsyncSshTransport`). +input. Style: - ``model_config = ConfigDict(extra="forbid", str_strip_whitespace=True)`` on @@ -21,7 +20,7 @@ from __future__ import annotations from datetime import time -from typing import Annotated, Any, Literal +from typing import Any from pydantic import ( BaseModel, @@ -35,9 +34,7 @@ from exlab_wizard.constants import ( TEMPLATE_QUESTION_ID_PATTERN, BandwidthDay, - CompletenessSignal, FieldType, - OrchestratorTransportType, StagingCleanupMode, SyncMode, ) @@ -48,20 +45,18 @@ "BandwidthWindow", "Config", "EquipmentConfig", - "EquipmentTransport", "LIMSConfig", "LoggingConfig", "NASCleanupConfig", + "NasConfig", "OperatorsConfig", "OrchestratorConfig", "OrchestratorStagingCleanup", - "OrchestratorStagingTransport", "PathsConfig", "PluginsConfig", "READMEConfig", "READMEDefaultField", - "RcloneTransport", - "RsyncSshTransport", + "RclonePerf", "SyncConfig", "ValidatorConfig", ] @@ -221,70 +216,45 @@ def _upload_mbps_positive_or_none(cls, value: float | None) -> float | None: # --------------------------------------------------------------------------- -# transports +# nas # --------------------------------------------------------------------------- -class RcloneTransport(BaseModel): - """``transport:`` block when ``type == 'rclone'``.""" +class RclonePerf(BaseModel): + """Parallelism knobs forwarded to rclone (``--transfers`` / ``--checkers``). - model_config = ConfigDict(extra="forbid", str_strip_whitespace=True) - - type: Literal["rclone"] - rclone_remote: str = Field(min_length=1) - rclone_remote_path: str = Field(min_length=1) - bandwidth: BandwidthConfig = Field(default_factory=BandwidthConfig) - - -class RsyncSshTransport(BaseModel): - """``transport:`` block when ``type == 'rsync_ssh'``. - - The model rejects any input dict that contains a ``password`` key. SSH - password auth is forbidden by spec; only key-based auth is supported. The - ``extra='forbid'`` setting also rejects the field, but the explicit - ``mode='before'`` validator emits a more actionable error message. + These double as the memory dial on space- and RAM-constrained + acquisition machines: peak memory scales with these counts times + rclone's per-stream buffer. """ model_config = ConfigDict(extra="forbid", str_strip_whitespace=True) - type: Literal["rsync_ssh"] - ssh_target: str = Field(min_length=1) - ssh_key_path: str = "~/.ssh/id_ed25519" - remote_path: str = Field(min_length=1) - bandwidth: BandwidthConfig = Field(default_factory=BandwidthConfig) + transfers: int = Field(default=4, ge=1, le=64) + checkers: int = Field(default=8, ge=1, le=64) - @model_validator(mode="before") - @classmethod - def _reject_password_field(cls, data: Any) -> Any: - if isinstance(data, dict) and "password" in data: - msg = ( - "rsync_ssh transport must not declare a 'password' field; " - "SSH password auth is unsupported. Use ssh_key_path instead." - ) - raise ConfigError(msg) - return data +class NasConfig(BaseModel): + """``nas:`` block β€” the single rclone remote + base root for NAS sync. -# Discriminated union over the transport ``type`` tag. Pydantic 2 picks the -# right submodel by inspecting the ``type`` value. -EquipmentTransport = Annotated[ - RcloneTransport | RsyncSshTransport, - Field(discriminator="type"), -] - - -class OrchestratorStagingTransport(BaseModel): - """``orchestrator_staging_transport:`` -- staging hop only. Backend Spec Β§13.""" + ``remote`` is the name of a remote defined in the operator's + ``rclone.conf`` (set up separately with ``rclone config``). Equipment + run folders live under ``://…``. + ``rclone_config_path`` optionally pins ``rclone --config `` for + when the app runs as a different OS user than the one who created the + config; blank means rclone's default discovery. + """ model_config = ConfigDict(extra="forbid", str_strip_whitespace=True) - type: OrchestratorTransportType - mount_point: str = Field(min_length=1) - staging_subpath: str = Field(min_length=1) - - @field_serializer("type") - def _serialize_type(self, value: OrchestratorTransportType) -> str: - return value.value + remote: str = "" + base_root: str = "" + rclone_config_path: str = "" + # Reconcile tolerance: a file counts as synced only when its remote modtime + # is within this many seconds of local (absorbs SFTP/SMB modtime rounding). + mtime_tolerance_s: int = Field(default=2, ge=0) + perf: RclonePerf = Field(default_factory=RclonePerf) + bandwidth: BandwidthConfig = Field(default_factory=BandwidthConfig) # --------------------------------------------------------------------------- @@ -297,10 +267,15 @@ class EquipmentConfig(BaseModel): ``sync_mode`` (Redesign Spec Β§3.2) is the per-equipment role this device plays for the equipment: ``nas`` means this device acquires runs and syncs - them directly to the NAS (requires ``transport``); ``stage`` means this - device acquires runs and pushes them to a connected PC's staging area - (requires ``orchestrator_staging_transport``). The two transport fields - are mutually exclusive β€” exactly one is populated, dictated by the mode. + them directly to the NAS; ``stage`` means this device acquires runs and + pushes them to a connected staging PC's staging area instead. + + rclone.conf NAS-sync migration: neither mode carries a per-equipment + connection block. The NAS connection is defined once by the ``nas:`` block + (a single rclone remote); the staging hop is defined once by + ``orchestrator.staging_remote`` / ``orchestrator.staging_base_root`` (a + second rclone remote in the same ``rclone.conf``). The push target is + selected by ``sync_mode`` at sync time, not by a per-equipment block. """ model_config = ConfigDict(extra="forbid", str_strip_whitespace=True) @@ -309,17 +284,7 @@ class EquipmentConfig(BaseModel): label: str = Field(min_length=1) local_root: str = Field(min_length=1) nas_root: str = Field(min_length=1) - completeness_signal: CompletenessSignal - sentinel_filename: str | None = None - manifest_filename: str | None = None sync_mode: SyncMode = SyncMode.NAS - transport: EquipmentTransport | None = None - orchestrator_staging_transport: OrchestratorStagingTransport | None = None - - @field_serializer("completeness_signal") - def _serialize_completeness_signal(self, value: CompletenessSignal) -> str: - # Emit the bare string so YAML/JSON dumps round-trip the wire format. - return value.value @field_serializer("sync_mode") def _serialize_sync_mode(self, value: SyncMode) -> str: @@ -337,50 +302,6 @@ def _validate_equipment_id(cls, value: str) -> str: except ConfigError as exc: raise ValueError(str(exc)) from exc - @model_validator(mode="after") - def _completeness_signal_requires_matching_filename(self) -> EquipmentConfig: - match self.completeness_signal: - case CompletenessSignal.SENTINEL_FILE: - if not self.sentinel_filename: - msg = ( - "equipment.completeness_signal == 'sentinel_file' " - "requires a non-empty sentinel_filename" - ) - raise ValueError(msg) - case CompletenessSignal.MANIFEST: - if not self.manifest_filename: - msg = ( - "equipment.completeness_signal == 'manifest' " - "requires a non-empty manifest_filename" - ) - raise ValueError(msg) - return self - - @model_validator(mode="after") - def _sync_mode_dictates_transport(self) -> EquipmentConfig: - match self.sync_mode: - case SyncMode.NAS: - if self.transport is None: - msg = "equipment.sync_mode == 'nas' requires a 'transport' block" - raise ValueError(msg) - if self.orchestrator_staging_transport is not None: - msg = ( - "equipment.sync_mode == 'nas' must not declare " - "'orchestrator_staging_transport'" - ) - raise ValueError(msg) - case SyncMode.STAGE: - if self.orchestrator_staging_transport is None: - msg = ( - "equipment.sync_mode == 'stage' requires an " - "'orchestrator_staging_transport' block" - ) - raise ValueError(msg) - if self.transport is not None: - msg = "equipment.sync_mode == 'stage' must not declare a 'transport' block" - raise ValueError(msg) - return self - # --------------------------------------------------------------------------- # nas_cleanup @@ -504,13 +425,20 @@ class PluginsConfig(BaseModel): # --------------------------------------------------------------------------- +def _default_ignore_globs() -> list[str]: + return ["*.partial", "*.tmp"] + + class SyncConfig(BaseModel): - """``sync:`` block. NAS sync engine kill-switch + retry policy.""" + """``sync:`` block. NAS sync engine kill-switch + retry / quiescence policy.""" model_config = ConfigDict(extra="forbid", str_strip_whitespace=True) enabled: bool = True retry_attempts: int = Field(default=3, ge=0) + quiescence_minutes: int = Field(default=10, ge=1) + ignore_globs: list[str] = Field(default_factory=_default_ignore_globs) + poll_interval_seconds: int = Field(default=120, ge=1) # --------------------------------------------------------------------------- @@ -538,16 +466,28 @@ class OrchestratorConfig(BaseModel): """``orchestrator:`` block. Backend Spec Β§9, Β§13. GUI/Orchestrator Redesign Β§3.1 collapsed the single-equipment / - orchestrator distinction: the staging pipeline is always active, so - ``label`` and ``staging_root`` become required at the top-level - ``Config`` cross-field validator (no longer gated on a removed - ``enabled`` toggle). + orchestrator distinction (no ``enabled`` toggle). ``label`` is required + by the setup-state gate -- it identifies this workstation in every run's + ``creation.json``. ``staging_root`` is **opt-in**: a blank value means + this device is not a staging PC, so it does not gate setup and no staging + directory is created until the operator saves a non-empty path. + + rclone.conf NAS-sync migration (Phase 8): ``staging_remote`` / + ``staging_base_root`` define the orchestrator's stage-mode hop as a named + rclone remote (a second remote in the same ``rclone.conf`` as the + ``nas:`` remote). stage-mode equipment push run folders to + ``://`` using + the same :class:`RcloneDriver` ops as the NAS leg. ``staging_perf`` is the + parallelism dial for that hop. """ model_config = ConfigDict(extra="forbid", str_strip_whitespace=True) label: str = "" staging_root: str = "" + staging_remote: str = "" + staging_base_root: str = "" + staging_perf: RclonePerf = Field(default_factory=RclonePerf) staging_cleanup: OrchestratorStagingCleanup = Field( default_factory=OrchestratorStagingCleanup, ) @@ -567,6 +507,7 @@ class Config(BaseModel): lims: LIMSConfig = Field(default_factory=LIMSConfig) readme: READMEConfig = Field(default_factory=READMEConfig) equipment: list[EquipmentConfig] = [] + nas: NasConfig = Field(default_factory=NasConfig) nas_cleanup: NASCleanupConfig = Field(default_factory=NASCleanupConfig) logging: LoggingConfig = Field(default_factory=LoggingConfig) operators: OperatorsConfig = Field(default_factory=OperatorsConfig) @@ -586,11 +527,36 @@ def _cross_field_invariants(self) -> Config: raise ValueError(msg) seen.add(entry.id) - # 2. The staging pipeline is always active (Redesign Β§3.1), so - # label and staging_root are always required (or empty for the - # setup-incomplete gate to trip β€” see paths.setup_state). - # The non-empty check has moved to the setup-incomplete evaluator - # so that an in-flight first-launch config is loadable but flagged - # for completion. Pydantic validation only ensures the fields are - # present (which they always are due to the empty-string defaults). + # 2. Orchestrator identity: ``label`` is required and ``staging_root`` + # is opt-in (a blank value just means this device is not a staging + # PC). The non-empty ``label`` check lives in the setup-incomplete + # evaluator (see paths.setup_state) so an in-flight first-launch + # config is loadable but flagged for completion. Pydantic only + # ensures the fields are present (always true via empty-string + # defaults). return self + + +def config_with_equipment_appended(config: Config | None, equipment: EquipmentConfig) -> Config: + """Return a copy of ``config`` with ``equipment`` appended. + + The single place the Add-Equipment flow merges a new device into the + live config -- shared by the ``POST /config/equipment`` route and the + NiceGUI wizard's confirm step so both reject duplicate ids and re-run + the same cross-field validation instead of open-coding the merge + twice. ``config`` may be ``None`` on a fresh install that has no + ``config.yaml`` yet, in which case a default :class:`Config` is the + base. + + Raises :class:`exlab_wizard.errors.ConfigError` when an equipment + entry with the same id already exists. + """ + base = config or Config() + for entry in base.equipment: + if entry.id == equipment.id: + msg = f"equipment id {equipment.id!r} already exists in config" + raise ConfigError(msg) + merged = base.model_copy(update={"equipment": [*base.equipment, equipment]}) + # Re-run the full cross-field validation (unique ids, etc.) on the + # merged result so a bad merge fails loudly rather than persisting. + return Config.model_validate(merged.model_dump(mode="python")) diff --git a/src/exlab_wizard/constants/__init__.py b/src/exlab_wizard/constants/__init__.py index 659898a..04ea264 100644 --- a/src/exlab_wizard/constants/__init__.py +++ b/src/exlab_wizard/constants/__init__.py @@ -10,28 +10,26 @@ from __future__ import annotations # ---- App-level identifiers ---- -from exlab_wizard.constants.app import APP_NAME +from exlab_wizard.constants.app import APP_NAME, TEST_MODE_ENV, TEST_MODE_PREFIX # ---- Enums (Backend Β§4.7, Β§4.9.1, Β§5.2, Β§6.2.4, Β§7, Β§8.1, Β§11.3, Β§13.3) ---- from exlab_wizard.constants.enums import ( AuditScopeKind, BandwidthDay, - CompletenessSignal, CreationLevel, DirectoryLevel, FieldType, FindingKind, - IngestState, LIMSProjectSource, LIMSProjectStatus, NextAction, - OrchestratorTransportType, Platform, PluginSourceRoot, PluginStatus, ProblemClass, RunKind, RunScope, + RunSyncState, SessionKind, SetupNextAction, SetupState, @@ -41,7 +39,6 @@ SyncStatus, TemplateType, Tier, - TransportType, TreeProjectStatus, ) @@ -50,11 +47,9 @@ ANSWERS_FILE_NAME, CACHE_DIR_NAME, CENTRAL_LOG_FILE, - CHECKSUMS_RELATIVE, COPIER_MANIFEST_NAME, CREATION_JSON_NAME, EQUIPMENT_JSON_NAME, - INGEST_JSON_NAME, LIMS_CACHE_DB_NAME, LOG_FILE_TEMPLATE, PLUGIN_MANIFEST_NAME, @@ -63,6 +58,7 @@ SECRETS_FILE, SERVER_STATE_FILE, SYNC_QUEUE_DB_NAME, + SYNC_STATE_FILENAME, TEST_RUNS_JSON_NAME, ) @@ -70,8 +66,6 @@ from exlab_wizard.constants.keyring import ( KEYRING_SERVICE, KEYRING_USERNAME_LIMS, - KEYRING_USERNAME_NAS_TEMPLATE, - keyring_nas_username, ) # ---- Limits (Backend Β§4, Β§6, Β§8.1.1, Β§15; Frontend Β§4.6) ------------------- @@ -141,10 +135,10 @@ from exlab_wizard.constants.schema_versions import ( CREATION_JSON_VERSION, EQUIPMENT_JSON_VERSION, - INGEST_JSON_VERSION, OFFLINE_CATALOGUE_VERSION, README_FIELDS_JSON_VERSION, README_FRONT_MATTER_SCHEMA_VERSION, + SYNC_STATE_JSON_VERSION, TEST_RUNS_JSON_VERSION, ) @@ -161,7 +155,6 @@ "BEARER_REGEX", "CACHE_DIR_NAME", "CENTRAL_LOG_FILE", - "CHECKSUMS_RELATIVE", "COPIER_MANIFEST_NAME", "CREATION_JSON_NAME", # Schema versions @@ -173,12 +166,9 @@ "EQUIPMENT_ID_REGEX", "EQUIPMENT_JSON_NAME", "EQUIPMENT_JSON_VERSION", - "INGEST_JSON_NAME", - "INGEST_JSON_VERSION", # Keyring "KEYRING_SERVICE", "KEYRING_USERNAME_LIMS", - "KEYRING_USERNAME_NAS_TEMPLATE", "LABEL_MAX_LENGTH", "LIMS_CACHE_DB_NAME", "LOG_FILE_TEMPLATE", @@ -223,8 +213,12 @@ "SESSION_GC_AFTER_SECONDS", "SIGTERM_DRAIN_TIMEOUT_SECONDS", "SYNC_QUEUE_DB_NAME", + "SYNC_STATE_FILENAME", + "SYNC_STATE_JSON_VERSION", "TEMPLATE_QUESTION_ID_PATTERN", "TEMPLATE_QUESTION_ID_REGEX", + "TEST_MODE_ENV", + "TEST_MODE_PREFIX", "TEST_RUNS_DIR_NAME", "TEST_RUNS_JSON_NAME", "TEST_RUNS_JSON_VERSION", @@ -241,22 +235,20 @@ # Enum classes "AuditScopeKind", "BandwidthDay", - "CompletenessSignal", "CreationLevel", "DirectoryLevel", "FieldType", "FindingKind", - "IngestState", "LIMSProjectSource", "LIMSProjectStatus", "NextAction", - "OrchestratorTransportType", "Platform", "PluginSourceRoot", "PluginStatus", "ProblemClass", "RunKind", "RunScope", + "RunSyncState", "SessionKind", "SetupNextAction", "SetupState", @@ -266,7 +258,5 @@ "SyncStatus", "TemplateType", "Tier", - "TransportType", "TreeProjectStatus", - "keyring_nas_username", ] diff --git a/src/exlab_wizard/constants/app.py b/src/exlab_wizard/constants/app.py index 73b5472..9872071 100644 --- a/src/exlab_wizard/constants/app.py +++ b/src/exlab_wizard/constants/app.py @@ -13,3 +13,21 @@ # constants/app.py (this file) and keeping in sync with the cache # directory name in constants/filenames.py. APP_NAME: str = "exlab-wizard" + +# Runtime opt-in flag: when set to a truthy value the config loader +# prefixes every ``equipment[i].id`` with :data:`TEST_MODE_PREFIX` so +# the resulting on-disk + NAS run directories sort under a single +# ``TEST_/...`` namespace that operators can identify (and +# later delete) without sifting individual run leaves. The wizard's +# downstream code paths (path construction, run discovery, NAS sync +# targets) only ever see the prefixed ID, so no other module needs to +# know about test mode. Truthy values are ``"1"`` / ``"true"`` / +# ``"yes"`` / ``"on"`` (case-insensitive); any other value (including +# unset / empty) leaves IDs unchanged. +TEST_MODE_ENV: str = "EXLAB_WIZARD_TEST_MODE" + +# Equipment-ID prefix applied by :func:`exlab_wizard.config.loader.apply_test_mode_prefix` +# when :data:`TEST_MODE_ENV` is set to a truthy value. Must satisfy the +# equipment-ID regex (``^[A-Z][A-Z0-9_]*$``) so the prefixed value +# round-trips through the model's id validator. +TEST_MODE_PREFIX: str = "TEST_" diff --git a/src/exlab_wizard/constants/enums.py b/src/exlab_wizard/constants/enums.py index 79565ee..30c2805 100644 --- a/src/exlab_wizard/constants/enums.py +++ b/src/exlab_wizard/constants/enums.py @@ -114,13 +114,23 @@ class LIMSProjectSource(StrEnum): OFFLINE_CATALOGUE = "offline_catalogue" -class IngestState(StrEnum): - """State machine for the NAS-ingest workflow. Backend Spec Β§13.3.""" +class RunSyncState(StrEnum): + """Derived run-level rollup of a run's per-file NAS sync progress. + + Operator-free per-file NAS sync design (2026-05-21). This rollup is + *never persisted*: it is computed on read from ``sync_state.json`` by + ``SyncStateWriter.rollup_state`` because the ``SYNCING``/``SYNCED`` + distinction can oscillate (a ``SYNCED`` run whose file is modified + again returns to ``SYNCING``). + + * ``SYNCING`` -- at least one tracked file is unverified, or no files are + tracked yet. + * ``SYNCED`` -- every tracked file has been verified on the NAS. + * ``CLEARED`` -- the run's staging copy has been cleaned up. + """ - STAGING = "staging" - COMPLETE = "complete" - SYNC_QUEUED = "sync_queued" - SYNC_VERIFIED = "sync_verified" + SYNCING = "syncing" + SYNCED = "synced" CLEARED = "cleared" @@ -130,52 +140,36 @@ class SetupState(StrEnum): Backend Spec Β§4.9.1. Values are the same strings as the member names (lower case) by convention. - ``INCOMPLETE_NO_ORCHESTRATOR`` is the GUI/Orchestrator Redesign Β§3.1 - addition: ``orchestrator.label`` + ``orchestrator.staging_root`` are - always required (no longer gated on a removed ``enabled`` toggle) so - they join the setup-incomplete gate. + ``INCOMPLETE_NO_ORCHESTRATOR`` (GUI/Orchestrator Redesign Β§3.1) trips on a + missing ``orchestrator.label`` -- the required workstation identity. + ``orchestrator.staging_root`` is opt-in and does not gate setup (a blank + value just means this device is not a staging PC). """ INCOMPLETE_NO_CONFIG = "incomplete_no_config" INCOMPLETE_MISSING_PATHS = "incomplete_missing_paths" INCOMPLETE_NO_ORCHESTRATOR = "incomplete_no_orchestrator" INCOMPLETE_NO_EQUIPMENT = "incomplete_no_equipment" + INCOMPLETE_NO_NAS_REMOTE = "incomplete_no_nas_remote" INCOMPLETE_NO_LIMS = "incomplete_no_lims" INCOMPLETE_LIMS_UNREACHABLE = "incomplete_lims_unreachable" READY = "ready" -class TransportType(StrEnum): - """NAS sync transport. Backend Spec Β§7.1.3.""" - - RCLONE = "rclone" - RSYNC_SSH = "rsync_ssh" - - class SyncMode(StrEnum): """Per-equipment sync role. GUI/Orchestrator Redesign Spec Β§3.2. Replaces the device-level orchestrator-mode toggle. Stored under ``sync_mode`` on each ``EquipmentConfig`` entry. An equipment is never - both: ``nas`` requires ``transport`` and forbids - ``orchestrator_staging_transport``; ``stage`` requires - ``orchestrator_staging_transport`` and forbids ``transport``. + both: ``nas`` syncs runs directly to the NAS remote defined in the + ``nas:`` block; ``stage`` pushes to the staging-PC remote defined by + ``orchestrator.staging_remote`` / ``staging_base_root`` instead. """ NAS = "nas" STAGE = "stage" -class CompletenessSignal(StrEnum): - """How a directory signals that its contents are finalized. - - Backend Spec Β§9 and Β§13.5. - """ - - SENTINEL_FILE = "sentinel_file" - MANIFEST = "manifest" - - class StagingCleanupMode(StrEnum): """How NAS staging directories are eventually purged. Backend Spec Β§13.7.""" @@ -203,17 +197,6 @@ class CreationLevel(StrEnum): RUN = "run" -class OrchestratorTransportType(StrEnum): - """How the orchestrator delivered run data to the staging area. - - Distinct from :class:`TransportType` (which describes the NAS sync - transport). Stored under ``transport`` in ingest.json. Backend Spec Β§13.3. - """ - - SMB_MOUNT = "smb_mount" - FILE_TRANSFER = "file_transfer" - - class FieldType(StrEnum): """Allowed input types for README field declarations. Backend Spec Β§10.""" @@ -302,6 +285,7 @@ class SetupNextAction(StrEnum): SET_PATHS = "set_paths" ADD_EQUIPMENT = "add_equipment" + CONFIGURE_RCLONE_REMOTE = "configure_rclone_remote" CONFIGURE_LIMS = "configure_lims" TEST_LIMS = "test_lims" diff --git a/src/exlab_wizard/constants/filenames.py b/src/exlab_wizard/constants/filenames.py index a798ad3..1b14d66 100644 --- a/src/exlab_wizard/constants/filenames.py +++ b/src/exlab_wizard/constants/filenames.py @@ -20,8 +20,9 @@ # Cache filename for per-equipment static metadata. Backend Spec Β§11.4.1. EQUIPMENT_JSON_NAME: str = "equipment.json" -# Cache filename for the NAS ingest state machine. Backend Spec Β§13.4. -INGEST_JSON_NAME: str = "ingest.json" +# Cache filename for the per-run quiescence-driven per-file sync state. +# Operator-free per-file NAS sync design (2026-05-21). +SYNC_STATE_FILENAME: str = "sync_state.json" # Cache filename for the per-equipment test-run history. Backend Spec Β§11.4.2. TEST_RUNS_JSON_NAME: str = "test_runs.json" @@ -39,7 +40,6 @@ # Path (relative to the run/project root) of the integrity-checksum file # written by the wizard after a successful creation. Backend Spec Β§11.3. -CHECKSUMS_RELATIVE: str = f"{CACHE_DIR_NAME}/checksums.sha256" # Manifest filename inside a Copier template root. Backend Spec Β§5.2. COPIER_MANIFEST_NAME: str = "copier.yml" diff --git a/src/exlab_wizard/constants/keyring.py b/src/exlab_wizard/constants/keyring.py index b42a403..40ff15b 100644 --- a/src/exlab_wizard/constants/keyring.py +++ b/src/exlab_wizard/constants/keyring.py @@ -1,9 +1,13 @@ """OS-keyring service/username conventions used for credential storage. -The wizard stores at most one LIMS credential plus one credential per -configured equipment in the OS keyring. The service name and username -templates are committed by the design spec so that the same conventions -hold across releases and reinstalls. +The wizard stores at most one LIMS credential in the OS keyring. The +service name and username are committed by the design spec so that the +same conventions hold across releases and reinstalls. + +rclone.conf NAS-sync migration: NAS credentials no longer live in the +keyring -- they are defined entirely by the named remote in the +operator's ``rclone.conf`` -- so the per-equipment NAS keyring +username/template were removed. """ from __future__ import annotations @@ -16,19 +20,3 @@ # Username under which the LIMS credential is stored. Backend Spec Β§7.4.1. KEYRING_USERNAME_LIMS: str = "lims" - -# Template for the per-equipment NAS credential username. Format the -# template via ``keyring_nas_username`` rather than ``str.format`` directly. -# Backend Spec Β§7.4.1. -KEYRING_USERNAME_NAS_TEMPLATE: str = "nas:{equipment_id}" - - -def keyring_nas_username(equipment_id: str) -> str: - """Return the keyring username for the given equipment's NAS credential. - - Equipment IDs are not validated here -- callers feed in an ID that has - already passed ``EQUIPMENT_ID_PATTERN`` via the field validator. See - Backend Spec Β§7.4.1. - """ - - return KEYRING_USERNAME_NAS_TEMPLATE.format(equipment_id=equipment_id) diff --git a/src/exlab_wizard/constants/schema_versions.py b/src/exlab_wizard/constants/schema_versions.py index d917bfa..543f7bc 100644 --- a/src/exlab_wizard/constants/schema_versions.py +++ b/src/exlab_wizard/constants/schema_versions.py @@ -14,9 +14,9 @@ # Version of the per-equipment ``readme_fields.json`` cache. Backend Spec Β§11.4. README_FIELDS_JSON_VERSION: str = "1.1" -# Version of the per-run ``ingest.json`` cache produced during NAS ingest. -# Backend Spec Β§13.4. -INGEST_JSON_VERSION: str = "1.1" +# Version of the per-run ``sync_state.json`` cache produced by the +# quiescence-driven per-file NAS sync poller (2026-05-21 design). +SYNC_STATE_JSON_VERSION: str = "1.0" # Version of the per-equipment ``equipment.json`` cache. Backend Spec Β§11.4.1. EQUIPMENT_JSON_VERSION: str = "1.0" diff --git a/src/exlab_wizard/controller/__init__.py b/src/exlab_wizard/controller/__init__.py index 4bc23c9..b7d480c 100644 --- a/src/exlab_wizard/controller/__init__.py +++ b/src/exlab_wizard/controller/__init__.py @@ -18,7 +18,12 @@ RunCreateRequest, SessionHandle, ) -from exlab_wizard.controller.session_store import Session, SessionStore +from exlab_wizard.controller.session_store import ( + Session, + SessionStore, + on_operations_panel, + project_identifier, +) from exlab_wizard.controller.state_machine import ( VALID_TRANSITIONS, Phase, @@ -43,5 +48,7 @@ "SessionState", "SessionStore", "assert_transition", + "on_operations_panel", + "project_identifier", "state_to_phase", ] diff --git a/src/exlab_wizard/controller/creation.py b/src/exlab_wizard/controller/creation.py index 6880c2e..edd207c 100644 --- a/src/exlab_wizard/controller/creation.py +++ b/src/exlab_wizard/controller/creation.py @@ -33,7 +33,10 @@ import asyncio import contextlib +import getpass +import os import shutil +import socket from collections.abc import AsyncIterator from dataclasses import dataclass, field from datetime import UTC, datetime @@ -52,7 +55,6 @@ ) from exlab_wizard.cache.creation_writer import CreationWriter from exlab_wizard.cache.equipment import EquipmentCacheWriter -from exlab_wizard.cache.ingest_writer import default_host from exlab_wizard.cache.log_writer import append_log_line, format_log_line from exlab_wizard.config.models import Config from exlab_wizard.constants import ( @@ -65,6 +67,7 @@ OBJECTIVE_MAX_LENGTH, README_FILE_NAME, CreationLevel, + FieldType, LIMSProjectSource, PluginStatus, RunKind, @@ -90,11 +93,19 @@ compose_run_path, creation_json_path, equipment_json_path, + readme_fields_json_path, validate_project_name, ) from exlab_wizard.plugins.base import PluginContext from exlab_wizard.plugins.host import InputRequiredPayload, PluginHost, PluginPassResult from exlab_wizard.plugins.logger import HostPluginLogger +from exlab_wizard.readme import ( + CoreFields, + CustomField, + ReadmeContext, + SystemFields, + TemplateFieldDecl, +) from exlab_wizard.template.copier_driver import ( CORE_README_FIELD_IDS, RenderResult, @@ -185,40 +196,31 @@ class SessionHandle: # --------------------------------------------------------------------------- -@dataclass(frozen=True) -class ReadmeContext: - """Inputs handed to the README generator. Phase 8 owns the canonical type; - this lightweight stand-in lets Phase 7 ship before Phase 8 lands.""" - - label: str - operator: str - objective: str - equipment_id: str - project_short_id: str - run_kind: str - variables: dict[str, Any] - template: ResolvedTemplate - extra_fields: dict[str, Any] = field(default_factory=dict) - - class ReadmeGeneratorProtocol(Protocol): - """The README generator surface the controller depends on. Phase 8.""" + """The README generator surface the controller depends on. Backend Β§10. - async def generate(self, dst: Path, ctx: ReadmeContext) -> Path: ... + Mirrors :meth:`exlab_wizard.readme.ReadmeGenerator.generate`: validate + the composed :class:`~exlab_wizard.readme.ReadmeContext`, write both + ``README.md`` and ``readme_fields.json``, and return ``(readme, cache)``. + """ + + async def generate(self, dst: Path, ctx: ReadmeContext) -> tuple[Path, Path]: ... class NoOpReadmeGenerator: - """Minimal README generator used until Phase 8 lands the real one. + """Lightweight README generator for tests / headless fixtures. - Writes a tiny ``README.md`` containing only the core fields so the - post-validate pass has something to scan. + Writes a tiny ``README.md`` containing only the core fields -- enough + for the post-validate pass to scan -- and reports the cache path + without performing the full Β§10 field merge or validation. Production + injects the real :class:`~exlab_wizard.readme.ReadmeGenerator`. """ - async def generate(self, dst: Path, ctx: ReadmeContext) -> Path: + async def generate(self, dst: Path, ctx: ReadmeContext) -> tuple[Path, Path]: readme = dst / README_FILE_NAME - body = f"# {ctx.label}\n\nOperator: {ctx.operator}\n\n{ctx.objective}\n" + body = f"# {ctx.core.label}\n\nOperator: {ctx.core.operator}\n\n{ctx.core.objective}\n" readme.write_text(body, encoding="utf-8") - return readme + return readme, readme_fields_json_path(dst) class NASSyncProtocol(Protocol): @@ -289,6 +291,19 @@ def session_store(self) -> SessionStore: """Expose the in-memory session store for the API surface.""" return self._sessions + def apply_config(self, config: Config, *, plugin_host: PluginHost | None = None) -> None: + """Swap the controller's config (and optionally plugin host) in place. + + Every config read happens at create-time, so reassigning + ``self._config`` makes a live settings save take effect on the + next ``create_*`` call without a tray relaunch. ``plugin_host`` is + re-injected only when the coordinator rebuilt it (a + ``paths.plugin_dir`` change); otherwise the existing host is kept. + """ + self._config = config + if plugin_host is not None: + self._plugin_host = plugin_host + # ------------------------------------------------------------------ # Public API # ------------------------------------------------------------------ @@ -880,6 +895,71 @@ async def on_input_required(payload: InputRequiredPayload) -> dict[str, Any] | N on_input_required=on_input_required, ) + def _build_readme_context( + self, + *, + req: ProjectCreateRequest | RunCreateRequest, + resolved: ResolvedTemplate, + dst: Path, + ) -> ReadmeContext: + """Compose the Β§10 four-layer :class:`ReadmeContext` for ``req``. + + Maps the template's ``_exlab_readme.fields`` and the config + ``readme.defaults`` into typed field declarations, partitions the + operator-supplied ``readme_extra`` values across the template / + config / custom layers by id, and fills the auto-managed system + block (Backend Spec Β§10.6). Reads ``self._config`` at call time so + a live settings reload is reflected on the next creation. + """ + template_decls = _readme_decls_from_template(resolved.extra_readme_fields) + config_decls = _readme_decls_from_config(self._config.readme.defaults) + template_ids = {decl.id for decl in template_decls} + config_ids = {decl.id for decl in config_decls} + + template_fields: dict[str, Any] = {} + config_fields: dict[str, Any] = {} + custom_fields: list[CustomField] = [] + for key, value in req.readme_extra.items(): + if key in template_ids: + template_fields[key] = value + elif key in config_ids: + config_fields[key] = value + elif key in CORE_README_FIELD_IDS: + # Core fields live in their own layer; never echoed as custom. + continue + else: + custom_fields.append( + CustomField(label=key, value="" if value is None else str(value)) + ) + + is_run = isinstance(req, RunCreateRequest) + equipment = next( + (entry for entry in self._config.equipment if entry.id == req.equipment_id), + None, + ) + system = SystemFields( + created=utc_now(), + created_by=_os_username(), + equipment={"id": req.equipment_id, "label": equipment.label if equipment else ""}, + template={"name": resolved.name, "version": resolved.exlab_version}, + # Β§10.6: ``project`` is the machine-safe LIMS short id recorded in + # README metadata (Β§3.1) -- distinct from the human-readable + # ``/`` folder segment. ``run`` is the run directory name. + project=self._short_id_for(req), + run=dst.name if is_run else None, + run_kind=self._run_kind_value_for(req) if is_run else "", + ) + return ReadmeContext( + level=CreationLevel.RUN if is_run else CreationLevel.PROJECT, + core=CoreFields(label=req.label, operator=req.operator, objective=req.objective), + template_fields=template_fields, + config_fields=config_fields, + custom_fields=custom_fields, + system=system, + template_field_decls=template_decls, + config_field_decls=config_decls, + ) + async def _write_cache( self, *, @@ -891,19 +971,10 @@ async def _write_cache( plugin_result: PluginPassResult, ) -> CreationJson: """Write README + creation.json into the destination tree.""" - # Render README via the (Phase 8) generator. - readme_ctx = ReadmeContext( - label=req.label, - operator=req.operator, - objective=req.objective, - equipment_id=req.equipment_id, - project_short_id=self._short_id_for(req), - run_kind=(req.run_kind.value if isinstance(req, RunCreateRequest) else "project"), - variables=dict(req.variables), - template=resolved, - extra_fields=dict(req.readme_extra), - ) - await self._readme_generator.generate(dst, readme_ctx) + # Render README.md + readme_fields.json via the Β§10 generator. + readme_ctx = self._build_readme_context(req=req, resolved=resolved, dst=dst) + readme_path, readme_cache_path = await self._readme_generator.generate(dst, readme_ctx) + _log.debug("README written: %s (cache: %s)", readme_path, readme_cache_path) # Build the CreationJson payload. get_cache_dir(dst).mkdir(parents=True, exist_ok=True) @@ -963,18 +1034,14 @@ async def _write_cache( # Redesign Β§3.1: creation.json always carries the orchestrator # block. Redesign Β§3.3: the block carries the producing equipment's - # label + completeness-signal info so a receiving orchestrator - # can auto-discover the relayed equipment without a per-equipment - # config of its own. + # label so a receiving orchestrator can auto-discover the relayed + # equipment without a per-equipment config of its own. eq = next((e for e in self._config.equipment if e.id == req.equipment_id), None) orchestrator_block = OrchestratorBlock( enabled=True, - host=default_host(), + host=socket.gethostname(), label=self._config.orchestrator.label, equipment_label=eq.label if eq else None, - completeness_signal=eq.completeness_signal if eq else None, - sentinel_filename=eq.sentinel_filename if eq else None, - manifest_filename=eq.manifest_filename if eq else None, ) payload = CreationJson( @@ -1199,6 +1266,76 @@ def _required_field_ids(extra_fields: list[dict[str, Any]]) -> tuple[str, ...]: return tuple(out) +def _readme_decls_from_template(entries: list[dict[str, Any]]) -> list[TemplateFieldDecl]: + """Map a template's ``_exlab_readme.fields`` dicts to typed declarations. + + Entries without a string ``id`` are skipped (mirrors + :func:`_required_field_ids`); ``type`` is coerced to + :class:`~exlab_wizard.constants.FieldType` so the generator can + type-check values against it. An unknown ``type`` raises ``ValueError``, + which the pipeline surfaces as a failed creation. + """ + decls: list[TemplateFieldDecl] = [] + for entry in entries: + if not isinstance(entry, dict): + continue + fid = entry.get("id") + if not isinstance(fid, str) or not fid: + continue + options = entry.get("options") + hint = entry.get("hint") + decls.append( + TemplateFieldDecl( + id=fid, + label=str(entry.get("label", fid)), + type=FieldType(str(entry.get("type", FieldType.STRING.value))), + required=bool(entry.get("required", False)), + default=entry.get("default", ""), + options=list(options) if isinstance(options, list) else None, + hint=hint if isinstance(hint, str) else None, + ) + ) + return decls + + +def _readme_decls_from_config(defaults: list[Any]) -> list[TemplateFieldDecl]: + """Map ``config.readme.defaults`` entries to typed declarations. + + Core field ids are dropped -- they are backend-managed and live in + their own layer (Backend Spec Β§10.3), matching the required-field gate + in :meth:`CreationController._validate_inputs`. + """ + decls: list[TemplateFieldDecl] = [] + for entry in defaults: + if entry.id in CORE_README_FIELD_IDS: + continue + decls.append( + TemplateFieldDecl( + id=entry.id, + label=entry.label, + type=entry.type, + required=entry.required, + default=entry.default, + options=list(entry.options) if entry.options else None, + hint=entry.hint, + ) + ) + return decls + + +def _os_username() -> str: + """Return the creating OS user for the README ``system.created_by``. + + Distinct from the experiment ``operator`` (Backend Spec Β§10.6). Falls + back to the ``USER`` / ``USERNAME`` environment variables and finally + ``"unknown"`` when the platform cannot report a login name. + """ + try: + return getpass.getuser() + except Exception: + return os.environ.get("USER") or os.environ.get("USERNAME") or "unknown" + + def _has_hard_finding(findings: list[Finding]) -> bool: return any(f.tier == Tier.HARD.value for f in findings) diff --git a/src/exlab_wizard/controller/session_store.py b/src/exlab_wizard/controller/session_store.py index be59870..cb714cc 100644 --- a/src/exlab_wizard/controller/session_store.py +++ b/src/exlab_wizard/controller/session_store.py @@ -126,6 +126,15 @@ def get(self, session_id: str) -> Session | None: """Return the session keyed by ``session_id``, or ``None``.""" return self._sessions.get(session_id) + def iter_sorted(self) -> list[tuple[str, Session]]: + """Return ``(session_id, session)`` pairs, oldest-created first. + + The public, narrow read accessor over the otherwise-private + session map: used by the ``/operations`` route and the in-process + Operations panel so neither reaches into ``_sessions`` directly. + """ + return sorted(self._sessions.items(), key=lambda pair: pair[1].created_at) + def transition(self, session_id: str, new_state: SessionState) -> None: """Move ``session_id`` to ``new_state``, updating ``current_phase``. @@ -232,11 +241,48 @@ def _gc_once(self, gc_age: timedelta) -> None: continue with suppress(ValueError): self.transition(session_id, SessionState.ABORTED) - self.close( - session_id, - {"code": "session_abandoned", "reason": "no client heartbeat for >1h"}, - ) + outcome = {"code": "session_abandoned", "reason": "no client heartbeat for >1h"} + self.close(session_id, outcome) + # Publish a terminal frame so any live ``subscribe()`` consumer + # (the in-process wizard progress loop) wakes and exits instead + # of parking forever on ``queue.get()`` -- this GC path bypasses + # the controller's ``_publish``, so nothing else closes the queue. + if session.event_queue is not None: + with suppress(Exception): + session.event_queue.put_nowait({"kind": "failed", "error": outcome}) _log.info( "session GC closed abandoned INPUT_REQUIRED session", extra={"context": {"session_id": session_id}}, ) + + +def on_operations_panel(session: Session) -> bool: + """Return ``True`` when ``session`` belongs on the Operations panel. + + Frontend Β§9.5 membership rule, defined once: everything except the + terminal ``DONE`` / ``ABORTED`` (``FAILED`` stays so a recent failure + remains visible). Shared by the ``/operations`` route and the in-process + panel so the rule can't drift between the HTTP and GUI surfaces. + """ + return session.state not in (SessionState.DONE, SessionState.ABORTED) + + +def project_identifier(request: Any) -> str | None: + """Pluck a project identifier off a project / run creation request. + + A project request carries the LIMS ``short_id`` in its ``lims_project`` + block; a run request carries the parent project's folder name (the + human-readable LIMS name, Backend Spec Β§3.2). Shared by the + ``/operations`` route and the in-process Operations panel so both label + rows identically. + """ + short = getattr(request, "project_short_id", None) + if short: + return short + lims_project = getattr(request, "lims_project", None) + if isinstance(lims_project, dict): + value = lims_project.get("short_id") + if isinstance(value, str) and value: + return value + project_name = getattr(request, "project_name", None) + return project_name if isinstance(project_name, str) and project_name else None diff --git a/src/exlab_wizard/lims/catalogue.py b/src/exlab_wizard/lims/catalogue.py index 922fbc0..3050ca7 100644 --- a/src/exlab_wizard/lims/catalogue.py +++ b/src/exlab_wizard/lims/catalogue.py @@ -52,8 +52,9 @@ class OfflineCatalogue: """Decoded offline catalogue. Backend Spec Β§7.2.9.1. ``schema_version`` is pinned to the constant declared in - :mod:`exlab_wizard.constants.schema_versions`; mismatches surface - as :class:`exlab_wizard.errors.ConfigError`. + :mod:`exlab_wizard.constants.schema_versions`; a mismatch is treated + as catalogue-absent (WARN + ``None``) per Β§7.2.9.3 -- see + :func:`read_catalogue`. ``lims_endpoint`` is verified by :func:`read_catalogue` against the consumer's configured LIMS endpoint; mismatches are rejected per @@ -68,18 +69,25 @@ class OfflineCatalogue: projects: list[LIMSProject] -def read_catalogue(path: Path, *, expected_endpoint: str) -> OfflineCatalogue: +def read_catalogue(path: Path, *, expected_endpoint: str) -> OfflineCatalogue | None: """Read and validate the catalogue file. - Raises :class:`exlab_wizard.errors.ConfigError` on any of: + Returns ``None`` (and logs a WARN) when the ``schema_version`` does not + match :data:`exlab_wizard.constants.OFFLINE_CATALOGUE_VERSION`: per + Backend Spec Β§7.2.9.3 a version mismatch is treated as *catalogue + absent* (the consumer falls through to its next picker source), rather + than a hard error. (Policy decision, 2026-05-29: the catalogue follows + the "treat as absent / WARN" rule of Β§7.2.9.3; it is deliberately *not* + the Β§11.9.2 major-only cache-file gate.) + + Raises :class:`exlab_wizard.errors.ConfigError` on the genuine-error + cases: - file missing / unreadable - JSON parse error - - ``schema_version`` is not the constant - :data:`exlab_wizard.constants.OFFLINE_CATALOGUE_VERSION` - - ``lims_endpoint`` differs from ``expected_endpoint`` (per - Β§7.2.9.3 the producer's LIMS must match the consumer's - configuration; cross-lab leakage is rejected, not warned). + - ``lims_endpoint`` differs from ``expected_endpoint`` (per Β§7.2.9.3 + the producer's LIMS must match the consumer's configuration; + cross-lab leakage is rejected, not warned). """ try: decoded = read_msgspec_json_raw(Path(path)) @@ -90,17 +98,19 @@ def read_catalogue(path: Path, *, expected_endpoint: str) -> OfflineCatalogue: msg = f"offline catalogue at {path} is not valid JSON: {exc}" raise ConfigError(msg) from exc - # TODO(spec): the OFFLINE_CATALOGUE_VERSION check below is an - # exact-match (major+minor); this is intentionally stricter than the - # Β§11.9.2 major-only gate used for cache files. Revisit once the spec - # clarifies whether offline catalogues should follow the same policy. + # Β§7.2.9.3: a schema_version mismatch is treated as "catalogue absent" + # (WARN + fall through), not a hard error -- so a future producer bump + # never crashes a consumer; it simply ignores the unreadable catalogue. schema_version = decoded.get("schema_version") if schema_version != OFFLINE_CATALOGUE_VERSION: - msg = ( - f"offline catalogue at {path} has schema_version " - f"{schema_version!r}; expected {OFFLINE_CATALOGUE_VERSION!r}" + logger.warning( + "offline catalogue at %s has schema_version %r; expected %r -- " + "treating as absent (Β§7.2.9.3)", + path, + schema_version, + OFFLINE_CATALOGUE_VERSION, ) - raise ConfigError(msg) + return None lims_endpoint = decoded.get("lims_endpoint", "") if lims_endpoint != expected_endpoint: diff --git a/src/exlab_wizard/orchestrator/__init__.py b/src/exlab_wizard/orchestrator/__init__.py index d8fb9f6..627b116 100644 --- a/src/exlab_wizard/orchestrator/__init__.py +++ b/src/exlab_wizard/orchestrator/__init__.py @@ -1,35 +1,28 @@ """Orchestrator-mode runtime. Backend Spec Β§12, Β§13. -This package implements the orchestrator-only features that activate when -``config.orchestrator.enabled`` is True: +This package implements the orchestrator-mode features that activate when a +``config.orchestrator.staging_root`` is configured or any ``nas``-mode +equipment exists: -* :class:`StagingWatcher` -- background polling task that walks - ``staging_root``, writes the initial ``ingest.json`` for each new run, - and drives the five-state lifecycle described in Β§13.3. -* :func:`cleanup_eligible` / :func:`clear_run` -- helpers for both the - manual operator flow and the scheduled background sweeper. +* :class:`QuiescenceSyncPoller` -- background polling task that discovers + every run pending NAS sync (orchestrator-staged *and* ``nas``-mode) and + enqueues a run once it has at least one quiescent file. It is the single + operator-free auto-sync trigger (operator-free per-file NAS sync design, + 2026-05-21), superseding the retired sentinel/manifest ``StagingWatcher``. * :func:`list_staged_runs` -- read-side query that backs the Staging UI panel and the ``GET /staging`` endpoint. - -The orchestrator never touches single-equipment workstations: every -public surface in the ``api/routers/staging.py`` router is gated behind -``config.orchestrator.enabled`` and returns 503 with -``code: "orchestrator_disabled"`` otherwise. """ from __future__ import annotations -from exlab_wizard.orchestrator.cleanup import cleanup_eligible, clear_run +from exlab_wizard.orchestrator.quiescence_poller import QuiescenceSyncPoller from exlab_wizard.orchestrator.staging_query import ( StagedRunSummary, list_staged_runs, ) -from exlab_wizard.orchestrator.staging_watcher import StagingWatcher __all__ = [ + "QuiescenceSyncPoller", "StagedRunSummary", - "StagingWatcher", - "cleanup_eligible", - "clear_run", "list_staged_runs", ] diff --git a/src/exlab_wizard/orchestrator/_scan.py b/src/exlab_wizard/orchestrator/_scan.py index f91a80e..b77c212 100644 --- a/src/exlab_wizard/orchestrator/_scan.py +++ b/src/exlab_wizard/orchestrator/_scan.py @@ -1,9 +1,10 @@ """Shared filesystem helpers for the orchestrator. Backend Spec Β§13.2. -Both :mod:`staging_query` and :mod:`staging_watcher` need to walk -``staging_root`` and discover run leaves; both also need to count files -and bytes under a run directory. Centralising these helpers keeps the -two modules in sync and avoids subtle drift in path conventions. +Both :mod:`staging_query` and :mod:`quiescence_poller` need to walk +``staging_root`` (and the ``nas``-mode equipment trees) to discover run +leaves; ``staging_query`` also counts files and bytes under a run +directory. Centralising these helpers keeps the modules in sync and +avoids subtle drift in path conventions. """ from __future__ import annotations @@ -21,6 +22,7 @@ __all__ = [ "count_files_and_bytes", "iter_subdirs", + "walk_equipment_run_leaves", "walk_run_leaves", ] @@ -50,35 +52,53 @@ def iter_subdirs(parent: Path) -> list[Path]: return out +def walk_equipment_run_leaves(equipment_dir: Path) -> list[Path]: + """Return every ``Run_*`` / ``TestRun_*`` directory under one equipment dir. + + ``equipment_dir`` is a single equipment's subtree + (``/``); runs live at ``//{Runs, + TestRuns}/`` per Β§13.2. GUI/Orchestrator Redesign Β§3.4 makes + experimental runs symmetric with test runs (both sit under a marker + folder). A misplaced ``Run_*`` directly under the project + (pre-redesign layout) is still surfaced so the validator can flag it. + + Distinct from :func:`walk_run_leaves`, which walks an equipment-first + *root* containing many equipment subtrees. The quiescence poller uses + this per-equipment form so a ``nas``-mode equipment's runs are + discovered without sweeping in a co-rooted ``stage``-mode equipment. + """ + leaves: list[Path] = [] + for project_dir in iter_subdirs(equipment_dir): + for child in iter_subdirs(project_dir): + if child.name == TEST_RUNS_DIR_NAME: + leaves.extend( + run_dir for run_dir in iter_subdirs(child) if is_test_run_dir(run_dir.name) + ) + elif child.name == RUNS_DIR_NAME: + leaves.extend( + run_dir for run_dir in iter_subdirs(child) if is_run_dir(run_dir.name) + ) + elif is_run_dir(child.name): + # Misplaced Run_* directly under the project β€” surface + # it so the validator's mode_prefix_mismatch rule can + # flag it as a hard finding. + leaves.append(child) + return leaves + + def walk_run_leaves(staging_root: Path) -> list[Path]: """Return every ``Run_*`` / ``TestRun_*`` directory under ``staging_root``. Per Β§13.2 the staging layout is - ``///{Runs,TestRuns}/``; - GUI/Orchestrator Redesign Β§3.4 makes experimental runs symmetric - with test runs (both sit under a marker folder). Misplaced - ``Run_*`` directly under the project (pre-redesign layout) is still - surfaced so the validator can flag it. + ``///{Runs,TestRuns}/``; this walks + an equipment-first *root* (many equipment subtrees). For a single + equipment's subtree use :func:`walk_equipment_run_leaves`. """ if not staging_root.exists(): return [] leaves: list[Path] = [] for equipment_dir in iter_subdirs(staging_root): - for project_dir in iter_subdirs(equipment_dir): - for child in iter_subdirs(project_dir): - if child.name == TEST_RUNS_DIR_NAME: - leaves.extend( - run_dir for run_dir in iter_subdirs(child) if is_test_run_dir(run_dir.name) - ) - elif child.name == RUNS_DIR_NAME: - leaves.extend( - run_dir for run_dir in iter_subdirs(child) if is_run_dir(run_dir.name) - ) - elif is_run_dir(child.name): - # Misplaced Run_* directly under the project β€” surface - # it so the validator's mode_prefix_mismatch rule can - # flag it as a hard finding. - leaves.append(child) + leaves.extend(walk_equipment_run_leaves(equipment_dir)) return leaves diff --git a/src/exlab_wizard/orchestrator/cleanup.py b/src/exlab_wizard/orchestrator/cleanup.py deleted file mode 100644 index 80d997b..0000000 --- a/src/exlab_wizard/orchestrator/cleanup.py +++ /dev/null @@ -1,209 +0,0 @@ -"""Staging-side cleanup helpers. Backend Spec Β§13.7. - -Once a run is verified on the NAS, the orchestrator deletes the local -staging copy. Two policies are supported: - -* ``manual`` (default for v1) -- only an explicit operator action - advances ``sync_verified`` -> ``cleared``. The watcher never auto-clears. -* ``scheduled`` -- runs whose ``sync_verified_at`` was at least - ``retain_hours`` ago are auto-cleared by the periodic sweep. - -Deletion is logged with file count and bytes freed (Β§13.7). - -Both helpers are pure read-side utilities except :func:`clear_run`, -which performs the on-disk delete and writes the ``cleared`` history -entry. The watcher keeps the responsibility of *deciding* when to call -:func:`clear_run` -- this module only enforces the policy and the -filesystem effect. -""" - -from __future__ import annotations - -import shutil -from datetime import datetime, timedelta -from pathlib import Path - -from exlab_wizard.api.schemas import IngestJson -from exlab_wizard.cache.ingest_writer import IngestWriter, default_host -from exlab_wizard.config.models import Config -from exlab_wizard.constants import ( - IngestState, - StagingCleanupMode, -) -from exlab_wizard.logging import get_logger -from exlab_wizard.orchestrator.staging_query import list_staged_runs -from exlab_wizard.paths import ingest_json_path -from exlab_wizard.utils.time import parse_utc_iso_or_none, utc_now_or - -__all__ = [ - "cleanup_eligible", - "clear_all_verified", - "clear_run", - "freed_bytes_and_count", -] - -_log = get_logger(__name__) - - -def cleanup_eligible( - *, - ingest: IngestJson, - config: Config, - now_utc: datetime | None = None, -) -> bool: - """Return True if the run's local staging copy should be cleared now. - - Backend Spec Β§13.7: - - * ``manual`` -- always returns False. The operator must invoke - :func:`clear_run` directly (UI button or API). - * ``scheduled`` -- returns True iff ``current_state == sync_verified`` - AND ``sync_verified_at + retain_hours <= now_utc``. - - A run that is not ``sync_verified`` is never eligible -- attempting - to clear earlier states is a contract violation that the watcher - must avoid. - """ - if ingest.current_state != IngestState.SYNC_VERIFIED.value: - return False - mode = config.orchestrator.staging_cleanup.mode - if mode == StagingCleanupMode.MANUAL.value: - return False - if mode != StagingCleanupMode.SCHEDULED.value: - # Defensive: the Pydantic Literal already constrains the values, - # but if a future mode is added without a code path here we - # default to "not eligible" -- the safer behaviour. - return False - verified_at = _find_state_timestamp(ingest, IngestState.SYNC_VERIFIED) - if verified_at is None: - return False - now = utc_now_or(now_utc) - retain_hours = config.orchestrator.staging_cleanup.retain_hours - return verified_at + timedelta(hours=retain_hours) <= now - - -async def clear_run( - run_path: Path, - *, - config: Config, - ingest_writer: IngestWriter, - host: str | None = None, -) -> tuple[int, int]: - """Remove the staged run directory and append the ``cleared`` entry. - - Returns ``(file_count, bytes_freed)`` so the caller can log/notify - accurately. The ingest entry is written **before** the deletion so a - crash mid-clear leaves a coherent state record. - - The function is idempotent: calling it after the directory is gone - is a no-op that returns ``(0, 0)`` and does not append a duplicate - history entry. - """ - _ = config # kept on the signature for spec parity / future hooks - if not run_path.exists(): # noqa: ASYNC240 -- one-shot stat, sync filelock cycle below - return 0, 0 - file_count, bytes_freed = freed_bytes_and_count(run_path) - ingest_path = ingest_json_path(run_path) - host_label = host or default_host() - if ingest_path.exists(): - await ingest_writer.append_state_transition( - ingest_path, - IngestState.CLEARED, - host=host_label, - ) - # Now delete the staged directory in full -- the ingest.json entry - # we just wrote is part of the directory and is acceptable to discard - # because Β§13 only requires the ``cleared`` entry to flow to NAS via - # the prior ``sync_verified`` transition (the NAS copy already has it). - shutil.rmtree(run_path, ignore_errors=True) - _log.info( - "staging cleared: path=%s files=%d bytes_freed=%d host=%s", - run_path, - file_count, - bytes_freed, - host_label, - ) - return file_count, bytes_freed - - -async def clear_all_verified( - *, - config: Config, - ingest_writer: IngestWriter, - host: str | None = None, -) -> list[str]: - """Clear every staged run currently in ``sync_verified`` state. - - Backend Spec Β§4.6: the file-explorer footer's *Clear verified runs* - bulk action. Walks the staging tree via :func:`list_staged_runs`, - filters rows whose ``current_state`` is :data:`IngestState.SYNC_VERIFIED`, - and calls :func:`clear_run` on each. Returns the list of run paths - (as strings) that were cleared, in the order they were processed, - so the API layer can report a count to the operator. - - Errors from a single :func:`clear_run` are logged and skipped; the - bulk action proceeds with the remaining rows so one corrupted - staging entry can't block the whole sweep. - """ - cleared: list[str] = [] - for summary in list_staged_runs(config=config): - if summary.current_state != IngestState.SYNC_VERIFIED.value: - continue - run_path = Path(summary.path) - try: - files, _bytes = await clear_run( - run_path, - config=config, - ingest_writer=ingest_writer, - host=host, - ) - except Exception as exc: - # The watcher writes a coherent ingest.json before the rmtree - # so a mid-clear crash leaves a recoverable state. Bulk - # callers can retry; we don't let one failure abort the rest. - _log.warning( - "clear_all_verified: clear_run failed for %s: %s", - run_path, - exc, - ) - continue - if files > 0: - cleared.append(str(run_path)) - if cleared: - _log.info("clear_all_verified: cleared %d run(s)", len(cleared)) - return cleared - - -def freed_bytes_and_count(run_path: Path) -> tuple[int, int]: - """Sum file count and byte total under ``run_path``. - - Counts files only (directories are not counted as files); the - ``.exlab-wizard/`` cache subtree is included because :func:`clear_run` - deletes the whole run. - """ - files = 0 - total = 0 - if not run_path.exists(): - return 0, 0 - for entry in run_path.rglob("*"): - try: - if entry.is_file(): - files += 1 - total += entry.stat().st_size - except OSError: - continue - return files, total - - -# --------------------------------------------------------------------------- -# Internal helpers -# --------------------------------------------------------------------------- - - -def _find_state_timestamp(ingest: IngestJson, target: IngestState) -> datetime | None: - """Return the latest history-entry ``at`` for ``target`` or None.""" - for entry in reversed(ingest.history): - if entry.get("state") != target.value: - continue - return parse_utc_iso_or_none(entry.get("at")) - return None diff --git a/src/exlab_wizard/orchestrator/quiescence_poller.py b/src/exlab_wizard/orchestrator/quiescence_poller.py new file mode 100644 index 0000000..b01ec29 --- /dev/null +++ b/src/exlab_wizard/orchestrator/quiescence_poller.py @@ -0,0 +1,372 @@ +"""Operator-free, per-file quiescence-driven NAS sync poller. + +Operator-free per-file NAS sync design (2026-05-21). The +:class:`QuiescenceSyncPoller` is the single auto-sync trigger for **every** +run pending NAS sync -- orchestrator-staged runs *and* runs acquired +directly on ``nas``-mode equipment. It supersedes the sentinel/manifest +``StagingWatcher`` and its five-state ``ingest.json`` machine. + +Each sweep (``poll_once``): + +1. **Discover runs** in both roots: + * stage-mode -- run-leaf directories under + ``config.orchestrator.staging_root``; + * nas-mode -- run-leaf directories under each ``nas``-mode equipment's + ``local_root`` tree (``///{Runs, + TestRuns}/``). +2. **Per-file quiescence.** The poller keeps an in-memory snapshot across + sweeps: for each file, its ``(st_size, st_mtime_ns)`` signature and the + wall-clock time the signature was *first observed*. A file is **quiet** + once that signature has been observed unchanged for at least + ``config.sync.quiescence_minutes``. Files matching any + ``config.sync.ignore_globs`` glob and the ``.exlab-wizard/`` cache dir + are skipped. Eligibility is measured from the poller's own observations + across sweeps -- *not* the absolute age of ``mtime`` -- because + transports (``rsync -t``, ``rclone``) preserve the source ``mtime``. +3. **Per-file eligibility.** A quiet file is *eligible* when its current + ``(st_size, st_mtime_ns)`` signature differs from the + ``synced_signature`` recorded for it in the run's ``sync_state.json`` + (a file with no record, or a record carrying a stale signature, is + eligible; a file matching its recorded signature has already synced at + its current state and is skipped). +4. **Enqueue.** Each discovered run with at least one eligible file is + enqueued via ``nas_sync.enqueue(run_path, files=[...])`` carrying the + run-relative paths of the eligible files. ``enqueue`` itself owns the + re-queue / no-op decision (a terminal job with a fresh subset is + re-armed; an active job is a no-op), so the poller no longer needs the + coarse "skip run with a job" guard. + +The poller is safe to cancel at any await point: it carries no on-disk +state of its own (the snapshot is purely in-memory and is rebuilt by +re-observing the filesystem on the next sweep). +""" + +from __future__ import annotations + +import asyncio +import contextlib +import fnmatch +import os +import time +from dataclasses import dataclass +from pathlib import Path +from typing import TYPE_CHECKING, Any, Protocol + +from exlab_wizard.config.models import Config +from exlab_wizard.constants import CACHE_DIR_NAME, SyncMode +from exlab_wizard.logging import get_logger +from exlab_wizard.orchestrator._scan import walk_equipment_run_leaves, walk_run_leaves + +if TYPE_CHECKING: + from exlab_wizard.cache.sync_state_writer import SyncStateWriter + +__all__ = ["FileSnapshot", "NASSyncLike", "QuiescenceSyncPoller"] + +_log = get_logger(__name__) + + +# --------------------------------------------------------------------------- +# Protocols (kept loose so production NASSyncClient and test stubs both fit) +# --------------------------------------------------------------------------- + + +class NASSyncLike(Protocol): + """The NAS-sync surface the poller and the Phase 3 staging code use. + + ``enqueue`` is what the poller itself calls; the ``staging`` router and + ``ui/mount`` run-status code additionally consult ``status`` / + ``get_by_run_path`` / ``list_all``. They are declared here so the + protocol documents the full surface that ``deps.nas_sync`` must + satisfy. Tests pass in-memory stubs that record the calls. + """ + + async def enqueue(self, run_path: Path, files: list[str] | None = ...) -> Any: ... + async def status(self, run_path: Path) -> str: ... + async def get_by_run_path(self, run_path: Path) -> Any: ... + async def list_all(self) -> Any: ... + + +@dataclass(slots=True) +class FileSnapshot: + """One file's observation record carried forward across sweeps. + + * ``signature`` -- the ``(st_size, st_mtime_ns)`` last observed. + * ``first_seen_monotonic`` -- the ``time.monotonic()`` value at which + that exact signature was *first* observed. Reset whenever the + signature changes; the settle window is measured from it. + """ + + signature: tuple[int, int] + first_seen_monotonic: float + + +class QuiescenceSyncPoller: + """Polls every run pending NAS sync and enqueues runs with eligible files. + + Constructor dependencies are a :class:`Config`, a + :class:`NASSyncClient`-shaped sync client, and a :class:`SyncStateWriter` + used (read-only) to skip files already synced at their current + ``(st_size, st_mtime_ns)`` signature. + + The start/stop/loop lifecycle mirrors the retired ``StagingWatcher``; + ``poll_once`` is exposed so tests can drive the poller synchronously. + """ + + def __init__( + self, + *, + config: Config, + nas_sync: NASSyncLike, + sync_state_writer: SyncStateWriter, + ) -> None: + self._config = config + self._nas_sync = nas_sync + self._sync_state_writer = sync_state_writer + self._task: asyncio.Task[None] | None = None + self._stopping = False + # Per-file observation snapshot, keyed by absolute path, carried + # across sweeps so the settle window can be measured. + self._snapshots: dict[Path, FileSnapshot] = {} + + def apply_config(self, config: Config) -> None: + """Swap the cached config in place so a live settings save applies. + + ``poll_once`` re-reads ``quiescence_minutes``, the equipment list, + the staging root, and the ignore globs from ``self._config`` every + sweep, and :meth:`_loop` re-reads ``poll_interval_seconds`` each + iteration -- so reassigning the config here makes every sync + setting take effect on the next sweep without a tray relaunch. + """ + self._config = config + + # ------------------------------------------------------------------ lifecycle + + async def start(self) -> None: + """Start the background polling task. Idempotent. + + Returns immediately; the task runs until :meth:`stop` is called or + the surrounding event loop tears down. + """ + if self._task is not None and not self._task.done(): + return + self._stopping = False + self._task = asyncio.create_task(self._loop(), name="exlab-quiescence-poller") + _log.info( + "quiescence poller started: poll_interval_s=%d quiescence_minutes=%d", + self._config.sync.poll_interval_seconds, + self._config.sync.quiescence_minutes, + ) + + async def stop(self) -> None: + """Cancel the background task and wait for it to exit. Idempotent.""" + self._stopping = True + if self._task is None: + return + self._task.cancel() + with contextlib.suppress(asyncio.CancelledError, Exception): + await self._task + self._task = None + _log.info("quiescence poller stopped") + + # ------------------------------------------------------------------ poll loop + + async def _loop(self) -> None: + try: + while not self._stopping: + # Re-read each iteration so a live ``apply_config`` swap of + # ``poll_interval_seconds`` takes effect on the next sweep + # without a tray relaunch. + interval = float(self._config.sync.poll_interval_seconds) + try: + await self.poll_once() + except asyncio.CancelledError: + raise + except Exception: # pragma: no cover -- defensive + _log.exception("quiescence poller sweep failed") + with contextlib.suppress(asyncio.TimeoutError): + await asyncio.wait_for( + asyncio.shield(asyncio.sleep(interval)), + timeout=interval + 1.0, + ) + except asyncio.CancelledError: + raise + + async def poll_once(self, *, now_monotonic: float | None = None) -> list[Path]: + """Run one discovery + quiescence + enqueue sweep. + + ``now_monotonic`` is injectable so tests can drive the settle + window with a controllable clock; production callers leave it + ``None`` and the poller reads ``time.monotonic()``. + + Returns the list of run paths enqueued on this sweep (in discovery + order) so tests can assert exactly which runs fired. + """ + now = time.monotonic() if now_monotonic is None else now_monotonic + runs = self._discover_runs() + settle_seconds = self._config.sync.quiescence_minutes * 60 + # Build the next-sweep snapshot fresh; files that vanished simply + # fall out of the carried-forward dict. + next_snapshots: dict[Path, FileSnapshot] = {} + enqueued: list[Path] = [] + for run_path in runs: + quiet_files: list[Path] = [] + for file_path in self._iter_run_files(run_path): + signature = self._signature(file_path) + if signature is None: + continue + prior = self._snapshots.get(file_path) + if prior is not None and prior.signature == signature: + snap = FileSnapshot(signature, prior.first_seen_monotonic) + else: + snap = FileSnapshot(signature, now) + next_snapshots[file_path] = snap + if now - snap.first_seen_monotonic >= settle_seconds: + quiet_files.append(file_path) + if not quiet_files: + continue + # Per-file eligibility: a quiet file is enqueued only when its + # current signature differs from the ``synced_signature`` + # recorded in ``sync_state.json`` (a file with no record, or a + # record with a stale signature, is eligible). ``enqueue`` + # itself owns the re-queue / no-op decision against any + # existing job, so the poller no longer pre-filters on job + # state. + eligible = await self._eligible_files(run_path, quiet_files) + if eligible: + await self._nas_sync.enqueue(run_path, eligible) + enqueued.append(run_path) + self._snapshots = next_snapshots + return enqueued + + # ------------------------------------------------------------------ discovery + + def _discover_runs(self) -> list[Path]: + """Return every run-leaf directory pending NAS sync. + + Stage-mode runs sit under ``orchestrator.staging_root`` (an + equipment-first root). Nas-mode runs sit under each ``nas``-mode + equipment's *own* subtree ``/`` -- NOT + the whole ``local_root`` tree, which is shared across equipment + (a co-rooted ``stage``-mode equipment's runs must not be swept in + here, they reach the NAS via the orchestrator's staging area). A + run discovered through both roots is de-duplicated. + """ + seen: set[Path] = set() + runs: list[Path] = [] + + def _add(leaf: Path) -> None: + resolved = _safe_resolve(leaf) + if resolved in seen: + return + seen.add(resolved) + runs.append(leaf) + + staging_root = self._config.orchestrator.staging_root + if staging_root: + for leaf in walk_run_leaves(Path(staging_root)): + _add(leaf) + for equipment in self._config.equipment: + if equipment.sync_mode != SyncMode.NAS: + continue + if not equipment.local_root: + continue + # Runs live at ``///...``; + # walk only this equipment's own subtree so a co-rooted + # ``stage``-mode equipment is never discovered here. + equipment_dir = Path(equipment.local_root) / equipment.id + for leaf in walk_equipment_run_leaves(equipment_dir): + _add(leaf) + return runs + + # ------------------------------------------------------------------ quiescence + + def _iter_run_files(self, run_path: Path) -> list[Path]: + """Return every non-ignored file under ``run_path``. + + Skips the ``.exlab-wizard/`` cache dir and any file whose name + matches a ``config.sync.ignore_globs`` glob. + """ + ignore_globs = self._config.sync.ignore_globs + out: list[Path] = [] + stack: list[Path] = [run_path] + while stack: + current = stack.pop() + try: + entries = list(os.scandir(current)) + except (FileNotFoundError, NotADirectoryError, PermissionError): + continue + for entry in entries: + if entry.name == CACHE_DIR_NAME and current == run_path: + continue + try: + if entry.is_dir(follow_symlinks=False): + stack.append(Path(entry.path)) + continue + if not entry.is_file(follow_symlinks=False): + continue + except OSError: + continue + if _matches_any_glob(entry.name, ignore_globs): + continue + out.append(Path(entry.path)) + return out + + @staticmethod + def _signature(file_path: Path) -> tuple[int, int] | None: + """Return ``(st_size, st_mtime_ns)`` for ``file_path`` or None.""" + try: + stat = file_path.stat() + except OSError: + return None + return (stat.st_size, stat.st_mtime_ns) + + async def _eligible_files( + self, + run_path: Path, + quiet_files: list[Path], + ) -> list[str]: + """Return the run-relative paths of quiet files needing a (re-)sync. + + A quiet file is eligible when its current ``(st_size, + st_mtime_ns)`` signature differs from the ``synced_signature`` + recorded for it in the run's ``sync_state.json`` -- i.e. it has + never synced, or it was modified after a prior sync. A file whose + signature matches its recorded ``synced_signature`` has already + synced at its current state and is skipped. + + Returns paths sorted for determinism. On a ``sync_state.json`` read + failure the poller treats every quiet file as eligible (fail-open: + re-syncing an already-synced file is wasteful but safe). + """ + try: + state = await self._sync_state_writer.read(run_path) + except Exception as exc: # pragma: no cover -- defensive + _log.warning("sync_state.json read failed for %s: %s", run_path, exc) + synced: dict[str, tuple[int, int] | None] = {} + else: + synced = {rel: rec.synced_signature for rel, rec in state.files.items()} + + eligible: list[str] = [] + for file_path in quiet_files: + signature = self._signature(file_path) + if signature is None: + continue + rel = file_path.relative_to(run_path).as_posix() + recorded = synced.get(rel) + if recorded is not None and tuple(recorded) == signature: + continue + eligible.append(rel) + return sorted(eligible) + + +def _matches_any_glob(name: str, globs: list[str]) -> bool: + """Return True if ``name`` matches any glob in ``globs``.""" + return any(fnmatch.fnmatch(name, pattern) for pattern in globs) + + +def _safe_resolve(path: Path) -> Path: + """Resolve ``path`` for de-dup, falling back to the path itself.""" + try: + return path.resolve() + except OSError: + return path diff --git a/src/exlab_wizard/orchestrator/staging_clear.py b/src/exlab_wizard/orchestrator/staging_clear.py new file mode 100644 index 0000000..3dee8ba --- /dev/null +++ b/src/exlab_wizard/orchestrator/staging_clear.py @@ -0,0 +1,80 @@ +"""Operator-facing staging-clear helper. Backend Spec Β§13.7. + +The operator-free per-file NAS sync redesign (2026-05-21) removed the +``orchestrator.cleanup`` module and the ``ingest.json`` state machine. Two +call sites -- the ``/staging`` router and the NiceGUI mount -- delete a +staged run's local copy on operator request ("Clear" / "Clear verified +runs"). + +Phase 5: an operator clear must have the **same** keep-local-aware +semantics as the automatic cleanup reaper +(:meth:`exlab_wizard.sync.nas_client.NASSyncClient._delete_local`). Both +delegate to the shared :func:`exlab_wizard.sync.run_delete.delete_run_files` +helper, so a ``keep_local`` file survives an operator clear and the +``.exlab-wizard/`` metadata subtree (incl. ``sync_state.json``) is retained +-- a cleared run still renders its files as "On NAS" tombstones. After the +delete, ``cleared_at`` is stamped so the run's rollup flips to ``CLEARED``. +""" + +from __future__ import annotations + +from pathlib import Path + +from exlab_wizard.cache.sync_state_writer import SyncStateWriter +from exlab_wizard.logging import get_logger +from exlab_wizard.orchestrator._scan import count_files_and_bytes +from exlab_wizard.sync.run_delete import delete_run_files + +__all__ = ["clear_run_dir"] + +_log = get_logger(__name__) + + +def clear_run_dir(run_path: Path) -> tuple[int, int]: + """Delete a staged run's data files; return ``(file_count, bytes_freed)``. + + Idempotent: a missing directory returns ``(0, 0)``. + + Keep-local-aware (Phase 5): files flagged ``keep_local`` in the run's + ``sync_state.json`` survive, the ``.exlab-wizard/`` metadata subtree is + retained, and directory symlinks are never descended into or removed -- + identical semantics to the automatic cleanup reaper. After deletion, + ``cleared_at`` is stamped in ``sync_state.json`` so the run rolls up to + ``CLEARED`` (and still lists "On NAS" tombstones). + + The reported ``(file_count, bytes_freed)`` counts the files actually + removed -- i.e. excludes the cache subtree and any retained ``keep_local`` + files. + """ + if not run_path.exists(): + return 0, 0 + + writer = SyncStateWriter() + state = writer.read_sync(run_path) + keep_local = {rel for rel, rec in state.files.items() if rec.keep_local} + + # Count only the files that will actually be removed: total run files + # (excluding the cache subtree) minus the retained keep-local files. + file_count, bytes_freed = count_files_and_bytes(run_path, exclude_cache=True) + for rel in keep_local: + kept = run_path / rel + try: + stat = kept.stat() + except OSError: + continue + file_count -= 1 + bytes_freed -= stat.st_size + + delete_run_files(run_path, keep_local=keep_local, retain_cache=True) + # Stamp ``cleared_at`` so the run rolls up to CLEARED. ``retain_cache`` + # is forced True above, so the cache subtree (and the record) survive. + writer.mark_cleared_sync(run_path) + + _log.info( + "staging cleared: path=%s files=%d bytes_freed=%d keep_local=%d", + run_path, + max(file_count, 0), + max(bytes_freed, 0), + len(keep_local), + ) + return max(file_count, 0), max(bytes_freed, 0) diff --git a/src/exlab_wizard/orchestrator/staging_query.py b/src/exlab_wizard/orchestrator/staging_query.py index b2cb386..cdcaaa9 100644 --- a/src/exlab_wizard/orchestrator/staging_query.py +++ b/src/exlab_wizard/orchestrator/staging_query.py @@ -1,20 +1,24 @@ -"""Read-only enumeration of staged runs. Backend Spec Β§13.8. +"""Read-only enumeration of runs pending NAS sync. Backend Spec Β§13.8. The orchestrator exposes one read-side query that walks the configured -``staging_root``, opens each run's ``ingest.json``, and returns a small +``staging_root``, discovers every run-leaf directory, and returns a small DTO per run. This data backs both the bottom-dock UI panel and the ``GET /staging`` endpoint. Per Β§13.2 the staging tree mirrors the final NAS layout -(``///Run_`` or -``///TestRuns/TestRun_``). The walker -descends to the run-leaf directory, looks for ``.exlab-wizard/ingest.json``, -and skips any directory that lacks one (the staging push has not yet -written the initial state record). - -The query returns rows sorted by "most recent activity first" -- defined -as the timestamp of the most recent ``history`` entry. Runs without a -parsable history fall back to the directory's mtime. +(``///Runs/Run_`` or +``///TestRuns/TestRun_``). Equipment id, +project name, and run kind are derived from the run path itself. + +The operator-free per-file NAS sync redesign (2026-05-21) removed +``ingest.json``; a run's lifecycle ``current_state`` is the derived +``sync_state.json`` rollup -- ``syncing`` / ``synced`` / ``cleared`` +(:class:`~exlab_wizard.constants.RunSyncState`), computed by +:func:`SyncStateWriter.rollup_state` from the per-run +``/.exlab-wizard/sync_state.json`` record. A run with no +``sync_state.json`` yet (no sync activity) rolls up to ``syncing``. + +The query returns rows sorted by directory mtime, most recent first. """ from __future__ import annotations @@ -23,20 +27,13 @@ from datetime import UTC, datetime from pathlib import Path -import msgspec - -from exlab_wizard.api.schemas import IngestJson +from exlab_wizard.cache.sync_state_writer import SyncStateWriter from exlab_wizard.config.models import Config -from exlab_wizard.io import read_msgspec_json +from exlab_wizard.constants import RUNS_DIR_NAME, TEST_RUNS_DIR_NAME, RunKind, RunSyncState from exlab_wizard.logging import get_logger from exlab_wizard.orchestrator._scan import count_files_and_bytes, walk_run_leaves -from exlab_wizard.paths import ingest_json_path -from exlab_wizard.utils.time import ( - dt_to_iso, - parse_utc_iso_or_none, - utc_now_iso, - utc_now_or, -) +from exlab_wizard.paths import is_test_run_dir +from exlab_wizard.utils.time import dt_to_iso, parse_utc_iso_or_none, utc_now_iso, utc_now_or __all__ = ["StagedRunSummary", "list_staged_runs"] @@ -50,15 +47,16 @@ class StagedRunSummary: Backend Spec Β§13.8: * ``path`` -- absolute filesystem path of the run leaf directory. - * ``current_state`` -- the latest ``ingest.json`` ``current_state``. + * ``current_state`` -- the run's derived ``sync_state.json`` rollup + (:class:`~exlab_wizard.constants.RunSyncState` value: + ``"syncing"`` / ``"synced"`` / ``"cleared"``). * ``equipment_id`` -- the equipment segment of the run path. * ``project_name`` -- the LIMS project short id (parent dir). * ``run_kind`` -- ``"experimental"`` or ``"test"``. * ``file_count`` / ``byte_total`` -- size of the staged data. * ``elapsed_seconds_since_last_activity`` -- seconds between - ``now_utc`` and the most recent history entry's ``at`` field - (falls back to the directory mtime when no history exists). - * ``last_activity_at`` -- ISO-8601 string of the same timestamp. + ``now_utc`` and the run directory's mtime. + * ``last_activity_at`` -- ISO-8601 string of the directory mtime. """ path: str @@ -77,13 +75,25 @@ def list_staged_runs( config: Config, staging_root: Path | None = None, now_utc: datetime | None = None, + sync_state_writer: SyncStateWriter | None = None, ) -> list[StagedRunSummary]: - """Enumerate every staged run with its current lifecycle state. + """Enumerate every staged run with its derived lifecycle state. ``staging_root`` defaults to ``config.orchestrator.staging_root``. Returns an empty list when ``staging_root`` is unset / missing. - Sort order: most recent activity first. + ``current_state`` is the derived ``sync_state.json`` rollup + (:class:`~exlab_wizard.constants.RunSyncState`): ``"syncing"`` / + ``"synced"`` / ``"cleared"``. ``sync_state_writer`` is used to read + each run's per-file record; a default :class:`SyncStateWriter` is + constructed when the caller omits it. A run without a + ``sync_state.json`` (no sync activity yet) rolls up to ``"syncing"``. + + This function is synchronous: it reads ``sync_state.json`` via the + writer's blocking :meth:`SyncStateWriter.read_sync` so sync NiceGUI + page handlers can call it without an event loop. + + Sort order: most recent directory mtime first. """ if staging_root is not None: root = staging_root @@ -94,11 +104,8 @@ def list_staged_runs( if not root.exists(): return [] now = utc_now_or(now_utc) - rows = [ - summary - for run_path in walk_run_leaves(root) - if (summary := _summarize_run(run_path, now)) is not None - ] + writer = sync_state_writer if sync_state_writer is not None else SyncStateWriter() + rows = [_summarize_run(run_path, root, now, writer) for run_path in walk_run_leaves(root)] # Sort by last activity desc; ties broken by path for determinism. rows.sort(key=lambda s: (-_iso_to_epoch(s.last_activity_at), s.path)) return rows @@ -109,33 +116,29 @@ def list_staged_runs( # --------------------------------------------------------------------------- -def _summarize_run(run_path: Path, now: datetime) -> StagedRunSummary | None: - """Build a :class:`StagedRunSummary` for ``run_path``, or None to skip. +def _summarize_run( + run_path: Path, + staging_root: Path, + now: datetime, + sync_state_writer: SyncStateWriter, +) -> StagedRunSummary: + """Build a :class:`StagedRunSummary` for ``run_path``. - A run is included only if its ``.exlab-wizard/ingest.json`` exists and - decodes successfully. Other shapes (a run that's mid-push and hasn't - written its initial ingest yet) are silently omitted -- the watcher - will catch up on the next pass. + Equipment id / project name / run kind are derived from the run path + relative to ``staging_root`` (``//{Runs,TestRuns}/``). + ``current_state`` is the derived rollup of the run's ``sync_state.json``. """ - ingest_path = ingest_json_path(run_path) - if not ingest_path.exists(): - return None - try: - ingest = read_msgspec_json(ingest_path, IngestJson) - except (msgspec.DecodeError, msgspec.ValidationError) as exc: - _log.warning("ingest.json at %s could not be decoded: %s", ingest_path, exc) - return None - + equipment_id, project_name, run_kind = _path_identity(run_path, staging_root) file_count, byte_total = count_files_and_bytes(run_path, exclude_cache=True) - last_activity_at = _last_activity_at(ingest, run_path) + last_activity_at = _dir_mtime_iso(run_path) elapsed = max(int((now - _parse_iso(last_activity_at, fallback=now)).total_seconds()), 0) - project_name = ingest.project_name or run_path.parent.name + current_state = _rollup_value(run_path, sync_state_writer) return StagedRunSummary( path=str(run_path), - current_state=ingest.current_state, - equipment_id=ingest.equipment_id, + current_state=current_state, + equipment_id=equipment_id, project_name=project_name, - run_kind=ingest.run_kind, + run_kind=run_kind, file_count=file_count, byte_total=byte_total, elapsed_seconds_since_last_activity=elapsed, @@ -143,19 +146,48 @@ def _summarize_run(run_path: Path, now: datetime) -> StagedRunSummary | None: ) -def _last_activity_at(ingest: IngestJson, run_path: Path) -> str: - """Return the ISO timestamp of the most recent activity. +def _rollup_value(run_path: Path, sync_state_writer: SyncStateWriter) -> str: + """Return the derived ``sync_state.json`` rollup for ``run_path``. - Preference order: + Reads the run's ``sync_state.json`` and derives the + :class:`~exlab_wizard.constants.RunSyncState` rollup. Any read error + (missing/locked/corrupt record) degrades to ``"syncing"`` -- the + safe default that keeps an unproven run out of the clearable set. + """ + try: + state = sync_state_writer.read_sync(run_path) + except Exception as exc: # pragma: no cover -- defensive + _log.warning("sync_state.json read failed for %s: %s", run_path, exc) + return RunSyncState.SYNCING.value + return sync_state_writer.rollup_state(state).value - 1. Most recent ``history`` entry's ``at`` field. - 2. The directory's mtime, formatted as UTC ISO. + +def _path_identity(run_path: Path, staging_root: Path) -> tuple[str, str, str]: + """Return ``(equipment_id, project_name, run_kind)`` from the run path. + + Falls back to empty strings / ``experimental`` when the path does not + sit cleanly under ``staging_root`` in the expected layout. """ - if ingest.history: - last = ingest.history[-1] - at = last.get("at") - if isinstance(at, str) and at: - return at + try: + relative = run_path.resolve().relative_to(staging_root.resolve()) + except (ValueError, OSError): + relative = Path(run_path.name) + parts = relative.parts + equipment_id = parts[0] if parts else "" + project_name = parts[1] if len(parts) >= 2 else run_path.parent.name + # The run kind is determined by the marker folder (Runs / TestRuns) or + # the leaf name prefix as a fallback. + if TEST_RUNS_DIR_NAME in parts or is_test_run_dir(run_path.name): + run_kind = RunKind.TEST.value + elif RUNS_DIR_NAME in parts: + run_kind = RunKind.EXPERIMENTAL.value + else: + run_kind = RunKind.EXPERIMENTAL.value + return equipment_id, project_name, run_kind + + +def _dir_mtime_iso(run_path: Path) -> str: + """Return the run directory mtime as a UTC ISO-8601 string.""" try: mtime = run_path.stat().st_mtime except OSError: diff --git a/src/exlab_wizard/orchestrator/staging_watcher.py b/src/exlab_wizard/orchestrator/staging_watcher.py deleted file mode 100644 index c08e342..0000000 --- a/src/exlab_wizard/orchestrator/staging_watcher.py +++ /dev/null @@ -1,546 +0,0 @@ -"""Background staging watcher. Backend Spec Β§12, Β§13. - -The :class:`StagingWatcher` is a polling task that drives the five-state -lifecycle (Β§13.3) for every directory under ``staging_root``: - - staging -> complete -> sync_queued -> sync_verified -> cleared - -For each newly-discovered run: - -1. Read the equipment-side ``creation.json`` already pushed into - ``/.exlab-wizard/creation.json`` and produce the initial - ``ingest.json`` with ``current_state == staging``. -2. Watch the run for the configured completeness signal (sentinel file - or manifest comparison; Β§13.5). Promote ``staging`` -> ``complete``. -3. Enqueue with the supplied :class:`NASSyncClient`. On a successful - enqueue, promote ``complete`` -> ``sync_queued``. -4. Poll the NAS sync status. On ``verified`` (or its post-cleanup - states), promote ``sync_queued`` -> ``sync_verified``. -5. If the cleanup policy is ``scheduled`` and ``retain_hours`` has - elapsed since ``sync_verified``, invoke :func:`clear_run` and - promote ``sync_verified`` -> ``cleared``. ``manual`` mode never - auto-clears -- the operator must invoke the action explicitly. - -The watcher is designed to be safe to cancel at any await point: state -transitions land on disk in a single locked write per :class:`IngestWriter`, -so a partial run leaves a coherent file. Re-running the loop picks up -from the on-disk state. - -The watcher is **not** the place where the run completeness is decided -in the production sense -- the equipment machine pushes a sentinel file -or manifest, and the watcher merely observes its presence. This keeps -transport and acquisition policy out of the app per Β§13.6. -""" - -from __future__ import annotations - -import asyncio -import contextlib -from collections.abc import Awaitable, Callable -from dataclasses import dataclass -from pathlib import Path -from typing import Any, Protocol - -import msgspec - -from exlab_wizard.api.schemas import CreationJson, IngestJson -from exlab_wizard.cache.ingest_writer import IngestWriter, default_host -from exlab_wizard.config.models import Config, EquipmentConfig -from exlab_wizard.constants import ( - INGEST_JSON_VERSION, - CompletenessSignal, - IngestState, - OrchestratorTransportType, - RunKind, -) -from exlab_wizard.io import read_msgspec_json_raw -from exlab_wizard.logging import get_logger -from exlab_wizard.orchestrator._scan import ( - count_files_and_bytes, - walk_run_leaves, -) -from exlab_wizard.orchestrator.cleanup import cleanup_eligible, clear_run -from exlab_wizard.paths import ( - creation_json_path, - ingest_json_path, - is_run_dir, - is_test_run_dir, -) -from exlab_wizard.sync.queue import SyncJobState -from exlab_wizard.utils.time import utc_now_iso - -__all__ = ["NASSyncLike", "StagingWatcher"] - -_log = get_logger(__name__) - - -# --------------------------------------------------------------------------- -# Protocols (kept loose so production NASSyncClient and test stubs both fit) -# --------------------------------------------------------------------------- - - -class NASSyncLike(Protocol): - """The subset of :class:`NASSyncClient` the watcher uses. - - Only ``enqueue(run_path)`` and ``status(run_path)`` are needed. - Tests pass an in-memory stub that records the calls. - """ - - async def enqueue(self, run_path: Path) -> Any: ... - async def status(self, run_path: Path) -> str: ... - - -class CreationCacheLike(Protocol): - """The subset of :class:`CreationWriter` the watcher uses.""" - - async def read_creation_snapshot(self, path: Path) -> CreationJson: ... - - -# Verified statuses reported by NASSyncClient.status() (see Backend Spec Β§7.1.2). -# Anything in this set means the NAS copy is durably present. Derived from the -# queue-internal SyncJobState rather than a separate string set so the status -# values stay in sync with the queue's state machine (Backend Spec Β§7.1.2). -_VERIFIED_STATUSES: frozenset[str] = frozenset( - { - SyncJobState.VERIFIED.value, - SyncJobState.CLEANUP_ELIGIBLE.value, - SyncJobState.CLEANED.value, - }, -) - - -@dataclass -class _RunLocator: - """Computed values for the staged run we are evaluating.""" - - run_path: Path - cache_dir: Path - creation_path: Path - ingest_path: Path - equipment_id: str - project_name: str - run_kind: RunKind - - -class StagingWatcher: - """Polls ``staging_root`` and drives the Β§13.3 lifecycle. - - Constructor arguments mirror the spec: a :class:`Config`, the - orchestrator-side :class:`IngestWriter`, a :class:`NASSyncClient`-shaped - sync client, the :class:`CreationWriter` used to read pushed creation - snapshots, and an optional ``on_state_change`` callable invoked after - every successful transition (used by the UI to refresh the panel). - - Polling cadence defaults to 10s (Β§13.5 -- "polls until all are - present") and is overridable for tests via ``poll_interval_s``. - """ - - def __init__( - self, - *, - config: Config, - ingest_writer: IngestWriter, - nas_sync: NASSyncLike, - cache_creation: CreationCacheLike, - on_state_change: Callable[[Path, IngestState], Awaitable[None] | None] | None = None, - poll_interval_s: float = 10.0, - ) -> None: - self._config = config - self._ingest = ingest_writer - self._nas_sync = nas_sync - self._cache_creation = cache_creation - self._on_state_change = on_state_change - self._poll_interval_s = poll_interval_s - self._task: asyncio.Task[None] | None = None - self._stopping = False - self._equipment_by_id: dict[str, EquipmentConfig] = {e.id: e for e in config.equipment} - - # ------------------------------------------------------------------ lifecycle - - async def start(self) -> None: - """Start the background polling task. Idempotent. - - Returns immediately; the task runs until :meth:`stop` is called - or the surrounding event loop tears down. - """ - if self._task is not None and not self._task.done(): - return - # Redesign Β§3.1: orchestrator pipeline is always active. The watcher - # starts unconditionally; it stays a no-op when the configured - # staging_root does not exist (handled per-poll in poll_once). - self._stopping = False - self._task = asyncio.create_task(self._loop(), name="exlab-staging-watcher") - _log.info( - "staging watcher started: staging_root=%s poll_interval_s=%.1f", - self._config.orchestrator.staging_root, - self._poll_interval_s, - ) - - async def stop(self) -> None: - """Cancel the background task and wait for it to exit. Idempotent.""" - self._stopping = True - if self._task is None: - return - self._task.cancel() - with contextlib.suppress(asyncio.CancelledError, Exception): - await self._task - self._task = None - _log.info("staging watcher stopped") - - # ------------------------------------------------------------------ poll loop - - async def _loop(self) -> None: - try: - while not self._stopping: - try: - await self.poll_once() - except asyncio.CancelledError: - raise - except Exception: # pragma: no cover -- defensive - _log.exception("staging watcher poll failed") - with contextlib.suppress(asyncio.TimeoutError): - await asyncio.wait_for( - asyncio.shield(asyncio.sleep(self._poll_interval_s)), - timeout=self._poll_interval_s + 1.0, - ) - except asyncio.CancelledError: - raise - - async def poll_once(self) -> list[IngestState]: - """Walk staging_root once and run :meth:`evaluate_run` on each leaf. - - Exposed publicly so tests can drive the watcher synchronously - without spinning up the asyncio task. Returns the list of - post-evaluation states for every run found (in walk order). - """ - staging_root = Path(self._config.orchestrator.staging_root) - if not staging_root.exists(): # noqa: ASYNC240 -- one-shot stat - return [] - states: list[IngestState] = [] - for run_path in self._walk_run_leaves(staging_root): - try: - state = await self.evaluate_run(run_path) - except Exception as exc: # pragma: no cover -- defensive - _log.warning("evaluate_run failed for %s: %s", run_path, exc) - continue - states.append(state) - return states - - # ------------------------------------------------------------------ evaluate_run - - async def evaluate_run(self, run_path: Path) -> IngestState: - """Evaluate one run and advance its state if conditions are met. - - Returns the post-evaluation state. Idempotent within a single - cycle -- calling repeatedly while no condition has changed is a - cheap no-op (only reads the on-disk ingest entry). - - State decisions, in order: - - 1. No ``ingest.json`` yet -- bootstrap one in ``staging`` from - the equipment's pushed ``creation.json``. - 2. ``staging`` -- if the equipment-defined completeness signal is - present, advance to ``complete`` (recording file/byte counts). - 3. ``complete`` -- enqueue with NASSyncClient; on success - advance to ``sync_queued``. - 4. ``sync_queued`` -- check NAS sync status; on verified-or-better - advance to ``sync_verified``. - 5. ``sync_verified`` -- if cleanup policy says we may clear, - invoke :func:`clear_run` and advance to ``cleared``. - 6. ``cleared`` -- terminal; nothing more to do. - """ - loc = self._locator_for(run_path) - if loc is None: - return IngestState.STAGING # unrecognised shape; reported as no-op - - # Bootstrap an ingest.json if missing. - if not loc.ingest_path.exists(): - await self._bootstrap_initial_ingest(loc) - return IngestState.STAGING - - ingest = await self._ingest.read_ingest(loc.ingest_path) - current = IngestState(ingest.current_state) - match current: - case IngestState.STAGING: - if await self._completeness_signal_present(loc): - files, bytes_received = self._count_files_and_bytes(run_path) - await self._advance( - loc, - next_state=IngestState.COMPLETE, - files_received=files, - bytes_received=bytes_received, - ) - return IngestState.COMPLETE - return IngestState.STAGING - - case IngestState.COMPLETE: - await self._nas_sync.enqueue(run_path) - await self._advance(loc, next_state=IngestState.SYNC_QUEUED) - return IngestState.SYNC_QUEUED - - case IngestState.SYNC_QUEUED: - status = await self._nas_sync.status(run_path) - if status in _VERIFIED_STATUSES: - await self._advance( - loc, - next_state=IngestState.SYNC_VERIFIED, - nas_path=ingest.run_path or "", - ) - return IngestState.SYNC_VERIFIED - return IngestState.SYNC_QUEUED - - case IngestState.SYNC_VERIFIED: - if cleanup_eligible(ingest=ingest, config=self._config): - await clear_run( - run_path, - config=self._config, - ingest_writer=self._ingest, - ) - await self._notify(run_path, IngestState.CLEARED) - return IngestState.CLEARED - return IngestState.SYNC_VERIFIED - - case IngestState.CLEARED: - return IngestState.CLEARED - - return current - - # ------------------------------------------------------------------ bootstrap - - async def _bootstrap_initial_ingest(self, loc: _RunLocator) -> None: - """Write the initial ``ingest.json`` payload (state == staging). - - Uses the equipment-side ``creation.json`` for project / kind / - equipment id when available; otherwise uses path-derived defaults. - """ - creation = await self._read_creation_safe(loc.creation_path) - # The path-derived equipment id is authoritative because the staging - # tree mirrors the NAS layout (Β§13.2). The creation snapshot is - # used only for descriptive metadata (project name, run kind). - equipment_id = loc.equipment_id - equipment = self._equipment_by_id.get(equipment_id) - transport = self._infer_transport(equipment) - run_kind = creation.run_kind if creation is not None else loc.run_kind - project_name = self._project_name_from_creation(creation) or loc.project_name - host = default_host() - run_relative = self._run_relative_path(loc.run_path) - payload = IngestJson( - schema_version=INGEST_JSON_VERSION, - project_name=project_name, - equipment_id=equipment_id, - run_kind=run_kind, - run_path=run_relative, - transport=transport, - current_state=IngestState.STAGING, - history=[ - { - "state": IngestState.STAGING.value, - "at": utc_now_iso(), - "host": host, - }, - ], - ) - await self._ingest.write_ingest(loc.ingest_path, payload) - await self._notify(loc.run_path, IngestState.STAGING) - - async def _read_creation_safe(self, path: Path) -> CreationJson | None: - """Read ``creation.json`` if present and parsable, else ``None``.""" - if not path.exists(): # noqa: ASYNC240 -- one-shot stat - return None - try: - return await self._cache_creation.read_creation_snapshot(path) - except Exception as exc: - _log.warning("creation.json at %s could not be read: %s", path, exc) - return None - - @staticmethod - def _project_name_from_creation(creation: CreationJson | None) -> str | None: - if creation is None: - return None - return creation.lims_project.name_at_creation or creation.lims_project.short_id or None - - def _infer_transport(self, equipment: EquipmentConfig | None) -> OrchestratorTransportType: - """Return the configured staging transport, or a sensible default.""" - if equipment is None or equipment.orchestrator_staging_transport is None: - return OrchestratorTransportType.SMB_MOUNT - return equipment.orchestrator_staging_transport.type - - # ------------------------------------------------------------------ helpers - - async def _advance( - self, - loc: _RunLocator, - *, - next_state: IngestState, - files_received: int | None = None, - bytes_received: int | None = None, - nas_path: str | None = None, - checksum_file: str | None = None, - ) -> None: - """Append the state transition + invoke ``on_state_change`` hook.""" - await self._ingest.append_state_transition( - loc.ingest_path, - next_state, - host=default_host(), - files_received=files_received, - bytes_received=bytes_received, - nas_path=nas_path, - checksum_file=checksum_file, - ) - await self._notify(loc.run_path, next_state) - - async def _notify(self, run_path: Path, state: IngestState) -> None: - """Invoke the optional ``on_state_change`` hook (sync or async).""" - if self._on_state_change is None: - return - result = self._on_state_change(run_path, state) - if asyncio.iscoroutine(result): - await result - - async def _completeness_signal_present(self, loc: _RunLocator) -> bool: - """Return True if the equipment's configured signal is present. - - The check is per-equipment per Β§13.5: - - * ``sentinel_file`` -- a file with ``equipment.sentinel_filename`` - exists in the run leaf. - * ``manifest`` -- a file with ``equipment.manifest_filename`` - exists AND every file it lists is present with the right size. - - Redesign Β§3.3: if the equipment isn't in this device's local - registry (received-equipment path), the signal config travels - with the pushed ``creation.json`` ``orchestrator`` block so the - watcher can auto-discover what to look for without a per-equipment - config of its own. - """ - signal_kind, sentinel_filename, manifest_filename = await self._completeness_signal_for(loc) - if signal_kind is None: - return False - match signal_kind: - case CompletenessSignal.SENTINEL_FILE: - if not sentinel_filename: - return False - return (loc.run_path / sentinel_filename).is_file() - case CompletenessSignal.MANIFEST: - if not manifest_filename: - return False - return _manifest_satisfied( - loc.run_path / manifest_filename, - loc.run_path, - ) - return False - - async def _completeness_signal_for( - self, - loc: _RunLocator, - ) -> tuple[CompletenessSignal | None, str | None, str | None]: - """Resolve the completeness-signal triple for ``loc``. - - For owned equipment (``loc.equipment_id`` is in the local - registry), reads from ``EquipmentConfig``. For received equipment - (Redesign Β§3.3 auto-discovery), falls back to the - ``orchestrator`` block of the pushed ``creation.json`` which - carries the relay-discovery fields. Returns ``(None, None, None)`` - if neither source has the info. - """ - equipment = self._equipment_by_id.get(loc.equipment_id) - if equipment is not None: - return ( - equipment.completeness_signal, - equipment.sentinel_filename, - equipment.manifest_filename, - ) - creation = await self._read_creation_safe(loc.creation_path) - if creation is None or creation.orchestrator is None: - return (None, None, None) - return ( - creation.orchestrator.completeness_signal, - creation.orchestrator.sentinel_filename, - creation.orchestrator.manifest_filename, - ) - - # ------------------------------------------------------------------ scanning - - def _walk_run_leaves(self, staging_root: Path) -> list[Path]: - """Return every ``Run_*`` / ``TestRun_*`` directory under staging_root.""" - return walk_run_leaves(staging_root) - - def _locator_for(self, run_path: Path) -> _RunLocator | None: - """Compute a :class:`_RunLocator` for the run, or None if path is wrong shape.""" - try: - staging_root = Path(self._config.orchestrator.staging_root).resolve() - relative = run_path.resolve().relative_to(staging_root) - except (ValueError, OSError): - return None - parts = relative.parts - equipment_id = parts[0] if parts else "" - # The project name sits at parts[1] and the run leaf is parts[-1]. - project_name = parts[1] if len(parts) >= 2 else "" - run_name = run_path.name - if is_test_run_dir(run_name): - run_kind = RunKind.TEST - elif is_run_dir(run_name): - run_kind = RunKind.EXPERIMENTAL - else: - return None - creation_path = creation_json_path(run_path) - return _RunLocator( - run_path=run_path, - cache_dir=creation_path.parent, - creation_path=creation_path, - ingest_path=ingest_json_path(run_path), - equipment_id=equipment_id, - project_name=project_name, - run_kind=run_kind, - ) - - def _run_relative_path(self, run_path: Path) -> str: - """Return ``run_path`` relative to the staging root (forward-slash).""" - try: - staging_root = Path(self._config.orchestrator.staging_root).resolve() - return run_path.resolve().relative_to(staging_root).as_posix() - except (ValueError, OSError): - return run_path.as_posix() - - @staticmethod - def _count_files_and_bytes(run_path: Path) -> tuple[int, int]: - """Count files + bytes under ``run_path`` excluding the cache dir.""" - return count_files_and_bytes(run_path, exclude_cache=True) - - -def _manifest_satisfied(manifest_path: Path, run_path: Path) -> bool: - """Return True if ``manifest_path`` exists and every listed file is present. - - Manifest format is the spec-implicit ``{"files": [{"path": ..., "size": - ...}]}`` shape. Sizes are compared by exact equality. A manifest with - no ``files`` array is treated as "no files expected" -- which means - the run is complete the moment the manifest itself is on disk. - """ - if not manifest_path.is_file(): - return False - try: - data = read_msgspec_json_raw(manifest_path) - except (msgspec.DecodeError, OSError): - return False - if not isinstance(data, dict): - return False - files = data.get("files", []) - if not isinstance(files, list): - return False - for entry in files: - if not isinstance(entry, dict): - return False - relative = entry.get("path") - size = entry.get("size") - if not isinstance(relative, str) or not relative: - return False - target = run_path / relative - if not target.is_file(): - return False - if isinstance(size, int): - try: - if target.stat().st_size != size: - return False - except OSError: - return False - return True diff --git a/src/exlab_wizard/paths.py b/src/exlab_wizard/paths.py index a29b054..b917d62 100644 --- a/src/exlab_wizard/paths.py +++ b/src/exlab_wizard/paths.py @@ -13,6 +13,7 @@ import os import sys +from collections.abc import Callable from datetime import datetime from pathlib import Path from typing import TYPE_CHECKING @@ -25,13 +26,13 @@ EQUIPMENT_ID_MAX_LENGTH, EQUIPMENT_ID_PATTERN, EQUIPMENT_JSON_NAME, - INGEST_JSON_NAME, PROJECT_NAME_MAX_LENGTH, PROJECT_SHORT_ID_PATTERN, README_FIELDS_JSON_NAME, RUN_DATE_STRFTIME, RUN_DIR_PREFIX, RUNS_DIR_NAME, + TEST_MODE_ENV, TEST_RUN_DIR_PREFIX, TEST_RUNS_DIR_NAME, WINDOWS_ILLEGAL_CHARS, @@ -53,13 +54,11 @@ "compose_project_path", "compose_run_path", "creation_json_path", - "default_orchestrator_staging_root", "ensure_central_log_dir", "ensure_dir", "ensure_state_dir", "equipment_json_path", "evaluate_setup_state", - "ingest_json_path", "is_run_dir", "is_test_run_dir", "os_cache_path", @@ -70,6 +69,7 @@ "run_dir_stem", "setup_state_missing", "setup_state_next_action", + "suggested_staging_root", "validate_project_short_id", ] @@ -80,11 +80,16 @@ # Setting ``EXLAB_WIZARD_TEST_MODE=1`` swaps APP_NAME for ``APP_NAME-test`` # in every OS-path helper below, redirecting config / state / cache / logs # into a parallel ``exlab-wizard-test`` sandbox without touching real user -# directories. The env var (rather than a CLI arg threaded through every -# layer) means the window subprocess spawned by WindowLauncher inherits the -# override automatically. See ``exlab-wizard-tray --test``. - -TEST_MODE_ENV = "EXLAB_WIZARD_TEST_MODE" +# directories. The same env var also drives ``apply_test_mode_prefix`` in +# ``config.loader`` so on-disk + NAS run directories sort under a +# ``TEST_/...`` namespace. The env var (rather than a CLI arg threaded +# through every layer) means the window subprocess spawned by +# WindowLauncher inherits the override automatically. See +# ``exlab-wizard-tray --test``. +# +# ``TEST_MODE_ENV`` is re-exported here for backward compat with callers +# that imported it from this module before it was centralized in +# ``constants/app.py``. def _app_name() -> str: @@ -180,11 +185,31 @@ def os_central_log_path() -> Path: ) -def default_orchestrator_staging_root() -> Path: - """OS-conditional default for ``orchestrator.staging_root``. Backend Spec Β§9, Β§13.""" - if _platform() is Platform.WINDOWS: - return _env_path("LOCALAPPDATA", _home() / "AppData" / "Local") / _app_name() / "staging" - return Path("/staging") +def suggested_staging_root() -> Path: + """Suggested (not default) ``orchestrator.staging_root``. Backend Spec Β§9, Β§13. + + ``staging_root`` is opt-in: blank means this device is not a staging PC + and nothing is created. This helper only supplies the greyed *placeholder* + shown in Settings to guide an operator who chooses to opt in -- it is pure + and side-effect-free, never written and never ``mkdir``'d. A directory is + created only when the operator saves a non-empty path (see + ``ui.mount._persist_config``). + + Staged runs are bulk experiment data relayed through this device on their + way to the NAS, so the suggestion lives under an ``exlab-wizard/`` app + folder on every platform -- mirroring config / state / cache -- rather than + a bare ``/staging`` mount. On Linux it follows ``XDG_DATA_HOME`` (bulk user + data, not transient cache) so an un-synced run is never treated as + discardable. + """ + name = _app_name() + match _platform(): + case Platform.MACOS: + return _home() / "Library" / "Application Support" / name / "staging" + case Platform.WINDOWS: + return _env_path("LOCALAPPDATA", _home() / "AppData" / "Local") / name / "staging" + case Platform.LINUX: + return _env_path("XDG_DATA_HOME", _home() / ".local" / "share") / name / "staging" # --------------------------------------------------------------------------- @@ -419,11 +444,31 @@ def _paths_complete(config: Config) -> bool: return bool(paths.templates_dir and paths.plugin_dir and paths.local_root) +def _nas_in_use(config: Config) -> bool: + """True when at least one nas-mode equipment exists (NAS sync is active).""" + from exlab_wizard.constants import SyncMode + + return any(eq.sync_mode == SyncMode.NAS for eq in config.equipment) + + +def _nas_remote_satisfied(config: Config, *, nas_remote_available: Callable[[str], bool]) -> bool: + """True when the nas: remote is configured AND present in rclone.conf. + + Only gates when NAS sync is actually in use (a stage-only device with no + nas-mode equipment does not need a NAS remote). + """ + if not _nas_in_use(config): + return True + remote = config.nas.remote + return bool(remote) and nas_remote_available(remote) + + def evaluate_setup_state( config: Config | None, *, lims_reachable: bool = True, keyring_password_present: bool = True, + nas_remote_available: Callable[[str], bool] | None = None, ) -> SetupState: """Evaluate the Β§4.9.1 setup state. @@ -433,16 +478,20 @@ def evaluate_setup_state( 2. ``paths.templates_dir`` / ``plugin_dir`` / ``local_root`` any empty -> ``INCOMPLETE_MISSING_PATHS`` 3. equipment list empty -> ``INCOMPLETE_NO_EQUIPMENT`` - 4. lims slot incomplete (no endpoint+email AND no offline_catalogue_path) + 4. NAS sync is in use but the ``nas:`` remote is unset or absent from + rclone.conf -> ``INCOMPLETE_NO_NAS_REMOTE`` (rclone.conf migration) + 5. lims slot incomplete (no endpoint+email AND no offline_catalogue_path) -> ``INCOMPLETE_NO_LIMS`` - 5. ``lims_reachable`` is ``False`` -> ``INCOMPLETE_LIMS_UNREACHABLE`` - 6. otherwise -> ``READY`` + 6. ``lims_reachable`` is ``False`` -> ``INCOMPLETE_LIMS_UNREACHABLE`` + 7. otherwise -> ``READY`` The ``lims_reachable`` flag is supplied by the caller from the ``LIMSClient.health_check()`` result. Default True so unit tests can skip the network call. The ``keyring_password_present`` flag stubs the keyring lookup so unit tests can exercise every branch without a real - keyring backend. + keyring backend. ``nas_remote_available`` answers "is this rclone + remote present in rclone.conf?"; it defaults to "always True" so + callers and tests that don't care about the NAS gate behave as before. """ if config is None: return SetupState.INCOMPLETE_NO_CONFIG @@ -452,6 +501,9 @@ def evaluate_setup_state( return SetupState.INCOMPLETE_NO_ORCHESTRATOR if not config.equipment: return SetupState.INCOMPLETE_NO_EQUIPMENT + remote_lookup = nas_remote_available if nas_remote_available is not None else (lambda _n: True) + if not _nas_remote_satisfied(config, nas_remote_available=remote_lookup): + return SetupState.INCOMPLETE_NO_NAS_REMOTE if not _lims_slot_satisfied(config, keyring_password_present=keyring_password_present): return SetupState.INCOMPLETE_NO_LIMS if not lims_reachable: @@ -460,48 +512,69 @@ def evaluate_setup_state( def _orchestrator_identity_complete(config: Config) -> bool: - """Return True when this device has an orchestrator label + staging root. + """Return True when this device has an orchestrator label. - Redesign Β§3.1: the staging pipeline is always active so both fields - are always required (no longer gated on a removed ``enabled`` flag). + Only ``label`` is required -- it is stamped into every run's + ``creation.json`` as the workstation identity, independent of staging. + ``staging_root`` is opt-in (a blank value just means this device is not a + staging PC), so it no longer gates setup. """ - return bool(config.orchestrator.label and config.orchestrator.staging_root) + return bool(config.orchestrator.label) -def setup_state_missing(state: SetupState, config: Config | None) -> list[dict[str, str]]: +def setup_state_missing( + state: SetupState, + config: Config | None, +) -> list[dict[str, str]]: """Translate a state into ``{field, reason}`` dicts for ``/api/v1/setup/status``. Backend Spec Β§4.9.3. Returns ``[]`` when the state is ``READY`` or ``INCOMPLETE_LIMS_UNREACHABLE`` (the soft-block state surfaces a - banner, not a missing-field list). + banner, not a missing-field list). When ``state`` is + ``INCOMPLETE_NO_NAS_REMOTE`` the missing list names ``nas.remote`` + with a reason describing whether it is unset or absent from + rclone.conf (the state itself is enough for the UI to deep-link to + the setup docs). """ - if state in (SetupState.READY, SetupState.INCOMPLETE_LIMS_UNREACHABLE): - return [] - if state is SetupState.INCOMPLETE_NO_CONFIG: - return [{"field": "config.yaml", "reason": "missing"}] - if state is SetupState.INCOMPLETE_NO_EQUIPMENT: - return [{"field": "equipment", "reason": "empty"}] - if state is SetupState.INCOMPLETE_MISSING_PATHS: - return _missing_paths_fields(config) - if state is SetupState.INCOMPLETE_NO_ORCHESTRATOR: - return _missing_orchestrator_fields(config) - if state is SetupState.INCOMPLETE_NO_LIMS: - return _missing_lims_fields(config) + match state: + case SetupState.READY | SetupState.INCOMPLETE_LIMS_UNREACHABLE: + return [] + case SetupState.INCOMPLETE_NO_CONFIG: + return [{"field": "config.yaml", "reason": "missing"}] + case SetupState.INCOMPLETE_NO_EQUIPMENT: + return [{"field": "equipment", "reason": "empty"}] + case SetupState.INCOMPLETE_MISSING_PATHS: + return _missing_paths_fields(config) + case SetupState.INCOMPLETE_NO_ORCHESTRATOR: + return _missing_orchestrator_fields(config) + case SetupState.INCOMPLETE_NO_NAS_REMOTE: + return _missing_nas_fields(config) + case SetupState.INCOMPLETE_NO_LIMS: + return _missing_lims_fields(config) + # Defensive fallback: an unrecognized state (e.g. a future enum member or a + # non-SetupState passed by a misbehaving caller) yields no missing-field + # rows rather than ``None``, honouring the ``list[...]`` return contract. return [] +def _missing_nas_fields(config: Config | None) -> list[dict[str, str]]: + """Missing-``nas.remote`` row for ``INCOMPLETE_NO_NAS_REMOTE``. + + Distinguishes an unset ``nas.remote`` from one that is named but not + found in rclone.conf so the UI can tailor its guidance. + """ + if config is None or not config.nas.remote: + return [{"field": "nas.remote", "reason": "unset"}] + return [{"field": "nas.remote", "reason": "not_found_in_rclone_conf"}] + + def _missing_orchestrator_fields(config: Config | None) -> list[dict[str, str]]: - """Redesign Β§3.1: ``label`` + ``staging_root`` are required.""" + """Only ``label`` is required; ``staging_root`` is opt-in (see gate).""" if config is None: - return [ - {"field": "orchestrator.label", "reason": "missing"}, - {"field": "orchestrator.staging_root", "reason": "missing"}, - ] + return [{"field": "orchestrator.label", "reason": "missing"}] out: list[dict[str, str]] = [] if not config.orchestrator.label: out.append({"field": "orchestrator.label", "reason": "missing"}) - if not config.orchestrator.staging_root: - out.append({"field": "orchestrator.staging_root", "reason": "missing"}) return out @@ -552,6 +625,8 @@ def setup_state_next_action(state: SetupState) -> SetupNextAction | None: return SetupNextAction.SET_PATHS case SetupState.INCOMPLETE_NO_EQUIPMENT: return SetupNextAction.ADD_EQUIPMENT + case SetupState.INCOMPLETE_NO_NAS_REMOTE: + return SetupNextAction.CONFIGURE_RCLONE_REMOTE case SetupState.INCOMPLETE_NO_LIMS: return SetupNextAction.CONFIGURE_LIMS case SetupState.INCOMPLETE_LIMS_UNREACHABLE: @@ -575,11 +650,6 @@ def creation_json_path(run_or_project_dir: Path) -> Path: return cache_dir(run_or_project_dir) / CREATION_JSON_NAME -def ingest_json_path(run_dir: Path) -> Path: - """Return the ``ingest.json`` path under a run directory.""" - return cache_dir(run_dir) / INGEST_JSON_NAME - - def equipment_json_path(equipment_dir: Path) -> Path: """Return the ``equipment.json`` path under an equipment directory.""" return cache_dir(equipment_dir) / EQUIPMENT_JSON_NAME diff --git a/src/exlab_wizard/plugins/host.py b/src/exlab_wizard/plugins/host.py index 119e1ed..6728e66 100644 --- a/src/exlab_wizard/plugins/host.py +++ b/src/exlab_wizard/plugins/host.py @@ -74,11 +74,12 @@ # Registry surface used by the host. # --------------------------------------------------------------------------- # -# ``plugins/registry.py`` is owned by Agent A and is not yet committed; the -# host only needs the interface, not the implementation. The Protocol -# below defines the minimum surface the host calls into. The -# :class:`PluginRecord` dataclass is what the registry yields per -# resolved plugin -- the registry will eventually ship this same shape. +# The host depends only on the read-only :class:`PluginRegistryProtocol` +# surface below; the concrete implementation is the committed, wired +# :class:`exlab_wizard.plugins.registry.PluginRegistry` (a manifest-scanning, +# lab-wins-merging registry; built and adapted in +# ``tray.dependencies._build_plugin_host``). The :class:`PluginRecord` +# dataclass is what the registry yields per resolved plugin. @dataclass(frozen=True) @@ -115,9 +116,11 @@ class PluginRecord: class PluginRegistryProtocol(Protocol): """Read-only registry surface the host depends on. Backend Spec Β§6.2. - The concrete implementation lives in ``plugins/registry.py`` (Agent A). - The host only consumes a single method: ``get_record(name)`` which - returns the resolved :class:`PluginRecord` for a registered plugin. + The concrete implementation is + :class:`exlab_wizard.plugins.registry.PluginRegistry` (committed and + wired in ``tray.dependencies._build_plugin_host``). The host consumes a + single method: ``get_record(name)``, returning the resolved + :class:`PluginRecord` for a registered plugin. """ def get_record(self, name: str) -> PluginRecord | None: ... @@ -887,21 +890,20 @@ def _exit_code_to_status(exit_code: int, files_affected: list[str]) -> str: # A tiny convenience adapter for callers (and the integration tests) that -# want to materialize a registry from a list of records inline. The real -# registry implementation will replace this; we ship it here for now so -# Phase 6B's tests can drive the host without depending on Agent A's -# ``plugins/registry.py``. +# want to materialize a registry from a list of records inline. This is a +# test-only helper; production uses the committed +# :class:`exlab_wizard.plugins.registry.PluginRegistry` (wired in +# ``tray.dependencies._build_plugin_host``). @dataclass class _ListBackedRegistry: """Minimal :class:`PluginRegistryProtocol` implementation used for tests. - The production registry (Backend Spec Β§6.2.1, ``plugins/registry.py``, - Agent A) replaces this with a manifest-scanning, lab-wins-merging - implementation. Keeping the test adapter here lets the host's - integration suite drive the spawn path against fixture plugins - without prematurely committing to the registry's full surface. + Test-only. Production uses the committed, manifest-scanning, + lab-wins-merging :class:`exlab_wizard.plugins.registry.PluginRegistry` + (Backend Spec Β§6.2.1). Keeping this list-backed adapter here lets the + host's integration suite drive the spawn path against fixture plugins. """ records: list[PluginRecord] = field(default_factory=list) @@ -918,8 +920,8 @@ def build_test_registry(records: Iterable[PluginRecord]) -> PluginRegistryProtoc return _ListBackedRegistry(records=list(records)) -# Convenience for callers serializing the result before Agent A's -# msgspec.Struct lands; not used by the host itself. +# Convenience for callers that need a JSON-friendly copy of an applied +# entry; not used by the host itself. def applied_entry_as_json(entry: dict[str, Any]) -> dict[str, Any]: """Return ``entry`` as a JSON-friendly dict (deep-copied).""" return json.loads(json.dumps(entry, default=str)) diff --git a/src/exlab_wizard/sync/manifest.py b/src/exlab_wizard/sync/manifest.py new file mode 100644 index 0000000..c1f9d4c --- /dev/null +++ b/src/exlab_wizard/sync/manifest.py @@ -0,0 +1,122 @@ +"""Parser for ``rclone lsjson`` output into a run-relative remote manifest. + +Sole owner of the lsjson wire shape. Consumers (the NAS sync client's +routine reconcile and cleanup remote-existence probe) depend only on the +:class:`RemoteManifest` value object, never on the raw JSON. +""" + +from __future__ import annotations + +import json +import re +from dataclasses import dataclass +from datetime import datetime + +from exlab_wizard.logging import get_logger + +__all__ = ["RemoteEntry", "RemoteManifest", "parse_lsjson"] + +_log = get_logger(__name__) + +# Trim fractional seconds to 6 digits: datetime.fromisoformat rejects the +# 9-digit nanosecond precision rclone can emit (e.g. "...:00.123456789Z"). +_FRAC_RE = re.compile(r"\.(\d+)") + + +@dataclass(frozen=True, slots=True) +class RemoteEntry: + """One file on the remote. ``mod_time`` is the RFC3339 string as emitted.""" + + size: int + mod_time: str + is_dir: bool + + +@dataclass(frozen=True, slots=True) +class RemoteManifest: + """Run-relative view of a remote subtree. Keyed by POSIX rel-path.""" + + entries: dict[str, RemoteEntry] + + def size_matches(self, rel_path: str, local_size: int) -> bool: + """True iff ``rel_path`` is present and its remote size equals local.""" + entry = self.entries.get(rel_path) + return entry is not None and entry.size == local_size + + def has(self, rel_path: str) -> bool: + """True iff ``rel_path`` is present on the remote (existence probe).""" + return rel_path in self.entries + + def matches( + self, rel_path: str, local_size: int, local_mtime: float, *, tolerance_s: float + ) -> bool: + """The single reconcile predicate: present AND size-equal AND modtime close. + + ``local_mtime`` is the local file's ``st_mtime`` (epoch seconds). A file + is credited as synced only when the remote entry exists, its size equals + ``local_size``, and its modtime is within ``tolerance_s`` of local + (rclone preserves modtime on copy; the window absorbs SFTP/SMB rounding). + """ + entry = self.entries.get(rel_path) + if entry is None or entry.size != local_size: + return False + remote_epoch = self._to_epoch(entry.mod_time) + if remote_epoch is None: + return False + return abs(remote_epoch - local_mtime) <= tolerance_s + + @staticmethod + def _to_epoch(mod_time: str) -> float | None: + """Parse an RFC3339 ``ModTime`` to epoch seconds, or ``None`` if unparseable.""" + s = mod_time.strip() + if not s: + return None + if s.endswith("Z"): + s = s[:-1] + "+00:00" + s = _FRAC_RE.sub(lambda m: "." + m.group(1)[:6], s, count=1) + try: + return datetime.fromisoformat(s).timestamp() + except ValueError: + return None + + +def parse_lsjson(raw: str, *, strip_prefix: str = "") -> RemoteManifest: + """Parse ``rclone lsjson`` array text into a :class:`RemoteManifest`. + + Directory entries are dropped. ``strip_prefix`` (e.g. + ``//``) is removed from each ``Path`` so + keys are run-relative. Malformed / empty input yields an empty manifest + (logged at debug) rather than raising β€” a listing we can't parse must + not crash the sync worker. + """ + text = raw.strip() + if not text: + return RemoteManifest(entries={}) + try: + rows = json.loads(text) + except json.JSONDecodeError: + _log.debug("lsjson output was not valid JSON (%d chars)", len(text)) + return RemoteManifest(entries={}) + if not isinstance(rows, list): + return RemoteManifest(entries={}) + + prefix = strip_prefix.strip("/") + out: dict[str, RemoteEntry] = {} + for row in rows: + if not isinstance(row, dict) or row.get("IsDir"): + continue + path = str(row.get("Path", "")).strip("/") + if not path: + continue + if prefix and path.startswith(prefix + "/"): + path = path[len(prefix) + 1 :] + try: + size = int(row.get("Size", -1)) + except (TypeError, ValueError): + continue + out[path] = RemoteEntry( + size=size, + mod_time=str(row.get("ModTime", "")), + is_dir=False, + ) + return RemoteManifest(entries=out) diff --git a/src/exlab_wizard/sync/nas_client.py b/src/exlab_wizard/sync/nas_client.py index d4edba0..af3b7a6 100644 --- a/src/exlab_wizard/sync/nas_client.py +++ b/src/exlab_wizard/sync/nas_client.py @@ -14,8 +14,8 @@ import asyncio import contextlib -import shutil -from collections.abc import Awaitable, Callable +import tempfile +from collections.abc import Callable from dataclasses import dataclass from datetime import datetime from pathlib import Path @@ -23,30 +23,37 @@ from exlab_wizard.api.schemas import CreationJson from exlab_wizard.cache.creation_writer import CreationWriter -from exlab_wizard.config.models import Config, EquipmentConfig, RcloneTransport, RsyncSshTransport +from exlab_wizard.cache.sync_state_writer import SyncStateWriter +from exlab_wizard.config.models import ( + Config, + EquipmentConfig, + RclonePerf, +) from exlab_wizard.constants import ( - CACHE_DIR_NAME, + RunSyncState, SyncHandleState, + SyncMode, SyncStatus, ) from exlab_wizard.logging import get_logger -from exlab_wizard.paths import creation_json_path +from exlab_wizard.paths import cache_dir, creation_json_path from exlab_wizard.sync.bandwidth import effective_bandwidth_limit_kibps from exlab_wizard.sync.cleanup import cleanup_interlocks_satisfied +from exlab_wizard.sync.manifest import RemoteManifest, parse_lsjson from exlab_wizard.sync.pre_sync_gate import is_eligible from exlab_wizard.sync.queue import ( SyncJobRow, SyncJobState, SyncQueue, ) +from exlab_wizard.sync.run_delete import delete_run_files from exlab_wizard.sync.transports import ( TransportError, TransportErrorKind, TransportResult, ) -from exlab_wizard.sync.transports.rclone import RcloneTransport as RcloneDriver -from exlab_wizard.sync.transports.rsync_ssh import RsyncSshTransport as RsyncDriver -from exlab_wizard.sync.verifier import Verifier, VerifyResult +from exlab_wizard.sync.transports.rclone import RcloneDriver +from exlab_wizard.sync.verifier import VerifyResult from exlab_wizard.utils.time import utc_now, utc_now_iso from exlab_wizard.validator.engine import Validator from exlab_wizard.validator.findings import Finding @@ -61,6 +68,22 @@ _log = get_logger(__name__) +# Job states that count as "done with this subset" for re-enqueue purposes +# (operator-free per-file NAS sync, 2026-05-21). When ``enqueue`` is called +# with a fresh ``files`` list and the run's existing job is in one of these +# states, the row is re-armed in QUEUED with the new subset -- this is how a +# file modified after a prior verify, or queued onto a permanently-failed +# run, gets re-synced. +_TERMINAL_ENQUEUE_STATES: frozenset[SyncJobState] = frozenset( + { + SyncJobState.VERIFIED, + SyncJobState.CLEANUP_ELIGIBLE, + SyncJobState.CLEANED, + SyncJobState.FAILED, + }, +) + + # --------------------------------------------------------------------------- # Public DTOs # --------------------------------------------------------------------------- @@ -86,106 +109,55 @@ class SyncJobHandle: # --------------------------------------------------------------------------- -def _build_transport_driver(equipment: EquipmentConfig) -> tuple[Any, Callable[..., Any]]: - """Return a ``(driver, push_callable)`` pair for ``equipment.transport``. - - The push callable closes over the equipment's static ``ssh_target`` / - ``rclone_remote`` so the queue worker only needs the local source - path and the per-equipment bandwidth cap at call time. Both rclone - and rsync_ssh push closures nest the remote target under - ``/`` so each run lives in its own subdir - on the NAS, matching the Β§7.1.4 hashsum probe layout. +def _remote_subpath(base_root: str, equipment_id: str, run: Path) -> str: + """Compose the run-relative ``//`` path. - Stage-mode equipment (Redesign Β§3.2, ``sync_mode == 'stage'``) has no - ``transport`` block β€” the orchestrator owns the NAS sync. The - EquipmentConfig validator guarantees this function only runs against - nas-mode equipment. + Leaf semantics preserved: the run directory name is appended after the + equipment folder. Empty components (a blank ``base_root``) are dropped so + the composed path never carries a doubled slash. This is both the path + portion of the rclone target and the ``strip_prefix`` the lsjson reconcile + removes to recover run-relative keys. """ - transport = equipment.transport - if transport is None: - msg = ( - f"equipment {equipment.id!r} has sync_mode " - f"{equipment.sync_mode.value!r}; the NAS-sync queue only handles " - f"nas-mode equipment with a configured transport" - ) - raise ValueError(msg) - if isinstance(transport, RcloneTransport): - rclone_driver = RcloneDriver() - remote_name = transport.rclone_remote - remote_path = transport.rclone_remote_path - - async def _push_rclone(local: Path, *, bwlimit_kibps: int | None) -> TransportResult: - target = f"{remote_name}:{remote_path}/{local.name}" - return await rclone_driver.push(local, target, bwlimit_kibps=bwlimit_kibps) - - return rclone_driver, _push_rclone - - if isinstance(transport, RsyncSshTransport): - rsync_driver = RsyncDriver() - ssh_key = Path(transport.ssh_key_path).expanduser() - ssh_target = transport.ssh_target - remote_path_value = transport.remote_path - - async def _push_rsync(local: Path, *, bwlimit_kibps: int | None) -> TransportResult: - target = f"{remote_path_value}/{local.name}" - return await rsync_driver.push( - local, - ssh_target, - ssh_key, - target, - bwlimit_kibps=bwlimit_kibps, - ) + parts = [base_root.strip("/"), equipment_id, run.name] + return "/".join(p for p in parts if p) - return rsync_driver, _push_rsync - msg = f"unsupported transport type: {type(transport).__name__}" - raise ValueError(msg) +def _build_driver(config_path: str, perf: RclonePerf) -> RcloneDriver: + """Construct a :class:`RcloneDriver` for a named remote. + The named remote lives in the operator's ``rclone.conf`` (set up with + ``rclone config``); the driver only needs the optional ``--config`` + path override plus the parallelism dials. No keyring / env threading β€” + credentials are entirely the named remote's concern. -def _build_hashsum_callable( - equipment: EquipmentConfig, -) -> Callable[[Path], Awaitable[dict[str, str]]]: - """Return a remote-hashsum closure for ``equipment.transport``. - - The closure takes a local run directory and asks the remote-side - hash probe (``rclone hashsum sha256`` or ``ssh ... sha256sum``) for - the manifest of ``/``. Backend Spec - Β§7.1.4 (integrity-in-transit gap closure). Only called for nas-mode - equipment (Redesign Β§3.2). + Both the NAS leg and the orchestrator stage hop share the same + ``rclone.conf`` (their remotes live side by side), so the config path + is always ``nas.rclone_config_path``; only the perf dial differs by + ``sync_mode`` (the ``nas:`` block's ``perf`` vs + ``orchestrator.staging_perf``). """ - transport = equipment.transport - if transport is None: - msg = ( - f"equipment {equipment.id!r} has sync_mode " - f"{equipment.sync_mode.value!r}; remote-hashsum probes only " - f"apply to nas-mode equipment with a configured transport" - ) - raise ValueError(msg) - if isinstance(transport, RcloneTransport): - rclone_driver = RcloneDriver() - remote_name = transport.rclone_remote - remote_path = transport.rclone_remote_path + return RcloneDriver( + config_path=config_path or None, + transfers=perf.transfers, + checkers=perf.checkers, + ) - async def _hashsum_rclone(run_dir: Path) -> dict[str, str]: - target = f"{remote_name}:{remote_path}/{run_dir.name}" - return await rclone_driver.hashsum(target) - return _hashsum_rclone - - if isinstance(transport, RsyncSshTransport): - rsync_driver = RsyncDriver() - ssh_key = Path(transport.ssh_key_path).expanduser() - ssh_target = transport.ssh_target - remote_path_value = transport.remote_path - - async def _hashsum_rsync(run_dir: Path) -> dict[str, str]: - run_remote_path = f"{remote_path_value}/{run_dir.name}" - return await rsync_driver.hashsum(ssh_target, ssh_key, run_remote_path) - - return _hashsum_rsync +@dataclass(frozen=True, slots=True) +class _RemoteResolution: + """The ``(remote, base_root, perf)`` an equipment's ops resolve to. + + Computed once per equipment by :meth:`NASSyncClient._resolve_remote`, + branched by ``sync_mode``: stage-mode equipment use the orchestrator's + staging remote; every other equipment uses the ``nas:`` block. The + target string, the lsjson ``strip_prefix``, and the driver's perf dials + all derive from this one selection so the mode branch lives in exactly + one place. + """ - msg = f"unsupported transport type: {type(transport).__name__}" - raise ValueError(msg) + remote: str + base_root: str + perf: RclonePerf # --------------------------------------------------------------------------- @@ -220,19 +192,25 @@ def __init__( queue_db: Path, validator: Validator, cache_creation: CreationWriter, - verifier: Verifier | None = None, + sync_state_writer: SyncStateWriter | None = None, + keyring_store: Any = None, worker_poll_interval_s: float = 0.05, push_callable_factory: Callable[[EquipmentConfig], Callable[..., Any]] | None = None, - hashsum_callable_factory: ( - Callable[[EquipmentConfig], Callable[[Path], Awaitable[dict[str, str]]]] | None - ) = None, + check_callable_factory: Callable[[EquipmentConfig], Callable[..., Any]] | None = None, + lsjson_callable_factory: Callable[[EquipmentConfig], Callable[..., Any]] | None = None, remote_stat_callable: Callable[[SyncJobRow], bool] | None = None, ) -> None: self._config = config self._queue_db = queue_db self._validator = validator self._cache_creation = cache_creation - self._verifier = verifier or Verifier() + self._sync_state_writer = sync_state_writer or SyncStateWriter() + # Retained for additive compatibility: the rclone-named-remote + # migration moved credential handling entirely into the operator's + # ``rclone.conf``, so the client no longer resolves passwords from + # the keyring. ``tray/dependencies.py`` still passes this arg; it is + # accepted and ignored here until that caller is migrated. + self._keyring_store = keyring_store self._queue = SyncQueue(queue_db) self._equipment_by_id = {e.id: e for e in config.equipment} self._worker_poll_interval_s = worker_poll_interval_s @@ -240,11 +218,25 @@ def __init__( self._wake_event = asyncio.Event() self._stopping = False self._push_callable_factory = push_callable_factory - self._hashsum_callable_factory = hashsum_callable_factory + self._check_callable_factory = check_callable_factory + self._lsjson_callable_factory = lsjson_callable_factory # Default remote stat: optimistic OK so unit tests don't need # to wire a real network probe. self._remote_stat_callable = remote_stat_callable or (lambda _row: True) + def apply_config(self, config: Config) -> None: + """Swap the cached config + equipment map in place (no relaunch). + + The ``equipment_id -> EquipmentConfig`` lookup is rebuilt into a + local before assignment so the worker loop -- which runs in the + same event loop -- never observes a half-built map. In-flight + queued jobs carry their own captured paths; a removed equipment id + simply errors that one job exactly as it would after a relaunch. + """ + equipment_by_id = {e.id: e for e in config.equipment} + self._config = config + self._equipment_by_id = equipment_by_id + # ------------------------------------------------------------------ async API async def init(self) -> None: @@ -266,14 +258,44 @@ async def close(self) -> None: # ------------------------------------------------------------------ enqueue - async def enqueue(self, run_path: Path) -> SyncJobHandle: + async def enqueue( + self, + run_path: Path, + files: list[str] | None = None, + ) -> SyncJobHandle: """Pre-Sync Gate -> if hard-tier finding without override, mark ``sync_status='blocked_by_validation'``. Otherwise insert a ``QUEUED`` row. + ``files`` (operator-free per-file NAS sync, 2026-05-21) is the + per-file subset of run-relative POSIX paths eligible at enqueue + time; an empty / omitted list means "the whole run". + + The queue holds one row per ``run_path`` (UNIQUE). Re-enqueue + behaviour: + + * existing job in a **terminal** state (``VERIFIED`` / + ``CLEANUP_ELIGIBLE`` / ``CLEANED`` / ``FAILED``) **and** a + non-empty ``files`` list -> reset to ``QUEUED`` carrying the new + subset. This is how a file modified after a prior verify gets + re-synced. + * existing job in a terminal ``VERIFIED`` / ``CLEANUP_ELIGIBLE`` / + ``CLEANED`` state with an **empty** ``files`` list -> falls + through to a no-op: there is no subset to re-sync and a + successfully-verified run is not blindly re-queued. (Only a + terminal ``FAILED`` row with empty ``files`` is re-armed -- the + manual-retry branch below.) + * existing job **active** (``QUEUED`` / ``RUNNING`` / + ``AWAITING_VERIFY``) -> no-op (newly settled files ride the next + sweep). + * existing terminal ``FAILED`` job with no ``files`` -> re-armed + via ``reset_to_queued`` so the manual-retry contract holds. + * no existing job -> insert a ``QUEUED`` row with ``files``. + Returns a :class:`SyncJobHandle`. The handle's ``state`` is either :attr:`SyncHandleState.BLOCKED` or :attr:`SyncHandleState.QUEUED`. """ + files_tuple: tuple[str, ...] = tuple(files or ()) creation_path = creation_json_path(run_path) creation = await self._cache_creation.read_creation_snapshot(creation_path) @@ -294,9 +316,19 @@ async def enqueue(self, run_path: Path) -> SyncJobHandle: equipment_id = self._infer_equipment_id(run_path, creation) existing = await self._queue.get_by_run_path(run_path) if existing is not None: - # Re-enqueueing an existing run is a no-op except for FAILED rows, - # which we re-arm in QUEUED. + if existing.state in _TERMINAL_ENQUEUE_STATES and files_tuple: + # A file modified after a prior verify (or a permanently + # failed run carrying a fresh subset): re-arm the row in + # QUEUED with the new file list. + row = await self._queue.requeue_with_files(existing.id, files_tuple) + self._wake_event.set() + return SyncJobHandle( + job_id=row.id, + state=SyncHandleState.QUEUED, + run_path=str(run_path), + ) if existing.state == SyncJobState.FAILED: + # Manual retry with no fresh subset -- keep the old contract. row = await self._queue.reset_to_queued(existing.id) self._wake_event.set() return SyncJobHandle( @@ -304,6 +336,7 @@ async def enqueue(self, run_path: Path) -> SyncJobHandle: state=SyncHandleState.QUEUED, run_path=str(run_path), ) + # Active job (QUEUED / RUNNING / AWAITING_VERIFY): no-op. return SyncJobHandle( job_id=existing.id, state=SyncHandleState.QUEUED, @@ -314,6 +347,7 @@ async def enqueue(self, run_path: Path) -> SyncJobHandle: run_path=run_path, equipment_id=equipment_id, nas_path=self._compute_nas_path(creation), + files=files_tuple, ) self._wake_event.set() return SyncJobHandle(job_id=row.id, state=SyncHandleState.QUEUED, run_path=str(run_path)) @@ -335,13 +369,47 @@ async def retry(self, job_id: str) -> None: self._wake_event.set() async def force_verify(self, run_path: Path) -> VerifyResult: - """Recompute the local manifest and verify against itself. - - Used by the Settings "verify integrity" action. Does not advance - the queue state. + """Re-run ``rclone check --download`` against the configured remote. + + Used by the Settings "verify integrity" action. Reports only -- + does NOT advance the queue state and does NOT update + ``verified_sha256`` in ``sync_state.json`` (the rclone-only + migration deliberately keeps Slot A SHA capture scoped to the + sync-time path that has access to a freshly-read local copy). + + Resolves the equipment from ``run_path``'s first component, gathers + every tracked file in ``sync_state.json`` as the ``--files-from`` + subset, and asks the driver to compare. Returns a populated + :class:`VerifyResult`; the caller renders ``mismatched``, + ``missing``, and ``errors`` to the operator. A run with no + tracked files yields ``ok=True`` (nothing to verify). """ - manifest = await self._verifier.compute_local_manifest(run_path) - return await self._verifier.verify_against_local(run_path, manifest) + equipment: EquipmentConfig | None = None + for part in run_path.parts: + candidate = self._equipment_by_id.get(part) + if candidate is not None: + equipment = candidate + break + if equipment is None: + return VerifyResult( + ok=False, + error_kind=TransportErrorKind.UNKNOWN, + ) + state = await self._sync_state_writer.read(run_path) + files = tuple(sorted(state.files.keys())) + if not files: + return VerifyResult(ok=True) + check = self._build_check(equipment) + files_from = self._write_files_from(files) + try: + try: + check_result = await check(run_path, files_from=files_from) + except TransportError as exc: + return VerifyResult(ok=False, error_kind=exc.error_kind) + finally: + with contextlib.suppress(OSError): + files_from.unlink() + return VerifyResult.from_check_result(check_result) # ----------------------------------------------------------- worker @@ -388,7 +456,7 @@ async def _drive_job(self, job: SyncJobRow) -> None: terminal FAILED. On HASH_MISMATCH, single retry then terminal. On NETWORK or UNKNOWN, schedule a backoff retry. - On push success, transition RUNNING -> AWAITING_VERIFY and run - :meth:`_verify_pass` (local manifest + remote hashsum probe). + ``rclone check --download --combined`` via the check callable. - On verify success, transition to VERIFIED and bump ``sync_status`` to ``"synced"``. - On verify failure, route by ``VerifyResult.error_kind``: AUTH @@ -421,102 +489,120 @@ async def _drive_job(self, job: SyncJobRow) -> None: await self._queue.transition(job.id, SyncJobState.RUNNING) # Compute bandwidth cap for this attempt. Redesign Β§3.2: only - # nas-mode equipment reach the NAS sync queue (the EquipmentConfig - # validator guarantees transport is set when sync_mode == 'nas'); - # the None case is defensive. - assert equipment.transport is not None, ( - f"nas-mode equipment {equipment.id!r} must carry a transport block" - ) + # nas-mode equipment reach the NAS sync queue. The bandwidth policy + # is defined once on the ``nas:`` block (rclone.conf NAS-sync + # migration) rather than per-equipment. bwlimit = effective_bandwidth_limit_kibps( - equipment.transport.bandwidth, now_local=datetime.now() + self._config.nas.bandwidth, now_local=datetime.now() ) + # Slot A SHA capture (rclone-only migration, 2026-05-26). Compute + # the local SHA for every file the job wants to verify (the + # ``--files-from`` subset for a per-file enqueue, or the whole- + # run subtree when ``job.files`` is empty -- a whole-run enqueue, + # the manual force-sync path, or a first-sync poll sweep). Local + # disk I/O only, no wire cost; files removed mid-pass are simply + # absent from the resulting dict and the reconcile path skips + # writing ``verified_sha256`` for them. + verify_files: tuple[str, ...] = job.files or self._discover_run_files(run_path) + local_shas = await self._compute_local_shas(run_path, verify_files) + + # Per-file NAS sync (2026-05-21): when the job carries a file + # subset, write it to a temp ``--files-from`` list so the transport + # copies only those paths. An empty ``job.files`` keeps the + # whole-directory copy. push = self._build_push(equipment) + files_from_path: Path | None = None try: - result = await push(run_path, bwlimit_kibps=bwlimit) - except TransportError as exc: - await self._queue.record_failure(job.id, error=str(exc), terminal=False) - return + if job.files: + files_from_path = self._write_files_from(job.files) + try: + result = await push( + run_path, + bwlimit_kibps=bwlimit, + files_from=files_from_path, + ) + except TransportError as exc: + await self._queue.record_failure(job.id, error=str(exc), terminal=False) + return - if not result.ok: - await self._handle_push_failure(job, result) - return + if not result.ok: + await self._handle_push_failure(job, result) + return + finally: + if files_from_path is not None: + with contextlib.suppress(OSError): + files_from_path.unlink() # Push succeeded. Transition RUNNING -> AWAITING_VERIFY. await self._queue.transition(job.id, SyncJobState.AWAITING_VERIFY) - # Verify locally (the Β§7.1.4 manifest pass) and then compare - # against the remote-derived manifest. The local pass catches - # partial transports cheaply; the remote pass closes the - # integrity-in-transit gap and is the reason ``equipment`` flows - # in here -- the verifier needs the transport-specific hashsum - # callable. - try: - verify_result = await self._verify_pass(run_path, equipment) - except FileNotFoundError: - await self._queue.record_failure( + # Routine reconcile (rclone-named-remote migration, 2026-05-28): + # replace the per-push ``rclone check --download`` hash-verify with a + # cheap ``rclone lsjson`` listing. A file counts as synced when the + # remote entry exists, its size equals local, and its modtime is + # within ``mtime_tolerance_s`` of local. The expensive + # download-and-rehash gate now runs once, immediately before local + # deletion, in ``_maybe_cleanup``. + # + # An empty subset (a completely empty run dir) short-circuits to + # VERIFIED on the push alone -- there is nothing to reconcile. + if not verify_files: + await self._queue.transition( job.id, - error=TransportErrorKind.LOCAL_FILE_VANISHED.value, - terminal=True, + SyncJobState.VERIFIED, + increment_verify_passes=True, + verified_at=utc_now_iso(), ) + await self._mark_synced(run_path) + await self._maybe_cleanup(job.id, run_path) return - if not verify_result.ok: - # Spec Β§7.1.5 retry-class routing for verify failures. The - # remote hashsum probe may have raised TransportError before - # the verifier could compare manifests; in that case - # ``verify_result.error_kind`` carries the transport's - # classification: - # - # - AUTH -- terminal FAILED (configuration problem, no retry). - # - NETWORK / UNKNOWN -- non-terminal failure with backoff. - # - Any other case (genuine hash mismatch from - # ``verify_against_remote``, or a TransportError raised - # without a classified ``error_kind``, e.g. binary spawn - # failure) -- the Β§7.1.5 HASH_MISMATCH single-retry-then- - # terminal branch. A spawn failure routed this way means the - # worker re-queues once, retries the push+probe, and - # terminates FAILED on the second failure; the operator - # surfaces the binary-missing reason via ``last_error``. - kind = verify_result.error_kind - if kind is TransportErrorKind.AUTH: - await self._queue.record_failure( - job.id, - error=TransportErrorKind.AUTH.value, - terminal=True, - ) - return - if kind in ( - TransportErrorKind.NETWORK, - TransportErrorKind.UNKNOWN, - ): - await self._queue.record_failure( - job.id, - error=kind.value, - terminal=False, - ) - return - # Genuine hash mismatch (or unclassified probe failure): - # single retry of the transport phase by re-queuing once. - # Track the previous hash mismatch via ``last_error`` so a - # second failure becomes terminal. - previous = job.last_error or "" - if TransportErrorKind.HASH_MISMATCH.value in previous: - await self._queue.transition( - job.id, - SyncJobState.FAILED, - last_error=TransportErrorKind.HASH_MISMATCH.value, - ) - return + lsjson = self._build_lsjson(equipment) + try: + manifest = await lsjson(run_path) + except TransportError as exc: + await self._handle_verify_transport_error(job, exc) + return + + # Per-file reconciliation + Slot A SHA capture. Credit every file + # whose remote entry matches the local signature, even when some + # files in the batch are still missing remotely -- a single + # lagging file must not block the good ones from being recorded. + tol = self._config.nas.mtime_tolerance_s + synced_at = utc_now_iso() + credited: list[str] = [] + for rel in verify_files: + sig = self._file_signature(run_path / rel) + if sig is None: + continue + size, mtime_ns = sig + if manifest.matches(rel, size, mtime_ns / 1e9, tolerance_s=tol): + with contextlib.suppress(Exception): + await self._sync_state_writer.upsert_file( + run_path, + rel, + synced_signature=sig, + verified_at=synced_at, + verified_sha256=local_shas.get(rel), + ) + credited.append(rel) + + if len(credited) != len(verify_files): + # Some files did not reconcile against the remote listing yet. + # Re-queue immediately (no backoff) so the next sweep re-pushes + # and re-reconciles the laggards; the credited files stay + # recorded in ``sync_state.json``. await self._queue.transition( job.id, SyncJobState.QUEUED, - last_error=TransportErrorKind.HASH_MISMATCH.value, + last_error="remote_reconcile_incomplete", next_attempt_at="", ) return - # Promote to VERIFIED and record one verify pass. + # Every file reconciled. Promote to VERIFIED and record one verify + # pass. verified_iso = utc_now_iso() await self._queue.transition( job.id, @@ -530,30 +616,195 @@ async def _drive_job(self, job: SyncJobRow) -> None: # CLEANUP_ELIGIBLE -> CLEANED in one pass. await self._maybe_cleanup(job.id, run_path) + async def _handle_verify_transport_error(self, job: SyncJobRow, exc: TransportError) -> None: + """Route a verify-phase ``TransportError`` per spec Β§7.1.5. + + Mirrors the push-phase classification so a reconcile listing that + fails on auth terminates the job, while a transient network / + unknown failure schedules a backoff retry. Any other case (an + unclassified probe failure) falls into the HASH_MISMATCH + single-retry-then-terminal branch. + """ + kind = exc.error_kind + if kind is TransportErrorKind.AUTH: + await self._queue.record_failure( + job.id, error=TransportErrorKind.AUTH.value, terminal=True + ) + return + if kind in (TransportErrorKind.NETWORK, TransportErrorKind.UNKNOWN): + await self._queue.record_failure(job.id, error=kind.value, terminal=False) + return + previous = job.last_error or "" + if TransportErrorKind.HASH_MISMATCH.value in previous: + await self._queue.transition( + job.id, + SyncJobState.FAILED, + last_error=TransportErrorKind.HASH_MISMATCH.value, + ) + return + await self._queue.transition( + job.id, + SyncJobState.QUEUED, + last_error=TransportErrorKind.HASH_MISMATCH.value, + next_attempt_at="", + ) + + def _resolve_remote(self, equipment: EquipmentConfig) -> _RemoteResolution: + """Resolve the ``(remote, base_root, perf)`` triple for ``equipment``. + + The single ``sync_mode`` branch (rclone.conf NAS-sync migration, + Phase 8): stage-mode equipment push to the orchestrator's staging + remote (``orchestrator.staging_remote`` + ``staging_base_root`` + + ``staging_perf``); every other equipment uses the ``nas:`` block + (named remote + base root + perf). The target string, the lsjson + ``strip_prefix``, and the driver perf dials all derive from this one + selection, so the mode branch is never duplicated. + """ + if equipment.sync_mode == SyncMode.STAGE: + orch = self._config.orchestrator + return _RemoteResolution( + remote=orch.staging_remote, + base_root=orch.staging_base_root, + perf=orch.staging_perf, + ) + nas = self._config.nas + return _RemoteResolution(remote=nas.remote, base_root=nas.base_root, perf=nas.perf) + + def _target_for_equipment(self, equipment: EquipmentConfig, run: Path) -> str: + """Compose the rclone target ``:///``. + + The ``(remote, base_root)`` selection comes from + :meth:`_resolve_remote`; the path portion reuses + :func:`_remote_subpath`. + """ + resolution = self._resolve_remote(equipment) + subpath = _remote_subpath(resolution.base_root, equipment.id, run) + return f"{resolution.remote}:/{subpath}" + + def _driver_for_equipment(self, equipment: EquipmentConfig) -> RcloneDriver: + """Build the :class:`RcloneDriver` for ``equipment``. + + The perf dials come from :meth:`_resolve_remote` (``staging_perf`` for + stage-mode, the ``nas:`` block's ``perf`` otherwise). Every equipment + shares ``nas.rclone_config_path`` as the ``--config`` override -- the + staging and NAS remotes live in the same ``rclone.conf``. + """ + return _build_driver( + self._config.nas.rclone_config_path, self._resolve_remote(equipment).perf + ) + def _build_push(self, equipment: EquipmentConfig) -> Callable[..., Any]: - """Resolve the push callable for ``equipment.transport``. + """Resolve the push callable for ``equipment``. Tests can inject a custom factory via the constructor's - ``push_callable_factory`` argument so they don't need real - rclone / rsync binaries. + ``push_callable_factory`` argument so they don't need a real + rclone binary on PATH. The default closure builds the per-equipment + target + driver (nas remote, or the orchestrator staging remote for + stage-mode) and calls the named-remote driver. """ if self._push_callable_factory is not None: return self._push_callable_factory(equipment) - _, push = _build_transport_driver(equipment) - return push + driver = self._driver_for_equipment(equipment) + + async def _push( + local: Path, + *, + bwlimit_kibps: int | None, + files_from: Path | None = None, + ) -> TransportResult: + target = self._target_for_equipment(equipment, local) + return await driver.push( + local, target, bwlimit_kibps=bwlimit_kibps, files_from=files_from + ) + + return _push - def _build_hashsum( - self, equipment: EquipmentConfig - ) -> Callable[[Path], Awaitable[dict[str, str]]]: - """Resolve the hashsum callable for ``equipment.transport``. + def _build_check(self, equipment: EquipmentConfig) -> Callable[..., Any]: + """Resolve the ``rclone check --download`` callable for ``equipment``. Tests can inject a custom factory via the constructor's - ``hashsum_callable_factory`` argument so they don't need real - rclone / rsync binaries (or network access). + ``check_callable_factory`` argument. The default closure builds + the per-equipment target + driver and calls the named-remote + driver β€” the expensive hash-verify is now reserved for the + pre-deletion integrity gate in :meth:`_maybe_cleanup`. """ - if self._hashsum_callable_factory is not None: - return self._hashsum_callable_factory(equipment) - return _build_hashsum_callable(equipment) + if self._check_callable_factory is not None: + return self._check_callable_factory(equipment) + driver = self._driver_for_equipment(equipment) + + async def _check(local: Path, *, files_from: Path) -> Any: + target = self._target_for_equipment(equipment, local) + return await driver.check(local, target, files_from=files_from) + + return _check + + def _build_lsjson(self, equipment: EquipmentConfig) -> Callable[..., Any]: + """Resolve the cheap ``rclone lsjson`` reconcile probe for ``equipment``. + + Tests can inject a custom factory via the constructor's + ``lsjson_callable_factory`` argument so they can supply a stub + returning a crafted :class:`RemoteManifest`. The default closure + lists the remote run subtree and parses it into a run-relative + manifest (the routine post-push reconcile and the cleanup + existence probe both consume the manifest, never the raw JSON). + The ``strip_prefix`` uses the per-equipment base root (the staging + base root for stage-mode). + """ + if self._lsjson_callable_factory is not None: + return self._lsjson_callable_factory(equipment) + driver = self._driver_for_equipment(equipment) + base_root = self._resolve_remote(equipment).base_root + + async def _lsjson(run: Path) -> RemoteManifest: + target = self._target_for_equipment(equipment, run) + raw = await driver.lsjson(target) + prefix = _remote_subpath(base_root, equipment.id, run) + return parse_lsjson(raw, strip_prefix=prefix) + + return _lsjson + + async def _compute_local_shas( + self, + run_path: Path, + files: tuple[str, ...], + ) -> dict[str, str]: + """Compute the SHA-256 hex digest of each file in ``files``. + + Slot A of the 2026-05-26 rclone-only migration. The dict the + method returns is keyed by run-relative POSIX path and consumed + by the routine reconcile in :meth:`_drive_job` to populate + ``sync_state.json:files[*].verified_sha256``. Files that + disappear between Slot A and the lsjson reconcile (an equipment + machine pulled mid-sweep) are simply absent from the dict and + the reconcile path skips writing ``verified_sha256`` for them. + + Each per-file hash runs in ``asyncio.to_thread`` so a multi-GB + file does not block the event loop. + """ + import hashlib + + def _read_and_hash(path: Path) -> str | None: + try: + handle = path.open("rb") + except OSError: + return None + try: + digest = hashlib.sha256() + while True: + chunk = handle.read(65536) + if not chunk: + break + digest.update(chunk) + return digest.hexdigest() + finally: + handle.close() + + out: dict[str, str] = {} + for rel in files: + digest = await asyncio.to_thread(_read_and_hash, run_path / rel) + if digest is not None: + out[rel] = digest + return out async def _handle_push_failure(self, job: SyncJobRow, result: TransportResult) -> None: """Translate a transport failure into a queue update.""" @@ -579,50 +830,88 @@ async def _handle_push_failure(self, job: SyncJobRow, result: TransportResult) - # NETWORK / UNKNOWN -> backoff retry. await self._queue.record_failure(job.id, error=kind.value, terminal=False) - async def _verify_pass(self, run_path: Path, equipment: EquipmentConfig) -> VerifyResult: - """Run one local manifest + verify pass, then probe the remote. - - The local pass is the cheap pre-check; if the local subtree no - longer matches its own freshly-computed manifest, we return that - result immediately without spending a remote round-trip. Otherwise - we ask the transport for its remote-side manifest and compare via - :meth:`Verifier.verify_against_remote` (Backend Spec Β§7.1.4 -- the - integrity-in-transit gap closure). - - A :class:`TransportError` from the hashsum probe is surfaced as a - verify failure (``ok=False``) carrying the transport's classified - ``error_kind``. The Β§7.1.4 step-2 contract mandates a remote - SHA-256 walk; silently skipping it on a probe error would let the - job promote through VERIFIED -> CLEANED without the integrity - check. ``_drive_job`` keys off ``error_kind`` to route the failure - through the spec-correct Β§7.1.5 retry path (AUTH -> terminal, - NETWORK / UNKNOWN -> backoff, every other case including a - missing-binary spawn failure -> single retry then terminal). + @staticmethod + def _discover_run_files(run_path: Path) -> tuple[str, ...]: + """Return every non-cache regular file under ``run_path`` as POSIX rel paths. + + Used by ``_drive_job`` whenever ``job.files`` is empty (a whole- + run enqueue / force-sync / first poll sweep) so the verify pass + has a concrete subset to scope itself to. Mirrors the + pre-migration ``compute_local_manifest`` walk in scope -- the + ``.exlab-wizard/`` cache dir is excluded so we never try to + verify our own metadata against the NAS. """ - manifest = await self._verifier.compute_local_manifest(run_path) - local_result = await self._verifier.verify_against_local(run_path, manifest) - if not local_result.ok: - return local_result + from exlab_wizard.constants import CACHE_DIR_NAME - hashsum = self._build_hashsum(equipment) + if not run_path.exists() or not run_path.is_dir(): + return () + out: list[str] = [] + for path in sorted(run_path.rglob("*")): + if not path.is_file(): + continue + rel = path.relative_to(run_path) + if CACHE_DIR_NAME in rel.parts: + continue + out.append(rel.as_posix()) + return tuple(out) + + @staticmethod + def _file_signature(path: Path) -> tuple[int, int] | None: + """Return the ``(st_size, st_mtime_ns)`` signature for ``path``.""" try: - remote_manifest = await hashsum(run_path) - except TransportError as exc: - _log.warning("remote hashsum probe failed: %s", exc) - return VerifyResult( - ok=False, - manifest=dict(manifest), - error_kind=exc.error_kind, - ) - return self._verifier.verify_against_remote(manifest, remote_manifest) + stat = path.stat() + except OSError: + return None + return (stat.st_size, stat.st_mtime_ns) + + @staticmethod + def _write_files_from(files: tuple[str, ...]) -> Path: + """Write a transport ``--files-from`` list and return its path. + + One run-relative POSIX path per line. The caller is responsible for + unlinking the temp file once the transport invocation completes. + """ + handle = tempfile.NamedTemporaryFile( # noqa: SIM115 -- caller unlinks + mode="w", + encoding="utf-8", + prefix="exlab-files-from-", + suffix=".txt", + delete=False, + ) + try: + handle.write("\n".join(files) + "\n") + finally: + handle.close() + return Path(handle.name) async def _maybe_cleanup(self, job_id: str, run_path: Path) -> None: - """Apply the Β§7.1.6 interlocks; if all pass, run the cleanup.""" + """Apply the Β§7.1.6 interlocks; if all pass, run the cleanup. + + Operator-free per-file NAS sync design ("Cleanup -- rollup"): with + per-file sync a job reaching ``VERIFIED`` only means *that job's + file subset* verified -- the run may still hold unsynced files from + a later sweep. Cleanup therefore additionally requires the whole-run + ``sync_state.json`` rollup to be ``SYNCED`` (every tracked file + verified); a partially-synced run is left for a later pass. + """ if not self._config.nas_cleanup.enabled: return job = await self._queue.get_by_id(job_id) if job is None or job.state != SyncJobState.VERIFIED: return + + # Whole-run rollup gate: every tracked file must be verified before + # any local deletion. A job's VERIFIED only covers its own subset. + sync_state = await self._sync_state_writer.read(run_path) + rollup = self._sync_state_writer.rollup_state(sync_state) + if rollup != RunSyncState.SYNCED: + _log.debug( + "cleanup deferred: run %s not fully SYNCED (rollup=%s)", + run_path, + rollup.value, + ) + return + creation_path = creation_json_path(run_path) creation: CreationJson | None = None if creation_path.exists(): @@ -643,33 +932,77 @@ async def _maybe_cleanup(self, job_id: str, run_path: Path) -> None: await self._queue.transition(job_id, SyncJobState.CLEANUP_ELIGIBLE) return - # Promote to CLEANUP_ELIGIBLE then perform the deletion. + # Integrity gate (rclone-named-remote migration, 2026-05-28): the + # routine sync path only reconciled size + modtime via lsjson, so + # the expensive download-and-rehash runs exactly once here, right + # before any irreversible local deletion. Two stages over the + # tracked files: (1) a cheap lsjson existence probe confirms every + # tracked file is present remotely; (2) ``rclone check --download`` + # streams each file back and hashes it locally. Any failure (a + # transport error, a missing file, or a hash mismatch) defers the + # run in CLEANUP_ELIGIBLE rather than deleting -- a later sweep + # retries the gate. + equipment = self._equipment_by_id.get(job.equipment_id) + tracked = tuple(sorted(sync_state.files.keys())) + if equipment is not None and tracked: + lsjson = self._build_lsjson(equipment) + try: + manifest = await lsjson(run_path) + except TransportError: + await self._queue.transition(job_id, SyncJobState.CLEANUP_ELIGIBLE) + return + if not all(manifest.has(rel) for rel in tracked): + await self._queue.transition(job_id, SyncJobState.CLEANUP_ELIGIBLE) + return + + check = self._build_check(equipment) + files_from = self._write_files_from(tracked) + try: + try: + check_result = await check(run_path, files_from=files_from) + except TransportError: + await self._queue.transition(job_id, SyncJobState.CLEANUP_ELIGIBLE) + return + verify = VerifyResult.from_check_result(check_result) + finally: + with contextlib.suppress(OSError): + files_from.unlink() + if not verify.ok: + await self._queue.transition(job_id, SyncJobState.CLEANUP_ELIGIBLE) + return + + # Promote to CLEANUP_ELIGIBLE then perform the deletion. Files the + # operator flagged ``keep_local`` survive the sweep. await self._queue.transition(job_id, SyncJobState.CLEANUP_ELIGIBLE) - self._delete_local(run_path) + keep_local = {rel for rel, rec in sync_state.files.items() if rec.keep_local} + self._delete_local(run_path, keep_local) await self._mark_cleaned(run_path) + # Stamp ``cleared_at`` in ``sync_state.json`` so the run rolls up to + # CLEARED. Skipped when the whole-run ``retain_cache=False`` delete + # removed the cache directory along with the data files -- there is + # no surviving record to stamp. + if cache_dir(run_path).exists(): + await self._sync_state_writer.mark_cleared(run_path) await self._queue.transition(job_id, SyncJobState.CLEANED) - def _delete_local(self, run_path: Path) -> None: - """Delete ``run_path`` data files honoring ``retain_cache``. + def _delete_local( + self, + run_path: Path, + keep_local: set[str] | None = None, + ) -> None: + """Delete ``run_path`` data files honoring ``retain_cache`` and ``keep_local``. - With the default ``retain_cache=True`` we keep the - ``.exlab-wizard/`` subtree so the local browse view can still - render the run with a ``cleaned`` badge (Β§7.1.10). + Thin wrapper over the shared :func:`exlab_wizard.sync.run_delete.delete_run_files` + helper so the automatic cleanup reaper and the operator-facing + ``clear_run_dir`` stay in lockstep: ``keep_local`` files survive, the + ``.exlab-wizard/`` subtree survives (when ``retain_cache``), and + directory symlinks are never descended into or removed. """ - if not run_path.exists(): - return - retain = self._config.nas_cleanup.retain_cache - if retain: - for entry in run_path.iterdir(): - if entry.name == CACHE_DIR_NAME: - continue - if entry.is_dir(): - shutil.rmtree(entry, ignore_errors=True) - else: - with contextlib.suppress(OSError): - entry.unlink() - else: - shutil.rmtree(run_path, ignore_errors=True) + delete_run_files( + run_path, + keep_local=keep_local or set(), + retain_cache=self._config.nas_cleanup.retain_cache, + ) # ----------------------------------------------------------- helpers diff --git a/src/exlab_wizard/sync/queue.py b/src/exlab_wizard/sync/queue.py index bae35c9..b2b7387 100644 --- a/src/exlab_wizard/sync/queue.py +++ b/src/exlab_wizard/sync/queue.py @@ -31,12 +31,19 @@ verify_passes INTEGER NOT NULL DEFAULT 0, verified_at TEXT, enqueued_at TEXT NOT NULL, - nas_path TEXT + nas_path TEXT, + files TEXT NOT NULL DEFAULT '[]' ) + +The ``files`` column holds a JSON array of run-relative POSIX paths -- +the per-file subset eligible at enqueue time (operator-free per-file NAS +sync design, 2026-05-21). An empty list (``'[]'``) means "the whole run", +preserving back-compat for callers that do not pass a file list. """ from __future__ import annotations +import json import uuid from dataclasses import dataclass, replace from datetime import datetime, timedelta @@ -93,7 +100,8 @@ class SyncJobState(StrEnum): verify_passes INTEGER NOT NULL DEFAULT 0, verified_at TEXT, enqueued_at TEXT NOT NULL, - nas_path TEXT + nas_path TEXT, + files TEXT NOT NULL DEFAULT '[]' ) """ @@ -120,6 +128,29 @@ class SyncJobRow: verified_at: str | None = None enqueued_at: str = "" nas_path: str | None = None + files: tuple[str, ...] = () + + +def _decode_files(raw: str | None) -> tuple[str, ...]: + """Decode the ``files`` JSON column into a tuple of run-relative paths. + + A ``NULL`` / empty / ``'[]'`` column yields ``()`` -- the "whole run" + semantics that pre-Phase-4 callers rely on. + """ + if not raw: + return () + try: + decoded = json.loads(raw) + except (ValueError, TypeError): + return () + if not isinstance(decoded, list): + return () + return tuple(str(item) for item in decoded) + + +def _encode_files(files: tuple[str, ...]) -> str: + """Encode a run-relative path tuple into the ``files`` JSON column.""" + return json.dumps(list(files)) def _row_to_job(row: aiosqlite.Row | tuple) -> SyncJobRow: @@ -137,6 +168,7 @@ def _row_to_job(row: aiosqlite.Row | tuple) -> SyncJobRow: verified_at=row[9], enqueued_at=row[10] or "", nas_path=row[11], + files=_decode_files(row[12]), ) @@ -228,9 +260,13 @@ async def insert( equipment_id: str, nas_path: str | None = None, job_id: str | None = None, + files: tuple[str, ...] | list[str] | None = None, ) -> SyncJobRow: """Insert a new ``QUEUED`` row for ``run_path``. + ``files`` is the per-file subset (run-relative POSIX paths) eligible + at enqueue time; an empty / omitted list means "the whole run". + Raises :class:`aiosqlite.IntegrityError` (via the UNIQUE constraint on ``run_path``) if a row already exists for the same path. """ @@ -242,14 +278,15 @@ async def insert( state=SyncJobState.QUEUED, enqueued_at=utc_now_iso(), nas_path=nas_path, + files=tuple(files or ()), ) await conn.execute( """ INSERT INTO jobs ( id, run_path, equipment_id, state, attempts, last_attempt_at, next_attempt_at, last_error, - verify_passes, verified_at, enqueued_at, nas_path - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + verify_passes, verified_at, enqueued_at, nas_path, files + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) """, ( row.id, @@ -264,6 +301,7 @@ async def insert( row.verified_at, row.enqueued_at, row.nas_path, + _encode_files(row.files), ), ) await conn.commit() @@ -459,6 +497,40 @@ async def reset_to_queued(self, job_id: str) -> SyncJobRow: await conn.commit() return await self.get_by_id(job_id) # type: ignore[return-value] + async def requeue_with_files( + self, + job_id: str, + files: tuple[str, ...] | list[str], + ) -> SyncJobRow: + """Reset a terminal job back to ``QUEUED`` carrying a new ``files`` list. + + Operator-free per-file NAS sync design (2026-05-21): a file modified + after a prior verify becomes re-eligible. When the poller observes + such a file it re-arms the run's terminal job (``VERIFIED`` / + ``CLEANUP_ELIGIBLE`` / ``CLEANED`` / ``FAILED``) with the freshly + eligible subset. ``attempts`` / ``last_error`` / ``verify_passes`` + are cleared so the backoff schedule and verify counter start fresh. + """ + await self._require_job(job_id) + conn = self._require_conn() + await conn.execute( + """ + UPDATE jobs SET + state = ?, + attempts = 0, + last_attempt_at = NULL, + next_attempt_at = NULL, + last_error = NULL, + verify_passes = 0, + verified_at = NULL, + files = ? + WHERE id = ? + """, + (SyncJobState.QUEUED.value, _encode_files(tuple(files)), job_id), + ) + await conn.commit() + return await self.get_by_id(job_id) # type: ignore[return-value] + async def delete(self, job_id: str) -> None: """Remove a job row entirely. Used by the cleanup reaper after CLEANED.""" conn = self._require_conn() diff --git a/src/exlab_wizard/sync/run_delete.py b/src/exlab_wizard/sync/run_delete.py new file mode 100644 index 0000000..b747522 --- /dev/null +++ b/src/exlab_wizard/sync/run_delete.py @@ -0,0 +1,116 @@ +"""Keep-local-aware, symlink-safe deletion of a run's staging copy. + +Operator-free per-file NAS sync design (2026-05-21). Both the automatic +cleanup reaper (:meth:`exlab_wizard.sync.nas_client.NASSyncClient._delete_local`) +and the operator-facing "Clear" actions +(:func:`exlab_wizard.orchestrator.staging_clear.clear_run_dir`) must delete a +run's staging copy with **identical** semantics: + +* files flagged ``keep_local`` in ``sync_state.json`` survive (the spec's + keep-local guarantee: "excluded from cleanup deletion"); +* the ``.exlab-wizard/`` metadata subtree survives so a cleared run still + renders its files as "On NAS" tombstones; +* directory **symlinks are never descended into or removed** -- a staged run + containing a symlink to an external directory must not have files deleted + outside the run tree. + +This module is the single shared implementation. It is a pure filesystem +helper -- no ``SyncStateWriter`` / ``api`` / ``orchestrator`` imports -- so it +can be imported from anywhere without circular-import risk. The callers own +reading the ``keep_local`` set and stamping ``cleared_at``. +""" + +from __future__ import annotations + +import contextlib +import os +import shutil +from pathlib import Path + +from exlab_wizard.constants import CACHE_DIR_NAME +from exlab_wizard.logging import get_logger + +__all__ = ["delete_run_files"] + +_log = get_logger(__name__) + + +def delete_run_files( + run_path: Path, + *, + keep_local: set[str], + retain_cache: bool, +) -> None: + """Delete ``run_path`` data files honoring ``retain_cache`` and ``keep_local``. + + ``keep_local`` is a set of run-relative POSIX paths (possibly nested) that + must survive the sweep. ``retain_cache`` keeps the ``.exlab-wizard/`` + subtree when ``True``. + + The whole-run ``shutil.rmtree`` fast path is used only when + ``retain_cache`` is ``False`` **and** there are no ``keep_local`` files; + any kept file (or a retained cache) forces the per-file walk so it + survives. The walk does not follow directory symlinks -- a symlinked + directory inside the run is left entirely untouched (neither its contents + deleted nor the link removed). + + Idempotent: a missing ``run_path`` is a no-op. + """ + if not run_path.exists(): + return + if not retain_cache and not keep_local: + # No retained files and no cache to preserve: drop the whole run. + # ``rmtree`` does not follow the top-level dir if it is itself a + # symlink (it raises) -- a run dir is always a real directory here. + shutil.rmtree(run_path, ignore_errors=True) + return + + # Per-file walk: delete every file that is neither under + # ``.exlab-wizard/`` nor flagged ``keep_local``. ``followlinks=False`` + # (the os.walk default, made explicit) keeps the walk inside the run + # tree -- a symlinked subdirectory is yielded as a name but never + # descended into, so its target's contents are never touched. + for dirpath, dirnames, filenames in os.walk(run_path, followlinks=False): + current = Path(dirpath) + # Do not descend into the cache subtree or any symlinked directory. + dirnames[:] = [ + d for d in dirnames if d != CACHE_DIR_NAME and not (current / d).is_symlink() + ] + rel_dir = current.relative_to(run_path) + if rel_dir.parts and rel_dir.parts[0] == CACHE_DIR_NAME: + continue + for name in filenames: + entry = current / name + rel = (rel_dir / name).as_posix() + if rel in keep_local: + continue + # A file that is itself a symlink: unlink the link only (never + # the target). ``unlink`` does exactly that. + with contextlib.suppress(OSError): + entry.unlink() + _prune_empty_dirs(run_path) + + +def _prune_empty_dirs(run_path: Path) -> None: + """Remove now-empty real directories under ``run_path`` (deepest first). + + The run directory itself, the ``.exlab-wizard/`` cache subtree, and any + symlinked directory are never removed. A real directory left empty by the + delete walk is pruned so cleanup leaves only retained files and metadata. + """ + cache_dir_path = run_path / CACHE_DIR_NAME + real_dirs: list[Path] = [] + for dirpath, dirnames, _filenames in os.walk(run_path, followlinks=False): + current = Path(dirpath) + # Prune symlinked directories from the descent so we never rmdir one. + dirnames[:] = [d for d in dirnames if not (current / d).is_symlink()] + if current != run_path: + real_dirs.append(current) + # Deepest first so a parent emptied by pruning its children is itself + # prunable in the same pass. + for directory in sorted(real_dirs, key=lambda p: len(p.parts), reverse=True): + if directory == cache_dir_path or cache_dir_path in directory.parents: + continue + with contextlib.suppress(OSError): + if not any(directory.iterdir()): + directory.rmdir() diff --git a/src/exlab_wizard/sync/transports/_run.py b/src/exlab_wizard/sync/transports/_run.py index 1968a1d..2bc6258 100644 --- a/src/exlab_wizard/sync/transports/_run.py +++ b/src/exlab_wizard/sync/transports/_run.py @@ -1,26 +1,40 @@ """Shared asyncio subprocess helper for transport drivers. Backend Spec Β§7.1.3. -Both :mod:`rclone` and :mod:`rsync_ssh` shell out to an external binary -and share identical subprocess-spawn + decode logic. This helper -centralises that repeated block so each transport module only contains -its binary-specific argument construction and failure classification. +The rclone driver shells out to an external binary; this helper centralises +the spawn + decode logic so the driver only owns its binary-specific +argument construction and failure classification. + +This is a plain spawn helper: it launches ``cmd`` in the inherited +process environment and returns its decoded ``(returncode, stdout, +stderr)``. The rclone.conf NAS-sync migration removed all credential +injection, so there is no per-call ``env`` override, stdin piping, or +log redaction here -- NAS credentials live entirely in the operator's +``rclone.conf``. """ from __future__ import annotations import asyncio +import shlex + +from exlab_wizard.logging import get_logger __all__ = ["run_subprocess"] +_log = get_logger(__name__) + async def run_subprocess(cmd: list[str]) -> tuple[int, str, str]: - """Launch ``cmd`` via ``asyncio.create_subprocess_exec`` and return - ``(returncode, stdout, stderr)`` as strings decoded via UTF-8. + """Launch ``cmd`` and return ``(returncode, stdout, stderr)`` as text. - Raises ``FileNotFoundError`` when the binary named in ``cmd[0]`` is - not found; callers are expected to convert this to a + The child inherits this process's environment unchanged. + + Raises :class:`FileNotFoundError` when the binary named in ``cmd[0]`` + is not on PATH; callers convert this to a :class:`~exlab_wizard.sync.transports.TransportError`. """ + _log.debug("subprocess cmd: %s", shlex.join(cmd)) + proc = await asyncio.create_subprocess_exec( *cmd, stdout=asyncio.subprocess.PIPE, diff --git a/src/exlab_wizard/sync/transports/rclone.py b/src/exlab_wizard/sync/transports/rclone.py index 40c4dcf..44ce4e0 100644 --- a/src/exlab_wizard/sync/transports/rclone.py +++ b/src/exlab_wizard/sync/transports/rclone.py @@ -1,20 +1,27 @@ """rclone transport driver. Backend Spec Β§7.1.3. -Shells out to ``rclone copy --checksum --bwlimit=K :``. -The remote name and path live in ``config.yaml`` -(``equipment.transport.rclone_remote`` + ``rclone_remote_path``); rclone -itself reads ``rclone.conf`` for the credential map. - -The driver is intentionally thin: it calls the binary, captures stdout / -stderr, and translates the exit-code + stderr-substring into one of the -``TransportErrorKind`` retry classes. Hash verification is the -:mod:`exlab_wizard.sync.verifier` module's responsibility, NOT this -driver's. +Single transport binary for the NAS sync subsystem. Push uses +``rclone copy --checksum --files-from``; verify uses ``rclone check +--download --combined`` which streams remote bytes back and computes +SHA-256 locally (the only way to integrity-check SFTP and SMB backends, +which expose no server-side hashing). + +The driver is intentionally thin: it builds an argv, hands it to +:func:`exlab_wizard.sync.transports._run.run_subprocess`, and +translates the exit-code + stderr-substring into one of the +``TransportErrorKind`` retry classes. + +rclone.conf NAS-sync migration: the connection (host, credentials, +backend type) is defined entirely by a named remote in the operator's +``rclone.conf``. The driver injects no credentials and never sees a +password -- it only passes ``--config `` when the ``nas:`` block +pins one. """ from __future__ import annotations import shlex +from dataclasses import dataclass, field from pathlib import Path from exlab_wizard.logging import get_logger @@ -25,13 +32,17 @@ ) from exlab_wizard.sync.transports._run import run_subprocess -__all__ = ["RcloneTransport"] +__all__ = [ + "AboutResult", + "CheckResult", + "RcloneDriver", +] _log = get_logger(__name__) # Substrings that indicate authentication failure rather than a transient -# network error. The match is case-insensitive. +# network error. Match case-insensitive against the stderr. _AUTH_FAILURE_MARKERS: tuple[str, ...] = ( "auth_error", "authentication failed", @@ -39,14 +50,18 @@ "401 unauthorized", "403 forbidden", "access denied", + "nt_status_logon_failure", + "nt_status_access_denied", ) def _classify_failure(stderr: str, returncode: int) -> TransportErrorKind: """Map a (returncode, stderr) into a :class:`TransportErrorKind`. - Auth failures (``401 / 403 / "permission denied"``) are terminal; - every other non-zero code is treated as a retryable network error. + Auth failures (auth markers, ``401``, ``403``, "permission denied") + are terminal; "hash mismatch" / "checksum mismatch" surfaces as + :attr:`TransportErrorKind.HASH_MISMATCH`; every other non-zero code + is treated as a retryable network error. """ lowered = stderr.lower() if any(marker in lowered for marker in _AUTH_FAILURE_MARKERS): @@ -58,11 +73,87 @@ def _classify_failure(stderr: str, returncode: int) -> TransportErrorKind: return TransportErrorKind.UNKNOWN -class RcloneTransport: +# --------------------------------------------------------------------------- +# Public DTOs +# --------------------------------------------------------------------------- + + +@dataclass(frozen=True, slots=True) +class CheckResult: + """Parsed result of a ``rclone check --combined`` run. + + The combined-output format emits one prefixed line per file: + + - ``= path`` -- present and identical on both sides + - ``* path`` -- present on both sides but differs + - ``+ path`` -- present on the destination only + - ``- path`` -- missing on the destination + - ``! path`` -- error encountered checking this path + + Each field below carries the run-relative POSIX paths corresponding + to its prefix. + """ + + equal: tuple[str, ...] = () + differ: tuple[str, ...] = () + extra_on_dst: tuple[str, ...] = () + missing_on_dst: tuple[str, ...] = () + errors: tuple[str, ...] = () + + +@dataclass(frozen=True, slots=True) +class AboutResult: + """Outcome of ``rclone about --json``. + + Surfaces as the equipment-probe response. ``ok`` flips true when + rclone returned 0; ``reason`` carries the classified failure mode + otherwise. ``info`` holds the parsed JSON payload on success + (free-space, used, etc.) so the Settings panel can render it. + """ + + ok: bool + reason: str | None = None + info: dict[str, int] = field(default_factory=dict) + + +# --------------------------------------------------------------------------- +# Driver +# --------------------------------------------------------------------------- + + +class RcloneDriver: """rclone transport driver. Backend Spec Β§7.1.3.""" - def __init__(self, *, binary: str = "rclone") -> None: + def __init__( + self, + *, + binary: str = "rclone", + config_path: str | None = None, + transfers: int | None = None, + checkers: int | None = None, + ) -> None: self._binary = binary + self._config_path = config_path or None + self._transfers = transfers + self._checkers = checkers + + def _global_flags(self) -> list[str]: + """Flags valid on every rclone subcommand we invoke.""" + flags: list[str] = [] + if self._config_path: + flags.extend(["--config", self._config_path]) + return flags + + def _checkers_flags(self) -> list[str]: + """``--checkers `` when the parallelism dial is set, else empty. + + Shared by ``push`` / ``check`` / ``lsjson`` -- every subcommand that + runs a checker pass -- so the dial is forwarded the same way in one + place. + """ + if self._checkers is None: + return [] + return ["--checkers", str(self._checkers)] async def push( self, @@ -70,21 +161,30 @@ async def push( remote: str, *, bwlimit_kibps: int | None = None, + files_from: Path | None = None, ) -> TransportResult: """Run ``rclone copy --checksum`` from ``local`` to ``remote``. - ``remote`` is the full ``:`` string per the - rclone spec. ``bwlimit_kibps`` (KiB/s) is forwarded as - ``--bwlimit K`` when set. + ``remote`` is the full ``:`` string; the named + remote (and its credentials) lives in the operator's + ``rclone.conf``. ``bwlimit_kibps`` is forwarded as + ``--bwlimit K`` when set; ``files_from`` is forwarded as + ``--files-from `` so only a subset of the local tree + transfers. - Returns a :class:`TransportResult` describing the outcome. A - process-spawn failure (binary missing) raises - :class:`TransportError` because no retry will help -- the lab - admin needs to install the binary. + Returns a :class:`TransportResult`. A spawn failure raises + :class:`TransportError` so the queue terminates rather than + looping on a missing binary. """ cmd: list[str] = [self._binary, "copy", "--checksum"] + cmd.extend(self._global_flags()) + if self._transfers is not None: + cmd.extend(["--transfers", str(self._transfers)]) + cmd.extend(self._checkers_flags()) if bwlimit_kibps is not None and bwlimit_kibps > 0: cmd.extend(["--bwlimit", f"{bwlimit_kibps}K"]) + if files_from is not None: + cmd.extend(["--files-from", str(files_from)]) cmd.extend([str(local), remote]) _log.debug("rclone cmd: %s", shlex.join(cmd)) @@ -107,40 +207,205 @@ async def push( returncode=rc, ) - async def hashsum(self, remote: str) -> dict[str, str]: - """Probe ``remote`` via ``rclone hashsum sha256`` and parse the manifest. + async def check( + self, + local: Path, + remote: str, + *, + files_from: Path, + ) -> CheckResult: + """Run ``rclone check --download --files-from --combined`` over ``files_from``. + + Streams the remote files back to compute their SHA-256 locally + (the only way to integrity-check SFTP and SMB backends, which + expose no server-side hashing). ``--combined`` writes one + ``= / * / + / - / !`` line per file to a tempfile that this + method parses and returns as a :class:`CheckResult`. + + Raises :class:`TransportError` with a classified ``error_kind`` + when rclone itself failed (auth / network / unknown) -- a clean + run with files in the ``differ`` or ``missing_on_dst`` columns + returns ``ok=True`` so the caller can route partial-failure + reconciliation correctly. + """ + import tempfile + + combined_handle = tempfile.NamedTemporaryFile( # noqa: SIM115 -- explicit close + mode="w", + encoding="utf-8", + prefix="exlab-rclone-combined-", + suffix=".txt", + delete=False, + ) + combined_path = Path(combined_handle.name) + combined_handle.close() + + cmd: list[str] = [ + self._binary, + "check", + "--download", + "--files-from", + str(files_from), + "--combined", + str(combined_path), + str(local), + remote, + ] + cmd[1:1] = self._global_flags() + cmd.extend(self._checkers_flags()) + _log.debug("rclone check cmd: %s", shlex.join(cmd)) - Returns a ``{relative-path: sha256-hex}`` dict mirroring the - on-disk manifest format on success (``rc == 0``). The dict may - legitimately be empty if the remote subtree contains no files. + try: + try: + rc, _stdout, stderr = await run_subprocess(cmd) + except FileNotFoundError as exc: + msg = f"rclone binary not found: {self._binary!r}" + raise TransportError(msg) from exc + + # rclone check returns non-zero whenever any file differs. + # Differences are an expected and parseable outcome, so the + # combined-output file must still be read on rc != 0; only an + # auth / network failure with no combined output should raise. + # One-shot read of a small tempfile written by rclone β€” sync I/O + # is fine here and avoids a trio/anyio dep in the sync subsystem. + try: + combined_text = combined_path.read_text(encoding="utf-8") # noqa: ASYNC240 + except OSError: + combined_text = "" - Failure modes are surfaced as :class:`TransportError` with the - classified ``error_kind`` so the caller (the verifier / queue - worker) can route via the spec-correct Β§7.1.5 retry path: + if rc != 0 and not combined_text: + kind = _classify_failure(stderr, rc) + if kind in ( + TransportErrorKind.AUTH, + TransportErrorKind.NETWORK, + TransportErrorKind.UNKNOWN, + ): + _log.warning("rclone check failed rc=%d kind=%s", rc, kind.value) + msg = f"rclone check failed rc={rc} kind={kind.value}: {stderr.strip()}" + raise TransportError(msg, error_kind=kind) - - ``AUTH`` -- terminal FAILED. - - ``NETWORK`` / ``UNKNOWN`` -- backoff retry. + return _parse_combined(combined_text) + finally: + combined_path.unlink(missing_ok=True) # noqa: ASYNC240 - Spawn failure (binary missing) also raises :class:`TransportError` - but with ``error_kind=None`` so the worker treats it as a - non-terminal failure (operator can install the binary and the job - will retry rather than terminating). + async def about( + self, + remote: str, + ) -> AboutResult: + """Run ``rclone about --json`` -- the equipment probe. + + Used by the Settings "Test connection" affordance. Confirms + authentication and reachability; surfaces parsed free-space + info on success. Failure paths are translated into + :class:`AboutResult` rather than raised, so the UI panel can + render the reason inline. """ - from exlab_wizard.sync.verifier import parse_manifest + import json as _json + + cmd: list[str] = [self._binary, "about", remote, "--json"] + cmd[1:1] = self._global_flags() + _log.debug("rclone about cmd: %s", shlex.join(cmd)) + + try: + rc, stdout, stderr = await run_subprocess(cmd) + except FileNotFoundError: + return AboutResult(ok=False, reason="rclone binary not found") + + if rc != 0: + kind = _classify_failure(stderr, rc) + return AboutResult(ok=False, reason=f"{kind.value}: {stderr.strip()}") + + try: + parsed = _json.loads(stdout) if stdout.strip() else {} + except _json.JSONDecodeError: + return AboutResult(ok=True, info={}) + info = {key: int(value) for key, value in parsed.items() if isinstance(value, int | float)} + return AboutResult(ok=True, info=info) - cmd: list[str] = [self._binary, "hashsum", "sha256", remote] - _log.debug("rclone hashsum cmd: %s", shlex.join(cmd)) + async def lsjson(self, remote: str, *, recursive: bool = True) -> str: + """Run ``rclone lsjson`` (read-only) and return the raw JSON array text. + Listing only β€” no transfer, no remote mutation. ``recursive`` adds + ``-R`` so a whole run subtree returns in one call. Raises + :class:`TransportError` with a classified ``error_kind`` on a + non-zero exit so callers route auth/network failures the same way + as push/check. + """ + cmd: list[str] = [self._binary, "lsjson", *self._global_flags()] + if recursive: + cmd.append("-R") + cmd.extend(self._checkers_flags()) + cmd.append(remote) + _log.debug("rclone lsjson cmd: %s", shlex.join(cmd)) try: rc, stdout, stderr = await run_subprocess(cmd) except FileNotFoundError as exc: msg = f"rclone binary not found: {self._binary!r}" raise TransportError(msg) from exc - if rc != 0: kind = _classify_failure(stderr, rc) - _log.warning("rclone hashsum failed rc=%d kind=%s", rc, kind.value) - msg = f"rclone hashsum failed rc={rc} kind={kind.value}: {stderr.strip()}" + msg = f"rclone lsjson failed rc={rc} kind={kind.value}: {stderr.strip()}" raise TransportError(msg, error_kind=kind) + return stdout + + async def listremotes(self) -> tuple[str, ...]: + """Return the remote names defined in rclone.conf (each incl. trailing ``:``) - return parse_manifest(stdout) + Offline and cheap β€” no network. Used by the setup-availability gate and + the Settings remote badge. A missing/unreadable config yields ``()`` so + callers treat "no remotes" the same as "remote not found". + """ + cmd = [self._binary, "listremotes", *self._global_flags()] + try: + rc, stdout, _stderr = await run_subprocess(cmd) + except FileNotFoundError: + return () + if rc != 0: + return () + return tuple(line.strip() for line in stdout.splitlines() if line.strip()) + + +# --------------------------------------------------------------------------- +# Combined-output parser +# --------------------------------------------------------------------------- + + +def _parse_combined(text: str) -> CheckResult: + """Parse ``rclone check --combined`` output into a :class:`CheckResult`. + + Each non-empty line begins with one of ``=``, ``*``, ``+``, ``-``, + ``!`` followed by a space and the file path. Unknown prefixes are + silently ignored so a future rclone format extension doesn't crash + the verifier. + """ + equal: list[str] = [] + differ: list[str] = [] + extra_on_dst: list[str] = [] + missing_on_dst: list[str] = [] + errors: list[str] = [] + for raw in text.splitlines(): + line = raw.rstrip() + if not line or len(line) < 2 or line[1] != " ": + continue + prefix = line[0] + path = line[2:] + match prefix: + case "=": + equal.append(path) + case "*": + differ.append(path) + case "+": + extra_on_dst.append(path) + case "-": + missing_on_dst.append(path) + case "!": + errors.append(path) + case _: + _log.debug("rclone check: unknown prefix %r in line %r", prefix, line) + return CheckResult( + equal=tuple(equal), + differ=tuple(differ), + extra_on_dst=tuple(extra_on_dst), + missing_on_dst=tuple(missing_on_dst), + errors=tuple(errors), + ) diff --git a/src/exlab_wizard/sync/transports/rsync_ssh.py b/src/exlab_wizard/sync/transports/rsync_ssh.py deleted file mode 100644 index 3650363..0000000 --- a/src/exlab_wizard/sync/transports/rsync_ssh.py +++ /dev/null @@ -1,194 +0,0 @@ -"""rsync-over-SSH transport driver. Backend Spec Β§7.1.3. - -Shells out to ``rsync -avz --checksum --partial -e "ssh -i -o -BatchMode=yes" --bwlimit= @:``. SSH -authentication is **key-based only**; the spec rejects password auth at -config-validation time (see :class:`exlab_wizard.config.models.RsyncSshTransport`). - -The driver is intentionally thin: it calls the binary, captures stdout / -stderr, and translates the exit-code + stderr-substring into one of the -``TransportErrorKind`` retry classes. Hash verification is the -:mod:`exlab_wizard.sync.verifier` module's responsibility, NOT this -driver's. -""" - -from __future__ import annotations - -import shlex -from pathlib import Path - -from exlab_wizard.logging import get_logger -from exlab_wizard.sync.transports import ( - TransportError, - TransportErrorKind, - TransportResult, -) -from exlab_wizard.sync.transports._run import run_subprocess - -__all__ = ["RsyncSshTransport"] - -_log = get_logger(__name__) - - -# rsync exit codes (selection used by the classifier): -# 0 = success -# 5 = error starting client-server protocol (often auth failure) -# 23 = some files could not be transferred (often permission-denied) -# 12 = error in rsync protocol data stream -# 30 = timeout in data send/receive -_RSYNC_AUTH_RETURNCODES: frozenset[int] = frozenset({5, 23}) - - -# Substrings that indicate authentication failure rather than a transient -# network error. Match case-insensitive. -_AUTH_FAILURE_MARKERS: tuple[str, ...] = ( - "auth_error", - "permission denied (publickey)", - "permission denied", - "authentication failed", - "host key verification failed", -) - - -def _classify_failure(stderr: str, returncode: int) -> TransportErrorKind: - """Map a (returncode, stderr) into a :class:`TransportErrorKind`.""" - lowered = stderr.lower() - if any(marker in lowered for marker in _AUTH_FAILURE_MARKERS): - return TransportErrorKind.AUTH - if returncode in _RSYNC_AUTH_RETURNCODES and "permission" in lowered: - return TransportErrorKind.AUTH - if "hash mismatch" in lowered or "checksum mismatch" in lowered: - return TransportErrorKind.HASH_MISMATCH - if returncode != 0: - return TransportErrorKind.NETWORK - return TransportErrorKind.UNKNOWN - - -def _ssh_command(key: Path) -> list[str]: - """Return the canonical ``ssh`` argv prefix used by both push and hashsum. - - Centralises the ``-i -o BatchMode=yes`` invocation so the push - path (which embeds it as a single ``-e`` value via ``shlex.join``) and - the hashsum path (which uses the list directly as the argv prefix) - cannot drift. - """ - return ["ssh", "-i", str(key), "-o", "BatchMode=yes"] - - -class RsyncSshTransport: - """rsync-over-SSH transport driver. Backend Spec Β§7.1.3.""" - - def __init__(self, *, binary: str = "rsync") -> None: - self._binary = binary - - async def push( - self, - local: Path, - ssh_target: str, - ssh_key_path: Path, - remote_path: str, - *, - bwlimit_kibps: int | None = None, - ) -> TransportResult: - """Run ``rsync -avz --checksum`` from ``local`` to ``ssh_target:remote_path``. - - ``ssh_target`` is ``@``. ``ssh_key_path`` is forwarded - via ``-e 'ssh -i -o BatchMode=yes'`` so the driver never - prompts for a password. - - Returns a :class:`TransportResult`. Raises :class:`TransportError` - when the rsync binary is missing (no retry will help). - """ - ssh_cmd = shlex.join(_ssh_command(ssh_key_path)) - cmd: list[str] = [ - self._binary, - "-avz", - "--checksum", - "--partial", - "-e", - ssh_cmd, - ] - if bwlimit_kibps is not None and bwlimit_kibps > 0: - cmd.append(f"--bwlimit={bwlimit_kibps}") - cmd.append(str(local)) - cmd.append(f"{ssh_target}:{remote_path}") - _log.debug("rsync cmd: %s", shlex.join(cmd)) - - try: - rc, stdout, stderr = await run_subprocess(cmd) - except FileNotFoundError as exc: - msg = f"rsync binary not found: {self._binary!r}" - raise TransportError(msg) from exc - - if rc == 0: - return TransportResult(ok=True, returncode=0, stdout=stdout, stderr=stderr) - - kind = _classify_failure(stderr, rc) - _log.warning("rsync failed rc=%d kind=%s", rc, kind.value) - return TransportResult( - ok=False, - error_kind=kind, - stderr=stderr, - stdout=stdout, - returncode=rc, - ) - - async def hashsum( - self, - ssh_target: str, - ssh_key_path: Path, - remote_path: str, - ) -> dict[str, str]: - """Probe ``remote_path`` via ``ssh ... find ... sha256sum`` and parse. - - Returns a ``{relative-path: sha256-hex}`` dict whose keys are - stripped of the ``remote_path`` prefix so they match the local - manifest's relative-path convention (see - :meth:`exlab_wizard.sync.verifier.Verifier.compute_local_manifest`) - on success (``rc == 0``). The dict may legitimately be empty if - the remote subtree contains no files. - - Failure modes are surfaced as :class:`TransportError` with the - classified ``error_kind`` so the caller (the verifier / queue - worker) can route via the spec-correct Β§7.1.5 retry path: - - - ``AUTH`` -- terminal FAILED. - - ``NETWORK`` / ``UNKNOWN`` -- backoff retry. - - Spawn failure (binary missing) also raises :class:`TransportError` - but with ``error_kind=None`` so the worker treats it as a - non-terminal failure (operator can install ssh and the job will - retry rather than terminating). - """ - from exlab_wizard.sync.verifier import parse_manifest - - remote_cmd = f"find {shlex.quote(remote_path)} -type f -exec sha256sum {{}} +" - cmd: list[str] = [*_ssh_command(ssh_key_path), ssh_target, remote_cmd] - _log.debug("rsync ssh hashsum cmd: %s", shlex.join(cmd)) - - try: - rc, stdout, stderr = await run_subprocess(cmd) - except FileNotFoundError as exc: - msg = "ssh binary not found: ssh" - raise TransportError(msg) from exc - - if rc != 0: - kind = _classify_failure(stderr, rc) - _log.warning("rsync ssh hashsum failed rc=%d kind=%s", rc, kind.value) - msg = f"rsync ssh hashsum failed rc={rc} kind={kind.value}: {stderr.strip()}" - raise TransportError(msg, error_kind=kind) - - # Parse, then strip the remote_path prefix so keys are run-relative. - absolute_manifest = parse_manifest(stdout) - prefix = remote_path.rstrip("/") + "/" - relative: dict[str, str] = {} - for path_key, hex_digest in absolute_manifest.items(): - if path_key.startswith(prefix): - relative[path_key[len(prefix) :]] = hex_digest - elif path_key == remote_path.rstrip("/"): - # A single-file remote target. Use the basename. - relative[Path(path_key).name] = hex_digest - else: - # Fallback: keep the original key. - relative[path_key] = hex_digest - return relative diff --git a/src/exlab_wizard/sync/verifier.py b/src/exlab_wizard/sync/verifier.py index 094eeab..41b62df 100644 --- a/src/exlab_wizard/sync/verifier.py +++ b/src/exlab_wizard/sync/verifier.py @@ -1,265 +1,136 @@ -"""SHA-256 hash verifier for synced runs. Backend Spec Β§7.1.4. - -After a transport reports success, the job moves to ``AWAITING_VERIFY``. -The verifier walks the local subtree, computes a SHA-256 per file, writes -the manifest to ``/.exlab-wizard/checksums.sha256`` (one ``sha256 -path`` line per file), and compares against a remote manifest (or against -itself for self-consistency tests). - -The on-disk manifest format mirrors the output of the ``sha256sum`` UNIX -tool: each line has `` ``. ``ingest.json`` and -the cache spec already reference ``.exlab-wizard/checksums.sha256``; -this module is the writer. +"""SHA-256 verifier wrapper around ``rclone check --download``. + +Rclone-only NAS sync migration (2026-05-26). The verifier is now a thin +adapter over :meth:`exlab_wizard.sync.transports.rclone.RcloneDriver.check` +that translates a :class:`CheckResult` into the :class:`VerifyResult` +shape the queue worker already consumes. The actual integrity guarantee +comes from ``rclone check --download --combined`` -- rclone streams the +remote files back to the wizard, hashes them locally, and writes a +``=/*/+/-/!`` line per file to a tempfile that the driver parses. + +The Slot A SHA-256 capture (the durable +``sync_state.json:files[*].verified_sha256`` field) is owned by +:func:`exlab_wizard.sync.nas_client._compute_local_shas` -- the verifier +itself never sees a local SHA. This keeps the verifier a leaf abstraction +that depends only on the rclone driver, and keeps the SHA-capture logic +local to the one code path that has access to the freshly-read local +bytes. + +The previous Python SHA pipeline and the durable +``/.exlab-wizard/checksums.sha256`` artefact are gone (the spec +chose `rclone check` as the authority on integrity at sync time). """ from __future__ import annotations -import asyncio -import hashlib -from dataclasses import dataclass, field +from dataclasses import dataclass from pathlib import Path from typing import TYPE_CHECKING -from exlab_wizard import paths -from exlab_wizard.constants import CACHE_DIR_NAME, CHECKSUMS_RELATIVE -from exlab_wizard.io import atomic_write_bytes from exlab_wizard.logging import get_logger +from exlab_wizard.sync.transports import TransportError, TransportErrorKind if TYPE_CHECKING: - from exlab_wizard.sync.transports import TransportErrorKind + from exlab_wizard.sync.transports.rclone import CheckResult, RcloneDriver -__all__ = [ - "Verifier", - "VerifyResult", - "format_manifest", - "parse_manifest", -] +__all__ = ["Verifier", "VerifyResult"] _log = get_logger(__name__) @dataclass(frozen=True, slots=True) class VerifyResult: - """Outcome of a verifier pass. - - ``ok`` is True iff every file in the manifest matched. ``mismatched`` - lists relative paths whose hash differed; ``missing`` lists paths in - the manifest that no longer exist on disk; ``extra`` lists files on - disk that were not in the manifest (informational only). - - ``error_kind`` is set when the remote-hash probe could not complete - (the underlying :class:`exlab_wizard.sync.transports.TransportError` - classified the failure as AUTH / NETWORK / UNKNOWN). The queue worker - keys off this field to route via the Β§7.1.5 retry policy: AUTH -> - terminal FAILED, NETWORK / UNKNOWN -> backoff retry. ``None`` for - every non-remote-probe outcome. + """Outcome of one ``rclone check --download`` pass against a remote. + + ``ok`` is True iff no files differ, none are missing on the + destination, and the rclone subprocess reported no per-file errors. + Files in ``mismatched`` / ``missing`` / ``errors`` are run-relative + POSIX paths drawn from the ``--combined`` output. ``extra`` lists + files present on the destination but not in the source -- it does + not flip ``ok`` (it is informational, mirroring the pre-migration + contract). + + ``error_kind`` is set when the rclone subprocess itself failed + (auth / network / unknown) before producing usable combined + output. The queue worker keys off this field to route through the + spec Β§7.1.5 retry policy. """ ok: bool mismatched: tuple[str, ...] = () missing: tuple[str, ...] = () extra: tuple[str, ...] = () - manifest: dict[str, str] = field(default_factory=dict) + errors: tuple[str, ...] = () error_kind: TransportErrorKind | None = None - - -def _iter_files(run_path: Path) -> list[Path]: - """Return every regular file under ``run_path`` (depth-first). - - Uses ``Path.rglob('*')`` and filters to regular files. The manifest - format is independent of walk order, but we sort the result by - relative path so the manifest file is reproducible byte-for-byte. - """ - files: list[Path] = [] - for path in run_path.rglob("*"): - if path.is_file(): - files.append(path) - return files - - -def _is_inside_cache_dir(rel_path: Path) -> bool: - """Return True iff a relative path is inside ``.exlab-wizard/``. - - The checksum manifest itself lives under ``.exlab-wizard/`` and we - do NOT include the cache directory in the manifest -- otherwise the - manifest would record its own hash, which is impossible (the file - would change as a result of being written). - """ - return CACHE_DIR_NAME in rel_path.parts - - -async def _compute_sha256(path: Path) -> str: - """Return the SHA-256 hex digest of ``path``. - - The hash is computed in 64 KiB chunks via ``asyncio.to_thread`` so - a large file does not block the event loop. - """ - - def _read_and_hash() -> str: - digest = hashlib.sha256() - with path.open("rb") as handle: - while True: - chunk = handle.read(65536) - if not chunk: - break - digest.update(chunk) - return digest.hexdigest() - - return await asyncio.to_thread(_read_and_hash) - - -def format_manifest(manifest: dict[str, str]) -> str: - """Return the on-disk text form of a manifest. - - Each line is `` ``. Lines are sorted by - relative path so the file is reproducible across hosts. - """ - return ( - "\n".join(f"{hex_digest} {rel_path}" for rel_path, hex_digest in sorted(manifest.items())) - + "\n" - ) - - -def parse_manifest(text: str) -> dict[str, str]: - """Parse the on-disk text form of a manifest. - - Tolerant of single- and double-space separators (``sha256sum`` - outputs either form depending on the host). Empty lines are ignored. - """ - result: dict[str, str] = {} - for raw in text.splitlines(): - line = raw.strip() - if not line: - continue - # Split on the first run of whitespace -- works for both - # `` `` (sha256sum default) and `` ``. - parts = line.split(None, 1) - if len(parts) != 2: - _log.warning("malformed manifest line: %r", line) - continue - hex_digest, rel_path = parts - result[rel_path] = hex_digest - return result - - -class Verifier: - """SHA-256 verifier. Backend Spec Β§7.1.4.""" - - async def compute_local_manifest(self, run_path: Path) -> dict[str, str]: - """Walk ``run_path`` and compute a SHA-256 per file. - - Writes the manifest to ``run_path/.exlab-wizard/checksums.sha256`` - as a side-effect (the Β§7.1.4 contract). Files inside the - ``.exlab-wizard/`` cache subtree are excluded so the manifest does - not record its own hash. + # Verified rel-paths (the rclone ``=`` lines). The worker uses this + # set when crediting files into ``sync_state.json`` so the reconcile + # path does not have to re-derive it from ``job.files`` minus the + # bad subsets. + verified: tuple[str, ...] = () + + @classmethod + def from_check_result(cls, check_result: CheckResult) -> VerifyResult: + """Translate a successful ``rclone check`` into a :class:`VerifyResult`. + + ``ok`` is True iff nothing differs, nothing is missing on the + destination, and rclone reported no per-file errors. ``extra`` + (present on the destination only) is carried for reporting but + does not flip ``ok``. The single source of truth for the + ``CheckResult -> VerifyResult`` mapping shared by the queue + worker, the ``force_verify`` path, and :meth:`Verifier.verify`. """ - if not run_path.exists() or not run_path.is_dir(): # noqa: ASYNC240 -- one-shot stat - msg = f"run_path does not exist or is not a directory: {run_path}" - raise FileNotFoundError(msg) - - manifest: dict[str, str] = {} - for file_path in _iter_files(run_path): - rel = file_path.relative_to(run_path) - if _is_inside_cache_dir(rel): - continue - manifest[str(rel.as_posix())] = await _compute_sha256(file_path) - - # Persist to .exlab-wizard/checksums.sha256. - paths.cache_dir(run_path).mkdir(parents=True, exist_ok=True) - checksums_path = run_path / CHECKSUMS_RELATIVE - atomic_write_bytes(checksums_path, format_manifest(manifest).encode("utf-8")) - return manifest - - async def verify_against_local(self, run_path: Path, manifest: dict[str, str]) -> VerifyResult: - """Re-hash every entry in ``manifest`` against the local subtree. - - Returns a :class:`VerifyResult` with ``ok=True`` iff every entry - in the manifest exists locally with the recorded hash. + ok = not check_result.differ and not check_result.missing_on_dst and not check_result.errors + return cls( + ok=ok, + mismatched=check_result.differ, + missing=check_result.missing_on_dst, + extra=check_result.extra_on_dst, + errors=check_result.errors, + verified=check_result.equal, + ) - Files on disk that are NOT in the manifest are returned in - ``extra`` for diagnostic logging but do not by themselves cause - ``ok=False``; a partial transport that wrote a fresh file would - be caught by a later compute_local_manifest pass. - """ - if not run_path.exists() or not run_path.is_dir(): # noqa: ASYNC240 -- one-shot stat - msg = f"run_path does not exist or is not a directory: {run_path}" - raise FileNotFoundError(msg) - mismatched: list[str] = [] - missing: list[str] = [] - extra: list[str] = [] - observed: dict[str, str] = {} +class Verifier: + """Verifier: ``rclone check`` wrapper, no Python SHA pipeline. - for rel_path, expected_hash in manifest.items(): - target = run_path / rel_path - if not target.exists(): - missing.append(rel_path) - continue - actual = await _compute_sha256(target) - observed[rel_path] = actual - if actual != expected_hash: - mismatched.append(rel_path) + Constructed with an :class:`RcloneDriver`; production callers pass + the same driver instance the push path uses so subprocess settings + (binary path, etc.) stay consistent. Tests can pass a stub driver + whose ``check`` returns a canned :class:`CheckResult`. + """ - # Populate `extra` for files on disk not present in the manifest. - for file_path in _iter_files(run_path): - rel = file_path.relative_to(run_path) - if _is_inside_cache_dir(rel): - continue - rel_str = str(rel.as_posix()) - if rel_str not in manifest: - extra.append(rel_str) + def __init__(self, driver: RcloneDriver | None = None) -> None: + if driver is None: + from exlab_wizard.sync.transports.rclone import RcloneDriver as _Driver - ok = not mismatched and not missing - return VerifyResult( - ok=ok, - mismatched=tuple(sorted(mismatched)), - missing=tuple(sorted(missing)), - extra=tuple(sorted(extra)), - manifest=observed, - ) + driver = _Driver() + self._driver = driver - def verify_against_remote( + async def verify( self, - local_manifest: dict[str, str], - remote_manifest: dict[str, str], + run_path: Path, + remote: str, + *, + files_from: Path, ) -> VerifyResult: - """Compare a local manifest against a remote-derived manifest. + """Run ``rclone check --download`` over ``files_from`` and translate. - Pure dict comparison with no I/O. Use after the transport reports - success, with ``remote_manifest`` derived from a remote hash probe - (e.g. ``rclone hashsum sha256`` or ``ssh ... sha256sum``). - - - ``mismatched``: keys present in both with differing hex digests. - - ``missing``: keys present locally but absent remotely; this is - the integrity-in-transit failure mode. - - ``extra``: keys present remotely but not locally; informational - only and does not flip ``ok``. - - ``ok = not mismatched and not missing``. An empty - ``remote_manifest`` therefore yields ``ok=False`` with every - local key listed in ``missing``. + Raises :class:`TransportError` from the driver only on a spawn + failure (the rclone binary is missing); every other failure mode + -- auth / network / hash-mismatch -- is folded into the returned + :class:`VerifyResult`. """ - # TODO Sec 7.1.4: streaming-download fallback (verify.max_stream_bytes) deferred - mismatched: list[str] = [] - missing: list[str] = [] - extra: list[str] = [] - - for rel_path, expected_hash in local_manifest.items(): - remote_hash = remote_manifest.get(rel_path) - if remote_hash is None: - missing.append(rel_path) - continue - if remote_hash != expected_hash: - mismatched.append(rel_path) - - for rel_path in remote_manifest: - if rel_path not in local_manifest: - extra.append(rel_path) - - ok = not mismatched and not missing - return VerifyResult( - ok=ok, - mismatched=tuple(sorted(mismatched)), - missing=tuple(sorted(missing)), - extra=tuple(sorted(extra)), - manifest=dict(local_manifest), - ) + try: + check_result = await self._driver.check( + run_path, + remote, + files_from=files_from, + ) + except TransportError as exc: + _log.warning("rclone check transport error: %s", exc) + return VerifyResult( + ok=False, + error_kind=exc.error_kind, + ) + + return VerifyResult.from_check_result(check_result) diff --git a/src/exlab_wizard/tray/dependencies.py b/src/exlab_wizard/tray/dependencies.py index b0f1c73..66b488a 100644 --- a/src/exlab_wizard/tray/dependencies.py +++ b/src/exlab_wizard/tray/dependencies.py @@ -10,17 +10,19 @@ failure logs WARN"). The order matters: validator depends on the cache writers, controller -composes validator + plugin host + template engine + cache writers, -staging watcher depends on the ingest writer + a NAS-sync stub. We -construct upstream pieces first and pass them into downstream -constructors; any upstream failure short-circuits the chain so a None -upstream produces a None downstream rather than a partially-constructed -object. +composes validator + plugin host + template engine + cache writers, the +quiescence poller depends on the NAS-sync queue. We construct upstream +pieces first and pass them into downstream constructors; any upstream +failure short-circuits the chain so a None upstream produces a None +downstream rather than a partially-constructed object. """ from __future__ import annotations +import asyncio import contextlib +import os +import time from pathlib import Path from typing import Any @@ -31,10 +33,15 @@ from exlab_wizard.paths import os_config_path from exlab_wizard.tray.autostart import AutostartManager -__all__ = ["build_production_dependencies"] +__all__ = ["apply_live_config", "build_production_dependencies"] _log = get_logger(__name__) +# Fire-and-forget bring-up tasks scheduled by ``apply_live_config`` on a +# fresh-install save. Held in a module-level set so the event loop does +# not garbage-collect them mid-flight (asyncio only keeps a weak ref). +_BACKGROUND_TASKS: set[asyncio.Task[Any]] = set() + def build_production_dependencies(state_dir: Path) -> AppDependencies: """Return a populated :class:`AppDependencies` for the live tray. @@ -47,6 +54,7 @@ def build_production_dependencies(state_dir: Path) -> AppDependencies: same try/except so the GUI degrades to an "unavailable" banner. """ deps = AppDependencies() + deps.state_dir = state_dir deps.config = _try("config", _load_config_safely) # Wire the saver unconditionally: a fresh install has no config.yaml @@ -62,7 +70,6 @@ def build_production_dependencies(state_dir: Path) -> AppDependencies: cache_equipment = _try("cache_equipment", _build_equipment_writer) template_engine = _try("template_engine", _build_template_engine) deps.plugin_host = _try("plugin_host", _build_plugin_host, deps.config) - deps.ingest_writer = _try("ingest_writer", _build_ingest_writer) deps.controller = _try( "controller", @@ -94,20 +101,47 @@ def build_production_dependencies(state_dir: Path) -> AppDependencies: deps.lims_reachable = True deps.lims_probe = _make_lims_probe(deps) - deps.nas_sync = _try("nas_sync", _build_nas_sync, deps.config, state_dir) + # ``sync_state_writer`` must precede ``nas_sync`` -- the NASSyncClient + # takes it as a constructor dependency for per-file verify + # reconciliation (operator-free per-file NAS sync, 2026-05-21). + deps.sync_state_writer = _try("sync_state_writer", _build_sync_state_writer) + + deps.nas_sync = _try( + "nas_sync", + _build_nas_sync, + deps.config, + state_dir, + validator, + deps.cache_creation, + deps.sync_state_writer, + keyring_store, + ) deps.nas_sync_snapshot = _make_nas_sync_snapshot(deps) - deps.staging_watcher = _try( - "staging_watcher", - _build_staging_watcher, + deps.quiescence_poller = _try( + "quiescence_poller", + _build_quiescence_poller, config=deps.config, - ingest_writer=deps.ingest_writer, nas_sync=deps.nas_sync, - cache_creation=deps.cache_creation, + sync_state_writer=deps.sync_state_writer, ) deps.autostart_toggle = _make_autostart_toggle() - deps.equipment_probe = None + # Seed the real registration state so Settings -> Application can show the + # "Start at login" checkbox checked/unchecked to match reality (T8). + try: + deps.autostart_is_registered = AutostartManager().is_registered() + except Exception: + deps.autostart_is_registered = False + + # rclone.conf NAS-sync migration. The Β§4.9 setup gate now keys on + # whether the configured ``nas.remote`` is present in rclone.conf + # (rather than a per-equipment keyring password). Snapshot the + # operator's remotes once at boot via ``rclone listremotes`` and + # expose a sync predicate the API's setup evaluator reads. + deps.nas_remotes = _try("nas_remotes", _hydrate_nas_remotes, deps.config) or () + deps.nas_remote_available = lambda remote: f"{remote}:" in deps.nas_remotes + deps.equipment_probe = _make_equipment_probe(deps) deps.session_store_snapshot = _make_session_store_snapshot(deps) @@ -122,6 +156,254 @@ def build_production_dependencies(state_dir: Path) -> AppDependencies: return deps +def apply_live_config(deps: AppDependencies, new_config: Any) -> None: + """Push a freshly saved ``config.yaml`` into the running components. + + Replaces the old "write config + force a tray relaunch" flow: the + settings dialog, the Add-Equipment wizard, and the ``PUT /config`` / + ``POST /config/equipment`` routes all call this after persisting, so a + config change takes effect in-process -- no restart. + + Two regimes per component: + + * **Reconfigure** -- the component already exists (the steady state + after setup): its config is swapped in place via ``apply_config`` / + ``reconfigure``. The validator and NAS-sync client are mutated in + place precisely so the controller and poller -- which hold + references to them -- keep working against the same instances. + * **Fresh build** -- on a first-install save the config-dependent + components were built with ``config=None`` and are absent; they are + constructed here from the now-valid config, and the NAS-sync client + + quiescence poller have their async ``init`` / ``start`` scheduled + on the running event loop. + + Every step is best-effort and isolated: one component raising logs a + WARN and does not abort the rest. ``deps.config`` is assigned last so + a partial failure still leaves the canonical config readable. + """ + old_config = getattr(deps, "config", None) + + # 1. Logging -- reconfigure only when the logging block changed. + # configure_logging is idempotent, but it tears down and rebuilds + # the global queue-handler chain, so skip the churn on saves that + # leave logging untouched. + if old_config is None or old_config.logging != new_config.logging: + try: + from exlab_wizard.logging.manager import configure_logging + + configure_logging(new_config.logging) + except Exception as exc: + _log.warning("live reload: logging reconfigure failed: %s", exc) + + # 2. Validator -- reconfigure in place (the controller + audit loop + # hold a reference, so we must not swap the instance). + validator = getattr(deps, "validator", None) + if validator is None: + deps.validator = _try("validator", _build_validator, new_config) + elif hasattr(validator, "reconfigure"): + try: + vc, roots, staging = _derive_validator_inputs(new_config) + validator.reconfigure(vc, equipment_roots=roots, staging_root=staging) + except Exception as exc: + _log.warning("live reload: validator reconfigure failed: %s", exc) + + # 3. Plugin host -- rebuild only when ``paths.plugin_dir`` changed. + new_plugin_host = None + if _plugin_dir(old_config) != _plugin_dir(new_config): + new_plugin_host = _try("plugin_host", _build_plugin_host, new_config) + if new_plugin_host is not None: + deps.plugin_host = new_plugin_host + _refresh_plugin_host_status(deps) + + # 4. LIMS client -- rebuild only when endpoint / email changed. + if _lims_identity(old_config) != _lims_identity(new_config): + _reload_lims_client(deps, new_config) + + # 5. Controller -- swap config (and plugin host, if rebuilt) in place, + # or build it on the first-install save. + controller = getattr(deps, "controller", None) + if controller is None: + deps.controller = _try( + "controller", + _build_controller, + config=new_config, + validator=deps.validator, + template_engine=_try("template_engine", _build_template_engine), + plugin_host=deps.plugin_host, + cache_creation=getattr(deps, "cache_creation", None), + cache_equipment=_try("cache_equipment", _build_equipment_writer), + session_store=getattr(deps, "session_store", None), + ) + elif hasattr(controller, "apply_config"): + try: + controller.apply_config(new_config, plugin_host=new_plugin_host) + except Exception as exc: + _log.warning("live reload: controller reconfigure failed: %s", exc) + + # 6./7. NAS-sync client + poller -- reconfigure in place, or build + + # schedule their async bring-up on the first-install save. The + # poller depends on the client, so the client is handled first. + nas_fresh = _reload_nas_sync(deps, new_config) + poller_fresh = _reload_quiescence_poller(deps, new_config) + if nas_fresh or poller_fresh: + _schedule_bringup(deps, init_nas=nas_fresh, start_poller=poller_fresh) + + # 8. Canonical config -- assigned last so a partial failure above + # still leaves ``GET /config`` and the next reload consistent. + deps.config = new_config + + +def _plugin_dir(config: Any) -> str | None: + if config is None: + return None + return getattr(config.paths, "plugin_dir", None) or None + + +def _lims_identity(config: Any) -> tuple[str, str]: + """Return the ``(endpoint, email)`` pair that defines a LIMS client. + + Trailing slashes are stripped to match :class:`LIMSClient`, so a + cosmetic ``/`` edit does not needlessly tear down the client. + """ + if config is None: + return ("", "") + lims = config.lims + return ((lims.endpoint or "").rstrip("/"), lims.email or "") + + +def _refresh_plugin_host_status(deps: AppDependencies) -> None: + """Re-derive the plugin-host status counters after a rebuild. + + Mirrors the boot-time block in :func:`build_production_dependencies` + so the Β§health surface reports the new registry's record count. + """ + if deps.plugin_host is not None: + registry = getattr(deps.plugin_host, "_registry", None) + records = getattr(registry, "_records", None) + deps.registered_plugin_count = len(records) if isinstance(records, dict) else 0 + deps.plugin_host_status = "ok" + else: + deps.plugin_host_status = "unavailable" + + +def _reload_lims_client(deps: AppDependencies, new_config: Any) -> None: + """Rebuild ``deps.lims_client`` for a changed endpoint / email. + + Builds a fresh client when both endpoint and email are present, else + clears it (LIMS un-configured). The previous client's + ``httpx.AsyncClient`` is closed best-effort on the running loop. A + build failure keeps the old client rather than dropping LIMS entirely. + """ + keyring_store = getattr(deps, "keyring_store", None) + old = getattr(deps, "lims_client", None) + new_client: Any = None + if new_config.lims.endpoint and new_config.lims.email: + new_client = _try("lims_client", _build_lims_client, new_config, keyring_store) + if new_client is None: + return + deps.lims_client = new_client + deps.lims_reachable = True + if old is not None and old is not new_client and hasattr(old, "close"): + _fire_and_forget(old.close(), "lims client close") + + +def _reload_nas_sync(deps: AppDependencies, new_config: Any) -> bool: + """Reconfigure the NAS-sync client in place, or build it fresh. + + Returns ``True`` when a new client was constructed (so the caller + schedules its async ``init``); ``False`` when an existing client was + reconfigured in place (its worker keeps running). + """ + sync = getattr(deps, "nas_sync", None) + if sync is not None: + if hasattr(sync, "apply_config"): + try: + sync.apply_config(new_config) + except Exception as exc: + _log.warning("live reload: nas_sync reconfigure failed: %s", exc) + return False + built = _try( + "nas_sync", + _build_nas_sync, + new_config, + getattr(deps, "state_dir", None), + getattr(deps, "validator", None), + getattr(deps, "cache_creation", None), + getattr(deps, "sync_state_writer", None), + getattr(deps, "keyring_store", None), + ) + if built is None: + return False + deps.nas_sync = built + return True + + +def _reload_quiescence_poller(deps: AppDependencies, new_config: Any) -> bool: + """Reconfigure the quiescence poller in place, or build it fresh. + + Returns ``True`` when a new poller was constructed (so the caller + schedules its async ``start``); ``False`` when an existing poller was + reconfigured in place. + """ + poller = getattr(deps, "quiescence_poller", None) + if poller is not None: + if hasattr(poller, "apply_config"): + try: + poller.apply_config(new_config) + except Exception as exc: + _log.warning("live reload: poller reconfigure failed: %s", exc) + return False + built = _try( + "quiescence_poller", + _build_quiescence_poller, + config=new_config, + nas_sync=getattr(deps, "nas_sync", None), + sync_state_writer=getattr(deps, "sync_state_writer", None), + ) + if built is None: + return False + deps.quiescence_poller = built + return True + + +def _schedule_bringup(deps: AppDependencies, *, init_nas: bool, start_poller: bool) -> None: + """Schedule ``nas_sync.init()`` / ``poller.start()`` on the running loop. + + Used only on a first-install save, where the NAS-sync client and + poller are brought to life for a config that previously had none. + Both run within the uvicorn event loop (the settings save handler and + the HTTP routes execute there), so a running loop is expected; if none + is found the bring-up is deferred to the next tray launch. + """ + + async def _bring_up() -> None: + if init_nas and deps.nas_sync is not None: + try: + await deps.nas_sync.init() + except Exception as exc: + _log.warning("live reload: nas_sync init failed: %s", exc) + if start_poller and deps.quiescence_poller is not None: + try: + await deps.quiescence_poller.start() + except Exception as exc: + _log.warning("live reload: poller start failed: %s", exc) + + _fire_and_forget(_bring_up(), "nas-sync bring-up") + + +def _fire_and_forget(coro: Any, label: str) -> None: + """Run ``coro`` on the running loop, logging failures; no-op if loop-less.""" + try: + loop = asyncio.get_running_loop() + except RuntimeError: + _log.warning("live reload: no running event loop; %s deferred to next launch", label) + coro.close() + return + task = loop.create_task(coro) + _BACKGROUND_TASKS.add(task) + task.add_done_callback(_BACKGROUND_TASKS.discard) + + def _try(label: str, fn: Any, /, *args: Any, **kwargs: Any) -> Any: """Run ``fn(*args, **kwargs)`` swallowing exceptions with a WARN log.""" try: @@ -149,9 +431,14 @@ def _save(cfg: Any) -> None: return _save -def _build_validator(config: Any) -> Any: - from exlab_wizard.validator.engine import Validator +def _derive_validator_inputs(config: Any) -> tuple[Any, dict[str, Path], Path | None]: + """Derive ``(validator_config, equipment_roots, staging_root)`` from config. + Single source of truth shared by :func:`_build_validator` (tray boot) + and :func:`apply_live_config` (live reload) so the + ``local_root / eq.id`` equipment-roots mapping and the staging-root + rule never drift between the two paths. + """ validator_config = getattr(config, "validator", None) if config is not None else None equipment_roots: dict[str, Path] = {} if config is not None: @@ -167,6 +454,13 @@ def _build_validator(config: Any) -> Any: if config is not None and config.orchestrator.staging_root else None ) + return validator_config, equipment_roots, staging_root + + +def _build_validator(config: Any) -> Any: + from exlab_wizard.validator.engine import Validator + + validator_config, equipment_roots, staging_root = _derive_validator_inputs(config) return Validator( validator_config, equipment_roots=equipment_roots, @@ -192,12 +486,6 @@ def _build_equipment_writer() -> Any: return EquipmentCacheWriter() -def _build_ingest_writer() -> Any: - from exlab_wizard.cache.ingest_writer import IngestWriter - - return IngestWriter() - - def _build_template_engine() -> Any: from exlab_wizard.template.copier_driver import TemplateEngine @@ -240,6 +528,7 @@ def _build_controller( msg = "controller requires config + validator + template_engine + cache_creation" raise RuntimeError(msg) from exlab_wizard.controller.creation import CreationController + from exlab_wizard.readme import ReadmeGenerator return CreationController( config=config, @@ -249,13 +538,31 @@ def _build_controller( cache_creation=cache_creation, cache_equipment=cache_equipment, session_store=session_store, + readme_generator=ReadmeGenerator(), ) +# Env var supplying the master passphrase for the encrypted-at-rest +# secret store. Read only when the OS keyring is unavailable; never +# committed -- callers export it at launch on keyring-less hosts. +_SECRET_PASSPHRASE_ENV = "EXLAB_WIZARD_SECRET_PASSPHRASE" + + def _build_keyring_store(state_dir: Path) -> Any: + """Build the LIMS/NAS secret store with an optional fallback passphrase. + + When the OS keyring backend is unavailable, :class:`KeyringStore` + falls back to an encrypted-at-rest file keyed by a master passphrase + (Backend Spec Β§7.4.4). That passphrase is read from + ``EXLAB_WIZARD_SECRET_PASSPHRASE``; when the variable is unset no + provider is wired and the fallback stays disabled -- the historical + behaviour, so keyring-equipped hosts are unaffected. + """ from exlab_wizard.lims.keyring_store import KeyringStore - return KeyringStore(state_dir=state_dir) + passphrase = os.environ.get(_SECRET_PASSPHRASE_ENV) + provider = (lambda: passphrase) if passphrase else None + return KeyringStore(state_dir=state_dir, passphrase_provider=provider) def _lims_keyring_password(keyring_store: Any) -> str | None: @@ -306,6 +613,66 @@ def _provider() -> str | None: ) +def _hydrate_nas_remotes(config: Any) -> tuple[str, ...]: + """Snapshot the rclone remotes defined in the operator's rclone.conf. + + rclone.conf NAS-sync migration. Reads ``rclone listremotes`` (offline, + cheap -- no network) so the setup gate can answer "is ``nas.remote`` + configured?" without re-shelling on every request. Each entry carries + its trailing ``:``. Any failure (no binary, unreadable config) degrades + to ``()`` so the gate treats it as "no remotes". + """ + nas = getattr(config, "nas", None) + if nas is None: + return () + from exlab_wizard.sync.transports.rclone import RcloneDriver + + driver = RcloneDriver(config_path=getattr(nas, "rclone_config_path", "") or None) + try: + return asyncio.run(driver.listremotes()) + except Exception: + return () + + +def _make_equipment_probe(deps: AppDependencies) -> Any: + """Build the ``deps.equipment_probe`` callable. + + rclone.conf NAS-sync migration. The "Test connection" probe now + targets the configured ``nas:`` remote rather than a per-equipment + keyring password: it runs ``rclone about :`` through the + driver (using the operator's rclone.conf, optionally pinned by + ``nas.rclone_config_path``) and returns the canonical + ``{"ok", "reason", "latency_ms"}`` dict the endpoint surfaces. + + A missing ``nas.remote`` short-circuits with + ``ok=False, reason="no NAS remote configured"`` -- the probe never + spawns rclone in that case so the operator sees the gate reason + rather than an opaque rclone error. + """ + + async def _probe(equipment: Any) -> dict[str, Any]: + nas = getattr(deps.config, "nas", None) + if nas is None or not nas.remote: + return {"ok": False, "reason": "no NAS remote configured"} + # Local import keeps ``tray.dependencies`` cheap to load (the + # rclone driver pulls in subprocess + asyncio plumbing the tray + # otherwise wouldn't need until first sync). + from exlab_wizard.sync.transports.rclone import RcloneDriver + + driver = RcloneDriver(config_path=getattr(nas, "rclone_config_path", "") or None) + started = time.monotonic() + try: + about = await driver.about(f"{nas.remote}:") + except Exception as exc: + return {"ok": False, "reason": str(exc)} + latency_ms = int((time.monotonic() - started) * 1000) + if not about.ok: + return {"ok": False, "reason": about.reason, "latency_ms": latency_ms} + return {"ok": True, "reason": None, "latency_ms": latency_ms} + + return _probe + + def _make_lims_probe(deps: AppDependencies) -> Any: async def _probe(_body: Any = None) -> dict[str, Any]: del _body @@ -323,14 +690,47 @@ async def _probe(_body: Any = None) -> dict[str, Any]: return _probe -def _build_nas_sync(config: Any, state_dir: Path) -> Any: +def _build_nas_sync( + config: Any, + state_dir: Path, + validator: Any, + cache_creation: Any, + sync_state_writer: Any, + keyring_store: Any, +) -> Any: + """Build the :class:`NASSyncClient` -- the public NAS-sync surface. + + The client wires the durable queue, the transport drivers, the + verifier, the Pre-Sync Gate, and the ``sync_state.json`` writer used + for per-file verify reconciliation. ``keyring_store`` is still passed + for constructor compatibility but is no longer used to resolve + credentials: the rclone.conf NAS-sync migration moved all NAS + credentials into the operator's ``rclone.conf`` named remote. + + The poller and the force-sync route call ``enqueue`` / ``status`` on + this object; returning a bare ``SyncQueue`` (which has neither) would + leave the poller sweep silently dead. + """ if config is None: msg = "NAS sync requires a loaded config" raise RuntimeError(msg) - from exlab_wizard.sync.queue import SyncQueue + if validator is None: + msg = "NAS sync requires a validator" + raise RuntimeError(msg) + if cache_creation is None: + msg = "NAS sync requires a creation-cache writer" + raise RuntimeError(msg) + from exlab_wizard.sync.nas_client import NASSyncClient db_path = state_dir / "sync_queue.sqlite" - return SyncQueue(db_path) + return NASSyncClient( + config=config, + queue_db=db_path, + validator=validator, + cache_creation=cache_creation, + sync_state_writer=sync_state_writer, + keyring_store=keyring_store, + ) def _make_nas_sync_snapshot(deps: AppDependencies) -> Any: @@ -345,27 +745,48 @@ def _snapshot() -> dict[str, Any]: return _snapshot -def _build_staging_watcher( +def _build_sync_state_writer() -> Any: + """Build the orchestrator-only ``sync_state.json`` writer. + + Operator-free per-file NAS sync design (2026-05-21): the quiescence + poller reads ``sync_state.json`` to skip already-synced files and the + NAS-sync client writes per-file verify reconciliation into it. + """ + from exlab_wizard.cache.sync_state_writer import SyncStateWriter + + return SyncStateWriter() + + +def _build_quiescence_poller( *, config: Any, - ingest_writer: Any, nas_sync: Any, - cache_creation: Any, + sync_state_writer: Any, ) -> Any: - # Redesign Β§3.1: the staging watcher boots whenever staging_root is - # configured; the legacy enabled toggle is gone. - if config is None or not config.orchestrator.staging_root: + # Operator-free per-file NAS sync design (2026-05-21): the quiescence + # poller boots whenever a staging_root is configured OR any equipment + # is in ``nas`` sync mode -- it is the single auto-sync trigger for + # both orchestrator-staged and nas-mode runs. + if config is None: return None - if ingest_writer is None or nas_sync is None or cache_creation is None: - msg = "staging watcher requires ingest_writer + nas_sync + cache_creation" + from exlab_wizard.constants import SyncMode + + has_staging_root = bool(config.orchestrator.staging_root) + has_nas_equipment = any(eq.sync_mode == SyncMode.NAS for eq in config.equipment) + if not (has_staging_root or has_nas_equipment): + return None + if nas_sync is None: + msg = "quiescence poller requires nas_sync" + raise RuntimeError(msg) + if sync_state_writer is None: + msg = "quiescence poller requires sync_state_writer" raise RuntimeError(msg) - from exlab_wizard.orchestrator.staging_watcher import StagingWatcher + from exlab_wizard.orchestrator.quiescence_poller import QuiescenceSyncPoller - return StagingWatcher( + return QuiescenceSyncPoller( config=config, - ingest_writer=ingest_writer, nas_sync=nas_sync, - cache_creation=cache_creation, + sync_state_writer=sync_state_writer, ) diff --git a/src/exlab_wizard/tray/main.py b/src/exlab_wizard/tray/main.py index 7e4afed..25b0928 100644 --- a/src/exlab_wizard/tray/main.py +++ b/src/exlab_wizard/tray/main.py @@ -174,7 +174,7 @@ def _build_default_components( session_store=getattr(deps, "session_store", None), nas_sync=getattr(deps, "nas_sync", None), ) - return TrayApp( + tray_app = TrayApp( server_runner=server_runner, window_launcher=window_launcher, quit_coordinator=quit_coordinator, @@ -182,6 +182,26 @@ def _build_default_components( notification_bus=notification_bus, autostart=autostart, ) + if deps is not None: + # Expose a quit hook + tray-availability flag on deps so the in-window + # Settings -> Application section can trigger the same graceful + # shutdown as the tray menu (T9) and reflect real tray status (T11). + deps.request_quit = tray_app.request_quit + deps.tray_available = _tray_backend_available() + return tray_app + + +def _tray_backend_available() -> bool: + """True when a ``pystray`` backend can be imported. + + When it cannot (e.g. a headless Linux host with no system tray), the + app runs window-only per Backend Spec Β§15.7.4; Settings reflects that. + """ + try: + import pystray # noqa: F401 + except Exception: + return False + return True def _parse_argv(argv: list[str] | None) -> argparse.Namespace: @@ -297,14 +317,7 @@ def _bootstrap_test_config(config_path: Path, *, include_samples: bool) -> None: "label": "Test Rig", "local_root": str(sandbox / "local" / "TESTRIG"), "nas_root": str(sandbox / "nas" / "TESTRIG"), - "completeness_signal": "sentinel_file", - "sentinel_filename": "done.flag", "sync_mode": "nas", - "transport": { - "type": "rclone", - "rclone_remote": "test-nas", - "rclone_remote_path": "test/TESTRIG", - }, } ) ) diff --git a/src/exlab_wizard/ui/components/__init__.py b/src/exlab_wizard/ui/components/__init__.py index 112f7b9..2fe78f8 100644 --- a/src/exlab_wizard/ui/components/__init__.py +++ b/src/exlab_wizard/ui/components/__init__.py @@ -8,6 +8,7 @@ banner_stack, credential_field, filter_chips, + input_required_dialog, mode_badge, operations_modal, override_badge, @@ -25,6 +26,7 @@ "banner_stack", "credential_field", "filter_chips", + "input_required_dialog", "mode_badge", "operations_modal", "override_badge", diff --git a/src/exlab_wizard/ui/components/file_list.py b/src/exlab_wizard/ui/components/file_list.py index e777197..e67e905 100644 --- a/src/exlab_wizard/ui/components/file_list.py +++ b/src/exlab_wizard/ui/components/file_list.py @@ -10,8 +10,13 @@ caller decides when to invoke and when to stop the underlying poll. Right-click context menu (Redesign Β§4.3 / decision 6A): selecting a row -opens a menu with **Open in OS** and **Copy path** actions; the right -metadata pane is NOT driven by file-list selection. +opens a menu with **Open in OS**, **Copy path**, and **Keep local** +actions; the right metadata pane is NOT driven by file-list selection. + +Operator-free per-file NAS sync design (2026-05-21): a row can be a +**tombstone** -- a file present in the run's ``sync_state.json`` but +absent on disk (an "On NAS" cleared-run file). A tombstone is not +openable. A ``keep_local`` file carries a small "kept local" badge. """ from __future__ import annotations @@ -20,16 +25,24 @@ from dataclasses import dataclass, field from typing import Any +from exlab_wizard.ui.components.sync_status_icon import STATUS_ON_NAS from exlab_wizard.ui.pages.staging import format_bytes # Action discriminators consumed by the on_context_menu callback. FILE_CONTEXT_OPEN = "open_in_os" FILE_CONTEXT_COPY_PATH = "copy_path" +FILE_CONTEXT_KEEP_LOCAL = "keep_local" @dataclass(frozen=True) class FileListEntry: - """One row in the centre-pane file list.""" + """One row in the centre-pane file list. + + ``keep_local`` mirrors the file's ``sync_state.json`` keep-local flag + (excluded from cleanup deletion). ``tombstone`` marks an "On NAS" + row -- a file recorded in ``sync_state.json`` but absent on disk; + such a row shows the ``on_nas`` icon and is not openable. + """ name: str path: str @@ -37,6 +50,8 @@ class FileListEntry: size_bytes: int | None = None modified_iso: str | None = None sync_status: str | None = None + keep_local: bool = False + tombstone: bool = False @dataclass @@ -83,6 +98,8 @@ def diff_file_lists( before.size_bytes != after.size_bytes or before.modified_iso != after.modified_iso or before.sync_status != after.sync_status + or before.keep_local != after.keep_local + or before.tombstone != after.tombstone ): modified.append(path) return FileListDiff( @@ -122,16 +139,44 @@ def render_file_list( .style("border-collapse: collapse; font-family: var(--font-mono);") .props('data-testid="file-list-table"') ): - for entry in state.entries: - _render_row( - entry, - is_new=entry.path in state.new_paths, - on_double_click=on_double_click, - on_context_menu=on_context_menu, - ) + with ui.element("thead"): + _render_header() + with ui.element("tbody"): + for entry in state.entries: + _render_row( + entry, + is_new=entry.path in state.new_paths, + on_double_click=on_double_click, + on_context_menu=on_context_menu, + ) return container +def _render_header() -> None: # pragma: no cover -- NiceGUI render, driven by e2e + """Render the file-list column header row (Name / Size / Modified / Status).""" + try: + from nicegui import ui + except Exception: + return + cell = ( + "font-size: var(--text-xs); text-transform: uppercase; letter-spacing: 0.06em; " + "color: var(--color-muted); font-weight: 600;" + ) + with ( + ui.element("tr") + .style("border-bottom: 1px solid var(--color-rule);") + .props('data-testid="file-list-header"') + ): + for title, align in ( + ("Name", "left"), + ("Size", "right"), + ("Modified", "left"), + ("Status", "left"), + ): + with ui.element("th").classes("p-2").style(f"text-align: {align}; {cell}"): + ui.label(title) + + def _render_row( entry: FileListEntry, *, @@ -146,14 +191,28 @@ def _render_row( highlight = "background: var(--color-highlight); " if is_new else "" size_text = "-" if entry.size_bytes is None else format_bytes(int(entry.size_bytes)) modified_text = entry.modified_iso or "-" - sync_text = entry.sync_status or "-" + sync_text = entry.sync_status or (STATUS_ON_NAS if entry.tombstone else "-") + # A tombstone ("On NAS") row is dimmed -- the local copy is gone. + row_style = f"{highlight}border-bottom: 1px solid var(--color-rule);" + if entry.tombstone: + row_style += " opacity: 0.65;" + keep_local_attr = ' data-keep-local="true"' if entry.keep_local else "" + tombstone_attr = ' data-tombstone="true"' if entry.tombstone else "" with ( ui.element("tr") - .style(f"{highlight}border-bottom: 1px solid var(--color-rule);") - .props(f'data-testid="file-list-row" data-path="{entry.path}"') + .style(row_style) + .props( + f'data-testid="file-list-row" data-path="{entry.path}"{keep_local_attr}{tombstone_attr}' + ) ): with ui.element("td").classes("p-2").style("font-weight: 500;"): ui.label(entry.name) + if entry.keep_local: + ui.label("kept local").props('data-testid="file-keep-local-badge"').style( + "display: inline-block; margin-left: 0.4rem; padding: 0 0.35rem; " + "font-size: var(--text-xs); border-radius: var(--radius-sm); " + "background: var(--color-highlight); color: var(--color-muted);" + ) with ui.element("td").classes("p-2 text-right"): ui.label(size_text) with ui.element("td").classes("p-2"): @@ -164,14 +223,22 @@ def _render_row( with ui.context_menu().props( f'data-testid="file-context-menu" data-path="{entry.path}"' ): - ui.menu_item("Open in OS").props('data-testid="file-context-open-in-os"').on( - "click", - lambda _evt, e=entry: on_context_menu(e, FILE_CONTEXT_OPEN), - ) + # A tombstone has no local copy -- "Open in OS" would + # fail, so it is omitted for tombstone rows. + if not entry.tombstone: + ui.menu_item("Open in OS").props('data-testid="file-context-open-in-os"').on( + "click", + lambda _evt, e=entry: on_context_menu(e, FILE_CONTEXT_OPEN), + ) ui.menu_item("Copy path").props('data-testid="file-context-copy-path"').on( "click", lambda _evt, e=entry: on_context_menu(e, FILE_CONTEXT_COPY_PATH), ) + keep_local_label = "Don't keep local" if entry.keep_local else "Keep local" + ui.menu_item(keep_local_label).props('data-testid="file-context-keep-local"').on( + "click", + lambda _evt, e=entry: on_context_menu(e, FILE_CONTEXT_KEEP_LOCAL), + ) if on_double_click is not None: # NiceGUI doesn't expose row-level dblclick easily; the caller is diff --git a/src/exlab_wizard/ui/components/input_required_dialog.py b/src/exlab_wizard/ui/components/input_required_dialog.py new file mode 100644 index 0000000..bef0c9c --- /dev/null +++ b/src/exlab_wizard/ui/components/input_required_dialog.py @@ -0,0 +1,125 @@ +"""Plugin ``INPUT_REQUIRED`` escalation dialog (Frontend Spec Β§9.1). + +When a plugin suspends mid-creation to ask the operator for more input, +the controller publishes an ``input_required`` frame carrying the +plugin identity, a ``reason`` line, and a list of README-style field +declarations. This dialog renders those fields, collects the answers, +and hands them back so the caller can ``controller.resume(...)``. + +Escalations are strictly sequential (Β§9.2): the dialog is ``persistent`` +so it must be resolved (Submit / Cancel) before anything else happens. +""" + +from __future__ import annotations + +from collections.abc import Callable +from typing import Any + +from exlab_wizard.logging import get_logger + +_log = get_logger(__name__) + + +def _field_id(field: dict[str, Any]) -> str | None: + """Return the field's identifier (``id``, falling back to ``key``).""" + fid = field.get("id") or field.get("key") + return fid if isinstance(fid, str) and fid else None + + +def collect_default_values(fields: list[dict[str, Any]]) -> dict[str, Any]: + """Seed an answers dict from each field's declared default. + + Booleans default to ``False`` when undeclared; every other type + defaults to the empty string so :func:`input_required_dialog` always + has a value to two-way bind against. + """ + values: dict[str, Any] = {} + for field in fields: + fid = _field_id(field) + if fid is None: + continue + ftype = str(field.get("type", "string")) + default = field.get("default") + if ftype == "boolean": + values[fid] = bool(default) if default is not None else False + else: + values[fid] = default if default is not None else "" + return values + + +def input_required_dialog( + *, + plugin: str, + reason: str, + fields: list[dict[str, Any]], + on_submit: Callable[[dict[str, Any]], None], + on_cancel: Callable[[], None], +) -> Any: + """Build the Β§9.1 "Additional input required" dialog. + + Renders one widget per field (string/text/choice/date/boolean), a + plugin-identity pill, and the reason line. ``on_submit`` receives the + collected answers dict; ``on_cancel`` fires when the operator backs + out. Returns the NiceGUI dialog (or, in tests, a payload describing + the resolved fields/defaults). + """ + values = collect_default_values(fields) + payload = {"plugin": plugin, "reason": reason, "fields": fields, "values": values} + + try: + from nicegui import ui + except Exception: + return payload + + # Β§9.2: persistent so the escalation must be resolved before the next + # frame -- no click-away dismissal that would strand the pipeline. + dialog = ui.dialog().props("persistent") + + def _submit() -> None: + dialog.close() + on_submit(dict(values)) + + def _cancel() -> None: + dialog.close() + on_cancel() + + with ( + dialog, + ui.card().props('data-testid="input-required-dialog"').style("min-width: 480px;"), + ): + ui.label("Additional input required").style( + "font-family: var(--font-display); font-size: var(--text-md); " + "color: var(--color-heading); font-weight: 600;" + ) + ui.label(plugin).props('data-testid="input-required-plugin"').style( + "font-family: var(--font-mono); font-size: var(--text-xs); " + "color: var(--color-heading); background: var(--color-rule); " + "padding: 0.1rem 0.5rem; border-radius: var(--radius-sm); align-self: flex-start;" + ) + if reason: + ui.label(reason).style("color: var(--color-body);") + for field in fields: + fid = _field_id(field) + if fid is None: + continue + label = str(field.get("label", fid)) + ftype = str(field.get("type", "string")) + if ftype == "boolean": + ui.checkbox(label, value=values[fid]).bind_value(values, fid) + elif ftype == "choice": + options = [str(opt) for opt in (field.get("options") or [])] + ui.select(options, label=label, value=values[fid] or None).bind_value( + values, fid + ).classes("w-full") + elif ftype == "text": + ui.textarea(label, value=values[fid]).bind_value(values, fid).classes("w-full") + else: # string / date / anything else -> single-line input + ui.input(label, value=values[fid]).bind_value(values, fid).classes("w-full") + with ui.row().classes("justify-end w-full").style("gap: 0.5rem;"): + ui.button("Cancel", on_click=lambda _e: _cancel()).props( + 'flat data-testid="input-required-cancel"' + ) + ui.button("Submit", on_click=lambda _e: _submit()).props( + 'color=primary data-testid="input-required-submit"' + ) + return dialog diff --git a/src/exlab_wizard/ui/components/metadata_pane.py b/src/exlab_wizard/ui/components/metadata_pane.py index 48770ea..bffd2d3 100644 --- a/src/exlab_wizard/ui/components/metadata_pane.py +++ b/src/exlab_wizard/ui/components/metadata_pane.py @@ -105,7 +105,6 @@ def _render_equipment( _kv("Sync mode", payload.get("sync_mode")) _kv("Local root", payload.get("local_root")) _kv("NAS root", payload.get("nas_root")) - _kv("Completeness signal", payload.get("completeness_signal")) if payload.get("sync_mode") == "stage": ui.label( "Stage mode: this device pushes runs to a connected PC's staging " diff --git a/src/exlab_wizard/ui/components/operations_modal.py b/src/exlab_wizard/ui/components/operations_modal.py index dcb4d8a..8e7837a 100644 --- a/src/exlab_wizard/ui/components/operations_modal.py +++ b/src/exlab_wizard/ui/components/operations_modal.py @@ -20,11 +20,13 @@ STATE_RUNNING = "running" STATE_SUSPENDED = "suspended" STATE_COMPLETED = "completed" +STATE_FAILED = "failed" _STATE_GLYPH: dict[str, str] = { STATE_RUNNING: "play_arrow", STATE_SUSPENDED: "pause", STATE_COMPLETED: "check", + STATE_FAILED: "error", } @@ -40,6 +42,40 @@ class OperationRow: run: str plugin: str | None = None + @classmethod + def from_session(cls, session_id: str, session: Any) -> OperationRow: + """Map a controller ``Session`` to a panel row. + + Collapses the Β§4.7 state machine onto the panel's three buckets: + ``INPUT_REQUIRED`` -> suspended (offers Resume/Cancel), ``DONE`` -> + completed, every other non-terminal state -> running. Shares + ``project_identifier`` with the ``/operations`` route so both label + rows identically (imported lazily to respect the controller/api + import ordering). + """ + from exlab_wizard.controller import SessionState, project_identifier + from exlab_wizard.utils.time import dt_to_iso + + if session.state is SessionState.INPUT_REQUIRED: + row_state = STATE_SUSPENDED + elif session.state is SessionState.DONE: + row_state = STATE_COMPLETED + elif session.state is SessionState.FAILED: + row_state = STATE_FAILED + else: + row_state = STATE_RUNNING + request = session.request + plugin = session.pending_input.get("plugin") if session.pending_input else None + return cls( + operation_id=session_id, + state=row_state, + started_at=dt_to_iso(session.created_at) if session.created_at is not None else "", + equipment=getattr(request, "equipment_id", None) or "", + project=project_identifier(request) or "", + run=getattr(request, "label", None) or "", + plugin=plugin, + ) + def operation_columns() -> list[dict[str, Any]]: """Column definitions for the NiceGUI table (Frontend Β§9.5).""" @@ -61,7 +97,7 @@ def sort_rows(rows: list[OperationRow]) -> list[OperationRow]: first so the operator clears the longest-pending input first. """ - state_priority = {STATE_SUSPENDED: 0, STATE_RUNNING: 1, STATE_COMPLETED: 2} + state_priority = {STATE_SUSPENDED: 0, STATE_RUNNING: 1, STATE_FAILED: 2, STATE_COMPLETED: 3} return sorted( rows, key=lambda r: (state_priority.get(r.state, 99), r.started_at), diff --git a/src/exlab_wizard/ui/components/session_progress.py b/src/exlab_wizard/ui/components/session_progress.py index 8902e64..3a0f61a 100644 --- a/src/exlab_wizard/ui/components/session_progress.py +++ b/src/exlab_wizard/ui/components/session_progress.py @@ -11,7 +11,7 @@ from __future__ import annotations from collections.abc import Iterable -from dataclasses import dataclass +from dataclasses import dataclass, field from typing import Any from exlab_wizard.logging import get_logger @@ -19,15 +19,17 @@ _log = get_logger(__name__) -# Phase identifiers from Backend Β§4.7. The ordered tuple is the canonical -# render order for the progress bar. +# Phase identifiers from Backend Β§4.7 -- these are the verbatim ``phase`` +# wire-format strings the controller emits (``state_machine.Phase``), so a +# live ``phase`` frame maps onto a row without translation. The ordered +# tuple is the canonical render order for the progress bar. PHASES: tuple[str, ...] = ( "validating_inputs", "rendering_template", "running_plugins", "writing_cache", - "post_validation", - "queueing_sync", + "validating_post_creation", + "queueing_nas_sync", ) PHASE_LABELS: dict[str, str] = { @@ -35,8 +37,8 @@ "rendering_template": "Rendering template", "running_plugins": "Running plugins", "writing_cache": "Writing cache", - "post_validation": "Validating post-creation", - "queueing_sync": "Queueing NAS sync", + "validating_post_creation": "Validating post-creation", + "queueing_nas_sync": "Queueing NAS sync", } @@ -158,3 +160,66 @@ def session_progress( "color=info" ).style("flex-grow: 1;") return column + + +# --------------------------------------------------------------------------- +# Live state (Backend Β§4.6.2 WS frames -> render args) +# --------------------------------------------------------------------------- + + +@dataclass +class SessionProgressState: + """Mutable phase/sub-progress state folded from controller WS frames. + + The wizard's Confirm & Create step renders :func:`session_progress` + from this object inside a ``@ui.refreshable`` and re-renders it as the + creation pipeline publishes frames over :meth:`CreationController.subscribe`. + """ + + active_phase: str | None = None + completed: list[str] = field(default_factory=list) + plugin_current: int | None = None + plugin_total: int | None = None + plugin_name: str | None = None + + +def apply_frame(state: SessionProgressState, frame: dict[str, Any]) -> bool: + """Fold one controller WS ``frame`` into ``state`` in place. + + Returns ``True`` when the visible progress changed (the caller should + re-render). Recognises ``phase`` and ``progress`` frames plus the + terminal ``done``; ``failed`` and ``input_required`` are left to the + caller (the wizard surfaces those out-of-band). + """ + + def _complete_through(upto: int) -> None: + # Mark the first ``upto`` phases complete (idempotent) -- buffered + # frames may have been coalesced, so a phase becoming active (or the + # session finishing) implies its predecessors finished. + for phase in PHASES[:upto]: + if phase not in state.completed: + state.completed.append(phase) + + kind = frame.get("kind") + if kind == "phase": + phase = frame.get("phase") + if phase not in PHASES: + # ``input_required`` / ``done`` arrive as their own ``kind``; + # any unknown phase string is ignored rather than mis-rendered. + return False + _complete_through(PHASES.index(phase)) + state.active_phase = phase + if phase != "running_plugins": + state.plugin_current = state.plugin_total = state.plugin_name = None + return True + if kind == "progress": + state.active_phase = "running_plugins" + state.plugin_current = frame.get("current") + state.plugin_total = frame.get("total") + state.plugin_name = frame.get("plugin") or frame.get("name") + return True + if kind == "done": + _complete_through(len(PHASES)) + state.active_phase = None + return True + return False diff --git a/src/exlab_wizard/ui/components/sync_status_icon.py b/src/exlab_wizard/ui/components/sync_status_icon.py index 67fdfb0..8762ec4 100644 --- a/src/exlab_wizard/ui/components/sync_status_icon.py +++ b/src/exlab_wizard/ui/components/sync_status_icon.py @@ -1,15 +1,23 @@ """Sync-status icon component (Frontend Spec Β§3.2, Β§10.5.1). -Seven distinct visual states with a fixed color mapping: +Distinct visual states with a fixed color mapping: * ``pending`` -- ``--color-muted`` +* ``acquiring`` -- ``--color-muted`` * ``retrying`` (with N/M) -- ``--color-info`` +* ``syncing`` -- ``--color-info`` * ``synced`` -- ``--color-success`` * ``cleaned`` -- ``--color-success`` +* ``on_nas`` -- ``--color-muted`` * ``failed`` -- ``--color-danger`` * ``blocked_by_validation`` -- ``--color-warning`` * ``override_active`` -- ``--color-info`` +The ``acquiring`` / ``syncing`` / ``on_nas`` states are the per-file GUI +display states from the operator-free per-file NAS sync design +(2026-05-21): a file still settling, a file mid-transfer, and an "On +NAS" tombstone whose local copy has been cleared. + The component returns a dict suitable for a NiceGUI icon factory; the layout (icon + optional ``(N/M)`` retry counter) is the caller's concern so the icon can be embedded in a tree row, a detail-pane title bar, or a @@ -34,6 +42,13 @@ STATUS_RETRYING: Final[str] = "retrying" STATUS_OVERRIDE: Final[str] = "override_active" +# Per-file GUI display states (operator-free per-file NAS sync design, +# 2026-05-21). These mirror the discriminators emitted by +# ``api.routers.browse._file_state_from_record``. +STATUS_ACQUIRING: Final[str] = "acquiring" +STATUS_SYNCING: Final[str] = "syncing" +STATUS_ON_NAS: Final[str] = "on_nas" + _STATUS_TO_PROPS: dict[str, dict[str, str]] = { SyncStatus.PENDING.value: { @@ -41,11 +56,26 @@ "color_var": "--color-muted", "tooltip": "Queued for sync", }, + STATUS_ACQUIRING: { + "icon_name": "edit_note", + "color_var": "--color-muted", + "tooltip": "Acquiring -- new file, still settling", + }, STATUS_RETRYING: { "icon_name": "history", "color_var": "--color-info", "tooltip": "Retrying with backoff", }, + STATUS_SYNCING: { + "icon_name": "sync", + "color_var": "--color-info", + "tooltip": "Syncing -- settled, transferring to NAS", + }, + STATUS_ON_NAS: { + "icon_name": "cloud", + "color_var": "--color-muted", + "tooltip": "On NAS -- local copy cleared, data on NAS only", + }, SyncStatus.SYNCED.value: { "icon_name": "check_circle", "color_var": "--color-success", diff --git a/src/exlab_wizard/ui/components/tree.py b/src/exlab_wizard/ui/components/tree.py index 762c234..c3392b5 100644 --- a/src/exlab_wizard/ui/components/tree.py +++ b/src/exlab_wizard/ui/components/tree.py @@ -11,11 +11,15 @@ Run rows also carry a small **sync icon** to the left of the label: -* ``sync_local.svg`` -- run data is still on local disk (any sync - status other than ``cleaned``). -* ``sync_cloud.svg`` -- run has been synced, verified, and locally - cleaned (``sync_status == "cleaned"``); only the ``.exlab-wizard/`` - cache subtree remains on disk (Β§7.1.10). +* ``sync_local.svg`` -- run data is still on local disk (rollup + ``syncing`` / ``synced``, any state other than ``cleared``). +* ``sync_cloud.svg`` -- the run's staging copy has been cleared + (rollup ``cleared``); only the ``.exlab-wizard/`` cache subtree + remains on disk (Β§7.1.10). + +The run-node rollup is derived from the run's ``sync_state.json`` by the +browse router (operator-free per-file NAS sync design, 2026-05-21); +``RunNode.sync_status`` carries a :class:`RunSyncState` value. ``.exlab-wizard/`` folders are hidden by default (Frontend Β§13.1) and hidden filtering is the caller's concern. @@ -31,7 +35,7 @@ from dataclasses import dataclass, field from typing import Any -from exlab_wizard.constants.enums import RunKind, SyncStatus, TreeProjectStatus +from exlab_wizard.constants.enums import RunKind, RunSyncState, TreeProjectStatus from exlab_wizard.logging import get_logger _log = get_logger(__name__) @@ -232,13 +236,14 @@ def _sync_icon_url(node: TreeNode) -> str | None: """Return the per-row sync-icon URL, or ``None`` for non-run rows. Run rows get one of the two ``/assets/sync_*.svg`` URLs depending on - whether the run has been locally cleaned (``sync_cloud.svg``) or - still has data on disk (``sync_local.svg``). Equipment / project - rows render unchanged. + the derived run rollup: a ``cleared`` run (staging copy cleaned, data + on NAS only) gets ``sync_cloud.svg``; a ``syncing`` / ``synced`` run + still has data on disk and gets ``sync_local.svg``. Equipment / + project rows render unchanged. """ if node.kind not in _RUN_KINDS: return None - if node.sync_status == SyncStatus.CLEANED.value: + if node.sync_status == RunSyncState.CLEARED.value: return SYNC_ICON_CLOUD_URL return SYNC_ICON_LOCAL_URL diff --git a/src/exlab_wizard/ui/equipment_form.py b/src/exlab_wizard/ui/equipment_form.py index cab1ee6..e83e052 100644 --- a/src/exlab_wizard/ui/equipment_form.py +++ b/src/exlab_wizard/ui/equipment_form.py @@ -1,7 +1,7 @@ """Shared assembler for an :class:`EquipmentConfig` from raw form fields. GUI/Orchestrator Redesign Β§6: both the Settings β†’ Equipment List section -and the new Add-Equipment wizard build their final ``EquipmentConfig`` +and the Add-Equipment wizard build their final ``EquipmentConfig`` through this single function so the two surfaces stay in lockstep without copy-paste drift. @@ -12,17 +12,8 @@ from __future__ import annotations -from exlab_wizard.config.models import ( - EquipmentConfig, - OrchestratorStagingTransport, - RcloneTransport, - RsyncSshTransport, -) -from exlab_wizard.constants import ( - CompletenessSignal, - OrchestratorTransportType, - SyncMode, -) +from exlab_wizard.config.models import EquipmentConfig +from exlab_wizard.constants import SyncMode __all__ = ["build_equipment_config"] @@ -33,72 +24,21 @@ def build_equipment_config( label: str, local_root: str, nas_root: str, - completeness_signal: str, - sentinel_filename: str, - manifest_filename: str, sync_mode: str = "nas", - # NAS transport fields (when sync_mode == "nas") - transport_type: str = "rclone", - rclone_remote: str = "", - rclone_remote_path: str = "", - ssh_target: str = "", - ssh_key_path: str = "", - rsync_remote_path: str = "", - # Stage transport fields (when sync_mode == "stage") - staging_transport_type: str = "smb_mount", - staging_mount_point: str = "", - staging_subpath: str = "", ) -> EquipmentConfig: """Assemble a validated :class:`EquipmentConfig` from raw form fields. - Redesign Β§3.2: ``sync_mode`` ("nas" or "stage") dictates which - transport sub-block is populated. ``nas`` requires the NAS - ``transport`` block (rclone or rsync_ssh); ``stage`` requires the - ``orchestrator_staging_transport`` block (smb_mount or file_transfer). - Pydantic validation enforces the exclusivity rule. + Redesign Β§3.2: ``sync_mode`` ("nas" or "stage") dictates the device's + role. rclone.conf NAS-sync migration (Phase 8): neither mode carries a + per-equipment connection block. The NAS connection is defined once by the + ``nas:`` remote; the staging hop is defined once by + ``orchestrator.staging_remote`` / ``staging_base_root``. The push target + is selected by ``sync_mode`` at sync time. """ - mode = SyncMode(sync_mode) - signal = CompletenessSignal(completeness_signal) - - transport: RcloneTransport | RsyncSshTransport | None = None - orch_staging: OrchestratorStagingTransport | None = None - - if mode is SyncMode.NAS: - if transport_type == "rsync_ssh": - transport = RsyncSshTransport( - type="rsync_ssh", - ssh_target=ssh_target.strip(), - ssh_key_path=ssh_key_path.strip() or "~/.ssh/id_ed25519", - remote_path=rsync_remote_path.strip(), - ) - else: - transport = RcloneTransport( - type="rclone", - rclone_remote=rclone_remote.strip(), - rclone_remote_path=rclone_remote_path.strip(), - ) - else: # SyncMode.STAGE - orch_staging = OrchestratorStagingTransport( - type=OrchestratorTransportType(staging_transport_type), - mount_point=staging_mount_point.strip(), - staging_subpath=staging_subpath.strip(), - ) - return EquipmentConfig( id=equipment_id.strip(), label=label.strip(), local_root=local_root.strip(), nas_root=nas_root.strip(), - completeness_signal=signal, - sentinel_filename=( - sentinel_filename.strip() or None - if signal is CompletenessSignal.SENTINEL_FILE - else None - ), - manifest_filename=( - manifest_filename.strip() or None if signal is CompletenessSignal.MANIFEST else None - ), - sync_mode=mode, - transport=transport, - orchestrator_staging_transport=orch_staging, + sync_mode=SyncMode(sync_mode), ) diff --git a/src/exlab_wizard/ui/mount.py b/src/exlab_wizard/ui/mount.py index cd83ae7..2468f8c 100644 --- a/src/exlab_wizard/ui/mount.py +++ b/src/exlab_wizard/ui/mount.py @@ -26,8 +26,16 @@ from pathlib import Path from typing import TYPE_CHECKING, Any -from exlab_wizard.constants import KEYRING_USERNAME_LIMS, AuditScopeKind, RunKind +from exlab_wizard.constants import ( + KEYRING_USERNAME_LIMS, + AuditScopeKind, + RunKind, + RunSyncState, + SetupState, +) from exlab_wizard.logging import get_logger +from exlab_wizard.orchestrator.staging_clear import clear_run_dir +from exlab_wizard.orchestrator.staging_query import list_staged_runs if TYPE_CHECKING: from fastapi import FastAPI @@ -112,26 +120,13 @@ def _deps() -> Any: @ui.page("/") def _index() -> Any: deps = _deps() - if _restart_gate(deps, ui): - return if _is_setup_ready(deps): ui.navigate.to("/main") else: ui.navigate.to("/welcome") - @ui.page("/restart-required") - def _restart_required() -> Any: - # Terminal screen: config.yaml was written but the tray's - # config-dependent components were built once at boot, so the - # operator must relaunch to finish setup. Not gated -- this is - # the gate's destination. - return _render_restart_required(ui) - @ui.page("/welcome") def _welcome() -> Any: - if _restart_gate(_deps(), ui): - return None - def _on_started(autostart: bool) -> None: _apply_autostart(_deps(), autostart) ui.navigate.to("/settings") @@ -148,8 +143,6 @@ def _on_skip(autostart: bool) -> None: @ui.page("/main") def _main(selected: str = "", right_pane: str = "") -> Any: deps = _deps() - if _restart_gate(deps, ui): - return None from exlab_wizard.api.routers import browse as _browse config = getattr(deps, "config", None) @@ -193,7 +186,7 @@ def _on_tree_context_action(node_id: str, action: str) -> None: ui.navigate.to(f"/settings?active=equipment&equipment_id={node_id}") def _on_file_context_action(entry: Any, action: str) -> None: - _file_context_action(entry, action, ui) + _file_context_action(deps, entry, action, ui, on_done=_refresh) return main_page.render_file_explorer_page( on_open_new_project=lambda: ui.navigate.to("/wizard/project"), @@ -203,6 +196,7 @@ def _on_file_context_action(entry: Any, action: str) -> None: on_open_settings=lambda: ui.navigate.to("/settings"), on_refresh=_refresh, on_select_node=_on_select_node, + on_open_operations=lambda: _open_operations_modal(deps, ui), on_navigate_breadcrumb=_on_select_node, on_toggle_right_pane=_on_toggle_right_pane, on_run_staging_action=_on_run_staging_action, @@ -218,8 +212,6 @@ def _on_file_context_action(entry: Any, action: str) -> None: @ui.page("/wizard/project") async def _wizard_project() -> Any: deps = _deps() - if _restart_gate(deps, ui): - return None return wizard_project_page.render_project_wizard( templates=_template_names(deps, "project"), equipment_ids=_equipment_ids(deps), @@ -232,54 +224,62 @@ async def _wizard_project() -> Any: @ui.page("/wizard/run") def _wizard_run() -> Any: deps = _deps() - if _restart_gate(deps, ui): - return None return _render_run_wizard(deps, RunKind.EXPERIMENTAL, ui) @ui.page("/wizard/test-run") def _wizard_test_run() -> Any: deps = _deps() - if _restart_gate(deps, ui): - return None return _render_run_wizard(deps, RunKind.TEST, ui) @ui.page("/wizard/equipment") def _wizard_equipment() -> Any: - """Redesign Β§6 β€” Add-Equipment wizard route.""" + """Redesign Β§6 β€” Add-Equipment wizard route. + + ``state`` is created once for the wizard's whole lifetime: the + render layer drives Next / Back internally (re-rendering in + place), so nothing here navigates mid-wizard -- a navigation + would rebuild the page and reset every field the operator typed. + """ deps = _deps() - if _restart_gate(deps, ui): - return None state = wizard_equipment_page.EquipmentWizardState() - def _on_advance(current_step: str) -> None: - idx = wizard_equipment_page.EQUIPMENT_WIZARD_STEPS.index(current_step) - if idx + 1 < len(wizard_equipment_page.EQUIPMENT_WIZARD_STEPS): - state.active_step = wizard_equipment_page.EQUIPMENT_WIZARD_STEPS[idx + 1] - ui.navigate.to("/wizard/equipment") - - def _on_back(current_step: str) -> None: - idx = wizard_equipment_page.EQUIPMENT_WIZARD_STEPS.index(current_step) - if idx > 0: - state.active_step = wizard_equipment_page.EQUIPMENT_WIZARD_STEPS[idx - 1] - ui.navigate.to("/wizard/equipment") - def _on_confirm(eq: Any) -> None: - # Posts through the config router. The actual HTTP wiring is - # supplied by the deps' append-equipment callable; tests can - # stub it. - append = getattr(deps, "append_equipment", None) if deps is not None else None - if append is not None: - try: - append(eq) - except Exception as exc: - _show_toast(ui, f"Could not add equipment: {exc}", positive=False) - return + # Persist straight into the live config (Redesign Β§6): merge + # via the same shared helper the POST /config/equipment route + # uses, save through ``deps.save_config``, then push the merged + # config into the running NAS-sync client / poller via + # ``apply_live_config`` so the new equipment is live without a + # tray relaunch -- matching the route's no-restart contract. + from exlab_wizard.config.models import config_with_equipment_appended + from exlab_wizard.errors import ConfigError + + try: + merged = config_with_equipment_appended(getattr(deps, "config", None), eq) + except ConfigError as exc: + _show_toast(ui, f"Could not add equipment: {exc}", positive=False) + return + saver = getattr(deps, "save_config", None) if deps is not None else None + if saver is None: + _show_toast( + ui, "Cannot add equipment: no config writer is available", positive=False + ) + return + try: + result = saver(merged) + if hasattr(result, "__await__"): + # Production wires a synchronous saver; an awaitable + # here would silently no-op, so surface it. + _log.warning("save_config returned an awaitable; a sync saver is expected") + except Exception as exc: + _log.exception("append-equipment save_config failed") + _show_toast(ui, f"Could not add equipment: {exc}", positive=False) + return + if deps is not None: + _apply_live_config(deps, merged) ui.navigate.to("/main") return wizard_equipment_page.render_wizard_equipment( state=state, - on_advance=_on_advance, - on_back=_on_back, on_confirm=_on_confirm, on_cancel=lambda: ui.navigate.to("/main"), ) @@ -287,8 +287,6 @@ def _on_confirm(eq: Any) -> None: @ui.page("/templates") def _templates() -> Any: deps = _deps() - if _restart_gate(deps, ui): - return None templates_dir = _templates_dir(deps) def _on_create( @@ -322,9 +320,9 @@ def _on_create( @ui.page("/settings") def _settings(active: str = "") -> Any: + from exlab_wizard.api._dependencies import lims_password_present, nas_remote_available + deps = _deps() - if _restart_gate(deps, ui): - return None incomplete = _missing_setup_sections(deps) # ``active`` is an optional deep-link query param; when absent the # page falls back to its own first-incomplete-section logic. @@ -341,10 +339,41 @@ def _settings(active: str = "") -> Any: def _on_save(updated: Any) -> None: if not _persist_config(deps, updated, ui): return - ui.navigate.to("/restart-required") + # Live-applied in-process (no relaunch): confirm and keep the + # operator on the settings page so they can keep editing. + _show_toast(ui, "Settings saved", positive=True) on_save_lims_password, on_clear_lims_password = _lims_credential_handlers(deps, ui) + def _on_set_autostart(enabled: bool) -> bool | None: + return _apply_autostart(deps, enabled) + + # Quit hook (T9): run the graceful-shutdown hook on a separate thread, + # NOT via ui.timer. The timer callback runs on the server's *running* + # event loop, where ``request_quit``'s ``asyncio.run(...)`` raises + # "loop already running" (and the fallback re-raises) -- the app would + # never shut down. A fresh thread has no running loop so ``asyncio.run`` + # works; the click handler returns immediately so the HTTP response + # still flushes. Absent in headless/test fixtures. + _quit_hook = getattr(deps, "request_quit", None) if deps is not None else None + on_quit: Callable[[], None] | None = None + if _quit_hook is not None: + quit_hook = _quit_hook + + def on_quit() -> None: + import threading + + def _do() -> None: + try: + quit_hook() + except Exception as exc: + _log.warning("quit hook raised: %s", exc) + + threading.Thread(target=_do, name="exlab-quit", daemon=True).start() + + async def _on_test_connection() -> Any: + return await _nas_test_connection(deps) + # ``on_select_section`` is left unset: the settings dialog swaps # sections client-side, so a navigation hook would only reload # the page and discard the operator's in-progress edits. @@ -355,22 +384,27 @@ def _on_save(updated: Any) -> None: on_discard=None, on_save_lims_password=on_save_lims_password, on_clear_lims_password=on_clear_lims_password, - lims_password_present=bool(getattr(deps, "keyring_password_present", False)), + lims_password_present=lims_password_present(deps), + nas_remote_available=lambda remote: nas_remote_available(deps, remote), + on_test_connection=_on_test_connection, + autostart_registered=bool(getattr(deps, "autostart_is_registered", False)), + on_set_autostart=_on_set_autostart, + on_quit=on_quit, + tray_available=bool(getattr(deps, "tray_available", False)), ) @ui.page("/problems") def _problems() -> Any: deps = _deps() - if _restart_gate(deps, ui): - return None findings = _safe_audit(deps) - return problems_page.render_problems_page(findings=findings) + return problems_page.render_problems_page( + findings=findings, + last_audit_at=getattr(deps, "last_audit_at", None), + ) @ui.page("/staging") def _staging() -> Any: deps = _deps() - if _restart_gate(deps, ui): - return None state = _build_staging_state(deps) if state is None: _render_unavailable( @@ -387,20 +421,6 @@ def _staging() -> Any: # --------------------------------------------------------------------------- -def _restart_gate(deps: Any, ui: Any) -> bool: - """Route to ``/restart-required`` when config was written this session. - - The config-dependent components (controller / lims_client / - nas_sync) are built once at tray boot, so a config.yaml written by - the settings wizard only takes effect after a relaunch. Returns - ``True`` when the caller should stop rendering its normal page. - """ - if deps is not None and getattr(deps, "restart_required", False): - ui.navigate.to("/restart-required") - return True - return False - - def _lims_credential_handlers( deps: Any, ui: Any ) -> tuple[Callable[[str], None], Callable[[], None]]: @@ -427,6 +447,13 @@ def _on_save(value: str) -> None: _log.exception("LIMS keyring set_password failed") _show_toast(ui, f"Could not save the LIMS password: {exc}", positive=False) return + # The credential field re-seeds its "Set / Not set" status from + # ``deps.keyring_password_present`` on the next render, and the + # Β§4.9 setup gate reads the same flag. It is computed once at + # tray boot, so flip it here -- otherwise a freshly saved + # password would still read as absent until the next tray launch. + if deps is not None: + deps.keyring_password_present = True _show_toast(ui, "LIMS password saved to the OS keyring", positive=True) def _on_clear() -> None: @@ -441,17 +468,82 @@ def _on_clear() -> None: _log.exception("LIMS keyring delete_password failed") _show_toast(ui, f"Could not clear the LIMS password: {exc}", positive=False) return + # Mirror of the Save path: clearing the password makes the slot + # incomplete again, so drop the boot-time flag in step. + if deps is not None: + deps.keyring_password_present = False _show_toast(ui, "LIMS password removed from the OS keyring", positive=True) return _on_save, _on_clear -def _persist_config(deps: Any, updated: Any, ui: Any) -> bool: - """Write ``updated`` via ``deps.save_config`` and arm the restart gate. +async def _nas_test_connection(deps: Any) -> Any: + """Run the rclone NAS-remote probe and adapt it for the inline panel. + + rclone.conf NAS-sync migration. The Settings "NAS Remote" section's + Test-connection button probes the single configured ``nas:`` remote + (no per-equipment password). It reuses ``deps.equipment_probe`` -- the + same probe the ``POST /setup/test-equipment`` endpoint uses, which now + targets ``nas.remote`` and ignores the per-equipment fields -- passing + the first nas-mode equipment (or any equipment) as the probe argument. + The probe's ``{ok, reason, latency_ms}`` dict is mapped to a + :class:`TestConnectionResult`. + """ + import json + + from exlab_wizard.constants import SyncMode + from exlab_wizard.ui.components.test_connection_panel import TestConnectionResult + + config = getattr(deps, "config", None) if deps is not None else None + probe = getattr(deps, "equipment_probe", None) if deps is not None else None + if probe is None or config is None: + return TestConnectionResult( + success=False, + headline="Connection failed", + detail="equipment probe is not available", + raw="", + ) + equipment = next( + (e for e in config.equipment if e.sync_mode == SyncMode.NAS), + next(iter(config.equipment), None), + ) + try: + result = probe(equipment) + if asyncio.iscoroutine(result) or asyncio.isfuture(result): + result = await result + except Exception as exc: + return TestConnectionResult( + success=False, headline="Connection failed", detail=str(exc), raw=str(exc) + ) + payload = result if isinstance(result, dict) else {"ok": bool(result)} + ok = bool(payload.get("ok")) + reason = payload.get("reason") + latency_ms = payload.get("latency_ms") + if ok: + detail = f"reachable ({latency_ms} ms)" if latency_ms is not None else "reachable" + headline = "Connected" + else: + detail = str(reason) if reason else "connection failed" + headline = "Connection failed" + return TestConnectionResult( + success=ok, + headline=headline, + detail=detail, + raw=json.dumps(payload, indent=2, sort_keys=True), + ) - Returns ``True`` on success. On failure a negative toast is shown - and the function returns ``False`` so the caller leaves the operator - on the settings page to retry. + +def _persist_config(deps: Any, updated: Any, ui: Any) -> bool: + """Write ``updated`` via ``deps.save_config`` and hot-reload components. + + Returns ``True`` on success. On a write failure a negative toast is + shown and the function returns ``False`` so the caller leaves the + operator on the settings page to retry. The disk write is the success + boundary: once it lands, the new config is pushed into the running + components via ``apply_live_config`` so the change takes effect + without a tray relaunch. A hiccup in that live push is logged but + does not fail the save -- the config is already persisted and the + in-memory copy is kept in step. """ saver = getattr(deps, "save_config", None) if deps is not None else None if saver is None: @@ -467,57 +559,128 @@ def _persist_config(deps: Any, updated: Any, ui: Any) -> bool: _log.exception("save_config failed") _show_toast(ui, f"Save failed: {exc}", positive=False) return False + _ensure_staging_root(updated, ui) if deps is not None: - deps.config = updated - deps.restart_required = True + _apply_live_config(deps, updated) return True -def _render_restart_required(ui: Any) -> Any: - """Render the terminal restart-required screen.""" +def _ensure_staging_root(updated: Any, ui: Any) -> None: + """Create the staging directory when the operator saved a non-empty path. + + ``staging_root`` is opt-in: a blank value means this device is not a + staging PC, so nothing is created. A non-empty path is created here -- + the operator specifying and saving it is the only trigger, so no + ``/staging`` (or any staging directory) is ever made implicitly. A + creation failure is non-fatal: the config is already persisted and the + validator flags an inaccessible root on the next audit, so we only warn. + + ``updated`` is read defensively so a non-``Config`` value (e.g. a test + sentinel) is a no-op rather than an ``AttributeError``. + """ + orch = getattr(updated, "orchestrator", None) + staging = getattr(orch, "staging_root", "") + if not staging: + return + from exlab_wizard.paths import ensure_dir + + try: + ensure_dir(Path(staging)) + except OSError as exc: + _log.exception("failed to create staging_root") + _show_toast(ui, f"Couldn't create staging directory: {exc}", positive=False) + + +def _apply_live_config(deps: Any, updated: Any) -> None: + """Push ``updated`` into the running components (no tray relaunch). + + Wraps :func:`exlab_wizard.tray.dependencies.apply_live_config` (imported + lazily to avoid a tray<->api import cycle). The coordinator is already + best-effort per component, so reaching the ``except`` is unexpected; + it still keeps ``deps.config`` in step so ``GET /config`` is correct. + """ try: - card = ( - ui.card() - .props('data-testid="restart-required"') - .style( - "max-width: 520px; margin: 4rem auto; padding: var(--sp-8); " - "background: var(--color-surface); border-radius: var(--radius-lg);" - ) - ) - with card: - ui.label("Restart required").style( - "font-family: var(--font-display); font-size: var(--text-lg); " - "font-weight: 600; color: var(--color-heading);" - ) - ui.label( - "Your configuration has been saved. Quit ExLab-Wizard from the " - "system tray and relaunch it so the new settings take effect." - ).props('data-testid="restart-required-message"').style("color: var(--color-body);") - return card - except Exception as exc: - _log.warning("render_restart_required failed: %s", exc) - return None + from exlab_wizard.tray.dependencies import apply_live_config + + apply_live_config(deps, updated) + except Exception: + _log.exception("live config reload failed after save") + deps.config = updated + + +def _nas_remote_missing(deps: Any, config: Any) -> bool: + """True when nas-mode equipment exist but the ``nas:`` remote is unusable. + + rclone.conf NAS-sync migration. Drives the Settings page's NAS-remote + section visibility via :func:`_missing_setup_sections` so the + setup-incomplete banner auto-selects it. The remote is "missing" when + at least one device syncs directly to the NAS AND either no + ``nas.remote`` is configured or that remote is not present in the + operator's ``rclone.conf`` (the same gate the Β§4.9 setup evaluator, + ``INCOMPLETE_NO_NAS_REMOTE``, keys on). + """ + from exlab_wizard.api._dependencies import nas_remote_available + from exlab_wizard.constants import SyncMode + + has_nas_equipment = any( + eq.sync_mode == SyncMode.NAS for eq in getattr(config, "equipment", ()) or () + ) + if not has_nas_equipment: + return False + nas = getattr(config, "nas", None) + remote = getattr(nas, "remote", "") if nas is not None else "" + return not remote or not nas_remote_available(deps, remote) def _is_setup_ready(deps: Any) -> bool: - """Mirror ``api.setup.compute_setup_state`` without the API import.""" + """Return True when the Β§4.9 setup state is ``READY``. + + Delegates to :func:`api.setup.compute_setup_state` -- the single + source of truth that ``GET /api/v1/setup/status``, the route gate, + and the banner subline (:func:`_setup_next_action`) all consult -- + so the main-page setup-incomplete banner agrees with the API's + verdict on every gate (paths, orchestrator, equipment, NAS + credentials, and *both* LIMS branches). + + An earlier hand-rolled mirror checked only the LIMS *keyring* + branch, so it kept the banner up for an otherwise-ready install + whose LIMS slot is satisfied by ``offline_catalogue_path`` rather + than a stored password -- a disconnected-workstation setup read as + perpetually incomplete even though ``/setup/status`` reported + ``ready`` (rclone-only migration follow-up, 2026-05-28). + + Best-effort: any evaluation failure degrades to "not ready" so a + half-wired backend keeps the operator on the onboarding path rather + than leaking a stack trace into the index route. + """ if deps is None or getattr(deps, "config", None) is None: return False - keyring = getattr(deps, "keyring_password_present", False) - lims_reachable = getattr(deps, "lims_reachable", True) - return bool(keyring and lims_reachable) + try: + from exlab_wizard.api.setup import compute_setup_state + + return compute_setup_state(deps) is SetupState.READY + except Exception as exc: + _log.warning("setup-readiness computation failed: %s", exc) + return False -def _apply_autostart(deps: Any, enabled: bool) -> None: +def _apply_autostart(deps: Any, enabled: bool) -> bool | None: + """Register / unregister platform autostart; return the real post-op state. + + Returns ``deps.autostart_toggle``'s ``is_registered()`` result so callers + (Settings -> Application) can reflect / revert the checkbox to reality; + ``None`` when no toggle is wired or the op raised. + """ if deps is None: - return + return None toggle: Callable[[bool], Any] | None = getattr(deps, "autostart_toggle", None) if toggle is None: - return + return None try: - toggle(enabled) + return bool(toggle(enabled)) except Exception as exc: - _log.warning("autostart toggle failed in welcome: %s", exc) + _log.warning("autostart toggle failed: %s", exc) + return None def _build_main_state( @@ -534,16 +697,81 @@ def _build_main_state( # surface always renders, so MainPageState.orchestrator_enabled keeps # its True default. Folder-feed path mirrors the selected node so the # centre pane shows the right folder. + ops_count, ops_input_required, ops_active = _operation_counts(deps) return main_page.MainPageState( setup_incomplete=not _is_setup_ready(deps), + setup_next_action=_setup_next_action(deps), selected_node=selected_node, selected_node_kind=node_kind, selected_node_is_received=is_received, right_pane_collapsed=right_pane_collapsed, folder_feed_path=selected_node, + operations_count=ops_count, + operations_input_required=ops_input_required, + creation_in_flight=ops_active > 0, + # Real Problems counts from the 30 s background audit (T6 / Β§B5). + problems_count_hard=int(getattr(deps, "last_audit_hard", 0) or 0), + problems_count_soft=int(getattr(deps, "last_audit_soft", 0) or 0), ) +def _panel_sessions(deps: Any) -> list[tuple[str, Any]]: + """Return the (session_id, session) pairs the Operations panel shows. + + The Β§9.5 membership rule lives here only: everything except the + terminal ``DONE`` / ``ABORTED`` (``FAILED`` stays so a recent failure + is visible). Shared by :func:`_operation_counts` and + :func:`_build_operation_rows` so the rule can't drift. + """ + controller = getattr(deps, "controller", None) if deps is not None else None + store = getattr(controller, "session_store", None) if controller is not None else None + if store is None: + return [] + from exlab_wizard.controller import on_operations_panel + + return [(sid, session) for sid, session in store.iter_sorted() if on_operations_panel(session)] + + +def _operation_counts(deps: Any) -> tuple[int, int, int]: + """Return ``(panel_count, input_required, active)`` operation counts. + + ``panel_count`` is the Β§9.5 panel size (see :func:`_panel_sessions`). + ``input_required`` counts suspended sessions awaiting a plugin answer + (Frontend Β§9.5 / Β§3.5.5). ``active`` counts strictly non-terminal + sessions and gates the Β§9.6 creation-button lock (``FAILED`` is + terminal, so it sits in the panel but does not lock creation). + """ + from exlab_wizard.controller import SessionState + + panel_rows = _panel_sessions(deps) + input_required = sum(1 for _sid, s in panel_rows if s.state is SessionState.INPUT_REQUIRED) + active = sum(1 for _sid, s in panel_rows if not s.is_terminal()) + return (len(panel_rows), input_required, active) + + +def _setup_next_action(deps: Any) -> str | None: + """Return the Β§4.9.3 next-action string for the banner subline. + + Unlike :func:`_is_setup_ready` (a deliberately narrow LIMS-only + readiness mirror), this consults the real evaluator via + ``compute_setup_state`` so the banner names the actual first-failing + gate -- notably the NAS-credentials gate added by the rclone-only + migration (2026-05-26). Best-effort: any failure yields ``None`` so + the banner falls back to its generic subline. + """ + if deps is None: + return None + try: + from exlab_wizard.api.setup import compute_setup_state + from exlab_wizard.paths import setup_state_next_action + + action = setup_state_next_action(compute_setup_state(deps)) + return action.value if action is not None else None + except Exception as exc: + _log.warning("setup next-action computation failed: %s", exc) + return None + + def _build_main_query(selected: str, right_pane: str) -> str: """Compose the ``?selected=...&right_pane=...`` query string for /main. @@ -647,7 +875,6 @@ def _metadata_for_owned_equipment(node_id: str, config: Any) -> dict[str, Any]: "sync_mode": str(getattr(entry, "sync_mode", "")) or "nas", "local_root": entry.local_root or "", "nas_root": entry.nas_root or "", - "completeness_signal": getattr(entry, "completeness_signal", "") or "", } return {} @@ -803,6 +1030,8 @@ def _drive_folder_feed(app: Any, deps: Any, selected_path: str | None) -> list[A size_bytes=entry.size_bytes, modified_iso=entry.modified_iso, sync_status=entry.sync_status, + keep_local=getattr(entry, "keep_local", False), + tombstone=getattr(entry, "tombstone", False), ) ) return entries @@ -836,12 +1065,10 @@ def _run_staging_action(deps: Any, path: str, action: str, ui: Any) -> None: """Dispatch a per-run context action to its backend surface. Mirrors :func:`api.routers.staging.post_force_sync` / - :func:`api.routers.staging.post_clear` / - :func:`api.routers.browse.get_run_log` but invokes the underlying + :func:`api.routers.staging.post_clear` but invokes the underlying primitives directly from the mount so the action stays in-process (no HTTP round trip from the same Python interpreter). """ - from exlab_wizard.cache.ingest_writer import IngestWriter from exlab_wizard.ui.components.tree_context_menu import ( RUN_CONTEXT_CLEAR_VERIFIED, RUN_CONTEXT_FORCE_SYNC, @@ -871,14 +1098,10 @@ async def _do_enqueue() -> None: _spawn_background(_do_enqueue()) return if action == RUN_CONTEXT_CLEAR_VERIFIED: - ingest_writer = getattr(deps, "ingest_writer", None) or IngestWriter() - from exlab_wizard.orchestrator.cleanup import clear_run async def _do_clear() -> None: try: - files, _bytes = await clear_run( - run_path, config=config, ingest_writer=ingest_writer - ) + files, _bytes = await asyncio.to_thread(clear_run_dir, run_path) except Exception as exc: _log.exception("per-run clear failed") _show_toast(ui, f"Clear failed: {exc}", positive=False) @@ -891,29 +1114,37 @@ async def _do_clear() -> None: _spawn_background(_do_clear()) return if action == RUN_CONTEXT_VIEW_LOG: - _open_log_dialog(run_path, ui) + _open_log_dialog(deps, run_path, ui) return _show_toast(ui, f"Unknown staging action: {action}", positive=False) def _bulk_clear_verified(deps: Any, ui: Any) -> None: - """Run the orchestrator's bulk ``clear_all_verified`` helper. + """Bulk-clear every staged run whose sync job is verified. Wired from the file-explorer footer's *Clear verified runs* button. - Same in-process dispatch pattern as the per-run actions. + Same in-process dispatch pattern as the per-run actions. The + operator-free per-file NAS sync redesign (2026-05-21) keys the + "clearable" set off the sync-queue job state; Phase 5 swaps this to + the ``sync_state.json`` ``SYNCED`` rollup. """ - from exlab_wizard.cache.ingest_writer import IngestWriter - from exlab_wizard.orchestrator.cleanup import clear_all_verified - config = getattr(deps, "config", None) if deps is not None else None if config is None: _show_toast(ui, "Clear-verified unavailable: no config", positive=False) return - ingest_writer = getattr(deps, "ingest_writer", None) or IngestWriter() async def _do_bulk() -> None: try: - cleared = await clear_all_verified(config=config, ingest_writer=ingest_writer) + cleared: list[str] = [] + sync_state_writer = getattr(deps, "sync_state_writer", None) + for summary in list_staged_runs(config=config, sync_state_writer=sync_state_writer): + # Only a fully-SYNCED run is clearable; ``cleared`` runs + # have no staging copy left and ``syncing`` runs are unproven. + if summary.current_state != RunSyncState.SYNCED.value: + continue + files, _bytes = await asyncio.to_thread(clear_run_dir, Path(summary.path)) + if files > 0: + cleared.append(summary.path) except Exception as exc: _log.exception("bulk clear-verified failed") _show_toast(ui, f"Clear-verified failed: {exc}", positive=False) @@ -926,9 +1157,20 @@ async def _do_bulk() -> None: _spawn_background(_do_bulk()) -def _file_context_action(entry: Any, action: str, ui: Any) -> None: - """Handle ``Open in OS`` / ``Copy path`` from the centre-pane file row.""" - from exlab_wizard.ui.components.file_list import FILE_CONTEXT_COPY_PATH, FILE_CONTEXT_OPEN +def _file_context_action( + deps: Any, + entry: Any, + action: str, + ui: Any, + *, + on_done: Callable[[], None] | None = None, +) -> None: + """Handle ``Open in OS`` / ``Copy path`` / ``Keep local`` file actions.""" + from exlab_wizard.ui.components.file_list import ( + FILE_CONTEXT_COPY_PATH, + FILE_CONTEXT_KEEP_LOCAL, + FILE_CONTEXT_OPEN, + ) path = str(getattr(entry, "path", "")) if not path: @@ -949,9 +1191,61 @@ def _file_context_action(entry: Any, action: str, ui: Any) -> None: return _show_toast(ui, "Path copied to clipboard", positive=True) return + if action == FILE_CONTEXT_KEEP_LOCAL: + _toggle_keep_local(deps, entry, ui, on_done=on_done) + return _show_toast(ui, f"Unknown file action: {action}", positive=False) +def _toggle_keep_local( + deps: Any, + entry: Any, + ui: Any, + *, + on_done: Callable[[], None] | None = None, +) -> None: + """Flip a file's ``keep_local`` flag via the orchestrator's writer. + + Operator-free per-file NAS sync design (2026-05-21): ``sync_state.json`` + has a single writer -- the orchestrator's :class:`SyncStateWriter` -- + so the GUI never writes the file directly. The mount calls + ``set_keep_local`` in-process (matching the per-run staging actions), + which is exactly what the ``POST /staging/{run}/keep-local`` endpoint + does. The run root is resolved by walking up to the nearest + ``creation.json`` cache. + """ + from exlab_wizard.api.routers.browse import _find_run_root, _run_relative_posix + + writer = getattr(deps, "sync_state_writer", None) if deps is not None else None + if writer is None: + _show_toast(ui, "Keep-local unavailable: sync-state writer not wired", positive=False) + return + path = Path(str(getattr(entry, "path", ""))) + run_root = _find_run_root(path.parent) + if run_root is None: + _show_toast(ui, "Keep-local unavailable: file is not inside a run", positive=False) + return + rel = _run_relative_posix(run_root, path) + if rel is None: + _show_toast(ui, "Keep-local unavailable: could not resolve file path", positive=False) + return + new_value = not bool(getattr(entry, "keep_local", False)) + + async def _do_toggle() -> None: + try: + await writer.set_keep_local(run_root, rel, new_value) + except Exception as exc: + _log.exception("keep-local toggle failed") + _show_toast(ui, f"Keep-local failed: {exc}", positive=False) + return + verb = "kept local" if new_value else "no longer kept local" + _show_toast(ui, f"{path.name} {verb}", positive=True) + if on_done is not None: + on_done() + + _spawn_background(_do_toggle()) + + def _open_in_os(path: str) -> bool: """Launch the host OS's default opener for ``path``. @@ -980,46 +1274,242 @@ def _open_in_os(path: str) -> bool: return False -def _open_log_dialog(run_path: Path, ui: Any) -> None: - """Open a NiceGUI dialog showing the run's ingest.json history.""" - import msgspec +def _build_operation_rows(deps: Any) -> list[Any]: + """Build the Operations-panel rows from the live session store (T3). - from exlab_wizard.api.schemas import IngestJson - from exlab_wizard.io import read_msgspec_json - from exlab_wizard.paths import ingest_json_path + Uses the shared Β§9.5 membership rule (:func:`_panel_sessions`): terminal + ``DONE`` / ``ABORTED`` sessions fall off; ``FAILED`` stays so a recent + failure is visible. + """ + from exlab_wizard.ui.components.operations_modal import OperationRow + + return [OperationRow.from_session(sid, session) for sid, session in _panel_sessions(deps)] + + +def _open_operations_modal(deps: Any, ui: Any) -> None: + """Open the in-flight Operations panel (Frontend Β§9.5). - ingest_path = ingest_json_path(run_path) - if not ingest_path.exists(): - _show_toast(ui, "No log: ingest.json not found", positive=False) + Builds a fresh snapshot on each open (true auto-refresh is the wizard's + live stream, T2). Row actions dispatch to resume / cancel / details. + """ + from exlab_wizard.ui.components.operations_modal import operations_modal + + controller = getattr(deps, "controller", None) if deps is not None else None + if controller is None: + _show_toast(ui, "Operations unavailable: controller not initialized", positive=False) return - try: - payload = read_msgspec_json(ingest_path, IngestJson) - except (msgspec.DecodeError, msgspec.ValidationError) as exc: - _show_toast(ui, f"Log unreadable: {exc}", positive=False) + rows = _build_operation_rows(deps) + dialog = operations_modal( + rows, + on_resume=lambda oid: _resume_operation(deps, oid, ui), + on_cancel=lambda oid: _cancel_operation(deps, oid, ui), + on_view_log=lambda oid: _open_operation_details(deps, oid, ui), + ) + opener = getattr(dialog, "open", None) + if callable(opener): + opener() + + +def _open_operation_details(deps: Any, session_id: str, ui: Any) -> None: + """Show a lightweight details/"log" dialog for one in-flight operation. + + The Β§9.5 "View log" action: surfaces the session's current state plus + any suspend reason or error. (The NAS-sync run log is a separate, + post-creation concern handled by :func:`_open_log_dialog`.) + """ + controller = getattr(deps, "controller", None) if deps is not None else None + store = getattr(controller, "session_store", None) if controller is not None else None + session = store.get(session_id) if store is not None else None + if session is None: + _show_toast(ui, "Operation not found", positive=False) return - try: - dialog = ui.dialog() - with ( - dialog, - ui.card() - .props('data-testid="run-log-dialog"') - .style("min-width: 480px; max-width: 720px;"), - ): - ui.label(f"Log: {run_path.name}").style("font-weight: 600;") - ui.label(f"State: {payload.current_state}").style("color: var(--color-muted);") - with ui.scroll_area().style("max-height: 360px;"): - for entry in payload.history: - state_val = entry.get("state", "?") if isinstance(entry, dict) else "?" - at_val = entry.get("at", "") if isinstance(entry, dict) else "" - host_val = entry.get("host", "") if isinstance(entry, dict) else "" - ui.label(f"[{at_val}] {state_val} (host={host_val})").style( + state_val = getattr(session.state, "value", str(session.state)) + dialog = ui.dialog() + with ( + dialog, + ui.card().props('data-testid="operation-log-dialog"').style("min-width: 480px;"), + ): + ui.label(f"Operation {session_id}").style("font-weight: 600;") + ui.label(f"State: {state_val}").style("color: var(--color-muted);") + pending = getattr(session, "pending_input", None) + if pending: + ui.label(f"Awaiting input: {pending.get('reason', '')}").style( + "font-family: var(--font-mono); font-size: 0.85em;" + ) + error = getattr(session, "error", None) + if error: + ui.label(f"Error: {error.get('message', error.get('code', ''))}").style( + "color: var(--color-danger); font-family: var(--font-mono); font-size: 0.85em;" + ) + dialog.open() + + +def _resume_operation(deps: Any, session_id: str, ui: Any) -> None: + """Resume a suspended session by re-opening its Β§9.1 input dialog (T5). + + Reads the parked ``pending_input`` (plugin / reason / fields) off the + session and re-presents the escalation dialog; Submit resumes the + pipeline with the answers. + """ + controller = getattr(deps, "controller", None) if deps is not None else None + store = getattr(controller, "session_store", None) if controller is not None else None + session = store.get(session_id) if store is not None else None + pending = getattr(session, "pending_input", None) if session is not None else None + if controller is None or not pending: + _show_toast(ui, "Nothing to resume: the operation is not awaiting input", positive=False) + return + _open_input_required_dialog( + controller, + session_id, + ui, + plugin=pending.get("plugin", ""), + reason=pending.get("reason", ""), + fields=pending.get("fields") or [], + ) + + +def _open_input_required_dialog( + controller: Any, + session_id: str, + ui: Any, + *, + plugin: str, + reason: str, + fields: list[Any], +) -> Any: + """Open the Β§9.1 escalation dialog; Submit resumes, Cancel confirms (T5). + + Submit calls ``controller.resume(session_id, values)`` -- the suspended + pipeline wakes with the answers. ``resume`` raises on an unknown session + or a stale (non-``INPUT_REQUIRED``) state; a plugin re-rejecting the + values simply re-emits ``input_required`` (the consumer re-opens this + dialog). Both are surfaced to the operator. Cancel routes through the + Β§9.4 cancel dialog. + Returns the dialog so the caller can force-close it on a terminal frame. + """ + from exlab_wizard.ui.components.input_required_dialog import input_required_dialog + + def _on_submit(values: dict[str, Any]) -> None: + async def _run() -> None: + try: + await controller.resume(session_id, values) + except Exception as exc: + _show_toast(ui, f"Could not submit input: {exc}", positive=False) + + _spawn_background(_run()) + + def _on_cancel() -> None: + _cancel_session(controller, session_id, ui) + + dialog = input_required_dialog( + plugin=plugin, + reason=reason, + fields=fields, + on_submit=_on_submit, + on_cancel=_on_cancel, + ) + opener = getattr(dialog, "open", None) + if callable(opener): + opener() + return dialog + + +def _cancel_operation(deps: Any, session_id: str, ui: Any) -> None: + """Resolve the controller off ``deps`` and open the Β§9.4 cancel dialog.""" + controller = getattr(deps, "controller", None) if deps is not None else None + if controller is None: + _show_toast(ui, "Cancel unavailable: controller not initialized", positive=False) + return + _cancel_session(controller, session_id, ui) + + +def _cancel_session(controller: Any, session_id: str, ui: Any) -> None: + """Cancel an in-flight session via the Β§9.4 Discard / Keep dialog (T4). + + The operator chooses whether to discard the partially-created files + (``discard_files=True`` -> ``shutil.rmtree`` of the partial dir) or + keep them in place as an orphan. ``controller.cancel`` is a no-op on an + already-terminal session; any error is surfaced as a toast. + """ + dialog = ui.dialog() + + def _choose(discard_files: bool) -> None: + dialog.close() + + async def _run() -> None: + try: + await controller.cancel(session_id, discard_files=discard_files) + _show_toast(ui, "Operation cancelled", positive=True) + except Exception as exc: + _show_toast(ui, f"Cancel failed: {exc}", positive=False) + + _spawn_background(_run()) + + with ( + dialog, + ui.card().props('data-testid="cancel-confirm-dialog"').style("min-width: 420px;"), + ): + ui.label("Cancel this operation?").style("font-weight: 600;") + ui.label("Discard the partially-created files, or keep them in place as an orphan?").style( + "color: var(--color-muted);" + ) + with ui.row().classes("justify-end w-full").style("gap: 0.5rem;"): + ui.button("Back", on_click=lambda _e: dialog.close()).props("flat") + ui.button("Keep files", on_click=lambda _e: _choose(False)).props( + 'flat data-testid="cancel-keep"' + ) + ui.button("Discard files", on_click=lambda _e: _choose(True)).props( + 'flat color=negative data-testid="cancel-discard"' + ) + dialog.open() + + +def _open_log_dialog(deps: Any, run_path: Path, ui: Any) -> None: + """Open a NiceGUI dialog showing the run's sync-queue job state. + + The operator-free per-file NAS sync redesign (2026-05-21) removed + ``ingest.json``; the per-run "log" is now the run's sync-queue job + state. Phase 5/6 source this from the ``sync_state.json`` rollup. + """ + + async def _do_open() -> None: + nas_sync = getattr(deps, "nas_sync", None) if deps is not None else None + getter = getattr(nas_sync, "get_by_run_path", None) if nas_sync is not None else None + row = None + if getter is not None: + try: + row = await getter(run_path) + except Exception as exc: # pragma: no cover -- defensive + _log.warning("sync-queue lookup failed for %s: %s", run_path, exc) + state = getattr(getattr(row, "state", None), "value", None) or "none" + try: + dialog = ui.dialog() + with ( + dialog, + ui.card() + .props('data-testid="run-log-dialog"') + .style("min-width: 480px; max-width: 720px;"), + ): + ui.label(f"Log: {run_path.name}").style("font-weight: 600;") + ui.label(f"Sync state: {state}").style("color: var(--color-muted);") + if row is None: + ui.label("No sync job recorded for this run yet.").style( "font-family: var(--font-mono); font-size: 0.85em;" ) - ui.button("Close", on_click=dialog.close).props("flat") - dialog.open() - except Exception as exc: - _log.warning("log dialog render failed: %s", exc) - _show_toast(ui, "Log dialog unavailable", positive=False) + else: + for field in ("enqueued_at", "verified_at", "attempts", "last_error"): + value = getattr(row, field, None) + if value: + ui.label(f"{field}: {value}").style( + "font-family: var(--font-mono); font-size: 0.85em;" + ) + ui.button("Close", on_click=dialog.close).props("flat") + dialog.open() + except Exception as exc: + _log.warning("log dialog render failed: %s", exc) + _show_toast(ui, "Log dialog unavailable", positive=False) + + _spawn_background(_do_open()) def _missing_setup_sections(deps: Any) -> tuple[str, ...]: @@ -1029,6 +1519,8 @@ def _missing_setup_sections(deps: Any) -> tuple[str, ...]: other than READY surfaces at least one section. The Settings page uses this to auto-select the first incomplete section. """ + from exlab_wizard.api._dependencies import lims_password_present + if deps is None: return ("paths", "lims") config = getattr(deps, "config", None) @@ -1040,9 +1532,15 @@ def _missing_setup_sections(deps: Any) -> tuple[str, ...]: missing: list[str] = [] if not config.paths.local_root or not config.paths.templates_dir: missing.append("paths") + # rclone.conf NAS-sync migration: surface the NAS-remote section when + # nas-mode equipment exist but the configured ``nas.remote`` is absent + # from rclone.conf, so the setup-incomplete banner auto-selects it. + # This mirrors the Β§4.9 setup gate (``INCOMPLETE_NO_NAS_REMOTE``). + if _nas_remote_missing(deps, config): + missing.append("nas_remote") if not config.lims.endpoint or not config.lims.email: missing.append("lims") - if not getattr(deps, "keyring_password_present", False) and "lims" not in missing: + if not lims_password_present(deps) and "lims" not in missing: missing.append("lims") return tuple(missing) @@ -1122,6 +1620,9 @@ def _lims_catalogue_projects(deps: Any) -> list[dict[str, Any]]: from exlab_wizard.lims.catalogue import read_catalogue catalogue = read_catalogue(Path(catalogue_path), expected_endpoint=config.lims.endpoint) + if catalogue is None: + # schema_version mismatch -> treated as absent (Β§7.2.9.3). + return [] return [ { "short_id": project.short_id, @@ -1191,6 +1692,59 @@ async def _await_session(controller: Any, handle: Any) -> Any: return await controller.status(handle.session_id) +async def _consume_session_progress( + controller: Any, session_id: str, wizard_state: Any, ui: Any +) -> None: + """Fold the controller's WS frames into the wizard's live phase bar (T2) + and surface a plugin ``INPUT_REQUIRED`` escalation dialog (T5). + + Runs inside the wizard's submit coroutine (already bound to the page's + client context), so re-rendering the ``@ui.refreshable`` progress view + and opening dialogs are safe. Subscribing right after ``create_*`` + returns is race-free: ``_launch`` creates the session's event queue + before the pipeline starts, so buffered early phases replay in order. + On an ``input_required`` frame the Β§9.1 dialog opens; the loop keeps + awaiting frames (the pipeline only resumes once the operator submits). + A terminal ``done`` / ``failed`` frame force-closes any open dialog + (e.g. the plugin timed out while suspended) and ends the loop. + """ + from exlab_wizard.ui.components import session_progress + + progress = getattr(wizard_state, "progress", None) + refresh = getattr(wizard_state, "progress_refresh", None) + if progress is None: + return + open_dialog: Any = None + try: + async for frame in controller.subscribe(session_id): + kind = frame.get("kind") + if session_progress.apply_frame(progress, frame) and refresh is not None: + with contextlib.suppress(Exception): + refresh() + if kind == "input_required": + open_dialog = _open_input_required_dialog( + controller, + session_id, + ui, + plugin=frame.get("plugin", ""), + reason=frame.get("reason", ""), + fields=frame.get("fields") or [], + ) + if kind in ("done", "failed"): + _close_dialog(open_dialog) + break + except Exception: + _log.exception("progress consumer failed for session %s", session_id) + + +def _close_dialog(dialog: Any) -> None: + """Best-effort close of a NiceGUI dialog (no-op when ``None`` / test mode).""" + closer = getattr(dialog, "close", None) + if callable(closer): + with contextlib.suppress(Exception): + closer() + + async def _submit_project(deps: Any, state: Any, ui: Any) -> None: """Build a ProjectCreateRequest from the wizard state and run it.""" controller = getattr(deps, "controller", None) if deps is not None else None @@ -1219,7 +1773,9 @@ async def _submit_project(deps: Any, state: Any, ui: Any) -> None: operator=readme.get("operator", ""), objective=readme.get("objective", ""), ) - await _run_creation(controller, controller.create_project, request, ui, label="Project") + await _run_creation( + controller, controller.create_project, request, ui, label="Project", wizard_state=state + ) async def _submit_run(deps: Any, state: Any, run_kind: RunKind, ui: Any) -> None: @@ -1250,7 +1806,9 @@ async def _submit_run(deps: Any, state: Any, run_kind: RunKind, ui: Any) -> None objective=readme.get("objective", ""), ) kind_label = "Test run" if run_kind is RunKind.TEST else "Run" - await _run_creation(controller, controller.create_run, request, ui, label=kind_label) + await _run_creation( + controller, controller.create_run, request, ui, label=kind_label, wizard_state=state + ) async def _run_creation( @@ -1260,12 +1818,20 @@ async def _run_creation( ui: Any, *, label: str, + wizard_state: Any = None, ) -> None: - """Drive a create_* call to completion and toast the outcome.""" + """Drive a create_* call to completion and toast the outcome. + + When ``wizard_state`` is supplied, the controller's phase stream is + consumed live so the Confirm & Create step's progress bar advances as + the pipeline runs (T2); otherwise the call just awaits the final state. + """ from exlab_wizard.controller import SessionState try: handle = await create_fn(request) + if wizard_state is not None: + await _consume_session_progress(controller, handle.session_id, wizard_state, ui) final = await _await_session(controller, handle) except Exception as exc: _log.exception("%s creation raised", label) @@ -1317,9 +1883,10 @@ def _build_staging_state(deps: Any) -> Any: # Redesign Β§3.1: orchestrator pipeline is always active; missing # staging_root surfaces as an empty staging dock, not a None panel. try: - from exlab_wizard.orchestrator.staging_query import list_staged_runs - - rows = list_staged_runs(config=config) + rows = list_staged_runs( + config=config, + sync_state_writer=getattr(deps, "sync_state_writer", None), + ) except Exception as exc: _log.warning("staging_query failed: %s", exc) return staging_page.StagingDockState(rows=[]) diff --git a/src/exlab_wizard/ui/pages/main.py b/src/exlab_wizard/ui/pages/main.py index dc6427b..0f43e3f 100644 --- a/src/exlab_wizard/ui/pages/main.py +++ b/src/exlab_wizard/ui/pages/main.py @@ -39,6 +39,9 @@ class MainPageState: """ setup_incomplete: bool = False + # Β§4.9.3 next-action discriminator, used to tailor the setup-incomplete + # banner subline (rclone-only NAS migration, 2026-05-26). + setup_next_action: str | None = None selected_node: str | None = None chip_state: filter_chips.ChipState = field( default_factory=lambda: filter_chips.initial_state(_default_chips()) @@ -46,6 +49,14 @@ class MainPageState: active_tab: str = "details" # "details" | "problems" problems_count_hard: int = 0 problems_count_soft: int = 0 + # In-flight controller operations (Frontend Β§9.5). ``operations_count`` + # gates the toolbar [Operations…] button; ``operations_input_required`` + # drives the footer Sync segment's "N need input" warning. + operations_count: int = 0 + operations_input_required: int = 0 + # Β§9.6 single-equipment concurrency: the three creation buttons are + # disabled while any session is mid-flight (non-terminal). + creation_in_flight: bool = False # Legacy field β€” the orchestrator pipeline is always active under # Redesign Β§3.1, so this always renders True in production. orchestrator_enabled: bool = True @@ -94,12 +105,28 @@ def problems_badge_text(state: MainPageState) -> str: return f"{state.problems_count_hard} + {state.problems_count_soft}" -def setup_incomplete_banner_props() -> dict[str, str]: - """Banner content for the setup-incomplete state (Β§3.1.4).""" +def setup_incomplete_banner_props(next_action: str | None = None) -> dict[str, str]: + """Banner content for the setup-incomplete state (Β§3.1.4). + ``next_action`` is the Β§4.9.3 next-action discriminator (e.g. + ``configure_rclone_remote``). When supplied it tailors the subline so + the operator knows exactly which section to open; the rclone-only + NAS migration (2026-05-26) added the rclone-remote variant. + """ + + sublines = { + "configure_rclone_remote": ("Configure the rclone remote (see setup docs) to begin."), + "configure_lims": "Open Settings β†’ LIMS to finish configuring LIMS.", + "test_lims": "Open Settings β†’ LIMS to finish configuring LIMS.", + "set_paths": "Open Settings and complete the highlighted sections to begin.", + "add_equipment": "Add an equipment in Settings to begin.", + } return { "headline": "Setup incomplete: required configuration is missing.", - "subline": "Open Settings and complete the highlighted sections to begin.", + "subline": sublines.get( + next_action or "", + "Open Settings and complete the highlighted sections to begin.", + ), "cta_label": "Open Settings", "color_var": "--color-warning", } @@ -114,6 +141,7 @@ def render_file_explorer_page( on_open_settings: Callable[[], None], on_refresh: Callable[[], None], on_select_node: Callable[[str], None], + on_open_operations: Callable[[], None] | None = None, on_navigate_breadcrumb: Callable[[str], None] | None = None, on_toggle_right_pane: Callable[[], None] | None = None, on_run_staging_action: Callable[[str, str], None] | None = None, @@ -176,12 +204,25 @@ def render_file_explorer_page( ntr_btn = ui.button("New Test Run", on_click=lambda _evt: on_open_new_test_run()).props( 'color=warning data-testid="toolbar-new-test-run"' ) - if s.selected_node_is_received: + # Creation is disabled on received-equipment nodes (decision 1) and + # while any session is mid-flight (single-equipment concurrency, Β§9.6). + if s.selected_node_is_received or s.creation_in_flight: for btn in (np_btn, nr_btn, ntr_btn): btn.props("disable") + if s.creation_in_flight and not s.selected_node_is_received: + np_btn.tooltip("A creation is already in progress") ui.button("Add Equipment", on_click=lambda _evt: on_open_add_equipment()).props( 'color=primary data-testid="toolbar-add-equipment"' ) + # [Operations…] surfaces only while β‰₯1 operation is in flight + # (Frontend Β§9.5). Label carries the count; a warning color flags + # any suspended (INPUT_REQUIRED) session needing an answer. + if on_open_operations is not None and s.operations_count > 0: + ops_color = "warning" if s.operations_input_required > 0 else "primary" + ui.button( + f"Operations ({s.operations_count})", + on_click=lambda _evt: on_open_operations(), + ).props(f'flat color={ops_color} data-testid="toolbar-operations"') ui.button("Refresh", on_click=lambda _evt: on_refresh()).props( 'flat data-testid="toolbar-refresh"' ) @@ -199,7 +240,7 @@ def render_file_explorer_page( notifications.BannerId.SETUP_INCOMPLETE, container=notifications.ContainerId.GLOBAL, severity=notifications.Severity.WARNING, - message=setup_incomplete_banner_props()["subline"], + message=setup_incomplete_banner_props(s.setup_next_action)["subline"], action=notifications.ActionSpec( label="Open Settings", on_click=on_open_settings, @@ -233,36 +274,103 @@ def _route_run_context(node_id: str, action: str) -> None: ), expand_all=tree_expand_all, ) - with outer_split.after: - if s.right_pane_collapsed: - # File list only. + # Flex row: the centre file list grows to fill, a tall vertical + # toggle tab sits on the metadata pane's left edge, then the + # metadata pane itself. The tab lives *between* the two panes, so + # it travels horizontally with the pane -- open, it hugs the pane's + # left border; collapsed (pane unrendered) the growing file list + # pushes it to the right screen edge. + # + # The tab is TOP-aligned (align-self:flex-start), not centred. The + # splitter panel's top is identical in both states, but its height + # differs (the metadata pane adds height when open), so a centred + # tab landed at a different Y per state -- that vertical shift was + # the up/down "jump". Pinning to the top ties the tab's Y to the + # constant panel top, so it holds its line on toggle. + with ( + outer_split.after, + ui.element("div") + .classes("w-full h-full") + .style("display: flex; flex-direction: row; flex-wrap: nowrap; align-items: stretch;"), + ): + with ui.element("div").style( + "flex: 1 1 auto; min-width: 0; height: 100%; overflow: auto;" + ): _render_centre_file_list( s, file_list_entries=file_list_entries, on_file_context_action=on_file_context_action, ) - else: - with ui.splitter(value=60).classes("w-full h-full") as centre_split: - with centre_split.before: - _render_centre_file_list( - s, - file_list_entries=file_list_entries, - on_file_context_action=on_file_context_action, - ) - with centre_split.after: - _render_right_pane( - s, - metadata_payload=metadata_payload, - on_run_staging_action=on_run_staging_action, - ) - # Right-pane toggle button is rendered after the splitter so - # it remains accessible whether the right pane is open or - # collapsed. Its callback is wired by the mount layer. + # Vertical collapse/expand tab: a chevron stacked above a rotated + # text label, inside one tall box with a raised-surface background + # so it reads as a distinct tab. The glyph points the way the pane + # will move -- right-chevron collapses it away, left-chevron pulls + # it back; the label names the action. Callback wired by the mount + # layer. if on_toggle_right_pane is not None: - ui.button( - "Toggle right pane", - on_click=lambda _evt: on_toggle_right_pane(), - ).props('flat data-testid="toggle-right-pane"') + collapsed = s.right_pane_collapsed + chevron = "β—€" if collapsed else "β–Ά" + tab_label = "Expand metadata" if collapsed else "Collapse metadata" + # The button stays `flat` (Quasar forces its own background to + # transparent !important on flat buttons, so the tab fill must + # live on an inner element, not the button). The button is just + # the sized, padding-free click target; the inner column paints + # the raised-surface tab. + # + # Every theme var carries a literal fallback: register_theme() + # is not injected on every route, so a bare var(--color-surface) + # resolves to empty and the whole declaration is dropped (no + # fill). The fallbacks make the tab render regardless. + toggle = ( + ui.button(on_click=lambda _evt: on_toggle_right_pane()) + .props( + 'flat dense no-caps data-testid="toggle-right-pane" ' + 'aria-label="Toggle metadata pane" title="Toggle metadata pane"' + ) + .style( + "align-self: flex-start; flex: 0 0 auto; margin: 8px 2px 0 2px; " + "min-width: 0; width: 40px; height: 190px; padding: 0; " + "color: var(--color-muted, #8892a4);" + ) + ) + with ( + toggle, + ui.column().style( + "align-items: center; gap: 6px; flex-wrap: nowrap; " + "height: 100%; width: 100%; padding: 8px 2px; " + # Surface fill + border + soft shadow so the chevron and + # label read as a distinct raised tab against the page. + "background: var(--color-surface, #ffffff); " + "border: 1px solid var(--color-border, #dde3ed); border-radius: 6px; " + "box-shadow: 0 1px 3px rgba(0, 54, 96, 0.12);" + ), + ): + ui.label(chevron).style( + "flex: 0 0 auto; font-size: 12px; line-height: 1; " + "color: var(--color-muted, #8892a4);" + ) + # The label is rotated 270deg (reads bottom-to-top). A + # transform keeps the element's layout box horizontal, so + # this flex-grow wrapper supplies the vertical room and + # centres the rotated text within it. + with ui.element("div").style( + "flex: 1 1 auto; width: 100%; display: flex; " + "align-items: center; justify-content: center; overflow: hidden;" + ): + ui.label(tab_label).style( + "transform: rotate(270deg); white-space: nowrap; " + "font-size: 11px; letter-spacing: 0.05em; text-transform: none; " + "color: var(--color-muted, #8892a4);" + ) + if not s.right_pane_collapsed: + with ui.element("div").style( + "flex: 0 0 40%; min-width: 0; height: 100%; overflow: auto;" + ): + _render_right_pane( + s, + metadata_payload=metadata_payload, + on_run_staging_action=on_run_staging_action, + ) if not s.setup_incomplete: with ( @@ -273,10 +381,23 @@ def _route_run_context(node_id: str, action: str) -> None: ), ui.row().classes("items-center w-full"), ): - status_bar_segment.status_bar_segment( - label="Sync", - state=status_bar_segment.SEGMENT_NORMAL, - ) + # Sync segment doubles as the Operations entry point: when any + # session is suspended awaiting input it flips to a warning + # "N operations need input" and opens the same modal (Β§3.5.5). + if s.operations_input_required > 0: + status_bar_segment.status_bar_segment( + label=f"{s.operations_input_required} operations need input", + state=status_bar_segment.SEGMENT_WARNING, + on_click=on_open_operations, + ) + else: + # Only clickable when there is something to show, so a click + # never opens an empty Operations panel. + status_bar_segment.status_bar_segment( + label="Sync", + state=status_bar_segment.SEGMENT_NORMAL, + on_click=on_open_operations if s.operations_count > 0 else None, + ) status_bar_segment.status_bar_segment( label="Validator", state=status_bar_segment.SEGMENT_NORMAL, @@ -363,8 +484,10 @@ def _render_right_pane( on_run_staging_action=on_run_staging_action, ) with ui.tab_panel("problems"): + total = state.problems_count_hard + state.problems_count_soft ui.label( - f"Showing 0 of {state.problems_count_hard + state.problems_count_soft} findings", + f"{total} findings ({state.problems_count_hard} hard, " + f"{state.problems_count_soft} soft)", ).props('data-testid="problems-summary"').style( "font-family: var(--font-mono); color: var(--color-muted);" ) diff --git a/src/exlab_wizard/ui/pages/problems.py b/src/exlab_wizard/ui/pages/problems.py index 3463f37..d157945 100644 --- a/src/exlab_wizard/ui/pages/problems.py +++ b/src/exlab_wizard/ui/pages/problems.py @@ -169,8 +169,16 @@ def render_problems_page( state: ProblemsPageState | None = None, on_override: Callable[[str], None] | None = None, on_revoke_override: Callable[[str], None] | None = None, + last_audit_at: str | None = None, + refresh_interval_seconds: int = 30, ) -> Any: - """Render the Problems tab content.""" + """Render the Problems tab content. + + ``last_audit_at`` is the ISO timestamp of the most recent background + audit pass (``deps.last_audit_at``); the footer shows it as ``HH:MM:SS`` + plus a live "Next refresh in Ns" countdown over ``refresh_interval_seconds`` + (T6 / Β§B5). + """ s = state or ProblemsPageState() visible = filter_findings(findings, s) @@ -276,12 +284,47 @@ def render_problems_page( on_click=lambda _evt, fid=finding.finding_id: on_revoke_override(fid), ).props(f'flat data-testid="problems-row-{idx}-revoke"') - ui.label( - f"Showing {len(visible)} of {len(findings)} findings Β· Last audit: --", - ).style( - "font-family: var(--font-mono); " - "font-size: var(--text-xs); " - "color: var(--color-muted); " - "padding: 0.5rem 0;" + from exlab_wizard.utils.time import parse_utc_iso, utc_now + + def _audit_time_text() -> str: + if not last_audit_at: + return "--" + try: + return parse_utc_iso(last_audit_at).strftime("%H:%M:%S") + except Exception: + return last_audit_at + + def _remaining_seconds() -> int: + if not last_audit_at: + return refresh_interval_seconds + try: + elapsed = (utc_now() - parse_utc_iso(last_audit_at)).total_seconds() + except Exception: + return refresh_interval_seconds + # Clamp at 0 once the interval has elapsed (an overdue / in-progress + # pass) rather than re-cycling, which would misreport the wait. + return max(0, int(refresh_interval_seconds - elapsed)) + + footer = ( + ui.label("") + .props('data-testid="problems-footer"') + .style( + "font-family: var(--font-mono); " + "font-size: var(--text-xs); " + "color: var(--color-muted); " + "padding: 0.5rem 0;" + ) ) + + def _render_footer() -> None: + footer.text = ( + f"Showing {len(visible)} of {len(findings)} findings Β· " + f"Last audit: {_audit_time_text()} Β· " + f"Next refresh in {_remaining_seconds()}s" + ) + + _render_footer() + # Tick the countdown once a second; the background audit refreshes + # ``last_audit_at`` itself on its own 30 s cadence (Β§4.6.2). + ui.timer(1.0, _render_footer) return container diff --git a/src/exlab_wizard/ui/pages/settings.py b/src/exlab_wizard/ui/pages/settings.py index d25f14e..1e1b3a7 100644 --- a/src/exlab_wizard/ui/pages/settings.py +++ b/src/exlab_wizard/ui/pages/settings.py @@ -1,7 +1,6 @@ """Settings dialog (Frontend Spec Β§7). -Two-pane modal with a left vertical-nav and a right content area. Eight -sections (``operators`` is deferred pending the chip editor); +Two-pane modal with a left vertical-nav and a right content area; setup-incomplete mode auto-selects the first incomplete one. """ @@ -14,8 +13,8 @@ from pydantic import ValidationError from exlab_wizard.config.models import Config -from exlab_wizard.constants import CompletenessSignal from exlab_wizard.logging import get_logger +from exlab_wizard.paths import suggested_staging_root from exlab_wizard.ui import notifications from exlab_wizard.ui.components import credential_field, test_connection_panel @@ -27,20 +26,32 @@ "lims", "equipment", "nas_cleanup", - # "operators" is deferred -- backend OperatorsConfig + the - # controller/creation.py allowlist gate stay wired and are no-ops while - # the allowlist defaults to []. The chip editor lands in a future update. + # "operators" backs OperatorsConfig.allowlist (Frontend Β§7.9). It is a + # chip editor and is non-gating: the allowlist defaults to [] (any + # operator allowed) and it is never added to ``_missing_setup_sections``. + "operators", "validator", "logging", "orchestrator", "application", ) +# rclone.conf NAS-sync migration. The NAS-remote section is *not* part +# of the canonical onboarding-order constant (``SETTINGS_SECTIONS`` stays +# at the original eight); it is inserted dynamically after ``equipment`` +# by :func:`settings_sections_for` only when nas-mode equipment exists. +# It shows the single ``nas:`` remote (read-only) plus a Test-connection +# control -- the operator configures the remote with ``rclone config``, +# not by typing a password here. +NAS_REMOTE_SECTION = "nas_remote" + SECTION_TITLES: dict[str, str] = { "paths": "Paths", "lims": "LIMS", "equipment": "Equipment List", + NAS_REMOTE_SECTION: "NAS Remote", "nas_cleanup": "NAS Cleanup", + "operators": "Operators", "validator": "Validator", "logging": "Logging", "orchestrator": "Orchestrator Mode", @@ -48,6 +59,39 @@ } +def _nas_mode_equipment(config: Config | None) -> list[Any]: + """Return the nas-mode equipment for ``config``. + + Drives the NAS-remote section's visibility: the section appears + whenever this device has at least one device syncing directly to the + NAS, so the operator can confirm the configured ``nas:`` remote is + reachable. + """ + if config is None: + return [] + from exlab_wizard.constants import SyncMode + + return [eq for eq in config.equipment if eq.sync_mode == SyncMode.NAS] + + +def settings_sections_for(config: Config | None) -> tuple[str, ...]: + """Return the visible section ids for ``config``. + + The NAS-remote section is inserted right after ``equipment`` only + when at least one nas-mode equipment exists; otherwise the canonical + :data:`SETTINGS_SECTIONS` order is returned unchanged (so a stage-only + / no-equipment install never sees an empty NAS-remote pane). + """ + if not _nas_mode_equipment(config): + return SETTINGS_SECTIONS + out: list[str] = [] + for section in SETTINGS_SECTIONS: + out.append(section) + if section == "equipment": + out.append(NAS_REMOTE_SECTION) + return tuple(out) + + @dataclass class SettingsState: """Mutable state for the dialog.""" @@ -59,9 +103,20 @@ class SettingsState: def first_incomplete_section(incomplete: tuple[str, ...]) -> str | None: - """Return the first section ID in canonical order that's incomplete.""" + """Return the first section ID in canonical order that's incomplete. + The dynamic NAS-remote section is not part of the static + :data:`SETTINGS_SECTIONS` tuple, so it is folded into the canonical + order here (right after ``equipment``) -- otherwise an + ``INCOMPLETE_NO_NAS_REMOTE`` install would auto-select nothing + and land the operator on the default section (rclone.conf migration). + """ + order: list[str] = [] for section in SETTINGS_SECTIONS: + order.append(section) + if section == "equipment": + order.append(NAS_REMOTE_SECTION) + for section in order: if section in incomplete: return section return None @@ -141,6 +196,12 @@ def render_settings_page( on_save_lims_password: Callable[[str], None] | None = None, on_clear_lims_password: Callable[[], None] | None = None, lims_password_present: bool = False, + nas_remote_available: Callable[[str], bool] | None = None, + on_test_connection: Callable[[], Any] | None = None, + autostart_registered: bool = False, + on_set_autostart: Callable[[bool], bool | None] | None = None, + on_quit: Callable[[], None] | None = None, + tray_available: bool = False, ) -> Any: """Render the settings dialog. @@ -160,6 +221,15 @@ def render_settings_page( click time, so the host wires them to a :class:`KeyringStore` rather than to the draft. ``lims_password_present`` seeds the credential row's resting state from whether the keyring already holds one. + + The NAS-remote section (rclone.conf migration) is read-only: the + operator no longer types a NAS password. ``nas_remote_available(name)`` + answers whether the configured ``nas.remote`` is present in the + operator's ``rclone.conf`` (driving a found / not-found badge), and + ``on_test_connection()`` runs the rclone remote probe, returning a + :class:`TestConnectionResult` (or an awaitable of one) for the inline + panel. Both are optional so unit tests can render the section without + a wired rclone driver. """ s = state or SettingsState() @@ -181,10 +251,15 @@ def render_settings_page( # the re-validated result. draft = build_settings_draft(config) + # Section visibility is draft-derived: the NAS-credentials section + # appears only when password-requiring nas-mode equipment exists. + sections = settings_sections_for(draft) + payload = { "active": s.active_section, "save_label": save_button_label(s), - "warnings": [section for section in SETTINGS_SECTIONS if section_has_warning(s, section)], + "sections": list(sections), + "warnings": [section for section in sections if section_has_warning(s, section)], "config": draft.model_dump(mode="python"), } @@ -228,7 +303,7 @@ def _select_section(section: str) -> None: with ui.splitter(value=22).classes("w-full") as split: with split.before, ui.column().classes("w-full").style("gap: 0.25rem;"): - for section in SETTINGS_SECTIONS: + for section in sections: nav_row = ( ui.row() .classes("items-center w-full") @@ -256,7 +331,7 @@ def _select_section(section: str) -> None: if section_has_warning(s, section): ui.icon("warning").style("color: var(--color-warning);") with split.after: - for section in SETTINGS_SECTIONS: + for section in sections: body = ui.column().classes("w-full") body.visible = section == s.active_section with body: @@ -266,6 +341,12 @@ def _select_section(section: str) -> None: on_save_lims_password=on_save_lims_password, on_clear_lims_password=on_clear_lims_password, lims_password_present=lims_password_present, + nas_remote_available=nas_remote_available, + on_test_connection=on_test_connection, + autostart_registered=autostart_registered, + on_set_autostart=on_set_autostart, + on_quit=on_quit, + tray_available=tray_available, ) section_bodies[section] = body @@ -301,6 +382,91 @@ def _do_save(_evt: Any = None) -> None: return card +def _render_chip_editor( + values: list[str], + *, + add_label: str, + testid: str, + validate: Callable[[str], str | None] | None = None, + on_reset: Callable[[], None] | None = None, + reset_label: str = "Reset to defaults", + empty_text: str = "(none)", +) -> None: + """Reusable chip / list editor bound to a draft string list (T7 / T10). + + Mutates ``values`` in place -- ``[+ Add]`` appends (rejecting blanks, + duplicates, and ``validate`` failures), each chip carries a delete, and + an optional ``[Reset]`` replaces the contents -- so persistence rides + the existing draft -> ``finalize_settings_draft`` -> Save path with no + new plumbing. Entries are stored verbatim (case-sensitive, no + lowercasing); whitespace is trimmed on add. + """ + from nicegui import ui + + chips = ui.row().classes("items-center w-full").style("gap: 0.35rem; flex-wrap: wrap;") + + def _render_chips() -> None: + chips.clear() + with chips: + if not values: + ui.label(empty_text).props(f'data-testid="{testid}-empty"').style( + "color: var(--color-muted);" + ) + for idx, value in enumerate(values): + with ( + ui.row() + .classes("items-center") + .props(f'data-testid="{testid}-chip"') + .style( + "gap: 0.15rem; background: var(--color-rule); " + "border-radius: var(--radius-sm); padding: 0.05rem 0.1rem 0.05rem 0.5rem;" + ) + ): + ui.label(value).style( + "font-family: var(--font-mono); font-size: var(--text-xs);" + ) + ui.button(icon="close", on_click=lambda _e, i=idx: _remove(i)).props( + "flat dense round size=sm" + ) + + def _remove(idx: int) -> None: + if 0 <= idx < len(values): + del values[idx] + _render_chips() + + _render_chips() + + new_input = ui.input(label=add_label).props(f'data-testid="{testid}-input"') + + def _add() -> None: + raw = (new_input.value or "").strip() + if not raw: + return + if validate is not None: + error = validate(raw) + if error is not None: + notifications.notify_error(error) + return + if raw in values: + notifications.notify_error(f"{raw!r} is already in the list") + return + values.append(raw) + _render_chips() + new_input.value = "" + + with ui.row().classes("items-center").style("gap: 0.5rem;"): + ui.button("+ Add", on_click=lambda _e: _add()).props(f'flat data-testid="{testid}-add"') + if on_reset is not None: + + def _reset() -> None: + on_reset() + _render_chips() + + ui.button(reset_label, on_click=lambda _e: _reset()).props( + f'flat data-testid="{testid}-reset"' + ) + + def _render_section_body( section: str, draft: Config, @@ -308,6 +474,12 @@ def _render_section_body( on_save_lims_password: Callable[[str], None] | None = None, on_clear_lims_password: Callable[[], None] | None = None, lims_password_present: bool = False, + nas_remote_available: Callable[[str], bool] | None = None, + on_test_connection: Callable[[], Any] | None = None, + autostart_registered: bool = False, + on_set_autostart: Callable[[bool], bool | None] | None = None, + on_quit: Callable[[], None] | None = None, + tray_available: bool = False, ) -> None: """Render the content for a single section, bound to ``draft``. @@ -372,6 +544,13 @@ def _render_section_body( test_connection_panel.test_connection_panel(None) elif section == "equipment": _render_equipment_section(draft) + elif section == NAS_REMOTE_SECTION: + _render_nas_remote_section( + ui.column().classes("w-full"), + nas=draft.nas, + nas_remote_available=nas_remote_available or (lambda _name: False), + on_test_connection=on_test_connection, + ) elif section == "nas_cleanup": ui.checkbox("Cleanup enabled", value=draft.nas_cleanup.enabled).bind_value( draft.nas_cleanup, "enabled" @@ -385,13 +564,39 @@ def _render_section_body( ui.checkbox( "Retain .exlab-wizard/ metadata", value=draft.nas_cleanup.retain_cache ).bind_value(draft.nas_cleanup, "retain_cache") + elif section == "operators": + # Frontend Β§7.9: empty allowlist = any operator; non-empty = the + # wizard renders a dropdown of these names and rejects free-text. + # Case-sensitive (OperatorsConfig is str_strip_whitespace, not + # lowercased) and non-gating. + ui.label( + "If empty, the operator field accepts any value. If non-empty, the wizard " + "shows a dropdown of these names and rejects free-text." + ).style("color: var(--color-muted); font-size: var(--text-sm);") + _render_chip_editor( + draft.operators.allowlist, + add_label="Add operator username", + testid="settings-operators", + empty_text="Any operator allowed (allowlist empty)", + ) elif section == "validator": ui.number( label="Max content-scan size (MiB)", value=draft.validator.content_scan_max_mib, ).bind_value(draft.validator, "content_scan_max_mib") - ui.label( - "Scanned file extensions: " + ", ".join(draft.validator.content_scan_extensions) + ui.label("Scanned file extensions").style("color: var(--color-body);") + + def _reset_extensions() -> None: + from exlab_wizard.config.models import _default_content_scan_extensions + + draft.validator.content_scan_extensions[:] = _default_content_scan_extensions() + + _render_chip_editor( + draft.validator.content_scan_extensions, + add_label="Add extension (e.g. .txt)", + testid="settings-scan-ext", + validate=lambda v: None if v.startswith(".") else "Extensions must start with '.'", + on_reset=_reset_extensions, ) elif section == "logging": ui.radio(["DEBUG", "INFO", "WARN", "ERROR"], value=draft.logging.level).bind_value( @@ -404,24 +609,89 @@ def _render_section_body( label="Rotated log copies kept", value=draft.logging.central_log_keep ).bind_value(draft.logging, "central_log_keep") elif section == "orchestrator": - # Redesign Β§3.1: orchestrator pipeline is always active; the - # enabled toggle is removed. label + staging_root are now - # always required (they join the setup-incomplete gate). The - # full Settings refactor that folds these into an early - # section lands in Phase 6. + # ``label`` is required (it identifies this workstation in every + # run's creation.json). ``staging_root`` is opt-in: blank means + # this device is not a staging PC. The placeholder shows an + # OS-appropriate suggestion without prefilling the value -- the + # directory is created only when a non-empty path is saved (see + # ui.mount._persist_config). ui.input(label="Workstation label", value=draft.orchestrator.label).bind_value( draft.orchestrator, "label" ) - ui.input(label="Staging root", value=draft.orchestrator.staging_root).bind_value( - draft.orchestrator, "staging_root" - ) + ui.input( + label="Staging root (optional)", + value=draft.orchestrator.staging_root, + placeholder=str(suggested_staging_root()), + ).bind_value(draft.orchestrator, "staging_root") elif section == "application": - # "Start at login" is the autostart toggle, not a config.yaml - # field -- it is set from the welcome card. Shown here for - # discoverability; wiring it is a follow-up. - ui.checkbox("Start ExLab-Wizard at login") - ui.label("Show in system tray: available") - ui.button("Quit ExLab-Wizard now").props("flat") + # "Start at login" (T8): applied immediately (NOT draft-bound, + # Β§7.13). Seeded from the real registration state; on toggle it + # reflects the actual post-op ``is_registered()`` and reverts on + # failure. Disabled when no toggle is wired (headless/tests). + _guard = {"busy": False} + autostart_box: Any = None + + def _on_autostart(event: Any) -> None: + if _guard["busy"] or on_set_autostart is None: + return + actual = on_set_autostart(bool(event.value)) + if actual is not None and bool(actual) != bool(event.value): + # Programmatic revert re-fires on_change synchronously; + # the guard makes that re-entrant call a no-op. + _guard["busy"] = True + try: + autostart_box.value = bool(actual) + finally: + _guard["busy"] = False + + autostart_box = ui.checkbox( + "Start ExLab-Wizard at login", + value=autostart_registered, + on_change=_on_autostart, + ).props('data-testid="settings-autostart"') + if on_set_autostart is None: + autostart_box.props("disable") + + # Real tray availability + window-on-close behavior (T11, Β§7.13). + tray_text = "available" if tray_available else "unavailable (window-only)" + ui.label(f"Show in system tray: {tray_text}").props( + 'data-testid="settings-tray-status"' + ) + ui.label( + "Closing the window keeps ExLab-Wizard running in the tray; " + "use Quit to exit completely." + ).style("color: var(--color-muted); font-size: var(--text-sm);") + + # "Quit ExLab-Wizard now" (T9): graceful shutdown behind a confirm, + # scheduled non-blocking by the host. Disabled when no hook wired. + quit_btn = ui.button("Quit ExLab-Wizard now").props('flat data-testid="settings-quit"') + if on_quit is None: + quit_btn.props("disable") + else: + + def _confirm_quit() -> None: + confirm = ui.dialog() + with ( + confirm, + ui.card().props('data-testid="settings-quit-dialog"'), + ): + ui.label("Quit ExLab-Wizard?").style("font-weight: 600;") + ui.label("In-flight operations are allowed to finish first.").style( + "color: var(--color-muted);" + ) + + def _do_quit() -> None: + confirm.close() + on_quit() + + with ui.row().classes("justify-end w-full").style("gap: 0.5rem;"): + ui.button("Cancel", on_click=lambda _e: confirm.close()).props("flat") + ui.button("Quit", on_click=lambda _e: _do_quit()).props( + 'color=negative data-testid="settings-quit-confirm"' + ) + confirm.open() + + quit_btn.on("click", lambda _e: _confirm_quit()) # Redesign Β§6: the canonical equipment-config assembler now lives in @@ -438,10 +708,11 @@ def _render_equipment_section(draft: Config) -> None: ``draft.equipment`` and reflects it in the visible list; the whole draft is re-validated and persisted when the operator clicks Save. - The sub-form covers the full Β§9 equipment surface: a - completeness-signal radio (``sentinel_file`` / ``manifest``) that - swaps the filename field, and a transport radio (``rclone`` / - ``rsync_ssh``) that swaps the transport fieldset. + rclone.conf NAS-sync migration: nas-mode equipment no longer carry a + per-equipment SFTP/SMB transport -- the connection is defined once by + the ``nas:`` remote (see the NAS Remote section). The sub-form + therefore collects only identity + paths and builds a nas-mode entry + with ``transport=None``. """ from nicegui import ui @@ -452,13 +723,10 @@ def _render_rows() -> None: with rows: if draft.equipment: for entry in draft.equipment: - transport_summary = ( - entry.transport.type if entry.transport is not None else "stage" + mode = getattr(entry.sync_mode, "value", str(entry.sync_mode)) + ui.label(f"{entry.id} -- {entry.label} [{mode}]").props( + 'data-testid="settings-equipment-row"' ) - ui.label( - f"{entry.id} -- {entry.label} " - f"[{entry.completeness_signal} / {transport_summary}]" - ).props('data-testid="settings-equipment-row"') else: ui.label("No equipment configured yet.").props( 'data-testid="settings-equipment-empty"' @@ -473,62 +741,6 @@ def _render_rows() -> None: eq_local = ui.input(label="Local root").props('data-testid="settings-equipment-local-root"') eq_nas = ui.input(label="NAS root").props('data-testid="settings-equipment-nas-root"') - # Completeness signal: a radio that swaps the filename field. - signal_radio = ui.radio( - [CompletenessSignal.SENTINEL_FILE.value, CompletenessSignal.MANIFEST.value], - value=CompletenessSignal.SENTINEL_FILE.value, - ).props('data-testid="settings-equipment-signal"') - # Widget refs the swap-panels and ``_add`` share. - fields: dict[str, Any] = {} - - @ui.refreshable - def _signal_field() -> None: - if signal_radio.value == CompletenessSignal.MANIFEST.value: - fields["manifest"] = ui.input(label="Manifest filename", value="manifest.json").props( - 'data-testid="settings-equipment-manifest"' - ) - fields.pop("sentinel", None) - else: - fields["sentinel"] = ui.input( - label="Sentinel filename", value="acquisition_complete.flag" - ).props('data-testid="settings-equipment-sentinel"') - fields.pop("manifest", None) - - _signal_field() - signal_radio.on_value_change(lambda _e: _signal_field.refresh()) - - # Transport: a radio that swaps the transport fieldset. - transport_radio = ui.radio(["rclone", "rsync_ssh"], value="rclone").props( - 'data-testid="settings-equipment-transport"' - ) - - @ui.refreshable - def _transport_fields() -> None: - if transport_radio.value == "rsync_ssh": - fields["ssh_target"] = ui.input(label="SSH target").props( - 'data-testid="settings-equipment-ssh-target"' - ) - fields["ssh_key"] = ui.input(label="SSH key path", value="~/.ssh/id_ed25519").props( - 'data-testid="settings-equipment-ssh-key"' - ) - fields["rsync_path"] = ui.input(label="Remote path").props( - 'data-testid="settings-equipment-rsync-path"' - ) - for stale in ("rclone_remote", "rclone_path"): - fields.pop(stale, None) - else: - fields["rclone_remote"] = ui.input(label="rclone remote").props( - 'data-testid="settings-equipment-rclone-remote"' - ) - fields["rclone_path"] = ui.input(label="rclone remote path").props( - 'data-testid="settings-equipment-rclone-path"' - ) - for stale in ("ssh_target", "ssh_key", "rsync_path"): - fields.pop(stale, None) - - _transport_fields() - transport_radio.on_value_change(lambda _e: _transport_fields.refresh()) - def _add(_evt: Any = None) -> None: try: entry = build_equipment_config( @@ -536,21 +748,7 @@ def _add(_evt: Any = None) -> None: label=eq_label.value or "", local_root=eq_local.value or "", nas_root=eq_nas.value or "", - completeness_signal=signal_radio.value or CompletenessSignal.SENTINEL_FILE.value, - sentinel_filename=(fields["sentinel"].value or "" if "sentinel" in fields else ""), - manifest_filename=(fields["manifest"].value or "" if "manifest" in fields else ""), - transport_type=transport_radio.value or "rclone", - rclone_remote=( - fields["rclone_remote"].value or "" if "rclone_remote" in fields else "" - ), - rclone_remote_path=( - fields["rclone_path"].value or "" if "rclone_path" in fields else "" - ), - ssh_target=(fields["ssh_target"].value or "" if "ssh_target" in fields else ""), - ssh_key_path=(fields["ssh_key"].value or "" if "ssh_key" in fields else ""), - rsync_remote_path=( - fields["rsync_path"].value or "" if "rsync_path" in fields else "" - ), + sync_mode="nas", ) except Exception as exc: notifications.notify_error(f"Equipment invalid: {exc}") @@ -565,3 +763,74 @@ def _add(_evt: Any = None) -> None: notifications.notify_success(f"Equipment {entry.id!r} added") ui.button("Add equipment", on_click=_add).props('data-testid="settings-equipment-add"') + + +def _render_nas_remote_section( + container: Any, + *, + nas: Any, + nas_remote_available: Callable[[str], bool], + on_test_connection: Callable[[], Any] | None, +) -> None: + """Render the read-only NAS-remote status + a Test-connection panel. + + rclone.conf NAS-sync migration. The operator no longer types a NAS + password; the app references a single ``nas:`` remote defined in their + ``rclone.conf`` (created out-of-band with ``rclone config``). This + section shows that remote + its base root read-only, a found / + not-found badge derived from ``nas_remote_available(nas.remote)``, and + a single "Test connection" button wired to ``on_test_connection`` (the + rclone remote probe) that renders its result inline. + """ + import inspect + + from nicegui import ui + + remote = getattr(nas, "remote", "") or "" + base_root = getattr(nas, "base_root", "") or "" + available = bool(remote) and nas_remote_available(remote) + + with container: + ui.label( + "NAS sync references a single rclone remote configured in your " + "rclone.conf (run `rclone config` to create it). No password is " + "stored here." + ).style("font-size: var(--text-sm); color: var(--color-muted);") + + with ui.row().classes("items-center w-full").style("gap: 0.5rem;"): + ui.label("Remote").style("color: var(--color-body); min-width: 6rem;") + ui.label(remote or "(not configured)").props( + 'data-testid="settings-nas-remote-name"' + ).style("font-family: var(--font-mono);") + + with ui.row().classes("items-center w-full").style("gap: 0.5rem;"): + ui.label("Base root").style("color: var(--color-body); min-width: 6rem;") + ui.label(base_root or "(not configured)").props( + 'data-testid="settings-nas-remote-base-root"' + ).style("font-family: var(--font-mono);") + + if available: + badge_text = "Found in rclone.conf" + badge_color = "var(--color-success)" + else: + badge_text = "Not found β€” run `rclone config`" + badge_color = "var(--color-warning)" + ui.label(badge_text).props('data-testid="settings-nas-remote-status"').style( + f"color: {badge_color}; font-size: var(--text-sm); font-weight: 600;" + ) + + panel = ui.column().classes("w-full") + + async def _test() -> None: + panel.clear() + if on_test_connection is None: + return + result = on_test_connection() + if inspect.isawaitable(result): + result = await result + with panel: + test_connection_panel.test_connection_panel(result) + + ui.button("Test connection", on_click=_test).props( + 'flat data-testid="settings-nas-test-connection"' + ) diff --git a/src/exlab_wizard/ui/pages/staging.py b/src/exlab_wizard/ui/pages/staging.py index 5e140ae..a201376 100644 --- a/src/exlab_wizard/ui/pages/staging.py +++ b/src/exlab_wizard/ui/pages/staging.py @@ -29,7 +29,7 @@ from dataclasses import dataclass from typing import Any -from exlab_wizard.constants import IngestState +from exlab_wizard.constants import RunSyncState from exlab_wizard.logging import get_logger from exlab_wizard.orchestrator.staging_query import StagedRunSummary @@ -64,17 +64,23 @@ """The seven columns displayed (column order is part of the spec).""" -# State -> color mapping mirroring the design tokens in +# Run rollup state -> color mapping mirroring the design tokens in # ``exlab_wizard.ui.design``. Kept here as plain strings so the unit tests -# don't depend on the full design module being importable. +# don't depend on the full design module being importable. Phase 5 of the +# operator-free per-file NAS sync redesign (2026-05-21) sources +# ``current_state`` from the derived ``sync_state.json`` +# ``RunSyncState`` rollup -- ``syncing`` / ``synced`` / ``cleared``. _STATE_COLORS: dict[str, str] = { - IngestState.STAGING.value: "var(--color-info)", - IngestState.COMPLETE.value: "var(--color-success)", - IngestState.SYNC_QUEUED.value: "var(--color-info)", - IngestState.SYNC_VERIFIED.value: "var(--color-success)", - IngestState.CLEARED.value: "var(--color-muted)", + RunSyncState.SYNCING.value: "var(--color-info)", + RunSyncState.SYNCED.value: "var(--color-success)", + RunSyncState.CLEARED.value: "var(--color-muted)", } +# Run rollup states whose staging copy may still be cleared: only a +# fully-``synced`` run (``cleared`` has no staging copy left, ``syncing`` +# is unproven). +_CLEARABLE_STATES: frozenset[str] = frozenset({RunSyncState.SYNCED.value}) + @dataclass class StagingDockState: @@ -164,7 +170,7 @@ def row_props(row: StagedRunSummary) -> dict[str, Any]: "files": row.file_count, "bytes": format_bytes(row.byte_total), "elapsed": format_elapsed(row.elapsed_seconds_since_last_activity), - "is_clearable": row.current_state == IngestState.SYNC_VERIFIED.value, + "is_clearable": row.current_state in _CLEARABLE_STATES, } @@ -216,9 +222,7 @@ def render_staging_dock(state: StagingDockState) -> Any: "font-weight: 600;", ) ui.space() - verified_count = sum( - 1 for row in state.rows if row.current_state == IngestState.SYNC_VERIFIED.value - ) + verified_count = sum(1 for row in state.rows if row.current_state in _CLEARABLE_STATES) ui.button( f"Clear verified runs ({verified_count})", on_click=lambda _evt: _invoke(state.on_clear_verified), diff --git a/src/exlab_wizard/ui/pages/wizard_equipment.py b/src/exlab_wizard/ui/pages/wizard_equipment.py index 25840f0..2ebdccd 100644 --- a/src/exlab_wizard/ui/pages/wizard_equipment.py +++ b/src/exlab_wizard/ui/pages/wizard_equipment.py @@ -1,15 +1,16 @@ """Add-Equipment wizard (GUI/Orchestrator Redesign Β§6). -Five-step wizard launched from the main-window toolbar: +Four-step wizard launched from the main-window toolbar: 1. Identity β€” equipment ID (validated against ``^[A-Z][A-Z0-9_]*$``) + label. 2. Paths β€” local_root (where this device acquires runs). 3. Sync mode β€” pick ``nas`` (acquire + sync directly to NAS) or - ``stage`` (acquire + push to a connected PC's staging area). The - step then shows the matching transport sub-form. -4. Completeness signal β€” sentinel vs manifest + filename. -5. Review & confirm β€” assembles a validated EquipmentConfig via the + ``stage`` (acquire + push to a connected PC's staging area). Neither + mode collects a per-equipment transport: the NAS connection is the + single ``nas:`` remote and the staging hop is + ``orchestrator.staging_remote`` (both configured in Settings). +4. Review & confirm β€” assembles a validated EquipmentConfig via the shared ``build_equipment_config()`` and posts it through ``POST /config/equipment``. @@ -35,7 +36,6 @@ "identity", "paths", "sync_mode", - "signal", "review", ) @@ -43,7 +43,6 @@ "identity": "Identity", "paths": "Paths", "sync_mode": "Sync mode", - "signal": "Completeness signal", "review": "Review & confirm", } @@ -59,22 +58,13 @@ class EquipmentWizardState: # Step 2 local_root: str = "" nas_root: str = "" - # Step 3 + # Step 3 -- sync_mode is "nas" or "stage". rclone.conf migration + # (Phase 8): neither mode carries a per-equipment transport. The + # ``nas:`` remote defines the NAS connection and + # ``orchestrator.staging_remote`` defines the staging hop, so picking + # the mode is the only per-equipment choice. sync_mode: str = "nas" - transport_type: str = "rclone" - rclone_remote: str = "" - rclone_remote_path: str = "" - ssh_target: str = "" - ssh_key_path: str = "" - rsync_remote_path: str = "" - staging_transport_type: str = "smb_mount" - staging_mount_point: str = "" - staging_subpath: str = "" # Step 4 - completeness_signal: str = "sentinel_file" - sentinel_filename: str = "" - manifest_filename: str = "" - # Step 5 last_error: str | None = None confirmed: bool = False @@ -95,16 +85,11 @@ def can_advance(state: EquipmentWizardState) -> bool: case "paths": return bool(state.local_root.strip() and state.nas_root.strip()) case "sync_mode": - if state.sync_mode == "nas": - if state.transport_type == "rclone": - return bool(state.rclone_remote.strip() and state.rclone_remote_path.strip()) - return bool(state.ssh_target.strip() and state.rsync_remote_path.strip()) - # stage - return bool(state.staging_mount_point.strip() and state.staging_subpath.strip()) - case "signal": - if state.completeness_signal == "sentinel_file": - return bool(state.sentinel_filename.strip()) - return bool(state.manifest_filename.strip()) + # rclone.conf migration (Phase 8): neither mode collects a + # per-equipment transport here -- the ``nas:`` remote defines the + # NAS connection and ``orchestrator.staging_remote`` defines the + # staging hop -- so picking the mode is enough to advance. + return True case "review": return True return False @@ -123,36 +108,29 @@ def assemble_equipment_config( label=state.label, local_root=state.local_root, nas_root=state.nas_root, - completeness_signal=state.completeness_signal, - sentinel_filename=state.sentinel_filename, - manifest_filename=state.manifest_filename, sync_mode=state.sync_mode, - transport_type=state.transport_type, - rclone_remote=state.rclone_remote, - rclone_remote_path=state.rclone_remote_path, - ssh_target=state.ssh_target, - ssh_key_path=state.ssh_key_path, - rsync_remote_path=state.rsync_remote_path, - staging_transport_type=state.staging_transport_type, - staging_mount_point=state.staging_mount_point, - staging_subpath=state.staging_subpath, ) def render_wizard_equipment( *, state: EquipmentWizardState | None = None, - on_advance: Callable[[str], None] | None = None, - on_back: Callable[[str], None] | None = None, on_confirm: Callable[[EquipmentConfig], None] | None = None, on_cancel: Callable[[], None] | None = None, ) -> Any: # pragma: no cover -- NiceGUI render, driven by e2e - """Render the Add-Equipment wizard. Pure render function. - - Rendered as a full-page card (not a dialog) since the wizard has its - own route at ``/wizard/equipment``; the previous dialog wrapping - required an explicit ``.open()`` call which the route handler had - no clean place to issue. + """Render the self-contained Add-Equipment wizard. + + Next / Back navigation is handled *inside* the render: the step body + and footer live in one ``@ui.refreshable`` so advancing mutates + ``state.active_step`` and re-renders in place. The wizard therefore + keeps a single ``EquipmentWizardState`` for its whole lifetime -- + the caller creates it once and never round-trips through a page + navigation that would reset it. Only ``on_confirm`` (post the + assembled ``EquipmentConfig``) and ``on_cancel`` (leave the wizard) + cross back to the host. + + Rendered as a full-page card since the wizard owns the + ``/wizard/equipment`` route. """ s = state or EquipmentWizardState() @@ -161,44 +139,80 @@ def render_wizard_equipment( except Exception: return {"state": s} + # Handle to the live Next button. ``_body`` rewrites this on every + # re-render; ``_sync_next`` toggles the button's enabled state as the + # operator edits a step -- without a re-render, so input focus is + # kept while typing. + next_btn: dict[str, Any] = {} + with ui.card().classes("w-full h-full p-6").props('data-testid="wizard-equipment"') as dialog: ui.label("Add Equipment").style( "font-family: var(--font-display); font-size: var(--text-lg); " "color: var(--color-heading); font-weight: 600;" ) - ui.label(EQUIPMENT_STEP_TITLES[s.active_step]).style( - "color: var(--color-muted); margin-bottom: var(--sp-3);" - ).props(f'data-testid="wizard-equipment-step-{s.active_step}"') - - _STEP_RENDERERS[s.active_step](s) - - with ( - ui.row() - .classes("items-center w-full") - .style("margin-top: var(--sp-4); gap: var(--sp-2);") - ): - if on_cancel is not None: - ui.button("Cancel").props('flat data-testid="wizard-equipment-cancel"').on( - "click", lambda _evt: on_cancel() - ) - if s.active_step != EQUIPMENT_WIZARD_STEPS[0] and on_back is not None: - ui.button("Back").props('flat data-testid="wizard-equipment-back"').on( - "click", lambda _evt: on_back(s.active_step) - ) - ui.space() - if s.active_step == "review": - ui.button("Confirm").props( - 'color=primary data-testid="wizard-equipment-confirm"' - ).on( - "click", - lambda _evt: _maybe_confirm(s, on_confirm), - ) - else: - btn = ui.button("Next").props('color=primary data-testid="wizard-equipment-next"') - if on_advance is not None: - btn.on("click", lambda _evt: on_advance(s.active_step)) - if not can_advance(s): - btn.props("disable") + + def _sync_next() -> None: + """Re-evaluate ``can_advance`` and enable/disable Next in place.""" + btn = next_btn.get("btn") + if btn is not None: + btn.set_enabled(can_advance(s)) + + def _step_forward() -> None: + """Advance one step, but only when the current step is valid.""" + if not can_advance(s): + return + idx = EQUIPMENT_WIZARD_STEPS.index(s.active_step) + if idx + 1 < len(EQUIPMENT_WIZARD_STEPS): + s.active_step = EQUIPMENT_WIZARD_STEPS[idx + 1] + _body.refresh() + + def _step_back() -> None: + """Return to the previous step, keeping every entered value.""" + idx = EQUIPMENT_WIZARD_STEPS.index(s.active_step) + if idx > 0: + s.active_step = EQUIPMENT_WIZARD_STEPS[idx - 1] + _body.refresh() + + @ui.refreshable + def _body() -> None: + next_btn.pop("btn", None) + ui.label(EQUIPMENT_STEP_TITLES[s.active_step]).style( + "color: var(--color-muted); margin-bottom: var(--sp-3);" + ).props(f'data-testid="wizard-equipment-step-{s.active_step}"') + + # Step renderers wire radios to ``_body.refresh`` (a changed + # radio swaps which sub-form is shown) and text inputs to + # ``_sync_next`` (re-checks the Next gate without a re-render). + _STEP_RENDERERS[s.active_step](s, _body.refresh, _sync_next) + + with ( + ui.row() + .classes("items-center w-full") + .style("margin-top: var(--sp-4); gap: var(--sp-2);") + ): + if on_cancel is not None: + cancel_cb = on_cancel + ui.button("Cancel").props('flat data-testid="wizard-equipment-cancel"').on( + "click", lambda _evt: cancel_cb() + ) + if s.active_step != EQUIPMENT_WIZARD_STEPS[0]: + ui.button("Back").props('flat data-testid="wizard-equipment-back"').on( + "click", lambda _evt: _step_back() + ) + ui.space() + if s.active_step == "review": + ui.button("Confirm").props( + 'color=primary data-testid="wizard-equipment-confirm"' + ).on("click", lambda _evt: _maybe_confirm(s, on_confirm)) + else: + btn = ui.button("Next").props( + 'color=primary data-testid="wizard-equipment-next"' + ) + btn.on("click", lambda _evt: _step_forward()) + btn.set_enabled(can_advance(s)) + next_btn["btn"] = btn + + _body() return dialog @@ -219,99 +233,86 @@ def _maybe_confirm( def _render_identity_step( state: EquipmentWizardState, + refresh_body: Callable[[], object], + sync_next: Callable[[], object], ) -> None: # pragma: no cover -- NiceGUI render, driven by e2e + del refresh_body # identity has no structural (radio) controls try: from nicegui import ui except Exception: return - ui.input(label="Equipment ID (^[A-Z][A-Z0-9_]*$)").props( + ui.input(label="Equipment ID (^[A-Z][A-Z0-9_]*$)", on_change=lambda _e: sync_next()).props( 'data-testid="wizard-equipment-id"' ).bind_value(state, "equipment_id") - ui.input(label="Label").props('data-testid="wizard-equipment-label"').bind_value(state, "label") + ui.input(label="Label", on_change=lambda _e: sync_next()).props( + 'data-testid="wizard-equipment-label"' + ).bind_value(state, "label") def _render_paths_step( state: EquipmentWizardState, + refresh_body: Callable[[], object], + sync_next: Callable[[], object], ) -> None: # pragma: no cover -- NiceGUI render, driven by e2e + del refresh_body # paths has no structural (radio) controls try: from nicegui import ui except Exception: return - ui.input(label="Local root").props('data-testid="wizard-equipment-local-root"').bind_value( - state, "local_root" - ) - ui.input(label="NAS root").props('data-testid="wizard-equipment-nas-root"').bind_value( - state, "nas_root" - ) + ui.input(label="Local root", on_change=lambda _e: sync_next()).props( + 'data-testid="wizard-equipment-local-root"' + ).bind_value(state, "local_root") + ui.input(label="NAS root", on_change=lambda _e: sync_next()).props( + 'data-testid="wizard-equipment-nas-root"' + ).bind_value(state, "nas_root") def _render_sync_mode_step( state: EquipmentWizardState, + refresh_body: Callable[[], object], + sync_next: Callable[[], object], ) -> None: # pragma: no cover -- NiceGUI render, driven by e2e try: from nicegui import ui except Exception: return + del sync_next # the sync-mode step has only the radio (no text inputs) with ui.row().classes("items-center"): - ui.radio(["nas", "stage"], value=state.sync_mode).props( - 'data-testid="wizard-equipment-sync-mode"' - ).bind_value(state, "sync_mode") + ui.radio( + ["nas", "stage"], value=state.sync_mode, on_change=lambda _e: refresh_body() + ).props('data-testid="wizard-equipment-sync-mode"').bind_value(state, "sync_mode") if state.sync_mode == "nas": - ui.radio(["rclone", "rsync_ssh"], value=state.transport_type).props( - 'data-testid="wizard-equipment-transport-type"' - ).bind_value(state, "transport_type") - if state.transport_type == "rclone": - ui.input(label="rclone remote").props( - 'data-testid="wizard-equipment-rclone-remote"' - ).bind_value(state, "rclone_remote") - ui.input(label="rclone remote path").props( - 'data-testid="wizard-equipment-rclone-remote-path"' - ).bind_value(state, "rclone_remote_path") - else: - ui.input(label="SSH target").props( - 'data-testid="wizard-equipment-ssh-target"' - ).bind_value(state, "ssh_target") - ui.input(label="SSH key path").props( - 'data-testid="wizard-equipment-ssh-key-path"' - ).bind_value(state, "ssh_key_path") - ui.input(label="rsync remote path").props( - 'data-testid="wizard-equipment-rsync-remote-path"' - ).bind_value(state, "rsync_remote_path") + # rclone.conf migration: nas-mode no longer collects a per-equipment + # SFTP/SMB transport here. The connection is defined once by the + # single ``nas:`` remote in the operator's rclone.conf (confirmed + # via Settings -> NAS Remote -> Test connection). + ui.label( + "This device syncs directly to the NAS using the rclone remote " + "configured in Settings -> NAS Remote. No per-equipment connection " + "is needed here." + ).style("color: var(--color-muted); font-size: var(--text-sm);").props( + 'data-testid="wizard-equipment-nas-note"' + ) else: # stage - ui.radio(["smb_mount", "file_transfer"], value=state.staging_transport_type).props( - 'data-testid="wizard-equipment-staging-transport-type"' - ).bind_value(state, "staging_transport_type") - ui.input(label="Mount point").props( - 'data-testid="wizard-equipment-staging-mount-point"' - ).bind_value(state, "staging_mount_point") - ui.input(label="Staging subpath").props( - 'data-testid="wizard-equipment-staging-subpath"' - ).bind_value(state, "staging_subpath") - - -def _render_signal_step( - state: EquipmentWizardState, -) -> None: # pragma: no cover -- NiceGUI render, driven by e2e - try: - from nicegui import ui - except Exception: - return - ui.radio(["sentinel_file", "manifest"], value=state.completeness_signal).props( - 'data-testid="wizard-equipment-signal"' - ).bind_value(state, "completeness_signal") - if state.completeness_signal == "sentinel_file": - ui.input(label="Sentinel filename").props( - 'data-testid="wizard-equipment-sentinel-filename"' - ).bind_value(state, "sentinel_filename") - else: - ui.input(label="Manifest filename").props( - 'data-testid="wizard-equipment-manifest-filename"' - ).bind_value(state, "manifest_filename") + # rclone.conf migration (Phase 8): stage-mode no longer collects a + # per-equipment mount/subpath here. The staging hop is defined once + # by ``orchestrator.staging_remote`` / ``staging_base_root`` (a + # second rclone remote configured in Settings). + ui.label( + "This device pushes runs to the staging-PC rclone remote " + "configured under orchestrator.staging_remote. No per-equipment " + "connection is needed here." + ).style("color: var(--color-muted); font-size: var(--text-sm);").props( + 'data-testid="wizard-equipment-stage-note"' + ) def _render_review_step( state: EquipmentWizardState, + refresh_body: Callable[[], object], + sync_next: Callable[[], object], ) -> None: # pragma: no cover -- NiceGUI render, driven by e2e + del refresh_body, sync_next # review is a static summary, no inputs try: from nicegui import ui except Exception: @@ -323,26 +324,25 @@ def _render_review_step( ui.label(f"Local root: {state.local_root}") ui.label(f"NAS root: {state.nas_root}") ui.label(f"Sync mode: {state.sync_mode}") - if state.sync_mode == "nas": - ui.label(f"Transport: {state.transport_type}") - else: - ui.label(f"Staging transport: {state.staging_transport_type}") - ui.label(f"Mount point: {state.staging_mount_point}") - ui.label(f"Staging subpath: {state.staging_subpath}") + if state.sync_mode == "nas": ui.label( - f"Completeness signal: {state.completeness_signal} / " - + (state.sentinel_filename or state.manifest_filename) - ) + "This device syncs directly to the NAS via the rclone remote " + "configured in Settings β†’ NAS Remote." + ).style( + "color: var(--color-muted); margin-top: var(--sp-2); " + "font-size: var(--text-xs); font-style: italic;" + ).props('data-testid="wizard-equipment-credential-hint"') if state.last_error: ui.label(f"Error: {state.last_error}").style("color: var(--color-danger);").props( 'data-testid="wizard-equipment-error"' ) -_STEP_RENDERERS: dict[str, Callable[[EquipmentWizardState], None]] = { +_StepRenderer = Callable[[EquipmentWizardState, Callable[[], object], Callable[[], object]], None] + +_STEP_RENDERERS: dict[str, _StepRenderer] = { "identity": _render_identity_step, "paths": _render_paths_step, "sync_mode": _render_sync_mode_step, - "signal": _render_signal_step, "review": _render_review_step, } diff --git a/src/exlab_wizard/ui/pages/wizard_project.py b/src/exlab_wizard/ui/pages/wizard_project.py index e52abec..b5479c2 100644 --- a/src/exlab_wizard/ui/pages/wizard_project.py +++ b/src/exlab_wizard/ui/pages/wizard_project.py @@ -72,6 +72,13 @@ class ProjectWizardState: validator_findings: list[dict[str, Any]] = field(default_factory=list) free_disk_bytes: int | None = None plugin_host_ok: bool = True + # Live creation-progress state, folded from the controller WS stream + # while the Confirm & Create step is showing (T2 / Frontend Β§10.1). + progress: session_progress.SessionProgressState = field( + default_factory=session_progress.SessionProgressState + ) + # Bound to the confirm step's ``@ui.refreshable`` view's ``.refresh``. + progress_refresh: Callable[..., Any] | None = None def can_advance(state: ProjectWizardState) -> bool: @@ -221,9 +228,22 @@ def _variables_panel() -> None: on_template_change=_variables_panel.refresh, ) if step_id == "confirm": - session_progress.session_progress( - active_phase=None, - ) + + @ui.refreshable + def _progress_view() -> None: + p = s.progress + session_progress.session_progress( + active_phase=p.active_phase, + completed=p.completed, + plugin_current=p.plugin_current, + plugin_total=p.plugin_total, + plugin_name=p.plugin_name, + ) + + _progress_view() + # The submit flow folds WS frames into ``s.progress`` + # and calls this to advance the phase bar live (T2). + s.progress_refresh = _progress_view.refresh with ui.stepper_navigation(): # The first step has nowhere to step back to, so # Cancel is its only exit -- rendering a dead Back diff --git a/src/exlab_wizard/ui/pages/wizard_run.py b/src/exlab_wizard/ui/pages/wizard_run.py index cb0072b..eddcf6a 100644 --- a/src/exlab_wizard/ui/pages/wizard_run.py +++ b/src/exlab_wizard/ui/pages/wizard_run.py @@ -63,6 +63,13 @@ class RunWizardState: template_variables: dict[str, Any] = field(default_factory=dict) readme_fields: dict[str, str] = field(default_factory=dict) validator_findings: list[dict[str, Any]] = field(default_factory=list) + # Live creation-progress state, folded from the controller WS stream + # while the Confirm & Create step is showing (T2 / Frontend Β§10.1). + progress: session_progress.SessionProgressState = field( + default_factory=session_progress.SessionProgressState + ) + # Bound to the confirm step's ``@ui.refreshable`` view's ``.refresh``. + progress_refresh: Callable[..., Any] | None = None def title_text(state: RunWizardState) -> str: @@ -226,7 +233,22 @@ def _variables_panel() -> None: on_template_change=_variables_panel.refresh, ) if step_id == "confirm": - session_progress.session_progress(active_phase=None) + + @ui.refreshable + def _progress_view() -> None: + p = state.progress + session_progress.session_progress( + active_phase=p.active_phase, + completed=p.completed, + plugin_current=p.plugin_current, + plugin_total=p.plugin_total, + plugin_name=p.plugin_name, + ) + + _progress_view() + # The submit flow folds WS frames into ``state.progress`` + # and calls this to advance the phase bar live (T2). + state.progress_refresh = _progress_view.refresh with ui.stepper_navigation(): # The first step has nowhere to step back to, so # Cancel is its only exit -- rendering a dead Back diff --git a/src/exlab_wizard/validator/engine.py b/src/exlab_wizard/validator/engine.py index 158e6ec..b17b1e9 100644 --- a/src/exlab_wizard/validator/engine.py +++ b/src/exlab_wizard/validator/engine.py @@ -272,6 +272,32 @@ def config(self) -> ValidatorConfig: """ return self._config + def reconfigure( + self, + validator_config: ValidatorConfig | None = None, + *, + equipment_roots: Mapping[str, Path] | None = None, + staging_root: Path | None = None, + ) -> None: + """Re-seed the config + audit-mode roots in place (no tray relaunch). + + Mirrors :meth:`__init__` so a live ``config.yaml`` save refreshes + the content-scan limits, the equipment-roots map, and the staging + root without rebuilding the engine -- callers holding a reference + (the controller, the audit loop) keep using the same instance. + Derived state is built into locals and assigned in one step so a + concurrent reader never observes a half-updated engine. + """ + config = validator_config or ValidatorConfig() + roots: dict[str, Path] = dict(equipment_roots) if equipment_roots else {} + self._config = config + self._equipment_roots = roots + self._staging_root = staging_root + self._content_scan_max_bytes = config.content_scan_max_mib * 1024 * 1024 + self._content_scan_extensions = frozenset( + ext.lower() for ext in config.content_scan_extensions + ) + # ---------------------------------------------------------------- API def validate_creation(self, params: CreationValidationInput) -> list[Finding]: diff --git a/tests/docker/.env.example b/tests/docker/.env.example new file mode 100644 index 0000000..5724947 --- /dev/null +++ b/tests/docker/.env.example @@ -0,0 +1,22 @@ +# Copy to tests/docker/.env before `docker compose up`. Never commit the +# real .env β€” the repo .gitignore catches *.env. The bind-mounted +# nas-data/ directory also collects whatever the sync wrote (see README.md). + +NAS_USER=testuser +NAS_UID=1000 +NAS_GID=1000 + +# The password the rclone SFTP / SMB backends authenticate with. This is +# the same secret you type into Settings -> NAS Credentials for the test +# equipment. Pick anything; it lives only in this .env and is set on the +# container's test user at boot. +NAS_PASSWORD=changeme + +# SMB share name (matches the equipment's `share` field for rclone_smb). +SMB_SHARE=labshare + +# Host-side ports. Bump these if they collide with something local, and +# update the equipment's `port`/host config to match. SMB maps 445->1445 +# on the host so it never needs root or clashes with a host Samba. +SFTP_HOST_PORT=2222 +SMB_HOST_PORT=1445 diff --git a/tests/docker/Dockerfile b/tests/docker/Dockerfile new file mode 100644 index 0000000..a16517d --- /dev/null +++ b/tests/docker/Dockerfile @@ -0,0 +1,41 @@ +FROM debian:bookworm-slim + +# Password-based SFTP NAS emulator for the rclone-only sync path +# (rclone-only migration, 2026-05-26). IT policy forbids SSH keys, so the +# wizard authenticates the SFTP backend with an operator-typed password; +# this container mirrors that by enabling PasswordAuthentication and +# setting a password on the test user. No keys, no PAM challenge flow. + +RUN apt-get update && apt-get install -y --no-install-recommends \ + openssh-server \ + coreutils \ + iproute2 \ + && rm -rf /var/lib/apt/lists/* \ + && mkdir -p /run/sshd + +ARG NAS_USER=testuser +ARG NAS_UID=1000 +ARG NAS_GID=1000 +ENV NAS_USER=${NAS_USER} + +RUN groupadd -g ${NAS_GID} ${NAS_USER} \ + && useradd -m -u ${NAS_UID} -g ${NAS_GID} -s /bin/bash ${NAS_USER} \ + && mkdir -p /home/${NAS_USER}/data \ + && chown -R ${NAS_USER}:${NAS_USER} /home/${NAS_USER} + +# Password auth only: no root login, no pubkey. The test user's password +# is set at boot by the entrypoint from ${NAS_PASSWORD} so it never has +# to be baked into the image. +RUN sed -ri 's/^#?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config \ + && sed -ri 's/^#?PasswordAuthentication.*/PasswordAuthentication yes/' /etc/ssh/sshd_config \ + && sed -ri 's/^#?PubkeyAuthentication.*/PubkeyAuthentication no/' /etc/ssh/sshd_config \ + && sed -ri 's/^#?ChallengeResponseAuthentication.*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config \ + && sed -ri 's/^#?KbdInteractiveAuthentication.*/KbdInteractiveAuthentication no/' /etc/ssh/sshd_config \ + && printf '\nAllowUsers %s\n' "${NAS_USER}" >> /etc/ssh/sshd_config + +COPY entrypoint.sh /usr/local/bin/entrypoint.sh +RUN chmod +x /usr/local/bin/entrypoint.sh + +EXPOSE 22 +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] +CMD ["/usr/sbin/sshd", "-D", "-e"] diff --git a/tests/docker/Dockerfile.smb b/tests/docker/Dockerfile.smb new file mode 100644 index 0000000..52250d9 --- /dev/null +++ b/tests/docker/Dockerfile.smb @@ -0,0 +1,46 @@ +FROM debian:bookworm-slim + +# Password-based SMB NAS emulator for the rclone-only sync path's Windows +# backend (rclone-only migration, 2026-05-26). Mirrors the SFTP container: +# a single share authenticated by an operator-typed password, no keys. + +RUN apt-get update && apt-get install -y --no-install-recommends \ + samba \ + coreutils \ + iproute2 \ + && rm -rf /var/lib/apt/lists/* + +ARG NAS_USER=testuser +ARG NAS_UID=1000 +ARG NAS_GID=1000 +ARG SMB_SHARE=labshare +ENV NAS_USER=${NAS_USER} +ENV SMB_SHARE=${SMB_SHARE} + +RUN groupadd -g ${NAS_GID} ${NAS_USER} \ + && useradd -M -u ${NAS_UID} -g ${NAS_GID} -s /usr/sbin/nologin ${NAS_USER} \ + && mkdir -p /srv/${SMB_SHARE} \ + && chown -R ${NAS_USER}:${NAS_USER} /srv/${SMB_SHARE} + +# Minimal smb.conf: one writable share backed by the bind-mounted data dir, +# user-level security so the rclone smb backend authenticates by password. +RUN printf '[global]\n\ + workgroup = WORKGROUP\n\ + security = user\n\ + map to guest = never\n\ + server min protocol = SMB2\n\ +\n\ +[%s]\n\ + path = /srv/%s\n\ + browsable = yes\n\ + writable = yes\n\ + valid users = %s\n\ + force user = %s\n' "${SMB_SHARE}" "${SMB_SHARE}" "${NAS_USER}" "${NAS_USER}" \ + > /etc/samba/smb.conf + +COPY entrypoint.smb.sh /usr/local/bin/entrypoint.smb.sh +RUN chmod +x /usr/local/bin/entrypoint.smb.sh + +EXPOSE 445 +ENTRYPOINT ["/usr/local/bin/entrypoint.smb.sh"] +CMD ["smbd", "--foreground", "--no-process-group", "--debug-stdout"] diff --git a/tests/docker/README.md b/tests/docker/README.md new file mode 100644 index 0000000..abdb5d1 --- /dev/null +++ b/tests/docker/README.md @@ -0,0 +1,203 @@ +# NAS Emulator β€” Docker Compose Stack + +Local NAS stand-in for testing the ExLab-Wizard sync pipeline without +touching the real NAS. Two containers cover both rclone backends: an +OpenSSH server for SFTP and a Samba server for SMB. + +## Purpose & Scope + +**In scope:** password-authenticated SFTP and SMB endpoints, a +bind-mounted data volume for inspection, teardown/reset between runs. + +**Out of scope:** Google Cloud bucket sync, NAS quota / snapshot +behaviour, real host-key trust (the emulator disables host-key checking). + +> **How the app connects:** ExLab-Wizard uses operator-managed rclone named +> remotes. You configure the remote in `rclone.conf` once with `rclone config` +> (or by editing the file directly), point `nas.remote` in `config.yaml` at +> the remote name, and the app calls `rclone copy`/`rclone lsjson`/`rclone check` +> with that named remote. The app injects **no credentials** at subprocess time. +> See `docs/setup/rclone-remote-setup.md` for the full walkthrough. + +## Requirements + +| Requirement | Detail | +|------------------|--------------------------------------------------------------| +| Protocols | SFTP (`${SFTP_HOST_PORT:-2222}`) + SMB (`${SMB_HOST_PORT:-1445}`) | +| Auth | Password only (no keys); SMB user-level security | +| Platform | macOS, Linux, Windows (Docker Desktop or Engine) | +| Internet access | Not required after `docker compose build` succeeds | +| Tooling | Docker + Docker Compose v2 (optionally the `rclone` CLI) | + +## Layout + +``` +tests/docker/ +β”œβ”€β”€ Dockerfile # debian-slim + openssh-server (password auth) +β”œβ”€β”€ Dockerfile.smb # debian-slim + samba (password auth) +β”œβ”€β”€ entrypoint.sh # sets the SFTP user password, generates host keys +β”œβ”€β”€ entrypoint.smb.sh # registers the Samba user + password +β”œβ”€β”€ docker-compose.yml # nas-sftp + nas-smb services +β”œβ”€β”€ .env.example # credential / port template (committed) +β”œβ”€β”€ .env # actual values incl. NAS_PASSWORD (gitignored) +β”œβ”€β”€ nas-data/ # bind-mounted NAS state (gitignored except .gitkeep) +β”‚ └── .gitkeep +β”œβ”€β”€ rclone.conf # test rclone.conf pointing at the compose containers +β”œβ”€β”€ rclone.conf.example # annotated example for ad-hoc shell use +└── README.md +``` + +## First-Time Setup + +From the repo root: + +```bash +# 1. credentials / ports β€” edit NAS_PASSWORD to taste +cp tests/docker/.env.example tests/docker/.env + +# 2. build + start both backends +docker compose -f tests/docker/docker-compose.yml up -d --build + +# 3. fill in the password in tests/docker/rclone.conf (see that file's comments) +# or run rclone config to add the remotes interactively: +rclone --config tests/docker/rclone.conf config + +# 4. confirm SFTP answers +rclone --config tests/docker/rclone.conf lsd nas01-sftp: + +# 5. confirm SMB answers +rclone --config tests/docker/rclone.conf lsd nas01-smb:labshare +``` + +The password lives only in `tests/docker/.env`; the entrypoints set it on +the container user at boot, so rotating it is just an `.env` edit + a +`docker compose up -d` bounce. + +## Wiring Into ExLab Config + +1. Add the test remotes to your `rclone.conf` (edit `tests/docker/rclone.conf` + and uncomment/fill the `pass =` lines, or run `rclone config` as above). + +2. Set `nas.remote` and optionally `nas.rclone_config_path` in your `config.yaml`: + +```yaml +nas: + remote: "nas01-sftp" # or nas01-smb + base_root: "" # runs land at nas01-sftp:// + rclone_config_path: "/path/to/tests/docker/rclone.conf" +``` + +3. Add equipment entries (no transport block needed): + +```yaml +equipment: + - id: EQ1 + label: Equipment 1 + local_root: /tmp/exlab-local + nas_root: /home/testuser/data # display value only + sync_mode: nas +``` + +4. Open Settings β†’ **NAS Remote** β†’ **Test connection** to verify the remote + is reachable before starting a sync. + +### TEST_-prefix mode + +Export `EXLAB_WIZARD_TEST_MODE=1` before launching the app to namespace +every `equipment[i].id` as `TEST_` (see +`apply_test_mode_prefix` in `src/exlab_wizard/config/loader.py`), so +writes land under `…/TEST_EQ1/…` and you can `rm -rf nas-data/TEST_*` +between runs without touching anything else. + +### Shorter quiescence window + +For interactive testing, shrink the settle window in your test +`config.yaml`: + +```yaml +sync: + quiescence_minutes: 0 # eligible immediately on next poll + poll_interval_seconds: 5 +``` + +## Lifecycle + +```bash +# from tests/docker/ +docker compose up -d # start (preserves nas-data/) +docker compose ps # confirm containers are healthy +docker compose logs -f nas-sftp # tail sshd logs +docker compose logs -f nas-smb # tail smbd logs + +docker compose down # stop, preserve data +docker compose down -v && rm -rf nas-data/* # full reset to empty NAS +``` + +## Pytest Fixture (optional) + +`tests/integration/test_nas_sync.py` exercises the queue / verifier state +machine via the **stub binary** (`tests/fixtures/stub_rclone.py`), which is +the right tool for fast unit-style coverage and runs in CI. This emulator +is for *higher-fidelity* manual runs that need the real `rclone` binary and +an actual SFTP/SMB handshake β€” it is **not** wired into CI. + +A minimal fixture pattern (add when the first such test needs it): + +```python +import shutil, subprocess +from pathlib import Path +import pytest + +EMULATOR = Path(__file__).resolve().parents[2] / "tests" / "docker" + +@pytest.fixture(scope="session") +def nas_emulator(): + if not shutil.which("docker"): + pytest.skip("docker not available") + subprocess.run( + ["docker", "compose", "up", "-d", "--build"], + cwd=EMULATOR, check=True, + ) + try: + yield { + "sftp": {"remote": "nas01-sftp", "rclone_conf": str(EMULATOR / "rclone.conf")}, + "smb": {"remote": "nas01-smb", "rclone_conf": str(EMULATOR / "rclone.conf")}, + } + finally: + subprocess.run(["docker", "compose", "down", "-v"], cwd=EMULATOR, check=False) +``` + +## Platform Notes + +**macOS** β€” Port 22 is held by the system SSH daemon and 445 by `smbd`. We +default to `2222` / `1445`; only change the host ports if they conflict. + +**Linux** β€” Ports `>=1024` work without root. If the docker socket is +restricted, add yourself to the `docker` group rather than `sudo` (the +`nas-data/` bind mount would otherwise end up root-owned). + +**Windows** β€” Run docker via Docker Desktop or WSL2. Connect via +`localhost:2222` / `localhost:1445`. + +## Offline / Air-Gapped Use + +```bash +# online machine +docker compose -f tests/docker/docker-compose.yml build +docker save exlab/nas-emulator-sftp:local exlab/nas-emulator-smb:local \ + | gzip > nas-emulator.tar.gz + +# target machine +docker load < nas-emulator.tar.gz +``` + +## Troubleshooting + +| Symptom | Likely cause / fix | +|------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------| +| Container exits immediately with `NAS_PASSWORD is empty` | Set `NAS_PASSWORD` in `tests/docker/.env` | +| `Permission denied` / auth fails from rclone | The `pass =` line in `rclone.conf` must be the `rclone obscure`-encoded form of `NAS_PASSWORD` | +| `Connection refused` on 2222 / 1445 | Port already bound; pick free ports via `SFTP_HOST_PORT` / `SMB_HOST_PORT` and update the rclone.conf host/port | +| rclone reports `auth_error` and the ExLab queue terminates at FAILED | Working as designed β€” the transport classifies auth failures as terminal (no retries) | +| Files appear under `nas-data/` but `sync_state.json` never flips | Check `sync.quiescence_minutes` β€” the per-file rollup needs a settled window before crediting files | +| `nas.remote` shows as `not_found_in_rclone_conf` in Settings | The remote name in `config.yaml` must match the stanza name in `rclone.conf` exactly | diff --git a/tests/docker/docker-compose.yml b/tests/docker/docker-compose.yml new file mode 100644 index 0000000..4ba83c2 --- /dev/null +++ b/tests/docker/docker-compose.yml @@ -0,0 +1,60 @@ +# Local password-based NAS emulator for ExLab-Wizard sync tests. +# Two backends for both rclone transport types: +# +# - SFTP: host=localhost port=${SFTP_HOST_PORT} user=${NAS_USER} password=${NAS_PASSWORD} +# - SMB: host=localhost port=${SMB_HOST_PORT} user=${NAS_USER} share=${SMB_SHARE} +# +# ExLab-Wizard uses operator-managed rclone named remotes (rclone.conf). +# Configure the remotes in tests/docker/rclone.conf, point nas.remote and +# nas.rclone_config_path in config.yaml at them, and run normally. +# See README.md for the full walkthrough. + +services: + + nas-sftp: + build: + context: . + dockerfile: Dockerfile + args: + NAS_USER: ${NAS_USER} + NAS_UID: ${NAS_UID} + NAS_GID: ${NAS_GID} + image: exlab/nas-emulator-sftp:local + container_name: exlab-nas-sftp + env_file: .env + ports: + - "${SFTP_HOST_PORT:-2222}:22" + volumes: + # Bind-mount so the host can inspect what the sync wrote. + - ./nas-data:/home/${NAS_USER}/data + restart: unless-stopped + healthcheck: + test: ["CMD", "sh", "-c", "ss -ltn | grep -q ':22 '"] + interval: 5s + timeout: 2s + retries: 5 + start_period: 3s + + nas-smb: + build: + context: . + dockerfile: Dockerfile.smb + args: + NAS_USER: ${NAS_USER} + NAS_UID: ${NAS_UID} + NAS_GID: ${NAS_GID} + SMB_SHARE: ${SMB_SHARE} + image: exlab/nas-emulator-smb:local + container_name: exlab-nas-smb + env_file: .env + ports: + - "${SMB_HOST_PORT:-1445}:445" + volumes: + - ./nas-data:/srv/${SMB_SHARE} + restart: unless-stopped + healthcheck: + test: ["CMD", "sh", "-c", "ss -ltn 2>/dev/null | grep -q ':445 '"] + interval: 5s + timeout: 2s + retries: 5 + start_period: 5s diff --git a/tests/docker/entrypoint.sh b/tests/docker/entrypoint.sh new file mode 100755 index 0000000..0dea7e8 --- /dev/null +++ b/tests/docker/entrypoint.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# Entrypoint for the password-based ExLab NAS (SFTP) emulator. +# - sets ${NAS_USER}'s password from ${NAS_PASSWORD} on every boot +# (so the secret lives only in the env / .env, never in the image) +# - generates host keys on first boot +# - execs sshd in the foreground +set -eu + +: "${NAS_USER:=testuser}" +: "${NAS_PASSWORD:=}" + +if [ -z "${NAS_PASSWORD}" ]; then + echo "[entrypoint] ERROR: NAS_PASSWORD is empty; set it in tests/docker/.env" >&2 + echo "[entrypoint] password auth cannot work without it." >&2 + exit 1 +fi + +# chpasswd reads 'user:password' on stdin; this unlocks the account and +# sets the cleartext password the rclone SFTP backend authenticates with. +echo "${NAS_USER}:${NAS_PASSWORD}" | chpasswd +echo "[entrypoint] set password for ${NAS_USER} (SFTP, password auth)" + +# Ensure host keys exist; idempotent. +ssh-keygen -A + +exec "$@" diff --git a/tests/docker/entrypoint.smb.sh b/tests/docker/entrypoint.smb.sh new file mode 100755 index 0000000..19b1ddc --- /dev/null +++ b/tests/docker/entrypoint.smb.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# Entrypoint for the password-based ExLab NAS (SMB) emulator. +# - registers ${NAS_USER} with Samba and sets its password from +# ${NAS_PASSWORD} on every boot (secret stays in env / .env) +# - execs smbd in the foreground +set -eu + +: "${NAS_USER:=testuser}" +: "${NAS_PASSWORD:=}" + +if [ -z "${NAS_PASSWORD}" ]; then + echo "[entrypoint] ERROR: NAS_PASSWORD is empty; set it in tests/docker/.env" >&2 + exit 1 +fi + +# smbpasswd needs the password twice on stdin; -s reads it silently. The +# Samba TDB lives in the container's writable layer and survives a +# `docker compose restart`, so `-a` (add) fails on the second boot and +# would crash-loop under `restart: unless-stopped`. Add on first boot, +# fall back to a plain password change on later boots -- both idempotent. +printf '%s\n%s\n' "${NAS_PASSWORD}" "${NAS_PASSWORD}" | smbpasswd -a -s "${NAS_USER}" 2>/dev/null \ + || printf '%s\n%s\n' "${NAS_PASSWORD}" "${NAS_PASSWORD}" | smbpasswd -s "${NAS_USER}" +smbpasswd -e "${NAS_USER}" +echo "[entrypoint] set Samba password for ${NAS_USER} (SMB, password auth)" + +exec "$@" diff --git a/tests/docker/nas-data/.gitkeep b/tests/docker/nas-data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/tests/docker/rclone.conf b/tests/docker/rclone.conf new file mode 100644 index 0000000..4d894ec --- /dev/null +++ b/tests/docker/rclone.conf @@ -0,0 +1,37 @@ +# rclone.conf for the dockerised SFTP/SMB NAS integration fixture. +# +# Points at the two compose services (nas-sftp / nas-smb). +# +# 1. Bring up the compose stack: +# docker compose -f tests/docker/docker-compose.yml up -d +# +# 2. Obscure the NAS password: +# rclone obscure changeme +# +# 3. Drop the output into the pass = lines below, then run: +# rclone --config tests/docker/rclone.conf lsd nas01-sftp: +# rclone --config tests/docker/rclone.conf lsd nas01-smb:labshare +# +# For the wizard: set nas.remote = "nas01-sftp" and +# nas.rclone_config_path = "" in config.yaml. +# The app uses the named remote directly; it injects no credentials. +# +# NEVER commit a real obscured password -- leave the pass lines as shown +# (commented out) so the file is safe to track in git. + +[nas01-sftp] +type = sftp +host = localhost +port = 2222 +user = testuser +# pass = +# Disable host-key verification against the ephemeral container. +known_hosts_file = /dev/null +shell_type = unix + +[nas01-smb] +type = smb +host = localhost +port = 1445 +user = testuser +# pass = diff --git a/tests/docker/rclone.conf.example b/tests/docker/rclone.conf.example new file mode 100644 index 0000000..43c6054 --- /dev/null +++ b/tests/docker/rclone.conf.example @@ -0,0 +1,39 @@ +# rclone.conf for the dockerised SFTP/SMB NAS integration fixture. +# +# Points at the two compose services (nas-sftp / nas-smb). +# +# Usage: +# +# 1. Bring up the compose stack: +# docker compose -f tests/docker/docker-compose.yml up -d +# +# 2. Obtain the obscured form of the container password (default: changeme): +# rclone obscure changeme +# +# 3. Fill in the pass = lines below with the output of step 2, then verify: +# rclone --config tests/docker/rclone.conf.example lsd nas01-sftp: +# rclone --config tests/docker/rclone.conf.example lsd nas01-smb:labshare +# +# For the wizard: set nas.remote = "nas01-sftp" (or "nas01-smb") and +# nas.rclone_config_path = "" in config.yaml. +# The app uses the named remote; it injects no credentials at run time. +# +# NEVER commit a real obscured password β€” leave the pass lines as shown +# (commented out) so the file is safe to track in git. + +[nas01-sftp] +type = sftp +host = localhost +port = 2222 +user = testuser +# pass = +# Disable host-key verification against the ephemeral container. +known_hosts_file = /dev/null +shell_type = unix + +[nas01-smb] +type = smb +host = localhost +port = 1445 +user = testuser +# pass = diff --git a/tests/e2e/_prod_app.py b/tests/e2e/_prod_app.py index 1f4cebc..6e64259 100644 --- a/tests/e2e/_prod_app.py +++ b/tests/e2e/_prod_app.py @@ -3,8 +3,8 @@ ``_test_app.py`` mounts a ``TestState``-backed surface for the flow tests. This module instead boots the real production app -- the same ``exlab_wizard.tray._build_default_app`` the tray uses -- so a -Playwright test can drive the genuine welcome -> settings -> save -> -restart-required flow built by ``exlab_wizard.ui.mount``. +Playwright test can drive the genuine welcome -> settings -> save flow +(applied live, no relaunch) built by ``exlab_wizard.ui.mount``. The e2e test spawns uvicorn against this factory with ``HOME`` pointed at a fresh tmp directory, so ``paths.os_config_path`` / diff --git a/tests/e2e/_prod_server.py b/tests/e2e/_prod_server.py index d9edbe6..5dd35b0 100644 --- a/tests/e2e/_prod_server.py +++ b/tests/e2e/_prod_server.py @@ -81,12 +81,14 @@ class ProdServer: because the port is fixed at construction. """ - def __init__(self, home: Path) -> None: + def __init__(self, home: Path, *, extra_env: dict[str, str] | None = None) -> None: self.home = home self.port = free_port() self.base_url = f"http://127.0.0.1:{self.port}" self._proc: subprocess.Popen[bytes] | None = None self._env = prod_app_env(home) + if extra_env: + self._env.update(extra_env) @property def config_path(self) -> Path: diff --git a/tests/e2e/_test_app.py b/tests/e2e/_test_app.py index 3d1afd4..c26d946 100644 --- a/tests/e2e/_test_app.py +++ b/tests/e2e/_test_app.py @@ -91,7 +91,10 @@ class TestState: selected_node_is_received: bool = False # Seeded folder-feed payload keyed by tree-node id; the test app # serves these as the centre-pane file list. - folder_feeds: dict[str, list[tuple[str, int, str | None]]] = field(default_factory=dict) + # Each row is a 3-tuple ``(name, size, sync)`` or a 5-tuple that + # additionally carries ``(keep_local, tombstone)`` -- the operator-free + # per-file NAS sync design (2026-05-21) added the latter two fields. + folder_feeds: dict[str, list[tuple[Any, ...]]] = field(default_factory=dict) # Seeded findings that the travelling-badge flow consumes (path β†’ tier). seeded_findings: list[tuple[str, str]] = field(default_factory=list) @@ -112,7 +115,10 @@ def _classify_test_node(node_id: str) -> tuple[str, bool]: classify cleanly. """ if "/" not in node_id: - if node_id.startswith("RELAY_"): + # The test-app seed prefixes every equipment id with ``TEST_`` + # to mirror the production test-mode convention; the embedded + # ``RELAY_`` marker still identifies a relayed (received) root. + if "RELAY_" in node_id: return "received_equipment", True return "equipment", False if "Run_" in node_id or "TestRun_" in node_id: @@ -134,7 +140,6 @@ def _seeded_metadata_payload(node_id: str | None, node_kind: str | None) -> dict "sync_mode": "stage" if "stage" in node_id else "nas", "local_root": "/data/lab", "nas_root": "//nas/lab", - "completeness_signal": "sentinel_file", } if node_kind == "received_equipment": return { @@ -168,30 +173,63 @@ def _seeded_metadata_payload(node_id: str | None, node_kind: str | None) -> dict return {} +# Default synthetic file-list feed. Operator-free per-file NAS sync +# design (2026-05-21): the rows exercise the five per-file display +# states -- a synced+kept-local file, an acquiring file, a syncing +# file, and an "On NAS" tombstone (cleared run, no local copy). Each +# tuple is (name, size|None, sync_status, keep_local, tombstone). +_DEFAULT_FEED_ROWS: list[tuple[str, int | None, str | None, bool, bool]] = [ + ("scan.tif", 1024, "synced", True, False), + ("metadata.json", 256, "acquiring", False, False), + ("frames.raw", 4096, "syncing", False, False), + ("archived.tif", None, "on_nas", False, True), +] + + +def _feed_rows( + test_state: TestState, node_id: str +) -> list[tuple[str, int | None, str | None, bool, bool]]: + """Return a node's feed as normalized 5-tuples. + + ``(name, size, sync_status, keep_local, tombstone)``. A seeded + 3-tuple ``(name, size, sync)`` is widened with ``keep_local=False`` + / ``tombstone=False`` for backward compatibility. + """ + seeded = test_state.folder_feeds.get(node_id) + if seeded is None: + return list(_DEFAULT_FEED_ROWS) + return [ + (row[0], row[1], row[2], False, False) + if len(row) == 3 + else (row[0], row[1], row[2], row[3], row[4]) + for row in seeded + ] + + def _seeded_file_entries(test_state: TestState, node_id: str | None) -> list[Any]: """Build the centre-pane file rows the test flows assert on. - Returns a default synthetic two-file feed unless the test seeded a - specific path via ``test_state.folder_feeds``. + Returns a default synthetic feed (covering every per-file display + state, including a keep-local file and an "On NAS" tombstone) unless + the test seeded a specific path via ``test_state.folder_feeds``. """ if node_id is None: return [] from exlab_wizard.ui.components.file_list import FileListEntry - rows = test_state.folder_feeds.get( - node_id, - [("scan.tif", 1024, "synced"), ("metadata.json", 256, "pending")], - ) + rows = _feed_rows(test_state, node_id) return [ FileListEntry( name=name, path=f"{node_id}/{name}", is_dir=False, size_bytes=size, - modified_iso="2026-05-14T09:22:00Z", + modified_iso=None if tombstone else "2026-05-14T09:22:00Z", sync_status=sync, + keep_local=keep_local, + tombstone=tombstone, ) - for (name, size, sync) in rows + for (name, size, sync, keep_local, tombstone) in rows ] @@ -274,19 +312,25 @@ def main_index( test_state.selected_node_kind = node_kind test_state.selected_node_is_received = is_received - # Hierarchy used by every /main test. Owned EQ1 carries the - # local + cleaned + test-run mix that flow 05b's sync-icon - # assertions depend on; the relay-flagged RELAY_EQX root - # surfaces the received-equipment row flow 18 / 24 target. + # Hierarchy used by every /main test. Owned TEST_EQ1 carries + # the local + cleaned + test-run mix that flow 05b's sync-icon + # assertions depend on; the relay-flagged TEST_RELAY_EQX root + # surfaces the received-equipment row flow 18 / 24 target. The + # ``TEST_`` prefix mirrors the production test-mode convention + # (see ``constants.TEST_MODE_PREFIX``) so the seeded display + # matches what a test-mode operator would see on the NAS. hierarchy: dict[Any, Any] = { - tree_component.EquipmentNode("EQ1", relay=False): { + tree_component.EquipmentNode("TEST_EQ1", relay=False): { tree_component.ProjectNode("LIMS-001", "Demo Project"): [ tree_component.RunNode("Run_2026-05-07", "experimental", "Demo run"), tree_component.RunNode( directory_name="Run_2026-05-06", run_kind="experimental", - label="Cleaned run", - sync_status="cleaned", + label="Cleared run", + # Operator-free per-file NAS sync design + # (2026-05-21): the run rollup is a RunSyncState + # value; ``cleared`` drives the cloud icon. + sync_status="cleared", ), tree_component.RunNode("TestRun_2026-05-07", "test", "Test run"), ], @@ -297,7 +341,7 @@ def main_index( # tree-node-run that would break flow_20 / flow_24's bare # ``.locator('[data-testid="tree-node-run"]')`` strict-mode # queries. - tree_component.EquipmentNode("RELAY_EQX", relay=True): { + tree_component.EquipmentNode("TEST_RELAY_EQX", relay=True): { tree_component.ProjectNode("PROJ-Relay", "Relayed Project"): [], }, } @@ -371,7 +415,22 @@ def _on_tree_context_action(node_id: str, action: str) -> None: ui.navigate.to(f"/settings?active=equipment&equipment_id={node_id}") def _on_file_context_action(entry: Any, action: str) -> None: + from exlab_wizard.ui.components.file_list import FILE_CONTEXT_KEEP_LOCAL + test_state.last_action = f"file.{action}:{entry.path}" + # Keep-local toggles the seeded feed and re-renders so the + # badge visibly flips; production routes the same action + # through SyncStateWriter.set_keep_local. + if action == FILE_CONTEXT_KEEP_LOCAL and selected_path is not None: + name = entry.path.rsplit("/", 1)[-1] + test_state.folder_feeds[selected_path] = [ + (n, s, sy, (not kl) if n == name else kl, ts) + for (n, s, sy, kl, ts) in _feed_rows(test_state, selected_path) + ] + qs = f"selected={selected_path}" + if right_pane: + qs += f"&right_pane={right_pane}" + ui.navigate.to(f"/main?{qs}") main_page.render_file_explorer_page( on_open_new_project=_on_open_new_project, @@ -404,7 +463,7 @@ def project_wizard_index() -> None: s = wizard_project_page.ProjectWizardState( selected_lims_short_id="LIMS-001", selected_template="default", - selected_equipment="EQ1", + selected_equipment="TEST_EQ1", template_variables={}, readme_fields={"label": "demo", "operator": "asmith", "objective": "demo run"}, ) @@ -412,7 +471,7 @@ def project_wizard_index() -> None: def _submit(state: wizard_project_page.ProjectWizardState) -> None: test_state.last_action = "wizard.project.submit" # Render a confirm-card stand-in so tests see the success path - ui.label("Project created at /tmp/data/EQ1/LIMS-001").props( + ui.label("Project created at /tmp/data/TEST_EQ1/LIMS-001").props( 'data-testid="wizard-project-success"' ) @@ -428,7 +487,7 @@ def run_wizard_index() -> None: s = wizard_run_page.RunWizardState( run_kind="experimental", selected_project_name="Demo Project", - selected_equipment="EQ1", + selected_equipment="TEST_EQ1", selected_template="default", template_variables={}, readme_fields={"label": "demo", "operator": "asmith", "objective": "demo run"}, @@ -450,7 +509,7 @@ def test_run_wizard_index() -> None: s = wizard_run_page.RunWizardState( run_kind="test", selected_project_name="Demo Project", - selected_equipment="EQ1", + selected_equipment="TEST_EQ1", selected_template="default", template_variables={}, readme_fields={"label": "demo", "operator": "asmith", "objective": "demo run"}, @@ -468,41 +527,46 @@ def _submit(state: wizard_run_page.RunWizardState) -> None: # Add-Equipment wizard (Flow 16 -- Redesign Β§6) # ---------------------------------------------------------------------- @ui.page("/wizard/equipment") - def wizard_equipment_index(step: str = "identity") -> None: - state = wizard_equipment_page.EquipmentWizardState( - active_step=step or "identity", - equipment_id="FLOW_99", - label="Flow Cytometer 99", - local_root="/data", - nas_root="/srv/nas", - rclone_remote="lab-nas", - rclone_remote_path="lab/FLOW_99", - sentinel_filename="done.flag", - ) - - def _advance(current: str) -> None: - idx = wizard_equipment_page.EQUIPMENT_WIZARD_STEPS.index(current) - if idx + 1 < len(wizard_equipment_page.EQUIPMENT_WIZARD_STEPS): - ui.navigate.to( - f"/wizard/equipment?step={wizard_equipment_page.EQUIPMENT_WIZARD_STEPS[idx + 1]}" - ) - - def _back(current: str) -> None: - idx = wizard_equipment_page.EQUIPMENT_WIZARD_STEPS.index(current) - if idx > 0: - ui.navigate.to( - f"/wizard/equipment?step={wizard_equipment_page.EQUIPMENT_WIZARD_STEPS[idx - 1]}" - ) + def wizard_equipment_index(step: str = "identity", seed: str = "1") -> None: + # The render layer now drives Next / Back internally, so this + # route wires the wizard exactly as production does -- one state, + # ``on_confirm`` / ``on_cancel`` only. ``seed=1`` (default) + # pre-fills a valid state so a step can be deep-linked and its + # render asserted; ``seed=0`` starts empty to exercise the real + # type -> Next -> advance path. + if seed == "0": + state = wizard_equipment_page.EquipmentWizardState(active_step=step or "identity") + else: + state = wizard_equipment_page.EquipmentWizardState( + active_step=step or "identity", + equipment_id="FLOW_99", + label="Flow Cytometer 99", + local_root="/data", + nas_root="/srv/nas", + sync_mode="nas", + ) def _confirm(eq: Any) -> None: + # Mirror the production confirm wiring (mount.py): merge via + # the shared helper and persist, rather than just stashing + # the raw equipment -- so this surface no longer masks the + # real append path. + from exlab_wizard.config.models import config_with_equipment_appended + from exlab_wizard.errors import ConfigError + + try: + merged = config_with_equipment_appended(test_state.config, eq) + except ConfigError as exc: + ui.label(f"Error: {exc}").props('data-testid="wizard-equipment-error"') + return + test_state.config = merged + test_state.saved_config = merged test_state.appended_equipment = eq test_state.last_action = "wizard.equipment.confirm" ui.label("Equipment added").props('data-testid="wizard-equipment-success"') wizard_equipment_page.render_wizard_equipment( state=state, - on_advance=_advance, - on_back=_back, on_confirm=_confirm, on_cancel=lambda: ui.navigate.to("/main"), ) @@ -575,10 +639,10 @@ def problems_index(seed: str = "", reset: int = 0) -> None: finding_id="F-1", severity=Tier.HARD, rule_class="Placeholder", - path="/data/EQ1/LIMS-001/Run_2026-05-07", + path="/data/TEST_EQ1/LIMS-001/Run_2026-05-07", matched_token="", run_label="Run_2026-05-07", - equipment="EQ1", + equipment="TEST_EQ1", detected_at="2026-05-07T10:00:00Z", state="Active", ), @@ -589,10 +653,10 @@ def problems_index(seed: str = "", reset: int = 0) -> None: finding_id="F-2", severity=Tier.HARD, rule_class="Missing field", - path="/data/EQ1/LIMS-001/Run_2026-05-07/.exlab-wizard/creation.json", + path="/data/TEST_EQ1/LIMS-001/Run_2026-05-07/.exlab-wizard/creation.json", matched_token="schema_version=2.0", run_label="Run_2026-05-07", - equipment="EQ1", + equipment="TEST_EQ1", detected_at="2026-05-07T10:00:00Z", state="Active", ), @@ -603,10 +667,10 @@ def problems_index(seed: str = "", reset: int = 0) -> None: finding_id="F-3", severity=Tier.HARD, rule_class="Orphan", - path="/data/EQ1/LIMS-001/Run_2026-05-07-orphan", + path="/data/TEST_EQ1/LIMS-001/Run_2026-05-07-orphan", matched_token="missing creation.json", run_label="Run_2026-05-07-orphan", - equipment="EQ1", + equipment="TEST_EQ1", detected_at="2026-05-07T10:00:00Z", state="Active", ), @@ -671,14 +735,14 @@ def _revoke(finding_id: str) -> None: # Staging dock (Flow 09) # ---------------------------------------------------------------------- @ui.page("/staging") - def staging_index(state: str = "staging") -> None: - from exlab_wizard.constants import IngestState + def staging_index(state: str = "none") -> None: from exlab_wizard.orchestrator.staging_query import StagedRunSummary + from exlab_wizard.sync.queue import SyncJobState rows = [ StagedRunSummary( - path="/staging/EQ1/LIMS-001/Run_2026-05-07", - equipment_id="EQ1", + path="/staging/TEST_EQ1/LIMS-001/Run_2026-05-07", + equipment_id="TEST_EQ1", project_name="LIMS-001", run_kind="experimental", current_state=state, @@ -691,11 +755,11 @@ def staging_index(state: str = "staging") -> None: def _force_sync(path: str) -> None: test_state.last_action = f"staging.force_sync:{path}" - ui.navigate.to(f"/staging?state={IngestState.SYNC_QUEUED.value}") + ui.navigate.to(f"/staging?state={SyncJobState.QUEUED.value}") def _clear(path: str) -> None: test_state.last_action = f"staging.clear:{path}" - ui.navigate.to(f"/staging?state={IngestState.CLEARED.value}") + ui.navigate.to(f"/staging?state={SyncJobState.CLEANED.value}") def _view_log(path: str) -> None: test_state.last_action = f"staging.view_log:{path}" diff --git a/tests/e2e/page_objects/wizard_equipment_page.py b/tests/e2e/page_objects/wizard_equipment_page.py index 4675a51..ee513c3 100644 --- a/tests/e2e/page_objects/wizard_equipment_page.py +++ b/tests/e2e/page_objects/wizard_equipment_page.py @@ -22,6 +22,10 @@ def equipment_id(self) -> Any: def label(self) -> Any: return self._page.locator('[data-testid="wizard-equipment-label"]') + @property + def step_paths(self) -> Any: + return self._page.locator('[data-testid="wizard-equipment-step-paths"]') + # Paths @property def local_root(self) -> Any: @@ -31,19 +35,20 @@ def local_root(self) -> Any: def nas_root(self) -> Any: return self._page.locator('[data-testid="wizard-equipment-nas-root"]') - # Sync mode + # Sync mode -- rclone.conf migration (Phase 8) removed the per-equipment + # SFTP/SMB transport fieldsets; the radio selects nas/stage only and the + # connection is the single nas: remote / orchestrator.staging_remote. @property def sync_mode(self) -> Any: return self._page.locator('[data-testid="wizard-equipment-sync-mode"]') - # Signal @property - def signal(self) -> Any: - return self._page.locator('[data-testid="wizard-equipment-signal"]') + def nas_note(self) -> Any: + return self._page.locator('[data-testid="wizard-equipment-nas-note"]') @property - def sentinel_filename(self) -> Any: - return self._page.locator('[data-testid="wizard-equipment-sentinel-filename"]') + def stage_note(self) -> Any: + return self._page.locator('[data-testid="wizard-equipment-stage-note"]') # Review / confirm @property @@ -58,6 +63,10 @@ def cancel(self) -> Any: def next_button(self) -> Any: return self._page.locator('[data-testid="wizard-equipment-next"]') + @property + def back(self) -> Any: + return self._page.locator('[data-testid="wizard-equipment-back"]') + @property def success(self) -> Any: return self._page.locator('[data-testid="wizard-equipment-success"]') diff --git a/tests/e2e/test_flow_00_fresh_install_setup.py b/tests/e2e/test_flow_00_fresh_install_setup.py index fcea5c3..19781cd 100644 --- a/tests/e2e/test_flow_00_fresh_install_setup.py +++ b/tests/e2e/test_flow_00_fresh_install_setup.py @@ -13,14 +13,15 @@ / -> /welcome -> (Get started) -> /settings -> fill paths + LIMS scalar fields -> Save - -> /restart-required gate + -> config applied live (no restart screen); operator stays on /settings -> config.yaml written under the tmp HOME with the entered values + -> /main is reachable in the same session (the old restart gate is gone) -The equipment / project / run / test-run / template creation flows are -NOT covered here: their wizard submit handlers in -``exlab_wizard/ui/mount.py`` are still toast-only stubs and no template -UX exists yet, so there is nothing functional to drive end-to-end. -Wiring those is tracked as follow-up feature work. +The project / run / test-run / template creation flows are NOT covered +here: their wizard submit handlers in ``exlab_wizard/ui/mount.py`` are +still toast-only stubs and no template UX exists yet. The Add-Equipment +wizard's confirm now persists for real -- that is exercised against the +production app in ``test_flow_26_equipment_wizard_persist.py``. """ from __future__ import annotations @@ -103,7 +104,7 @@ def fresh_prod_server(tmp_path: Path): proc.wait(timeout=5) -def test_fresh_install_setup_writes_config_and_gates_on_restart( +def test_fresh_install_setup_writes_config_and_applies_live( browser, fresh_prod_server, tmp_path: Path, @@ -146,12 +147,14 @@ def test_fresh_install_setup_writes_config_and_gates_on_restart( page.get_by_test_id("settings-lims-endpoint").fill("https://lims.example.test") page.get_by_test_id("settings-lims-email").fill("operator@example.test") - # 5. Save -> the wizard persists config.yaml and routes to the - # restart-required gate. + # 5. Save -> the wizard persists config.yaml and applies it live + # in-process. The "Settings saved" toast is the last step of the + # handler, so waiting for it guarantees the write + live reload + # completed. There is no restart screen. page.get_by_test_id("settings-save").click() - page.wait_for_load_state("networkidle") - page.get_by_test_id("restart-required").wait_for(state="visible", timeout=10_000) - assert "/restart-required" in page.url + page.get_by_text("Settings saved").wait_for(state="visible", timeout=10_000) + assert "/settings" in page.url + assert "/restart-required" not in page.url # 6. config.yaml now exists under the tmp HOME with the values # the operator entered. @@ -161,11 +164,13 @@ def test_fresh_install_setup_writes_config_and_gates_on_restart( assert "https://lims.example.test" in text assert "operator@example.test" in text - # 7. The restart gate is sticky: navigating elsewhere bounces - # back to /restart-required until the tray is relaunched. + # 7. The old restart gate is gone: /main renders in the same + # session, proving the saved config took effect without a + # relaunch. (Setup is still LIMS-password-incomplete, so the + # page shows its setup banner but is not blocked.) page.goto(f"{base_url}/main") page.wait_for_load_state("networkidle") - page.get_by_test_id("restart-required").wait_for(state="visible", timeout=10_000) - assert "/restart-required" in page.url + page.get_by_test_id("toolbar-new-project").wait_for(state="visible", timeout=10_000) + assert "/restart-required" not in page.url finally: context.close() diff --git a/tests/e2e/test_flow_00_full_lifecycle.py b/tests/e2e/test_flow_00_full_lifecycle.py index 8fc9208..9db6237 100644 --- a/tests/e2e/test_flow_00_full_lifecycle.py +++ b/tests/e2e/test_flow_00_full_lifecycle.py @@ -6,7 +6,7 @@ fresh install -> welcome -> settings (paths + LIMS + add equipment) -> Save - -> RESTART (config.yaml now drives the controller) + -> config applied live in-process (no restart needed) -> create a project template -> create a run template (experimental) -> create a run template (test scope) @@ -83,13 +83,6 @@ def _select( option.click() -def _pick_radio(page, group_testid: str, option_label: str, *, timeout: int = 8_000) -> None: - """Select a Quasar ``ui.radio`` option by its label within the group.""" - group = page.get_by_test_id(group_testid) - group.wait_for(state="attached", timeout=timeout) - group.get_by_text(option_label, exact=True).click() - - def _step_button( page, step_testid: str, @@ -144,10 +137,21 @@ def _goto(page, url: str, *, retries: int = 2) -> None: @pytest.fixture def prod_server(tmp_path: Path): - """Yield a started :class:`ProdServer` rooted at a fresh tmp HOME.""" + """Yield a started :class:`ProdServer` rooted at a fresh tmp HOME. + + The keyring is pinned to the encrypted-at-rest fallback so the + NAS-credential round-trip (rclone-only migration, 2026-05-26) is + deterministic and never prompts an OS keychain. + """ home = tmp_path / "home" home.mkdir() - server = ProdServer(home) + server = ProdServer( + home, + extra_env={ + "PYTHON_KEYRING_BACKEND": "keyring.backends.fail.Keyring", + "EXLAB_WIZARD_SECRET_PASSPHRASE": "e2e-lifecycle-passphrase", + }, + ) if not server.start(): pytest.skip("production wizard app did not become healthy within 30s") try: @@ -220,53 +224,52 @@ def test_full_create_lifecycle(browser, prod_server: ProdServer, tmp_path: Path) _fill(page, "settings-lims-offline-path", str(catalogue_path)) # ---- Phase 4: add equipment ------------------------------------ - # 4a. rclone transport + sentinel_file signal (the default radios). + # rclone.conf migration (Phase 8): the Settings equipment form no + # longer collects a per-equipment SFTP/SMB transport. A nas-mode + # device is created with just id/label/local_root/nas_root; the NAS + # connection is the single nas: remote (configured in rclone.conf). page.get_by_test_id("settings-nav-equipment").click() _fill(page, "settings-equipment-id", "MICROSCOPE1") _fill(page, "settings-equipment-label", "Confocal Microscope 1") _fill(page, "settings-equipment-local-root", str(data_root)) _fill(page, "settings-equipment-nas-root", "/srv/nas/microscope1") - _fill(page, "settings-equipment-sentinel", "acquisition_complete.flag") - _fill(page, "settings-equipment-rclone-remote", "lab-nas") - _fill(page, "settings-equipment-rclone-path", "lab/microscope1") page.get_by_test_id("settings-equipment-add").click() page.get_by_test_id("settings-equipment-row").first.wait_for(state="visible", timeout=8_000) - # 4b. rsync_ssh transport + manifest signal -- exercises the - # completeness-signal and transport radios swapping fields. + # 4b. a second nas-mode device -- same no-transport form. _fill(page, "settings-equipment-id", "SPECTROMETER1") _fill(page, "settings-equipment-label", "Mass Spectrometer 1") _fill(page, "settings-equipment-local-root", str(data_root)) _fill(page, "settings-equipment-nas-root", "/srv/nas/spectrometer1") - _pick_radio(page, "settings-equipment-signal", "manifest") - _fill(page, "settings-equipment-manifest", "manifest.json") - _pick_radio(page, "settings-equipment-transport", "rsync_ssh") - _fill(page, "settings-equipment-ssh-target", "operator@nas.example.test") - _fill(page, "settings-equipment-rsync-path", "/srv/nas/spectrometer1/incoming") page.get_by_test_id("settings-equipment-add").click() # Two equipment rows now present. page.wait_for_function( "document.querySelectorAll('[data-testid=\"settings-equipment-row\"]').length === 2" ) - # ---- Phase 5: save -> restart-required gate -------------------- + # ---- Phase 5: save -> config applied live (no restart) --------- + # The "Settings saved" toast is emitted only after the handler has + # persisted config.yaml and pushed it into the running components, + # so waiting for it is the deterministic completion signal. page.get_by_test_id("settings-save").click() - page.wait_for_load_state("networkidle") - page.get_by_test_id("restart-required").wait_for(state="visible", timeout=10_000) + page.get_by_text("Settings saved").wait_for(state="visible", timeout=10_000) + assert "/restart-required" not in page.url assert config_path.exists(), "Save must persist config.yaml" config_text = config_path.read_text(encoding="utf-8") assert "MICROSCOPE1" in config_text assert "SPECTROMETER1" in config_text - assert "rsync_ssh" in config_text - assert "manifest.json" in config_text assert str(data_root) in config_text - # ---- Phase 6: restart so the controller picks up the config ---- - assert server.restart(), "production app failed to come back up after restart" - # The old page holds a websocket to the now-dead server; a fresh - # page avoids the stale NiceGUI client racing the new boot. - page.close() - page = context.new_page() + # ---- Phase 6: verify NAS Remote section is present --------------- + # The two nas-mode equipment registered above leave the install in + # the INCOMPLETE_NO_NAS_REMOTE state (rclone.conf migration). + # The NAS Remote settings section (read-only) appears once equipment + # with sync_mode=NAS is present; the operator resolves the gate by + # running `rclone config` out-of-band and setting nas.remote in + # config.yaml. We verify the section nav is visible and can be clicked. + _goto(page, f"{server.base_url}/settings") + page.get_by_test_id("settings-dialog").wait_for(state="visible", timeout=10_000) + page.get_by_test_id("settings-nav-nas_remote").click() # ---- Phase 7: create a project template ------------------------ _goto(page, f"{server.base_url}/templates") diff --git a/tests/e2e/test_flow_01_onboarding.py b/tests/e2e/test_flow_01_onboarding.py index 5ff0544..04988f8 100644 --- a/tests/e2e/test_flow_01_onboarding.py +++ b/tests/e2e/test_flow_01_onboarding.py @@ -61,7 +61,7 @@ def test_flow_01_onboarding(page, server_url) -> None: page.locator('[data-testid="settings-paths-local-root"]').fill("/tmp/data") _goto(page, f"{server_url}/settings?incomplete=paths,equipment&active=equipment") - page.locator('[data-testid="settings-equipment-id"]').fill("EQ1") + page.locator('[data-testid="settings-equipment-id"]').fill("TEST_EQ1") page.locator('[data-testid="settings-equipment-add"]').click() # 5. Save and confirm setup banner clears. diff --git a/tests/e2e/test_flow_05_browse_view.py b/tests/e2e/test_flow_05_browse_view.py index be0b267..425121a 100644 --- a/tests/e2e/test_flow_05_browse_view.py +++ b/tests/e2e/test_flow_05_browse_view.py @@ -33,4 +33,4 @@ def test_flow_05_browse_view(page, server_url) -> None: main.footer_clear_verified.wait_for(state="visible") # Tree contains the seeded equipment label. - assert page.locator('[data-testid="main-tree"]').inner_text().find("EQ1") >= 0 + assert page.locator('[data-testid="main-tree"]').inner_text().find("TEST_EQ1") >= 0 diff --git a/tests/e2e/test_flow_05_browse_view_sync_icons.py b/tests/e2e/test_flow_05_browse_view_sync_icons.py index 84b3088..45d407b 100644 --- a/tests/e2e/test_flow_05_browse_view_sync_icons.py +++ b/tests/e2e/test_flow_05_browse_view_sync_icons.py @@ -3,8 +3,8 @@ Verifies that the project / equipment tree (Frontend Β§3.5) renders the correct SVG icon to the left of each run name based on its sync status: -* ``sync_status != "cleaned"`` (or absent) -> ``/assets/sync_local.svg`` -* ``sync_status == "cleaned"`` -> ``/assets/sync_cloud.svg`` +* rollup other than ``cleared`` (or absent) -> ``/assets/sync_local.svg`` +* rollup ``cleared`` -> ``/assets/sync_cloud.svg`` Also asserts the static asset mount actually serves the SVGs (200 OK) so a missing PyInstaller bundle entry would surface here. @@ -27,7 +27,7 @@ def test_flow_05_sync_icons_render_in_tree(page, server_url) -> None: # The seeded hierarchy in tests/e2e/_test_app.py contains: # - Run_2026-05-07 (local; sync_status=None) -> sync_local.svg - # - Run_2026-05-06 (cleaned; sync_status=cleaned) -> sync_cloud.svg + # - Run_2026-05-06 (cleared; sync_status=cleared) -> sync_cloud.svg # - TestRun_2026-05-07 (local; sync_status=None) -> sync_local.svg local_icons = tree.locator('img[src="/assets/sync_local.svg"]') cloud_icons = tree.locator('img[src="/assets/sync_cloud.svg"]') @@ -39,8 +39,8 @@ def test_flow_05_sync_icons_render_in_tree(page, server_url) -> None: # The cleaned-run icon's parent header carries the canonical sync_status # marker on the label span (set by the default-header slot template). cloud_header = cloud_icons.first.locator("xpath=..") - assert cloud_header.locator('span[data-sync-status="cleaned"]').count() == 1, ( - "cleaned run header missing data-sync-status='cleaned' marker" + assert cloud_header.locator('span[data-sync-status="cleared"]').count() == 1, ( + "cleared run header missing data-sync-status='cleared' marker" ) diff --git a/tests/e2e/test_flow_09_orchestrator.py b/tests/e2e/test_flow_09_orchestrator.py index f95acbd..6a10723 100644 --- a/tests/e2e/test_flow_09_orchestrator.py +++ b/tests/e2e/test_flow_09_orchestrator.py @@ -1,14 +1,15 @@ -"""E2E flow 09: Orchestrator staging panel + ingest.json watcher. +"""E2E flow 09: Orchestrator staging panel + quiescence-sync trigger. -Frontend Spec Β§6.8 (staging panel), Backend Spec Β§13 (orchestrator -mode + ingest.json contract). +Frontend Spec Β§6.8 (staging panel), Backend Spec Β§13 (orchestrator mode). +The operator-free per-file NAS sync redesign (2026-05-21) replaced the +``ingest.json`` five-state machine with the sync-queue job state. The flow: -1. Plant a staged run via the test app's ``/staging?state=staging`` route. -2. Verify the staging row renders with the right state pill. +1. Plant a staged run via the test app's ``/staging?state=none`` route. +2. Verify the staging row renders with its state pill. 3. Click ``Force sync`` and verify the row's state advances to - ``sync_queued``. + ``queued``. """ from __future__ import annotations @@ -18,14 +19,14 @@ def test_flow_09_orchestrator(page, server_url) -> None: staging = StagingPage(page) - page.goto(f"{server_url}/staging?state=staging") + page.goto(f"{server_url}/staging?state=none") page.wait_for_load_state("networkidle") staging.dock.wait_for(state="visible", timeout=10_000) staging.row(0).wait_for(state="visible", timeout=5_000) - assert "staging" in staging.row(0).inner_text().lower() + assert "none" in staging.row(0).inner_text().lower() staging.force_sync(0).click() page.wait_for_load_state("networkidle") staging.row(0).wait_for(state="visible", timeout=5_000) - assert "sync_queued" in staging.row(0).inner_text().lower() + assert "queued" in staging.row(0).inner_text().lower() diff --git a/tests/e2e/test_flow_16_add_equipment.py b/tests/e2e/test_flow_16_add_equipment.py index d4ca10c..78c5c70 100644 --- a/tests/e2e/test_flow_16_add_equipment.py +++ b/tests/e2e/test_flow_16_add_equipment.py @@ -1,7 +1,7 @@ """E2E flow 16: Add-Equipment wizard (Redesign Β§6). -Drives the five-step wizard end to end against the test app: -identity β†’ paths β†’ sync_mode β†’ signal β†’ review β†’ confirm. +Drives the four-step wizard end to end against the test app: +identity β†’ paths β†’ sync_mode β†’ review β†’ confirm. The test app mounts the wizard at ``/wizard/equipment?step=`` so each step can be loaded directly; the production navigation between @@ -12,6 +12,8 @@ from __future__ import annotations +from playwright.sync_api import expect + from tests.e2e.page_objects.wizard_equipment_page import WizardEquipmentPage @@ -54,14 +56,6 @@ def test_flow_16_add_equipment_sync_mode_step(page, server_url) -> None: wiz.sync_mode.wait_for(state="visible", timeout=10_000) -def test_flow_16_add_equipment_signal_step(page, server_url) -> None: - """Completeness signal step renders the radio + sentinel filename.""" - wiz = WizardEquipmentPage(page) - _goto(page, f"{server_url}/wizard/equipment?step=signal") - wiz.signal.wait_for(state="visible", timeout=10_000) - wiz.sentinel_filename.wait_for(state="visible") - - def test_flow_16_add_equipment_review_and_confirm(page, server_url) -> None: """Review step renders Confirm; clicking it fires the success label.""" wiz = WizardEquipmentPage(page) @@ -70,3 +64,33 @@ def test_flow_16_add_equipment_review_and_confirm(page, server_url) -> None: wiz.confirm.click() page.wait_for_load_state("networkidle") wiz.success.wait_for(state="visible", timeout=5_000) + + +def test_flow_16_next_enables_on_valid_input_and_state_survives_back(page, server_url) -> None: + """An empty wizard: Next stays disabled until the identity step is + valid, then a click advances *in place* and the entered data + survives a Back step. + + Regression guard for two production bugs the seeded ``?step=`` tests + could never see: the Next button's ``disable`` was frozen at render + time (typing never re-enabled it), and the route rebuilt a fresh + empty ``EquipmentWizardState`` on every step navigation. + """ + wiz = WizardEquipmentPage(page) + _goto(page, f"{server_url}/wizard/equipment?step=identity&seed=0") + wiz.step_identity.wait_for(state="visible", timeout=10_000) + + # Bug A: Next is gated shut until the step validates. + expect(wiz.next_button).to_be_disabled() + wiz.equipment_id.fill("TEST_EQ1") + wiz.label.fill("Lab Device") + expect(wiz.next_button).to_be_enabled() + + # Advancing re-renders in place -- no page navigation. + wiz.next_button.click() + wiz.step_paths.wait_for(state="visible", timeout=10_000) + + # Bug B: stepping back keeps what the operator already typed. + wiz.back.click() + wiz.step_identity.wait_for(state="visible", timeout=10_000) + expect(wiz.equipment_id).to_have_value("TEST_EQ1") diff --git a/tests/e2e/test_flow_17_picker_step.py b/tests/e2e/test_flow_17_picker_step.py index a958955..c1fd214 100644 --- a/tests/e2e/test_flow_17_picker_step.py +++ b/tests/e2e/test_flow_17_picker_step.py @@ -44,7 +44,7 @@ def test_flow_17_creation_buttons_disabled_on_received_node(page, server_url) -> # The click-then-navigate path races against Playwright's # networkidle wait under CI, where the URL doesn't change and the # state-mutation render may not finish before the assertion. - _goto(page, f"{server_url}/main?view=explorer&selected=RELAY_EQX") + _goto(page, f"{server_url}/main?view=explorer&selected=TEST_RELAY_EQX") for testid in ("toolbar-new-project", "toolbar-new-run", "toolbar-new-test-run"): btn = page.locator(f'[data-testid="{testid}"]') btn.wait_for(state="visible", timeout=10_000) diff --git a/tests/e2e/test_flow_18_relay_receive.py b/tests/e2e/test_flow_18_relay_receive.py index fdaf351..45abfb6 100644 --- a/tests/e2e/test_flow_18_relay_receive.py +++ b/tests/e2e/test_flow_18_relay_receive.py @@ -25,7 +25,7 @@ def test_flow_18_received_equipment_node_appears(page, server_url) -> None: _goto(page, f"{server_url}/main?view=explorer") node = page.locator('[data-testid="tree-node-received_equipment"]') node.wait_for(state="visible", timeout=10_000) - assert "RELAY_EQX" in node.inner_text() + assert "TEST_RELAY_EQX" in node.inner_text() def test_flow_18_received_metadata_shows_relay_badge(page, server_url) -> None: diff --git a/tests/e2e/test_flow_19_travelling_badge.py b/tests/e2e/test_flow_19_travelling_badge.py index e62657d..bf376e7 100644 --- a/tests/e2e/test_flow_19_travelling_badge.py +++ b/tests/e2e/test_flow_19_travelling_badge.py @@ -90,7 +90,7 @@ def test_flow_19_travelling_badge_aggregates_red(page, server_url) -> None: # test app reads. Falling back: the test app supports a ?seed= # query that the file-explorer view parses for findings. page.goto( - f"{server_url}/main?view=explorer&seed_finding=EQ1/PROJ-0001/Runs/Run_2026-05-14T09-22:hard", + f"{server_url}/main?view=explorer&seed_finding=TEST_EQ1/PROJ-0001/Runs/Run_2026-05-14T09-22:hard", wait_until="domcontentloaded", ) page.wait_for_load_state("networkidle") diff --git a/tests/e2e/test_flow_20_file_explorer.py b/tests/e2e/test_flow_20_file_explorer.py index e3ad790..627ec18 100644 --- a/tests/e2e/test_flow_20_file_explorer.py +++ b/tests/e2e/test_flow_20_file_explorer.py @@ -58,5 +58,5 @@ def test_flow_20_breadcrumb_is_present_when_node_selected(page, server_url) -> N page.wait_for_url(lambda url: "selected=" in url, timeout=10_000) page.locator('[data-testid="breadcrumb"]').wait_for(state="visible", timeout=5_000) segments = page.locator('[data-testid="breadcrumb-segment"]') - # selecting the run leaf gives EQ1 / Demo Project / Run_... + # selecting the run leaf gives TEST_EQ1 / Demo Project / Run_... assert segments.count() >= 1 diff --git a/tests/e2e/test_flow_24_context_menus.py b/tests/e2e/test_flow_24_context_menus.py index 22ad938..5209c13 100644 --- a/tests/e2e/test_flow_24_context_menus.py +++ b/tests/e2e/test_flow_24_context_menus.py @@ -57,7 +57,7 @@ def test_flow_24_edit_equipment_deep_links_into_settings(page, server_url) -> No page.locator('[data-testid="tree-context-edit-equipment"]').click() page.wait_for_url(lambda url: "/settings" in url, timeout=10_000) assert "active=equipment" in page.url - assert "equipment_id=EQ1" in page.url + assert "equipment_id=TEST_EQ1" in page.url def test_flow_24_remove_equipment_deep_links_into_settings(page, server_url) -> None: @@ -95,13 +95,59 @@ def test_flow_24_run_context_menu_items_render(page, server_url) -> None: def test_flow_24_file_list_row_context_menu(page, server_url) -> None: - """Right-clicking a file-list row surfaces Open in OS + Copy path.""" + """Right-clicking a file-list row surfaces Open in OS / Copy path / Keep local.""" _goto(page, f"{server_url}/main?view=explorer") # Select a run so the centre pane renders the seeded file list. page.locator('[data-testid="tree-node-run"]').first.click() page.wait_for_load_state("networkidle") - row = page.locator('[data-testid="file-list-row"]').first + # A non-tombstone row carries all three actions. + row = page.locator('[data-testid="file-list-row"]:not([data-tombstone])').first row.wait_for(state="visible", timeout=10_000) _open_context(page, row) page.locator('[data-testid="file-context-open-in-os"]').wait_for(state="visible", timeout=5_000) page.locator('[data-testid="file-context-copy-path"]').wait_for(state="visible", timeout=5_000) + page.locator('[data-testid="file-context-keep-local"]').wait_for(state="visible", timeout=5_000) + + +def test_flow_24_tombstone_row_has_no_open_in_os(page, server_url) -> None: + """An "On NAS" tombstone row has no local copy, so no Open-in-OS action. + + Operator-free per-file NAS sync design (2026-05-21): a cleared-run + file is listed as an "On NAS" tombstone -- it cannot be opened, but + Copy path / Keep local stay available. + """ + _goto(page, f"{server_url}/main?view=explorer") + page.locator('[data-testid="tree-node-run"]').first.click() + page.wait_for_load_state("networkidle") + tombstone = page.locator('[data-testid="file-list-row"][data-tombstone="true"]').first + tombstone.wait_for(state="visible", timeout=10_000) + _open_context(page, tombstone) + page.locator('[data-testid="file-context-copy-path"]').wait_for(state="visible", timeout=5_000) + page.locator('[data-testid="file-context-keep-local"]').wait_for(state="visible", timeout=5_000) + # The tombstone's own context menu carries no Open-in-OS item. + menu = page.locator('[data-testid="file-context-menu"]').last + assert menu.locator('[data-testid="file-context-open-in-os"]').count() == 0 + + +def test_flow_24_keep_local_badge_and_toggle(page, server_url) -> None: + """A keep-local file shows the "kept local" badge; the toggle action fires. + + Operator-free per-file NAS sync design (2026-05-21): a ``keep_local`` + file carries a small badge and its context menu offers "Don't keep + local". Clicking the keep-local item dispatches the action without + raising (the round trip to ``set_keep_local`` is covered by the unit + tests). + """ + _goto(page, f"{server_url}/main?view=explorer") + page.locator('[data-testid="tree-node-run"]').first.click() + page.wait_for_load_state("networkidle") + # The default seeded feed has exactly one keep-local file. + badge = page.locator('[data-testid="file-keep-local-badge"]') + badge.first.wait_for(state="visible", timeout=10_000) + assert badge.count() == 1 + kept_row = page.locator('[data-testid="file-list-row"][data-keep-local="true"]').first + kept_row.wait_for(state="visible", timeout=5_000) + _open_context(page, kept_row) + item = page.locator('[data-testid="file-context-keep-local"]').last + item.wait_for(state="visible", timeout=5_000) + item.click() # dispatches the keep-local toggle action without error diff --git a/tests/e2e/test_flow_25_production_main_wiring.py b/tests/e2e/test_flow_25_production_main_wiring.py index 74a09aa..dc05cef 100644 --- a/tests/e2e/test_flow_25_production_main_wiring.py +++ b/tests/e2e/test_flow_25_production_main_wiring.py @@ -93,10 +93,10 @@ def test_flow_25_select_node_threads_selected_into_url(page, server_url) -> None def test_flow_25_selected_query_renders_centre_and_right_panes(page, server_url) -> None: - """Loading /main?selected=EQ1 directly renders the centre + right panes.""" - _goto(page, f"{server_url}/main?selected=EQ1") + """Loading /main?selected=TEST_EQ1 directly renders the centre + right panes.""" + _goto(page, f"{server_url}/main?selected=TEST_EQ1") # Centre pane: seeded folder feed shows the default two rows when no - # specific path is seeded for EQ1. + # specific path is seeded for TEST_EQ1. page.locator('[data-testid="file-list-row"]').first.wait_for(state="visible", timeout=5_000) # Right pane (metadata tab) renders with the equipment payload. page.locator('[data-testid="metadata-pane"]').wait_for(state="visible", timeout=5_000) @@ -109,7 +109,7 @@ def test_flow_25_breadcrumb_navigation_re_navigates_main(page, server_url) -> No clickable; wired to the same callback as on_select_node so the URL flow is identical. """ - _goto(page, f"{server_url}/main?selected=EQ1/Demo Project") + _goto(page, f"{server_url}/main?selected=TEST_EQ1/Demo Project") page.locator('[data-testid="breadcrumb"]').wait_for(state="visible", timeout=5_000) segments = page.locator('[data-testid="breadcrumb-segment"]') assert segments.count() >= 1 @@ -120,7 +120,7 @@ def test_flow_25_breadcrumb_navigation_re_navigates_main(page, server_url) -> No def test_flow_25_toggle_right_pane_toggles_query_param(page, server_url) -> None: """Clicking the right-pane toggle flips ?right_pane=collapsed in the URL.""" - _goto(page, f"{server_url}/main?selected=EQ1") + _goto(page, f"{server_url}/main?selected=TEST_EQ1") page.locator('[data-testid="toggle-right-pane"]').wait_for(state="visible", timeout=5_000) page.locator('[data-testid="toggle-right-pane"]').click() page.wait_for_url(lambda url: "right_pane=collapsed" in url, timeout=10_000) @@ -139,17 +139,19 @@ def test_flow_25_tree_context_action_deep_links_into_settings(page, server_url) eq.wait_for(state="visible", timeout=10_000) eq.click(button="right") page.locator('[data-testid="tree-context-edit-equipment"]').click() - page.wait_for_url(lambda url: "/settings" in url and "equipment_id=EQ1" in url, timeout=10_000) + page.wait_for_url( + lambda url: "/settings" in url and "equipment_id=TEST_EQ1" in url, timeout=10_000 + ) def test_flow_25_received_equipment_disables_creation_buttons(page, server_url) -> None: - """Selecting a RELAY_* node disables the New Project/Run/Test-Run buttons. + """Selecting a TEST_RELAY_* node disables the New Project/Run/Test-Run buttons. Verifies MainPageState.selected_node_is_received flows from the URL -> _classify_node -> render_file_explorer_page's disable logic (Redesign Β§3.3 / decision 1). """ - _goto(page, f"{server_url}/main?selected=RELAY_EQX") + _goto(page, f"{server_url}/main?selected=TEST_RELAY_EQX") # Quasar's q-btn ``disable`` prop renders as ``aria-disabled="true"`` # on the wrapper element; the inner